From 23e713423a695d3cc5ed407821f917f9268022ae Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 14 Sep 2019 20:19:49 +0100 Subject: [PATCH 01/19] started new module --- .vscode/launch.json | 19 ++++++++ jest-test.config.js | 19 ++++++++ modules/accounts.js | 94 +++++++++++++++++++------------------ modules/accountsOld.js | 81 ++++++++++++++++++++++++++++++++ package.json | 15 ++---- unit tests/accounts.spec.js | 46 ++++++++++++++++++ 6 files changed, 217 insertions(+), 57 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 jest-test.config.js create mode 100644 modules/accountsOld.js create mode 100644 unit tests/accounts.spec.js diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..f221d6c --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ + +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Jest", + "program": "${workspaceFolder}/node_modules/.bin/jest", + "args": ["--runInBand"], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true, + "windows": { + "program": "${workspaceFolder}/node_modules/jest/bin/jest", + } + } + ] +} diff --git a/jest-test.config.js b/jest-test.config.js new file mode 100644 index 0000000..220e31c --- /dev/null +++ b/jest-test.config.js @@ -0,0 +1,19 @@ +'use strict' + +module.exports = { + displayName: 'test', + verbose: true, + collectCoverage: true, + coverageThreshold: { + global: { + branches: 0, + functions: 0, + lines: 0, + statements: 0 + } + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/__tests__/fixtures/', + ] +} diff --git a/modules/accounts.js b/modules/accounts.js index 5bcd759..a3f2826 100644 --- a/modules/accounts.js +++ b/modules/accounts.js @@ -1,51 +1,53 @@ -#!/usr/bin/env node - -/** - * Accounts module - * @module modules/accounts - */ 'use strict' -var sqlite = require('sqlite-async'); -let bcrypt = require('bcrypt-promise'); +const fs = require('fs-extra') +const mime = require('mime-types') +const sqlite = require('sqlite-async') +const saltRounds = 10 -/** - * This is a generic function that opens the database, executes a query, - * closes the database connection and returns the data. - * @param {String} query - The SQL statement to execute. - * @returns {Object} - the date returned by the query. - */ -async function runSQL(query) { - try { - console.log(query) - let DBName = "./website.db"; - const db = await sqlite.open(DBName); - const data = await db.all(query); - await db.close(); - if(data.length === 1) return data[0] - return data; - } catch(err) { - throw err +module.exports = class Accounts { + + constructor(dbName = ':memory:') { + return (async() => { + this.db = await sqlite.open(dbName) + // we need this table to store the user accounts + const sql = 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, user TEXT, pass TEXT);' + await this.db.run(sql) + return this + })() } -} -module.exports.checkCredentials = async(username, password)=> { - try { - var records = await runSQL(`SELECT count(id) AS count FROM users WHERE user="${username}";`); + async register(username, password, filename, filetype) { + const fileExtension = mime.extension(filetype) + await fs.copy(path, `public/avatars/${username}.${fileExtension}`) + password = await bcrypt.hash(password, saltRounds) + const sql = `INSERT INTO users(user, pass) VALUES("${username}", "${password}")` + await this.db.run(sql) + return true + } + + async login(username, password) { + let sql = `SELECT count(id) AS count FROM users WHERE user="${body.user}";` + const records = await this.db.get(sql) + if(!records.count) throw new Error(`username "${username}" not found`) + sql = `SELECT pass FROM users WHERE user = "${body.user}";` + const record = await db.get(sql) + const valid = await bcrypt.compare(body.pass, record.pass) + if(valid == false) throw new Error(`invalid password for account "${username}"`) + return true + } + + async checkCredentials(username, password) { + let sql = `SELECT count(id) AS count FROM users WHERE user="${username}";` + const records = await this.db.all(sql) if(!records.count) throw new Error("invalid username") - const record = await runSQL(`SELECT pass FROM users WHERE user = "${username}";`) + sql = `SELECT pass FROM users WHERE user = "${username}";` + const record = await this.db.get(sql) const valid = await bcrypt.compare(password, record.pass) if(valid == false) throw new Error(`invalid password`) return true - } catch(err) { - throw err } -} - - - -/* ----------------------------- STUB FUNCTIONS ----------------------------- */ /** * This function checks the database to see if a username already exists in @@ -54,9 +56,9 @@ module.exports.checkCredentials = async(username, password)=> { * @returns {boolean} - returns true if the username does not exist. * @throws {Error} - throws an error if the username already exists. */ -async function checkNoDuplicateUsername (username) { - return true -} + async checkNoDuplicateUsername(username) { + return true + } /** * This function takes data from an uploaded image and saves it to the `avatars` directory. The file name will be the username. @@ -65,9 +67,9 @@ async function checkNoDuplicateUsername (username) { * @returns {boolean} - returns true if the image is valid and is saved. * @throws {TypeError} - throws an error if the file is not a png or jpg image. */ -async function saveImage(path, mimetype) { - return true -} + async saveImage(path, mimetype) { + return true + } /** * This function adds new users to the database. @@ -76,6 +78,8 @@ async function saveImage(path, mimetype) { * @returns {boolean} - returns true if the username does not exist. * @throws {Error} - throws an error if the new user account has been created. */ -module.exports.addUser = async(username, password) => { - return true; + async addUser(username, password) { + return true + } + } \ No newline at end of file diff --git a/modules/accountsOld.js b/modules/accountsOld.js new file mode 100644 index 0000000..5bcd759 --- /dev/null +++ b/modules/accountsOld.js @@ -0,0 +1,81 @@ +#!/usr/bin/env node + +/** + * Accounts module + * @module modules/accounts + */ + +'use strict' + +var sqlite = require('sqlite-async'); +let bcrypt = require('bcrypt-promise'); + +/** + * This is a generic function that opens the database, executes a query, + * closes the database connection and returns the data. + * @param {String} query - The SQL statement to execute. + * @returns {Object} - the date returned by the query. + */ +async function runSQL(query) { + try { + console.log(query) + let DBName = "./website.db"; + const db = await sqlite.open(DBName); + const data = await db.all(query); + await db.close(); + if(data.length === 1) return data[0] + return data; + } catch(err) { + throw err + } +} + +module.exports.checkCredentials = async(username, password)=> { + try { + var records = await runSQL(`SELECT count(id) AS count FROM users WHERE user="${username}";`); + if(!records.count) throw new Error("invalid username") + const record = await runSQL(`SELECT pass FROM users WHERE user = "${username}";`) + const valid = await bcrypt.compare(password, record.pass) + if(valid == false) throw new Error(`invalid password`) + return true + } catch(err) { + throw err + } +} + + + +/* ----------------------------- STUB FUNCTIONS ----------------------------- */ + +/** + * This function checks the database to see if a username already exists in + * the database. If it detects a duplicate it throws an exception. + * @param {String} username - The username to check. + * @returns {boolean} - returns true if the username does not exist. + * @throws {Error} - throws an error if the username already exists. + */ +async function checkNoDuplicateUsername (username) { + return true +} + +/** + * This function takes data from an uploaded image and saves it to the `avatars` directory. The file name will be the username. + * @param {String} path - the location of the uploaded image + * @param {String} mimeType - the mime type of the uploaded file. + * @returns {boolean} - returns true if the image is valid and is saved. + * @throws {TypeError} - throws an error if the file is not a png or jpg image. + */ +async function saveImage(path, mimetype) { + return true +} + +/** + * This function adds new users to the database. + * @param {String} username - The username to to add. + * @param {String} password - The password to add. + * @returns {boolean} - returns true if the username does not exist. + * @throws {Error} - throws an error if the new user account has been created. + */ +module.exports.addUser = async(username, password) => { + return true; +} \ No newline at end of file diff --git a/package.json b/package.json index 1af83aa..19e9f35 100644 --- a/package.json +++ b/package.json @@ -15,18 +15,9 @@ "unit": "node_modules/.bin/jest --coverage --runInBand tests/unit/" }, "jest": { - "testEnvironment": "node", - "verbose": true, - "collectCoverage": true, - "coverageDirectory": "docs/coverage/", - "coverageThreshold": { - "global": { - "branches": 0, - "functions": 0, - "lines": 0, - "statements": 0 - } - } + "projects": [ + "/jest-test.config.js" + ] }, "author": "", "license": "ISC", diff --git a/unit tests/accounts.spec.js b/unit tests/accounts.spec.js new file mode 100644 index 0000000..233eb09 --- /dev/null +++ b/unit tests/accounts.spec.js @@ -0,0 +1,46 @@ + +'use strict' + +const Accounts = require('../modules/accounts.js') + +describe('register()', () => { + test('register a valid account', async done => { + expect.assertions(1) + try { + const account = await new Accounts() + // test goes here + } catch(err) { + + } finally { + + } + }) +}) + +describe('login()', () => { + test('log in with valid credentials', done => { + expect.assertions(1) + try { + const account = await new Accounts() + // test goes here + } catch(err) { + + } finally { + + } + }) +}) + +describe('checkCredentials()', () => { + test('check valid credentials', done => { + expect.assertions(1) + try { + const account = await new Accounts() + // test goes here + } catch(err) { + + } finally { + + } + }) +}) From e7fad41caa337d761cb7ea9a509ed1865c10830a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 14 Sep 2019 20:25:10 +0100 Subject: [PATCH 02/19] renamed module --- Procfile | 0 __mocks__/sqlite-async-old.js | 51 ------------------- __mocks__/sqlite-async-x.js | 22 -------- modules/{accounts.js => user.js} | 0 temp.js | 29 ----------- unit tests/{accounts.spec.js => user.spec.js} | 12 ++--- 6 files changed, 6 insertions(+), 108 deletions(-) delete mode 100644 Procfile delete mode 100644 __mocks__/sqlite-async-old.js delete mode 100644 __mocks__/sqlite-async-x.js rename modules/{accounts.js => user.js} (100%) delete mode 100644 temp.js rename unit tests/{accounts.spec.js => user.spec.js} (89%) diff --git a/Procfile b/Procfile deleted file mode 100644 index e69de29..0000000 diff --git a/__mocks__/sqlite-async-old.js b/__mocks__/sqlite-async-old.js deleted file mode 100644 index 46d7b6f..0000000 --- a/__mocks__/sqlite-async-old.js +++ /dev/null @@ -1,51 +0,0 @@ - -'use strict' - -const records = [ - { - id: 0, - user: 'jdoe', - pass: '$2b$10$vPqO/uGlKchrQCqyBIKdb.8hLEJgaC4aAg4fpre5rausycX1XmkWy' - } -] - -module.exports.open = function() { - return { - all: async sql => { - console.log(`MOCK ${sql}`) - let field = sql.match(/(?<=SELECT\s+).*?(?=\s+FROM)/g)[0] - const condition = sql.match(/\bWHERE\s+(.*)$/g)[0].replace('WHERE ', '').replace(';', '') - const key = condition.split('=')[0].trim() - const val = condition.split('=')[1].replace(/"/g, '').trim() - console.log(`field: "${field}", condition: "${condition}", key: "${key}", val: "${val}"`) - if(field === 'count(id) AS count') field = 'id' - console.log(`field: "${field}"`) - let data = [] - console.log(`${field} : ${key} : ${val}`) - for(const record of records) { - //console.log(record) - console.log(record[field]) - console.log(`"${record[field]}" : "${val}"`) - if(record[field] == val) { - console.log('matching record') - data.push(record) - } - } - console.log(data) - let result = {} - console.log(`field ${field} length: ${field.length}`) - if(field === 'id') { - console.log('need count...') - result.count = data.length - } else { - console.log('need data...') - result[field] = records[0][field] - } - console.log(result) - return result - }, - run: async() => true, // we can just ignore these. - close: async() => true // pretend to close the database. - } -} - diff --git a/__mocks__/sqlite-async-x.js b/__mocks__/sqlite-async-x.js deleted file mode 100644 index 98b3969..0000000 --- a/__mocks__/sqlite-async-x.js +++ /dev/null @@ -1,22 +0,0 @@ - -'use strict' - -const sqlite = require('sqlite-async') - -module.exports.open = function() { - return { - all: async sql => { - console.log(`MOCK ${sql}`) - const db = await sqlite.open(':memory:') - await db.run('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, user TEXT, pass TEXT);') - const user = 'jdoe' - const pass = '$2b$10$vPqO/uGlKchrQCqyBIKdb.8hLEJgaC4aAg4fpre5rausycX1XmkWy' - await db.run(`INSERT INTO URLSearchParams(user, pass) VALUES("${user}", "${pass}");`) - const data = await db.all(sql) - await db.close() - return data - }, - run: async() => true, // we can just ignore these. - close: async() => true // pretend to close the database. - } -} diff --git a/modules/accounts.js b/modules/user.js similarity index 100% rename from modules/accounts.js rename to modules/user.js diff --git a/temp.js b/temp.js deleted file mode 100644 index ea10ade..0000000 --- a/temp.js +++ /dev/null @@ -1,29 +0,0 @@ - -'use strict' - -const records = [ - { - user: 'jdoe', - pass: '$2b$10$vPqO/uGlKchrQCqyBIKdb.8hLEJgaC4aAg4fpre5rausycX1XmkWy' - } -] - -//const sql = 'SELECT count(id) AS count FROM users WHERE user="jdoe";' -const sql = 'SELECT user FROM users WHERE user="jdoe"' -const field = sql.match(/(?<=SELECT\s+).*?(?=\s+FROM)/g)[0] -const condition = sql.match(/\bWHERE\s+(.*)$/g)[0].replace('WHERE ', '').replace(';', '') -const key = condition.split('=')[0] -const val = condition.split('=')[1].replace(/"/g, '') -console.log(field) -console.log(key) -console.log(val) - -let data = [] -for(const record of records) if(record[key] == val) data.push(record[key]) -let result = {} -if(field === 'count(id) AS count') { - result.count = data.length -} else { - result[field] = val -} -console.log(result) \ No newline at end of file diff --git a/unit tests/accounts.spec.js b/unit tests/user.spec.js similarity index 89% rename from unit tests/accounts.spec.js rename to unit tests/user.spec.js index 233eb09..324ed79 100644 --- a/unit tests/accounts.spec.js +++ b/unit tests/user.spec.js @@ -10,9 +10,9 @@ describe('register()', () => { const account = await new Accounts() // test goes here } catch(err) { - + done.fail(err) } finally { - + done() } }) }) @@ -24,9 +24,9 @@ describe('login()', () => { const account = await new Accounts() // test goes here } catch(err) { - + done.fail(err) } finally { - + done() } }) }) @@ -38,9 +38,9 @@ describe('checkCredentials()', () => { const account = await new Accounts() // test goes here } catch(err) { - + done.fail(err) } finally { - + done() } }) }) From 85a2526b1cc1ec1b199b30945424d18d452554a5 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 14 Sep 2019 20:40:47 +0100 Subject: [PATCH 03/19] renamed the class --- modules/accountsOld.js | 81 ------------------------------------------ modules/user.js | 2 +- 2 files changed, 1 insertion(+), 82 deletions(-) delete mode 100644 modules/accountsOld.js diff --git a/modules/accountsOld.js b/modules/accountsOld.js deleted file mode 100644 index 5bcd759..0000000 --- a/modules/accountsOld.js +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env node - -/** - * Accounts module - * @module modules/accounts - */ - -'use strict' - -var sqlite = require('sqlite-async'); -let bcrypt = require('bcrypt-promise'); - -/** - * This is a generic function that opens the database, executes a query, - * closes the database connection and returns the data. - * @param {String} query - The SQL statement to execute. - * @returns {Object} - the date returned by the query. - */ -async function runSQL(query) { - try { - console.log(query) - let DBName = "./website.db"; - const db = await sqlite.open(DBName); - const data = await db.all(query); - await db.close(); - if(data.length === 1) return data[0] - return data; - } catch(err) { - throw err - } -} - -module.exports.checkCredentials = async(username, password)=> { - try { - var records = await runSQL(`SELECT count(id) AS count FROM users WHERE user="${username}";`); - if(!records.count) throw new Error("invalid username") - const record = await runSQL(`SELECT pass FROM users WHERE user = "${username}";`) - const valid = await bcrypt.compare(password, record.pass) - if(valid == false) throw new Error(`invalid password`) - return true - } catch(err) { - throw err - } -} - - - -/* ----------------------------- STUB FUNCTIONS ----------------------------- */ - -/** - * This function checks the database to see if a username already exists in - * the database. If it detects a duplicate it throws an exception. - * @param {String} username - The username to check. - * @returns {boolean} - returns true if the username does not exist. - * @throws {Error} - throws an error if the username already exists. - */ -async function checkNoDuplicateUsername (username) { - return true -} - -/** - * This function takes data from an uploaded image and saves it to the `avatars` directory. The file name will be the username. - * @param {String} path - the location of the uploaded image - * @param {String} mimeType - the mime type of the uploaded file. - * @returns {boolean} - returns true if the image is valid and is saved. - * @throws {TypeError} - throws an error if the file is not a png or jpg image. - */ -async function saveImage(path, mimetype) { - return true -} - -/** - * This function adds new users to the database. - * @param {String} username - The username to to add. - * @param {String} password - The password to add. - * @returns {boolean} - returns true if the username does not exist. - * @throws {Error} - throws an error if the new user account has been created. - */ -module.exports.addUser = async(username, password) => { - return true; -} \ No newline at end of file diff --git a/modules/user.js b/modules/user.js index a3f2826..a7a5727 100644 --- a/modules/user.js +++ b/modules/user.js @@ -6,7 +6,7 @@ const mime = require('mime-types') const sqlite = require('sqlite-async') const saltRounds = 10 -module.exports = class Accounts { +module.exports = class User { constructor(dbName = ':memory:') { return (async() => { From 1b4a4c8490e95b5f4d907ded57d55280d296c528 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 14 Sep 2019 20:42:28 +0100 Subject: [PATCH 04/19] removed redundant code --- modules/user.js | 44 ----------------------------------------- unit tests/user.spec.js | 14 ------------- 2 files changed, 58 deletions(-) diff --git a/modules/user.js b/modules/user.js index a7a5727..5d91927 100644 --- a/modules/user.js +++ b/modules/user.js @@ -38,48 +38,4 @@ module.exports = class User { return true } - async checkCredentials(username, password) { - let sql = `SELECT count(id) AS count FROM users WHERE user="${username}";` - const records = await this.db.all(sql) - if(!records.count) throw new Error("invalid username") - sql = `SELECT pass FROM users WHERE user = "${username}";` - const record = await this.db.get(sql) - const valid = await bcrypt.compare(password, record.pass) - if(valid == false) throw new Error(`invalid password`) - return true - } - -/** - * This function checks the database to see if a username already exists in - * the database. If it detects a duplicate it throws an exception. - * @param {String} username - The username to check. - * @returns {boolean} - returns true if the username does not exist. - * @throws {Error} - throws an error if the username already exists. - */ - async checkNoDuplicateUsername(username) { - return true - } - -/** - * This function takes data from an uploaded image and saves it to the `avatars` directory. The file name will be the username. - * @param {String} path - the location of the uploaded image - * @param {String} mimeType - the mime type of the uploaded file. - * @returns {boolean} - returns true if the image is valid and is saved. - * @throws {TypeError} - throws an error if the file is not a png or jpg image. - */ - async saveImage(path, mimetype) { - return true - } - -/** - * This function adds new users to the database. - * @param {String} username - The username to to add. - * @param {String} password - The password to add. - * @returns {boolean} - returns true if the username does not exist. - * @throws {Error} - throws an error if the new user account has been created. - */ - async addUser(username, password) { - return true - } - } \ No newline at end of file diff --git a/unit tests/user.spec.js b/unit tests/user.spec.js index 324ed79..776b786 100644 --- a/unit tests/user.spec.js +++ b/unit tests/user.spec.js @@ -30,17 +30,3 @@ describe('login()', () => { } }) }) - -describe('checkCredentials()', () => { - test('check valid credentials', done => { - expect.assertions(1) - try { - const account = await new Accounts() - // test goes here - } catch(err) { - done.fail(err) - } finally { - done() - } - }) -}) From b76b7adaafe43710b64853a3bfc454d9644712a0 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 08:43:47 +0100 Subject: [PATCH 05/19] disabled legacy tests --- tests/acceptance/{auth.spec.js => auth.specx.js} | 0 tests/unit/{accounts.spec.js => accounts.specx.js} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/acceptance/{auth.spec.js => auth.specx.js} (100%) rename tests/unit/{accounts.spec.js => accounts.specx.js} (100%) diff --git a/tests/acceptance/auth.spec.js b/tests/acceptance/auth.specx.js similarity index 100% rename from tests/acceptance/auth.spec.js rename to tests/acceptance/auth.specx.js diff --git a/tests/unit/accounts.spec.js b/tests/unit/accounts.specx.js similarity index 100% rename from tests/unit/accounts.spec.js rename to tests/unit/accounts.specx.js From 42024757f1274d70f4971301eff997a2c1fad687 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 08:44:14 +0100 Subject: [PATCH 06/19] added sample profile pics --- unit tests/testdata/boy-2.png | Bin 0 -> 20123 bytes unit tests/testdata/boy-3.png | Bin 0 -> 17149 bytes unit tests/testdata/boy-4.png | Bin 0 -> 17749 bytes unit tests/testdata/boy-5.png | Bin 0 -> 19973 bytes unit tests/testdata/boy.png | Bin 0 -> 15971 bytes unit tests/testdata/girl-2.png | Bin 0 -> 20108 bytes unit tests/testdata/girl-3.png | Bin 0 -> 27458 bytes unit tests/testdata/girl-4.png | Bin 0 -> 20140 bytes unit tests/testdata/girl-5.png | Bin 0 -> 19352 bytes unit tests/testdata/girl.png | Bin 0 -> 23054 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 unit tests/testdata/boy-2.png create mode 100644 unit tests/testdata/boy-3.png create mode 100644 unit tests/testdata/boy-4.png create mode 100644 unit tests/testdata/boy-5.png create mode 100644 unit tests/testdata/boy.png create mode 100644 unit tests/testdata/girl-2.png create mode 100644 unit tests/testdata/girl-3.png create mode 100644 unit tests/testdata/girl-4.png create mode 100644 unit tests/testdata/girl-5.png create mode 100644 unit tests/testdata/girl.png diff --git a/unit tests/testdata/boy-2.png b/unit tests/testdata/boy-2.png new file mode 100644 index 0000000000000000000000000000000000000000..094d3596c2f3e3c1144c292350d08ca8c19f09ba GIT binary patch literal 20123 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 literal 0 HcmV?d00001 diff --git a/unit tests/testdata/boy-3.png b/unit tests/testdata/boy-3.png new file mode 100644 index 0000000000000000000000000000000000000000..05da0fa5db2b607849b3707809e6ed4e736b4d23 GIT binary patch literal 17149 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 IY~jcK4@>Em&j0`b literal 0 HcmV?d00001 diff --git a/unit tests/testdata/boy.png b/unit tests/testdata/boy.png new file mode 100644 index 0000000000000000000000000000000000000000..bd28bfeb21c20a645ed070269cd078aa4e2add88 GIT binary patch literal 15971 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 literal 0 HcmV?d00001 diff --git a/unit tests/testdata/girl-2.png b/unit tests/testdata/girl-2.png new file mode 100644 index 0000000000000000000000000000000000000000..abb45ece9cf28c549febc40c19da77cc957f0209 GIT binary patch literal 20108 zcmXUM2Rzj8`@M5G5ofQgWHgLOlyPUJK}cm~G%00dX5EP-3Q>eIE3!xSxRWFeG_0(n zjI6WgjsJW7{(U}u@clmTv!CaE-sgG04=hfb?A#%?0|2n|#BrlD03hM7NPuR8KUM;M zZowZYZ-WzO(ePg|`brf1o5SSu2#}_;X_d$V;dhUk83{u7jIt${{H^T z*WKN`FJJV$s_b#wC2d|u41m)dCyeyZ2K<_9yyJ7;Ixu&@Z{KNOCF@G<5bKfRrBAp0 zk2Y0%Y{@IDjLb)S@8ADs{Py<;R;SPLWNN?4QUxEItQ_`M`W?G*Hiw;whM3mJ+Zx~ZTSbk%7xTK8^zj?y-H;(XYAg! zoXU#$6q6OP(As}1!Z^>&hF-sKllb(MkzRjhB z3X645B65=Uyi_ntWIR7GJ{Grm0D%F(_2`t-W0?{2Na`8U=RrlM$+ln<0MQds^tdbJ+)wcX`Bfihbc61HI1``bX>zhzc!@T>f0JWG2A}}x z35j7Sx@&0r(a{&-m2kBu7!B@Kx2hGpapKfEygAni5u?P)(W!AP$^W7Q;03+R_2hElm!a zxwsw2_~<*|B-~8gb38PTq64*uVlehn)_N_!xOA=IuiZX?v`FSmXyS_%L_*Dy$c)?6LxDzr-LP!A@Ckp9qzuSP2Kfp<}~~ozfd2b+nB1KYkmUI!6|SdPU%p zE#2Q9C0Bo^TZnt@ed7GWK~ro~tRekoz*R?k71m6lZks8_?^G73@9jByGW7Y*I#mD{YokVpVPONwef=_23x z_~M1D9%L*>U`cfyi!5v0z0B1%&LS?xqL@aKmhF;2uOgJ7LuZn*JA5mh7S{QqQCXMn zCiUu&Bz?K618MQuKY>WLV};x|)zh8+%D7Wl6jXG#!e@SkR?cq` zPpf(Wshn@ekEODqfOPpaJ*%7--*fk^6uE3&kI>7(SN?weC!@9s%I``qX5?=Eec+Pa zG~g05QY~_ZD!eyl4|c+i9R)H&@8LUL?Kb$RZ|NEW-DfsRY9`>CyLk7dirZO?B=Y@Z zMfl0;U^{Azglhj=GC=);GWOk3poNLraXw z<2z_tEuG(pgnM`;VLAKi^)1XdcJ!5NL%MOEM9^Zlf>69UMNZc1gBq{ z?yk2!Yi7)aE>OM^ZBBEnxXi&YH4PnR$kt}!N9;;MtF}kmzY*8aB>wU}#7;XT8axxC zGmIm*=Xzc@@&;P0^J20_q9hXVovF-sXJ*%{lfU!r3+Umo9HOyLPC31OoVuzI|8`%@}G1C0R-3mw?SGchJqv{vR^ ziB;hh1(>rI_EA+14RqaGV4tTCIUnJJDWXP{j*TD1r)%TM^G=*eC)2OpLZZMRno)6f zi^ZQ|_c$B{ReCy-@k5PjuA$wOd=dhVoDw>jeyIoo?m{zOCYnht%QA_ZJ&R)k``u?O zPQ1&ws7D$ip8sNugb5+&DD{=XxJJ;V`36LKG@;`cD;m5Pr{7PjkGVV`RkPijigAOn zjB(qbc)V#;31hPyp>>YWk6e9Sk%T~kZ`^CP%}1D&g;$)-U@Y(6zxCO4-uylmKC-q# z;ah*Pp~2hpi;Ui-(@I}nU_I9<``u5{pJ{MofU7bUAGlX(RK}l<8z-t9k>5P%CLs;F z@>)w8T2yXqb!6PYM@jhFMJ#kj#<_~ZI673g!KkVgA|Bcb3#d^eN;DS;C)z9n1R-^y z(=^?%6|1Em8n`>GK%u=bgp`JB#otd7@-W~U8=bzp7EzS`=cOZCDLP~w4>+Nwi_VD@T z89Y9QQ?rxa99z%0w`-dd^TQTC@50Y8D$i#O++OE_n5WEHsT^(xkU-4)`suN8p_U96 zrW8?+x(mzDK*Vmtx;}va5^hxLJ(@KP4O|1)oeX|RdA?mxQBT2e9j>=^gBXk8Uw6d( z8RV%RyrRB97ez|QcSE@60t&1gSzFH$ilce0^Y~C%wzXt8LwX$HW0AFr!wIpsB1GOd ztY∋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 EA1yKJwg3PC literal 0 HcmV?d00001 diff --git a/unit tests/testdata/girl-3.png b/unit tests/testdata/girl-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d0dc6200a883b85ddb96076416b7267b4d1ec87f GIT binary patch literal 27458 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 literal 0 HcmV?d00001 diff --git a/unit tests/testdata/girl-4.png b/unit tests/testdata/girl-4.png new file mode 100644 index 0000000000000000000000000000000000000000..9822f81a8c1b59ee0ba361674c088fd017c9f5f5 GIT binary patch literal 20140 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 @@r}Q2K`?1$^}MpkTvjP>XoX z7_?1?RD=A$Y-yLu=n=^fJp~2WFWX2FL;-08TziA&af@izZ)TEa7qP?BOTl%;6R%Ac8(5B9M|cG$nzI5 z++MUqXh#rv1J=%_O(X!&MDX3C!%CcJi=-cw`964)XPp4E?X~ZHHS7qj)iC@_&Ql_o z1)u*tV%p2+Dl^1)^8pri@0x+1NHmsn7F4%i1A??m5>14aD7Ma zIyM-XCT{J|2s+PXvZ9?}+c3xmllO??-wx!l_%=IRmg^(O+kRM6Z; zJxuP5BjcXgOQ_d-1XNzR7c~)Dx2C)@PNV3Mzu#29{!9U^zJqru<)}95QRhHf>|2m- zrJtk;uoEPxoE|ZQth? z+`4ii*A;}pQvMYoM@FUBBM?i~@Pgg$W+J)N_?7apD==f?r;D)kplItPfF?cJ6E7?i z`BoUPtMlrFwCBGN$m5#BKu(Se5p~0E2vBw%X1r35Ten>|jDO)G#(9_c9w(`GtdLBT zg_SsAFJlFUB;k!3yevg#D*%>ed_AxTL(@_QZ~;X*OB@0ebC(EhMJx|dY)iy>)(A>` zS~fKBdp)4=1!}AI^2pRBMINI#`7cB$y#7W3vP41q9T4Ti`kBw36D8bY3Nf62D8(sC zk$z^_0|7qe!ElWnr0AO^bR1oQ<5VUufBS6$UiW5b(b8Z^bx|p)GpOy2|QoQUmc7$byxe6at%4X4En_`Z@~T+A-8Su2)>>$t3@_n*%p4XDUaE z*IUF0p&uP-&!Zs*uUjCHtYrl*(5$U7VduS0qr2IsG%nuDS}3CFw5;5@%t^Qvdf7Wx z+p9|=f}Zhv$%!cPq*WFX-w_3tVtOFY+;i`@f%8V(e$VO3cMdmeF18| z^+C;mMuuRg-4@UAV|!Ovqqix&vtvN~N(Q}{!(YDqseSstLIa0WGBBydXx}+wKG);G z&s5IEMGrckbv`}&>PjV?_uQ^2BqZu<#nhlcgI;##-CJ33pDw!`Fj7eGCciP*Gf%t( zGxo@yh;cgA_K3x0wYl1Ms#(ccua^md6>OW)-F&ZZi@n$@rlZh%tBug&0Y_*)&6~Wq zfRp^xFE5Gj%gQ0pcb`eTdp@c$`1&2sTytwt$+G->ayL=7NN}4Sk9s6lKHE_qo0q0} z)dO*lOA25qjQqX$l4Eew#K|dQ1|{<;Bc zG(Q>`#X2r8P9ysTL+F74!ZDme*!RGa-}kyt0%5np%aoodZH{R(F^r*e&Uc~4@S$Q!vG(e_kOeDJ-)6V9t5r7cp$!$Htc5ulFnh8;2wE^s*%wtpReIhG*-oVPMG&A$~KFdNOQ_>?tEbW4S8|GIh>@ z{xjd`r01I={1zHK6}portgIu6G5V@tU6zS6{;+!73`!PqqF=q`udKl81 z>KB_fuN(`0u!oHsN%6uRi^09>0|ZOnG9L(E{8J&``B_6vpNjaR&Pkt!c*)Q!o407! zqdRcXiA+eg)&{5-2&EfPptZ7z5-;>xvMJC;!Q~F*se1v9cjkD4wlSX7g7AWK6PHXr z>9^#s4^;YzWXqie(j;fWv>QRxXzY*zJ;OSD*4pD~ma{dETxw&GdOD;PqwU!{jKrjV z7WhaBD`2CC;ViZsf*VIFAAZ^TYOEU}j?7Eg&LW756u?_1W7RF0J7Ay|@siydB`JKE8xar??zj6k~} z5m=jk)Gg}URxB`_+#k=I9m%fTmzDNO){jSORj6i;IOfvF%-DEVNbEh%{CW(AsAGZE zdElNa|29TrObaMZ|HPo|-^k2iLf^^ltO;mA_RIg?sZ*+q5hv}Jb2-2ij6O1_K)YrW zKla4MsRP9xH00f?8R+8hf@)Z}wuYWLVirHQDe!B#B-2j83F^Y6f4O6X z_4win&q#J?@dIwBg{h4nTYtjJDGAldM1%RdQ^d{CD=KPJeCSUEV5jv zh8{>t6Q68Y+|2FUg*!?W=&m2;NHcAb`7_2C=q4U|ctX75X|DX}pG(=4#;UD& zOikYTPw|>t4s1C&!qprF?ao}?4Xe#8W7#utaw{^Z;MGqrdA)c(~- z(946$M7#3rCSAboevhTIinINDcigH`K!f7`6f5E9fzSPFR^LFU0XCK`v+tww6rdkX zffkt~k_+cRdh!0=Wey*bYLw_SPMZ|d71PDc3|}Ewc&{%@ljaD;cD`&POXm9Z=;)l+ zm<2gZ?sUnNGb?;{aZ#mVjeMx(2Gz%XnCCmsbS!eghrUOsESs_6}wmqx8 z?=W`{GNk*mK7-QOLT%zH-oETyB#cOv&0hF{% z(}c6hyFD6g4W>n4vR5%TqvY!RUwF4;6l45qNFt+5v$x!k~e>pkoGJ1Nh_!z^!+x%@dzVDY|G>(lY_Ca)5Fz~J5E$G_hq zaHYysT+GlC_AXB!nzB?hNn_q8r<-S4$vrMY>$&qg8(nN9)fY}W0d(FtkdrzzZW4iS)dpyyxH;l&zQ!HmZ(pcqUeV!|Mr4+xc0 z$bEPQ+6Lh7%$ihp?wPu85WXsP#tEv`og!fQiIXNjr1kI~#S2rtH@ihiI)|UFQuukV zz5Qbq3n4 zEN4<53_DzUax9Kx3k>230tg`cfWTWou)VlBI) z&%`z5mOPAL=Pc>;G&A=UdPxuTdJ+tpuYED7wmX}<;C=C}7-^Y@=yWpW&0btg2c4g3 zEzL2uiSV=i`t&bG+A>!0jFeT0>NNv_6;XGP=q{F9k?^YS`p9p+UNHpr6ONeV+(IV2 zf2DD_^v@~S@9C=KpPj-oM=6eyDubVSY&E@@MZ=*6E$5M`qujF*PmHGW(IK zoEv=4`T*nMrFm2BxtXU}`3Q!ui5^IOAPV)4WkXvuN}bE067hSc@Oe;ui2Ga5yMewd ztM^vbh?9-svKt$ShdILWboQLQMLSFMaxBMU;48boTJbP32q^Q82BX{n_MA z(`zJS&14s9#+_%z)XRE8$KU4dtA>c;^~;td5zD;L!3@SmY>p%z=#+RL>hE%rqU%qyKa-jHc8;Is8+lg_4bC$QAQGD zsqi+_X&%o%e_%+JKOBVkJZCmIz3%=@Zt-5+YIX!ta~EOUw=1Ob#kP!nCw5%QwLlb7 zK{kPAWs>}t-|e5QZv!^xf4uf8SE?)X2~~YO)MEJN@1k!zh18oeTA8C+ey<7|HLf)a zW6?r1osT8NJF`~?D()9M{Fx_Ans`i;MBgWq)&C=2w0m2WOxiz?WR4@rX_6O+_evvp ztzfq+kK&G9UY^TLL{tPxu7Cfh15y?^{G>4+bE)gCe?N&?YvCeCm^`w10|vC2siKw6YC^NE0L#jzUya6D%HTCmy3l|J{0@I$6c;~q za|{!{vD5iAFDGH|*^BVaBR}bnl6>Rxf!yPc z5a-jOA(}ado_Q34*OoHtcpGWIh;`jXS~6X5}v3Nzz19?k@0Kw z-;3jaqIEXc>{~FFDO+PHt7mC3GUHJa2gz#kWR3)3tG-N#iXbjT+s zJ7DPM{cNi%tua{yb*+n=&$?hRs|w<#N;Z)md=+%8A2oy3q){9#ac@=jxmc(mSvd!} zM3c8s>VdE<0~bEfdWTFbYc&5+<%$>Tr?yFT>YNfNG8EyQj$BkZ33H2kdA{WpR66QS zV+TS<6c<$*19JC+x_I9Pd0f6IJkR&`mbJ>;qrB7~OiD2B+!~cDxT!bmR$*gH3YIf1 z^5k;Le7q^Hgn7Cz_!ubS`^_YLf0~6tL6!KS8=qck$0&30^^@OcY#LOb-Tr3mfqJf@ zG0k7HZW>nnBy48M*7z5q`@Ht+3AwAe?;4c)Q77SFfM2tkjY-vGoF)8PR*s;qY|`ax zwX*uF;`c8nl}J;6l!7t}-$VuVu@|ihJ6!As6(d)k56~prJYuX0O_ZB{A^2Z6^{sm- zsXW2ZtF)^oq|@50k6pL<`{8x{mVdNLd?Mm z1M!?m^%dbVxcP_zaq0KBclHGliK^>qSN1oXOlPi_%rwYb$|YY__I;}I;SY|O>!Au1 zXQ+ej>Ki#IEnarg&0pH4m7)G@@?1-lQ!_NyNVt%0r2KE9>i6~R_tJS*8s`JWEXlpoBjmhveJ zQKGH4xV(6&J-)}D{oDQS>HN2f8oB5so>Qd#dM>-T}mK>O#K)Qg6rAnpa z0ZxhniEDoRrT4M%xyehZXDhEP{r|V`!MfpjiSi^B$#OeEX(Au6XGS|y8LjN3sbn6P zeV8npZq1obfpF?s`S>x{1`$hsqOEmb*_-s|Nq2v>qTaK0X1(ktI28 zt!Lz%w~Hw0L6hKYX4)^oV$mzXbb9vXYre#XOh1zwM^kc$yZ{Z}-4nz%u9Q9~%L{xw z+SUGKc;M@+x}8jC8hAky#iT^AcAEYDFXyxMB!?qHXd;S)xpmcm|4(T>Vxt2AMg=V^MZ^0EzT8z zD(VYjWHVeG7QA>Tp{Dltq&s#Gx1e?MaGrJa5;pRrhNxfYW4?G1!Fx{`pcD?+d0-~8H(Qye=Ckm=#i&Q^k`gG`iAjP#G@}l)|?J1&pxbO z8V>w#)%qv<;6HGaHfNudAfLh?<;YOLDE#8a7vpZ;zuR5FO^SNY8~I|*bU2XZQz?(X zSBYPg6U(j(GVgDdaEcrofGxs(E+x^pyZrk+56K|=VS(KHJ8;sepC#+YVVUMF1e0G6 zP7epIbmRNCO`1RRosvq(Z{el6Lk?@{*X)-fi(qJlaf^MbpA3zG+viw=gRN z@)B>>EyB8&nk;4xK9mha_#yMCIQeU)i77;dlj5=7A*d$A1AuN#A$HRio^%d#6Yy!< zoTC8X_QAf&I0F_!#C(ikqkI4qOidA^eFy*6!FNTFG#C#W2s(P_3MB}8C=nT`zvWDX zp%#FEh$iCOJHsvr=&S%lap91K9#pNFBQ0Kxaljb>SmhuZGFJ{(Xc$1{aY8h9&VE`5 z0tbe&Jkv+2F)^<@A;du#CJIsd%(f7(xm|#R0X=L3#M5}g+~9uFuswu>q@uZ?7gpiF zFus%U6DZ_RoG!FiPYDJA-xllmK_+ijg)Hj?NH)fyDbXgfvj8+wA3nWi+pOGlMdl0) z92b)kDt!D$Exl0e5WFmh8gr=j#ZUb3|908L2113>Dar=itlpj9qK8hZT%FqR&fy%N zup}dT4x1u??WYHPdxQI9?!7-czTAKqx%M%F`DJILa7f%(n!?)-Itcs4{k98i6=#SS zv9pfnLamA>i$e!l-hD-xhBo=Uvyv~$Vcj$K+fcvh%;s&T01b%RAA7_pej2@bFQrVp zdM%kna>q+DBQaFnBWE+q;wHpnR(GH`4U0D|>RR(8COxRy#{FWo(*tdB{e#=(Vk@FAm1Q9CE078)4~fG^ft3IE2x;!*QR3ur zFPiuy4Z>-GDm@zB`{YE>NfEHo7Nr7*e1R=e@dQ5$JcVV2NIuY`Fa9HNhh~aG4UC%V zK~fY0PIUlysbO;3;t&8AHiy!ynycJj+F^oD1w?veeNkY78BeMjKy7yLAw?$G_`yw; zlO{2qF{NuTM-B*;vK0b%o>QRN$;*;JnJNIERFhz|Cg4lSYYOmA54b!$3rf50jcNkO zR~Gt^WOXD)>^(dWYW}qcM4ts)U)H{AfegChljd4`u9L)J_!=b7X@aG8ycz@gj?#Cx zI>8GMIk22U0bXox0Fz!tK|KUt(!$v@c7%%C%G*aGT- z52QfB>hWpz+k&9D-mox;BnxR>n&pF-WpERPgEe||-1AfD9}CqtCMb}-i=6S7ky*Lp zk4_uziwc>ZSXK-uJEa9^Tc1><01wVzhd*qp{nO;?74^8s68-SoyFMoGZZxk)>TpHo zPqRtTN<8kqH8%vbGH;P3v$c70=MU&pSpti{Mj8WFXtV%<5bEHGC% zi27(s%CuvzQqZ!eH8`>}Zo~;6sC6FoD{L$J+I`#Mi)JqhllfrW%6c{FP%PVWBG)z@ z(IMtEA^w|49xEA>kjABVyPvqP-ND-ROke(@PRRBcBu_o$8d-PSepljT6@`fEuSuzc z7-7Qv#W)*)K$Iv5n_sSBME zwMF52VZDcQG!QU$VgN%nAgvuL6inX?LliitH%&iT&*88hdh!eV;GW5B1UGC)p=3sI za{hU;$PI3GD3raSxi6ab`Yi?cEeE% zf`D6Z*trX8fT`(MQ8niUD_GWz6mYGBPKrGKcq;}mI`XTWQ{3?5Ba7t~bCwosOVmfC z)T=|OrNK8u&Etlpbz@ZKp~A>ad3dxLCSSfj>b_6&UMQ;OgF~v(N#`>-%;z$kW%I;0von&U2S-_7T9Tf^3*JSXc+GBE*qg+8y`5kh zbE|(cT z^z>x>XYfaN>cP2Pan?^}XkH4JVR2TTC;C+!u25m9oC4Kp>?RHe_fKK(i6UkXx+gZ7 zc*nzl3(eVg{nndu3CG~U+;F{cXW>A386(>Dbsc0UBA~Av0?X*w#VPN#n*o_70=WP$ z{#DWn$?WzQ3>9?H;_t9k{pVqyKF;! z$@TlpoBiDXxbqo;u&XkzG4s-55D^YY_`P=S3}uTYm-pPgS6C6Se(>|HareUGgjOxC zr%!g#BXgDG2GF3``6F;mGxL66yiR+yDm|Ki*cx&QR77@*7!;e+y7vonwb^g4BAo0Ro!zT@9MZYQ&5ic1<6TxY z3c@XS6#TlqX%9H=c9a}tk24VBZ!SUeb4ZEx51>Tf{5(Wn$B0In%@%D)IAD~n=k{>% z(@Jo@IWAId^ZM~JTzIF6;c&6?0QGiVDF8yYERFpj!_otUuZ9p(clhPBHu_d2g;3ml zsb&I+8`~T;3mFFgX{n}k=IXITRGm!O$3Hg$_eI11o`R5s?Wa${hhBw?Z+v}muSLM| z+XWHWw6%ggth)Y^kV)9!*W`bkeV_Buls$I%UPMn1-;iNrETmvO7froZ!M@XRZM;ZEQdtwSVb zx{Xl0j-B-tWZ$$QAe1;I`(Bj{XtY&cO)O`(lFv)B_Ecy3(!DpWjB5N>zaApRq3 zxFQ1LEf1&4Umr|KMN8h@gAn|E+#RaaLr1Zs4nQJ+IN29j~_cuO?E-YJ+pRYaRC2s@#EeK!Eu@z z`IWc*M|r3$Z!O*tge`Y7Di(Cx5f^hMf7%hnne7xV1?bo zV|kd@s@97dhA^Do$(NYE5TI*5mPkGQCz}H6^3P%E8X#t0FDbj5td$TSpT)hF=p#)S zO%_VT?*0rDLy(tna0K)-804~l8b20kp6!kimIA{Jcvvat8- z4V3vKQLm`O+e!SLaml0V;LJa^?7yf3GSZ`OB*!qfI&}M4UX{r6Ls3jtO!$a3g3W^# zWoH~ML}LHqKQ~qgX^Knrn5&Qi|K7)c(bcem^_=aKI0X82-tlHK>NPdNMy*A{85aOa z{^g%`xnvm7n5d(slZ5fbh0E?1Z68xLk`rm|ub47>!Kpv|Udpe+1htQ+UfP$W+PnX# z?TEzyQNaICCPSJJ#KeX3QYc9g_#R8e0RHouGOW&YZrEa%4$aH6<;_mC-#A>clB$HU zHCyTo+~x&=rvGgt6(Tf_!lbhbrQw(tlO~s;k0*?)Zg$)WDJHul&-#YryTXS0MzrtO zpHl=Hi#+0`P>i1(ez1xGisbL>Vd-e8uoQ)0sWe-J@JoR=3^B_S6xW4?|oaK*-8yOLRD?qX2KNv zZ@{dy{-X|Ry8+V<_^~HpC9_!#6%oeDz1W?f7OdwSM)z%%MW6olj(XNPhIE$HO$=g) z3dPUZ*y0nlM zl()li!gk3In{6x&BA3f=vs0JRk6(&-v>jkJL#5%~ZClxQAV#upL`#LV`8UieZ8R!w z;VxH70#n3X(Pf%9%y5qG(^=E*OCeU>epY0-pJ|Nbq_YA4$eGi=(o$kG8+r0yj9m90 z7E*VSrTK{ERh*g`E|&dy;5{|y!1lpGo{3N_X!$pUbAY!7XoHNVpRA98!Cg2$8Q+Q>^wXN`nVX;m9NX8P+kq>PMisf=Saz9ib#eGdoSwfK3WN3 zTTNQ&wq%pZwc6!pPPV}m1L2HyCui~~uyQeof|{I^9HxjI-5fHbhm)M|ZX)I*>pYfn ze42yWt;(|xAux0RVqETDEKUpk_O!neZHkEQRXBXfr^H-v#kjbrRT3)bs4P6$G9}ya zq@_fL{3D-{qbFzyW(KWV=`xfsyM5(NC*f-RK6AhRb>;1;teKG2(8pIp;}%Lt;679* zJnd;?xpPQ)$NIX>WM~N6qsG2>4`O+b;NuqK5}RYr3H;u43adp$t@MJtV~e;M1B1VL zPgRc#jCFp;sWC*edY@3|{B|$tns4YIpBvjdXm<8%)la!d#s4hK$eWyOR!|r&5S}Yz zydc?oZu>C!97%9uKO86Y_mmw5+fmT?JnC*TK!#|K(s6>A7!3@R*(Ui{-lDX zSxT%TV)o`64|ZEweJE|$!&;6EXXc3SN@`bbvhrM)TlnC#%mT}DO$VX+;*kFG;1}A3 zV63s=nxVNtq{jP~L4wAuuf6*)IfrkU%SaoIR5UqG9BFbji|0TJ@!TE_m70!ru&>65g2TX>Iq4ZZASY96|ulj1# z{Y3{>qD`^e&ml%D&VJ^0p+c&HCX-hWrG8({UB>)Fwk6ls`LDz452;fMl>6Z!vt@jDUyKd(oOUy+3pP|Hlr9g+TJeAR2$tw#>2eq8-<0K$IGk^SvN*oHgfU0O95xNl+$o*?q|MNM<`p>yA)EVubZG$$5HipVBxM-k$ogQ*x80g6Oa50ON zS;t0TbTs=(9}e1vHoSnQB##0FsR4=1+zZ!%^5%D6bx`)R`#MQq{k8^pkd98#rzI-( z-ugQjKTOo%47wK@>|q25InxodTyBDJ zVE;qql4O5^`~C0P(VwsQv1@u!W|n`x7@6E5L*#;kwtxd3lrWUCKuKDyH?av->!y7B zdS8e5+@}4q%as=fIp5V?gp6R&-2|!b`J9f$P600n_WqPkK_w?}{jQ?WMgRi5`7zrp zT^c##03WKD%GdZ_ueU(tPNSgefz|-o=jUo-Cu{RE16%OU#=9tyOSywkXu@LZBPM(C z`ZL2!Uf^@%r9&)#7y~-qIB?PPd(lUShyS>pc&2}Rh|O7G2U@yy77qTF%swcE>5+VxMOvCmJ^D1`Txbf%h}tYFzC;_wH&G6W<;4i zn!8T8%wLt63d2gl9Nj2=dfYw3 zwzN1asX{l4QItmfCSz+=k>ex?YsAo^{>HMaX6PtsVba;#`sqd7A$ZJJy1*le+bdKL zGZlB43ZA@#7d%t_8?R&$dz!bcJZ@H~!EuF|$v>yRksSFnth?z7pm0`Fvwl!iAYp^x z2eV}I{%=xQGUe3C?xxz!qf$C$gRxHQ$1ej1wUt-vhAdAX*%G`|td!Fy7uu9yE9_LZ z0&FkbPMw4Ymv;~yGRJ*y-*vn{V?d$!gys7}dh>YHAN!nR;@1bYDj%!FHg#Eu&kyd% z8!p$R8wp@`hj*qLcf6f17}4o3nzaXiq9aHO`khGk{A7cP(24j)vz9&FU|&wxe#=e0 z<#8By9$9_hE|&Fj3~`N3ZB$^X-6y#I z`br_Po$tiyte+IA?fJe5GYD1nCv@K){PY;+6|z#Pxw(eoH^{?$gYejFt~8tG zpf%-G*7pWy^&RsUPPqxe!89XU%it98(o)FJ@gC#-htxx)Dg*36)-A$gTLXlZ`OqC& z2haDV+<$&a@(ru;I$W|3`^9~Vcqjzr_$j7Rkn_y|p|`8Sr(Gn@L6lACinX%9wJL6u zu-&u?9c5Jc{g{fi>XCs!3(5!g?^UiXj-)B>P!MMo{Vns)1U;@)rfTz)*V4lrxhwI4 z8p!R^y?zRLYGM3KeOi>p+l4ckWW;=dmxAP~H1u_$hLjJMN+i|FUs*?AC@$SCB%pS+l<}CpzVe>nlLCpr*~JdnDSgz+}BsXa^?5J z7Yl%Xy%oqXQG;sE-un)MBGpzPV1n~7Q=47SKAlrI5ql#!^I5`DZgYnVZ2Zn!P%=i9 zY4TqYfAWU!eu8OR$qh9eu~NWhlj}K2_NLvRD~A}_C=`uOYA3v4pX6V36~ci)hO%;{ z=dt9-X$Cha;kP_NZ}t=6VsBBH8cVTnFttuC{<^NSL$C+$On?%;SAm+ttK2qOiBQVBFLAamhDiA|KgF6?aJGgP5>;p0Ti+k~hWjFKC zGCMdH$qNAt=fUy{Jvx)0@K4$xB{_~QKl9m9g9Sao^0B?t6MHj1 z_U>^(@ctjx(F9e-d}-F+7y_o6kK$7y*Q%pmg@6cmM}t2y8#Sh|Ec2-yX&Jr=3D|zJ zHH5|-eIUB^vMC^V-`jig!+8yz_pF2yCMn~Ukq>i?$6{06?>MWfH6dmb7u@~@uVh7B4@&Uq13F_`e}fYD_TT=}9rmzyssG3< zA+mf&1oAGvHQ>hrBg7#H7B6u>o8^9P${w~)`d_|*O@hc~cu9G2=N+#xKIB0v9cGTH zR*elBhd{>)Peh24;?G>sUZ^ie^NS32m+(1vtY>_ znG!+?a578m6h9}}G8{{Rt=@mq;i#Gr1(>!gfH{?T&-($uf7=%xJT|V(ncF>umH7+i z2!hMd+>m^r2QDPQoe=37)dKfnKH-#Q!$2QTW4GQ|(?JVkwa0kc40NfuNss>r!WdpRcneZyD_m31w1 zvl1w2{mq3(rFw{oGJZX~L={p`;>G$5T;Kp!TRcnwp5%&p@tW`ROWpb$PWJ2H%y^Yd zMG+AZ2Z1xaj`eClIX0QHso>%Xxpyv???ycZvVtjzDm*~vPWi!=Iu__sRXfq5_ZKsB z+@AA=?|dNSCVP(Qa25?HJGk66J&v$JI2JP{=_*IQxzb=739V}hymw}(!}Zj0@yP29 z7qOqnz$iW^l4~Blr}w$!hg8XgpTggZSM5a0G_?`tIQvTl!oO z47;rJtX~QHwy4`B=uXusWKrtbi`HbdPvAH==cqpqlfD6LHgW0cceyU;;LzgADZuai z_x_e7zA}|l`mS#)=Qpe=%!--$R_lNIa1dXfpBH0BA0*LS-g{%+QHw+X4@PuM(wR8s zzf7Q{pPbTK&&a@&>k43xPMAf_>(`Yq_ynmAwYOX< z`H$>n(0c5|qV4*fiJptWuGqFXn$FLT%I)8*?_D_=jpLEV;>Xir z-1{O~XEzdiIY`8Bv)*w}?Q@?p%?)*@fRWtiA2ji=mTOg@VBOd_}F*R*BYRcd^5q zb6~xj+}E>@z0fW7jm`;7Uq(li>wSuR%l73P?%^BmKRcC{Hs3ce(XJ%Tis%BE63=m; z-`6)X#F2}gg(HBU@j(c_(#`nKdZn8w=U?3a115SQ!B6AY>OJ4)F!y$rWqfpM5e0Vf zx8?u^+Kr;wvY(7qcNXp9PKY5JFet7_@Dws2wdM2m;&a!I8u=9Zt9UO3(XfDe!O9Rb@Q1gvJ$d;{` z78j9{WS{ZHZia&0Y9r??5YXM%YM^L;2bP^Lw3#h)`QBVOYnMLQ*`6iO86{ZSpwmtm zC_6A(D(sYbs~~Ze8p6E^UiVfpWioFTulee87oXe`vxhd@gXbT$9?jopmtgv{vm7M= z1~rDqUJT`hAP$%ytDEb>6yJCEH_*=v+;|>E97oKXDVdkQUVK+#?ay4t0RyG$guadx6l=(**@}(Z}TGGX!(4bRjfYyOmjSNloBr>(vz@o=0IUa*% z`p?KpoMaP+j*Bdi8{W^vS7nTKh+b7D&2rpcb0|N^lo)5bNt*J z_JNYs)9B|{?e1OuM8-OT9XCT;p519aa+L-9zWo>m7xvIoIA_&+CGLcz3y;~80Wt`V zyE7ChOy)|m5}RBui*M>{A}VFyBUlCpru9O@{rQY?N!uNZoDjUwiH6{{*(sDDv_|L6 z+~nZkc?_!mQKk@EF3qE_vlZt_9Rr*TcRQ26f!PKbqGpz5zb)D|Y5Lf*b#aD5=Jihs z5G4fER9kV>17!R1LiPev<{K7my*q9RYFG8i{yKRF9@>xYfmW)WUt#3BtqFP;ocdAz z)Xy{c0evtd*5@n^8Hm`ZE5`Cu=lInIpsx+gbS?HN}D8Vpdp790s>Mw?lY~mXzOn{Vv zn?t3G1d5+1#e+#yJ~Ns)zccxHzuN=gj~;vju((nd^l_t=GO_g!2z^py{M z=u7R7TRyVbzEm1Gyz2bEI? zJk{#cnlWNtkLbKRtE|D{=GQa@Q8A#JVY_ zn3lEU=FxgyNq%;_W|@>vu6D>Z_ssm%n{Gw=#%wUSd zzda3vYolmnC4(njmQ6*@xM9LOQ43r{t6MX4MBR)Q0v_jn>S`+XtCYOnhkKMBUllFA zY1K>txji+cT*1+0eVcPl7|Sy@H06YL6K1*hRZDf>2KVS~pVvdrjn0}VVL-dCRv&FX z%tO|dfaoEmqO^A<4nk;jcGM0Xga%FXRhP*3K7&L83fes&_<@;Cd-B+^NSgQdaM=Z* z`Z%eo8Gc~?Xg2cnk+>LVye0<15#O673HoQxL9jWkc8-pW4eF$Dj&yLZG1|`Pe>nkE!A^H+PUaY1r%q%vySObSJF~|=1UYNH z`@_b)O?IyF2y}_9Xa2+7d4_FmeSQDc7WrZY5o{Wv#Mnt5E_1hM;KQ}Azk zsFs6HyPj})1=^&BKlS}_v1nm{?tRayJ#I1j!y@a!F(CX;RhJclcV>C1uj?hkCaka8 zi;)t0G9%^0hR4`7&&--x(Sgav>-{MeBP$VIt~?e69bkxAKidVn_t9$OnNJMro0V#=3Kff-7amI|oe|`UpGZ&hc2kfcgPoXI?E8P@4d?sd+Z=Vm{M(l|meW;~ zcYifsqpS;GKjd~@OPO2@`ra4;r!=CK1ENdEGD+mNrL81;%+++JZ4;(U^UQD8F2b+} zTO|62+07plkTO5(uu}>AO6|}cS+XIdt_{)dd2bE%!4?Rr_MVR0)+T{)*B7M;D@6 z#_cKtRRKubQYFaD(m)qAV^FOq&Z3B$!SZng8zn-q7>Ey^h?9P3fY1@9%I`2xS)81o z9j`_qm>6GMDUvYjzXG=p7d~Mttr71CFHnI512&_JrwTlrEm49RREOdUkeIE9xODMd zw}+)58rou#tgUp>Jq8=Tj{>t-XQ3V)A62h{7rsjHB)KX+s*;s!9I($49cJQVs;x0U zt;l1eM|P-%1h4p!s{tg~c!^vc2SsdT7rV#Q+5lgtmlA(>0|=d0)|J%>B}y6IH0 zj(&qa>9eifG^*I1@{C4;i4p*V?qSg80rIK5DQl&RH*5Y5b3G8H;Fl7AcuH;1=>GhT zswXDcX`Z7DdNnm~55(?gibIYqP<)Icd{*;8gpN9UxNWP1LKXMxCkwxazrM&q6R$g! zQ2<4=`VHHw;fIOb^zqf9Oe*U8NNim=3{I1?QFzm99SmQvCTQJ8uo;#us_U9y_reJf ztND-v-8V3x?IXM{F(On3H_9Q3T~UwH08dI4@A(%)e7I{Dss4qP9uRuO)KHWSaJqJ7 zQPJ5yW&3n%gFq~KLtVPpXHWGIJ(|MvS#C*8fK!2p!dy9=CSGs{`=rTD}6+###2+#f4!oC(Xrr+*)K^0|BGL sY>KNRf1A7EG(9s=4inT?-%Kmi4zbO$$Gul3!K296D{yc9o|v=$14x)G$p8QV literal 0 HcmV?d00001 diff --git a/unit tests/testdata/girl-5.png b/unit tests/testdata/girl-5.png new file mode 100644 index 0000000000000000000000000000000000000000..16af9a001141fcdb19b65b6a376ac0a434485986 GIT binary patch literal 19352 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

X$BHM& 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 literal 0 HcmV?d00001 diff --git a/unit tests/testdata/girl.png b/unit tests/testdata/girl.png new file mode 100644 index 0000000000000000000000000000000000000000..831202b2211bf7059f5cee83013db12f1df2bdca GIT binary patch literal 23054 zcmYg&cRbba`~T}W9F&>8R|wgJvI?oJr0ndyWo90Qj8J4|E3)?<=a9XN%*=@Fy`A&B zy}zG7emx#NDzE##?seVQeO=G%c@_RtU77eA{WS=Jh#x;vdxkYL&owEf zZf#1PUwd)=Lwj?>%B*i&Om#qEVWIqQ-@(Z_Y~T^5ZJUrSfE23g8zY)yaelIoIX=wS zYGTm(z4D8@F@AiI4&||2RL))S=i%(_80MoFw(axhN?9z@eWY7+u{0+E_D1u*j`gt1 zsaF^0)z;_D(=DUNOdppyPK&z_5-##|7k>p^VE5+w=5j8K*s!WjXy47gH?z)K0Y>(w z-Dv7%Yl*~QQXiu`j;lEls|$159Z?rWR-LQ%4AknAK4n6;S6o~bFMj;AmF?=w#!oE@ zyEM)#TnuP$h7aE{#D!=orDo1))b?e})^2c@7)iPH+bWr$Zjmq?C|;|l+*HpRqmO7M z>*GKic1O_VOws>skeN#Td)PBrgfu_j%N=9py`~{mBW?G)r*{IiFbg+H0A|^8S-{XMAkG}qHymaYof1`6-pIK_D z(Lv7KaoHfUh~ySAR$gmyj-s0IkCB7HhVQcceVZUN0!+F!Etsu|IK#6%)%;}Pv)JE1 zC35DyIJ>Yfl`ioAJ-BF`X0u6^IK|BVoT~?jCDQ-8{}J zm0NUvS%N zK6ArNT$nT*<%j>i&qK%%Ce(<`{nRtZWWX$*UQJ93A(@9xn*;ep&&eGQJ5Z98yIvjv z=&Q3**KWt8R+E4h<2C2Y)Z%Z7WtG_AWTsJ1Mg1)px^TesS6AncV>lPyvapRtv&o(K z2kX3bczoRAQ6X~V90mgow4P;bX!BP7B)984OZoUhRJoQJsQ>-j5D}D=S0y-eY;8Fb zI;-@B$#Cmk_u89Hm5V{q09ql)#CvSO&G?aRhNuXJ=Xm5r&-{k#fU-&+9vKHX*HCl& z&~26%o$pU5gSh^Y`jk*kREy0I|0}3txgiR^cRo5WSi0=Hn1>C7RZ_%a-aI-RxwpR3 zI47e=cP-kN}li^b6Hn12&^)76{(kX!-uZYbW&dxsMBz2HcFm@Q(Z zdrt-qetLFy+j!&rJieSm_F>ZFGx+&rJX0Ok{l#z6Fn%B}O5$ku^t|mu&=9%RiYD1_ zmMk$z1{$A$*HdB>$iSJxVZf$R*vNfMqU{9L!o0~vHM>;I~qc2>3v?(j{6ry z+xTX2IEa8%_gh#j7b|;s5-u&|qW(6cJ^YZM++O!#p|SUs)oahn-U(^v0v#3d(?m@v z9&9u?1rjj3JL4cC--ej#wci4ta@qrB9`ujN*?6VQx3=wcwDW==HcVpnxda#b=R)+b zK^B*9J)~gDPdF69^uS(t+`Zu6IY?BqCNrbQAZ1hVm;@u46*q8*poxxLvC=uA!SQNJ z^{?Y{6SC?j;3^1)nId6G*>X;xFt3BQtJ&I06oicl=nuj}Eo!^+c>iEhbrG~sS$HvB zOJMtRIhvT$7qew{0YC4#92<0 zdEefQ$po4|{DNXx!E2d|fJSyn-}g1tJH@E$bXEM~n;Akn~9!Ie}z$3A= z)<%U&Ni4rnc)P#kM_8Oe6F1wG?SO5dhb&~*g&~s%1&a@7ANbjx!T(x% zc@7Jhu_2)TJF{L}ORB*-DkB&&4i{O=k8e9Z#&$n7V@E)$ZGYV}PzGy#^(gII1Xfcl zbAJ(P= zyzuMkUpX9GNxQbtF#aI(cGvC4i+?QycQ;SuT>}k=8T_PvXc)R>u&dufIV%j`iqv#z zU-@Wd9vJqyj(&r03s;>=5GR*#fn^^t1kag@$2vYs%G!y>F%Jg&K&d^*=tjT5xzEC= z;Mncr>KV~kH~w}W6(z`h7HK}~l#r3rS@L~s*mcpW3}tf|v!=aMJRg~8H9r)VK?@DP z{?3B9e0of}HX`H^T(>CvRU>nz`VYXZBivrp8O7PfoGDRA1Iu&!eo=hsCxym**rmuqEBnLA^Vz%^IiI8938%74JSdX=LBW{n zuSBRYN=SzGL4x_$m#5w z_?6ilM~=l3es~;&4Vj39K|06h#`EMs^LC{4*wwf~UWrr9$Q9-VeG%wJ;G!U~i>jup z_(NodQJh%Kvpkix2ch=QE&^+>XY#;Z(oTQ?nx9FF>F?)bFYwn`@y~32L63~QAKEz5 z%#XL55pBtw^S&#kYTpQ9Ri!&2Bt^bP`tvsv zS7W>OjA+py{ZJi6oG>*1yC1tkAkY(-$(+$}y4D8iM#Gx&YjU6$(bQo>z~l@ap` z!TDfsro;Py<;O7)@e5?{>nAg;!QP*_AumG*g@@|HomuaI0SHGyU_n)GdCoGraxaYz zB94cTk$(pB`t%cp;U_3L>b~wxO8!gAOZ*P>NVyVL5Iz7z9t>xkGHZtMPh;n4Wz&~( z_~1L<&%S9Bp$!*B5fG#5WL4H2dkwwAW#18sO>$FQPX{p{{K?Tmtv5h9B6@ zw>`VtkAzzW30m7E;)c=(PjbYzN@~_eJ(s#vBP2<-;hWWmgf&cDE6Na6w;>}Yp-q^+ZEsi>s&ZwyKwewvN z3NykX&!S?h$h_H+cB77)dag_; zZ33MW1v4oGbS4i%ImfW#J3J&zVP$K<)p5!OHOIx|SoIQ;eN+7TL$|Q64U1ghZzS!}+|hNQl^N7-ttc~Ci2MPgMGE|8W*N=1&mS%jimHo- zL410`<_Ajc+BwUCm`_;SwBCG$_5@Rkb6#C)5|RTluP%h0H#2gd2wl5nYIcn5@qDQf zvV2YMW{WvA&%bo_d`{TKy)o&Yz7txD!=6V-#Ir#XqLF=6soWAymU211%&k0#c=cz`a1HF_{q?uI@ah>God3-u-fP0WI4^yDK|3t-@IQ8)O zq2yg8Oo+eGI%YcO-JLosG3YgHo2`c4a(y^lpIThyD_UI1+cGxu`xC6sS#?08_m-%d zA@j1c@Xf}mfd}qjQ2i$y2)R)OCg~Zhyvhcx?>FEUIb~ei%40PJt%1$c6f+ zMGU)Q-+P@?0Lj*T4E#OsY9F3Nz~SP7ltMK8Xeg-~gOx=faplX>qH?PA@K{wgTap=% z?C53};?%_<4Uuc8Qu#WGJC6*R{^l&FB3Y}zBA>j1pH=_+7nOu7KYT6fPp93J?l0(o zyRHQ`+a-h=_rLCsqUt+D+*c2caDmy0s8ndGvVlUg@qjv%bACTAJ-iuK!7o6FJTrG( z#8se2{xaea<1p)@GWB1inshs#8TMvN{X{VFYVAQOf4FnZ!N^Z1`O3D8Y~at2lsnBX zxyx{MCU-!zO1GTF21LKWZjmzF_9Ss>4x6E6FtIH^AA?Ezl1Ozx(&{|{>xOSiyKp1S z-%3}TKs7mF4q6qj{w7uWP;}g8abtvcZ`!6-F2L@~7wP$RWX$j+~^|cj%xV>zs?19yf<`cjka32#)-Qn~5X8 zDY|zeoW1$%YZkG*-h@fH|A)_7A?v>hjDOe-Bm`27wJ60he=eY)p#|tnS4(PTq|;`P>0LN_oCT;%%;qH1EK2rnQ|5iQT_4FzFIb6a(kc5q~LG z+9T8O+xHuy7JGg!F9zv+QV78w{(hp6Ar3~0ArKGxD_jg%KzG%U&2Bh@B*)~y8OoJ_m|nu+?Xu@*xZUpqHO%A? z5T%{f`<5?}&m@=CP|Ie^3}(;nS>tdb>A&z=C3y$rjvgQ~2phMIIG@* zoT>w}Y%AA~2747><2YKVM{1gzFoExaN|*%>z0{>X2q+v=+R1UGlZoglU;Yt#2U21? zTZcU*mw7HN^YRUBHJ>m0n4r)Hulu3gAZ4Ho9nx3(FC6$dMnxII|H#Xk;m}OxVR?fA z_4)Cwn>VCh4t66l72nA~02Mp%8R~a}?z+LXPv4h4zvh57`N`1c;r$`cpFe;&1wI@< zqp4;B8?&b@VCfIP70?QUy>FzlVO8ufZtGzBq5SD1c`X10j; zBaPexnyZJuX$nVDxo^>{$?jq4gP)IckDYCCzL1v`srjv6KG>Q2Db3^e4FtKbl40Ir zt_4m+Xb&&J!jgXg1RyX2Z+JtQ-PnY=K2-}N_E>RxnYWNg9^h085h$@cJ~v9vzJzDb zMEHhwqrUpRD#+_=H{SDp76!cBF9H@P2BrTnmTcnx=Y0UEU|gRH^_hW2pA!=cz_3s; zs6rtpJ$QY@F|w$^ILuG59!CDQV+8pqksg^B_ubtR8dP-+T=$p(;C5&da6<$rRhfp1 zdK|aAv$P{oUqn1{UqUbY$J|*8w`m^CiAI^`81iCbt(g}ZL?C0;1K)LzmnifffvZ!$ zn*`f&6|@YT(aezU`GAmTc3fR77JpS%=Osh~&%}ABz}5I064MADjfZ_GB4U~XUB&I) z`L4POPNr_{d+Ad)TeiX#&*SMo6QOH3F<|!K{r&f#ii9$F(j7&1mR?V{vHc1@{FmbE zJ$M-cmZ|Ye!7m4cU%SHZe`c@B$iA?vgw>V#)CjLYxb|~UYJRfQ{^f&J z-&}E4eG0^U`R5j1n1HvBZn+kfzWjf~TK0!&RC9R)5Owl4S8Pmet}s3tZz9%#HdxG{41;NYHO;P_8@S9|{_U7z|$*F)-Nz7X!#-o)|w$49lz23lv2dm_WrHrbA;r(rU=7g+&|%)sF5I> zSgukN!3bc@2hQ-)gY+pHH&xzlia_!eYHTTc`*U!NDS2a%krR(Y=25dbqTB<>MT!BEBJnX#d3miUb_B)~)(o>{Jm zwx{3@>*9{sXwY~l2C4DHb>tUF?hdqkoe5mA=esv};!A;1e>Ea*4o&$Tj*yzD%+nTb z{Q?-P*pyz6rpveQbyM%b;4 zJGwt%#6IS?XNy5<)twUzgKy6jj8; zz~4%V-D!;h^WIF{q=(k_yLxD>A7|AA=iF|7?UF86IOccT|7HfRg!Z!4dzm|Icrb(!~NC#DKI7d z>Z8NL$fH77^hw?12lU-t;s5sf)nHRXaEaAl+D0WyWo-zNNm}HcTy^y0@ADtoKdDhh zM9BVY&Z@}{$(AnlPSGb;fi*TLL(5CA@}|vkUgz_uqsRcAu_b#u8u|4Bge3G@=h6y9(7@?w>_3HmKt{zK#%CLyXncsMjBBCH3g|wl)ST)OOq*pr!sdAbGg> z=<%1j7J_Q0^@_cntlhc2#7ZhLjqq43%y{qI$fq2%v z=k$)X-wcb=-om^u9l0A64lMSQKd)=GUvl)N3LFjI0Y);*L9PKRJ0l)4XzNopO6?{OqKuAE7x|S|D53~pi|rafmha@9w*IH z2j9?qV&v~Zrzft7mgT>pT= zZM6gEdyfwqU%91`{n$;J!t)loZ$N=Fr0%*svR^6aY$u}+G@i4M}PGjvfNb4B%4tw$wmxay6SBEctzEt@|B@0qZ^}auZ#??0ZuaSW?M|=F4 zqRRCd<*w^Y_716+xpNHDeN~m$g*+O(%cZqM7qN%IkS5ceFB%AwX|p*M8yEupX$k+> z`A5pc%w$I4lbyl6*UIB>1gGf$*zRm=_nhk9vs7cLK9Sph3ujbrx8-qv+$OG9LYW4= zoA~%oP`N51j!JlOF=aBrJVMZmpIk$o`rfgq?c)PuZUc^}pp*#yjFrc)V!42+M+zT_ zIh~PQ#UnTPBbH{qpBCV`oqC>}SbRLO(@0ppIDW%^8{~&NW-Zyw*3FE6h|MXCa;jAw z5Q8iYPj7Z;IJi~WLKd02)T49kXpo`M)4#rgIG~Wi)UaWjZrk4ur@hT<78*$<+NFzW zIm}Nto4yfPE+{v;_j<7OENxy!TH8d&*}sfDxjE3^LwPctS_#GX>cM;)UI`WUYh(*n zdNXl6;vH-RJbvdFozn)VKSQa3_I6!?_v4Gxr6~v~bEVc#uVOsYv2~k=h1IsizFp2& z^Bv*8z1LHNCFG=e5A9q2q9oK`bYiGdz;RObPCF9;{C__o(A=YICoLxBfcvb}t-AG; zEAv)m*U(6SZLv2c-OBS_xh;_>F{&m#G{WA9L;*7jY{kPt!ALd;aP@=8I4%Zlq?dn&rGD$W#2=w!!B;hlVdU(%v z!WZBb?fkrTI~@KinvXnHLL)4$(BVvaKrLi3$T=9GBPr*Ucr8sp zK6nWnsUsp|lF4$1e-bGwJB@!r&3x?QJt#yCm=R#&Nt7fujJn4TpH35pKU8w=a^V-fmb*zG@pZUmflC9plkfUWm%jb+JlYp{Pu6p zYOX#$W@5UUuPpCb*xK*tpRH1lAM~eiDE{7vmbk!O#;$z1UT&96cCU{rZh0anu12)5 zLs^P&@muZZx{U=MS+{)(WA%f|i*0VFmc^r+ERpluhYW&iR6hjW79GN-f?WlNafy(& z6Ad6MFWOu^iHi?6Nf14M!SvOer6S6iy2L^ETTl7WtAoRsmpYZ+6XjG)0tw#oZB#{`4^Psu)e8}Xy=P>=Y zl^DIXfo`^eBhZwef=L5{Ve|aywccpRy^M3_och0!uNWpEoc`vg-coOD@QZCD&3QX* z(dqSD<#`xTEFE@0B3P&(o(0oS{c<<26Rw7|eF+VAY%M&Gp_>YTDmy+9ytP^F%{+pR``M28KQ~ zfrzgBf>!+-7jHh?H`_GyD)-e(l57?+YLYb0D!x-yO5pk3{!Nq(T(?i>U1WRug-bcl zj82i-D~cDw-^DGV=tLz_B@Q7d^r4=&cnRf2{O+HQ>ci{pm6gj=ft4VxK@-o*r#O#A z4jr#VaxA-=skKQ0|Mz&A~)`w?PvOH+RJe?0(J*ZAl5g5WiVo3hjK`EwT1fDNHyQ?DmDSoE0kMfu=8 zE?@%#uSKCD+LX3o()4@!CzY4y;p^)(VV=#_f6O7su(z_%{&p99c_dWwH{@U_xvV0F z12?gGb-{EGp_{(D?odcse-a{O@>t?RKqUazP#JTO3lMxC@{r;r}<}+P@s9Z#-k{lA z&V{|rpN^~Y&iOO&PE}os9UR!*bBq8;QB(k%0L~QCf6}g)8^3N~mo>jDO)uLKA)_`5 zRjJunE|g=;hT|_JHFm=!6ld7C)0*Cm{kA_Xcqn)clhj!o)swNW2Q{ z`lG$K=e6G~A?7q*am;hscw!{c&RE!eoxkVNWRA5`H-;JZ(tCWZ*DpJ9Ck8juR9=W) z`Ig&RRJ73BXjp(wJTr99O`%^nK}QMBTI*fxzaN;U_IiZy;I6`KWeXVky$hqsJqDW7 zZ)T8oSB&j_KA^2vB#MlJ!=pLBtQ&9>j^?yeR22FcYpjAp7i7fJ?aR5XXS`kOr(G9a z?QNMxk3)NHsXG*uU;S^dLt z@9epn2Xb?x_xcO_+dGgL9Bxu2jDB$x5ty)juT$f~4GH_OY;<((fm7AJ`$pVL57lbU z1B@qBl9(-rf7N ze2rdypR7aeC*K(&-C4vtamKUgfQ^fSVLFZAJHJ{OiR4*seg0!z%lb&)shFeN-v52^ ztC-Qc@x9~)pCi-S;(+vP=0TT(*`Sw#CYi{5NHch&rm?*A$e)uf1z`{N2M}+X#y*eS zI(`)8%b!74Vm%iP+YpBsp2@U46a^c}K0VZO1KoM5)z68ch0xGy>{)%>h6r@UzRCnr zIpQJA$7W|Ni<4e33=KgD`F+OHbj!pmFJ3VL2Sc_AF2ft*d@Zg?duWS^2Mw7(5IpmB ziKC&#u`oJ(Z`Es3sNbN=0H>rcmTCpsxFS)yY zEw?WdhKR;1wkPbNwZHEJqk+@|W1PB)<9ErtM6gAI%Y_!nJO4qFMN8-6qjUhW>S*f2}MX%HSZz?gYb?dmVOE;S5 zz`^Ms2@~#E)bnb=u1I*-h+Co6l+gOPYokKYC)iY1|L*1HjbN3}2{(RwylK)o0ym(@ zg=zB^{C8qr1WfYT4Z63XU;_pU^vq)lOre&0`eCrLJgJ@|!-Zp~IovFpT#2BU*4@5i ziQvG=L0{tY!9%rw1+>V^z6S+A$cT_7`C-hM5PHNsfS72ZdwTKoc9pD(F+Mud^@b`Y z<8=SKuL(m0<3qCQB}v5*u!&?U7ow|~HsT6_fZL81NgU}1g7m$`hi`9%AD7$moqU(U z!}Ul527_N&Zg27f=sYMp_SGBQ+B*WNdwBG3U_u^*tbdTdNS|6W&_sUwxP8z-++>D% zzI)*#1ADpB?R#t6(z#1+Pw&GJ?s#7S^Gn^Vh!fOpJikz|-UCCNlk?=+wJ_AuI{Y;) z6z}a*t)8lv$VM-c(;hoa$o{(bspdyY)}t3(k%G|)y}q}%tD9DcRdV&x zVW+oUqMkoN8%h|9!>_vlJBcj z;leY=Z=e~)iIEP34h80b{)LRL!Rk!Sz{);9LlazmAG(1)aeX%`2F1GB-w=kNOsONP zhXuTtglFiB;cNeEk+hIe=m;fvf3^`50^Bw+4rC)go*}&p?$sP(v%yPO-~?F+$ZOsN zj9;sk&@3c}NdDKs zkIoFTFz{q~c6F!}wgVMmw1RleL#uN*X`z{No`H24>G=~CL?+)ljgLVzeu|(r*dlp9x2DmGfjOa}ms;6#@l1Lc?qO;oq`q^yHL(M0M5D6Hk7$tW+2R z2TFwOjfavk*2AU2uk@PJ6UYFjgZ%>gab}$0h{mn`V0h6oiOG9zTS0OQfp>F z{-3fDbtnG{Z;*f*-QIX+ii62MqdjXC1)tX$sKF|Tx<5wz1D`?u{}iXV6&l8wxS#qm zK9dRV;>a1qAkTS3t++Z16{RStm=GbkD4^!qAB`s}BngVPU6A3+`}2sW;f~2cKmt=Z zQW%T;3#Q!x=)m+Gv`BsxoGS4fNoeBCYiieXY1^)*_~?NfSU@(f)6%<#LXiDm)zJjl z$+z%%;!K=sH!jd-V~}Jj3P`DnhiFB1>dA@ZH78gd>5$V=xXuvOw+JRv0(hD5uYEo- ze7HQmJU&~=s7)8-HzB`+D2t;RUngS2#KybhwnH}IQMN|#D0WP2o^`L71+?bD;y3Li z9;VD4(NTLYf?8>OE0ukE%`$pGM@O%uqt-XE$)eobyXk4Y)geJ`gkOW;kPt%tRW|!y z<6&m7^lvJuy7o8WJG)06Q^JtMx;ulrf%9m%?|DW0ike%ybyQ{J@;cM?j*-gcT#B2g zX{gzcV}CqOn|NByJ}rqWqBmDYdvO)$kP1o*`#=5@2-xH0ABoT{ZI4o5laKoj^>>&5 z*2`S`z5aXhuCeqzV_R>w*g4Gr9sAPArqDfo_Qj)e%W_l}5xQgpeQ5*0H41>A@3cKa zWU^Y2#Y0CCSg!RB>>*RoN}?SRxBT9{p6#(jd-hUJuFUN!zV$p_t2)p*6pz_B2gG+# zHzABRZ4dNFUqJgK{;+b(Z2A;;)_U*E%)iAD*el#6uMcw_v+Hc7JZ7^JSH8uq-NaE< zmdEU@2zfXm@_O?_dbJCFEf^{PNHnaj{Gr?%uh(B^%*NwOYX)gZqyI+!EiCl-G*LUX zmyD_~Eu5oYs#Y3yTzREcut0?5BrlWxt7AikKz}WIOpBTc1IjE4b058NGK;zWLTQ^y zw2V_pTCzel?jC$kv}cG*E+?l2)l@^!AY~1?ceTDLlNKX@&p%60CaJepgg<2zRx~FL z8vDmS5zr$0!xZPl=T&Nv&<9SpA%W-NW1sEQbY?OyUhZvw3aq^#s=0Y@>g|=RsN*&5 zw*b{KeFQIaEZ^q*Ph`dASvA8C=+PF7U^e5hHhfs6CnM+7OduI#NU&C{0 zl&<+daaM{|3&A&@e6c*s+aFOn7`jvI<)II9Dj3z%%H_F*f^F_n{%j`(i5d&qXBV9R zd5HIEAsuz-B1*HvxPnjOlR3mh2d&R$uY?Ioa2gD*SZcQ@Vk$4Z_E5HGmFAFxm3c#q zDKWaQ2Z@r86oLe@JO_ihI2fSE>z2e!@Zb7{{_rw3%@OtjYp}bc#VeReUWG^$CuydT zG@QQ;stexxW;#bZ1O1+=2zv>R9G1cq3pxJrKD_;%0m+mcVEu!g2&vLdygF{>4xV_? zX9hh;`Z+vr*VlMvo2)?QL~*K|YolgSlGM}=!o+bgIM0S0f&K^hS{UV=$UyEG_4tbG zCUCDBe)+N&4~?{fXMCKt4eh*l6F(`DP;>K{V-ad?kfay%G{e(xgSO8rW4LXi4bcApa(D`6;wk8reA0C_v-+{|1A$I00? z=M`}>+=M}*R^U$5iHfHc9;3oldrrZf%R8cUNUF+CTYDOifDJMzDJGxWc%s~W9@gZ! zN6)@iBaYFN@lDMql2@phHWwp=&x_T3Ilmwk1+RO?R{v-M;c(A~%oUo#jx@*ou!dhN zm-z|yp_$WzzF=NjTXv#3ZP!Qhw!IlB2TOAdmzJn@UUs?!#ggg?whgw*;k)u~5}zOjv^ z9H8M7ParMR_iAmpJi6Q0ZK!iJ=2gGLH}}%$t!EmM&rgv#MnUo76BYUuH6P?1ko?fZ zVuy06u!#W897})=KmI(Q?unb8R$8I@%WdrD{qaHeM^%10r)jVM=;WV{9#&@yxMl-< zxgQR|@$*_6N(4IV>aq@O0JB&nt?tVu&;2+^X8W30MBWN-J20R&0YWjw@USJX*tz1D z%2EtIrplgW`5oBvdI-<7{yzbfpg!U~Y;}HrMvq<$MjT48wh6ETjloahjg6x1)@p=j z6amYkeM17Mw-*8g)#j20pMy_O7W?emF~hfrkl#VQ#Q7i9?KyUgU=M(ZrQ`Iblc266 z51p2w%Im)t7j_@)ZnmiI{z{-6AZ)o%-K*>wx+Q1-xpgaui(6xBsJ5z2>EhmhbbG)Q zSGJ)-pxOST*6*O6=pDHH2+%VJISYJxL!`yx??@HC+mrjpB)6*%da=I=@8Ruje+W#x zxVJpVF9(0@H@LFf5pUMeL$$bR|FO&nbx+@y8>=Ul(U zjSV=`jSI+!26ZC1trH@_BgCJ4bWFOe-}!HLrc&3h((R*CyX8#t|89TJ97ka3h3MW; zZw6an!bS3)bzEIuh*RKtyAQ?TS#2?Y8P>Jx8hoCt;&Rqed8g6Z*!0UoHOM*7gi+sV zERsL+lKhO4F8Q0zK9llQds(tyl+eWI+Jh62jG zF;r4QzW(etxfkCRFP(G%3^jSVO+(P=DE7tM1P6LfyHk1R^^Gz`J^SL-vIH&1{#|{g&;p zm|DSHMpbc5F2vV+q*=+ z$apm*Z2Ga9vJRRh+mse+{B}jVMHVUmm%|71o~aF`lVG+;35m9pZf?@wFrp5%aU(*)hP97SLvz9xUBb7oZwWd%sgFdH z*OeoLaq<$6nF>>Qc(dQJO^{?ht1rppH4ltPFon+A*CziQv5!T6WwpqxYZiaW@NmA< zE|`#UZgj=2SW=Thkk@=-%S#M@PeEl^ga{f4bpOCItjYiMk3NM969p8#&~bQI#ZzwO zLJY4BvPq2suP=N5V4kE|SY5T{M|(a*N$HI@`CggYR@hT|*CwBYRGpYxjYx`RVbp^W zA?S`Ks3{`Goea5z`^}QSOYG9^{L#>kYiJNo2sJ(w4XofEe};J?gR-BzLc7$yLqcad zc}2;hntt^X)2FX-baaOA(mKe_$)P+;zNLx6b}bcwZxmCc;+he&V;9quiCOe>jJ0Wb z`tSECtcoPGcIUACSvl&~v*(JWO77xUC1Wi%32Kcerm(O4Pj`<-;Bwso@kURm{u4KS8zI&3xlp%JD4_B5;YB=?=zm%DQ73-S< zEfT8Gyc}0rq!AAh-3jCUUx7d8X`)r>tDX~xvA@q<9n;|({53!YGV~nTcdh?C7!te^ z9OD2gFU4`}s=l-;cHJcIU6SX;egApXt4eW$?>!}z=FLO8kgM96t4h5b4_c&Cegwno z>kBt+hkYzU9eH=*!xM`M+c}y)R>snCZ{?f6LDalEm`2|IA34@jdp> zHJ_{a5P#Liw?^RTk}VC}-?tVVz8EQ^vZ+CD5sDOexRYL}!j(VNUX(0Tb9z-elIc$i zT?fv#7+dfMhLe`d$8RhAg{W{+{tSLJE3ajJ^F_7{K&aC2&F_$I_jNxMF)X;m!DvHp zi;2H1$6u%?s3dpU>TO+(u$tK5vHZb26@BasbB;ePa?U>K9uI!&Tjn?f$GamL+ntB} z4>lscv{e3Dv{@$7WKw>{a?pQ8Lm@);2+H5@M$-^5>Bfmo1e8?$*-X#9Kc%|S*z%+* zLr~#2n)l8ZpV?L@>7-ABe}_Q%H(Gxx+KR^_qDHGPxX#eBna(6T^G{u~dX;ejr6c#N z+f_zI^1sn`(eX-A?NHLEpJA<}WOvFYA@^4f`8KGhV;@hHQP9e(9PO$MKFzKBW5>r2 zZavIAG~;YTXjh7VUqK+y!44p4^8Q=UOAw1%U*n;27wh$~M?Ev240`=5%#zTx{P!z= zK$W)lou{A@MuAb@gK{5ZcDu|J*y@rZ$U;B=alVWEEo>5vJp5fyyHV9$d$CngZ%Ola zxf&FI6mRtJ$wkA2$Ul$x2c!dFU6FWH0(u$p&+zf~!}&4&_U2lkD20mW$!)WxyQe>O zN_Y^E!&hD_@ALfL2`n5WeFg(T#nW^0?*n| zDg)-o2NJ(&cL92<0Ja(gE@km)kV_rR+u$eb*Eh~whs|mizTNd`2+6;K1%cs{M>t}_ z>onf&%O}U?K=>@=zU+=EY{aqJU_LQb=$gj#NKZ#=FIBHE=;Fblv8$TE_4HI$xie^( zWcL^(gD>)8!&-;PrCh*XIPn>zKsjEd7vIV`;;`=b=SqJ4o1GQ~OfN^VT-6q@GFA}A zo(n;9Zq>58r0X}hjg}ulsg6)XLS=P^vA`6u#M5v299bH|cgLJ|rzr9VzQM0SDwUVBN;~LN#QdQjOlfC{y1p*|`%BoB^WfC8xSi!!s?m6p7FvY^ zZlM#nN{Pr$Q)spq)W!w!5wf&@gz5&N0}BEH9lOe$%)R6#Yb})>WBx-v0M_6jAR}vl zg3eqo{DUQT1ovRzDzyfvHgW?WA)7YH-JD=bec3={#qv*yvM8<89{P=BbbA2m=0tTw&S!Bmt` zSL|)>&r97E-;W}fnWlFW3;7AXsbQ!V{V)dm+ueaR7xzx*mj1sOgV0xdbh$8%l&!)2 z5#;N>b5BcrqquUqDB$9Uyj3FK4Pk@#5CgrUPsTL6AAbkjeSo?7x#n6u zyqOXVbGe)0WN^Su?8g1FchB@nn*ZQ|oKAKGKsfppln$P{vdXzU05fx8~!M%p=uc3OI!7+tYd72LNz~v3}-hpKR&SpRz ziAg_OoGtnl?}4O(nR4!2KPaF!8dfBLn?z4xaM%QNq|`2iA)oCzxug8OF**2E4vKpD zKK48RKiT*YE&SnUv~aYZ90Iw4sUt7GCvvG`>7WP_let%n3OVPLZP&012vqj8UpgxI zjXJE2&`b%KLhd8|+;%pNH}JiBb;Gz!p#Ef*4-^Na;LY<_3_#ZKMA5!M+dDL(xX0RK zluX2D8w0hbKJ|$lWx;5nrxUfeEhZw8b5MPq1U9jN2gZ6Z<8-{zaMd2rxLB*`zY1IK zG10Auoq~&3Q|zL<)SGOcZgJimxnmcmMfD@>(th%Cb45j*6L5?8(?Tcg)J|5^0&bZz z2m=nLwu{5-=WS~zm$ zb`jLYuDnZNy`ZPTsJBctxk3C=7ag1k=UG;{yNVMKbL5ZhxoLl~$7h?R;T z(x#iYqu;Bw+kloqpr-pb6^9EqDaZU%;OptFO{-~j1?I|!sZcdgVM;CmTPl}v_(zdi z>Q2aerFIKY4%SBS`>nvT6OU_%by-cqg`|$qJJ)5UP zXL!sy78`5`b4Z?pIONXP*Gzm#cjblb<(WV#@5O9HCDBEVu}v80;sq)ok2!5Ej9)o0=ir2EQ2Ddc`Zkk zN-67OE2>*ev0NrM&73%{3avqPY#gUKp)eJoWiH#;F0Fd(bIpKIRkjQ6ob{9(oA>UZ zsXBvmN`rr$w%4uxXH_=#F5sV0iH``woLPoN6&;M0JRWxvnQ_0e->kjmdsYA) zqtUmnV~*oHwrTBe(n}AVSIa}|3F6O z$Ez&ER0AoM!Ayzf)kF;j_LRSk#&PBHow#NkfHl(zs(b^RT^ByR=;H{LmY6P)k2VV+ zp;ii8u{P3(D6FvP>a&olj~A$1=5O;A8Q<&N{8r@GH{Ilb=BV8nqSPJS;$MEvC5!T+ z1kCJkt@!e6K#x9+J+q4Ot#T}P4lz7$mnVYIeFAU)UlUgz59Rm$pD~Pm*BBDh*vn2N zVv;4>C`puMY(w$MnrtzOn#oSqgpVSXWUFXl)MU$=vb0#I5Xvsw%YOtPwAyulr~_2qY^bONXW+&gp{>;Emz(cl-Ud0lcmVnY8N5oOF*{tv*|oO}RE5&U)K z2X0M0&R2hMaZ{*qJ7`Ym4KVegeV{1@KR@!?Tb<5Jji*o=mCiRF67H>aqLgt19RfBs z*=Qg9h+tE$ZQy{=xv)QADlp z-tbBVztllj0hOPUtw-u8Zq95VN9aTN5Mcd<>odBL z*ZKS|mWs75{F2wcw|OJw*zk zf&_+gZmg7ozfASa=-7DW5#{7|F%VcOsC?`a?40z8f>)HRN7dK$9y|>;vvNCzU9a4{ zyR=p@lJ+UxH_-tAYBr;BJ6cga2@-mpSjP_mfwf9!^!4qD^F+DusN!S! z&gv&K(_d$5njRiX{ZVgTv9~^pqzKr5tv(dp5d#9K2aic&tJqMfT7vCZ^(f5!bZF)8 zAf1xPBGrbWXLb^b$+Z!5;+Ml^mJ%`Epj_#Ey*)_`{QjtIq1Ko@=ygHRDXDXHmejp_ z>L*{ws(9*0HjvSJn^Y=du|^S)jhFfdw@a^vWmrKG096KFf@@L7dL%6mtqqbBRxKr; z;*JdLo{auI*36bwy+01lGZg)MHfUjJH6$?ja=Y?+N6jkeW3h1$-FZ?e?~*N5USDub z^OJGV`)BS8TfFY!%_))F!KWX@lvFy8v9ZA9jv6fKiA0S2bS+qDac|pN!6+_NkdF8F z&+6J3N3@?fQRjoH0syAbGh;SZTNb}tNEgU9VRG#n(Mx$#47-1g$0RWjeoQakHoh^+ z>(Nc`ty?*_=WAP5GH?DasYb{PCV-vSB@&(D65qJLYN4At_TKQsmCro!XIUeOF6%wj z_PA_@j{0Hx{Zqa?(jZq8aARKHQE|)pe)k3WO86kwX)bgWn%qe9QMykdF!M>Xd%$c$>At&6&B z+U2)v=zciWiU&f)m$U7^-SBlpI9P~Dkan{y>At`s;YRhn|X?3IaHvEwo)GrL2dUMb>7>z*E}lB<30B6~l$`^GmhLv#Zmd`G)W z@cI6-umFPmy)S014m|X1`m#RgbBjf5OI`IH zP&+2LN&G8o8ZJ~sV5{lNtdhv{v(JJv44PT-5OzOJ#cCH!eS=$OT9E_Fxs@og{phUu zr zf&3X8#`fa7?pn(s0SbEBI$9$dL+FSupMl=DMT^5@+fut<3iemb9RnKx2~6(i-oy(`KML&SIAs)*Cjb);EY5<4o4+y+-H&!GWq z`&i&cqwn*U##bGdrf6bXV}yyMB~nG)yd1ETPKE0xit8Ub*Lp;TlJmif`_1E#@U~~< zk04OY%`yp&@tS(Zz+nh#iUNr(V&8K43f;C=cBA&65$)b2<|M(OUExT{%>~VrfC+X1 z^I;=ac%n(@1I7M|#1j_f8|h4nk9qXFjJY@DlW(^Jj}*U+%v*qy{ZgJ^kHexDY;0Nw zWjt;so+_5v7NuSQM-UslH7gzDW-gh?kDP1hZRS^4;52foFw)14IN27AIdWceeXJqZ zHuyp8Uf#q+x4;Xq;aF^5N}tga&7xJECFv%!*n48oMgHeCtgGz3tbT~!DF`#E6$Es6 z|3%j`i#-+G4~0+C;Bi#WKtEj!%Z9PRi<1*pfj>u_6VF>0>ZG9nG&(Y!fpJ&8_^i$< zgFiKAuqx?B5pnn_U0B#U_~*!+rG@eAMP_U|JDTS0aMp&qLu(z9o#x=0;$H8_oBhJL zC>a?S2<{k(4etw{&AUn^^8W~o&6ShF+OzrX$J$|~{5pSy5v)UhGQM+Lr22GQZYx&- ztoY?Nx{Z~?@MjjyQwCU?)m~h-v`W!GxXerX59JQ8#q5#2c1rl2I@H5nU}nP@%rhb6 zMM1hIylF6H&6tY&-P^8aWVb>=CPnt5A)^)PE1Gw15q4gImo>@u6?J)%{&|*z$CN->Y|G8R!h~>_iImeLFHuj>E=$>htU?8*|3oFi7 zwiFz|EF?wJEmTz>NOSCbHpXI9f>uMga=@#*9sv84q?sfLNh=O}uLZCoXtX`)ngo?o zA|a}o#a(ypnJhx_4;x=IC|hMi=K!)`dJ*QySa~u;5;=%i_scD6X%q({&l)33w$lfJ zK)w->XQ}7I`rk}F!9(`QL3X8G`s0tA>lwRWL0NZ|WS;__d6JMKx#gn^v9z5XEe{=B zx-`A>{=2N?fA2L3(cefWK6z0@TtA+Lg6q#Q+xn=#7IR0GDAY%q10T>=?zyRV@2TRj z&gAcDd!S^@vvDmd)T-A0gTdOb_P(B+Nopt$znNp|2NvbPNk~5aV2FC2iWD|o+lI81N!q=f9A!$YaW8%{Rt88* zS@x+Xfmsrt^*ncPlhTV&&(n~?3KgQM3mV3J&&>>WFN&%6<^|B|88fx^o?C*P_w(1mjO{Gs8k^GhJaq!E@nC98_$`hG^Y9veOKW?H+w)u&m^I9!MF0CpsjQH z(VWS`#p= z+AAH$>O#%#?GXjGe9cY7js(fD0(#F7ci+u*=ynHAVEnkEyN@>QaN%uyyZ3M|*f7a# z1ziq!;K2zr@Degwxfvw+qA zBt#iEVWjLAEt_6~Jx|YQzd$@Oyz%Xo*80-ygJ6b^iyBuSJri^yfaH^4a#9q&*QJ;8 zMf*%03g@D}y~9h>%#N{oo%X9T52ngwXui2vc>atUS010U^c8-;GA8! zsfh&MKt&R6Wk9s>3|1;ypQHOd-Fy-P+NXip`rvug)}eip+~utz;~3sJt*b9Z7Yi!C zK5qLXC>HKPY-2y3c1}~zc#=gJ;e74o>Y}98t+u7Iv0%nPGs`o<8PG+fSe-(HA1v~# zL`aV=r@dOtGsA2}99;8O0wrEr8i<@Ih<$hL5(;*mE9RrnUJPOW<@D5-LZ+5_dYD?0 zAc@?oPD~zJBt1POaaP6nevtJW!RW&Uo0l|^gM~~~;pt{bUgvyxZ#q9-8pg%_ovX?q zg?#n$?GFPt_fxlM$-ZrxC7*%fB4A3MOs+0c@Tj9R+}Tl(UNZX)QO>})`&aF)r}sNi zKR3j7ZHsXOzs;M>R4rSFwNP>BeSv#Z^7Dt~-yM3sDl5MjgJ&OuIBboVWUi>C}DJO0_xHm8YaO_JAXk zO(simWlk9CD$Cw3J0G*zZ{BHz=F!^gV$&Th^^DKsrcJM7_O60$;K376>LRMK4yni( zhd(UHL{ndf?>ReDt^5=5?NMY*mB6H(7RRD@TcINJ@{u+o%fPK)x;{?;rm(P?MU^=Q z795o9FuTXxxls_WFlxW?)N-=UVqMtY@m)6PG?QY!aJu-38rMR znRWuXvL@ExlE&%>?Mm})_X#v=HekZlF2GZ>fB4tNZwDBGCPEVm5H|BsjFS}o=c$YptuN7mIAbAgdHP|Ll;_l75w#%{NDIabY<8Ja9b|(l=jKK$gK0mA z>J+(>x3|WykWf9cLxTH{oN8nuBm?EG#1ol%Y=&-K7d?sLphH|i$~pA^e^|EMBAq|V zUxXgGGVRL2{H0niYE-qeVe}j)5B?{T!klJKFi(I(hh~lHZ~2U)oc|4hC6fW-1u!Rw z!G9o)=Gl*@`Zg^u{AJh2!$Fk8e!u#c`MIWdpIomP61|iKgm<`Hg|#}4zH{dn;s+iL zk_iIOMc_qLQzkxRRubaQm~otCmJm{WUqLqqNv5De-T?7iJOM;JL|B-I()BQr^?#d!3eqRjclE!UkzqG+{11b>b=CTWN^bY2m+39p60@!|#Dc`J$t z;wV2p6pr@Tn+FCMP{Bt3Fw6-b1IwZYWzh^}k;MR#*0-P(v2mFx7^OTA+l*zxGW(r~ zjaoAySWxI(&r3|atbt(mA6e2yv|E|KG6Yc#7*5clBcqCGYElIb2KP_yRE3@sV%*Fz zn+4I7K9>S+^J>fR_dFp`jjVPLmRgluZ3vqD9Du#EjoEJ1EZF*$$ zc2W3v-TbeP_j15%<5hszw-N)HT?dw(#OA$it`wgEwV?nTf%eEt{D&F_g1a=~c`eK; zCsTVxmpqjwIzZ*?(=3kC?nheZ3n3tU6%gK8V|=9HPf2E^m$XlH>ifyr}~Es@(=D} wYVA0$*hx>nGo8)M))iL2d=- Date: Sun, 15 Sep 2019 08:59:50 +0100 Subject: [PATCH 07/19] updated eslint rules --- .eslintrc.json | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index d1db065..6e05843 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,11 +12,10 @@ }, "rules": { "arrow-body-style": 2, - "arrow-parens": ["error", "as-needed"], "arrow-spacing": ["warn", {"before": true, "after": true}], "brace-style": 2, "camelcase": [2, {"properties": "never"}], - "complexity": ["warn", 4], + "complexity": ["error", 5], "eol-last": "warn", "eqeqeq": "error", "func-call-spacing": ["error", "never"], @@ -25,13 +24,13 @@ "indent": [1, "tab", {"SwitchCase": 1}], "key-spacing": ["error", {"beforeColon": false, "afterColon": true}], "linebreak-style": ["warn", "unix"], - "max-depth": ["warn", 3], + "max-depth": ["error", 3], "max-len": ["warn", { "code": 120, "tabWidth": 4 }], - "max-lines": ["warn", 100], - "max-lines-per-function": ["warn", 15], - "max-nested-callbacks": ["warn", 4], - "max-params": ["warn", 5], - "max-statements": ["warn", 10], + "max-lines": ["error", 100], + "max-lines-per-function": ["error", 20], + "max-nested-callbacks": ["error", 4], + "max-params": ["error", 5], + "max-statements": ["error", 20], "no-cond-assign": 2, "no-dupe-args": "error", "no-dupe-keys": "error", @@ -54,10 +53,9 @@ "no-var": 2, "prefer-arrow-callback": 1, "prefer-const": 2, - "prefer-template": "error", "quotes": [1, "single"], "semi": [1, "never"], - "space-before-blocks": ["error", { "functions": "always", "keywords": "always", "classes": "never" }], + "space-before-blocks": ["error", { "functions": "always", "keywords": "always", "classes": "always" }], "space-before-function-paren": [2, "never"], "strict": [2, "global"], "yoda": 2 @@ -72,4 +70,4 @@ "no-magic-numbers": "off" } }] -} +} \ No newline at end of file From da2534aa7775c7a9753c2aa29004a2581b6da018 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 12:47:00 +0100 Subject: [PATCH 08/19] added links to templates --- views/index.handlebars | 1 + views/login.handlebars | 1 + 2 files changed, 2 insertions(+) diff --git a/views/index.handlebars b/views/index.handlebars index f0b7767..5d9be04 100644 --- a/views/index.handlebars +++ b/views/index.handlebars @@ -12,4 +12,5 @@

