diff --git a/lib/mem-server.js b/lib/mem-server.js index 0531820..b27c234 100644 --- a/lib/mem-server.js +++ b/lib/mem-server.js @@ -2,7 +2,6 @@ import fs from 'fs'; import chalk from 'chalk'; import stringUtils from 'ember-cli-string-utils'; import { primaryKeyTypeSafetyCheck } from './mem-server/utils'; -import startServer from './mem-server/server'; const inflect = require('i')(); // NOTE: make this ES6 import const ENVIRONMENT_IS_NODE = typeof global === 'object'; @@ -16,6 +15,8 @@ if (!fs.existsSync('memserver')) { throw new Error(chalk.red('/memserver/server.js doesn\'t exist for this directory!')); } +import startServer from './mem-server/server'; + const modelFileNames = fs.readdirSync(`${process.cwd()}/memserver/models`); const targetNamespace = ENVIRONMENT_IS_NODE ? global : window; @@ -26,7 +27,7 @@ targetNamespace.MemServer = { start(options={ logging: true }) { // scenario starts // configurations - + this.DB = resetDatabase(this.Models); this.Server = startServer(options); // NOTE: maybe customize it here, make it shorter diff --git a/lib/mem-server/pretender-hacks.js b/lib/mem-server/pretender-hacks.js index 0c86084..54b07c4 100644 --- a/lib/mem-server/pretender-hacks.js +++ b/lib/mem-server/pretender-hacks.js @@ -28,9 +28,11 @@ window.Pretender.prototype.handleRequest = function(request) { var path = request.url; var handler = this._handlerFor(verb, path, request); + console.log('HANDLER REQUST IS CALLED'); + console.log('handler:'); + console.log(handler); var _handleRequest = function(result) { var statusCode, headers, body; - if (Array.isArray(result) && result.length === 3) { statusCode = result[0], headers = pretender.prepareHeaders(result[1]), @@ -59,7 +61,7 @@ window.Pretender.prototype.handleRequest = function(request) { statusCode = getDefaultStatusCode(verb); headers = pretender.prepareHeaders({ 'Content-Type': 'application/json' }); body = pretender.prepareBody(targetResult, headers); - + console.log('UPCOMING RESPONSE PARAMS', statusCode, headers, body); pretender.handleResponse(request, async, function() { request.respond(statusCode, headers, body); pretender.handledRequest(verb, path, request); diff --git a/lib/mem-server/server.js b/lib/mem-server/server.js index f89644c..a3c1144 100644 --- a/lib/mem-server/server.js +++ b/lib/mem-server/server.js @@ -1,8 +1,20 @@ import chalk from 'chalk'; -const Server = require(`${process.cwd()}/memserver/server`).default; // NOTE: make this ES6 import - export default function(options) { + const Server = require(`${process.cwd()}/memserver/server`).default; // NOTE: make this ES6 import + + // HACK: Pretender REST defaults hack: For better UX + ['get', 'put', 'post', 'delete'].forEach((verb) => { + window.Pretender.prototype[verb] = function (path, handler, async) { + const { urlPrefix, namespace } = options; // NOTE: this doesnt allow for this.namespace declaration in the server.js + const fullPath = (urlPrefix || '') + (namespace ? ('/' + namespace) : '') + path; + const targetHandler = handler || getDefaultRouteHandler(verb, fullPath); + + return this.register(verb.toUpperCase(), fullPath, targetHandler, async || options.timing); + } + }); + // END: Pretender REST default hack: FOr better UX + let pretender = new window.Pretender(function() { const MemServer = chalk.cyan('[MemServer]'); @@ -23,18 +35,6 @@ export default function(options) { } }); - // HACK: Pretender REST defaults hack: For better UX - ['get', 'put', 'post', 'delete'].forEach((verb) => { - window.Pretender.prototype[verb] = function (path, handler, async) { - const { urlPrefix, namespace } = options; // NOTE: this doesnt allow for this.namespace declaration in the server.js - const fullPath = (urlPrefix || '') + (namespace ? ('/' + namespace) : '') + path; - const targetHandler = handler || getDefaultRouteHandler(verb, fullPath); - - return this.register(verb, fullPath, targetHandler, async || options.timing); - } - }); - // END: Pretender REST default hack: FOr better UX - // NOTE: maybe passthrough() api here // NOTE: maybe this.resource() diff --git a/package.json b/package.json index a2cd677..a8be72f 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "route-recognizer": "^0.3.3" }, "devDependencies": { - "chai": "^4.1.2", "faker": "^4.1.0", "jquery": "^3.2.1", "mkdirp": "^0.5.1", diff --git a/test/mem-server.server.js b/test/mem-server.server.js index 6fb258d..23040e9 100644 --- a/test/mem-server.server.js +++ b/test/mem-server.server.js @@ -1,323 +1,452 @@ -// // TODO: test Response first -// const assert = require('assert'); -// const AUTHENTICATION_TOKEN = 'ec25fc7b-6ee2-4bda-b57c-6c9867b30ff4'; -// -// describe('MemServer.Server', function() { -// before(function() { -// fs.mkdirSync(`./memserver`); -// fs.mkdirSync(`./memserver/models`); -// fs.writeFileSync(`${process.cwd()}/memserver/models/user.js`, ` -// import Model from '${process.cwd()}/lib/mem-server/model'; -// -// export default Model({ -// findFromToken(request) { -// const authorizationHeader = request.requestHeaders.Authorization; -// const token = authorizationHeader ? authorizationHeader.slice(4) : null; -// -// console.log('token'); -// -// return this.findBy({ authentication_token: token }); -// } -// }); -// `); -// fs.writeFileSync(`${process.cwd()}/memserver/models/photo.js`, ` -// import Model from '${process.cwd()}/lib/mem-server/model'; -// -// export default Model({ -// defaultAttributes: { -// is_public: true, -// name() { -// return 'Some default name'; -// } -// } -// }); -// `); -// fs.writeFileSync(`${process.cwd()}/memserver/models/photo-comment.js`, ` -// import Model from '${process.cwd()}/lib/mem-server/model'; -// -// export default Model({ -// defaultAttributes: { -// inserted_at() { -// return '2017-10-25T20:54:04.447Z'; -// }, -// is_important: true -// } -// }); -// `); -// fs.mkdirSync(`./memserver/fixtures`); -// fs.writeFileSync(`${process.cwd()}/memserver/fixtures/photo-comments.js`, `export default [ -// { -// id: 1, -// email: 'contact@izelnakri.com', -// username: 'izelnakri', -// authentication_token: '${AUTHENTICATION_TOKEN}' -// } -// ];`); -// fs.writeFileSync(`${process.cwd()}/memserver/fixtures/photos.js`, `export default [ -// { -// id: 1, -// name: 'Ski trip', -// href: 'ski-trip.jpeg', -// is_public: false -// }, -// { -// id: 2, -// name: 'Family photo', -// href: 'family-photo.jpeg', -// is_public: true -// }, -// { -// id: 3, -// name: 'Selfie', -// href: 'selfie.jpeg', -// is_public: false -// } -// ];`); -// fs.writeFileSync(`${process.cwd()}/memserver/fixtures/photo-comments.js`, `export default [ -// { -// uuid: '499ec646-493f-4eea-b92e-e383d94182f4', -// content: 'What a nice photo!', -// photo_id: 1, -// user_id: 1 -// }, -// { -// uuid: '77653ad3-47e4-4ec2-b49f-57ea36a627e7', -// content: 'I agree', -// photo_id: 1, -// user_id: 2 -// }, -// { -// uuid: 'd351963d-e725-4092-a37c-1ca1823b57d3', -// content: 'I was kidding', -// photo_id: 1, -// user_id: 1 -// }, -// { -// uuid: '374c7f4a-85d6-429a-bf2a-0719525f5f29', -// content: 'Interesting indeed', -// photo_id: 2, -// user_id: 1 -// } -// ];`); -// }); -// -// beforeEach(function() { -// Object.keys(require.cache).forEach((key) => delete require.cache[key]); -// }); -// -// after(function(done) { -// if (fs.existsSync(`${process.cwd()}/memserver`)) { -// rimraf.sync(`${process.cwd()}/memserver`); -// } -// -// done(); -// }); -// -// // describe('route shortcuts work', function() { -// // before(function() { -// // fs.writeFileSync(`${process.cwd()}/memserver/server.js`, ` -// // export default function(Models) { -// // this.post('/photos'); -// // this.get('/photos'); -// // this.get('/photos/:id'); -// // this.put('/photos/:id'); -// // this.delete('/photos/:id'); -// // } -// // `); -// // }); -// // -// // it('POST /resources work with shortcut', function() { -// // -// // }); -// // -// // it('GET /resources works with shortcut', function() { -// // -// // }); -// // -// // it('GET /resources/:id works with shortcut', function() { -// // -// // }); -// // -// // it('PUT /resources/:id works with shortcut', function() { -// // -// // }); -// // -// // it('DELETE /resources/:id works with shortcut', function() { -// // -// // }); -// // }); -// -// describe('server can process custom headers and responses', function() { -// before(function() { -// fs.writeFileSync(`${process.cwd()}/memserver/server.js`, ` -// import Response from ''; -// -// export default function(Models) { -// this.post('/photos', ({ headers }) => { -// const user = User.findFromToken(request); -// -// if (!user) { -// return Response(401, { error: 'Unauthorized' }); -// } -// -// const photo = Photo.insert({ user_id: user.id }); -// -// return Photo.serialize(photo); -// }); -// -// this.get('/photos'), ({ headers }) => { -// const user = User.findFromToken(request); -// -// if (!user) { -// return Response(404, { error: 'Not found' }); -// } -// -// const photos = Photo.findAll({ user_id: user.id }); -// -// return Photo.serialize(photos); -// }); -// -// this.get('/photos/:id', ({ params, headers }) => { -// const user = User.findFromToken(request); -// -// if (!user) { -// return Response(401, { error: 'Unauthorized' }); -// } -// -// const photo = Photo.findBy({ id: params.id, user_id: user.id }); -// -// return photo ? Photo.serialize(photo) : Response(404, { error: 'Not found'}) -// }); -// -// this.put('/photos/:id', ({ params, headers }) => { -// const user = User.findFromToken(request); -// -// if (user && Photo.findBy({ id: params.id, user_id: user.id })) { -// return Photo.update(request.params); -// } -// }); -// -// this.delete('/photos/:id', ({ params, headers }) => { -// const user = User.findFromToken(request); -// -// if (user && Photo.findBy({ id: params.id, user_id: user.id })) { -// return Photo.delete(request.params); // NOTE: what to do with this response -// } -// }); -// } -// `); -// }); -// -// it('POST /resources work with custom headers and responses', function() { -// -// }); -// -// // it('GET /resources works with custom headers and responses', function() { -// // -// // }); -// // -// // it('GET /resources/:id works with custom headers and responses', function() { -// // -// // }); -// // -// // it('PUT /resources/:id works with custom headers and responses', function() { -// // -// // }); -// // -// // it('DELETE /resources/:id works with custom headers and responses', function() { -// // -// // }); -// }); -// }); -// -// // describe('server can process custom queryParams and responses', function() { -// // fs.writeFileSync(`${process.cwd()}/memserver/server.js`, ` -// // import Response from ''; -// // -// // export default function(Models) { -// // this.post('/photos', ({ headers, queryParams }) => { -// // const user = User.findFromToken(request); -// // -// // if (!user && queryParams.is_admin) { -// // return Response(401, { error: 'Unauthorized' }); -// // } -// // -// // const photo = Photo.insert({ user_id: user.id }); -// // -// // return Photo.serialize(photo); -// // }); -// // -// // this.get('/photos'), ({ headers, queryParams }) => { -// // const user = User.findFromToken(request); -// // -// // if (!user) { -// // return Response(404, { error: 'Not found' }); -// // } -// // -// // const photos = Photo.findAll(Object.assign({ user_id: user.id }, queryParams)); -// // -// // if (!photos) { // NOTE: change here maybe -// // return Response(404, { error: 'Not found' }); -// // } -// // -// // return Photo.serialize(photos); -// // }); -// // -// // this.get('/photos/:id', ({ params, headers, queryParams }) => { -// // const user = User.findFromToken(request); -// // -// // if (!user) { -// // return Response(401, { error: 'Unauthorized' }); -// // } else if (queryParams.nonce === '123123123') { -// // const photo = Photo.findBy({ id: params.id, user_id: user.id }); -// // -// // return photo ? Photo.serialize(photo) : Response(404, { error: 'Not found'}) -// // } -// // }); -// // -// // this.put('/photos/:id', ({ params, headers, queryParams }) => { -// // const user = User.findFromToken(request); -// // const validRequest = user && queryParams.nonce === '123123123' && -// // Photo.findBy({ id: params.id, user_id: user.id }); -// // -// // if (validRequest) { -// // return Photo.update(request.params); -// // } -// // }); -// // -// // this.delete('/photos/:id', ({ params, headers }) => { -// // const user = User.findFromToken(request); -// // -// // if (!(queryParams.nonce === '123123123') { -// // return Response(500, { error: 'Invalid nonce to delete a photo' }); -// // } else if (user && Photo.findBy({ id: params.id, user_id: user.id })) { -// // return Photo.delete(request.params); // NOTE: what to do with this response -// // } -// // }); -// // } -// // `); -// -// // it('POST /resources work with custom headers, queryParams and responses', function() { -// // -// // }); -// // -// // it('GET /resources works with custom headers, queryParams and responses', function() { -// // -// // }); -// // -// // it('GET /resources/:id works with custom headers, queryParams and responses', function() { -// // -// // }); -// // -// // it('PUT /resources/:id works with custom headers, queryParams and responses', function() { -// // -// // }); -// // -// // it('DELETE /resources/:id works with custom headers, queryParams and responses', function() { -// // -// // }); -// // }); -// -// // TODO: passthrough works -// // NOTE: by default returning undefined should return Response(500) ? -// }); +// TODO: test Response first +const assert = require('assert'); +const fs = require('fs'); +const rimraf = require('rimraf'); + +const AUTHENTICATION_TOKEN = 'ec25fc7b-6ee2-4bda-b57c-6c9867b30ff4'; +const AJAX_AUTHORIZATION_HEADERS = { + 'Content-Type': 'application/json', 'Authorization': `Token ${AUTHENTICATION_TOKEN}` +}; + +describe('MemServer.Server functionality', function() { + before(function() { + fs.mkdirSync(`./memserver`); + fs.mkdirSync(`./memserver/models`); + fs.writeFileSync(`${process.cwd()}/memserver/models/user.js`, ` + import Model from '${process.cwd()}/lib/mem-server/model'; + + export default Model({ + findFromToken(request) { + const authorizationHeader = request.requestHeaders.Authorization; + const token = authorizationHeader ? authorizationHeader.slice(6) : null; + + return this.findBy({ authentication_token: token }); + } + }); + `); + fs.writeFileSync(`${process.cwd()}/memserver/models/photo.js`, ` + import Model from '${process.cwd()}/lib/mem-server/model'; + + export default Model({ + defaultAttributes: { + is_public: true, + name() { + return 'Some default name'; + } + } + }); + `); + fs.writeFileSync(`${process.cwd()}/memserver/models/photo-comment.js`, ` + import Model from '${process.cwd()}/lib/mem-server/model'; + + export default Model({ + defaultAttributes: { + inserted_at() { + return '2017-10-25T20:54:04.447Z'; + }, + is_important: true + } + }); + `); + fs.mkdirSync(`./memserver/fixtures`); + fs.writeFileSync(`${process.cwd()}/memserver/fixtures/users.js`, `export default [ + { + id: 1, + email: 'contact@izelnakri.com', + username: 'izelnakri', + authentication_token: '${AUTHENTICATION_TOKEN}' + } + ];`); + fs.writeFileSync(`${process.cwd()}/memserver/fixtures/photos.js`, `export default [ + { + id: 1, + name: 'Ski trip', + href: 'ski-trip.jpeg', + is_public: false, + user_id: 1 + }, + { + id: 2, + name: 'Family photo', + href: 'family-photo.jpeg', + is_public: true, + user_id: 1 + }, + { + id: 3, + name: 'Selfie', + href: 'selfie.jpeg', + is_public: false, + user_id: 1 + } + ];`); + fs.writeFileSync(`${process.cwd()}/memserver/fixtures/photo-comments.js`, `export default [ + { + uuid: '499ec646-493f-4eea-b92e-e383d94182f4', + content: 'What a nice photo!', + photo_id: 1, + user_id: 1 + }, + { + uuid: '77653ad3-47e4-4ec2-b49f-57ea36a627e7', + content: 'I agree', + photo_id: 1, + user_id: 2 + }, + { + uuid: 'd351963d-e725-4092-a37c-1ca1823b57d3', + content: 'I was kidding', + photo_id: 1, + user_id: 1 + }, + { + uuid: '374c7f4a-85d6-429a-bf2a-0719525f5f29', + content: 'Interesting indeed', + photo_id: 2, + user_id: 1 + } + ];`); + }); + + beforeEach(function() { + Object.keys(require.cache).forEach((key) => delete require.cache[key]); + }); + + after(function(done) { + if (fs.existsSync(`${process.cwd()}/memserver`)) { + rimraf.sync(`${process.cwd()}/memserver`); + } + + done(); + }); + + // describe('route shortcuts work', function() { + // before(function() { + // fs.writeFileSync(`${process.cwd()}/memserver/server.js`, ` + // export default function(Models) { + // this.post('/photos'); + // this.get('/photos'); + // this.get('/photos/:id'); + // this.put('/photos/:id'); + // this.delete('/photos/:id'); + // + // } + // `); + // }); + // NOTE: add this.resource and this.passthrough here + + // it('POST /resources work with shortcut', function(done) { + // const MemServer = require('../index.js'); + // const { Photo } = MemServer.Models; + // + // MemServer.start(); + // window.$.ajaxSetup({ headers: { 'Content-Type': 'application/json' } }); + // + // assert.equal(Photo.count(), 3); + // + // window.$.ajax({ + // type: 'POST', url: '/photos', headers: { 'Content-Type': 'application/json' } + // }, (data, textStatus, jqXHR) => { + // assert.equal(jqXHR.status, 201); + // assert.deepEqual(data, { is_public: true, name: 'Some default name', id: 4, user_id: 1 }); + // assert.equal(Photo.count(), 4); + // + // done(); + // }); + // }); + + // it('GET /resources works with shortcut', function(done) { + // const MemServer = require('../index.js'); + // const { Photo } = MemServer.Models; + // + // MemServer.start(); + // window.$.ajaxSetup({ headers: { 'Content-Type': 'application/json' } }); + // + // assert.equal(Photo.count(), 3); + // + // window.$.getJSON('/photos', (data, textStatus, jqXHR) => { + // assert.equal(jqXHR.status, 200); + // assert.deepEqual(data, { photos: Photo.serializer(Photo.findAll()) }); + // assert.equal(Photo.count(), 3); + // + // done(); + // }); + // }); + // + // it('GET /resources/:id works with shortcut', function(done) { + // const MemServer = require('../index.js'); + // const { Photo } = MemServer.Models; + // + // MemServer.start(); + // window.$.ajaxSetup({ headers: { 'Content-Type': 'application/json' } }); + // + // window.$.getJSON('/photos/1', (data, textStatus, jqXHR) => { + // assert.equal(jqXHR.status, 200); + // assert.deepEqual(data, { photos: Photo.serializer(Photo.find(1)) }); + // + // done(); + // }); + // }); + // + // it('PUT /resources/:id works with shortcut', function(done) { + // const MemServer = require('../index.js'); + // const { Photo } = MemServer.Models; + // + // MemServer.start(); + // window.$.ajaxSetup({ headers: { 'Content-Type': 'application/json' } }); + // + // assert.equal(Photo.find(1).name, 'Ski trip') + // + // window.$.ajax({ + // type: 'PUT', + // url: '/photos/1', + // headers: { 'Content-Type': 'application/json' }, + // data: { photo: { id: 1, title: 'New custom title'} } + // }, (data, textStatus, jqXHR) => { + // const photo = Photo.find(1); + // + // assert.equal(jqXHR.status, 200); + // assert.deepEqual(data, { photo: Photo.serializer(photo) }); + // assert.equal(photo.name, 'New custom title'); + // + // done(); + // }); + // }); + // + // it('DELETE /resources/:id works with shortcut', function(done) { + // const MemServer = require('../index.js'); + // const { Photo } = MemServer.Models; + // + // MemServer.start(); + // window.$.ajaxSetup({ headers: { 'Content-Type': 'application/json' } }); + // + // assert.equal(Photo.count(), 3); + // + // window.$.ajax({ + // type: 'DELETE', + // url: '/photos/1', + // headers: { 'Content-Type': 'application/json' } + // }, (data, textStatus, jqXHR) => { + // assert.equal(jqXHR.status, 204); + // assert.deepEqual(data, {}); + // assert.equal(Photo.count(), 2); + // assert.equal(PHoto.find(1), undefined); + // + // done(); + // }); + // }); + // }); + + describe('server can process custom headers and responses', function() { + before(function() { + fs.writeFileSync(`${process.cwd()}/memserver/server.js`, ` + import Response from '../lib/mem-server/response'; + + export default function({ User, Photo }) { + this.post('/photos', (request) => { + const user = User.findFromToken(request); + console.log('user is', user); + + if (!user) { + return Response(401, { error: 'Unauthorized' }); + } + + const photo = Photo.insert({ user_id: user.id }); + + return Photo.serialize(photo); + }); + + this.get('/photos', (request) => { + const user = User.findFromToken(request); + + if (!user) { + return Response(404, { error: 'Not found' }); + } + + const photos = Photo.findAll({ user_id: user.id }); + + return Photo.serialize(photos); + }); + + this.get('/photos/:id', ({ params, headers }) => { + const user = User.findFromToken(request); + + if (!user) { + return Response(401, { error: 'Unauthorized' }); + } + + const photo = Photo.findBy({ id: params.id, user_id: user.id }); + + return photo ? Photo.serialize(photo) : Response(404, { error: 'Not found'}) + }); + + this.put('/photos/:id', ({ params, headers }) => { + const user = User.findFromToken(request); + + if (user && Photo.findBy({ id: params.id, user_id: user.id })) { + return Photo.update(request.params); + } + }); + + this.delete('/photos/:id', ({ params, headers }) => { + const user = User.findFromToken(request); + + if (user && Photo.findBy({ id: params.id, user_id: user.id })) { + return Photo.delete(request.params); // NOTE: what to do with this response + } + }); + } + `); + }); + + it('POST /resources work with custom headers and responses', async function() { + this.timeout(5000); + + const MemServer = require('../index.js'); + const { Photo, PhotoComment } = MemServer.Models; + + MemServer.start(); + window.$.ajaxSetup({ headers: { 'Content-Type': 'application/json' } }); + + assert.equal(Photo.count(), 3); + + await window.$.post('/photos').catch((jqXHR) => { + assert.equal(jqXHR.status, 401); + assert.deepEqual(jqXHR.responseJSON, { error: 'Unauthorized' }); + }); + + await window.$.ajax({ + type: 'POST', url: '/photos', headers: AJAX_AUTHORIZATION_HEADERS + }).then((data, textStatus, jqXHR) => { + assert.equal(jqXHR.status, 201); + assert.deepEqual(data, { is_public: true, name: 'Some default name', id: 4, user_id: 1 }); + }); + }); + + it('GET /resources works with custom headers and responses', async function() { + const MemServer = require('../index.js'); + const { Photo, PhotoComment } = MemServer.Models; + + MemServer.start(); + + await window.$.ajax({ + type: 'GET', url: '/photos', headers: { 'Content-Type': 'application/json' } + }).catch((jqXHR) => { + assert.equal(jqXHR.status, 404); + assert.deepEqual(jqXHR.responseJSON, { error: 'Not found' }); + }); + + // TODO: error here + await window.$.ajax({ + type: 'GET', url: '/photos', headers: AJAX_AUTHORIZATION_HEADERS + }).then((data, textStatus, jqXHR) => { + assert.equal(jqXHR.status, 200); + assert.deepEqual(data, { photos: Photo.serializer(Photo.findAll())}); + }); + }); + + // it('GET /resources/:id works with custom headers and responses', function() { + // + // }); + // + // it('PUT /resources/:id works with custom headers and responses', function() { + // + // }); + // + // it('DELETE /resources/:id works with custom headers and responses', function() { + // + // }); + // }); +}); + + // describe('server can process custom queryParams and responses', function() { + // fs.writeFileSync(`${process.cwd()}/memserver/server.js`, ` + // import Response from ''; + // + // export default function(Models) { + // this.post('/photos', ({ headers, queryParams }) => { + // const user = User.findFromToken(request); + // + // if (!user && queryParams.is_admin) { + // return Response(401, { error: 'Unauthorized' }); + // } + // + // const photo = Photo.insert({ user_id: user.id }); + // + // return Photo.serialize(photo); + // }); + // + // this.get('/photos'), ({ headers, queryParams }) => { + // const user = User.findFromToken(request); + // + // if (!user) { + // return Response(404, { error: 'Not found' }); + // } + // + // const photos = Photo.findAll(Object.assign({ user_id: user.id }, queryParams)); + // + // if (!photos) { // NOTE: change here maybe + // return Response(404, { error: 'Not found' }); + // } + // + // return Photo.serialize(photos); + // }); + // + // this.get('/photos/:id', ({ params, headers, queryParams }) => { + // const user = User.findFromToken(request); + // + // if (!user) { + // return Response(401, { error: 'Unauthorized' }); + // } else if (queryParams.nonce === '123123123') { + // const photo = Photo.findBy({ id: params.id, user_id: user.id }); + // + // return photo ? Photo.serialize(photo) : Response(404, { error: 'Not found'}) + // } + // }); + // + // this.put('/photos/:id', ({ params, headers, queryParams }) => { + // const user = User.findFromToken(request); + // const validRequest = user && queryParams.nonce === '123123123' && + // Photo.findBy({ id: params.id, user_id: user.id }); + // + // if (validRequest) { + // return Photo.update(request.params); + // } + // }); + // + // this.delete('/photos/:id', ({ params, headers }) => { + // const user = User.findFromToken(request); + // + // if (!(queryParams.nonce === '123123123') { + // return Response(500, { error: 'Invalid nonce to delete a photo' }); + // } else if (user && Photo.findBy({ id: params.id, user_id: user.id })) { + // return Photo.delete(request.params); // NOTE: what to do with this response + // } + // }); + // } + // `); + + // it('POST /resources work with custom headers, queryParams and responses', function() { + // + // }); + // + // it('GET /resources works with custom headers, queryParams and responses', function() { + // + // }); + // + // it('GET /resources/:id works with custom headers, queryParams and responses', function() { + // + // }); + // + // it('PUT /resources/:id works with custom headers, queryParams and responses', function() { + // + // }); + // + // it('DELETE /resources/:id works with custom headers, queryParams and responses', function() { + // + // }); + // }); + + // TODO: passthrough works + // NOTE: by default returning undefined should return Response(500) ? +}); diff --git a/yarn.lock b/yarn.lock index 12383b8..a67bec1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,8 +3,8 @@ "@std/esm@^0.12.1": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@std/esm/-/esm-0.12.2.tgz#78009033bc95ab665c62a575d371343b13aaa1b8" + version "0.12.4" + resolved "https://registry.yarnpkg.com/@std/esm/-/esm-0.12.4.tgz#01e06a392ba577205a691d97916490406c39ef26" "@types/node@^6.0.46": version "6.0.90" @@ -15,29 +15,23 @@ abab@^1.0.3: resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" acorn-globals@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.0.0.tgz#0d771eb8c5b8e244124af193d006e21bd7d309c6" + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" dependencies: acorn "^5.0.0" acorn@^5.0.0, acorn@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.0.tgz#39fd0cf9d2dd4c82068602a404019d8ed5167b1c" ajv@^5.1.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.4.tgz#3daf9a8b67221299fdae8d82d117ed8e6c80244b" + version "5.3.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" - -amd-name-resolver@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-0.0.7.tgz#814301adfe8a2f109f6e84d5e935196efb669615" - dependencies: - ensure-posix-path "^1.0.1" ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" @@ -73,35 +67,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -assertion-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" - -async-disk-cache@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.3.tgz#6040486660b370e4051cd9fa9fee275e1fae3728" - dependencies: - debug "^2.1.3" - heimdalljs "^0.2.3" - istextorbinary "2.1.0" - mkdirp "^0.5.0" - rimraf "^2.5.3" - rsvp "^3.0.18" - username-sync "1.0.1" - -async-promise-queue@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.4.tgz#308baafbc74aff66a0bb6e7f4a18d4fe8434440c" - dependencies: - async "^2.4.1" - debug "^2.6.8" - -async@^2.4.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" - dependencies: - lodash "^4.14.0" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -122,7 +87,7 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.14.0, babel-core@^6.26.0: +babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -272,18 +237,6 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-debug-macros@^0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.1.11.tgz#6c562bf561fccd406ce14ab04f42c218cf956605" - dependencies: - semver "^5.3.0" - -babel-plugin-ember-modules-api-polyfill@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.1.0.tgz#78848cc4fcc2274882a6c15cbb23fefcdc771301" - dependencies: - ember-rfc176-data "^0.3.0" - babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -380,7 +333,7 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: @@ -493,15 +446,7 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-polyfill@^6.16.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-env@^1.5.1, babel-preset-env@^1.6.1: +babel-preset-env@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" dependencies: @@ -602,10 +547,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -"binaryextensions@1 || 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.0.0.tgz#e597d1a7a6a3558a2d1c7241a16c99965e6aa40f" - bindings@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" @@ -616,10 +557,6 @@ bl@~0.4.1: dependencies: readable-stream "~1.0.2" -blank-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/blank-object/-/blank-object-1.0.2.tgz#f990793fbe9a8c8dd013fb3219420bec81d5f4b9" - boom@4.x.x: version "4.3.1" resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" @@ -639,103 +576,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -broccoli-babel-transpiler@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.1.2.tgz#26019c045b5ea3e44cfef62821302f9bd483cabd" - dependencies: - babel-core "^6.14.0" - broccoli-funnel "^1.0.0" - broccoli-merge-trees "^1.0.0" - broccoli-persistent-filter "^1.4.0" - clone "^2.0.0" - hash-for-dep "^1.0.2" - heimdalljs-logger "^0.1.7" - json-stable-stringify "^1.0.0" - rsvp "^3.5.0" - workerpool "^2.2.1" - -broccoli-debug@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/broccoli-debug/-/broccoli-debug-0.6.3.tgz#1f33bb0eacb5db81366f0492524c82b1217eb578" - dependencies: - broccoli-plugin "^1.2.1" - fs-tree-diff "^0.5.2" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - minimatch "^3.0.3" - symlink-or-copy "^1.1.8" - tree-sync "^1.2.2" - -broccoli-funnel@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz#cddc3afc5ff1685a8023488fff74ce6fb5a51296" - dependencies: - array-equal "^1.0.0" - blank-object "^1.0.1" - broccoli-plugin "^1.3.0" - debug "^2.2.0" - exists-sync "0.0.4" - fast-ordered-set "^1.0.0" - fs-tree-diff "^0.5.3" - heimdalljs "^0.2.0" - minimatch "^3.0.0" - mkdirp "^0.5.0" - path-posix "^1.0.0" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - walk-sync "^0.3.1" - -broccoli-kitchen-sink-helpers@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz#77c7c18194b9664163ec4fcee2793444926e0c06" - dependencies: - glob "^5.0.10" - mkdirp "^0.5.1" - -broccoli-merge-trees@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz#a001519bb5067f06589d91afa2942445a2d0fdb5" - dependencies: - broccoli-plugin "^1.3.0" - can-symlink "^1.0.0" - fast-ordered-set "^1.0.2" - fs-tree-diff "^0.5.4" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - -broccoli-persistent-filter@^1.4.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.3.tgz#3511bc52fc53740cda51621f58a28152d9911bc1" - dependencies: - async-disk-cache "^1.2.1" - async-promise-queue "^1.0.3" - broccoli-plugin "^1.0.0" - fs-tree-diff "^0.5.2" - hash-for-dep "^1.0.2" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - mkdirp "^0.5.1" - promise-map-series "^0.2.1" - rimraf "^2.6.1" - rsvp "^3.0.18" - symlink-or-copy "^1.0.1" - walk-sync "^0.3.1" - -broccoli-plugin@^1.0.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#bee704a8e42da08cb58e513aaa436efb7f0ef1ee" - dependencies: - promise-map-series "^0.2.1" - quick-temp "^0.1.3" - rimraf "^2.3.4" - symlink-or-copy "^1.1.8" - -broccoli-source@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-1.1.0.tgz#54f0e82c8b73f46580cbbc4f578f0b32fca8f809" - browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" @@ -747,31 +587,14 @@ browserslist@^2.1.2: caniuse-lite "^1.0.30000744" electron-to-chromium "^1.3.24" -can-symlink@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/can-symlink/-/can-symlink-1.0.0.tgz#97b607d8a84bb6c6e228b902d864ecb594b9d219" - dependencies: - tmp "0.0.28" - caniuse-lite@^1.0.30000744: - version "1.0.30000748" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000748.tgz#44c8d6da52ad65a5d7b9dca4efebd0bdd982ba09" + version "1.0.30000755" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000755.tgz#9ce5f6e06bd75ec8209abe8853c3beef02248d65" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -chai@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" - dependencies: - assertion-error "^1.0.1" - check-error "^1.0.1" - deep-eql "^3.0.0" - get-func-name "^2.0.0" - pathval "^1.0.0" - type-detect "^4.0.0" - chalk@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" @@ -792,22 +615,14 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.0.tgz#477b3bf2f9b8fd5ca9e429747e37f724ee7af240" +chalk@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" supports-color "^4.0.0" -check-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - -clone@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -841,8 +656,8 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" convert-source-map@^1.5.0: version "1.5.0" @@ -852,12 +667,6 @@ core-js@^2.4.0, core-js@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" -core-object@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" - dependencies: - chalk "^2.0.0" - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -897,18 +706,12 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: +debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -deep-eql@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - dependencies: - type-detect "^4.0.0" - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -941,56 +744,14 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -editions@^1.1.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.3.tgz#0907101bdda20fac3cbe334c27cbd0688dc99a5b" - electron-to-chromium@^1.3.24: version "1.3.27" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" -ember-cli-babel@^6.0.0: - version "6.8.2" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.8.2.tgz#eac2785964f4743f4c815cd53c6288f00cc087d7" - dependencies: - amd-name-resolver "0.0.7" - babel-plugin-debug-macros "^0.1.11" - babel-plugin-ember-modules-api-polyfill "^2.0.1" - babel-plugin-transform-es2015-modules-amd "^6.24.0" - babel-polyfill "^6.16.0" - babel-preset-env "^1.5.1" - broccoli-babel-transpiler "^6.1.2" - broccoli-debug "^0.6.2" - broccoli-funnel "^1.0.0" - broccoli-source "^1.1.0" - clone "^2.0.0" - ember-cli-version-checker "^2.0.0" - ember-cli-string-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" -ember-cli-version-checker@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.1.0.tgz#fc79a56032f3717cf844ada7cbdec1a06fedb604" - dependencies: - resolve "^1.3.3" - semver "^5.3.0" - -ember-inflector@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-2.0.1.tgz#e9ac469ffa17992a43276bb1c9b8d87992b10d37" - dependencies: - ember-cli-babel "^6.0.0" - -ember-rfc176-data@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.0.tgz#6aee728cb521c5f80710990965027b9c320f6f08" - -ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz#a65b3e42d0b71cfc585eb774f9943c8d9b91b0c2" - escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1018,10 +779,6 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -exists-sync@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" - extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -1042,16 +799,14 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fast-ordered-set@^1.0.0, fast-ordered-set@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz#3fbb36634f7be79e4f7edbdb4a357dee25d184eb" - dependencies: - blank-object "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1070,23 +825,10 @@ formatio@1.2.0, formatio@^1.2.0: dependencies: samsam "1.x" -fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-0.5.7.tgz#315e2b098d5fe7f622880ac965b1b051868ac871" - dependencies: - heimdalljs-logger "^0.1.7" - object-assign "^4.1.0" - path-posix "^1.0.0" - symlink-or-copy "^1.1.8" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1104,16 +846,6 @@ glob@7.1.2, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.10: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -1149,15 +881,6 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" -hash-for-dep@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.2.1.tgz#6bb45822342af46cf87bf91dcdcaeb6f14103f80" - dependencies: - broccoli-kitchen-sink-helpers "^0.3.1" - heimdalljs "^0.2.3" - heimdalljs-logger "^0.1.7" - resolve "^1.4.0" - hawk@~6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" @@ -1171,19 +894,6 @@ he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" -heimdalljs-logger@^0.1.7: - version "0.1.9" - resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz#d76ada4e45b7bb6f786fc9c010a68eb2e2faf176" - dependencies: - debug "^2.2.0" - heimdalljs "^0.2.0" - -heimdalljs@^0.2.0, heimdalljs@^0.2.1, heimdalljs@^0.2.3: - version "0.2.5" - resolved "https://registry.yarnpkg.com/heimdalljs/-/heimdalljs-0.2.5.tgz#6aa54308eee793b642cff9cf94781445f37730ac" - dependencies: - rsvp "~3.2.1" - hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" @@ -1196,8 +906,8 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: whatwg-encoding "^1.0.1" @@ -1213,9 +923,9 @@ i@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" inflight@^1.0.4: version "1.0.6" @@ -1252,14 +962,6 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istextorbinary@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.1.0.tgz#dbed2a6f51be2f7475b68f89465811141b758874" - dependencies: - binaryextensions "1 || 2" - editions "^1.1.1" - textextensions "1 || 2" - jquery@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" @@ -1315,12 +1017,6 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -1329,10 +1025,6 @@ json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -1361,7 +1053,7 @@ lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" -lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4: +lodash@^4.13.1, lodash@^4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -1379,12 +1071,6 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -matcher-collection@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.0.5.tgz#2ee095438372cb8884f058234138c05c644ec339" - dependencies: - minimatch "^3.0.2" - mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" @@ -1395,7 +1081,7 @@ mime-types@^2.1.12, mime-types@~2.1.17: dependencies: mime-db "~1.30.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -1405,16 +1091,12 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.1, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mktemp@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b" - mocha@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" @@ -1442,11 +1124,7 @@ nan@^2.0.7: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" -native-promise-only@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" - -nise@^1.1.1: +nise@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/nise/-/nise-1.2.0.tgz#079d6cadbbcb12ba30e38f1c999f36ad4d6baa53" dependencies: @@ -1468,10 +1146,6 @@ oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@4.1.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" @@ -1497,7 +1171,7 @@ os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: +os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -1511,24 +1185,12 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-posix@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" - path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" dependencies: isarray "0.0.1" -pathval@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -1552,12 +1214,6 @@ private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" -promise-map-series@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.2.3.tgz#c2d377afc93253f6bd03dbb77755eb88ab20a847" - dependencies: - rsvp "^3.0.14" - pryjs@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pryjs/-/pryjs-1.0.3.tgz#9aca80098ee5dde76b7a7bb6d38ec2ac720947cd" @@ -1587,14 +1243,6 @@ qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -quick-temp@^0.1.3, quick-temp@^0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" - dependencies: - mktemp "~0.4.0" - rimraf "^2.5.4" - underscore.string "~3.3.4" - readable-stream@~1.0.2: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -1617,10 +1265,6 @@ regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - regenerator-runtime@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" @@ -1698,13 +1342,7 @@ request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -resolve@^1.3.3, resolve@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" - dependencies: - path-parse "^1.0.5" - -rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -1714,19 +1352,11 @@ route-recognizer@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.3.tgz#1d365e27fa6995e091675f7dc940a8c00353bd29" -rsvp@^3.0.14, rsvp@^3.0.18, rsvp@^3.5.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - -rsvp@~3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" - safe-buffer@^5.0.1, safe-buffer@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -samsam@1.x, samsam@^1.1.3: +samsam@1.x: version "1.3.0" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" @@ -1739,18 +1369,15 @@ semver@^5.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" sinon@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.0.1.tgz#e46146a8a8420f837bdba32e2965bd1fe43d5b05" + version "4.0.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.0.2.tgz#c81f62456d37986c84e9f522ddb9ce413bda49d2" dependencies: diff "^3.1.0" formatio "1.2.0" lodash.get "^4.4.2" lolex "^2.1.3" - native-promise-only "^0.8.1" - nise "^1.1.1" - path-to-regexp "^1.7.0" - samsam "^1.1.3" - text-encoding "0.6.4" + nise "^1.2.0" + supports-color "^4.4.0" type-detect "^4.0.0" slash@^1.0.0: @@ -1758,8 +1385,8 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" sntp@2.x.x: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b" + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: hoek "4.x.x" @@ -1773,10 +1400,6 @@ source-map@^0.5.6, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -sprintf-js@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" - sshpk@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" @@ -1829,7 +1452,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^4.0.0: +supports-color@^4.0.0, supports-color@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: @@ -1839,18 +1462,10 @@ symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.1.8.tgz#cabe61e0010c1c023c173b25ee5108b37f4b4aa3" - -text-encoding@0.6.4, text-encoding@^0.6.4: +text-encoding@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" -"textextensions@1 || 2": - version "2.1.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.1.0.tgz#1be0dc2a0dc244d44be8a09af6a85afb93c4dbc3" - through2@~0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" @@ -1858,12 +1473,6 @@ through2@~0.2.1: readable-stream "~1.1.9" xtend "~2.1.1" -tmp@0.0.28: - version "0.0.28" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" - dependencies: - os-tmpdir "~1.0.1" - to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -1880,16 +1489,6 @@ tr46@^1.0.0: dependencies: punycode "^2.1.0" -tree-sync@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.2.2.tgz#2cf76b8589f59ffedb58db5a3ac7cb013d0158b7" - dependencies: - debug "^2.2.0" - fs-tree-diff "^0.5.6" - mkdirp "^0.5.1" - quick-temp "^0.1.5" - walk-sync "^0.2.7" - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -1914,25 +1513,10 @@ type-detect@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" -underscore.string@~3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" - dependencies: - sprintf-js "^1.0.3" - util-deprecate "^1.0.2" - underscore@^1.7.0: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" -username-sync@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/username-sync/-/username-sync-1.0.1.tgz#1cde87eefcf94b8822984d938ba2b797426dae1f" - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -1945,29 +1529,15 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -walk-sync@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.2.7.tgz#b49be4ee6867657aeb736978b56a29d10fa39969" - dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" - -walk-sync@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.2.tgz#4827280afc42d0e035367c4a4e31eeac0d136f75" - dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" - webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" dependencies: - iconv-lite "0.4.13" + iconv-lite "0.4.19" whatwg-url@^6.3.0: version "6.3.0" @@ -1981,12 +1551,6 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -workerpool@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-2.3.0.tgz#86c5cbe946b55e7dc9d12b1936c8801a6e2d744d" - dependencies: - object-assign "4.1.1" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"