diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 29f2752..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - extends: 'eslint:recommended', - parserOptions: { - sourceType: 'script', - modules: true, - }, - env: { - es6: true, - node: true, - jest: true, - mocha: true, - }, - plugins: ['prettier'], - rules: { - 'prettier/prettier': 'error', - }, -}; diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index c367c25..e3cfd0b 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -1,10 +1,9 @@ # Code of Conduct -Be kind, except if i behave like an asshole, - if so, tell me by linking to this file. +Be kind, except if I behave like an asshole, if so, tell me by linking to this + file. -I try hard to automate things so that you cannot - create noises without really willing to do so. +I try hard to document and automate things so that you cannot create noises + without really willing to do so. -This is why i'll just delete issues/comments - making be sad. +This is why I'll just delete issues/comments making be sad. diff --git a/.github/CONTRIBUTING b/.github/CONTRIBUTING index 05281f7..be40259 100644 --- a/.github/CONTRIBUTING +++ b/.github/CONTRIBUTING @@ -2,7 +2,7 @@ Contributing to this project requires you to be a gentleman. By contributing you must agree with publishing your - changes int the same license than the actual code. + changes into the same license that apply to the current code. You will find the license in the LICENSE file at the root of this repository. diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE index 30d41de..2154412 100644 --- a/.github/ISSUE_TEMPLATE +++ b/.github/ISSUE_TEMPLATE @@ -10,14 +10,14 @@ Before doing so, there are a few checks to do in Beware that you also can create a pull request if you know how to solve the issue. -Finally scroll down if you asking for a feature ;) +Finally scroll down if you are asking for a new feature ;) --> -I'm a gentledev i: +I'm a gentledev I: - [ ] fully read the README recently - [ ] searched for existing issues -- [ ] checked i'm up to date with the latest version of the project +- [ ] checked I'm up to date with the latest version of the project ### Expected behavior @@ -35,8 +35,8 @@ I'm a gentledev i: ``` ``` -If the result is lower than 6.9.5, there is - poor chances i even have a look to it. Please, +If the result is lower than 8.12.0, there is + poor chances I even have a look to it. Please, use the last [NodeJS LTS version](https://nodejs.org/en/). ## Feature request @@ -44,7 +44,7 @@ If the result is lower than 6.9.5, there is If you think a feature need to be added, your suggestions are welcome. Beware though that: -- I try to keep my module simple so please ensure the requested +- I try to keep my modules simple so please ensure the requested feature is really related to this module. If not, you may instead create a module that augment/work with this one, - I am not your employee so keep calm and be aware that your @@ -56,4 +56,4 @@ If you think a feature need to be added, your suggestions ### Use cases -- [ ] I will/have implement the feature +- [ ] I will/did implement the feature diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index 469c058..3ecf82f 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -20,7 +20,8 @@ Fixes # - [ ] I made some tests for my changes - [ ] I added my name in the [contributors](https://docs.npmjs.com/files/package.json#people-fields-author-contributors) - field of the package.json file + field of the `package.json` file. Beware to use the same format than for the author field + for the entries so that you'll get a mention in the `README.md` with a link to your website. ### License To get your contribution merged, you must check the following. @@ -34,9 +35,9 @@ If you already maintain several NPM modules / NodeJS project, making significant changes on one of my modules automatically legitimates you as a core developer. -This is because i could die or even not give a shit to - this project someday and i don't want people to get - stuck. +This is because I could die or even not give a shit to + this project someday and I don't want people to get + stuck in such cases. If you want to help, fill the following with to get GitHub/NPM r/w access. diff --git a/.gitignore b/.gitignore index e40ca0f..a7437ff 100644 --- a/.gitignore +++ b/.gitignore @@ -2,15 +2,36 @@ # module. Do not change it elsewhere, changes would # be overridden. +# Created by https://www.gitignore.io/api/osx,node,linux + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Node ### # Logs logs *.log npm-debug.log* +yarn-debug.log* +yarn-error.log* # Runtime data pids *.pid *.seed +*.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov @@ -21,24 +42,88 @@ coverage # nyc test coverage .nyc_output -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt +# Bower dependency directory (https://bower.io/) +bower_components + # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) +# Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories -node_modules -jspm_packages +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ # Optional npm cache directory .npm +# Optional eslint cache +.eslintcache + # Optional REPL history .node_repl_history +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +### OSX ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +# End of https://www.gitignore.io/api/osx,node,linux + # Coveralls key .coveralls.yml diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 412a46e..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - semi: true, - printWidth: 80, - singleQuote: true, - trailingComma: 'es5', - proseWrap: 'always', -}; diff --git a/.travis.yml b/.travis.yml index 0c36f4f..4c9b3c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,9 +4,7 @@ language: node_js node_js: - - 6 - - 6.9.5 - - 7 - 8 + - 8.12.0 - 9 - 10 diff --git a/README.md b/README.md index 7392d41..c108f85 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,14 @@ # metapak > Node modules authoring made easy. -[![NPM version](https://badge.fury.io/js/metapak.svg)](https://npmjs.org/package/metapak) +[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nfroidure/metapak/blob/master/LICENSE) [![Build status](https://secure.travis-ci.org/nfroidure/metapak.svg)](https://travis-ci.org/nfroidure/metapak) +[![Coverage Status](https://coveralls.io/repos/nfroidure/metapak/badge.svg?branch=master)](https://coveralls.io/r/nfroidure/metapak?branch=master) +[![NPM version](https://badge.fury.io/js/metapak.svg)](https://npmjs.org/package/metapak) [![Dependency Status](https://david-dm.org/nfroidure/metapak.svg)](https://david-dm.org/nfroidure/metapak) [![devDependency Status](https://david-dm.org/nfroidure/metapak/dev-status.svg)](https://david-dm.org/nfroidure/metapak#info=devDependencies) -[![Coverage Status](https://coveralls.io/repos/nfroidure/metapak/badge.svg?branch=master)](https://coveralls.io/r/nfroidure/metapak?branch=master) -[![Code Climate](https://codeclimate.com/github/nfroidure/metapak.svg)](https://codeclimate.com/github/nfroidure/metapak) -[![Dependency Status](https://dependencyci.com/github/nfroidure/metapak/badge)](https://dependencyci.com/github/nfroidure/metapak) [![Package Quality](http://npm.packagequality.com/shield/metapak.svg)](http://packagequality.com/#?package=metapak) +[![Code Climate](https://codeclimate.com/github/nfroidure/metapak.svg)](https://codeclimate.com/github/nfroidure/metapak) [//]: # (::contents:start) diff --git a/bin/metapak.js b/bin/metapak.js index 2b2025f..a183329 100755 --- a/bin/metapak.js +++ b/bin/metapak.js @@ -2,12 +2,7 @@ 'use strict'; -const { - default: Knifecycle, - inject, - constant, - service, -} = require('knifecycle'); +const { default: Knifecycle, constant, service } = require('knifecycle'); const debug = require('debug')('metapak'); const fs = require('fs'); const YError = require('yerror'); @@ -27,87 +22,74 @@ const initBuildPackageGitHooks = require('../src/gitHooks'); const $ = new Knifecycle(); $.register(constant('ENV', process.env)); -$.register( - service( - 'PROJECT_DIR', - inject( - ['log', 'fs'], - ({ log, fs }) => - new Promise(resolve => { - const projectDir = path.join(__dirname, '..', '..', '..'); - - // Here we assume that if a `node_modules` folder exists - // in the directory, we must be inside a module - fs.accessAsync( - path.join(projectDir, 'node_modules'), - fs.constants.R_OK - ) - .then(() => { - log('debug', 'Found the project dir:', projectDir); - resolve(projectDir); - }) - .catch(err => { - const metapakDir = path.join(__dirname, '..'); - - log( - 'debug', - 'Project dir does not exist, assuming we are running on' + - ' `metapak` itself:', - metapakDir - ); - log('stack', err.stack); - resolve(metapakDir); - }); - }) - ) - ) -); +$.register(service(initProjectDir, 'PROJECT_DIR', ['log', 'fs'])); + +function initProjectDir({ log, fs }) { + return new Promise(resolve => { + const projectDir = path.join(__dirname, '..', '..', '..'); + + // Here we assume that if a `node_modules` folder exists + // in the directory, we must be inside a module + fs.accessAsync(path.join(projectDir, 'node_modules'), fs.constants.R_OK) + .then(() => { + log('debug', 'Found the project dir:', projectDir); + resolve(projectDir); + }) + .catch(err => { + const metapakDir = path.join(__dirname, '..'); + + log( + 'debug', + 'Project dir does not exist, assuming we are running on' + + ' `metapak` itself:', + metapakDir + ); + log('stack', err.stack); + resolve(metapakDir); + }); + }); +} -$.register( - service( - 'GIT_HOOKS_DIR', - inject( - ['PROJECT_DIR', 'log'], - ({ PROJECT_DIR, log }) => - new Promise(resolve => { - exec( - 'git rev-parse --git-dir', - { - cwd: PROJECT_DIR, - }, - (err, stdout, stderr) => { - const outputPath = path.join(stdout.toString().trim(), 'hooks'); - const GIT_HOOKS_DIR = path.isAbsolute(outputPath) - ? outputPath - : path.join(PROJECT_DIR, outputPath); - - if (err || !stdout) { - log('debug', 'Could not find hooks dir.', err ? err.stack : ''); - log('debug', 'stdout:', stdout); - log('debug', 'stderr:', stderr); - resolve(''); - return; - } - log('debug', 'Found hooks dir:', GIT_HOOKS_DIR); - - // Check the dir exists in order to avoid bugs in non-git - // envs (docker images for instance) - fs.accessAsync(GIT_HOOKS_DIR, fs.constants.W_OK) - .then(() => { - log('debug', 'Hooks dir exists:', GIT_HOOKS_DIR); - resolve(GIT_HOOKS_DIR); - }) - .catch(err2 => { - log('debug', 'Hooks dir does not exist:', GIT_HOOKS_DIR); - log('stack', err2.stack); - resolve(''); - }); - } - ); - }) - ) - ) -); +$.register(service(initGitHooksDir, 'GIT_HOOKS_DIR', ['PROJECT_DIR', 'log'])); + +function initGitHooksDir({ PROJECT_DIR, log }) { + return new Promise(resolve => { + exec( + 'git rev-parse --git-dir', + { + cwd: PROJECT_DIR, + }, + (err, stdout, stderr) => { + const outputPath = path.join(stdout.toString().trim(), 'hooks'); + const GIT_HOOKS_DIR = path.isAbsolute(outputPath) + ? outputPath + : path.join(PROJECT_DIR, outputPath); + + if (err || !stdout) { + log('debug', 'Could not find hooks dir.', err ? err.stack : ''); + log('debug', 'stdout:', stdout); + log('debug', 'stderr:', stderr); + resolve(''); + return; + } + log('debug', 'Found hooks dir:', GIT_HOOKS_DIR); + + // Check the dir exists in order to avoid bugs in non-git + // envs (docker images for instance) + fs.accessAsync(GIT_HOOKS_DIR, fs.constants.W_OK) + .then(() => { + log('debug', 'Hooks dir exists:', GIT_HOOKS_DIR); + resolve(GIT_HOOKS_DIR); + }) + .catch(err2 => { + log('debug', 'Hooks dir does not exist:', GIT_HOOKS_DIR); + log('stack', err2.stack); + resolve(''); + }); + } + ); + }); +} $.register(constant('require', require)); $.register(constant('exit', process.exit)); @@ -134,52 +116,46 @@ program .option('-d, --dry-run', 'Print the changes without doing it') .parse(process.argv); -$.register( - service( - 'mkdirp', - inject(['log'], ({ log }) => { - const mkdirpAsync = Promise.promisify(mkdirp.mkdirp); - - return Promise.resolve((path, ...args) => { - if (program.dryRun) { - log('debug', 'Create a folder:', path); - return Promise.resolve(); - } - return preventChanges(path, ...args) || mkdirpAsync(path, ...args); - }); - }) - ) -); +$.register(service(initMkdirp, 'mkdirp', ['log'])); -$.register( - service( - 'fs', - inject(['log'], ({ log }) => { - const baseFS = Promise.promisifyAll(fs); - - return Promise.resolve({ - readFileAsync: baseFS.readFileAsync.bind(baseFS), - accessAsync: baseFS.accessAsync.bind(baseFS), - readdirAsync: baseFS.readdirAsync.bind(baseFS), - unlinkAsync: (path, ...args) => { - if (program.dryRun) { - log('debug', 'Delete a file:', path); - return Promise.resolve(); - } - return preventChanges(path) || baseFS.unlinkAsync(path, ...args); - }, - writeFileAsync: (path, ...args) => { - if (program.dryRun) { - log('debug', 'Modify a file:', path); - return Promise.resolve(); - } - return preventChanges(path) || baseFS.writeFileAsync(path, ...args); - }, - constants: baseFS.constants, - }); - }) - ) -); +function initMkdirp({ log }) { + const mkdirpAsync = Promise.promisify(mkdirp.mkdirp); + + return Promise.resolve((path, ...args) => { + if (program.dryRun) { + log('debug', 'Create a folder:', path); + return Promise.resolve(); + } + return preventChanges(path, ...args) || mkdirpAsync(path, ...args); + }); +} + +$.register(service(initFS, 'fs', ['log'])); + +function initFS({ log }) { + const baseFS = Promise.promisifyAll(fs); + + return Promise.resolve({ + readFileAsync: baseFS.readFileAsync.bind(baseFS), + accessAsync: baseFS.accessAsync.bind(baseFS), + readdirAsync: baseFS.readdirAsync.bind(baseFS), + unlinkAsync: (path, ...args) => { + if (program.dryRun) { + log('debug', 'Delete a file:', path); + return Promise.resolve(); + } + return preventChanges(path) || baseFS.unlinkAsync(path, ...args); + }, + writeFileAsync: (path, ...args) => { + if (program.dryRun) { + log('debug', 'Modify a file:', path); + return Promise.resolve(); + } + return preventChanges(path) || baseFS.writeFileAsync(path, ...args); + }, + constants: baseFS.constants, + }); +} $.run([ 'ENV', diff --git a/package-lock.json b/package-lock.json index dfe60ab..a2af803 100644 --- a/package-lock.json +++ b/package-lock.json @@ -131,39 +131,33 @@ } }, "@sinonjs/commons": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.0.2.tgz", - "integrity": "sha512-WR3dlgqJP4QNrLC4iXN/5/2WaLQQ0VijOOkmflqFGVJ6wLEpbSjo7c0ZeGIdtY8Crk7xBBp87sM6+Mkerz7alw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", + "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/formatio": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz", - "integrity": "sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", + "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", "dev": true, "requires": { - "@sinonjs/samsam": "2.1.0" - }, - "dependencies": { - "@sinonjs/samsam": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz", - "integrity": "sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw==", - "dev": true, - "requires": { - "array-from": "^2.1.1" - } - } + "@sinonjs/samsam": "^2 || ^3" } }, "@sinonjs/samsam": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.2.tgz", - "integrity": "sha512-ZwTHAlC9akprWDinwEPD4kOuwaYZlyMwVJIANsKNC3QVp0AHB04m7RnB4eqeWfgmxw8MGTzS9uMaw93Z3QcZbw==", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.0.2.tgz", + "integrity": "sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.0.2", + "array-from": "^2.1.1", + "lodash.get": "^4.4.2" + } }, "JSONStream": { "version": "1.3.5", @@ -176,19 +170,16 @@ } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", "dev": true }, "acorn-jsx": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", - "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", - "dev": true, - "requires": { - "acorn": "^5.0.3" - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true }, "add-stream": { "version": "1.0.0", @@ -276,21 +267,6 @@ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -318,6 +294,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", @@ -360,9 +342,9 @@ } }, "bluebird": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", - "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, "brace-expansion": { "version": "1.1.11", @@ -419,19 +401,10 @@ "integrity": "sha512-xGBpPqoBvn3unBW7oxgb8aJn42K0m9m1/wyjmazah10Fq7bROGG3kRAE6OIyr3U3PIJUqGuebhCEdMk9OKJG0A==", "dev": true }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, "camelcase": { @@ -531,9 +504,9 @@ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" }, "commitizen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-3.0.4.tgz", - "integrity": "sha512-djR5F7RBsGALyUEm/B1H/85nsN4L1F5DhWN+9/efSwqHDSyhw2MK6MF2VRuD26PUqGkQbcUlYO61btkTWjcjVw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-3.0.5.tgz", + "integrity": "sha512-WB9sz7qudArOsW1ninU8YGLNoXLQ5lJBZf538iQ7i96SXAkqVMZdmPtSyN4WFPM5PjQR7rWxDa+hzfGIJfrXUg==", "dev": true, "requires": { "cachedir": "2.1.0", @@ -553,7 +526,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -575,28 +548,27 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "conventional-changelog": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.3.tgz", - "integrity": "sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.0.5.tgz", + "integrity": "sha512-JYSVGJbnOl9S2gkZwmoJ+wX2gxNVHodUmEiv+eIykeJBNX0zN5vJ3oa2xCvk2HiF7TZ+Les0eq/aX49dcymONA==", "dev": true, "requires": { - "conventional-changelog-angular": "^1.6.6", - "conventional-changelog-atom": "^2.0.0", - "conventional-changelog-codemirror": "^2.0.0", - "conventional-changelog-core": "^3.1.0", - "conventional-changelog-ember": "^2.0.1", - "conventional-changelog-eslint": "^3.0.0", - "conventional-changelog-express": "^2.0.0", - "conventional-changelog-jquery": "^0.1.0", - "conventional-changelog-jscs": "^0.1.0", - "conventional-changelog-jshint": "^2.0.0", - "conventional-changelog-preset-loader": "^2.0.1" + "conventional-changelog-angular": "^5.0.2", + "conventional-changelog-atom": "^2.0.1", + "conventional-changelog-codemirror": "^2.0.1", + "conventional-changelog-core": "^3.1.5", + "conventional-changelog-ember": "^2.0.2", + "conventional-changelog-eslint": "^3.0.1", + "conventional-changelog-express": "^2.0.1", + "conventional-changelog-jquery": "^3.0.4", + "conventional-changelog-jshint": "^2.0.1", + "conventional-changelog-preset-loader": "^2.0.2" } }, "conventional-changelog-angular": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", - "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", + "integrity": "sha512-yx7m7lVrXmt4nKWQgWZqxSALEiAKZhOAcbxdUaU9575mB0CzXVbgrgpfSnSP7OqWDUTYGD0YVJ0MSRdyOPgAwA==", "dev": true, "requires": { "compare-func": "^1.3.1", @@ -604,106 +576,97 @@ } }, "conventional-changelog-atom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.0.tgz", - "integrity": "sha512-ygwkwyTQYAm4S0tsDt+1yg8tHhRrv7qu9SOWPhNQlVrInFLsfKc0FActCA3de2ChknxpVPY2B53yhKvCAtkBCg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz", + "integrity": "sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-cli": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.5.tgz", - "integrity": "sha512-StqCVo10g194UhyLIhg+M/tTVu6YjGnON/IiQ9Ty/h+dgi9obYAkknwpmmgGJMQ3P3vNRljuZBupz0N2tpdxXg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.11.tgz", + "integrity": "sha512-00Z4EZfpuQxvStA5fjJXdixXCtRd5/AUMUOhYKOomhH3cRFqzF/P0MP8vavT9wnGkR0eba9mrWsMuqeVszPRxQ==", "dev": true, "requires": { "add-stream": "^1.0.0", - "conventional-changelog": "^2.0.3", + "conventional-changelog": "^3.0.5", "lodash": "^4.2.1", "meow": "^4.0.0", "tempfile": "^1.1.1" } }, "conventional-changelog-codemirror": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.0.tgz", - "integrity": "sha512-pZt/YynJ5m8C9MGV5wkBuhM1eX+8a84fmNrdOylxg/lJV+lgtAiNhnpskNuixtf71iKVWSlEqMQ6z6CH7/Uo5A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz", + "integrity": "sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.0.tgz", - "integrity": "sha512-bcZkcFXkqVgG2W8m/1wjlp2wn/BKDcrPgw3/mvSEQtzs8Pax8JbAPFpEQReHY92+EKNNXC67wLA8y2xcNx0rDA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.5.tgz", + "integrity": "sha512-iwqAotS4zk0wA4S84YY1JCUG7X3LxaRjJxuUo6GI4dZuIy243j5nOg/Ora35ExT4DOiw5dQbMMQvw2SUjh6moQ==", "dev": true, "requires": { - "conventional-changelog-writer": "^4.0.0", - "conventional-commits-parser": "^3.0.0", + "conventional-changelog-writer": "^4.0.2", + "conventional-commits-parser": "^3.0.1", "dateformat": "^3.0.0", "get-pkg-repo": "^1.0.0", - "git-raw-commits": "^2.0.0", + "git-raw-commits": "2.0.0", "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.0", + "git-semver-tags": "^2.0.2", "lodash": "^4.2.1", "normalize-package-data": "^2.3.5", "q": "^1.5.1", - "read-pkg": "^1.1.0", - "read-pkg-up": "^1.0.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", "through2": "^2.0.0" } }, "conventional-changelog-ember": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.1.tgz", - "integrity": "sha512-Ym1xLi7YLGooLUpHCJhlXJW5V7u/g+hlYD/+HKt0KqG2qbiBi7e7/HO9aScXTEKUBGMm7m4C443R+eCWQI2ynA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz", + "integrity": "sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-eslint": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.0.tgz", - "integrity": "sha512-Acn20v+13c+o1OAWKvc9sCCl73Nj2vOMyn+G82euiMZwgYNE9CcBkTnw/GKdBi9KiZMK9uy+SCQ/QyAEE+8vZA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.1.tgz", + "integrity": "sha512-yH3+bYrtvgKxSFChUBQnKNh9/U9kN2JElYBm253VpYs5wXhPHVc9ENcuVGWijh24nnOkei7wEJmnmUzgZ4ok+A==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-express": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.0.tgz", - "integrity": "sha512-2svPjeXCrjwwqnzu/f3qU5LWoLO0jmUIEbtbbSRXAAP9Ag+137b484eJsiRt9DPYXSVzog0Eoek3rvCzfHcphQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz", + "integrity": "sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-jquery": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", - "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", - "dev": true, - "requires": { - "q": "^1.4.1" - } - }, - "conventional-changelog-jscs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", - "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz", + "integrity": "sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ==", "dev": true, "requires": { - "q": "^1.4.1" + "q": "^1.5.1" } }, "conventional-changelog-jshint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.0.tgz", - "integrity": "sha512-+4fCln755N0ZzRUEdcDWR5Due71Dsqkbov6K/UmVCnljZvhVh0/wpT4YROoSsAnhfZO8shyWDPFKm6EP20pLQg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz", + "integrity": "sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg==", "dev": true, "requires": { "compare-func": "^1.3.1", @@ -711,19 +674,19 @@ } }, "conventional-changelog-preset-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.1.tgz", - "integrity": "sha512-HiSfhXNzAzG9klIqJaA97MMiNBR4js+53g4Px0k7tgKeCNVXmrDrm+CY+nIqcmG5NVngEPf8rAr7iji1TWW7zg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz", + "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==", "dev": true }, "conventional-changelog-writer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz", - "integrity": "sha512-hMZPe0AQ6Bi05epeK/7hz80xxk59nPA5z/b63TOHq2wigM0/akreOc8N4Jam5b9nFgKWX1e9PdPv2ewgW6bcfg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz", + "integrity": "sha512-d8/FQY/fix2xXEBUhOo8u3DCbyEw3UOQgYHxLsPDw+wHUDma/GQGAGsGtoH876WyNs32fViHmTOUrgRKVLvBug==", "dev": true, "requires": { "compare-func": "^1.3.1", - "conventional-commits-filter": "^2.0.0", + "conventional-commits-filter": "^2.0.1", "dateformat": "^3.0.0", "handlebars": "^4.0.2", "json-stringify-safe": "^5.0.1", @@ -741,9 +704,9 @@ "dev": true }, "conventional-commits-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz", - "integrity": "sha512-Cfl0j1/NquB/TMVx7Wrmyq7uRM+/rPQbtVVGwzfkhZ6/yH6fcMmP0Q/9044TBZPTNdGzm46vXFXL14wbET0/Mg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz", + "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", "dev": true, "requires": { "is-subset": "^0.1.1", @@ -751,9 +714,9 @@ } }, "conventional-commits-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz", - "integrity": "sha512-GWh71U26BLWgMykCp+VghZ4s64wVbtseECcKQ/PvcPZR2cUnz+FUc2J9KjxNl7/ZbCxST8R03c9fc+Vi0umS9Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz", + "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", "dev": true, "requires": { "JSONStream": "^1.0.4", @@ -853,9 +816,9 @@ "dev": true }, "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "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" } @@ -896,29 +859,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -990,9 +930,9 @@ "dev": true }, "eslint": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.7.0.tgz", - "integrity": "sha512-zYCeFQahsxffGl87U2aJ7DPyH8CbWgxBC213Y8+TCanhUTf2gEvfq3EKpHmEcozTLyPmGe9LZdMAwC/CpJBM5A==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", + "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1004,7 +944,7 @@ "eslint-scope": "^4.0.0", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", + "espree": "^5.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", @@ -1012,9 +952,9 @@ "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", @@ -1027,7 +967,6 @@ "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", @@ -1036,9 +975,9 @@ }, "dependencies": { "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -1062,9 +1001,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz", - "integrity": "sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", + "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1093,13 +1032,14 @@ "dev": true }, "espree": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz", - "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", "dev": true, "requires": { - "acorn": "^5.6.0", - "acorn-jsx": "^4.1.1" + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "esprima": { @@ -1316,14 +1256,14 @@ } }, "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, "requires": { "circular-json": "^0.3.1", - "del": "^2.0.2", "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", "write": "^0.2.1" } }, @@ -1366,9 +1306,9 @@ "dev": true }, "fs-extra": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", - "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -1408,7 +1348,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -1416,6 +1356,16 @@ "map-obj": "^1.0.0" } }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", @@ -1425,6 +1375,19 @@ "repeating": "^2.0.0" } }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -1433,7 +1396,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -1451,10 +1414,66 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -1465,6 +1484,15 @@ "strip-indent": "^1.0.1" } }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -1534,9 +1562,9 @@ } }, "git-semver-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.0.tgz", - "integrity": "sha512-lSgFc3zQTul31nFje2Q8XdNcTOI6B4I3mJRPCgFzHQQLfxfqdWTYzdtCaynkK5Xmb2wQlSJoKolhXJ1VhKROnQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz", + "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==", "dev": true, "requires": { "meow": "^4.0.0", @@ -1612,32 +1640,10 @@ "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", "dev": true }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "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 }, "growl": { @@ -1727,6 +1733,16 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -1781,9 +1797,9 @@ } }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "is-arrayish": { @@ -1799,7 +1815,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -1867,34 +1883,10 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -1927,12 +1919,6 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", @@ -2096,9 +2082,9 @@ } }, "just-extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", - "integrity": "sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", "dev": true }, "kind-of": { @@ -2110,11 +2096,11 @@ } }, "knifecycle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/knifecycle/-/knifecycle-3.1.0.tgz", - "integrity": "sha512-n1L6lXxJHIGtSS8YJKaxmxzEl84jcPE1/T96HV0x3GMYpCaThR5Enpf3wUfRja94ZgUY+4PzjVaKMc9RsVaYyQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/knifecycle/-/knifecycle-5.1.4.tgz", + "integrity": "sha512-B/YqZcKpj5K0iAN5dgejUmXsvsq4KNhg442ZCCNDcovqTPCvpS0O9+PUoqw7fewZORL7SJKKCuXLSY+w2MMhCQ==", "requires": { - "debug": "^4.0.1", + "debug": "^4.1.0", "yerror": "^2.1.3" } }, @@ -2234,9 +2220,9 @@ "dev": true }, "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, "meow": { @@ -2258,46 +2244,26 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } } } }, "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, "metapak-nfroidure": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/metapak-nfroidure/-/metapak-nfroidure-8.0.0.tgz", - "integrity": "sha512-tbzlgJurnp/2kC5LKycPiOE/mGNnkDTgsBC+c3va5aXaqRyS+CGmLdOuqBApvcu/zyLNcuEZOtxgx0dYZWk2ug==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/metapak-nfroidure/-/metapak-nfroidure-9.3.1.tgz", + "integrity": "sha512-Gp9tL6xLF48FSc0aa3qCZ69n+q92zeenXmc/NwO5I0tLYfhPVZFJ4RcbSDTbqKrVDZkblipF1rQ6CPD3JDGgbw==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "^1.0.5", + "yerror": "^2.1.3" } }, "micromatch": { @@ -2468,13 +2434,13 @@ "dev": true }, "nise": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.6.tgz", - "integrity": "sha512-1GedetLKzmqmgwabuMSqPsT7oumdR77SBpDfNNJhADRIeA3LN/2RVqR4fFqwvzhAqcTef6PPCzQwITE/YQ8S8A==", + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz", + "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", "dev": true, "requires": { - "@sinonjs/formatio": "3.0.0", - "just-extend": "^3.0.0", + "@sinonjs/formatio": "^3.1.0", + "just-extend": "^4.0.2", "lolex": "^2.3.2", "path-to-regexp": "^1.7.0", "text-encoding": "^0.6.4" @@ -3761,6 +3727,15 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-github-repo-url": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", @@ -3896,9 +3871,9 @@ "dev": true }, "prettier": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", - "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.1.tgz", + "integrity": "sha512-XXUITwIkGb3CPJ2hforHah/zTINRyie5006Jd2HKy2qz7snEJXl0KLfsJZW/wst9g6R2rFvqba3VpNYdu1hDcA==", "dev": true }, "prettier-linter-helpers": { @@ -3917,9 +3892,9 @@ "dev": true }, "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "psl": { @@ -3953,9 +3928,9 @@ "dev": true }, "randomatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", - "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { "is-number": "^4.0.0", @@ -3978,100 +3953,29 @@ } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^1.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "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==", "dev": true, "requires": { @@ -4181,23 +4085,13 @@ } } }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-dir": { @@ -4211,9 +4105,9 @@ } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "restore-cursor": { @@ -4233,12 +4127,12 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "run-async": { @@ -4321,28 +4215,28 @@ "dev": true }, "sinon": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.0.0.tgz", - "integrity": "sha512-8OrSYFPZ9xaECfi1ayVMd0ihYCW2OZYgX3rBczrB990gHZMM+aftvhNTJazGz/luS0Us9NWgD5P3KGQ7kYZvGg==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.3.tgz", + "integrity": "sha512-i6j7sqcLEqTYqUcMV327waI745VASvYuSuQMCjbAwlpAeuCgKZ3LtrjDxAbu+GjNQR0FEDpywtwGCIh8GicNyg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", + "@sinonjs/commons": "^1.3.0", + "@sinonjs/formatio": "^3.1.0", + "@sinonjs/samsam": "^3.0.2", "diff": "^3.5.0", - "lodash.get": "^4.4.2", "lolex": "^3.0.0", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" + "nise": "^1.4.8", + "supports-color": "^5.5.0" } }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -4376,9 +4270,9 @@ "dev": true }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -4402,9 +4296,9 @@ } }, "spdx-license-ids": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, "split": { @@ -4504,21 +4398,21 @@ } }, "table": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", - "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", + "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", "dev": true, "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", - "slice-ansi": "1.0.0", + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", "string-width": "^2.1.1" }, "dependencies": { "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -4553,7 +4447,7 @@ }, "text-encoding": { "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", "dev": true }, @@ -4571,17 +4465,17 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", + "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, @@ -4747,7 +4641,7 @@ }, "uuid": { "version": "2.0.3", - "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", "dev": true }, diff --git a/package.json b/package.json index cd16a4d..40fb8b2 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ } }, "scripts": { - "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", + "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", "cli": "env NODE_ENV=${NODE_ENV:-cli}", "cover": "nyc npm test && nyc report --reporter=html --reporter=text", "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls && rm -rf ./coverage", @@ -30,7 +30,7 @@ "prettier": "prettier --write 'src/**/*.js' 'bin/**/*.js'", "preversion": "npm t && npm run lint && npm run metapak -- -s", "test": "npm run mocha", - "version": "npm run changelog && git add CHANGELOG.md" + "version": "npm run changelog" }, "repository": { "type": "git", @@ -50,30 +50,30 @@ "metapak": "bin/metapak.js" }, "dependencies": { - "bluebird": "^3.5.2", + "bluebird": "^3.5.3", "commander": "^2.19.0", - "debug": "^4.1.0", + "debug": "^4.1.1", "glob": "^7.1.3", - "knifecycle": "^3.1.0", + "knifecycle": "^5.1.4", "mkdirp": "^0.5.1", "sort-object": "^3.0.2", "yerror": "^2.1.3" }, "devDependencies": { - "commitizen": "^3.0.4", - "conventional-changelog-cli": "^2.0.5", + "commitizen": "^3.0.5", + "conventional-changelog-cli": "^2.0.11", "coveralls": "^3.0.2", "cz-conventional-changelog": "^2.1.0", - "eslint": "^5.7.0", - "eslint-plugin-prettier": "^3.0.0", - "metapak-nfroidure": "8.0.0", + "eslint": "^5.12.1", + "eslint-plugin-prettier": "^3.0.1", + "metapak-nfroidure": "9.3.1", "mocha": "^5.2.0", "nyc": "^13.0.1", - "prettier": "^1.14.3", - "sinon": "^7.0.0" + "prettier": "^1.16.0", + "sinon": "^7.2.3" }, "engines": { - "node": ">=6.9.5" + "node": ">=8.12.0" }, "config": { "commitizen": { @@ -93,5 +93,44 @@ "prettier" ] }, - "contributors": [] + "contributors": [], + "files": [ + "src/**/*.js", + "LICENSE", + "README.md", + "CHANGELOG.md" + ], + "nyc": { + "exclude": [ + "'src/**/*.mocha.js'" + ] + }, + "eslintConfig": { + "extends": [ + "eslint:recommended" + ], + "parserOptions": { + "sourceType": "script", + "modules": true + }, + "env": { + "es6": true, + "node": true, + "jest": true, + "mocha": true + }, + "plugins": [ + "prettier" + ], + "rules": { + "prettier/prettier": "error" + } + }, + "prettier": { + "semi": true, + "printWidth": 80, + "singleQuote": true, + "trailingComma": "es5", + "proseWrap": "always" + } } diff --git a/src/assets.js b/src/assets.js index 8257535..6763a13 100644 --- a/src/assets.js +++ b/src/assets.js @@ -1,6 +1,6 @@ 'use strict'; -const { inject, service } = require('knifecycle'); +const { service } = require('knifecycle'); const path = require('path'); const { identity, @@ -13,11 +13,9 @@ module.exports = initBuildPackageAssets; function initBuildPackageAssets($) { $.register( service( + services => Promise.resolve(buildPackageAssets.bind(null, services)), 'buildPackageAssets', - inject( - ['PROJECT_DIR', 'fs', 'log', 'glob', 'require', 'mkdirp'], - services => Promise.resolve(buildPackageAssets.bind(null, services)) - ) + ['PROJECT_DIR', 'fs', 'log', 'glob', 'require', 'mkdirp'] ) ); } diff --git a/src/gitHooks.js b/src/gitHooks.js index 93d719c..afc6e7d 100644 --- a/src/gitHooks.js +++ b/src/gitHooks.js @@ -1,6 +1,6 @@ 'use strict'; -const { inject, service } = require('knifecycle'); +const { service } = require('knifecycle'); const { buildMetapakModulePath, mapConfigsSequentially, @@ -13,11 +13,9 @@ module.exports = initBuildPackageGitHooks; function initBuildPackageGitHooks($) { $.register( service( + services => Promise.resolve(buildPackageGitHooks.bind(null, services)), 'buildPackageGitHooks', - inject( - ['ENV', 'PROJECT_DIR', 'GIT_HOOKS_DIR', 'fs', 'log', 'os', 'require'], - services => Promise.resolve(buildPackageGitHooks.bind(null, services)) - ) + ['ENV', 'PROJECT_DIR', 'GIT_HOOKS_DIR', 'fs', 'log', 'os', 'require'] ) ); } @@ -33,6 +31,12 @@ function buildPackageGitHooks( return Promise.resolve(); } + // Avoid adding hooks for package that ain't at the git + // root directory + if (path.relative(PROJECT_DIR, GIT_HOOKS_DIR).startsWith('..')) { + return Promise.resolve(); + } + return mapConfigsSequentially( metapakModulesSequence, metapakModulesConfigs, diff --git a/src/gitHooks.mocha.js b/src/gitHooks.mocha.js index 2d289b4..d3de8f3 100644 --- a/src/gitHooks.mocha.js +++ b/src/gitHooks.mocha.js @@ -22,10 +22,8 @@ describe('buildPackageGitHooks', () => { requireStub = sinon.stub(); $ = new Knifecycle(); - $.register(constant('ENV', {})); $.register(constant('log', sinon.stub())); - $.register(constant('PROJECT_DIR', 'project/dir')); - $.register(constant('GIT_HOOKS_DIR', '.git/hooks')); + $.register(constant('PROJECT_DIR', '/home/whoiam/project/dir')); $.register(constant('os', { EOL: '\n' })); $.register( constant('fs', { @@ -38,6 +36,11 @@ describe('buildPackageGitHooks', () => { }); it('should work with one module and one config', done => { + $.register(constant('ENV', {})); + $.register( + constant('GIT_HOOKS_DIR', '/home/whoiam/project/dir/.git/hooks') + ); + requireStub.onCall(0).returns(hooks => { hooks['pre-commit'] = hooks['pre-commit'] || []; hooks['pre-commit'].push('npm run test && npm run lint || exit 1'); @@ -60,14 +63,22 @@ describe('buildPackageGitHooks', () => { 'metapak-fantasia': ['_common', 'test'], }).then(() => { assert.deepEqual(require.args, [ - ['project/dir/node_modules/metapak-nfroidure/src/_common/hooks.js'], - ['project/dir/node_modules/metapak-nfroidure/src/lol/hooks.js'], - ['project/dir/node_modules/metapak-fantasia/src/_common/hooks.js'], - ['project/dir/node_modules/metapak-fantasia/src/test/hooks.js'], + [ + '/home/whoiam/project/dir/node_modules/metapak-nfroidure/src/_common/hooks.js', + ], + [ + '/home/whoiam/project/dir/node_modules/metapak-nfroidure/src/lol/hooks.js', + ], + [ + '/home/whoiam/project/dir/node_modules/metapak-fantasia/src/_common/hooks.js', + ], + [ + '/home/whoiam/project/dir/node_modules/metapak-fantasia/src/test/hooks.js', + ], ]); assert.deepEqual(writeFileStub.args, [ [ - '.git/hooks/pre-commit', + '/home/whoiam/project/dir/.git/hooks/pre-commit', '#!/bin/sh\n' + '# Automagically generated by metapak, do not change in place.\n' + '# Your changes would be loose on the next npm install run.\n' + @@ -80,12 +91,12 @@ describe('buildPackageGitHooks', () => { [ 'debug', 'No hooks found at:', - 'project/dir/node_modules/metapak-nfroidure/src/lol/hooks.js', + '/home/whoiam/project/dir/node_modules/metapak-nfroidure/src/lol/hooks.js', ], [ 'debug', 'No hooks found at:', - 'project/dir/node_modules/metapak-fantasia/src/test/hooks.js', + '/home/whoiam/project/dir/node_modules/metapak-fantasia/src/test/hooks.js', ], ]); }) @@ -93,4 +104,78 @@ describe('buildPackageGitHooks', () => { .then(done) .catch(done); }); + + it('should not run on CI', done => { + $.register( + constant('ENV', { + CI: 1, + }) + ); + $.register( + constant('GIT_HOOKS_DIR', '/home/whoiam/project/dir/.git/hooks') + ); + + requireStub.onCall(0).returns(hooks => { + hooks['pre-commit'] = hooks['pre-commit'] || []; + hooks['pre-commit'].push('npm run test && npm run lint || exit 1'); + return hooks; + }); + requireStub.onCall(1).throws(new Error('E_ERROR_1')); + requireStub.onCall(2).returns(hooks => { + hooks['pre-commit'] = hooks['pre-commit'] || []; + hooks['pre-commit'].push('npm run coveralls'); + return hooks; + }); + requireStub.onCall(3).throws(new Error('E_ERROR_2')); + readFileStub.returns(Promise.resolve('')); + writeFileStub.returns(Promise.resolve()); + + $.run(DEPENDENCIES) + .then(({ require, log, buildPackageGitHooks }) => + buildPackageGitHooks({}, ['metapak-nfroidure', 'metapak-fantasia'], { + 'metapak-nfroidure': ['_common', 'lol'], + 'metapak-fantasia': ['_common', 'test'], + }).then(() => { + assert.deepEqual(require.args, []); + assert.deepEqual(writeFileStub.args, []); + assert.deepEqual(log.args.filter(filterLogs), []); + }) + ) + .then(done) + .catch(done); + }); + + it('should not run on parent git repository', done => { + $.register(constant('ENV', {})); + $.register(constant('GIT_HOOKS_DIR', '/home/whoiam/project/.git/hooks')); + + requireStub.onCall(0).returns(hooks => { + hooks['pre-commit'] = hooks['pre-commit'] || []; + hooks['pre-commit'].push('npm run test && npm run lint || exit 1'); + return hooks; + }); + requireStub.onCall(1).throws(new Error('E_ERROR_1')); + requireStub.onCall(2).returns(hooks => { + hooks['pre-commit'] = hooks['pre-commit'] || []; + hooks['pre-commit'].push('npm run coveralls'); + return hooks; + }); + requireStub.onCall(3).throws(new Error('E_ERROR_2')); + readFileStub.returns(Promise.resolve('')); + writeFileStub.returns(Promise.resolve()); + + $.run(DEPENDENCIES) + .then(({ require, log, buildPackageGitHooks }) => + buildPackageGitHooks({}, ['metapak-nfroidure', 'metapak-fantasia'], { + 'metapak-nfroidure': ['_common', 'lol'], + 'metapak-fantasia': ['_common', 'test'], + }).then(() => { + assert.deepEqual(require.args, []); + assert.deepEqual(writeFileStub.args, []); + assert.deepEqual(log.args.filter(filterLogs), []); + }) + ) + .then(done) + .catch(done); + }); }); diff --git a/src/packageConf.js b/src/packageConf.js index 44303d5..c576b48 100644 --- a/src/packageConf.js +++ b/src/packageConf.js @@ -1,6 +1,6 @@ 'use strict'; -const { inject, service } = require('knifecycle'); +const { service } = require('knifecycle'); const path = require('path'); const sortobject = require('sort-object'); const { @@ -16,10 +16,9 @@ module.exports = initBuildPackageConf; function initBuildPackageConf($) { $.register( service( + services => Promise.resolve(buildPackageConf.bind(null, services)), 'buildPackageConf', - inject(['PROJECT_DIR', 'fs', 'require', 'log'], services => - Promise.resolve(buildPackageConf.bind(null, services)) - ) + ['PROJECT_DIR', 'fs', 'require', 'log'] ) ); }