From e2ac38c5c5c04575f77e3b6411c36768f40b7ff4 Mon Sep 17 00:00:00 2001 From: Thomas Parisot Date: Mon, 12 Nov 2018 13:29:55 +0100 Subject: [PATCH 01/19] =?UTF-8?q?fix(appendix-a):=20met=20=C3=A0=20jour=20?= =?UTF-8?q?htmlhint@0.10.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appendix-a/index.adoc | 22 ++++++++++++++++------ appendix-a/package-lock.json | 4 ++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/appendix-a/index.adoc b/appendix-a/index.adoc index ffade4e9..caa6cd4b 100644 --- a/appendix-a/index.adoc +++ b/appendix-a/index.adoc @@ -396,12 +396,22 @@ suivantes : ---- $ ../node_modules/.bin/htmlhint sample.html -sample.html: -line 1, col 1: Doctype must be first. -line 8, col 10: Id redefinition of [ btn ]. -line 10, col 3: Tagname [ BUTTON ] must be lower case. -... -line 10, col 52: Tagname [ BUTTON ] must be lower case. +examples/sample.html + L1 | + ^ Doctype must be declared first. (doctype-first) + L4 | + ^ must be present in <head> tag. (title-require) + L8 | <button id="btn" class="btn">KO</button> + ^ The id value [ btn ] must be unique. (id-unique) + L10 | <BUTTON class='btn__primary--curent btn--active'></BUTTON> + ^ The html element name of [ BUTTON ] must be in lowercase. + (tagname-lowercase) + L10 | class='btn__primary--curent btn--active'></BUTTON> + ^ The value of attribute [ class ] must be in double quotes. + (attr-value-double-quotes) + L10 |...></BUTTON> + ^ The html element name of [ BUTTON ] must be in lowercase. + (tagname-lowercase) ---- === eslint diff --git a/appendix-a/package-lock.json b/appendix-a/package-lock.json index fb55de1a..2fd17824 100644 --- a/appendix-a/package-lock.json +++ b/appendix-a/package-lock.json @@ -2929,13 +2929,13 @@ }, "entities": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "optional": true }, "htmlparser2": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "optional": true, "requires": { From 5b435a6fff08e9cb8a4eb4e231d4f7bfa18e6cec Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 31 Dec 2018 12:39:39 +0100 Subject: [PATCH 02/19] =?UTF-8?q?fix(chapter-05):=20correction=20de=20l'in?= =?UTF-8?q?titul=C3=A9=20de=20l'ouvrage=20dans=20un=20exemple?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter-03/examples/json/base.json | 2 +- chapter-05/index.adoc | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/chapter-03/examples/json/base.json b/chapter-03/examples/json/base.json index f217f8ce..73c0bf56 100644 --- a/chapter-03/examples/json/base.json +++ b/chapter-03/examples/json/base.json @@ -4,6 +4,6 @@ "keywords": [ "JavaScript", "Node.js", - "Apprendre par l'exemple" + "Apprendre par la pratique" ] } diff --git a/chapter-05/index.adoc b/chapter-05/index.adoc index a75d9a0b..33efa36b 100644 --- a/chapter-05/index.adoc +++ b/chapter-05/index.adoc @@ -1378,29 +1378,29 @@ ainsi que d'autres, fournies par le registre{nbsp}``npm``. ---- $ npm view nodebook -nodebook@0.9.1 | CC-BY-NC-SA-4.0 | deps: 6 | versions: 21 -Node.js – Apprendre par l'exemple +nodebook@2.0.0 | CC-BY-NC-SA-4.0 | deps: 6 | versions: 39 +Node.js • Apprendre par la pratique keywords: nodejs, book, french, livre, learn, apprendre bin: nodebook dist -.tarball https://registry.npmjs.org/nodebook/nodebook-0.9.1.tgz +.tarball https://registry.npmjs.org/nodebook/nodebook-2.0.0.tgz .shasum: 5ea87e9b85782e23164705a49cb7bd2dc4063775 .integrity: sha512-... -.unpackedSize: 15.0 MB +.unpackedSize: 15.8 MB dependencies: finalhandler: ^1.1.1 serve-static: ^1.13.2 -get-port: ^3.2.0 update-check: ^1.5.2 -glob: ^7.1.2 yargs: ^11.1.0 +get-port: ^4.0.0 update-check: ^1.5.2 +glob: ^7.1.3 yargs: ^12.0.5 maintainers: - oncletom dist-tags: -latest: 0.9.1 +latest: 2.0.0 published 23 hours ago by oncletom ---- From ce89ae648dbab5ac94db0fef6134b0dbea6d94e8 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Wed, 17 Apr 2019 18:50:23 +0200 Subject: [PATCH 03/19] =?UTF-8?q?feat(chapter-02):=20mise=20=C3=A0=20jour?= =?UTF-8?q?=20du=20calendrier=20des=20releases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix #343 via la commande `npm run update:schedule` --- .gitignore | 1 + chapter-02/images/schedule.png | Bin 31365 -> 52388 bytes chapter-02/index.adoc | 2 +- package.json | 3 ++- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e86d4c6c..0997efca 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ debug.txt stdout.txt stderr.txt +chapter-02/schedule.json chapter-04/examples/stream/copie.js chapter-07/examples/framework/assets/main.css chapter-07/examples/sessions diff --git a/chapter-02/images/schedule.png b/chapter-02/images/schedule.png index 928b0bfb4e584cc85a1dc690d940a5c4e9c3409b..35453432eff6b7b1398e9119ebcb763f6b248030 100644 GIT binary patch literal 52388 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 KER!$^{=Wbt2*a=d literal 31365 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 W#?7vR{DdDk4U!U*7cG2d;QN1V>y_RB diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index c63d3900..7da2c8db 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -918,7 +918,7 @@ Les autres versions sont à voir comme des coups d'essai, dans l'anticipation d' vers une version suivante, maintenue à long terme. .Calendrier de publication des versions de Node -image::images/schedule.png[width="85%",link="https://github.com/nodejs/Release/blob/master/schedule.png"] +image::images/schedule.png[width="85%",link="https://github.com/nodejs/Release/blob/master/schedule.svg"] [NOTE] .[RemarquePreTitre]#Lien# Calendrier de sorties diff --git a/package.json b/package.json index e3a944ab..796f9240 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "test": "tape 'tests/*.js'", "test:docker": "docker run -ti --rm -v $(pwd):/tests -e CI=1 -e DEBUG=tape-spawn -w /tests node:${npm_package_engines_node}-slim npm cit", "posttest": "npm run lint", - "postinstall": "node bin/cli.js --help" + "postinstall": "node bin/cli.js --help", + "update:schedule": "curl -sSL https://github.com/nodejs/Release/raw/master/schedule.json > chapter-02/schedule.json && npx lts -d $PWD/chapter-02/schedule.json --start $(gdate -d '2 months ago' +'%Y-%m-%d') --end $(gdate -d '2 years' +'%Y-%m-%d') --png chapter-02/images/schedule.png" }, "engines": { "node": "10", From c4e12075b0895151cfa110e712907b0901ce262a Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 18:48:17 +0200 Subject: [PATCH 04/19] =?UTF-8?q?feat(npm):=20d=C3=A9ploie=20la=20v2=20en?= =?UTF-8?q?=20avant-premi=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 92e7a87c..4ca79dc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,9 +83,18 @@ deploy: - provider: npm tag: next skip-cleanup: true + tag: latest on: tags: true all-branches: true condition: $TRAVIS_BRANCH =~ ^v2. email: "hi@oncletom.io" api-key: "$NPM_TOKEN" + - provider: npm + skip-cleanup: true + tag: next + on: + tags: true + branch: v2 + email: "hi@oncletom.io" + api-key: "$NPM_TOKEN" From 17a001d0920d0d3755d49c49db4abb26f3d7b36d Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 18:51:41 +0200 Subject: [PATCH 05/19] 2.0.0-alpha.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb32ed89..3c90fc2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "1.0.10", + "version": "2.0.0-alpha.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 796f9240..5fae03cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "1.0.10", + "version": "2.0.0-alpha.1", "description": "Node.js • Apprendre par la pratique.\nFamiliarisez-vous avec JavaScript, Node.js et l'écosystème de modules npm.\nApprenez à concevoir et à déployer des *applications web* et des *outils en ligne de commande*.", "bin": { "nodebook": "./bin/cli.js" From 346b4261f222d47b4ec3eab871364e0ed3b981a4 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 19:02:26 +0200 Subject: [PATCH 06/19] =?UTF-8?q?feat(chapter-02):=20nouvelle=20URL=20pour?= =?UTF-8?q?=20nvm=20et=20http->https=20l=C3=A0=20o=C3=B9=20il=20faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter-02/index.adoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index 7da2c8db..6dbcba08 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -163,7 +163,7 @@ Si vous venez d'un autre univers de programmation, `nvm` est l'équivalent de `rvm` ou `rbenv` dans le monde Ruby, de `phpenv` dans le monde PHP ou encore de `virtualenv` pour Python. -Le programme s'obtient à l'adresse suivante : [URL]#https://github.com/creationix/nvm#. +Le programme s'obtient à l'adresse suivante : [URL]#https://github.com/nvm-sh/nvm#. [TIP, id="nvm-windows"] .[RemarquePreTitre]#Alternatives# `nvm` pour{nbsp}Windows @@ -183,7 +183,7 @@ pour fonctionner. [subs="+attributes"] .Commande d'installation du logiciel nvm{nbsp}{nvmVersion} ---- -$ curl -L https://github.com/creationix/nvm/raw/{nvmVersion}/install.sh | bash +$ curl -L https://github.com/nvm-sh/nvm/raw/{nvmVersion}/install.sh | bash ---- [TIP] @@ -374,7 +374,7 @@ Node va interpréter ; - menu:Node.js[Node.js command prompt] : un terminal pour exécuter nos programmes écrits en JavaScript. -Si vous utilisez déjà un gestionnaire de paquets comme Scoop ([URL]#http://scoop.sh#) +Si vous utilisez déjà un gestionnaire de paquets comme Scoop ([URL]#https://scoop.sh#) ou Chocolatey ([URL]#https://chocolatey.org#), le chemin d'installation vers Node s'en trouvera réduit à une simple commande : @@ -504,7 +504,7 @@ Plusieurs variantes d'images Node se trouvent à notre disposition : [Menu]#Debian# (`node:{v}-wheezy`):: Comme [Menu]#standard# mais sur des bases Debian différentes, comme Wheezy, Stretch, etc.. [Menu]#Alpine# (`node:{v}-alpine`):: - Distribution spécialement créée pour Docker ([URL]#http://alpinelinux.org#), qui pèse à peine quelques{nbsp}Mo. + Distribution spécialement créée pour Docker ([URL]#https://alpinelinux.org#), qui pèse à peine quelques{nbsp}Mo. [Menu]#Allégée# (`node:{v}-slim`):: Base Linux Debian sans outillage parfois nécessaire à des modules Node – utile si vous souhaitez économiser de l'espace disque. @@ -622,7 +622,7 @@ image::images/atom.png[width="85%"] Atom ([URL]#https://atom.io#) est un éditeur de code open-source, multilingue et multi plate-forme, dont le développement a été lancé -par la société commerciale GitHub ([URL]#http://github.com#). +par la société commerciale GitHub ([URL]#https://github.com#). Le logiciel est basé sur Electron, un environnement d'exécution d'applications de bureau reposant sur les technologies web et sur{nbsp}Node ! From 613b6879522ade4feb96a89c764517dfe02bc6c9 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 6 May 2019 06:55:39 +0200 Subject: [PATCH 07/19] 2.0.0-alpha.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c90fc2e..92afbd6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "2.0.0-alpha.1", + "version": "2.0.0-alpha.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5fae03cd..fef2c310 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nodebook", - "version": "2.0.0-alpha.1", + "version": "2.0.0-alpha.2", "description": "Node.js • Apprendre par la pratique.\nFamiliarisez-vous avec JavaScript, Node.js et l'écosystème de modules npm.\nApprenez à concevoir et à déployer des *applications web* et des *outils en ligne de commande*.", "bin": { "nodebook": "./bin/cli.js" From b67b5a47a03a525b223d7ffe39337b7da9108a56 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 6 May 2019 07:05:06 +0200 Subject: [PATCH 08/19] =?UTF-8?q?fix(ci):=20corrige=20le=20d=C3=A9ploiemen?= =?UTF-8?q?t=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [skip ci] --- .travis.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ca79dc4..92e7a87c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,18 +83,9 @@ deploy: - provider: npm tag: next skip-cleanup: true - tag: latest on: tags: true all-branches: true condition: $TRAVIS_BRANCH =~ ^v2. email: "hi@oncletom.io" api-key: "$NPM_TOKEN" - - provider: npm - skip-cleanup: true - tag: next - on: - tags: true - branch: v2 - email: "hi@oncletom.io" - api-key: "$NPM_TOKEN" From bbdde1cefdb2135abbf33dbed24658fb7e1e07e9 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 5 May 2019 18:48:17 +0200 Subject: [PATCH 09/19] =?UTF-8?q?feat(npm):=20d=C3=A9ploie=20la=20v2=20en?= =?UTF-8?q?=20avant-premi=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 92e7a87c..4ca79dc4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,9 +83,18 @@ deploy: - provider: npm tag: next skip-cleanup: true + tag: latest on: tags: true all-branches: true condition: $TRAVIS_BRANCH =~ ^v2. email: "hi@oncletom.io" api-key: "$NPM_TOKEN" + - provider: npm + skip-cleanup: true + tag: next + on: + tags: true + branch: v2 + email: "hi@oncletom.io" + api-key: "$NPM_TOKEN" From d908aa0e063f87aa6bfa0f941924d8274881e1cf Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Tue, 23 Apr 2019 19:45:53 +0200 Subject: [PATCH 10/19] Node.js v12 --- .travis.yml | 6 +- README.md | 2 +- appendix-a/index.adoc | 2 +- appendix-a/package-lock.json | 51 +++-- appendix-a/package.json | 2 +- appveyor.yml | 6 +- chapter-01/index.adoc | 6 +- chapter-02/index.adoc | 12 +- chapter-03/index.adoc | 2 +- chapter-04/index.adoc | 6 +- chapter-05/index.adoc | 4 +- chapter-06/index.adoc | 6 +- chapter-07/examples/upload/send.js | 13 -- chapter-07/index.adoc | 2 +- chapter-07/package-lock.json | 332 ++++++++++++++++++----------- chapter-07/package.json | 6 +- chapter-08/index.adoc | 2 +- chapter-09/index.adoc | 2 +- package.json | 2 +- tests/examples-config.js | 3 - 20 files changed, 263 insertions(+), 204 deletions(-) delete mode 100644 chapter-07/examples/upload/send.js diff --git a/.travis.yml b/.travis.yml index 4ca79dc4..2ff7ddc9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,4 @@ -dist: trusty -sudo: false - +dist: xenial language: node_js cache: npm @@ -10,7 +8,7 @@ addons: packages: - libxml2-utils -node_js: v10 +node_js: v12 env: - npm_version=6 DEBUG=tape-spawn diff --git a/README.md b/README.md index cc59ba23..392498a6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ des *outils en ligne de commande*. > > Plus de 500 exemples pour apprendre en pratiquant. -✅ **Versions couvertes** • `node v10` • `npm v6`.<br> +✅ **Versions couvertes** • `node v12` • `npm v6`.<br> 📖 **Journal de bord d'écriture** • [2018][journal-2018] • [2017][journal-2017].<br> 🔎 **Lire l'ouvrage** • [sur papier](#sur-papier) • [sur liseuse numérique](#sur-liseuse-numérique) • [sur le web](#sur-le-web) • [sur npm](#avec-nodejs). diff --git a/appendix-a/index.adoc b/appendix-a/index.adoc index caa6cd4b..fbf53e63 100644 --- a/appendix-a/index.adoc +++ b/appendix-a/index.adoc @@ -1,7 +1,7 @@ :appendix-number: A :chapterId: appendix-a :sectnums: -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :revdate: {docdate} :sourceDir: ./examples diff --git a/appendix-a/package-lock.json b/appendix-a/package-lock.json index 2fd17824..79546c88 100644 --- a/appendix-a/package-lock.json +++ b/appendix-a/package-lock.json @@ -119,7 +119,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -2929,13 +2929,13 @@ }, "entities": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "optional": true }, "htmlparser2": { "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "optional": true, "requires": { @@ -3481,8 +3481,7 @@ "nan": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "optional": true + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" }, "nanomatch": { "version": "1.2.13", @@ -3526,22 +3525,27 @@ "optional": true }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz", + "integrity": "sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==", "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, @@ -3573,9 +3577,9 @@ }, "dependencies": { "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4926,20 +4930,13 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlite3": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.6.tgz", - "integrity": "sha512-EqBXxHdKiwvNMRCgml86VTL5TK1i0IKiumnfxykX0gh6H6jaKijAXvE9O1N7+omfNSawR2fOmIyJZcfe8HYWpw==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.7.tgz", + "integrity": "sha512-TGEeSBB8O48bEu8KUUMqzeB22WrfTxzhIf0lFm8wLTo3a6yJBonF2sPKMYrYtOne1F1t9AHAEn+DTISq8WebQg==", "requires": { - "nan": "~2.10.0", + "nan": "^2.12.1", "node-pre-gyp": "^0.11.0", "request": "^2.87.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } } }, "sshpk": { diff --git a/appendix-a/package.json b/appendix-a/package.json index 5bc714e7..c3ae6f6c 100644 --- a/appendix-a/package.json +++ b/appendix-a/package.json @@ -41,7 +41,7 @@ "restify-errors": "^6.1.1", "sanitize-filename": "^1.6.1", "sinon": "^1.10.3", - "sqlite3": "^4.0.6", + "sqlite3": "^4.0.7", "tape": "^4.10.1", "tcomb": "^3.2.29" } diff --git a/appveyor.yml b/appveyor.yml index 08bba3b0..8986a102 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,14 +2,14 @@ image: Visual Studio 2017 environment: matrix: - - nodejs_version: '10' + - nodejs_version: '12' + PLATFORM: 'x64' npm_version: '6' DEBUG: 'tape-spawn' SHARP_IGNORE_GLOBAL_LIBVIPS: '1' install: - - ps: Install-Product node $env:nodejs_version x64 -# - ps: npm install -g "npm@${env:npm_version}" + - ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:PLATFORM - npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" - npm config set prefer-offline true - npm install diff --git a/chapter-01/index.adoc b/chapter-01/index.adoc index d04db25a..d1f6763a 100644 --- a/chapter-01/index.adoc +++ b/chapter-01/index.adoc @@ -1,10 +1,10 @@ :chapter-number: 1 :chapterId: chapter-01 :sourceDir: ./examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 -:npmModulesCount: 782{nbsp}000 -:nodeContributorsCount: 2{nbsp}000 +:npmModulesCount: 967{nbsp}000 +:nodeContributorsCount: 2{nbsp}400 :sectnums: :revdate: {docdate} :imagesdir: {indir} diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index 6dbcba08..8adc0c2c 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -2,12 +2,12 @@ :chapterId: chapter-02 :sourceDir: ./examples :npmCurrentVersion: v6 -:nodeCurrentVersion: v10 -:nodePrevVersion: v9 -:nodeV: 10.9.0 -:vNext: 11 -:v: 10 -:nvmVersion: v0.33.11 +:nodeCurrentVersion: v12 +:nodePrevVersion: v11 +:nodeV: 12.0.0 +:vNext: 13 +:v: 12 +:nvmVersion: v0.34.0 :sectnums: :revdate: {docdate} :imagesdir: {indir} diff --git a/chapter-03/index.adoc b/chapter-03/index.adoc index ed8ed34a..e04e7160 100644 --- a/chapter-03/index.adoc +++ b/chapter-03/index.adoc @@ -1,7 +1,7 @@ :chapter-number: 3 :chapterId: chapter-03 :sourceDir: ./examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-04/index.adoc b/chapter-04/index.adoc index 966de16d..c6a8895a 100644 --- a/chapter-04/index.adoc +++ b/chapter-04/index.adoc @@ -1,10 +1,10 @@ :chapter-number: 4 :chapterId: chapter-04 :sourceDir: ./examples -:nodeCurrentVersion: v10 -:nodeV: 10.9.0 +:nodeCurrentVersion: v12 +:nodeV: 12.0.0 :npmCurrentVersion: v6 -:npmV: 6.4.0 +:npmV: 6.9.0 :sectnums: :revdate: {docdate} :imagesdir: {indir} diff --git a/chapter-05/index.adoc b/chapter-05/index.adoc index 33efa36b..77f44c31 100644 --- a/chapter-05/index.adoc +++ b/chapter-05/index.adoc @@ -2,14 +2,14 @@ :chapterId: chapter-05 :sourceDir: ./examples :httpRoot: http://localhost:3000 -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :cowsayVersion: 1.3.1 :lodashVersion: 4.17.11 :mochaVersion: 5.2.0 :serveVersion: 10.0.0 :microVersion: 9.3.3 -:npmvX: 6.4.0 +:npmvX: 6.9.0 :cross: ✘ :tick: ✔ :maybe: ≈ diff --git a/chapter-06/index.adoc b/chapter-06/index.adoc index 4726a2c4..5883d208 100644 --- a/chapter-06/index.adoc +++ b/chapter-06/index.adoc @@ -2,9 +2,9 @@ :chapterId: chapter-06 :sourceDir: ./examples :httpRoot: http://localhost:8000 -:nodeCurrentVersion: v10 -:v: 10 -:nodeNextVersion: v11 +:nodeCurrentVersion: v12 +:v: 12 +:nodeNextVersion: v13 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-07/examples/upload/send.js b/chapter-07/examples/upload/send.js deleted file mode 100644 index 1884d4b1..00000000 --- a/chapter-07/examples/upload/send.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -const {post} = require('superagent') -const {readFile} = require('fs').promises; -const {join} = require('path'); -const filepath = join(__dirname, 'hello.txt'); - -readFile(filepath) - .then(data => { - return post('http://localhost:4000') - .attach('hello', data, 'hello.txt') // <1> - }) - .catch(error => console.log(error.message)); diff --git a/chapter-07/index.adoc b/chapter-07/index.adoc index 70b8af08..bf9635de 100644 --- a/chapter-07/index.adoc +++ b/chapter-07/index.adoc @@ -2,7 +2,7 @@ :chapterId: chapter-07 :sourceDir: ./examples :serverUrl: http://localhost:4000 -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-07/package-lock.json b/chapter-07/package-lock.json index f0823b10..9270152d 100644 --- a/chapter-07/package-lock.json +++ b/chapter-07/package-lock.json @@ -1223,9 +1223,9 @@ } }, "expect-ct": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz", - "integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", + "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" }, "express": { "version": "4.16.4", @@ -1466,9 +1466,9 @@ } }, "feature-policy": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", - "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", + "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" }, "fill-range": { "version": "4.0.0", @@ -1563,9 +1563,9 @@ } }, "frameguard": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz", + "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g==" }, "fresh": { "version": "0.5.2", @@ -1607,22 +1607,26 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "optional": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "optional": true, "requires": { "delegates": "^1.0.0", @@ -1631,12 +1635,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "optional": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "optional": true, "requires": { "balanced-match": "^1.0.0", @@ -1645,32 +1651,38 @@ }, "chownr": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "optional": true }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, "requires": { "ms": "2.0.0" @@ -1678,22 +1690,26 @@ }, "deep-extend": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "optional": true, "requires": { "minipass": "^2.2.1" @@ -1701,12 +1717,14 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "optional": true, "requires": { "aproba": "^1.0.3", @@ -1721,7 +1739,8 @@ }, "glob": { "version": "7.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -1734,12 +1753,14 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "optional": true }, "iconv-lite": { "version": "0.4.24", - "bundled": true, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -1747,7 +1768,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "optional": true, "requires": { "minimatch": "^3.0.4" @@ -1755,7 +1777,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "optional": true, "requires": { "once": "^1.3.0", @@ -1764,17 +1787,20 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "optional": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "optional": true, "requires": { "number-is-nan": "^1.0.0" @@ -1782,12 +1808,14 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "optional": true, "requires": { "brace-expansion": "^1.1.7" @@ -1795,12 +1823,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "optional": true }, "minipass": { "version": "2.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "optional": true, "requires": { "safe-buffer": "^5.1.2", @@ -1809,7 +1839,8 @@ }, "minizlib": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "optional": true, "requires": { "minipass": "^2.2.1" @@ -1817,7 +1848,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "optional": true, "requires": { "minimist": "0.0.8" @@ -1825,12 +1857,14 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "optional": true }, "needle": { "version": "2.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", "optional": true, "requires": { "debug": "^2.1.2", @@ -1840,7 +1874,8 @@ }, "node-pre-gyp": { "version": "0.10.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -1857,7 +1892,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "optional": true, "requires": { "abbrev": "1", @@ -1866,12 +1902,14 @@ }, "npm-bundled": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", "optional": true }, "npm-packlist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", + "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -1880,7 +1918,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -1891,17 +1930,20 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "optional": true, "requires": { "wrappy": "1" @@ -1909,17 +1951,20 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -1928,17 +1973,20 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "optional": true }, "rc": { "version": "1.2.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "optional": true, "requires": { "deep-extend": "^0.6.0", @@ -1949,14 +1997,16 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "optional": true } } }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -1970,7 +2020,8 @@ }, "rimraf": { "version": "2.6.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "optional": true, "requires": { "glob": "^7.1.3" @@ -1978,37 +2029,44 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "optional": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "optional": true }, "semver": { "version": "5.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "optional": true, "requires": { "code-point-at": "^1.0.0", @@ -2018,7 +2076,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -2026,7 +2085,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "optional": true, "requires": { "ansi-regex": "^2.0.0" @@ -2034,12 +2094,14 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "optional": true }, "tar": { "version": "4.4.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "optional": true, "requires": { "chownr": "^1.1.1", @@ -2053,12 +2115,14 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "optional": true }, "wide-align": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "optional": true, "requires": { "string-width": "^1.0.2 || 2" @@ -2066,12 +2130,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "optional": true }, "yallist": { "version": "3.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "optional": true } } @@ -2298,23 +2364,23 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" }, "helmet": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.17.0.tgz", - "integrity": "sha512-3cJBDC9G4t2D/tcGfW7Y2pnbBSyAjYShtxTTg0wiXafkkGiK/GJyoCcHwux4kBHzG42nWE+IiXdsX0NtvhPuWw==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.18.0.tgz", + "integrity": "sha512-TsKlGE5UVkV0NiQ4PllV9EVfZklPjyzcMEMjWlyI/8S6epqgRT+4s4GHVgc25x0TixsKvp3L7c91HQQt5l0+QA==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.1.0", "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.1", - "feature-policy": "0.2.0", - "frameguard": "3.0.0", + "expect-ct": "0.2.0", + "feature-policy": "0.3.0", + "frameguard": "3.1.0", "helmet-crossdomain": "0.3.0", "helmet-csp": "2.7.1", "hide-powered-by": "1.0.0", "hpkp": "2.0.0", "hsts": "2.2.0", "ienoopen": "1.1.0", - "nocache": "2.0.0", + "nocache": "2.1.0", "referrer-policy": "1.2.0", "x-xss-protection": "1.1.0" }, @@ -3185,8 +3251,7 @@ "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "optional": true + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" }, "nanomatch": { "version": "1.2.13", @@ -3207,13 +3272,28 @@ } }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz", + "integrity": "sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==", "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" + }, + "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.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "negotiator": { @@ -3283,9 +3363,9 @@ } }, "nocache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" }, "node-gyp": { "version": "3.8.0", @@ -3314,9 +3394,9 @@ } }, "node-pre-gyp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -3485,14 +3565,14 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" }, "npm-packlist": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", - "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" @@ -3793,11 +3873,11 @@ "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" }, "pokemon": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/pokemon/-/pokemon-1.2.3.tgz", - "integrity": "sha512-3wwtG0QKvkje3umDTnaNbPNLmL3XoxdjQwRMz3WEcA/txEagzmWHB1H1TwPNCgZvjIsTrkX7j+DK5Y9+Eu9Xyg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pokemon/-/pokemon-2.0.0.tgz", + "integrity": "sha512-x+c9qNrB5y+2Ltt4mQGG56Rw6AvnzxhRm7/DRX9nSLjurTy+R7gMg3vUxzjJK2AhnaoQeFs3NPyK5fwnM3kVWg==", "requires": { - "unique-random-array": "^1.0.0" + "unique-random-array": "^2.0.0" } }, "posix-character-classes": { @@ -4684,29 +4764,29 @@ "extend-shallow": "^3.0.0" } }, + "sql-template-strings": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/sql-template-strings/-/sql-template-strings-2.2.2.tgz", + "integrity": "sha1-PxFQiiWt384hejBCqdMAwxk7lv8=", + "optional": true + }, "sqlite": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-2.9.3.tgz", - "integrity": "sha512-2LJxdgtXsif9xR2D8KnM8Ki3g0dmOktba1B/6TanYCKx697J0sKfw+i28yRjtjPz5O/uzbEa1m1RXXgR2p9G0Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-3.0.3.tgz", + "integrity": "sha512-DpofdtBibbiOObtdADGZYE6bvnLpjRG4ut/MDTDau2nK40htOLj1E0c55aOkvbnRVqQ0ZPtjj7PJuKKyS0Ypww==", "requires": { + "sql-template-strings": "^2.2.2", "sqlite3": "^4.0.0" } }, "sqlite3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.4.tgz", - "integrity": "sha512-CO8vZMyUXBPC+E3iXOCc7Tz2pAdq5BWfLcQmOokCOZW5S5sZ/paijiPOCdvzpdP83RroWHYa5xYlVqCxSqpnQg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.7.tgz", + "integrity": "sha512-TGEeSBB8O48bEu8KUUMqzeB22WrfTxzhIf0lFm8wLTo3a6yJBonF2sPKMYrYtOne1F1t9AHAEn+DTISq8WebQg==", "requires": { - "nan": "~2.10.0", - "node-pre-gyp": "^0.10.3", + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0", "request": "^2.87.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } } }, "sshpk": { @@ -5073,16 +5153,16 @@ } }, "unique-random": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-1.0.0.tgz", - "integrity": "sha1-zj4iTIJCzTOg53sNcYDXfmti0MQ=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-2.1.0.tgz", + "integrity": "sha512-iQ1ZgWac3b8YxGThecQFRQiqgk6xFERRwHZIWeVVsqlbmgCRl0PY13R4mUkodNgctmg5b5odG1nyW/IbOxQTqg==" }, "unique-random-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-1.0.1.tgz", - "integrity": "sha512-z9J/SV8CUIhIRROcHe9YUoAT6XthUJt0oUyLGgobiXJprDP9O9dsErNevvSaAv5BkhwFEVPn6nIEOKeNE6Ck1Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-2.0.0.tgz", + "integrity": "sha512-xR87O95fZ7hljw84J8r1YDXrvffPLWN513BNOP4Bv0KcgG5dyEUrHwsvP7mVAOKg4Y80uqRbpUk0GKr8il70qg==", "requires": { - "unique-random": "^1.0.0" + "unique-random": "^2.1.0" } }, "unique-string": { diff --git a/chapter-07/package.json b/chapter-07/package.json index 4a8aa5eb..e48640cd 100644 --- a/chapter-07/package.json +++ b/chapter-07/package.json @@ -29,18 +29,18 @@ "find-my-way": "^1.18.1", "formidable": "^1.2.1", "get-stream": "^3.0.0", - "helmet": "^3.17.0", + "helmet": "^3.18.0", "micro": "^9.3.4", "mocha": "^5.2.0", "node-sass": "^4.12.0", "nodemon": "^1.19.0", "nunjucks": "^3.2.0", "parseurl": "^1.3.3", - "pokemon": "^1.2.3", + "pokemon": "^2.0.0", "sequelize-cli": "^5.4.0", "serve": "^9.6.0", "sinon": "^6.3.5", - "sqlite": "^2.9.3", + "sqlite": "^3.0.3", "superagent": "^3.8.3" } } diff --git a/chapter-08/index.adoc b/chapter-08/index.adoc index c8686861..a999c3ff 100644 --- a/chapter-08/index.adoc +++ b/chapter-08/index.adoc @@ -1,7 +1,7 @@ :chapter-number: 8 :chapterId: chapter-08 :sourceDir: ./examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/chapter-09/index.adoc b/chapter-09/index.adoc index 217ced8b..f92753aa 100644 --- a/chapter-09/index.adoc +++ b/chapter-09/index.adoc @@ -2,7 +2,7 @@ :chapterId: chapter-09 :sourceDir: ./examples :httpRoot: http://localhost:4000/examples -:nodeCurrentVersion: v10 +:nodeCurrentVersion: v12 :npmCurrentVersion: v6 :sectnums: :revdate: {docdate} diff --git a/package.json b/package.json index fef2c310..b877e7d4 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "update:schedule": "curl -sSL https://github.com/nodejs/Release/raw/master/schedule.json > chapter-02/schedule.json && npx lts -d $PWD/chapter-02/schedule.json --start $(gdate -d '2 months ago' +'%Y-%m-%d') --end $(gdate -d '2 years' +'%Y-%m-%d') --png chapter-02/images/schedule.png" }, "engines": { - "node": "10", + "node": "12", "npm": "6" }, "repository": { diff --git a/tests/examples-config.js b/tests/examples-config.js index 8363964e..8690e70d 100644 --- a/tests/examples-config.js +++ b/tests/examples-config.js @@ -392,9 +392,6 @@ module.exports = { stderr: 'SQLITE_ERROR: no such table: books', exitCode: 1 }, - 'chapter-07/examples/upload/send.js': { - stderr: 'ExperimentalWarning', - }, 'chapter-07/examples/upload/server.js': { skip: true }, From d4501f37345dfe90e52a3c452a2508156fcc01a4 Mon Sep 17 00:00:00 2001 From: Yoann Fleury <yoann.fleury@yahoo.com> Date: Mon, 27 May 2019 18:22:35 +0200 Subject: [PATCH 11/19] fix(chapter-09): add new link to browserify home closes #407 --- chapter-09/index.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter-09/index.adoc b/chapter-09/index.adoc index f92753aa..4a416d2b 100644 --- a/chapter-09/index.adoc +++ b/chapter-09/index.adoc @@ -623,7 +623,7 @@ adaptable, modulaire et puissant. Son apprentissage progressif peut faire de lui un allié de choix dans tous vos projets Node et{nbsp}Web. -- [URL]#https://github.com/substack/browserify-handbook# +- [URL]#https://github.com/browserify/browserify-handbook# ==== Revenons maintenant à notre code auquel il manque la compréhension des From 785f2167ad4bbf57c913041ac20f905ab9dbe8fc Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Mon, 12 Nov 2018 13:29:55 +0100 Subject: [PATCH 12/19] =?UTF-8?q?fix(appendix-a):=20met=20=C3=A0=20jour=20?= =?UTF-8?q?htmlhint@0.10.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appendix-a/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/appendix-a/package-lock.json b/appendix-a/package-lock.json index 79546c88..8f368f7b 100644 --- a/appendix-a/package-lock.json +++ b/appendix-a/package-lock.json @@ -119,7 +119,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -1142,9 +1142,9 @@ }, "dependencies": { "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -2929,13 +2929,13 @@ }, "entities": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "optional": true }, "htmlparser2": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "optional": true, "requires": { From 1537d98c54333f1379acd7399eee6886e4af55e7 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:36:00 +0200 Subject: [PATCH 13/19] =?UTF-8?q?feat(appendix-b):=20Nouveaut=C3=A9s=20et?= =?UTF-8?q?=20changements=20dans=20Node.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +- appendix-b/index.adoc | 147 +++++++++++++++++++++++++++++++++++ appendix-b/package-lock.json | 5 ++ appendix-b/package.json | 18 +++++ book.adoc | 2 + foreword/preamble.adoc | 12 ++- index.adoc | 1 + 7 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 appendix-b/index.adoc create mode 100644 appendix-b/package-lock.json create mode 100644 appendix-b/package.json diff --git a/README.md b/README.md index 392498a6..89504f3c 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,8 @@ des *outils en ligne de commande*. | **[Créer une application web][ch07]** | _ça marche comment HTTP ?_ | [issues][ch07-issues] | **[Créer un outil en ligne de commande][ch08]** | _ça marche comment du code métier dans le terminal ?_ | [issues][ch08-issues] | **[Créer une application frontend][ch09]** | _ça marche comment les modules Node dans les navigateurs web ?_ | [issues][ch09-issues] -| Annexe : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] +| Annexe A : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] +| Annexe B : **[Nouveautés et changements dans Node.js][a02]** | _qu'est-ce je dois prendre en compte dans cette nouvelle version ?_ | [issues][appendix-issues] # Lire l'ouvrage @@ -157,6 +158,7 @@ $ npm test | Chapitre 8 | ![][ch08-deps] | ![][ch08-security] | Chapitre 9 | ![][ch09-deps] | ![][ch09-security] | Annexe A | ![][a01-deps] | ![][a01-security] +| Annexe B | ![][a02-deps] | ![][a02-security] ## Génération des épreuves @@ -263,3 +265,7 @@ Les exemples de code sont placés sous la [licence MIT][]. [appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json +[a02]: appendix-a/index.adoc +[appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes +[a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b +[a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json diff --git a/appendix-b/index.adoc b/appendix-b/index.adoc new file mode 100644 index 00000000..6604c713 --- /dev/null +++ b/appendix-b/index.adoc @@ -0,0 +1,147 @@ +:appendix-number: B +:chapterId: appendix-b +:sectnums: +:nodeCurrentVersion: v12 +:npmCurrentVersion: v6 +:revdate: {docdate} +:sourceDir: ./examples +:imagesdir: {indir} +ifdef::env[] +:imagesdir: . +endif::[] + +[appendix] += Nouveautés et changements dans Node.js + +include::../docs/web-header.adoc[] + +Cet ouvrage traite de l'état de l'art d'ECMAScript et des modules Node +tels que nous pouvons les utiliser dans Node {nodeCurrentVersion}. +Certaines évolutions du langage et nouveautés de la plate-forme sont utiles +pour gagner en confort de développement. + +Cette annexe a pour but de vous aider à comprendre les changements techniques +entre les versions majeures de Node, pour que vous puissiez les prendre en compte. +Les changements politiques et organisationnels sont documentés dans +le <<../chapter-01/index.adoc#,chapitre 1>>. + +== Node.js v12 + +La version 12 de Node est sortie le 23 avril 2019. +V8 est mis à niveau en version{nbsp}``7.4``. + +J'ai été particulièrement ravi de bénéficier des changements suivants : + +Modules ESM sans l'option `--experimental-modules`:: + Nous nous rapprochons de plus en plus de modules interopérables entre Node + et les navigateurs Web, sans outillage supplémentaire. + La syntaxe `import`/`export` fonctionne nativement si notre script est + préfixé par `.mjs` (au lieu de `.js`) ou si l'entrée `"type": "module",` + est présente dans le fichier `package.json`. +Amélioration de l'internationalisation native (`Intl`):: + Nous pouvons calculer des dates relatives (exemple : "`il y a 2 jours`") + dans plusieurs langues avec `Intl.RelativeTimeFormat()`. + L'écriture de listes de mots (exemple : "`Un, deux et trois.`") est facilitée + avec l'apparition de `Intl.ListFormat()`. +Itérations asynchrones sur les objets `Stream`:: + La combinaison du concept de <<../chapter-04/index.adoc#stream,flux de données>> + et des <<../chapter-04/index.adoc#events,événements>> n'est ni évidente + ni intuitive. + + La lecture asynchrone d'un flux de données avec + <<../chapter-03/index.adoc#async-await,`async`/`await`>> simplifie la donne. + +Certains aspects de Node ont gagné en rapidité (`process.cwd()`, assertions, +lecture de fichiers avec `fs.readFile()`, le _parsing_ de nos scripts). +D'autres changements sont moins visibles mais contribuent néanmoins +à notre confort de travail : + +Mises à jour de sécurité:: + Support du chiffrement TLSv1.3 pour un support des connexions sécurisées + améliorées, plus rapides et moins gourmandes en ressources. +Remplacement du parseur HTTP:: + La base de code qui interprète les requêtes HTTP entrantes a été entièrement + remplacée par un parseur deux fois plus rapide{nbsp}:{nbsp}``llhttp`` + ([URL]#https://llhttp.org#). +Introduction des diagnostics d'erreur:: + L'option `--experimental-report` active un rapport d'erreur dans un fichier + JSON en cas de plantage applicatif. + Ce fichier reste malgré tout lisible par un humain + Je pense qu'un écosystème d'outillage va se développer pour rendre ces rapports + davantage lisibles et exploitables pour déceler plus finement des bugs applicatifs. + +[NOTE] +.[RemarquePreTitre]#Documentation# Liste exhaustive des changements +==== +Voici une liste de liens pour mieux comprendre ce qui se cache sous le capot +de Node v12 : + +- [URL]#https://v8.dev/blog/v8-release-74# +- [URL]#https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V12.md# +- [URL]#https://wiki.openssl.org/index.php/TLS1.3# +==== + + +== Node.js v10 + +La version 10 de Node est sortie le 24 avril 2018. +V8 est mis à niveau en version{nbsp}``6.6``. + +J'ai été content de passer à cette version de Node pour les raisons suivantes : + +Introduction des promesses natives pour le module `fs`:: + L'objet `fs.promises` propose les mêmes fonctions que `fs`… mais elles + retournent des <<../chapter-03.adoc#promise,promesses>> au lieu de faire + usage des <<../chapter-03/index.adoc#callback,fonctions de rappel>>. + + Voilà de quoi faciliter l'orgation d'opérations typiquement asynchrones. +Création de répertoires de manière récursive:: + La fonction `fs.mkdir()` accepte l'option `recursive` : lorsque sa valeur + vaut `true`, Node crée tous les répertoires nécessaires. + Nous n'avons plus besoin de les créer un par un, ni d'avoir recours + au module{nbsp}``npm`` _mkdirp_ ([URL]#https://npmjs.com/mkdirp#). +Introduction des modules ESM:: + C'est la première fois que l'on peut importer des + <<../chapter-04/index.adoc#esm,modules{nbsp}ECMAScript>> dans Node + sans avoir recours à de l'outillage externe. + Cela nécessite d'utiliser l'option `--experimental-modules` lors d'un appel + à la commande{nbsp}``node``, ainsi que d'avoir recours à l'extension de fichier + `.mjs`… mais c'est un (bon) début. +Introduction de l'internationalisation native (`Intl`):: + Le module d'internationalisation `Intl` entre en scène pour gérer l'affichage + des nombres, devises et dates selon des règles propres à chaque pays. + L'installation de base de Node gère uniquement l'anglais mais il est possible + d'installer des locales supplémentaires, ou de se reposer sur les réglages + du système d'exploitation. +Le module{nbsp}``npm`` en version 6:: + La sixième version majeure du module{nbsp}``npm`` embarque la + commande{nbsp}``npm audit`` qui simplifie la résolution de l'installation + de mises à jour de sécurité. + Les temps d'installation ont été drastiquement réduits. + +Certains aspects de Node ont gagné en rapidité (itération sur les tableaux, +itérations asynchrones, création de serveur DNS, assertions) mais d'autres +changements avancés vont avoir des conséquences intéressantes à moyen et +long{nbsp}terme : + +Module de base `http2`:: + Node supporte désormais nativement la création de serveur http/2. + C'est plus complexe à gérer mais fort heureusement, l'offre de + __frameworks__{nbsp}web va s'adapter pour absorber cette complexité à notre place. +Stabilisation de l'interface `N-API`:: + L'interface `N-API` est une approche bas-niveau pour interfacer du code écrit + en {cpp} directement avec Node, sans script ECMAScript. + Certains modules y ont recours pour des questions de performance… mais aussi + pour expérimenter avec Node, en utilisant une autre machine virtuelle que V8. +Module de base `worker_threads`:: + Il s'agit d'un concept similaire au _Web Workers_ des navigateurs web : + ce module expérimental sert à paralléliser l'exécution d'opérations sans + bloquer le processus principal, et sans créer de nouveau processus indépendant. + +[NOTE] +.[RemarquePreTitre]#Documentation# Liste exhaustive des changements +==== +Voici une liste de liens pour mieux comprendre ce qui se cache sous le capot +de Node v10 : + +- [URL]#https://v8.dev/blog/v8-release-66# +- [URL]#https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V10.md# +==== diff --git a/appendix-b/package-lock.json b/appendix-b/package-lock.json new file mode 100644 index 00000000..96c74feb --- /dev/null +++ b/appendix-b/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "nodebook.appendix-b", + "version": "2.0.0", + "lockfileVersion": 1 +} diff --git a/appendix-b/package.json b/appendix-b/package.json new file mode 100644 index 00000000..3f5d3b10 --- /dev/null +++ b/appendix-b/package.json @@ -0,0 +1,18 @@ +{ + "name": "nodebook.appendix-b", + "private": true, + "version": "2.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": "^12.0.0" + }, + "author": "Thomas Parisot (https://oncletom.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/oncletom/nodebook/issues" + }, + "dependencies": {} +} diff --git a/book.adoc b/book.adoc index e796a245..c8dfcf79 100644 --- a/book.adoc +++ b/book.adoc @@ -29,3 +29,5 @@ include::chapter-08/index.adoc[leveloffset=+1] include::chapter-09/index.adoc[leveloffset=+1] include::appendix-a/index.adoc[leveloffset=+1] + +include::appendix-b/index.adoc[leveloffset=+1] diff --git a/foreword/preamble.adoc b/foreword/preamble.adoc index 04ccb8e1..d34c71a4 100644 --- a/foreword/preamble.adoc +++ b/foreword/preamble.adoc @@ -79,7 +79,7 @@ J'ai fait en sorte que la lecture soit progressive, du plus simple au plus compl Le contenu des chapitres explore une problématique et se termine souvent sur une section avancée, pour aller plus{nbsp}loin. -Cette édition est composée de neuf chapitres et d'une annexe : +Cette édition est composée de neuf chapitres : . *Histoire, écosystème et gouvernance* + D'où vient Node et qui sont les acteurs participant à son histoire ? @@ -110,11 +110,15 @@ Cette édition est composée de neuf chapitres et d'une annexe : Utiliser la richesse de l'écosystème{nbsp}npm et profiter des modules pour écrire des applications _front-end_ de qualité. -L'annexe complète l'ouvrage avec une *sélection de modules*{nbsp}npm, -pour démarrer plus vite et mieux cerner ce qu'on peut faire avec{nbsp}Node. +Deux annexes complètent l'ouvrage : +. une *sélection de modules*{nbsp}npm, pour bien démarrer et pour + cerner le potentiel de{nbsp}Node. +. un *historique des nouveautés techniques* des versions majeures de Node + pour adapter votre code aux changements et pour retrouver plus facilement + des explications en lien dans les bons chapitres. [TIP] -.[RemarquePreTitre]#Ressources# Contenu en [line-through]#livre# libre accès +.[RemarquePreTitre]#Ressources# Contenu en libre accès ==== Le contenu de cet ouvrage est actualisé en permanence sur [URL]#https://oncletom.io/node.js/#. diff --git a/index.adoc b/index.adoc index c0ba9395..4128baeb 100644 --- a/index.adoc +++ b/index.adoc @@ -26,6 +26,7 @@ include::docs/description.adoc[] - *Chapitre 8* : <<chapter-08/index.adoc#,Créer un outil en ligne de commande>> - *Chapitre 9* : <<chapter-09/index.adoc#,Créer une application front-end>> - *Annexe A* : <<appendix-a/index.adoc#,Sélection de modules `npm`>> +- *Annexe B* : <<appendix-b/index.adoc#,Nouveautés et changements dans Node.js>> == À propos de l'auteur From 31bd3b2cacdad3c2902fc87a4be20ec19abbe2ca Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 16:35:50 +0200 Subject: [PATCH 14/19] chore: Node 12 dans les package.json --- .nvmrc | 2 +- appendix-a/package.json | 2 +- chapter-01/package.json | 2 +- chapter-02/package.json | 2 +- chapter-03/package.json | 2 +- chapter-04/.eslintrc.yaml | 4 ---- chapter-04/package.json | 2 +- chapter-05/package.json | 2 +- chapter-06/package.json | 2 +- chapter-07/package.json | 2 +- chapter-08/package.json | 2 +- chapter-09/package.json | 2 +- 12 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.nvmrc b/.nvmrc index f599e28b..48082f72 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -10 +12 diff --git a/appendix-a/package.json b/appendix-a/package.json index c3ae6f6c..1bddd055 100644 --- a/appendix-a/package.json +++ b/appendix-a/package.json @@ -7,7 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-01/package.json b/chapter-01/package.json index bb34343b..d7f40751 100644 --- a/chapter-01/package.json +++ b/chapter-01/package.json @@ -7,7 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "keywords": [ "node", diff --git a/chapter-02/package.json b/chapter-02/package.json index f0471947..1ea52a90 100644 --- a/chapter-02/package.json +++ b/chapter-02/package.json @@ -7,7 +7,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-03/package.json b/chapter-03/package.json index 50383d8c..55972c6d 100644 --- a/chapter-03/package.json +++ b/chapter-03/package.json @@ -8,7 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-04/.eslintrc.yaml b/chapter-04/.eslintrc.yaml index cd0ac657..c92e5d67 100644 --- a/chapter-04/.eslintrc.yaml +++ b/chapter-04/.eslintrc.yaml @@ -1,10 +1,6 @@ parserOptions: sourceType: module -globals: - URL: true # Delete when eslint is okay with URL being a global in Node 10.0.0 - # cf. https://github.com/eslint/eslint/issues/10284 - rules: strict: off handle-callback-err: off diff --git a/chapter-04/package.json b/chapter-04/package.json index 0a244b15..46b69cb4 100644 --- a/chapter-04/package.json +++ b/chapter-04/package.json @@ -8,7 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-05/package.json b/chapter-05/package.json index 7730d54d..c910654b 100644 --- a/chapter-05/package.json +++ b/chapter-05/package.json @@ -12,7 +12,7 @@ "pretest": "npm run lint" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-06/package.json b/chapter-06/package.json index 8d1989e9..1eb6bad8 100644 --- a/chapter-06/package.json +++ b/chapter-06/package.json @@ -9,7 +9,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-07/package.json b/chapter-07/package.json index e48640cd..6f11bf7e 100644 --- a/chapter-07/package.json +++ b/chapter-07/package.json @@ -8,7 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-08/package.json b/chapter-08/package.json index 0c289faa..547dd279 100644 --- a/chapter-08/package.json +++ b/chapter-08/package.json @@ -15,7 +15,7 @@ "test": "tape examples/**/*.test.js" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", diff --git a/chapter-09/package.json b/chapter-09/package.json index 4c04451a..e8b9a197 100644 --- a/chapter-09/package.json +++ b/chapter-09/package.json @@ -23,7 +23,7 @@ "test:browser": "./node_modules/.bin/karma start" }, "engines": { - "node": "^10.0.0" + "node": "^12.0.0" }, "author": "Thomas Parisot (https://oncletom.io)", "license": "MIT", From 2ea2bf3cbd9f01ad5e273515e2e979aa5f267c03 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:15:23 +0200 Subject: [PATCH 15/19] =?UTF-8?q?feat(cli):=20active=20l'autocompl=C3=A9ti?= =?UTF-8?q?on=20du=20CLI=20nodebook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #364 --- bin/cli.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index 26a67187..98cbcc99 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -9,8 +9,10 @@ const yargs = require('yargs'); updateNotifier(pkg) .then(update => { if (update) { - console.log('🙂 Une nouvelle version de \x1B[32;1mnodebook\x1B[0m est disponible.'); - console.log('👉 Tape \x1B[33;1mnpm install --global nodebook\x1B[0m pour l\'installer.'); + const {name} = pkg; + const {latest} = update; + console.log(`💡 La version \x1B[32;1m${name}\x1B[0m@${latest} est disponible.`); + console.log(`👉 Pour en bénéficier : \x1B[33;1mnpm install --global ${name}\x1B[0m`); } }) .catch(err => err) @@ -20,10 +22,12 @@ updateNotifier(pkg) .scriptName('nodebook') .commandDir('commands') .usage('nodebook [command]') + .completion('autocomplete', 'Affiche le script d\'autocomplétion des commandes') .example('nodebook install chapter-04', 'Installe les dépendances du chapitre 4') .example('nodebook install all', 'Installe les dépendances de tous les chapitres') .example('cd $(nodebook dir chapter-04)', 'Place le terminal dans le répertoire d\'exemples du chapitre 4') .example('cd $(nodebook dir chapter-04 --root)', 'Place le terminal dans le répertoire racine du chapitre 4') + .example('nodebook autocomplete >> ~/.bashrc', 'Installe le script d\'autocomplétion des commandes (shell bash)') .demandCommand(1, '') .recommendCommands() .strict() From b07b3eda34c2f12549f0f9b1249aabffeb00b497 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:15:34 +0200 Subject: [PATCH 16/19] =?UTF-8?q?chore:=20mise=20=C3=A0=20jour=20des=20d?= =?UTF-8?q?=C3=A9pendances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2046 ++++++--------------------------------------- package.json | 12 +- 2 files changed, 255 insertions(+), 1803 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92afbd6c..60931869 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,7 +104,8 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "2.2.1", @@ -113,24 +114,13 @@ "dev": true }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.2.tgz", + "integrity": "sha512-rUe9SxpRQlVg4EM8It7JMNWWYHAirTPpbTuvaSKybb5IejNgWB3PGBBX9rrPKDx2pM/p3Wh+7+ASaWRyyAbxmQ==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { @@ -142,24 +132,6 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -188,12 +160,6 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "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 - }, "asciidoctor-converter-opendocument": { "version": "1.0.0-alpha.12", "resolved": "https://registry.npmjs.org/asciidoctor-converter-opendocument/-/asciidoctor-converter-opendocument-1.0.0-alpha.12.tgz", @@ -214,6 +180,22 @@ "requires": { "glob": "7.1.3", "unxhr": "1.0.1" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "asciidoctor-prism-extension": { @@ -225,12 +207,6 @@ "prismjs": "^1.15.0" } }, - "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", @@ -238,15 +214,9 @@ "dev": true }, "async-each": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", - "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", - "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "balanced-match": { @@ -254,65 +224,10 @@ "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" - } - } - } - }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "blue-tape": { @@ -334,32 +249,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "buffer-shims": { @@ -368,23 +263,6 @@ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "callsites": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", @@ -392,9 +270,9 @@ "dev": true }, "camelcase": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.0.tgz", - "integrity": "sha512-Y05ICatFYPAfykDIB7VdwSJ0LUl1yq/BwO2OpyGGLjiRe1fgzTwVypPiWnzkGFOVFHXrCXUNBl86bpjBhZWSJg==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "1.1.3", @@ -416,46 +294,20 @@ "dev": true }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.1.tgz", + "integrity": "sha512-2ww34sJWehnbpV0Q4k4V5Hh7juo7po6z7LUWkcIQnSGN1lHOL8GGtLtfwabKvLFQw/hbSUQ0u6V7OgGYgBzlkQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", + "anymatch": "^3.0.1", + "async-each": "^1.0.3", + "braces": "^3.0.2", + "fsevents": "^2.0.6", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "readdirp": "^3.0.2" } }, "cli-cursor": { @@ -492,26 +344,36 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -522,26 +384,10 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "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" } @@ -549,26 +395,13 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -600,12 +433,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "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", @@ -642,47 +469,6 @@ "object-keys": "^1.0.8" } }, - "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" - } - } - } - }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -885,18 +671,18 @@ } }, "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.13.0.tgz", + "integrity": "sha512-uA5LrHylu8lW/eAH3bEQe9YdzpPaFd9yAJTwTi/i/BKTD7j6aQMKVAdGM/ML72zD6womuSK7EiGtMKuK06lWjQ==", "dev": true, "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", + "jsx-ast-utils": "^2.1.0", "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" + "prop-types": "^15.7.2", + "resolve": "^1.10.1" }, "dependencies": { "doctrine": { @@ -1016,62 +802,6 @@ "util-extend": "^1.0.1" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -1083,71 +813,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -1185,39 +850,25 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, @@ -1255,27 +906,12 @@ "is-function": "~1.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 - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "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", @@ -1287,574 +923,33 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.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": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "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.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "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.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "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.6.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 - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "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==" - }, - "get-port": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.0.0.tgz", - "integrity": "sha512-imzMU0FjsZqNa6BqOjbbW6w5BivHIuQKopjpPqcnx0AVHJQKCxK1O+Ab3OrVXhrekqfVMjwA9ZYu062R+KcIsQ==", + "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 + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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==" + }, + "get-port": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.0.0.tgz", + "integrity": "sha512-imzMU0FjsZqNa6BqOjbbW6w5BivHIuQKopjpPqcnx0AVHJQKCxK1O+Ab3OrVXhrekqfVMjwA9ZYu062R+KcIsQ==", "requires": { "type-fest": "^0.3.0" } @@ -1867,16 +962,10 @@ "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 - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1887,24 +976,12 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "globals": { @@ -1923,12 +1000,6 @@ "delegate": "^3.1.2" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", @@ -1959,54 +1030,16 @@ "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" - } - } - } - }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, "iconv-lite": { @@ -2131,98 +1164,27 @@ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-callable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", "dev": true }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.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=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2259,33 +1221,10 @@ } }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-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" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-promise": { "version": "2.1.0", @@ -2313,12 +1252,6 @@ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2330,12 +1263,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2371,20 +1298,14 @@ "dev": true }, "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", + "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", "dev": true, "requires": { "array-includes": "^3.0.3" } }, - "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 - }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -2475,21 +1396,6 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", @@ -2507,31 +1413,10 @@ } } }, - "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" - } - }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mimic-fn": { "version": "1.2.0", @@ -2552,27 +1437,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "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", @@ -2599,33 +1463,7 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "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" - } + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -2684,7 +1522,8 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2692,37 +1531,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz", @@ -2735,15 +1543,6 @@ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", "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.fromentries": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", @@ -2808,22 +1607,13 @@ } }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "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.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", @@ -2950,9 +1740,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { "version": "2.2.0", @@ -2991,21 +1781,9 @@ "dev": true }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-exists": { "version": "3.0.0", @@ -3034,18 +1812,18 @@ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "plur": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", "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", @@ -3111,9 +1889,9 @@ "dev": true }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "rc": { "version": "1.2.8", @@ -3133,9 +1911,9 @@ "dev": true }, "react-is": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.3.tgz", - "integrity": "sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", "dev": true }, "readable-stream": { @@ -3154,24 +1932,12 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.0.2.tgz", + "integrity": "sha512-LbyJYv48eywrhOlScq16H/VkCiGKGPC2TpOdZCJ7QXnYEjn3NN/Oblh8QEU3vqfSRBB7OGvh5x45NKiVeNujIQ==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "picomatch": "^2.0.4" } }, "regexpp": { @@ -3197,18 +1963,6 @@ "rc": "^1.0.1" } }, - "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", @@ -3226,9 +1980,9 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -3248,12 +2002,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -3273,12 +2021,6 @@ "through": "~2.3.4" } }, - "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.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3311,15 +2053,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, - "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", @@ -3339,9 +2072,9 @@ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -3350,23 +2083,30 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -3374,33 +2114,10 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "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", @@ -3454,138 +2171,6 @@ } } }, - "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": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "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-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "split": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", @@ -3595,51 +2180,22 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "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.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -3648,12 +2204,14 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "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" } @@ -3684,6 +2242,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3919,48 +2478,20 @@ "os-tmpdir": "~1.0.2" } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -3987,98 +2518,17 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, "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 - } - } - }, "unxhr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", "dev": true }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, "update-check": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.3.tgz", @@ -4097,18 +2547,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "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", @@ -4150,30 +2588,44 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "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==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "number-is-nan": "^1.0.0" + "color-convert": "^1.9.0" } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -4204,11 +2656,11 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "requires": { - "cliui": "^4.0.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "os-locale": "^3.1.0", @@ -4218,7 +2670,7 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "yargs-parser": "^13.1.0" }, "dependencies": { "ansi-regex": { @@ -4247,9 +2699,9 @@ } }, "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index b877e7d4..b8d5278b 100644 --- a/package.json +++ b/package.json @@ -48,12 +48,12 @@ }, "homepage": "https://oncletom.io/node.js/", "dependencies": { - "finalhandler": "^1.1.1", + "finalhandler": "^1.1.2", "get-port": "^5.0.0", - "glob": "^7.1.3", - "serve-static": "^1.13.2", + "glob": "^7.1.4", + "serve-static": "^1.14.1", "update-check": "^1.5.3", - "yargs": "^13.2.2" + "yargs": "^13.2.4" }, "devDependencies": { "@asciidoctor/core": "^2.0.3", @@ -62,9 +62,9 @@ "asciidoctor-extension-interactive-runner": "^1.2.3", "asciidoctor-prism-extension": "^2.0.6", "blue-tape": "^1.0.0", - "chokidar": "^2.1.5", + "chokidar": "^3.0.1", "eslint": "^5.16.0", - "eslint-plugin-react": "^7.12.4", + "eslint-plugin-react": "^7.13.0", "ora": "^3.4.0", "tap-spec": "^5.0.0", "tape-spawn": "^1.4.2" From 2fe246c7c91c2883f27eeef169356abce8b0589a Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:16:14 +0200 Subject: [PATCH 17/19] =?UTF-8?q?feat(chapter-08):=20ajustement=20des=20in?= =?UTF-8?q?structions=20d'autocompl=C3=A9tion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refs #364 --- chapter-08/index.adoc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/chapter-08/index.adoc b/chapter-08/index.adoc index a999c3ff..13b20ec7 100644 --- a/chapter-08/index.adoc +++ b/chapter-08/index.adoc @@ -2017,8 +2017,9 @@ $ npm install --global $(nodebook dir chapter-08 --root) Le mécanisme d'autocomplétion est fourni par l'environnement d'exécution de notre terminal, le _shell_. Sous Linux et macOS, il s'agit de _bash_, de _zsh_ ou plus rarement, de _fish_. -Il "`suffit`" donc d'interconnecter notre programme exécutable pour qu'il fournisse -les résultats de complétion au mécanisme de notre _shell_. +Il "`suffit`" donc d'interconnecter notre programme exécutable Node avec +le système d'exploitation — ce dernier envoie des signaux et attend des résultats +d'autocomplétion en retour. [subs="+macros"] ---- @@ -2079,7 +2080,7 @@ indexterm:[module npm, yargs] Il embarque un module d'autocomplétion. Si vous utilisez déjà ce module, l'autocomplétion revient à ajouter une ligne de code à notre programme. -Elle est un peu plus basique et demande plus de travail pour +Elle est un peu plus basique et demande davantage de travail pour arriver à la qualité des résultats du module _omelette_. [subs="+macros"] From 770679119f177b0cf58cfc9b5e6d54d92d9cfdb6 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sat, 8 Jun 2019 17:48:06 +0200 Subject: [PATCH 18/19] fix(chapter-02): clarification des instructions d'installation de nvm sous macOS fix #403 --- chapter-02/index.adoc | 56 ++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/chapter-02/index.adoc b/chapter-02/index.adoc index 8adc0c2c..bc73331f 100644 --- a/chapter-02/index.adoc +++ b/chapter-02/index.adoc @@ -316,16 +316,23 @@ indexterm:[installation, homebrew] Un installeur officiel pour macOS est fourni sur le site de Node, à l'adresse [URL]#https://nodejs.org/fr/download/#. -<<nvm,nvm>> est la voie alternative recommandée pour gérer plusieurs versions -de Node en parallèle. - -Il est toutefois possible d'installer Node et `nvm` via le gestionnaire de -paquets Homebrew ([URL]#https://brew.sh#). -Il aide à installer des logiciels qui ne sont pas distribués via le -_Mac{nbsp}App{nbsp}Store_. - -. Installer les _Command Line Tools_ pour compiler des logiciels depuis leur code source. -. Installation Homebrew. +<<nvm,nvm>> est la voie alternative que je recommande pour installer Node +mais aussi pour gérer plusieurs versions de Node en parallèle. +Lisez la suite de cette section si le gestionnaire de paquets Homebrew ([URL]#https://brew.sh#) +vous est familier, sinon rendez-vous à la section +`"<<nvm,Plusieurs versions sur la même machine{nbsp}(nvm)>>`" pour y découvrir +les instructions classiques d'installation. + +Homebrew est la voie royale pour installer{nbsp}`nvm`. +C'est l'outil que j'utilise au quotidien pour installer mes logiciels macOS, +ceux en ligne de commande et ceux avec une interface graphique, +qui ne sont pas distribués sur le _Mac{nbsp}App{nbsp}Store_. + +L'installation des _Command Line Tools_ est un pré-requis. +Ce sont utilitaires distribués par Apple pour transformer un ordinateur +grand{nbsp}public en outil de travail pour développeur·se. +On y retrouve Git et des compilateurs comme GCC, entre autres. + +C'est une installation qui se fait une bonne fois pour toutes. .Installation des Command Line Tools et de Homebrew sous macOS ---- @@ -333,20 +340,35 @@ $ xcode-select --install $ /usr/bin/ruby -e "$(curl -fsSL https://git.io/brew-install)" ---- -Pour installer `nvm`, il suffit alors de lancer la commande suivante : +Enfin, l'installation de `nvm` peut s'effectuer avec la commande suivante : ---- $ brew install nvm ---- -Ou, pour installer une seule version de Node, la plus récente : +Vous pouvez vérifier que le programme répond comme prévu avec cette commande : + +[subs="+attributes"] +---- +$ nvm --version +{nvmVersion} +---- + +Une dernière manipulation est nécessaire pour intégrer `nvm` de manière +permanente à notre terminal. +Ajoutez les lignes suivantes à la fin du fichier `~/.bashrc` (par défaut), +ou `~/.zshrc` (si vous avez installé votre propre _shell_) : +.{blank}~/.bashrc ou ~/.zshrc ---- -$ brew install node +# (...) + +export NVM_DIR="$HOME/.nvm" +. "/usr/local/opt/nvm/nvm.sh" +. "/usr/local/opt/nvm/etc/bash_completion" ---- -Vous obtiendrez des options d'installation et de configuration en tapant -`brew info nvm` et/ou `brew info node`. +Vous êtes maintenant paré·e à utiliser Node sur votre Mac ! === Windows indexterm:[installation, Windows] @@ -354,8 +376,8 @@ indexterm:[installation, Windows] Un installeur officiel pour Windows est fourni sur le site de Node à l'adresse [URL]#https://nodejs.org/fr/download/#. -<<nvm,`nvm-windows`>> est la voie alternative recommandée pour gérer plusieurs -versions de Node en parallèle. +<<nvm,`nvm-windows`>> est la voie alternative que je recommande pour installer +Node mais aussi pour gérer plusieurs versions de Node en parallèle. .Un des écrans d'installation de Node sous{nbsp}Windows{nbsp}10 image::images/windows-node-installer.png[width="50%"] From 5b880739ce24be908b0b4ccd3b5ec2aab815c867 Mon Sep 17 00:00:00 2001 From: Thomas Parisot <oncletom@users.noreply.github.com> Date: Sun, 28 Apr 2019 18:48:34 +0200 Subject: [PATCH 19/19] =?UTF-8?q?feat(appendix-c):=20Utilisation=20de=20ce?= =?UTF-8?q?t=20ouvrage=20gr=C3=A2ce=20au=20module=20nodebook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++-- appendix-c/index.adoc | 29 +++++++++++++++++++++++++++++ appendix-c/package-lock.json | 5 +++++ appendix-c/package.json | 18 ++++++++++++++++++ book.adoc | 2 ++ index.adoc | 1 + 6 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 appendix-c/index.adoc create mode 100644 appendix-c/package-lock.json create mode 100644 appendix-c/package.json diff --git a/README.md b/README.md index 89504f3c..9b4b7da4 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ des *outils en ligne de commande*. | **[Créer une application frontend][ch09]** | _ça marche comment les modules Node dans les navigateurs web ?_ | [issues][ch09-issues] | Annexe A : **[Sélection de modules npm][a01]** | _quel(s) module(s) npm choisir ou découvrir ?_ | [issues][appendix-issues] | Annexe B : **[Nouveautés et changements dans Node.js][a02]** | _qu'est-ce je dois prendre en compte dans cette nouvelle version ?_ | [issues][appendix-issues] +| Annexe C : **[Utilisation de cet ouvrage grâce au module npm{nbsp}nodebook][a03]** | _ça marche comment l'exécution des exemples du livre depuis mon terminal ?_ | [issues][appendix-issues] # Lire l'ouvrage @@ -159,6 +160,7 @@ $ npm test | Chapitre 9 | ![][ch09-deps] | ![][ch09-security] | Annexe A | ![][a01-deps] | ![][a01-security] | Annexe B | ![][a02-deps] | ![][a02-security] +| Annexe C | ![][a03-deps] | ![][a03-security] ## Génération des épreuves @@ -265,7 +267,9 @@ Les exemples de code sont placés sous la [licence MIT][]. [appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes [a01-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-a [a01-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-a/package.json -[a02]: appendix-a/index.adoc -[appendix-issues]: https://github.com/oncletom/nodebook/labels/:book:%20chapitre:annexes +[a02]: appendix-b/index.adoc [a02-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-b [a02-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-b/package.json +[a03]: appendix-c/index.adoc +[a03-deps]: https://david-dm.org/oncletom/nodebook/status.svg?path=appendix-c +[a03-security]: https://snyk.io/test/github/oncletom/nodebook/badge.svg?targetFile=appendix-c/package.json diff --git a/appendix-c/index.adoc b/appendix-c/index.adoc new file mode 100644 index 00000000..7d22ed7b --- /dev/null +++ b/appendix-c/index.adoc @@ -0,0 +1,29 @@ +:appendix-number: C +:chapterId: appendix-c +:sectnums: +:nodeCurrentVersion: v12 +:npmCurrentVersion: v6 +:revdate: {docdate} +:sourceDir: ./examples +:imagesdir: {indir} +ifdef::env[] +:imagesdir: . +endif::[] + +[appendix] += Utilisation de cet ouvrage grâce au module npm{nbsp}nodebook + +include::../docs/web-header.adoc[] + + +include::../docs/tip-versions.adoc[] + +== Pourquoi utiliser le module{nbsp}nodebook{nbsp}? + +TBD. + +== Installation + +TBD. + +== diff --git a/appendix-c/package-lock.json b/appendix-c/package-lock.json new file mode 100644 index 00000000..cf52247b --- /dev/null +++ b/appendix-c/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "nodebook.appendix-c", + "version": "2.0.0", + "lockfileVersion": 1 +} diff --git a/appendix-c/package.json b/appendix-c/package.json new file mode 100644 index 00000000..2c930b4c --- /dev/null +++ b/appendix-c/package.json @@ -0,0 +1,18 @@ +{ + "name": "nodebook.appendix-c", + "private": true, + "version": "2.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": "^12.0.0" + }, + "author": "Thomas Parisot (https://oncletom.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/oncletom/nodebook/issues" + }, + "dependencies": {} +} diff --git a/book.adoc b/book.adoc index c8dfcf79..29e2f4cb 100644 --- a/book.adoc +++ b/book.adoc @@ -31,3 +31,5 @@ include::chapter-09/index.adoc[leveloffset=+1] include::appendix-a/index.adoc[leveloffset=+1] include::appendix-b/index.adoc[leveloffset=+1] + +include::appendix-c/index.adoc[leveloffset=+1] diff --git a/index.adoc b/index.adoc index 4128baeb..45f1b67b 100644 --- a/index.adoc +++ b/index.adoc @@ -27,6 +27,7 @@ include::docs/description.adoc[] - *Chapitre 9* : <<chapter-09/index.adoc#,Créer une application front-end>> - *Annexe A* : <<appendix-a/index.adoc#,Sélection de modules `npm`>> - *Annexe B* : <<appendix-b/index.adoc#,Nouveautés et changements dans Node.js>> +- *Annexe C* : <<appendix-c/index.adoc#,Utilisation de cet ouvrage grâce au module `npm` nodebook>> == À propos de l'auteur