Home

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

+

log out

diff --git a/views/login.handlebars b/views/login.handlebars index d83f8b4..e42e65b 100644 --- a/views/login.handlebars +++ b/views/login.handlebars @@ -19,5 +19,6 @@

Password:

+

register

From ffec639a151d715e5456fc547c7c9a7edc82ba4b Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 12:47:18 +0100 Subject: [PATCH 09/19] excluded coverage report from commits --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a878871..c9f9586 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store node_modules/ +coverage/ *.db screenshots/* From cada04518fcc1971a9a090c99f3db610b1db8583 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 12:47:41 +0100 Subject: [PATCH 10/19] cleaned up package lists --- package-lock.json | 4565 ++------------------------------------------- package.json | 10 +- 2 files changed, 207 insertions(+), 4368 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1cafed..a96a9b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -151,15 +151,6 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, - "@babel/polyfill": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", - "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", - "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" - } - }, "@babel/template": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", @@ -234,17 +225,51 @@ } } }, - "@heroku-cli/color": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@heroku-cli/color/-/color-1.1.14.tgz", - "integrity": "sha512-2JYy//YE2YINTe21hpdVMBNc7aYFkgDeY9JUz/BCjFZmYLn0UjGaCc4BpTcMGXNJwuqoUenw2WGOFGHsJqlIDw==", + "@jest/console": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.3.0.tgz", + "integrity": "sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "strip-ansi": "^5.0.0", - "supports-color": "^5.5.0", - "tslib": "^1.9.3" + "@jest/source-map": "^24.3.0", + "@types/node": "*", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.5.0.tgz", + "integrity": "sha512-RDZArRzAs51YS7dXG1pbXbWGxK53rvUu8mCDYsgqqqQ6uSOaTjcVyBl2Jce0exT2rSLk38ca7az7t2f3b0/oYQ==", + "dev": true, + "requires": { + "@jest/console": "^24.3.0", + "@jest/reporters": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.5.0", + "jest-config": "^24.5.0", + "jest-haste-map": "^24.5.0", + "jest-message-util": "^24.5.0", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.5.0", + "jest-runner": "^24.5.0", + "jest-runtime": "^24.5.0", + "jest-snapshot": "^24.5.0", + "jest-util": "^24.5.0", + "jest-validate": "^24.5.0", + "jest-watcher": "^24.5.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { @@ -254,9 +279,9 @@ "dev": true }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -264,962 +289,93 @@ } } }, - "@heroku-cli/command": { - "version": "8.2.12", - "resolved": "https://registry.npmjs.org/@heroku-cli/command/-/command-8.2.12.tgz", - "integrity": "sha512-EpBwa7Hb4egCZDRerwLNJQeYFAPVwOT+5z6oiyXwn+A+QwsfkUyN+c2+yEyHGduXcPN0722Hi8FNIVLC5KEQnw==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@oclif/errors": "^1.2.2", - "cli-ux": "^4.9.3", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "heroku-client": "^3.0.7", - "http-call": "^5.2.4", - "netrc-parser": "^3.1.6", - "open": "^6.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "http-call": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.2.4.tgz", - "integrity": "sha512-VqnjJPcscbnPzuE9qpFj6a6KibDRQHfz4daszFH5s0FBg6+xncSiTNzvIAgz7mc2rzKC4Ncz4iQ4T4brWoccEw==", - "dev": true, - "requires": { - "content-type": "^1.0.4", - "debug": "^4.1.1", - "is-retry-allowed": "^1.1.0", - "is-stream": "^2.0.0", - "parse-json": "^4.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@heroku-cli/notifications": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@heroku-cli/notifications/-/notifications-1.2.2.tgz", - "integrity": "sha512-bW2R/I2TpxECPMU8bqiY9rTDHZHjRmKNPWCmXZGCg1ko3NehYfF26i2KBZ8OW3pSwcUi/cWSGhytpLPonHfQ+g==", - "dev": true, - "requires": { - "node-notifier": "^5.2.1" - } - }, - "@heroku-cli/plugin-addons": { - "version": "1.2.31", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-addons/-/plugin-addons-1.2.31.tgz", - "integrity": "sha1-Ytl57s/3LyYWd+x4nzfgTWFQNac=", - "dev": true, - "requires": { - "co": "4.6.0", - "co-wait": "0.0.0", - "heroku-cli-util": "^8.0.9", - "lodash": "^4.17.10", - "printf": "0.3.0" - }, - "dependencies": { - "printf": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/printf/-/printf-0.3.0.tgz", - "integrity": "sha512-DlJSroT2n9nkh47D4T6BHFQvsMR0L41889ECLmdbzk2BlhN0t31/vl5mHvlWiNBCNQrqG9XfpXwqmJQ2utoYwg==", - "dev": true - } - } - }, - "@heroku-cli/plugin-addons-v5": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-addons-v5/-/plugin-addons-v5-7.24.0.tgz", - "integrity": "sha512-FaPWRTiGKfBgKyIZKwOfmeDSp494rpTlmYaIpOmhWlfN8Gfy7G8pPCEnXue9Cr1B9uPeKofsEfE+yfymJ1gBhA==", - "dev": true, - "requires": { - "co": "4.6.0", - "co-wait": "0.0.0", - "heroku-cli-util": "^8.0.11", - "lodash": "^4.17.11", - "printf": "0.5.1" - } - }, - "@heroku-cli/plugin-apps-v5": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-apps-v5/-/plugin-apps-v5-7.26.0.tgz", - "integrity": "sha512-dnewwi5W7GTJ4I4cKw2aKj/bBvCt/DRaMHX11RWeWU0MwWwnVo4Fap/doZUAwjmEwJUnHHx0aAXedJKTdnuQ7w==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.10", - "co": "^4.6.0", - "filesize": "^4.0.0", - "fs-extra": "^7.0.1", - "heroku-cli-util": "^8.0.11", - "inquirer": "^6.2.2", - "js-yaml": "^3.12.1", - "lodash": "^4.17.11", - "shell-escape": "^0.2.0", - "sparkline": "^0.2.0", - "strftime": "^0.10.0", - "term-img": "^2.1.0", - "urijs": "1.19.1" - } - }, - "@heroku-cli/plugin-auth": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-auth/-/plugin-auth-7.24.0.tgz", - "integrity": "sha512-8vd5rPZ0A2UvGgRJR6BWaFlF0/Xs+MSDsP5AuMShC35c1YZhQ0i+nOxmxDTJZv8yU61wrmGTnrGaybbSYKQ3ww==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.11", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "cli-ux": "^4.9.3", - "date-fns": "^2.0.0-alpha.8" - } - }, - "@heroku-cli/plugin-autocomplete": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-autocomplete/-/plugin-autocomplete-7.24.0.tgz", - "integrity": "sha512-NKETL/qc5sknpnHYWwo5jl07Zn2KC1onmdQnKEgSmbY0a1Xz7Ibb0DGv4PPXV0GM/MCHIMiotJRqf0/wDjt0Sg==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "1.5.11", - "@oclif/config": "1.12.10", - "chalk": "^2.4.2", - "cli-ux": "^4.9.3", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash.flatten": "^4.4.0", - "tslib": "1.9.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@heroku-cli/plugin-buildpacks": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-buildpacks/-/plugin-buildpacks-7.24.0.tgz", - "integrity": "sha512-WiBcQELvWlr9ww4dWjkXZ8cU5NYB6JsuTjTVPX1Ddtq9VWTlwuURkPqRHuRGc5311EQJi2dAjrRsItoDpvmtCA==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@heroku/buildpack-registry": "^1.0.1", - "@oclif/config": "^1.12.10", - "@oclif/plugin-legacy": "^1.1.4", - "cli-ux": "^4.9.3", - "heroku-cli-util": "^8.0.11", - "http-call": "^5.2.3", - "lodash": "^4.17.11", - "true-myth": "2.2.3", - "valid-url": "^1.0.9" - } - }, - "@heroku-cli/plugin-certs": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-certs/-/plugin-certs-7.24.0.tgz", - "integrity": "sha512-5yN6fSF6/9+0KNk/UKA2LdllsBw5HLIBtu8VMoewDRUtuZC3ZTqwyajV8CqJ+dGzRBTJiuFylz2fdHsqCaVFVA==", + "@jest/environment": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.5.0.tgz", + "integrity": "sha512-tzUHR9SHjMXwM8QmfHb/EJNbF0fjbH4ieefJBvtwO8YErLTrecc1ROj0uo2VnIT6SlpEGZnvdCK6VgKYBo8LsA==", "dev": true, "requires": { - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "tslib": "^1.9.3" + "@jest/fake-timers": "^24.5.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "@types/node": "*", + "jest-mock": "^24.5.0" } }, - "@heroku-cli/plugin-certs-v5": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-certs-v5/-/plugin-certs-v5-7.24.0.tgz", - "integrity": "sha512-XJA5r2tqPDJ3P52Ig5FTwd7EPNlPY15fAuCeJjFq4fioTPA4vmadkrsuQaCyZ0mPAUWgbvnDyHrQlLrmWOL0Dg==", + "@jest/fake-timers": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.5.0.tgz", + "integrity": "sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw==", "dev": true, "requires": { - "co": "4.6.0", - "co-wait": "0.0.0", - "date-fns": "^1.29.0", - "heroku-cli-util": "^8.0.11", - "inquirer": "^6.2.2", - "lodash": "4.17.11", - "psl": "^1.1.29" - }, - "dependencies": { - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - } + "@jest/types": "^24.5.0", + "@types/node": "*", + "jest-message-util": "^24.5.0", + "jest-mock": "^24.5.0" } }, - "@heroku-cli/plugin-ci": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-ci/-/plugin-ci-7.24.3.tgz", - "integrity": "sha512-dqJy0G4ARb8cXX8bd2COofnqg05USuWSfTiSPncZNYVn7pGmItU3Q21gsEE1eRR3awCj2lDfIE2519xTw7JuWw==", + "@jest/reporters": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.5.0.tgz", + "integrity": "sha512-vfpceiaKtGgnuC3ss5czWOihKOUSyjJA4M4udm6nH8xgqsuQYcyDCi4nMMcBKsHXWgz9/V5G7iisnZGfOh1w6Q==", "dev": true, "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "ansi-escapes": "3.2.0", - "async-file": "^2.0.2", - "cli-ux": "^4.9.3", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "github-url-to-object": "^4.0.4", - "got": "^9.6.0", - "inquirer": "^6.2.2", - "phoenix": "^1.4.3", - "tmp": "^0.0.33", - "tslib": "^1.9.3", - "validator": "^10.11.0", - "ws": "^6.2.1" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "cacheable-request": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.0.0.tgz", - "integrity": "sha512-2N7AmszH/WPPpl5Z3XMw1HAP+8d+xugnKQAeKvxFZ/04dbT/CAznqwbl+7eSr3HkwdepNwtb2yx3CAMQWvG01Q==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^4.0.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^1.0.1", - "normalize-url": "^3.1.0", - "responselike": "^1.0.2" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-OO/9K7uFN30qwAKvslzmCTbimZ/uRjtdN5S50vvWLwUKqFuZj0n96XyCzF5tHRHEO/Q4JYC01hv41gkX06gmHA==", - "dev": true - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nock": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-9.6.1.tgz", - "integrity": "sha512-EDgl/WgNQ0C1BZZlASOQkQdE6tAWXJi8QQlugqzN64JJkvZ7ILijZuG24r4vCC7yOfnm6HKpne5AGExLGCeBWg==", - "requires": { - "debug": "^3.1.0", - "deep-equal": "^1.0.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.5", - "mkdirp": "^0.5.0", - "qs": "^6.5.1", - "semver": "^5.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "p-cancelable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.0.0.tgz", - "integrity": "sha512-USgPoaC6tkTGlS831CxsVdmZmyb8tR1D+hStI84MyckLOzfJlYQUweomrwE3D8T7u5u5GVuW064LT501wHTYYA==", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } + "@jest/environment": "^24.5.0", + "@jest/test-result": "^24.5.0", + "@jest/transform": "^24.5.0", + "@jest/types": "^24.5.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-api": "^2.1.1", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-source-maps": "^3.0.1", + "jest-haste-map": "^24.5.0", + "jest-resolve": "^24.5.0", + "jest-runtime": "^24.5.0", + "jest-util": "^24.5.0", + "jest-worker": "^24.4.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" } }, - "@heroku-cli/plugin-ci-v5": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-ci-v5/-/plugin-ci-v5-7.24.0.tgz", - "integrity": "sha512-HTBFmk1LFa2ANUhaeIVSqM2/Vqul1F92jDMYFLEKuZnyRne+SaOWkay29HxN9RH16Tg4CUN1+V76TUwn8y8HSA==", + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", "dev": true, "requires": { - "@heroku-cli/command": "^8.2.10", - "@heroku-cli/plugin-pipelines": "^2.5.8", - "@heroku-cli/plugin-run-v5": "^7.24.0", - "ansi-escapes": "3.2.0", - "bluebird": "^3.5.3", - "co": "^4.6.0", - "co-wait": "0.0.0", - "github-url-to-object": "^4.0.4", - "got": "^8.3.2", - "heroku-cli-util": "^8.0.11", - "lodash.flatten": "^4.4.0", - "shell-escape": "^0.2.0", - "temp": "^0.8.3" - } - }, - "@heroku-cli/plugin-config": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-config/-/plugin-config-7.24.0.tgz", - "integrity": "sha512-Cibta/5zLIlr0IYsQdRRjDw6U5QibCREMj26A2o/SZdFhGC/vxPhMxXiiR44t8T0MCBCBSWMTmPT6qssS+2riA==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "cli-ux": "^4.9.3", - "edit-string": "^1.1.6", - "lodash": "^4.17.11", - "shell-quote": "^1.6.1" + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" } }, - "@heroku-cli/plugin-container-registry-v5": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-container-registry-v5/-/plugin-container-registry-v5-7.24.4.tgz", - "integrity": "sha512-YqT+OxmO7UT1pNXyKhbltDUbF6foXwMvG0Uj4pkSdp2wLLB9ogvYi2B9PXp/jh0YPfI8Sktm6sTqf9r/af8ZTA==", + "@jest/test-result": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.5.0.tgz", + "integrity": "sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A==", "dev": true, "requires": { - "glob": "^7.1.3", - "heroku-cli-util": "^8.0.11", - "http-call": "^5.2.3", - "inquirer": "^6.2.2" + "@jest/console": "^24.3.0", + "@jest/types": "^24.5.0", + "@types/istanbul-lib-coverage": "^1.1.0" } }, - "@heroku-cli/plugin-git": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-git/-/plugin-git-7.24.0.tgz", - "integrity": "sha512-ksXNm0qMZIecSlt6ekxwMZw3LEP/rC2FlowjATn/n7EafBD/o3ZLexNwsAK1DHSI/WNTYwz+frmqXfqDzsw97w==", + "@jest/transform": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.5.0.tgz", + "integrity": "sha512-XSsDz1gdR/QMmB8UCKlweAReQsZrD/DK7FuDlNo/pE8EcKMrfi2kqLRk8h8Gy/PDzgqJj64jNEzOce9pR8oj1w==", "dev": true, "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "cli-ux": "^4.9.3", - "debug": "4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@heroku-cli/plugin-local": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-local/-/plugin-local-7.26.2.tgz", - "integrity": "sha512-y9oUkghwgu1KAfTQydfU4sUR6nJppGOKlCSFk04kLbM5FADsHq7jpbaUX58ZMP30Cjwx/t0MBGijd+k9GH7gww==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.11", - "@oclif/command": "^1", - "@oclif/config": "^1", - "foreman": "^3.0.1", - "tslib": "^1" - } - }, - "@heroku-cli/plugin-oauth-v5": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-oauth-v5/-/plugin-oauth-v5-7.24.0.tgz", - "integrity": "sha512-FUYno8+DA+xCgY/hV4hDMJRU3xH6A6Mo+fUB1ubOpV4yBCWGoT5hY+QZxPZBTYztpMf51156eWj381Ge/KhI4A==", - "dev": true, - "requires": { - "co": "^4.6.0", - "date-fns": "^1.29.0", - "heroku-cli-util": "^8.0.11", - "lodash": "^4.17.11" - }, - "dependencies": { - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - } - } - }, - "@heroku-cli/plugin-orgs-v5": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-orgs-v5/-/plugin-orgs-v5-7.26.0.tgz", - "integrity": "sha512-H7NA6Gea/cs71+lPgsJ6ZXcxwwVhcF6PB8pgjgWatpy05wMVSYg1zZ/idLM0A5gg3LgmZ+DcWJNz4UVkROCcqA==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.10", - "co": "^4.6.0", - "heroku-cli-util": "^8.0.11", - "inquirer": "^6.2.2", - "lodash": "^4.17.11", - "lodash.flatten": "^4.4.0" - } - }, - "@heroku-cli/plugin-pg-v5": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-pg-v5/-/plugin-pg-v5-7.25.0.tgz", - "integrity": "sha512-sAiNmDOk3btqWxZcCS81hNkbfaSa5WZsUFBrO8cyivRd5fwkZsQyqU8HmDts0ocsV1QuW3M1WSt4NAmQqFtiRQ==", - "dev": true, - "requires": { - "@heroku-cli/plugin-addons": "^1.2.29", - "bytes": "^3.1.0", - "co": "^4.6.0", - "co-wait": "^0.0.0", - "debug": "^4.1.1", - "filesize": "^4.0.0", - "heroku-cli-util": "^8.0.11", - "lodash": "^4.17.11", - "mkdirp": "^0.5.1", - "node-notifier": "^5.4.0", - "smooth-progress": "^1.1.0", - "strip-eof": "^1.0.0", - "tunnel-ssh": "^4.1.4" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@heroku-cli/plugin-pipelines": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-pipelines/-/plugin-pipelines-2.5.10.tgz", - "integrity": "sha1-uho62rTUA5Mmppl1fOAtXiuomjw=", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.1.17", - "bluebird": "^3.5.1", - "co": "^4.6.0", - "heroku-cli-util": "^8.0.9", - "http-call": "^5.1.2", - "inflection": "^1.12.0", - "inquirer": "^5.2.0", - "lodash.flatten": "^4.4.0", - "lodash.sortby": "^4.7.0", - "string-just": "^0.0.2", - "validator": "^10.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "@heroku-cli/plugin-pipelines-v5": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-pipelines-v5/-/plugin-pipelines-v5-7.26.0.tgz", - "integrity": "sha512-nPK1h7uenw4U49Pdn05I/T/XDTF1a0tgdGOKU2AoQ+2W80kzQe747XauBUkd+fZWqNmKKjGFuKWxTxvTvxLgzg==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.10", - "bluebird": "^3.5.3", - "co": "^4.6.0", - "heroku-cli-util": "^8.0.11", - "http-call": "^5.2.3", - "inflection": "^1.12.0", - "inquirer": "^6.2.2", - "lodash.flatten": "^4.4.0", - "lodash.sortby": "^4.7.0", - "string-just": "^0.0.2", - "validator": "^10.11.0" - } - }, - "@heroku-cli/plugin-ps": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-ps/-/plugin-ps-7.24.0.tgz", - "integrity": "sha512-rtZE8Hh9pIgFrPWW9BfIo3z3ZjHr4YmeVvfBpWr9uzOUL/W3oWBNSD/707zj2P4Fggckbpc+MQVpc4xs06DgNA==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "cli-ux": "^4.9.3", - "lodash": "^4.17.11" - } - }, - "@heroku-cli/plugin-ps-exec": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-ps-exec/-/plugin-ps-exec-2.3.5.tgz", - "integrity": "sha512-DuzhKXlG/XO5l8xvUWs626sRk68bAM0Nu/nN35TW1t0cdgPFF8iXBcqji1sJllMiF3nEqMyXmQO68Tb9HVnddQ==", - "dev": true, - "requires": { - "heroku-cli-util": "^8.0.8", - "heroku-exec-util": "0.7.3" - } - }, - "@heroku-cli/plugin-redis-v5": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-redis-v5/-/plugin-redis-v5-7.25.0.tgz", - "integrity": "sha512-+/1wHfBCTn5wSRvjcZpSu6STO3NdkHwitnvjSr01ik/fnszGwYGbKubXJMbdlW2Ejm1GIZP3okkak9LLlB8jlg==", - "dev": true, - "requires": { - "heroku-cli-util": "^8.0.11", - "redis-parser": "^3.0.0", - "ssh2": "^0.6.1" - }, - "dependencies": { - "ssh2": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.6.2.tgz", - "integrity": "sha512-DJ+dOhXEEsmNpcQTI0x69FS++JH6qqL/ltEHf01pI1SSLMAcmD+hL4jRwvHjPwynPsmSUbHJ/WIZYzROfqZWjA==", - "dev": true, - "requires": { - "ssh2-streams": "~0.2.0" - } - }, - "ssh2-streams": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.2.1.tgz", - "integrity": "sha512-3zCOsmunh1JWgPshfhKmBCL3lUtHPoh+a/cyQ49Ft0Q0aF7xgN06b76L+oKtFi0fgO57FLjFztb1GlJcEZ4a3Q==", - "dev": true, - "requires": { - "asn1": "~0.2.0", - "semver": "^5.1.0", - "streamsearch": "~0.1.2" - } - } - } - }, - "@heroku-cli/plugin-run-v5": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-run-v5/-/plugin-run-v5-7.24.0.tgz", - "integrity": "sha512-BqwSPaRl17mQiYM3TN9rzq1GMGaVTPuIQceArA++Q6SqofCo5pSMHgejEtOX5FXsCJMb2qYpkdvijhCEM/+z/A==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@heroku-cli/notifications": "^1.2.2", - "@heroku/eventsource": "^1.0.7", - "co": "4.6.0", - "fs-extra": "^7.0.1", - "heroku-cli-util": "^8.0.11", - "shellwords": "^0.1.1" - } - }, - "@heroku-cli/plugin-spaces": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-spaces/-/plugin-spaces-7.26.0.tgz", - "integrity": "sha512-mh/G9Ji8IXhCjYCwuKg0xN9TrAWNwP+9/KFJ8EUE3abDY9lZjpqumuRvC5HgkPrzA9KErdhP8RHr5r2Zr5Bl7g==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.10", - "@heroku-cli/notifications": "^1.2.2", - "co": "4.6.0", - "heroku-cli-util": "^8.0.11", - "lodash": "^4.17.11", - "strftime": "^0.10.0" - } - }, - "@heroku-cli/plugin-status": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-status/-/plugin-status-7.24.0.tgz", - "integrity": "sha512-OgfBgwAABeHb0rSjj4a1YCGoPZ4sN3u6k6Rr1aEZL7li3AOazUc7odeDZSVTCK555Kh9Ev5l1h2KA1L/82vobQ==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.14", - "@heroku-cli/command": "^8.2.10", - "@oclif/command": "^1.5.11", - "@oclif/config": "^1.12.10", - "@oclif/errors": "^1.2.2", - "cli-ux": "^4.9.3", - "date-fns": "^1.29.0", - "http-call": "^5.2.3" - }, - "dependencies": { - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - } - } - }, - "@heroku-cli/plugin-webhooks-v5": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@heroku-cli/plugin-webhooks-v5/-/plugin-webhooks-v5-7.24.0.tgz", - "integrity": "sha512-TR7T7MXLDoWCP+b2+Bd7BUz7GG4ICZBHRjATDl0GtrrsROCgr/lnLdfhNRKuFYWgYVuBrXTyDHD9k5vzXUNQaw==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.10", - "heroku-cli-util": "^8.0.11" - } - }, - "@heroku/buildpack-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@heroku/buildpack-registry/-/buildpack-registry-1.0.1.tgz", - "integrity": "sha512-cbB6ND+unRk692jf1PctcoqnmuyifanTMtFStucXukkpyeI/QgXac5qJNb3g6yhHOObTghJBXi9Uzy1KBcnPgQ==", - "dev": true, - "requires": { - "node-fetch": "^2.2.0", - "true-myth": "^2.0.0" - } - }, - "@heroku/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@heroku/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-zepmPMu8A6S2SyhhzUFVJLhLfqOAGXYR8brf+dRhP41yK9fFinoTT5DO4bo8/EGCJFptPAqfKDavLHsedvynzQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "@heroku/socksv5": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@heroku/socksv5/-/socksv5-0.0.9.tgz", - "integrity": "sha1-ejkFkhE2smZpeaD4a7TwYvZX95M=", - "dev": true, - "requires": { - "ip-address": "^5.8.8" - } - }, - "@jest/console": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.3.0.tgz", - "integrity": "sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA==", - "dev": true, - "requires": { - "@jest/source-map": "^24.3.0", - "@types/node": "*", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.5.0.tgz", - "integrity": "sha512-RDZArRzAs51YS7dXG1pbXbWGxK53rvUu8mCDYsgqqqQ6uSOaTjcVyBl2Jce0exT2rSLk38ca7az7t2f3b0/oYQ==", - "dev": true, - "requires": { - "@jest/console": "^24.3.0", - "@jest/reporters": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/transform": "^24.5.0", + "@babel/core": "^7.1.0", "@jest/types": "^24.5.0", - "ansi-escapes": "^3.0.0", + "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.5.0", - "jest-config": "^24.5.0", - "jest-haste-map": "^24.5.0", - "jest-message-util": "^24.5.0", - "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.5.0", - "jest-runner": "^24.5.0", - "jest-runtime": "^24.5.0", - "jest-snapshot": "^24.5.0", - "jest-util": "^24.5.0", - "jest-validate": "^24.5.0", - "jest-watcher": "^24.5.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "@jest/environment": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.5.0.tgz", - "integrity": "sha512-tzUHR9SHjMXwM8QmfHb/EJNbF0fjbH4ieefJBvtwO8YErLTrecc1ROj0uo2VnIT6SlpEGZnvdCK6VgKYBo8LsA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.5.0", - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", - "@types/node": "*", - "jest-mock": "^24.5.0" - } - }, - "@jest/fake-timers": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.5.0.tgz", - "integrity": "sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw==", - "dev": true, - "requires": { - "@jest/types": "^24.5.0", - "@types/node": "*", - "jest-message-util": "^24.5.0", - "jest-mock": "^24.5.0" - } - }, - "@jest/reporters": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.5.0.tgz", - "integrity": "sha512-vfpceiaKtGgnuC3ss5czWOihKOUSyjJA4M4udm6nH8xgqsuQYcyDCi4nMMcBKsHXWgz9/V5G7iisnZGfOh1w6Q==", - "dev": true, - "requires": { - "@jest/environment": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-api": "^2.1.1", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-source-maps": "^3.0.1", - "jest-haste-map": "^24.5.0", - "jest-resolve": "^24.5.0", - "jest-runtime": "^24.5.0", - "jest-util": "^24.5.0", - "jest-worker": "^24.4.0", - "node-notifier": "^5.2.1", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - } - }, - "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.5.0.tgz", - "integrity": "sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A==", - "dev": true, - "requires": { - "@jest/console": "^24.3.0", - "@jest/types": "^24.5.0", - "@types/istanbul-lib-coverage": "^1.1.0" - } - }, - "@jest/transform": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.5.0.tgz", - "integrity": "sha512-XSsDz1gdR/QMmB8UCKlweAReQsZrD/DK7FuDlNo/pE8EcKMrfi2kqLRk8h8Gy/PDzgqJj64jNEzOce9pR8oj1w==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.5.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", "jest-haste-map": "^24.5.0", "jest-regex-util": "^24.3.0", @@ -1227,857 +383,18 @@ "micromatch": "^3.1.10", "realpath-native": "^1.1.0", "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - } - }, - "@jest/types": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.5.0.tgz", - "integrity": "sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^1.1.0", - "@types/yargs": "^12.0.9" - } - }, - "@jimp/bmp": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.0.tgz", - "integrity": "sha512-zZOcVT1zK/1QL5a7qirkzPPgDKB1ianER7pBdpR2J71vx/g8MnrPbL3h/jEVPxjdci2Hph/VWhc/oLBtTbqO8w==", - "requires": { - "@jimp/utils": "^0.6.0", - "bmp-js": "^0.1.0", - "core-js": "^2.5.7" - } - }, - "@jimp/core": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.0.tgz", - "integrity": "sha512-ngAkyCLtX7buc2QyFy0ql/j4R2wGYQVsVhW2G3Y0GVAAklRIFIUYpyNKrqs228xA8f2O6XStbDStFlYkt7uNeg==", - "requires": { - "@jimp/utils": "^0.6.0", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "core-js": "^2.5.7", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.0.tgz", - "integrity": "sha512-+YZIWhf03Rfbi+VPbHomKInu3tcntF/aij/JrIJd1QZq13f8m3mRNxakXupiL18KH0C8BPNDk8RiwFX+HaOw3A==", - "requires": { - "@jimp/core": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/gif": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.0.tgz", - "integrity": "sha512-aWQ02P0ymTN1eh0BVsY+84wMdb/QeiVpCNQZl9y50cRnpuMM8TTmF/ZdCEBDiTRFcwXzHsqBXcLwEcYp3X2lTw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.0.tgz", - "integrity": "sha512-quYb+lM4h57jQvr2q9dEIkc0laTljws4dunIdFhJRfa5UlNL5mHInk8h5MxyALo0mZdT07TAcxiDHw5QXZ28JQ==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7", - "jpeg-js": "^0.3.4" - } - }, - "@jimp/plugin-blit": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.0.tgz", - "integrity": "sha512-LjiCa+8OT2fgmvBpZt0ogurg/eu5kB8ZFWDRwHPcf8i+058sZC20dar/qrjVd5Knssq4ynjb5oAHsGuJq16Rqw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-blur": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.0.tgz", - "integrity": "sha512-/vjGcEiHda6OLTCYqXPFkfSTbL+RatZoGcp1vewcWqChUccn9QVINTlxB7nEI/3Nb/i7KdhOPNEQh1k6q6QXsw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-color": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.0.tgz", - "integrity": "sha512-mvDeAwN8ZpDkOaABMJ0w9zUzo9OOtu1qvvPkSirXDTMiXt1nsbfz8BoeoD7nU2MFhQj5MiGjH65UDnsH5ZzYuw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.0.tgz", - "integrity": "sha512-gPHnoQkDztMbvnTVo01BaMoM/hhDJdeJ7FRToD4p4Qvdor4V0I6NXtjOeUPXfD94miTgh/UTyJDqeG4GZzi4sA==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-cover": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.0.tgz", - "integrity": "sha512-iv9lA2v3qv+x3eaTThtyzFg+hO8/pSnM8NBymC5OlpSJnR54aWi7BVFXLJAF27T4EZyXko432PVul2IdY3BEPw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-crop": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.0.tgz", - "integrity": "sha512-YftdmFZ2YnZDYyBulkStCt2MZbKKfbjytkE+6i3Djk2b/Rfryg5xjgzVnAumCRQJhVPukexrnc2V7KKbEgx7mQ==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-displace": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.0.tgz", - "integrity": "sha512-kkva5Fy3r7J7QmiqYQ5c9NeUKKkN7+KSfCGsZ6tkRHK4REMIXhQO/OnJN8XG6RReV29O6QykdyeTXDiHUDiROw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-dither": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.0.tgz", - "integrity": "sha512-ILSG7bl3SOqmcIa9C4nBvs0h0E0ObnMbeKWUZiNuz6i0OAlbxryiIfU4j0UVQD5XqT9ksC5mviVNrvOMw4SZLw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-flip": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.0.tgz", - "integrity": "sha512-MXGGwABjERvfqVadEzJuVAmbsEQfjxXD0O/mMBegU1Qh7/JmnKAVplQCnojsMPxUdao/FKZjQqOnB/j4LLJtOQ==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.0.tgz", - "integrity": "sha512-RUsBCyj6Ukxgn/TU8v6c6WRbSFqKM0iknLVqDkKIuiOyJB7ougv66fqomh/i/h3ihIkEnf50BuO0c3ovrczfvw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-invert": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.0.tgz", - "integrity": "sha512-zTCqK8el6eqcNKAxw0y57gHBFgxygI5iM8dQDPyqsvVWO71i8XII7ubnJhEvPPN7vhIKlOSnS9XXglezvJoX4Q==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-mask": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.0.tgz", - "integrity": "sha512-zkZVqAA7lxWhkn5EbPjBQ6tPluYIGfLMSX4kD1gksj+MVJJnVAd459AVuEXCvkUvv4wG5AlH8m6ve5NZj9vvxw==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-normalize": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.0.tgz", - "integrity": "sha512-7bNGT+S0rw9gvmxpkNsA19JSqBZYFrAn9QhEmoN4HIimdKtJaoLJh/GnxrPuOBLuv1IPJntoTOOWvOmfrQ6/ww==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-print": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.0.tgz", - "integrity": "sha512-kXNHYo7bGQiMZkUqhCvm6OomjJtZnLGs7cgXp9qsCfPcDBLLW+X3oxnoLaePQMlpQt6hX/lzFnNaWKv/KB1jlA==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.0.tgz", - "integrity": "sha512-m0AA/mPkJG++RuftBFDUMRenqgIN/uSh88Kqs33VURYaabApni4ML3QslE1TCJtl2Lnu1eosxYlbzODjHx49eg==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-rotate": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.0.tgz", - "integrity": "sha512-1QGlIisyxs2HNLuynq/ETc4h7E6At3yR+IYAhG9U4KONG4RqlIy0giyDhnfEZaiqOE+O7f+0Z7zN6GoSHmQjzg==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-scale": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.0.tgz", - "integrity": "sha512-le/ttYwYioNPRoMlMaoJMCTv+m8d1v0peo/3J8E6Rf9ok7Bw3agkvjL9ILnsmr8jXj1YLrBSPKRs5nJ6ziM/qA==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugins": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.0.tgz", - "integrity": "sha512-9+znfBJM1B31kvw+IcQFnAuDntQhwca/SONFnKOSZ8BNiQdiuTNbXHFxOo3tvdv1ngtB+LkkiTgK+QoF358b8g==", - "requires": { - "@jimp/plugin-blit": "^0.6.0", - "@jimp/plugin-blur": "^0.6.0", - "@jimp/plugin-color": "^0.6.0", - "@jimp/plugin-contain": "^0.6.0", - "@jimp/plugin-cover": "^0.6.0", - "@jimp/plugin-crop": "^0.6.0", - "@jimp/plugin-displace": "^0.6.0", - "@jimp/plugin-dither": "^0.6.0", - "@jimp/plugin-flip": "^0.6.0", - "@jimp/plugin-gaussian": "^0.6.0", - "@jimp/plugin-invert": "^0.6.0", - "@jimp/plugin-mask": "^0.6.0", - "@jimp/plugin-normalize": "^0.6.0", - "@jimp/plugin-print": "^0.6.0", - "@jimp/plugin-resize": "^0.6.0", - "@jimp/plugin-rotate": "^0.6.0", - "@jimp/plugin-scale": "^0.6.0", - "core-js": "^2.5.7", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.0.tgz", - "integrity": "sha512-DBtMyQyrJxuKI7/1dVqLek+rCMM8U6BSOTHgo05wU7lhJKTB6fn2tbYfsnHQKzd9ld1M2qKuC+O1GTVdB2yl6w==", - "requires": { - "@jimp/utils": "^0.6.0", - "core-js": "^2.5.7", - "pngjs": "^3.3.3" - } - }, - "@jimp/tiff": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.0.tgz", - "integrity": "sha512-PV95CquEsolFziq0zZrAEJIzZSKwMK89TvkOXTPDi/xesgdXGC2rtG1IZFpC9L4UX5hi/M5GaeJa49xULX6Nqw==", - "requires": { - "core-js": "^2.5.7", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.0.tgz", - "integrity": "sha512-j4tm82huEWpLrwave/2NYnMTY6us/6K9Js6Vd/CHoM/ki8M71tMXEVzc8tly92wtnEzQ9+FEk0Ue6pYo68m/5A==", - "requires": { - "@jimp/bmp": "^0.6.0", - "@jimp/gif": "^0.6.0", - "@jimp/jpeg": "^0.6.0", - "@jimp/png": "^0.6.0", - "@jimp/tiff": "^0.6.0", - "core-js": "^2.5.7", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.0.tgz", - "integrity": "sha512-z5iYEfqc45vlYweROneNkjv32en6jS7lPL/eMLIvaEcQAHaoza20Dw8fUoJ0Ht9S92kR74xeTunAZq+gK2w67Q==", - "requires": { - "core-js": "^2.5.7" - } - }, - "@oclif/color": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@oclif/color/-/color-0.0.0.tgz", - "integrity": "sha512-KKd3W7eNwfNF061tr663oUNdt8EMnfuyf5Xv55SGWA1a0rjhWqS/32P7OeB7CbXcJUBdfVrPyR//1afaW12AWw==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "supports-color": "^5.4.0", - "tslib": "^1" - } - }, - "@oclif/command": { - "version": "1.5.11", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.5.11.tgz", - "integrity": "sha512-jcdCmaShB7k7Lfr+rGvBeTzcCbprTF690n0dv/cB4PmXESfOx/5P4/scDR75mToht+VxOADI0aXMGQJz3T4uMg==", - "dev": true, - "requires": { - "@oclif/errors": "^1.2.2", - "@oclif/parser": "^3.7.2", - "debug": "^4.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@oclif/config": { - "version": "1.12.10", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.12.10.tgz", - "integrity": "sha512-AQYFA72ktXgmrY4hjRtBQRfKLDKXPG4WGSLUgWn0KencNuqnmbiKS6zfKXf1umfZ26zoDOEfCdqZjm3aNZnIaw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "tslib": "^1.9.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@oclif/errors": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.2.2.tgz", - "integrity": "sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg==", - "dev": true, - "requires": { - "clean-stack": "^1.3.0", - "fs-extra": "^7.0.0", - "indent-string": "^3.2.0", - "strip-ansi": "^5.0.0", - "wrap-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "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" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - } - } - }, - "@oclif/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", - "dev": true - }, - "@oclif/parser": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.3.tgz", - "integrity": "sha512-zN+3oGuv9Lg8NjFvxZTDKFEmhAMfAvd/JWeQp3Ri8pDezoyJQi4OSHHLM8sdHjBh8sePewfWI7+fDUXdrVbrqg==", - "dev": true, - "requires": { - "@oclif/linewrap": "^1.0.0", - "chalk": "^2.4.2", - "tslib": "^1.9.3" - } - }, - "@oclif/plugin-commands": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/plugin-commands/-/plugin-commands-1.2.2.tgz", - "integrity": "sha512-PDJXxtWf7uxqi/zj4IZOniiS0pVm6LeOZSiVS126hRueiV1u8C5Vnw97lWa15YELSPWZH1gC+wTm4XZrLWdURw==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.4", - "@oclif/config": "^1.8.7", - "cli-ux": "^4.9.0", - "lodash": "^4.17.11", - "tslib": "^1.9.3" - } - }, - "@oclif/plugin-help": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.1.6.tgz", - "integrity": "sha512-M4kTERpPWNSM1Mga7K/zo9DWHLCVf2FRaIeXPoytmTPd+0kSvG3TR0Vc1bwx9/cxXoYyYGgEejwNlrfayr8FZw==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.8", - "chalk": "^2.4.1", - "indent-string": "^3.2.0", - "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", - "wrap-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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" - } - }, - "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" - } - } - } - } - } - }, - "@oclif/plugin-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@oclif/plugin-legacy/-/plugin-legacy-1.1.4.tgz", - "integrity": "sha512-/oJGRcM7VaSGJ9Eodi/kl0avAKDlJvdYA8jmh4bhBHrCsaPqM61P7LUH2w2PUIccnM82mPPCp3PoUEM85PAIdw==", - "dev": true, - "requires": { - "@heroku-cli/command": "^8.2.0", - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.4", - "ansi-escapes": "^3.1.0", - "debug": "^4.1.0", - "semver": "^5.6.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@oclif/plugin-not-found": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-1.2.2.tgz", - "integrity": "sha512-SPlmiJFmTFltQT/owdzQwKgq6eq5AEKVwVK31JqbzK48bRWvEL1Ye60cgztXyZ4bpPn2Fl+KeL3FWFQX41qJuA==", - "dev": true, - "requires": { - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.3", - "cli-ux": "^4.9.0", - "fast-levenshtein": "^2.0.6", - "lodash": "^4.17.11" - } - }, - "@oclif/plugin-plugins": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-1.7.7.tgz", - "integrity": "sha512-bKHruaqt3MbQefRJUgsaA1B78J69+26kUA28IhB4GlWO7RpNWEBPIAMeBk/fRB4Tfw2ZuLC7T/zwOFzvY5V1Tw==", - "dev": true, - "requires": { - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.4", - "chalk": "^2.4.2", - "cli-ux": "^5.0.0", - "debug": "^4.1.0", - "fs-extra": "^7.0.1", - "http-call": "^5.2.2", - "load-json-file": "^5.1.0", - "npm-run-path": "^2.0.2", - "semver": "^5.6.0", - "tslib": "^1.9.3", - "yarn": "^1.13.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "clean-stack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.1.0.tgz", - "integrity": "sha512-uQWrpRm+iZZUCAp7ZZJQbd4Za9I3AjR/3YTjmcnAtkauaIm/T5CT6U8zVI6e60T6OANqBFAzuR9/HB3NzuZCRA==", - "dev": true - }, - "cli-ux": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.3.1.tgz", - "integrity": "sha512-l2MXbitx0FjtHKSbHytuxfxWv6MdWBRh23ItRJjU17cjj0dqZxfAL863tzbR1FIs7jccPllPUvn3QWK6BQg3Pg==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.1", - "@oclif/errors": "^1.2.1", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.3", - "ansi-escapes": "^3.1.0", - "ansi-styles": "^3.2.1", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "clean-stack": "^2.0.0", - "extract-stack": "^1.0.0", - "fs-extra": "^7.0.1", - "hyperlinker": "^1.0.0", - "indent-string": "^3.2.0", - "is-wsl": "^1.1.0", - "lodash": "^4.17.11", - "natural-orderby": "^2.0.1", - "password-prompt": "^1.1.2", - "semver": "^5.6.0", - "string-width": "^3.1.0", - "strip-ansi": "^5.1.0", - "supports-color": "^5.5.0", - "supports-hyperlinks": "^1.0.1", - "treeify": "^1.1.0", - "tslib": "^1.9.3" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "@oclif/plugin-update": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@oclif/plugin-update/-/plugin-update-1.3.9.tgz", - "integrity": "sha512-rEMsKT7VlCNnfAF7gxHcY9FtQw+w3ZMvxzoRqafMRCz6+Lt94r3PRulBI4M7IkIQwE+dqW/GPUlkDj86Os9Njg==", - "dev": true, - "requires": { - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.4", - "@oclif/config": "^1.9.0", - "@oclif/errors": "^1.2.2", - "@types/semver": "^5.5.0", - "cli-ux": "^4.9.3", - "cross-spawn": "^6.0.5", - "debug": "^4.1.0", - "filesize": "^3.6.1", - "fs-extra": "^7.0.1", - "http-call": "^5.2.2", - "lodash": "^4.17.11", - "log-chopper": "^1.0.2", - "semver": "^5.6.0", - "tar-fs": "^1.16.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@oclif/plugin-warn-if-update-available": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-1.7.0.tgz", - "integrity": "sha512-Nwyz3BJ8RhsfQ+OmFSsJSPIfn5YJqMrCzPh72Zgo2jqIjKIBWD8N9vTTe4kZlpeUUn77SyXFfwlBQbNCL5OEuQ==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.10", - "@oclif/config": "^1.12.8", - "@oclif/errors": "^1.2.2", - "chalk": "^2.4.1", - "debug": "^4.1.0", - "fs-extra": "^7.0.0", - "http-call": "^5.2.2", - "lodash.template": "^4.4.0", - "semver": "^5.6.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@oclif/plugin-which": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-which/-/plugin-which-1.0.3.tgz", - "integrity": "sha512-abYZ9hgtifrDDIXtDEO3eQu5zbrAwxjdXvtnD0kIgADvTNXui4XP8qZs1+bL8BsNW/G6WiSghz0CV7WH8vkmVg==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.4", - "@oclif/config": "^1.8.7", - "cli-ux": "^4.9.1", - "tslib": "^1.9.3" - } - }, - "@oclif/screen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + } }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "@jest/types": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.5.0.tgz", + "integrity": "sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA==", "dev": true, "requires": { - "defer-to-connect": "^1.0.1" + "@types/istanbul-lib-coverage": "^1.1.0", + "@types/yargs": "^12.0.9" } }, "@types/babel__core": { @@ -2146,12 +463,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.3.tgz", "integrity": "sha512-wp6IOGu1lxsfnrD+5mX6qwSwWuqsdkKKxTN4aQc4wByHAKZJf9/D4KXPQ1POUjEbnCP5LMggB0OEFNY9OTsMqg==" }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", - "dev": true - }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -2220,15 +531,6 @@ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", "dev": true }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -2260,17 +562,6 @@ "color-convert": "^1.9.0" } }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", - "dev": true - }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" - }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -2286,46 +577,6 @@ "normalize-path": "^2.1.1" } }, - "app-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-path/-/app-path-2.2.0.tgz", - "integrity": "sha1-KvXCtUSkDhX8GsVVSDFDl0YIRdA=", - "dev": true, - "requires": { - "execa": "^0.4.0" - }, - "dependencies": { - "execa": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", - "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", - "dev": true, - "requires": { - "cross-spawn-async": "^2.1.1", - "is-stream": "^1.1.0", - "npm-run-path": "^1.0.0", - "object-assign": "^4.0.1", - "path-key": "^1.0.0", - "strip-eof": "^1.0.0" - } - }, - "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "requires": { - "path-key": "^1.0.0" - } - }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true - } - } - }, "append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", @@ -2382,24 +633,6 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "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", @@ -2446,15 +679,6 @@ "lodash": "^4.17.11" } }, - "async-file": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/async-file/-/async-file-2.0.2.tgz", - "integrity": "sha1-Aq0HhWrDcX6DayCuxaTP4AxG3yM=", - "dev": true, - "requires": { - "rimraf": "^2.5.2" - } - }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -2571,460 +795,58 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "bcrypt": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.4.tgz", - "integrity": "sha512-XqmCym97kT6l+jFEKeFvGuNE9aVEFDGsLMv+tIBTXkJI1sHS0g8s7VQEPJagSMPwWiB5Vpr2kVzVKc/YfwWthA==", - "requires": { - "nan": "2.12.1", - "node-pre-gyp": "0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": 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.2", - "bundled": 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 - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.3.4", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true - } - } - }, - "minizlib": { - "version": "1.1.1", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": 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, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true - }, - "npm-packlist": { - "version": "1.1.12", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": 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 - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "rc": { - "version": "1.2.8", - "bundled": 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 - } - } - }, - "readable-stream": { - "version": "2.3.5", - "bundled": 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.0.3", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "sax": { - "version": "1.2.4", - "bundled": true - }, - "semver": { - "version": "5.6.0", - "bundled": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" + "kind-of": "^6.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, + "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": { - "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" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, + "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 + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "bcrypt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.6.tgz", + "integrity": "sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==", + "requires": { + "nan": "2.13.2", + "node-pre-gyp": "0.12.0" + }, + "dependencies": { + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "requires": { - "string-width": "^1.0.2 || 2" + "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" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true } } }, @@ -3041,26 +863,11 @@ "resolved": "https://registry.npmjs.org/bcrypt-promise/-/bcrypt-promise-2.0.0.tgz", "integrity": "sha1-oLaD6UNCEArubuaXF0Oj4Xna4nw=" }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, "bluebird": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - }, "boom": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", @@ -3139,45 +946,12 @@ "ieee754": "^1.1.4" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", - "dev": true - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -3209,46 +983,6 @@ "ylru": "^1.2.0" } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - } - } - }, "callsites": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", @@ -3270,16 +1004,6 @@ "rsvp": "^4.8.4" } }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -3345,26 +1069,6 @@ } } }, - "clean-stack": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", - "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=", - "dev": true - }, - "cli-color": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", - "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", - "dev": true, - "requires": { - "ansi-regex": "^2.1.1", - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.5" - } - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -3374,58 +1078,6 @@ "restore-cursor": "^2.0.0" } }, - "cli-ux": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-4.9.3.tgz", - "integrity": "sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA==", - "dev": true, - "requires": { - "@oclif/errors": "^1.2.2", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.3", - "ansi-escapes": "^3.1.0", - "ansi-styles": "^3.2.1", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "clean-stack": "^2.0.0", - "extract-stack": "^1.0.0", - "fs-extra": "^7.0.0", - "hyperlinker": "^1.0.0", - "indent-string": "^3.2.0", - "is-wsl": "^1.1.0", - "lodash": "^4.17.11", - "password-prompt": "^1.0.7", - "semver": "^5.6.0", - "strip-ansi": "^5.0.0", - "supports-color": "^5.5.0", - "supports-hyperlinks": "^1.0.1", - "treeify": "^1.1.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "clean-stack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.1.0.tgz", - "integrity": "sha512-uQWrpRm+iZZUCAp7ZZJQbd4Za9I3AjR/3YTjmcnAtkauaIm/T5CT6U8zVI6e60T6OANqBFAzuR9/HB3NzuZCRA==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -3476,15 +1128,6 @@ } } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3501,12 +1144,6 @@ "type-is": "^1.6.14" } }, - "co-wait": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/co-wait/-/co-wait-0.0.0.tgz", - "integrity": "sha1-wiNyAyIY7b9u2RXkM1RsIeRFYos=", - "dev": true - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -3567,18 +1204,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "condense-newlines": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", @@ -3633,12 +1258,6 @@ "safe-buffer": "~5.1.1" } }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, "cookies": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.3.tgz", @@ -3659,11 +1278,6 @@ "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" }, - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -3690,16 +1304,6 @@ "which": "^1.2.9" } }, - "cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true, - "requires": { - "lru-cache": "^4.0.0", - "which": "^1.2.8" - } - }, "cryptiles": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", @@ -3732,15 +1336,6 @@ "dev": true, "optional": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -3773,12 +1368,6 @@ } } }, - "date-fns": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-beta.2.tgz", - "integrity": "sha512-4cicZF707RNerr3/Q3CcdLo+3OHMCfrRXE7h5iFgn7AMvX07sqKLxSf8Yp+WJW5bvKr2cy9/PkctXLv4iFtOaA==", - "dev": true - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3799,15 +1388,6 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -3833,16 +1413,11 @@ "strip-bom": "^3.0.0" } }, - "defer-to-connect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", - "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", - "dev": true - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -3940,11 +1515,6 @@ "esutils": "^2.0.2" } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -3954,12 +1524,6 @@ "webidl-conversions": "^4.0.2" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -3969,42 +1533,6 @@ "safer-buffer": "^2.1.0" } }, - "edit-string": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/edit-string/-/edit-string-1.1.6.tgz", - "integrity": "sha1-HJqInbx+YAdn9P7KadCKfOFZYvQ=", - "dev": true, - "requires": { - "debug": "^3.1.0", - "execa": "^0.10.0", - "lodash": "^4.17.10", - "tmp": "^0.0.33", - "tslib": "^1.9.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, "editorconfig": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", @@ -4060,6 +1588,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -4073,71 +1602,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4267,10 +1738,13 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { "version": "1.0.0", @@ -4333,22 +1807,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - }, "exec-sh": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", @@ -4370,11 +1828,6 @@ "strip-eof": "^1.0.0" } }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -4509,50 +1962,21 @@ } }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "extract-stack": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-1.0.0.tgz", - "integrity": "sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo=", - "dev": true - }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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": { - "ms": "2.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -4577,15 +2001,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fast-xml-parser": { - "version": "3.12.13", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.12.13.tgz", - "integrity": "sha512-AW0qennqoHQ65BAMZX/7Y2he6WUz3iqmW4L4/EgMXNvTd5Jfubig50F+N2JVthC5DnkhPWRUp+eO6bbaMCnjHA==", - "dev": true, - "requires": { - "nimnjs": "^1.3.2" - } - }, "fb-watchman": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", @@ -4595,15 +2010,6 @@ "bser": "^2.0.0" } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -4622,11 +2028,6 @@ "flat-cache": "^2.0.1" } }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" - }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -4637,12 +2038,6 @@ "minimatch": "^3.0.3" } }, - "filesize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-4.1.2.tgz", - "integrity": "sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw==", - "dev": true - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -4681,58 +2076,12 @@ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", "dev": true }, - "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", - "dev": true, - "requires": { - "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreman": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/foreman/-/foreman-3.0.1.tgz", - "integrity": "sha512-ek/qoM0vVKpxzkBUQN9k4Fs7l0XsHv4bqxuEW6oqIS4s0ouYKsQ19YjBzUJKTFRumFiSpUv7jySkrI6lfbhjlw==", - "dev": true, - "requires": { - "commander": "^2.15.1", - "http-proxy": "^1.17.0", - "mustache": "^2.2.1", - "shell-quote": "^1.6.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4767,22 +2116,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -4809,7 +2142,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -4882,15 +2216,6 @@ "assert-plus": "^1.0.0" } }, - "github-url-to-object": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.4.tgz", - "integrity": "sha512-1Ri1pR8XTfzLpbtPz5MlW/amGNdNReuExPsbF9rxLsBfO1GH9RtDBamhJikd0knMWq3RTTQDbTtw0GGvvEAJEA==", - "dev": true, - "requires": { - "is-url": "^1.1.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -4904,54 +2229,12 @@ "path-is-absolute": "^1.0.0" } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", @@ -5001,17 +2284,9 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "function-bind": "^1.1.1" } }, "has-flag": { @@ -5020,25 +2295,11 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-unicode": { "version": "2.0.1", @@ -5090,178 +2351,6 @@ "sntp": "0.2.x" } }, - "here": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/here/-/here-0.0.2.tgz", - "integrity": "sha1-acGvPwISHz2HiOAuhNyLOQXXEZU=", - "dev": true - }, - "heroku": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/heroku/-/heroku-7.26.2.tgz", - "integrity": "sha512-rzopK0yf+l5FWVLHozSLpkrGKhbiewCwEm+CEuZAa2voJXOU5Z3erx1Wire1H5rCuYcYNHbjT2CRbtj0u43RsQ==", - "dev": true, - "requires": { - "@heroku-cli/color": "1.1.14", - "@heroku-cli/command": "^8.2.10", - "@heroku-cli/plugin-addons-v5": "^7.24.0", - "@heroku-cli/plugin-apps-v5": "^7.26.0", - "@heroku-cli/plugin-auth": "^7.24.0", - "@heroku-cli/plugin-autocomplete": "^7.24.0", - "@heroku-cli/plugin-buildpacks": "^7.24.0", - "@heroku-cli/plugin-certs": "^7.24.0", - "@heroku-cli/plugin-certs-v5": "^7.24.0", - "@heroku-cli/plugin-ci": "^7.24.3", - "@heroku-cli/plugin-ci-v5": "^7.24.0", - "@heroku-cli/plugin-config": "^7.24.0", - "@heroku-cli/plugin-container-registry-v5": "^7.24.4", - "@heroku-cli/plugin-git": "^7.24.0", - "@heroku-cli/plugin-local": "^7.26.2", - "@heroku-cli/plugin-oauth-v5": "^7.24.0", - "@heroku-cli/plugin-orgs-v5": "^7.26.0", - "@heroku-cli/plugin-pg-v5": "^7.25.0", - "@heroku-cli/plugin-pipelines-v5": "^7.26.0", - "@heroku-cli/plugin-ps": "^7.24.0", - "@heroku-cli/plugin-ps-exec": "2.3.5", - "@heroku-cli/plugin-redis-v5": "^7.25.0", - "@heroku-cli/plugin-run-v5": "^7.24.0", - "@heroku-cli/plugin-spaces": "^7.26.0", - "@heroku-cli/plugin-status": "^7.24.0", - "@heroku-cli/plugin-webhooks-v5": "^7.24.0", - "@oclif/command": "1.5.11", - "@oclif/config": "1.12.10", - "@oclif/errors": "1.2.2", - "@oclif/plugin-commands": "^1.2.2", - "@oclif/plugin-help": "2.1.6", - "@oclif/plugin-legacy": "1.1.4", - "@oclif/plugin-not-found": "1.2.2", - "@oclif/plugin-plugins": "1.7.7", - "@oclif/plugin-update": "1.3.9", - "@oclif/plugin-warn-if-update-available": "1.7.0", - "@oclif/plugin-which": "1.0.3", - "cli-ux": "4.9.3", - "debug": "4.1.1", - "execa": "1.0.0", - "fs-extra": "7.0.1", - "http-call": "5.2.3", - "netrc-parser": "3.1.6", - "semver": "5.6.0", - "tslib": "1.9.3", - "uuid": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "heroku-cli-util": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/heroku-cli-util/-/heroku-cli-util-8.0.11.tgz", - "integrity": "sha512-cApMBbrfAhFTKs/loXm7zkWRC4kOH1VHoqU5WNgzs2TGKJqQI3QYvxITKE+8iC1Gb1xAy0BCqdGgzx8t7EoeWQ==", - "dev": true, - "requires": { - "@heroku-cli/color": "^1.1.3", - "ansi-escapes": "^3.1.0", - "ansi-styles": "^3.2.1", - "cardinal": "^2.0.1", - "chalk": "^2.4.1", - "co": "^4.6.0", - "got": "^8.3.1", - "heroku-client": "^3.0.7", - "lodash": "^4.17.10", - "netrc-parser": "^3.1.4", - "opn": "^3.0.3", - "strip-ansi": "^4.0.0", - "supports-color": "^5.4.0", - "tslib": "^1.9.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "heroku-client": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/heroku-client/-/heroku-client-3.0.7.tgz", - "integrity": "sha512-wL8d3ufIWGzL8B2U7oPzN+SdcMt6LPqA/x4nb9pDG45IXpr8KO+N4dvX4Vycgn0WrJVDfQnQ1juctJsUwuoeww==", - "dev": true, - "requires": { - "is-retry-allowed": "^1.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "heroku-exec-util": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/heroku-exec-util/-/heroku-exec-util-0.7.3.tgz", - "integrity": "sha512-fRYqhBJKJhZ21zjMVEYAK6oFp+fMUXvQs5L8+l7d6QEjOX/jYTxvFEgEY3Ome9Wxbe/790fZA8ca7T86JUO3Ow==", - "dev": true, - "requires": { - "@heroku/socksv5": "^0.0.9", - "co-wait": "0.0.0", - "heroku-cli-util": "^8.0.9", - "keypair": "1.0.1", - "node-forge": "0.7.5", - "smooth-progress": "1.1.0", - "ssh2": "0.6.1", - "temp": "0.8.3", - "uuid": "3.2.1" - }, - "dependencies": { - "ssh2": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.6.1.tgz", - "integrity": "sha512-fNvocq+xetsaAZtBG/9Vhh0GDjw1jQeW7Uq/DPh4fVrJd0XxSfXAqBjOGVk4o2jyWHvyC6HiaPFpfHlR12coDw==", - "dev": true, - "requires": { - "ssh2-streams": "~0.2.0" - } - }, - "ssh2-streams": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.2.1.tgz", - "integrity": "sha512-3zCOsmunh1JWgPshfhKmBCL3lUtHPoh+a/cyQ49Ft0Q0aF7xgN06b76L+oKtFi0fgO57FLjFztb1GlJcEZ4a3Q==", - "dev": true, - "requires": { - "asn1": "~0.2.0", - "semver": "^5.1.0", - "streamsearch": "~0.1.2" - } - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - } - } - }, "hoek": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", @@ -5284,34 +2373,6 @@ "whatwg-encoding": "^1.0.1" } }, - "html-validator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/html-validator/-/html-validator-4.0.1.tgz", - "integrity": "sha512-aZZWLLzBMdiS7tCquN4rzx7hnHRv9koVA6upGucHUFqAbeHQlorWOcG3knJEp8TvCDso6wmTXKIBrqBeUYf+bg==", - "dev": true, - "requires": { - "request": "2.88.0", - "valid-url": "1.0.9" - } - }, - "html-validator-cli": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-validator-cli/-/html-validator-cli-6.0.0.tgz", - "integrity": "sha512-gMONtbDYE4P8taFY2uMU88wLv9E8FwkESP9TX4Rv93ylpR1ibGLQ10pe/bCc2XBuqRnfp2KgakgxEI0A3lXtlA==", - "dev": true, - "requires": { - "html-validator": "4.0.1", - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "http-assert": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.0.tgz", @@ -5321,25 +2382,6 @@ "http-errors": "~1.7.1" } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "http-call": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.2.3.tgz", - "integrity": "sha512-IkwGruHVHATmnonLKMGX5tkpM0KSn/C240o8/OfBsESRaJacykSia+akhD0d3fljQ5rQPXtBvSrVShAsj+EOUQ==", - "dev": true, - "requires": { - "content-type": "^1.0.4", - "debug": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "is-stream": "^1.1.0", - "tunnel-agent": "^0.6.0" - } - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -5352,17 +2394,6 @@ "toidentifier": "1.0.0" } }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -5379,22 +2410,6 @@ "integrity": "sha512-nDUtj0ltIt08tGi2VWSpSzNNFye0v3YSe9lX3lIqLTuVvvRiYCvs4QQBSHo0eomFYw1wlUuofurUAlTm+vHnXg==", "dev": true }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - } - }, - "hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", - "dev": true - }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -5456,23 +2471,11 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, "inflation": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" }, - "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5565,24 +2568,6 @@ } } }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - }, - "dependencies": { - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - } - } - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -5598,31 +2583,6 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, - "ip-address": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.9.2.tgz", - "integrity": "sha512-7aeFm/7oqo0mMhubTSjZ2Juw/F+WJ3hyfCScNVRQdz5RSRhw1Rj4ZlBFsmEajeKgQDI8asqVs31h8DpxEv7IfQ==", - "dev": true, - "requires": { - "jsbn": "1.1.0", - "lodash": "^4.17.11", - "sprintf-js": "1.1.2" - }, - "dependencies": { - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=", - "dev": true - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - } - } - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -5646,7 +2606,8 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, "is-ci": { "version": "2.0.0", @@ -5674,7 +2635,8 @@ "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=" + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-descriptor": { "version": "0.1.6", @@ -5708,11 +2670,6 @@ "number-is-nan": "^1.0.0" } }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, "is-generator-fn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz", @@ -5733,18 +2690,6 @@ "kind-of": "^3.0.2" } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5764,16 +2709,11 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, "requires": { "has": "^1.0.1" } }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -5784,6 +2724,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -5803,12 +2744,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, "is-whitespace": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", @@ -6130,26 +3065,6 @@ } } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "iterm2-version": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/iterm2-version/-/iterm2-version-2.3.0.tgz", - "integrity": "sha1-rmQABGHgK18f5TMfC58Oxxzg4Tg=", - "dev": true, - "requires": { - "app-path": "^2.1.0", - "plist": "^2.0.1" - } - }, "jest": { "version": "24.5.0", "resolved": "https://registry.npmjs.org/jest/-/jest-24.5.0.tgz", @@ -6565,23 +3480,6 @@ } } }, - "jimp": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.0.tgz", - "integrity": "sha512-RYpN+AAlTEMf8Bnkhq2eeTNyr70rDK/2UUfUqzBJmwmZwdR6fxRJvgbCGWT1BDVRxaAqo+4CWm8ePBxOIsr4jg==", - "requires": { - "@babel/polyfill": "^7.0.0", - "@jimp/custom": "^0.6.0", - "@jimp/plugins": "^0.6.0", - "@jimp/types": "^0.6.0", - "core-js": "^2.5.7" - } - }, - "jpeg-js": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.4.tgz", - "integrity": "sha512-6IzjQxvnlT8UlklNmDXIJMWxijULjqGrzgqc0OG7YadZdvm7KPQ1j0ehmQQHckgEWOfgpptzcnWgESovxudpTA==" - }, "js-beautify": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.0.tgz", @@ -6597,18 +3495,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "js2xmlparser": { "version": "4.0.0", @@ -6718,12 +3606,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -6776,12 +3658,6 @@ "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -6798,21 +3674,6 @@ "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz", "integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g==" }, - "keypair": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.1.tgz", - "integrity": "sha1-dgNxknCvtlZO04oiCHoG/Jqk6hs=", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -7050,21 +3911,6 @@ "uc.micro": "^1.0.1" } }, - "load-bmfont": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", - "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -7090,24 +3936,7 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash.sortby": { @@ -7116,34 +3945,6 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "log-chopper": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-chopper/-/log-chopper-1.0.2.tgz", - "integrity": "sha512-tEWS6Fb+Xv0yLChJ6saA1DP3H1yPL0PfiIN7SDJ+U/CyP+fD4G/dhKfow+P5UuJWi6BdE4mUcPkJclGXCWxDrg==", - "dev": true, - "requires": { - "byline": "5.x" - } - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7153,12 +3954,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -7168,15 +3963,6 @@ "yallist": "^2.1.2" } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -7266,22 +4052,6 @@ "p-is-promise": "^2.0.0" } }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -7344,11 +4114,6 @@ } } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, "mime-db": { "version": "1.38.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", @@ -7368,20 +4133,6 @@ "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -7460,12 +4211,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", - "dev": true - }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -7483,9 +4228,9 @@ } }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" }, "nanomatch": { "version": "1.2.13", @@ -7539,12 +4284,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", - "dev": true - }, "needle": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", @@ -7575,85 +4314,12 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" }, - "netrc-parser": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/netrc-parser/-/netrc-parser-3.1.6.tgz", - "integrity": "sha512-lY+fmkqSwntAAjfP63jB4z5p5WbuZwyMCD3pInT7dpHU/Gc6Vv90SAC6A0aNiqaRGHiuZFBtiwu+pu8W/Eyotw==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "execa": "^0.10.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "nimn-date-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz", - "integrity": "sha512-1Nf+x3EeMvHUiHsVuEhiZnwA8RMeOBVTQWfB1S2n9+i6PYCofHd2HRMD+WOHIHYshy4T4Gk8wQoCol7Hq3av8Q==", - "dev": true - }, - "nimn_schema_builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz", - "integrity": "sha512-DK5/B8CM4qwzG2URy130avcwPev4uO0ev836FbQyKo1ms6I9z/i6EJyiZ+d9xtgloxUri0W+5gfR8YbPq7SheA==", - "dev": true - }, - "nimnjs": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/nimnjs/-/nimnjs-1.3.2.tgz", - "integrity": "sha512-TIOtI4iqkQrUM1tiM76AtTQem0c7e56SkDZ7sj1d1MfUsqRcq2ZWQvej/O+HBTZV7u/VKnwlKTDugK/75IRPPw==", - "dev": true, - "requires": { - "nimn-date-parser": "^1.0.0", - "nimn_schema_builder": "^1.0.0" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", - "dev": true - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -7726,12 +4392,6 @@ "remove-trailing-separator": "^1.0.1" } }, - "normalize-url": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.1.0.tgz", - "integrity": "sha512-X781mkWeK6PDMAZJfGn/wnwil4dV6pIdF9euiNqtA89uJvZuNDJO2YyJxiwpPhTQcF5pYUU1v+kcOxzYV6rZlA==", - "dev": true - }, "npm-bundled": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", @@ -7812,7 +4472,8 @@ "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==" + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true }, "object-visit": { "version": "1.0.1", @@ -7842,11 +4503,6 @@ "isobject": "^3.0.1" } }, - "omggif": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.9.tgz", - "integrity": "sha1-3LcCTazVDFK00wPwSALJHAV8dl8=" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -7885,24 +4541,6 @@ "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "opn": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", - "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", - "dev": true, - "requires": { - "object-assign": "^4.0.1" - } - }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -7934,15 +4572,6 @@ } } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -7973,12 +4602,6 @@ "os-tmpdir": "^1.0.0" } }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -8030,26 +4653,12 @@ "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", "dev": true }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8059,34 +4668,6 @@ "callsites": "^3.0.0" } }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", - "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "requires": { - "for-each": "^0.3.3", - "string.prototype.trim": "^1.1.2" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -8114,16 +4695,6 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "password-prompt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.1.0", - "cross-spawn": "^6.0.5" - } - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -8170,28 +4741,11 @@ "pify": "^3.0.0" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "phoenix": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/phoenix/-/phoenix-1.4.9.tgz", - "integrity": "sha512-x7UMemlq0w03S0R3fmklkUuYhjPXC6K2FXz6q7oBbUw17LIAYexiuFaOxPk/pMWSX69AZPZlQeEHytnIyTAw/w==", - "dev": true - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -8207,14 +4761,6 @@ "node-modules-regexp": "^1.0.0" } }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "requires": { - "pngjs": "^3.0.0" - } - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -8224,42 +4770,12 @@ "find-up": "^3.0.0" } }, - "plist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", - "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", - "dev": true, - "requires": { - "base64-js": "1.2.0", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.x" - }, - "dependencies": { - "base64-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", - "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", - "dev": true - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", - "dev": true - } - } - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -8272,12 +4788,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, "pretty": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", @@ -8308,17 +4818,6 @@ } } }, - "printf": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/printf/-/printf-0.5.1.tgz", - "integrity": "sha512-UaE/jO0hNsrvPGQEb4LyNzcrJv9Z00tsreBduOSxMtrebvoUhxiEJ4YCHX8YHf6akwfKsC2Gyv5zv47UXhMiLg==", - "dev": true - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -8345,12 +4844,6 @@ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -8376,76 +4869,11 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "puppeteer": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.13.0.tgz", - "integrity": "sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^2.2.1", - "mime": "^2.0.3", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "ws": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz", - "integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, "qs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA==" }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, "random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", @@ -8555,35 +4983,6 @@ "util.promisify": "^1.0.0" } }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - }, - "redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=", - "dev": true - }, - "redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", - "dev": true, - "requires": { - "redis-errors": "^1.0.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -8705,12 +5104,6 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, "requizzle": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", @@ -8777,15 +5170,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -8810,12 +5194,6 @@ "glob": "^7.1.3" } }, - "robots-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-1.0.2.tgz", - "integrity": "sha512-c979P2TTe5Ezjg+VV5XWC59bab1w1Xyb8KLnJ5SKuwN7YH+ys8Y5KCZ2OP2J7zXVE7Yq0eYWlrqUM/urIbx9sg==", - "dev": true - }, "rsvp": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", @@ -8929,25 +5307,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-escape": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz", - "integrity": "sha1-aP0CXrBJC09WegJ/C/IkgLX4QTM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "dev": true }, "shellwords": { "version": "0.1.1", @@ -8965,57 +5325,12 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, - "simplecrawler": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/simplecrawler/-/simplecrawler-1.1.6.tgz", - "integrity": "sha512-TsXJVzrKZuExJPq7juipV76KIE+D3a9IWWve6v+BBCuwFWhFYl9BOFZtARWBwb08KtI4eTZ/GGu9QuboJzo62w==", - "dev": true, - "requires": { - "async": "^2.1.4", - "iconv-lite": "^0.4.13", - "robots-parser": "^1.0.0", - "urijs": "^1.18.11" - } - }, "sisteransi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", "dev": true }, - "site-validator-cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/site-validator-cli/-/site-validator-cli-1.0.1.tgz", - "integrity": "sha512-s9p/3QDkqG6W4drdSPGRmdQQw9PrE+IFM3XGnZgKogGmYcVH8oHhMFyTHvWi2ajUZ4F4vIUc+bXm3CzeVQV8NQ==", - "dev": true, - "requires": { - "cli-color": "1.4.0", - "fast-xml-parser": "3.12.13", - "flat-cache": "2.0.1", - "html-validator": "3.1.3", - "minimist": "1.2.0", - "normalize-url": "4.1.0", - "simplecrawler": "1.1.6" - }, - "dependencies": { - "html-validator": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/html-validator/-/html-validator-3.1.3.tgz", - "integrity": "sha512-RhjcQIHS/SfYzQ+/JrFWKU6AVve6AuwftAG/cWX3+bpvBK/tGMqbOleKlsAxLrKD84+GSJ1oJGnkyhdVLBGCqg==", - "dev": true, - "requires": { - "request": "2.88.0", - "valid-url": "1.0.9" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -9041,49 +5356,6 @@ } } }, - "smooth-progress": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/smooth-progress/-/smooth-progress-1.1.0.tgz", - "integrity": "sha1-pR1tvCscRjWslL9L6JNk1c6RzjI=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "^1.1.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -9202,15 +5474,6 @@ "hoek": "0.9.x" } }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9245,16 +5508,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparkline": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sparkline/-/sparkline-0.2.0.tgz", - "integrity": "sha1-vJqI17g4j8GpUf3hJ1+c5A/ssiI=", - "dev": true, - "requires": { - "here": "0.0.2", - "nopt": "~4.0.1" - } - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -9348,26 +5601,6 @@ } } }, - "ssh2": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.5.4.tgz", - "integrity": "sha1-G/a2soyW6u8mf01sRqWiUXpZnic=", - "dev": true, - "requires": { - "ssh2-streams": "~0.1.15" - } - }, - "ssh2-streams": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.1.20.tgz", - "integrity": "sha1-URGNFUVV31Rp7h9n4M8efoosDjo=", - "dev": true, - "requires": { - "asn1": "~0.2.0", - "semver": "^5.1.0", - "streamsearch": "~0.1.2" - } - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -9422,30 +5655,6 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", - "dev": true - }, - "strftime": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz", - "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM=", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-just": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-just/-/string-just-0.0.2.tgz", - "integrity": "sha1-h5MYjLoLcokr/7dMwOKZzqYEW3E=", - "dev": true - }, "string-length": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", @@ -9483,16 +5692,6 @@ "strip-ansi": "^3.0.0" } }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9533,34 +5732,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - } - }, - "supertest": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", - "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", - "dev": true, - "requires": { - "methods": "^1.1.2", - "superagent": "^3.8.3" - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -9570,30 +5741,6 @@ "has-flag": "^3.0.0" } }, - "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "dev": true, - "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - } - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -9673,81 +5820,6 @@ } } }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - }, - "dependencies": { - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "dev": true, - "requires": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "term-img": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/term-img/-/term-img-2.1.0.tgz", - "integrity": "sha512-j78Y+26QYTTWvtVVCmDx94idvQm6p59E+xRfQDSevIyM8dg45uUAtr/xbu13l0BeKrebPyUpgh8PM3noXlIBkw==", - "dev": true, - "requires": { - "ansi-escapes": "^2.0.0", - "iterm2-version": "^2.1.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", - "dev": true - } - } - }, "test-exclude": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.1.0.tgz", @@ -9794,32 +5866,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "timm": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.1.tgz", - "integrity": "sha512-hqDTYi/bWuDxL2i6T3v6nrvkAQ/1Bc060GSkVEQZp02zTSTB4CHSKsOkliequCftQaNRcjRqUZmpGWs5FfhrNg==" - }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -9835,12 +5881,6 @@ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", "dev": true }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -9856,12 +5896,6 @@ "kind-of": "^3.0.2" } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -9935,24 +5969,12 @@ "punycode": "^2.1.0" } }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "true-myth": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/true-myth/-/true-myth-2.2.3.tgz", - "integrity": "sha512-ZdlJjMyNBtOjlR0qbYboAfdnXYhUPuD5F5QOAaKEgdUPg3UTxuTfC5cu3MidWIRemI3iWcuUZEwKybDJXP0Ocw==", - "dev": true - }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -9967,28 +5989,6 @@ "safe-buffer": "^5.0.1" } }, - "tunnel-ssh": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tunnel-ssh/-/tunnel-ssh-4.1.4.tgz", - "integrity": "sha512-CjBqboGvAbM7iXSX2F95kzoI+c2J81YkrHbyyo4SWNKCzU6w5LfEvXBCHu6PPriYaNvfhMKzD8bFf5Vl14YTtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "lodash.defaults": "^4.1.0", - "ssh2": "0.5.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -10003,12 +6003,6 @@ "prelude-ls": "~1.1.2" } }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true - }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -10018,12 +6012,6 @@ "mime-types": "~2.1.18" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -10149,45 +6137,12 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "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 }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "requires": { - "pako": "^1.0.5" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -10208,12 +6163,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -10224,12 +6173,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", - "dev": true - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -10329,48 +6272,6 @@ "string-width": "^1.0.2 || 2" } }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "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" - } - }, - "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" - } - } - } - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -10420,59 +6321,18 @@ "async-limiter": "~1.0.0" } }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, "xmlcreate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", "dev": true }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -10547,21 +6407,6 @@ "decamelize": "^1.2.0" } }, - "yarn": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.17.3.tgz", - "integrity": "sha512-CgA8o7nRZaQvmeF/WBx2FC7f9W/0X59T2IaLYqgMo6637wfp5mMEsM3YXoJtKUspnpmDJKl/gGFhnqS+sON7hA==", - "dev": true - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "~1.0.1" - } - }, "ylru": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", diff --git a/package.json b/package.json index 19e9f35..6c5393d 100644 --- a/package.json +++ b/package.json @@ -22,11 +22,10 @@ "author": "", "license": "ISC", "dependencies": { - "bcrypt": "^3.0.3", + "bcrypt": "^3.0.6", "bcrypt-promise": "^2.0.0", "fs-extra": "^7.0.1", "handlebars": "^4.1.2", - "jimp": "^0.6.0", "koa": "^2.6.2", "koa-body": "^4.0.8", "koa-bodyparser": "^4.2.1", @@ -40,14 +39,9 @@ "devDependencies": { "eslint": "^5.15.2", "handlebars-validate": "^0.1.2", - "heroku": "^7.26.2", - "html-validator-cli": "^6.0.0", "http-status-codes": "^1.3.2", "jest": "^24.1.0", "jsdoc": "^3.6.3", - "jsdoc-route-plugin": "^0.1.0", - "puppeteer": "^1.12.2", - "site-validator-cli": "^1.0.1", - "supertest": "^4.0.2" + "jsdoc-route-plugin": "^0.1.0" } } From 3749913d5182a9558d7827a314372232680709b4 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 12:47:54 +0100 Subject: [PATCH 11/19] completed unit tests for module --- .vscode/launch.json | 8 +++++ index.js | 63 +++++++++--------------------------- modules/user.js | 49 +++++++++++++++++++--------- unit tests/user.spec.js | 71 ++++++++++++++++++++++++++++++++++------- 4 files changed, 117 insertions(+), 74 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index f221d6c..ff946a2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,6 +2,13 @@ { "version": "0.2.0", "configurations": [ + + { + "type": "node", + "request": "attach", + "name": "Attach by Process ID", + "processId": "${command:PickProcess}" + }, { "type": "node", "request": "launch", @@ -11,6 +18,7 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "disableOptimisticBPs": true, + "protocol": "inspector", "windows": { "program": "${workspaceFolder}/node_modules/jest/bin/jest", } diff --git a/index.js b/index.js index 645e106..c4962a9 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ 'use strict' /* MODULE IMPORTS */ +const bcrypt = require('bcrypt-promise') const Koa = require('koa') const Router = require('koa-router') const views = require('koa-views') @@ -15,13 +16,12 @@ const bodyParser = require('koa-bodyparser') const koaBody = require('koa-body')({multipart: true, uploadDir: '.'}) const session = require('koa-session') const sqlite = require('sqlite-async') -const bcrypt = require('bcrypt-promise') const fs = require('fs-extra') const mime = require('mime-types') //const jimp = require('jimp') /* IMPORT CUSTOM MODULES */ -const accounts = require('./modules/accounts') +const User = require('./modules/user') const app = new Koa() const router = new Router() @@ -35,6 +35,7 @@ app.use(views(`${__dirname}/views`, { extension: 'handlebars' }, {map: { handleb const defaultPort = 8080 const port = process.env.PORT || defaultPort +const dbName = 'website.db' const saltRounds = 10 /** @@ -71,24 +72,15 @@ router.get('/register', async ctx => await ctx.render('register')) */ router.post('/register', koaBody, async ctx => { try { + // extract the data from the request const body = ctx.request.body console.log(body) - // PROCESSING FILE const {path, type} = ctx.request.files.avatar - const fileExtension = mime.extension(type) - console.log(`path: ${path}`) - console.log(`type: ${type}`) - console.log(`fileExtension: ${fileExtension}`) - await fs.copy(path, 'public/avatars/avatar.png') - // ENCRYPTING PASSWORD AND BUILDING SQL - body.pass = await bcrypt.hash(body.pass, saltRounds) - const sql = `INSERT INTO users(user, pass) VALUES("${body.user}", "${body.pass}")` - console.log(sql) - // DATABASE COMMANDS - const db = await sqlite.open('./website.db') - await db.run(sql) - await db.close() - // REDIRECTING USER TO HOME PAGE + // call the functions in the module + const user = await new User(dbName) + await user.register(body.user, body.pass) + // await user.uploadPicture(path, type) + // redirect to the home page ctx.redirect(`/?msg=new user "${body.name}" added`) } catch(err) { await ctx.render('error', {message: err.message}) @@ -99,22 +91,14 @@ router.get('/login', async ctx => { const data = {} if(ctx.query.msg) data.msg = ctx.query.msg if(ctx.query.user) data.user = ctx.query.user - await ctx.render('login', data) + await ctx.render('login', data) }) router.post('/login', async ctx => { try { const body = ctx.request.body - const db = await sqlite.open('./website.db') - // DOES THE USERNAME EXIST? - const records = await db.get(`SELECT count(id) AS count FROM users WHERE user="${body.user}";`) - if(!records.count) return ctx.redirect('/login?msg=invalid%20username') - const record = await db.get(`SELECT pass FROM users WHERE user = "${body.user}";`) - await db.close() - // DOES THE PASSWORD MATCH? - const valid = await bcrypt.compare(body.pass, record.pass) - if(valid == false) return ctx.redirect(`/login?user=${body.user}&msg=invalid%20password`) - // WE HAVE A VALID USERNAME AND PASSWORD + const user = await new User(dbName) + await user.login(body.user, body.pass) ctx.session.authorised = true return ctx.redirect('/?msg=you are now logged in...') } catch(err) { @@ -122,27 +106,10 @@ router.post('/login', async ctx => { } }) -// router.post('/login', async ctx => { // 19 lines reduced to 10! -// const body = ctx.request.body -// try { -// await accounts.checkCredentials(body.user, body.pass) -// ctx.session.authorised = true -// return ctx.redirect('/?msg=you are now logged in...') -// } catch(err) { -// return ctx.redirect(`/login?user=${body.user}&msg=${err.message}`) -// } -// }) - router.get('/logout', async ctx => { - ctx.session.authorised = null; - ctx.redirect('/') + ctx.session.authorised = null + ctx.redirect('/?msg=you are now logged out') }) app.use(router.routes()) -module.exports = app.listen(port, async() => { - // MAKE SURE WE HAVE A DATABASE WITH THE CORRECT SCHEMA - const db = await sqlite.open('./website.db') - await db.run('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, user TEXT, pass TEXT);') - await db.close() - console.log(`listening on port ${port}`) -}) \ No newline at end of file +module.exports = app.listen(port, async() => console.log(`listening on port ${port}`)) diff --git a/modules/user.js b/modules/user.js index 5d91927..fd1c7ec 100644 --- a/modules/user.js +++ b/modules/user.js @@ -1,6 +1,7 @@ 'use strict' +const bcrypt = require('bcrypt-promise') const fs = require('fs-extra') const mime = require('mime-types') const sqlite = require('sqlite-async') @@ -18,24 +19,42 @@ module.exports = class User { })() } - async register(username, password, filename, filetype) { - const fileExtension = mime.extension(filetype) - await fs.copy(path, `public/avatars/${username}.${fileExtension}`) - password = await bcrypt.hash(password, saltRounds) - const sql = `INSERT INTO users(user, pass) VALUES("${username}", "${password}")` - await this.db.run(sql) - return true + async register(user, pass) { + try { + if(user.length === 0) throw new Error('missing username') + if(pass.length === 0) throw new Error('missing password') + let sql = `SELECT COUNT(id) as records FROM users WHERE user="${user}";` + const data = await this.db.get(sql) + if(data.records !== 0) throw new Error(`username "${user}" already in use`) + pass = await bcrypt.hash(pass, saltRounds) + sql = `INSERT INTO users(user, pass) VALUES("${user}", "${pass}")` + await this.db.run(sql) + return true + } catch(err) { + throw err + } + } + + async uploadPicture(path, mimeType) { + const extension = mime.extension(mimeType) + console.log(`path: ${path}`) + console.log(`extension: ${extension}`) + //await fs.copy(path, `public/avatars/${username}.${fileExtension}`) } async login(username, password) { - let sql = `SELECT count(id) AS count FROM users WHERE user="${body.user}";` - const records = await this.db.get(sql) - if(!records.count) throw new Error(`username "${username}" not found`) - sql = `SELECT pass FROM users WHERE user = "${body.user}";` - const record = await db.get(sql) - const valid = await bcrypt.compare(body.pass, record.pass) - if(valid == false) throw new Error(`invalid password for account "${username}"`) - return true + try { + let sql = `SELECT count(id) AS count FROM users WHERE user="${username}";` + const records = await this.db.get(sql) + if(!records.count) throw new Error(`username "${username}" not found`) + sql = `SELECT pass FROM users WHERE user = "${username}";` + const record = await this.db.get(sql) + const valid = await bcrypt.compare(password, record.pass) + if(valid === false) throw new Error(`invalid password for account "${username}"`) + return true + } catch(err) { + throw err + } } } \ No newline at end of file diff --git a/unit tests/user.spec.js b/unit tests/user.spec.js index 776b786..d01fd30 100644 --- a/unit tests/user.spec.js +++ b/unit tests/user.spec.js @@ -1,32 +1,81 @@ 'use strict' -const Accounts = require('../modules/accounts.js') +const Accounts = require('../modules/user.js') describe('register()', () => { + test('register a valid account', async done => { expect.assertions(1) try { const account = await new Accounts() - // test goes here + const register = await account.register('doej', 'password') + expect(register).toBe(true) } catch(err) { done.fail(err) } finally { done() } }) + + test('register a duplicate username', async done => { + expect.assertions(1) + const account = await new Accounts() + await account.register('doej', 'password') + await expect( account.register('doej', 'password') ) + .rejects.toEqual( Error('username "doej" already in use') ) + done() + }) + + test('error if blank username', async done => { + expect.assertions(1) + const account = await new Accounts() + await expect( account.register('', 'password') ) + .rejects.toEqual( Error('missing username') ) + done() + }) + + test('error if blank password', async done => { + expect.assertions(1) + const account = await new Accounts() + await expect( account.register('doej', '') ) + .rejects.toEqual( Error('missing password') ) + done() + }) + +}) + +describe('uploadPicture()', () => { + // this would have to be done by mocking the file system + // perhaps using mock-fs? }) describe('login()', () => { - test('log in with valid credentials', done => { + test('log in with valid credentials', async done => { expect.assertions(1) - try { - const account = await new Accounts() - // test goes here - } catch(err) { - done.fail(err) - } finally { - done() - } + const account = await new Accounts() + await account.register('doej', 'password') + const valid = await account.login('doej', 'password') + expect(valid).toBe(true) + done() }) + + test('invalid username', async done => { + expect.assertions(1) + const account = await new Accounts() + await account.register('doej', 'password') + await expect( account.login('roej', 'password') ) + .rejects.toEqual( Error('username "roej" not found') ) + done() + }) + + test('invalid password', async done => { + expect.assertions(1) + const account = await new Accounts() + await account.register('doej', 'password') + await expect( account.login('doej', 'bad') ) + .rejects.toEqual( Error('invalid password for account "doej"') ) + done() + }) + }) From 6a7df6033b38dcc551418043b71588fd1ee4780e Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 12:52:04 +0100 Subject: [PATCH 12/19] removed pointless try-catch --- unit tests/user.spec.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/unit tests/user.spec.js b/unit tests/user.spec.js index d01fd30..886d344 100644 --- a/unit tests/user.spec.js +++ b/unit tests/user.spec.js @@ -7,15 +7,10 @@ describe('register()', () => { test('register a valid account', async done => { expect.assertions(1) - try { - const account = await new Accounts() - const register = await account.register('doej', 'password') - expect(register).toBe(true) - } catch(err) { - done.fail(err) - } finally { - done() - } + const account = await new Accounts() + const register = await account.register('doej', 'password') + expect(register).toBe(true) + done() }) test('register a duplicate username', async done => { From 057a7fc738cecec1e8eecc69daf05596abb0af45 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 15:02:06 +0100 Subject: [PATCH 13/19] cleaned up old files --- {tests/acceptance => archive}/auth.specx.js | 0 countries.json => archive/countries.json | 0 {tests/unit => archive}/index.specx.js | 0 test.sh => archive/test.sh | 0 {unit tests => archive}/testdata/boy-2.png | Bin {unit tests => archive}/testdata/boy-3.png | Bin {unit tests => archive}/testdata/boy-4.png | Bin {unit tests => archive}/testdata/boy-5.png | Bin {unit tests => archive}/testdata/boy.png | Bin {unit tests => archive}/testdata/girl-2.png | Bin {unit tests => archive}/testdata/girl-3.png | Bin {unit tests => archive}/testdata/girl-4.png | Bin {unit tests => archive}/testdata/girl-5.png | Bin {unit tests => archive}/testdata/girl.png | Bin 14 files changed, 0 insertions(+), 0 deletions(-) rename {tests/acceptance => archive}/auth.specx.js (100%) rename countries.json => archive/countries.json (100%) rename {tests/unit => archive}/index.specx.js (100%) rename test.sh => archive/test.sh (100%) rename {unit tests => archive}/testdata/boy-2.png (100%) rename {unit tests => archive}/testdata/boy-3.png (100%) rename {unit tests => archive}/testdata/boy-4.png (100%) rename {unit tests => archive}/testdata/boy-5.png (100%) rename {unit tests => archive}/testdata/boy.png (100%) rename {unit tests => archive}/testdata/girl-2.png (100%) rename {unit tests => archive}/testdata/girl-3.png (100%) rename {unit tests => archive}/testdata/girl-4.png (100%) rename {unit tests => archive}/testdata/girl-5.png (100%) rename {unit tests => archive}/testdata/girl.png (100%) diff --git a/tests/acceptance/auth.specx.js b/archive/auth.specx.js similarity index 100% rename from tests/acceptance/auth.specx.js rename to archive/auth.specx.js diff --git a/countries.json b/archive/countries.json similarity index 100% rename from countries.json rename to archive/countries.json diff --git a/tests/unit/index.specx.js b/archive/index.specx.js similarity index 100% rename from tests/unit/index.specx.js rename to archive/index.specx.js diff --git a/test.sh b/archive/test.sh similarity index 100% rename from test.sh rename to archive/test.sh diff --git a/unit tests/testdata/boy-2.png b/archive/testdata/boy-2.png similarity index 100% rename from unit tests/testdata/boy-2.png rename to archive/testdata/boy-2.png diff --git a/unit tests/testdata/boy-3.png b/archive/testdata/boy-3.png similarity index 100% rename from unit tests/testdata/boy-3.png rename to archive/testdata/boy-3.png diff --git a/unit tests/testdata/boy-4.png b/archive/testdata/boy-4.png similarity index 100% rename from unit tests/testdata/boy-4.png rename to archive/testdata/boy-4.png diff --git a/unit tests/testdata/boy-5.png b/archive/testdata/boy-5.png similarity index 100% rename from unit tests/testdata/boy-5.png rename to archive/testdata/boy-5.png diff --git a/unit tests/testdata/boy.png b/archive/testdata/boy.png similarity index 100% rename from unit tests/testdata/boy.png rename to archive/testdata/boy.png diff --git a/unit tests/testdata/girl-2.png b/archive/testdata/girl-2.png similarity index 100% rename from unit tests/testdata/girl-2.png rename to archive/testdata/girl-2.png diff --git a/unit tests/testdata/girl-3.png b/archive/testdata/girl-3.png similarity index 100% rename from unit tests/testdata/girl-3.png rename to archive/testdata/girl-3.png diff --git a/unit tests/testdata/girl-4.png b/archive/testdata/girl-4.png similarity index 100% rename from unit tests/testdata/girl-4.png rename to archive/testdata/girl-4.png diff --git a/unit tests/testdata/girl-5.png b/archive/testdata/girl-5.png similarity index 100% rename from unit tests/testdata/girl-5.png rename to archive/testdata/girl-5.png diff --git a/unit tests/testdata/girl.png b/archive/testdata/girl.png similarity index 100% rename from unit tests/testdata/girl.png rename to archive/testdata/girl.png From 9b8809a969e64977e569ca896702fd5205d8b862 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 15 Sep 2019 15:02:16 +0100 Subject: [PATCH 14/19] deleted old test file --- tests/unit/accounts.specx.js | 62 ------------------------------------ 1 file changed, 62 deletions(-) delete mode 100644 tests/unit/accounts.specx.js diff --git a/tests/unit/accounts.specx.js b/tests/unit/accounts.specx.js deleted file mode 100644 index ac9ff3a..0000000 --- a/tests/unit/accounts.specx.js +++ /dev/null @@ -1,62 +0,0 @@ - -'use strict' - -const accounts = require('../../modules/accounts.js') -//jest.mock('sqlite-async') - -beforeAll( async() => { - console.log('Jest starting!') - // we insert a single user into the database - const sqlite = require('sqlite-async') - const bcrypt = require('bcrypt-promise') - const pass = await bcrypt.hash('goodPassword', 10) - const db = await sqlite.open('./website.db') - await db.run('DROP TABLE IF EXISTS users;') - await db.run('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, user TEXT, pass TEXT);') - console.log(`INSERT INTO users(user, pass) VALUES("jdoe", "${pass}"`) - await db.run(`INSERT INTO users(user, pass) VALUES("jdoe", "${pass}")`) - await db.close() - console.log('database built') -}) - -describe('checkCredentials()', () => { - test('returns true if valid username and password', async done => { - expect.assertions(1) - try { - const result = await accounts.checkCredentials('jdoe', 'goodPassword') - expect(result).toBe(true) - } catch(err) { - console.log(`ERROR: ${err.message}`) - } finally { - done() - } - }) - - test('throws error if invalid username', async done => { - expect.assertions(1) - try { - await accounts.checkCredentials('johndoe', 'goodPassword') - //expect(result).toBe(true) - } catch(err) { - expect(err.message).toBe('invalid username') - } finally { - done() - } - }) - - test('throws error if invalid password', async done => { - expect.assertions(1) - try { - await accounts.checkCredentials('jdoe', 'badPassword') - //expect(result).toBe(true) - } catch(err){ - expect(err.message).toBe('invalid password') - } finally { - done() - } - }) -}) - -describe('addUser()', () => { - // TODO -}) From ffb83144dbcfce246f507488d34af197f0747934 Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Mon, 30 Sep 2019 20:07:29 +0100 Subject: [PATCH 15/19] updated the getting started notes --- README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 19df846..96895a4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,15 @@ # Assignment Template -This repository contains the base files for the assignment. To make use of this carry out the following steps: +This repository contains the base files for the assignment. You will need to create a _private duplicate_ in your module organisation. Carry out the following steps, taken from the [GitHub documentation](https://help.github.com/en/enterprise/2.16/user/articles/duplicating-a-repository): -1. Fork this repository but change its name (replace `xxx` with your university username): - 1. If this is your original assignment, `xxx-coursework`. - 2. If this is your resit assignment code, `xxx-resit`. -2. Replace the contents of this file with the details of the topic you have been assigned. +Temporarily clone this repository to your development computer: + +`git clone https://github.coventry.ac.uk/web/template-dynamic-websites.git` + +Create a new **private** repository in the module organisation on the GitHub server and copy the _clone url_ to the clipboard (the one that begins with `https://` and ends in `.git`. + +Mirror Push to this new repository, replacing xxx with the url from the clipboard: + +`git push --mirror xxx` + +Once you are sure the code is in your new repository, delete the temporary local repository. From eb5214484f58e9e4325bedbbcf5487e8a284e3c4 Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Mon, 30 Sep 2019 20:08:37 +0100 Subject: [PATCH 16/19] notes on repo naming --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96895a4..7fc5bd9 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Temporarily clone this repository to your development computer: `git clone https://github.coventry.ac.uk/web/template-dynamic-websites.git` -Create a new **private** repository in the module organisation on the GitHub server and copy the _clone url_ to the clipboard (the one that begins with `https://` and ends in `.git`. +Create a new **private** repository in the module organisation on the GitHub server and copy the _clone url_ to the clipboard (the one that begins with `https://` and ends in `.git`. The repository name should be your username (the one you use to log into the University computers). Mirror Push to this new repository, replacing xxx with the url from the clipboard: From 9aee9a4ae3fcf7c665c2a085932edbcbb55cdff1 Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Mon, 30 Sep 2019 20:10:37 +0100 Subject: [PATCH 17/19] changed repo directory name --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7fc5bd9..1b1109f 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ This repository contains the base files for the assignment. You will need to create a _private duplicate_ in your module organisation. Carry out the following steps, taken from the [GitHub documentation](https://help.github.com/en/enterprise/2.16/user/articles/duplicating-a-repository): -Temporarily clone this repository to your development computer: +Temporarily clone this repository to your development computer. This will create a directory on your computer called `temp` which contains the repository files: -`git clone https://github.coventry.ac.uk/web/template-dynamic-websites.git` +`git clone https://github.coventry.ac.uk/web/template-dynamic-websites.git temp` Create a new **private** repository in the module organisation on the GitHub server and copy the _clone url_ to the clipboard (the one that begins with `https://` and ends in `.git`. The repository name should be your username (the one you use to log into the University computers). -Mirror Push to this new repository, replacing xxx with the url from the clipboard: +Mirror Push to this new repository, replacing xxx with the url from the clipboard making sure you are _in_ the `temp/` directory: -`git push --mirror xxx` +`cd temp/ && git push --mirror xxx` Once you are sure the code is in your new repository, delete the temporary local repository. From b9f5deb52e5437429792a99cf85fe3d246901064 Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Mon, 30 Sep 2019 20:11:51 +0100 Subject: [PATCH 18/19] command to remove dir --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1b1109f..7fc76ce 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,5 @@ Mirror Push to this new repository, replacing xxx with the url from the clipboar `cd temp/ && git push --mirror xxx` Once you are sure the code is in your new repository, delete the temporary local repository. + +`cd .. && rm -rf temp/` From 0c0589ce7bbbf70edd97a704d948694d1d14858f Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Tue, 1 Oct 2019 07:48:30 +0100 Subject: [PATCH 19/19] added notes on git config --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 7fc76ce..e6319ce 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,11 @@ Mirror Push to this new repository, replacing xxx with the url from the clipboar Once you are sure the code is in your new repository, delete the temporary local repository. `cd .. && rm -rf temp/` + +Your private repository on GitHub will now contain a complete copy of this template including the commits that were already made. You can now start your assignment by carrying out the following steps: + +Clone your private repository + +Change your **local config settings**. This is a vital step otherwise your commits won't show on the GitHub _graph_ and your grade will be affected. + +Start working on the assignment.