diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..6c9d2f9b0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +**/bower_components +**/dist +**/node_modules +**/tmp diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..94be88a9f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +coverage +dist +docs +tmp diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..76865be8a --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + root: true, + parserOptions: { + ecmaVersion: 6, + sourceType: 'module' + }, + extends: 'eslint:recommended', + env: { + browser: true, + es6: true + }, + globals: { + MathJax: true + }, + rules: {} +}; diff --git a/.gitignore b/.gitignore index 31c888147..f9013e2ed 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ .npmrc npm-debug.log testem.log +.idea # Never commit configuration or private settings config/*.yml diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 25e040aec..000000000 --- a/.jshintrc +++ /dev/null @@ -1,34 +0,0 @@ -{ - "predef": [ - "server", - "document", - "window", - "-Promise" - ], - "browser": true, - "boss": true, - "curly": false, - "debug": false, - "devel": true, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "loopfunc": true, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esnext": true, - "unused": true -} diff --git a/.template-lintrc.js b/.template-lintrc.js index b1d321789..705cbb681 100644 --- a/.template-lintrc.js +++ b/.template-lintrc.js @@ -1,4 +1,4 @@ -/* jshint node:true */ +/* eslint-env node */ 'use strict'; module.exports = { diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..fc3db56e6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,60 @@ +FROM node:boron + +RUN apt-get update \ + && apt-get install -y \ + git \ + # Next 2 needed for yarn + apt-transport-https \ + ca-certificates \ + # watchman + build-essential \ + automake \ + autoconf \ + python-dev \ + && apt-get clean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update \ + && apt-get install -y \ + yarn \ + && apt-get clean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +ENV WATCHMAN_VERSION 4.7.0 +RUN cd /tmp \ + && git clone https://github.com/facebook/watchman.git \ + && cd watchman \ + && git checkout v$WATCHMAN_VERSION \ + && ./autogen.sh \ + && ./configure --enable-statedir=/tmp \ + && make \ + && make install \ + && mv watchman /usr/local/bin/watchman \ + && rm -Rf /tmp/watchman + +RUN mkdir -p /code +WORKDIR /code + +COPY ./package.json ./yarn.lock /code/ +RUN yarn --pure-lockfile + +COPY ./.bowerrc /code/.bowerrc +COPY ./bower.json /code/bower.json +RUN ./node_modules/bower/bin/bower install --allow-root --config.interactive=false + +COPY ./ /code/ + +ARG GIT_COMMIT= +ENV GIT_COMMIT ${GIT_COMMIT} + +ARG APP_ENV=production +ENV APP_ENV ${APP_ENV} +ARG BACKEND=local +ENV BACKEND ${BACKEND} +RUN ./node_modules/ember-cli/bin/ember build --env ${APP_ENV} + +CMD ["yarn", "test"] diff --git a/addon/adapters/osf-adapter.js b/addon/adapters/osf-adapter.js index 0c05a8d78..b28c0e2a2 100644 --- a/addon/adapters/osf-adapter.js +++ b/addon/adapters/osf-adapter.js @@ -93,7 +93,7 @@ export default DS.JSONAPIAdapter.extend(HasManyQuery.RESTAdapterMixin, GenericDa * @param {String} url * @param {Boolean} isBulk **/ - _createRelated(store, snapshot, createdSnapshots, relationship, url, isBulk = false) { // jshint ignore:line + _createRelated(store, snapshot, createdSnapshots, relationship, url) { //, isBulk = false) { // TODO support bulk create? // if (isBulk) { // @@ -183,7 +183,7 @@ export default DS.JSONAPIAdapter.extend(HasManyQuery.RESTAdapterMixin, GenericDa * @param {String} url * @param {Boolean} isBulk **/ - _deleteRelated(store, snapshot, deletedSnapshots, relationship, url, isBulk = false) { // jshint ignore:line + _deleteRelated(store, snapshot, deletedSnapshots) { //, relationship, url, isBulk = false) { return this._removeRelated(...arguments).then(() => { deletedSnapshots.forEach(s => s.record.unloadRecord()); }); diff --git a/addon/components/dropzone-widget/component.js b/addon/components/dropzone-widget/component.js index f6c88e58c..ab029cf63 100644 --- a/addon/components/dropzone-widget/component.js +++ b/addon/components/dropzone-widget/component.js @@ -1,3 +1,5 @@ +/* global Dropzone */ + import Ember from 'ember'; import config from 'ember-get-config'; @@ -32,10 +34,7 @@ export default Ember.Component.extend({ let preUpload = this.get('preUpload'); let dropzoneOptions = this.get('options') || {}; - if (!this.get('buildUrl') && !preUpload && !dropzoneOptions.url) { - console.error('Need to define url somewhere'); - } - let drop = new Dropzone(`#${this.elementId}`, { // jshint ignore:line + let drop = new Dropzone(`#${this.elementId}`, { url: file => typeof this.get('buildUrl') === 'function' ? this.get('buildUrl')(file) : this.get('buildUrl'), autoProcessQueue: false, dictDefaultMessage: this.get('defaultMessage') || 'Drop files here to upload' diff --git a/addon/components/file-widget/component.js b/addon/components/file-widget/component.js index 7ce8e4598..97995d99f 100644 --- a/addon/components/file-widget/component.js +++ b/addon/components/file-widget/component.js @@ -62,12 +62,6 @@ export default Ember.Component.extend({ selectNodeFile(file) { this.send('selectFile', file.get('links.download')); }, - selectNode(node) { - console.log(node); - }, - selectFile(url) { - console.log(url); - }, preUpload() { return new Ember.RSVP.Promise((resolve) => resolve()); } diff --git a/addon/components/navbar-auth-dropdown/component.js b/addon/components/navbar-auth-dropdown/component.js index 94bd1b923..20485b3ed 100644 --- a/addon/components/navbar-auth-dropdown/component.js +++ b/addon/components/navbar-auth-dropdown/component.js @@ -63,7 +63,7 @@ export default Ember.Component.extend({ actions: { logout() { const redirectUrl = this.get('redirectUrl'); - const query = redirectUrl ? '?' + Ember.$.param({ redirect_url: redirectUrl }) : ''; + const query = redirectUrl ? '?' + Ember.$.param({ next_url: redirectUrl }) : ''; // TODO: May not work well if logging out from page that requires login- check? this.get('session').invalidate() .then(() => window.location.href = `${config.OSF.url}logout/${query}`); diff --git a/addon/components/osf-footer/template.hbs b/addon/components/osf-footer/template.hbs index 2245be837..36f900cb1 100644 --- a/addon/components/osf-footer/template.hbs +++ b/addon/components/osf-footer/template.hbs @@ -5,11 +5,11 @@

OSF

@@ -18,8 +18,8 @@

Center for Open Science

diff --git a/addon/mixins/commentable.js b/addon/mixins/commentable.js index d136a556f..5b4f03f7e 100644 --- a/addon/mixins/commentable.js +++ b/addon/mixins/commentable.js @@ -84,7 +84,7 @@ export default Ember.Mixin.create({ */ reportComment() { // TODO: Implement - console.log('Consider this comment reported'); + // console.log('Consider this comment reported'); } } }); diff --git a/addon/mixins/host-app-name.js b/addon/mixins/host-app-name.js new file mode 100644 index 000000000..72731255d --- /dev/null +++ b/addon/mixins/host-app-name.js @@ -0,0 +1,38 @@ +import config from 'ember-get-config'; +import Ember from 'ember'; + +/** + * @module ember-osf + * @submodule mixins + */ + +/** + * This mixin provides an attribute that holds the host app name, and is intended to be used with other ember-osf components. + * + * Sample usage: + * ``` + * // components/componentA.js + * import hostAppName from ‘ember-osf/mixins/host-app-name’; + * + * export default Component.extend(hostAppName); + * ``` + * + * ``` + * // components/ComponentB.js + * import hostAppName from ‘ember-osf/mixins/host-app-name’; + * + * export default Component.extend(hostAppName); + * + * ``` + * The above example will result in both component A and component B sharing the same attribute hostAppName. + * + */ + +export default Ember.Mixin.create({ + /** + * The name of the hosting app is stored in the config/environment.js. Use the package ember-get-config to + * gain access to the app's config file. + * @property {String} hostAppName + */ + hostAppName: config.appName +}); diff --git a/addon/mixins/node-actions.js b/addon/mixins/node-actions.js index 8c6f5fcac..1c4869dab 100644 --- a/addon/mixins/node-actions.js +++ b/addon/mixins/node-actions.js @@ -105,7 +105,7 @@ export default Ember.Mixin.create({ * @param {Boolean} sendEmail Whether user will receive an email when added. "default: true" * @return {Promise} Returns a promise that resolves to the newly created contributor object. */ - addContributor(userId, permission, isBibliographic, sendEmail) { // jshint ignore:line + addContributor() { return this.get('_node').addContributor(...arguments); }, /** @@ -116,7 +116,7 @@ export default Ember.Mixin.create({ * @param {Boolean} sendEmail Whether user will receive an email when added. "default: true" * @return {Promise} Returns a promise that resolves to an array of added contributors */ - addContributors(contributors, sendEmail) { // jshint ignore:line + addContributors() { return this.get('_node').addContributors(...arguments); }, /** @@ -141,7 +141,7 @@ export default Ember.Mixin.create({ * @return {Promise} Returns a promise that resolves to the updated node * with edited contributor relationships. */ - updateContributors(contributors, permissionsChanges, bibliographicChanges) { // jshint ignore:line + updateContributors() { return this.get('_node').updateContributors(...arguments); }, @@ -155,7 +155,7 @@ export default Ember.Mixin.create({ * @return {Promise} Returns a promise that resolves to the updated node * with edited contributor relationships. */ - updateContributor(contributor, permissions, bibliographic) { // jshint ignore:line + updateContributor() { return this.get('_node').updateContributor(...arguments); }, /** diff --git a/addon/mixins/osf-cookie-login-route.js b/addon/mixins/osf-cookie-login-route.js index fdefc0eb6..4f875f7c1 100644 --- a/addon/mixins/osf-cookie-login-route.js +++ b/addon/mixins/osf-cookie-login-route.js @@ -26,6 +26,6 @@ export default Ember.Mixin.create({ // Block transition until auth attempt resolves. If auth fails, let the page load normally. return this.get('session').authenticate('authenticator:osf-cookie') - .catch(err => console.log('Authentication failed: ', err)); + .catch(err => Ember.Logger.log('Authentication failed: ', err)); } }); diff --git a/addon/mixins/osf-token-login-route.js b/addon/mixins/osf-token-login-route.js index 6bb0012e9..b82dc97d3 100644 --- a/addon/mixins/osf-token-login-route.js +++ b/addon/mixins/osf-token-login-route.js @@ -35,6 +35,6 @@ export default Ember.Mixin.create({ } return this.get('session').authenticate('authenticator:osf-token', accessToken) - .catch(err => console.log('Authentication failed: ', err)); + .catch(err => Ember.Logger.log('Authentication failed: ', err)); } }); diff --git a/addon/models/file-version.js b/addon/models/file-version.js index b483b7ce2..d12ebb178 100644 --- a/addon/models/file-version.js +++ b/addon/models/file-version.js @@ -17,5 +17,6 @@ import OsfModel from './osf-model'; */ export default OsfModel.extend({ size: DS.attr('number'), + dateCreated: DS.attr('date'), contentType: DS.attr('fixstring') }); diff --git a/addon/models/preprint-provider.js b/addon/models/preprint-provider.js index bf4d11ae3..9f3c38858 100644 --- a/addon/models/preprint-provider.js +++ b/addon/models/preprint-provider.js @@ -6,6 +6,7 @@ export default OsfModel.extend({ logoPath: DS.attr('string'), bannerPath: DS.attr('string'), description: DS.attr('fixstring'), + domain: DS.attr('string'), example: DS.attr('fixstring'), advisoryBoard: DS.attr('string'), emailContact: DS.attr('fixstring'), diff --git a/addon/serializers/comment.js b/addon/serializers/comment.js index f23d6ff17..94fea1be5 100644 --- a/addon/serializers/comment.js +++ b/addon/serializers/comment.js @@ -2,7 +2,7 @@ import Ember from 'ember'; import OsfSerializer from './osf-serializer'; export default OsfSerializer.extend({ - serialize(snapshot, options) { // jshint ignore:line + serialize(snapshot) { // Add relationships field to identify comment target let serialized = this._super(...arguments); diff --git a/addon/serializers/osf-serializer.js b/addon/serializers/osf-serializer.js index 09e653caa..bba353fef 100644 --- a/addon/serializers/osf-serializer.js +++ b/addon/serializers/osf-serializer.js @@ -104,7 +104,7 @@ export default DS.JSONAPISerializer.extend({ return serialized; }, - serializeAttribute(snapshot, json, key, attribute) { // jshint ignore:line + serializeAttribute(snapshot, json, key) { // In certain cases, a field may be omitted from the server payload, but have a value (undefined) // when serialized from the model. (eg node.template_from) // Omit fields with a value of undefined before sending to the server. (but still allow null to be sent) @@ -114,7 +114,7 @@ export default DS.JSONAPISerializer.extend({ } }, - normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) { // jshint ignore:line + normalizeArrayResponse(store, primaryModelClass, payload) { // Ember data does not yet support pagination. For any request that returns more than one result, add pagination data // under meta, and then calculate total pages to be loaded. let documentHash = this._super(...arguments); diff --git a/app/mixins/host-app-name.js b/app/mixins/host-app-name.js new file mode 100644 index 000000000..ecffa26f9 --- /dev/null +++ b/app/mixins/host-app-name.js @@ -0,0 +1 @@ +export {default} from 'ember-osf/mixins/host-app-name'; diff --git a/app/mixins/keen-tracker.js b/app/mixins/keen-tracker.js index dbb4eb383..75555de90 100644 --- a/app/mixins/keen-tracker.js +++ b/app/mixins/keen-tracker.js @@ -1,9 +1,10 @@ +/* eslint-disable no-unused-vars */ // This helps ember-browserify find npm modules in ember-cli addons -import md5 from 'npm:js-md5'; // jshint ignore:line -import config from 'ember-get-config'; // jshint ignore:line -import _get from 'npm:lodash/get'; // jshint ignore:line -import Cookie from 'npm:js-cookie'; // jshint ignore:line -import keenTracking from 'npm:keen-tracking'; // jshint ignore:line +import md5 from 'npm:js-md5'; +import config from 'ember-get-config'; +import _get from 'npm:lodash/get'; +import Cookie from 'npm:js-cookie'; +import keenTracking from 'npm:keen-tracking'; export {default} from 'ember-osf/mixins/keen-tracker'; diff --git a/blueprints/.jshintrc b/blueprints/.jshintrc deleted file mode 100644 index 33f4f6f4b..000000000 --- a/blueprints/.jshintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "predef": [ - "console" - ], - "strict": false -} diff --git a/blueprints/ember-osf/index.js b/blueprints/ember-osf/index.js index 559fb60d0..4a1a29452 100644 --- a/blueprints/ember-osf/index.js +++ b/blueprints/ember-osf/index.js @@ -1,4 +1,4 @@ -/*jshint node:true*/ +/* eslint-env node */ var fs = require('fs'); var path = require('path'); diff --git a/config/coverage.js b/config/coverage.js index 0d2dde81b..d874270a2 100644 --- a/config/coverage.js +++ b/config/coverage.js @@ -1,3 +1,4 @@ +/* eslint-env node */ 'use strict'; //See https://github.com/kategengler/ember-cli-code-coverage/issues/41 diff --git a/config/environment.js b/config/environment.js index 17c660f6a..5305477a5 100644 --- a/config/environment.js +++ b/config/environment.js @@ -1,4 +1,4 @@ -/*jshint node:true*/ +/* eslint-env node */ 'use strict'; module.exports = function(/* environment, appConfig */) { diff --git a/ember-cli-build.js b/ember-cli-build.js index a3753963a..6579fb538 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -1,5 +1,4 @@ -/*jshint node:true*/ -/* global require, module */ +/* eslint-env node */ var path = require('path'); var EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); diff --git a/index.js b/index.js index 5b2ceee8e..b64344582 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,5 @@ -/* jshint node: true */ +/* eslint-env node */ +/* eslint no-console: ["error", { allow: ["warn", "error"] }] */ 'use strict'; var path = require('path'); var config = require('config'); diff --git a/package.json b/package.json index b7d3f07c7..99c30eb1b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ember-osf", - "version": "0.3.0", + "version": "0.4.0", "description": "Reusable ember models and components for interacting with the Open Science Framework", "directories": { "doc": "docs", @@ -10,7 +10,7 @@ "build": "ember build", "docs": "yuidoc", "start": "ember server", - "check-style": "./node_modules/jscs/bin/jscs .", + "check-style": "eslint .", "test": "yarn run check-style && ember test", "test:cover": "COVERAGE=true yarn test", "bump-version": "npm --no-git-tag-version version ", @@ -42,6 +42,7 @@ "ember-cli-bootstrap-sassy": "0.5.3", "ember-cli-code-coverage": "0.3.11", "ember-cli-dependency-checker": "^1.2.0", + "ember-cli-eslint": "3.0.3", "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-mirage": "0.1.13", "ember-cli-qunit": "^1.2.1", @@ -67,8 +68,8 @@ "ember-power-select": "1.0.0-alpha.5", "ember-resolver": "2.0.3", "ember-toastr": "1.4.1", + "eslint": "^3.18.0", "git-branch-is": "^0.1.0", - "jscs": "3.0.4", "loader": "2.1.0", "loader.js": "4.0.3", "moment": "^2.13.0", @@ -103,31 +104,5 @@ }, "ember-addon": { "configPath": "tests/dummy/config" - }, - "jscsConfig": { - "preset": "airbnb", - "excludeFiles": [ - "package.json", - "bower_components", - "coverage", - "dist", - "docs", - "tmp", - "vendor", - "app/locales", - "tests/unit", - "tests/integration", - "tests/helpers", - "tests/dummy/app/mirage" - ], - "requireSpacesInAnonymousFunctionExpression": false, - "requireTrailingComma": false, - "disallowTrailingComma": false, - "requirePaddingNewLinesAfterBlocks": false, - "validateIndentation": 4, - "requirePaddingNewLinesBeforeLineComments": false, - "maximumLineLength": false, - "disallowSpaceBeforeComma": false, - "requireSpacesInsideObjectBrackets": "all" } } diff --git a/test-support/factories/citation.js b/test-support/factories/citation.js new file mode 100644 index 000000000..61793977d --- /dev/null +++ b/test-support/factories/citation.js @@ -0,0 +1,8 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('citation', { + default: { + citation: () => faker.lorem.words(10) + } +}); diff --git a/test-support/factories/collection.js b/test-support/factories/collection.js new file mode 100644 index 000000000..f010027d7 --- /dev/null +++ b/test-support/factories/collection.js @@ -0,0 +1,22 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('collection', { + default: { + title: () => faker.lorem.words(3), + dateCreated: () => faker.date.past(1), + dateModified: () => faker.date.recent(1), + bookmarks: false + }, + traits: { + hasNodes: { + linkedNodes: FactoryGuy.hasMany('node', 3) + }, + hasRegistrations: { + linkedRegistrations: FactoryGuy.hasMany('registration', 3) + }, + isBookmark: { + bookmarks: true + } + } +}); diff --git a/tests/factories/comment-report.js b/test-support/factories/comment-report.js similarity index 76% rename from tests/factories/comment-report.js rename to test-support/factories/comment-report.js index 8b0de5beb..048682a44 100644 --- a/tests/factories/comment-report.js +++ b/test-support/factories/comment-report.js @@ -3,6 +3,7 @@ import faker from 'faker'; FactoryGuy.define('comment-report', { default: { - category: () => faker.random.arrayElement(['hate', 'spam', 'violence']) + category: () => faker.random.arrayElement(['hate', 'spam', 'violence']), + text: FactoryGuy.belongsTo('comment') }, }); diff --git a/tests/factories/comment.js b/test-support/factories/comment.js similarity index 78% rename from tests/factories/comment.js rename to test-support/factories/comment.js index 18463f080..6cff526ba 100644 --- a/tests/factories/comment.js +++ b/test-support/factories/comment.js @@ -28,5 +28,9 @@ FactoryGuy.define('comment', { page: 'files' }, // TODO: Add a hasReplies trait in the future to support replies- can we make reply page type match the specified parent type? + // Not sure if reply needs to have same page type for hasReplies to be useful. Can always make manual replies with relevant type + hasReplies: { + replies: FactoryGuy.hasMany('comment', 3) + } } }); diff --git a/tests/factories/contributor.js b/test-support/factories/contributor.js similarity index 59% rename from tests/factories/contributor.js rename to test-support/factories/contributor.js index 0cac37005..e5ac8d436 100644 --- a/tests/factories/contributor.js +++ b/test-support/factories/contributor.js @@ -4,7 +4,12 @@ import faker from 'faker'; FactoryGuy.define('contributor', { default: { bibliographic: () => faker.random.boolean(), - permission: () => faker.random.arrayElement(['read', 'write', 'admin']) + permission: () => faker.random.arrayElement(['read', 'write', 'admin']), // nodeID: // TODO: Field not defined in serializer. Find out meaning and add to factory. + users: FactoryGuy.belongsTo('user'), + index: () => faker.random.number(), + fullName: () => faker.lorem.words(2), + email: () => faker.internet.email(), + node: FactoryGuy.belongsTo('node') } }); diff --git a/test-support/factories/draft-registration.js b/test-support/factories/draft-registration.js new file mode 100644 index 000000000..937cd275e --- /dev/null +++ b/test-support/factories/draft-registration.js @@ -0,0 +1,13 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('draft-registration', { + default: { + registrationSupplement: () => faker.lorem.words(1), + datetimeInitiated: () => faker.date.past(1), + datetimeUpdated: () => faker.date.recent(), + branchedFrom: FactoryGuy.belongsTo('node'), + initiator: FactoryGuy.belongsTo('user'), + registrationSchema: FactoryGuy.belongsTo('metaschema') + } +}); diff --git a/tests/factories/file-provider.js b/test-support/factories/file-provider.js similarity index 88% rename from tests/factories/file-provider.js rename to test-support/factories/file-provider.js index d0989b591..eaa1c041d 100644 --- a/tests/factories/file-provider.js +++ b/test-support/factories/file-provider.js @@ -6,6 +6,7 @@ FactoryGuy.define('file-provider', { kind: 'folder', path: '/', provider: 'osfstorage', + node: FactoryGuy.belongsTo('node') }, traits: { hasFiles: { diff --git a/tests/factories/file-version.js b/test-support/factories/file-version.js similarity index 100% rename from tests/factories/file-version.js rename to test-support/factories/file-version.js diff --git a/tests/factories/file.js b/test-support/factories/file.js similarity index 100% rename from tests/factories/file.js rename to test-support/factories/file.js diff --git a/tests/factories/institution.js b/test-support/factories/institution.js similarity index 100% rename from tests/factories/institution.js rename to test-support/factories/institution.js diff --git a/test-support/factories/license.js b/test-support/factories/license.js new file mode 100644 index 000000000..5a05ee7f2 --- /dev/null +++ b/test-support/factories/license.js @@ -0,0 +1,9 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('license', { + default: { + name: () => faker.lorem.words(1), + text: () => faker.lorem.words(15) + } +}); diff --git a/tests/factories/log.js b/test-support/factories/log.js similarity index 100% rename from tests/factories/log.js rename to test-support/factories/log.js diff --git a/test-support/factories/metaschema.js b/test-support/factories/metaschema.js new file mode 100644 index 000000000..5e4776313 --- /dev/null +++ b/test-support/factories/metaschema.js @@ -0,0 +1,10 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('metaschema', { + default: { + name: () => faker.lorem.words(1), + schemaVersion: () => faker.random.number(), + schema: {} + } +}); diff --git a/test-support/factories/node-link.js b/test-support/factories/node-link.js new file mode 100644 index 000000000..774c6f938 --- /dev/null +++ b/test-support/factories/node-link.js @@ -0,0 +1,7 @@ +import FactoryGuy from 'ember-data-factory-guy'; + +FactoryGuy.define('node-link', { + default: { + targetNode: FactoryGuy.belongsTo('node') + } +}); diff --git a/tests/factories/node.js b/test-support/factories/node.js similarity index 97% rename from tests/factories/node.js rename to test-support/factories/node.js index af6ff4285..705d49c7c 100644 --- a/tests/factories/node.js +++ b/test-support/factories/node.js @@ -5,7 +5,7 @@ import permissions from 'ember-osf/const/permissions'; FactoryGuy.define('node', { default: { - title: () => faker.lorem.words(4).join(' '), + title: () => faker.lorem.words(4), description: () => faker.lorem.paragraphs(2, '\n'), // Extracted from Node model CATEGORY_MAP as of May 24, 2016 category: () => faker.random.arrayElement( diff --git a/test-support/factories/preprint-provider.js b/test-support/factories/preprint-provider.js new file mode 100644 index 000000000..124edcd9b --- /dev/null +++ b/test-support/factories/preprint-provider.js @@ -0,0 +1,27 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('preprint-provider', { + default: { + name: () => faker.lorem.words(1), + logoPath: () => '/static/img/preprint_providers/' + faker.lorem.words(1) + '.png', + bannerPath: () => '/static/img/preprint_providers/' + faker.lorem.words(1) + '.png', + description: () => faker.lorem.words(3), + advisoryBoard: () => faker.lorem.paragraphs(2), + emailContact: 'contact+fake@osf.io', + emailSupport: 'support+fake@osf.io', + headerText: () => faker.lorem.words(3), + taxonomy: FactoryGuy.hasMany('taxonomy', 20), + }, + traits: { + isOSF: { + id: 'osf' + }, + hasPreprints: { + preprints: FactoryGuy.hasMany('preprint', 5) + }, + hasLicenses: { + licensesAcceptable: FactoryGuy.hasMany('license', 3) + } + } +}); diff --git a/test-support/factories/preprint.js b/test-support/factories/preprint.js new file mode 100644 index 000000000..f504c03c1 --- /dev/null +++ b/test-support/factories/preprint.js @@ -0,0 +1,22 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('preprint', { + default: { + dateCreated: () => faker.date.past(2), + datePublished: () => faker.date.past(1), + dateModified: () => faker.date.recent(), + doi: () => '10.1000/' + String(faker.random.number()), + node: FactoryGuy.belongsTo('node'), + license: FactoryGuy.belongsTo('license'), + primaryFile: FactoryGuy.belongsTo('file'), + provider: FactoryGuy.belongsTo('preprint-provider'), + isPublished: false, + isPreprintOrphan: false + }, + traits: { + hasBeenPublished: { + isPublished: true + } + } +}); diff --git a/tests/factories/registration.js b/test-support/factories/registration.js similarity index 100% rename from tests/factories/registration.js rename to test-support/factories/registration.js diff --git a/test-support/factories/taxonomy.js b/test-support/factories/taxonomy.js new file mode 100644 index 000000000..e9689dd17 --- /dev/null +++ b/test-support/factories/taxonomy.js @@ -0,0 +1,15 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('taxonomy', { + default: { + text: () => faker.lorem.words(2), + child_count: () => faker.random.number(), + parents: null + }, + traits: { + hasParents: { + parents: () => [String(faker.random.number())] + } + } +}); diff --git a/tests/factories/user.js b/test-support/factories/user.js similarity index 89% rename from tests/factories/user.js rename to test-support/factories/user.js index 4f5a61201..99de12b33 100644 --- a/tests/factories/user.js +++ b/test-support/factories/user.js @@ -6,18 +6,17 @@ FactoryGuy.define('user', { fullName: () => faker.name.findName(), givenName: () => faker.name.firstName(), familyName: () => faker.name.lastName(), - dateRegistered: () => faker.date.past(1) }, traits: { // TODO: Consider writing tests that would force pagination of relationships (!) - has_projects: { + hasProjects: { nodes: () => FactoryGuy.hasMany('node', 3) }, - has_registrations: { + hasRegistrations: { registrations: () => FactoryGuy.hasMany('registration', 3) }, - has_institutions: { + hasInstitutions: { affiliatedInstitutions: () => FactoryGuy.hasMany('institution', 2) } } diff --git a/test-support/factories/wiki.js b/test-support/factories/wiki.js new file mode 100644 index 000000000..65280e05b --- /dev/null +++ b/test-support/factories/wiki.js @@ -0,0 +1,16 @@ +import FactoryGuy from 'ember-data-factory-guy'; +import faker from 'faker'; + +FactoryGuy.define('wiki', { + defaults: { + kind: 'file', + name: () => faker.lorem.words(2), + dateModified: () => faker.date.recent(), + contentType: 'text/markdown', + path: () => '/' + faker.lorem.words(1), + currentUserCanComment: () => faker.random.boolean(), + materializedPath: () => '/' + faker.lorem.words(1), + size: () => faker.random.number(), + node: FactoryGuy.belongsTo('node') + } +}); diff --git a/tests/.eslintrc.js b/tests/.eslintrc.js new file mode 100644 index 000000000..fbf255520 --- /dev/null +++ b/tests/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + embertest: true + } +}; diff --git a/tests/.jshintrc b/tests/.jshintrc deleted file mode 100644 index 4f9f51d89..000000000 --- a/tests/.jshintrc +++ /dev/null @@ -1,53 +0,0 @@ -{ - "predef": [ - "server", - "document", - "window", - "location", - "setTimeout", - "$", - "-Promise", - "define", - "console", - "visit", - "exists", - "fillIn", - "click", - "keyEvent", - "triggerEvent", - "find", - "findWithAssert", - "wait", - "DS", - "andThen", - "currentURL", - "currentPath", - "currentRouteName" - ], - "node": false, - "browser": false, - "boss": true, - "curly": true, - "debug": false, - "devel": false, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esnext": true, - "unused": true -} diff --git a/tests/dummy/config/environment.js b/tests/dummy/config/environment.js index 76628dff8..16877b04e 100644 --- a/tests/dummy/config/environment.js +++ b/tests/dummy/config/environment.js @@ -1,4 +1,4 @@ -/* jshint node: true */ +/* eslint-env node */ module.exports = function(environment) { @@ -38,6 +38,7 @@ module.exports = function(environment) { } ], modulePrefix: 'dummy', + appName: 'Dummy App', environment: environment, baseURL: '/', locationType: 'auto', diff --git a/tests/factories/collection.js b/tests/factories/collection.js deleted file mode 100644 index dd75221a1..000000000 --- a/tests/factories/collection.js +++ /dev/null @@ -1,10 +0,0 @@ -import FactoryGuy from 'ember-data-factory-guy'; -import faker from 'faker'; - -FactoryGuy.define('collection', { - default: { - title: faker.lorem.words(3), - dateCreated: faker.date.past(1), - dateModified: faker.date.recent(1) - } -}); diff --git a/tests/helpers/destroy-app.js b/tests/helpers/destroy-app.js index 3a0114aae..c3d4d1abb 100644 --- a/tests/helpers/destroy-app.js +++ b/tests/helpers/destroy-app.js @@ -2,5 +2,4 @@ import Ember from 'ember'; export default function destroyApp(application) { Ember.run(application, 'destroy'); - server.shutdown(); } diff --git a/tests/unit/mixins/host-app-name-test.js b/tests/unit/mixins/host-app-name-test.js new file mode 100644 index 000000000..1f44842fe --- /dev/null +++ b/tests/unit/mixins/host-app-name-test.js @@ -0,0 +1,12 @@ +import Ember from 'ember'; +import hostAppName from 'dummy/mixins/host-app-name'; +import { module, test } from 'qunit'; + +module('Unit | Mixin | host app name'); + +test('host-app-name mixin holds the hosting application name', function(assert) { + let objectA = Ember.Component.extend(hostAppName); + let componentA = objectA.create(); + assert.equal(hostAppName.detect(componentA), true); + assert.equal(componentA.get('hostAppName'), 'Dummy App'); +}); diff --git a/tests/unit/services/file-manager-test.js b/tests/unit/services/file-manager-test.js index 4e72bcd6c..7252c450f 100644 --- a/tests/unit/services/file-manager-test.js +++ b/tests/unit/services/file-manager-test.js @@ -1,7 +1,9 @@ import Ember from 'ember'; -import { moduleFor, test } from 'ember-qunit'; -import FactoryGuy, { manualSetup, mockSetup, mockUpdate, - mockTeardown, mockFindRecord, mockReload } from 'ember-data-factory-guy'; +import {moduleFor, test} from 'ember-qunit'; +import FactoryGuy, { + manualSetup, mockSetup, mockUpdate, + mockTeardown, mockFindRecord, mockReload +} from 'ember-data-factory-guy'; /* * assertions: @@ -11,16 +13,16 @@ import FactoryGuy, { manualSetup, mockSetup, mockUpdate, * - once for each key in expectedRequest.settings */ function mockWaterbutler(assert, expectedRequest, response) { - Ember.$.mockjax(function(requestSettings) { + Ember.$.mockjax(function (requestSettings) { if (requestSettings.url.indexOf(expectedRequest.url) === 0) { return { - response: function() { + response: function () { assertURL(assert, requestSettings.url, - expectedRequest.url, expectedRequest.query); + expectedRequest.url, expectedRequest.query); assertHeaders(assert, requestSettings.headers, - expectedRequest.headers); + expectedRequest.headers); assertSettings(assert, requestSettings, - expectedRequest.settings); + expectedRequest.settings); this.responseText = response.data || {}; this.status = response.status; } @@ -40,34 +42,34 @@ function assertURL(assert, actual, expected, queryParams) { assert.equal(actualBase, expected, 'correct base URL'); let expectedParams = []; - for(let key in queryParams) { + for (let key in queryParams) { expectedParams.push(`${key}=${queryParams[key]}`); } assert.deepEqual(actualParams.split('&').sort(), expectedParams.sort(), - 'correct query params'); + 'correct query params'); } // assert once for each expected header function assertHeaders(assert, actual, expected) { for (let header in expected) { assert.equal(actual[header], expected[header], - `request has expected header '${header}'`); + `request has expected header '${header}'`); } } // assert once for each expected ajax setting function assertSettings(assert, actual, expected) { for (let s in expected) { - // Check for a JSON payload - if (typeof expected[s] === 'object' && - typeof actual[s] === 'string') { - let payload = JSON.parse(actual[s]); - assert.deepEqual(payload, expected[s], - `request has expected JSON payload '${s}'`); - } else { - assert.equal(actual[s], expected[s], - `request has expected option '${s}'`); - } + // Check for a JSON payload + if (typeof expected[s] === 'object' && + typeof actual[s] === 'string') { + let payload = JSON.parse(actual[s]); + assert.deepEqual(payload, expected[s], + `request has expected JSON payload '${s}'`); + } else { + assert.equal(actual[s], expected[s], + `request has expected option '${s}'`); + } } } @@ -102,7 +104,7 @@ moduleFor('service:file-manager', 'Unit | Service | file manager', { } }); -test('getContents sends valid waterbutler request', function(assert) { +test('getContents sends valid waterbutler request', function (assert) { assert.expect(4); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -110,8 +112,8 @@ test('getContents sends valid waterbutler request', function(assert) { let request = { url: file.get('links').download, - settings: { method: 'GET' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` } + settings: {method: 'GET'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`} }; let response = { status: 200, @@ -119,16 +121,16 @@ test('getContents sends valid waterbutler request', function(assert) { }; mockWaterbutler(assert, request, response); - service.getContents(file).then(function(data) { + service.getContents(file).then(function (data) { assert.equal(data, response.data); done(); - }).catch(function() { + }).catch(function () { assert.ok(false, 'promise should not reject on success'); done(); }); }); -test('getContents passes along error', function(assert) { +test('getContents passes along error', function (assert) { assert.expect(4); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -136,24 +138,24 @@ test('getContents passes along error', function(assert) { let request = { url: file.get('links').download, - settings: { method: 'GET' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` } + settings: {method: 'GET'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`} }; let response = { status: 404 }; mockWaterbutler(assert, request, response); - service.getContents(file).then(function() { + service.getContents(file).then(function () { assert.ok(false, 'promise should reject'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('updateContents sends valid waterbutler request', function(assert) { +test('updateContents sends valid waterbutler request', function (assert) { assert.expect(6); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -161,29 +163,31 @@ test('updateContents sends valid waterbutler request', function(assert) { let request = { url: file.get('links').upload, - query: { kind: 'file' }, - settings: { method: 'PUT', data: 'contents contents' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + query: {kind: 'file'}, + settings: {method: 'PUT', data: 'contents contents'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, }; - let freshModel = FactoryGuy.build('file', { id: file.id, - dateModified: new Date() }); - mockFindRecord('file', {id: file.id}).returns({json:freshModel}); + let freshModel = FactoryGuy.build('file', { + id: file.id, + dateModified: new Date() + }); + mockFindRecord('file', {id: file.id}).returns({json: freshModel}); mockWaterbutler(assert, request, response); - service.updateContents(file, request.settings.data).then(function(fresh) { + service.updateContents(file, request.settings.data).then(function (fresh) { assert.equal(fresh.get('id'), file.get('id')); done(); - }).catch(function() { + }).catch(function () { assert.ok(false, 'promise should not reject on success'); done(); }); }); -test('updateContents passes along error', function(assert) { +test('updateContents passes along error', function (assert) { assert.expect(6); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -191,25 +195,25 @@ test('updateContents passes along error', function(assert) { let request = { url: file.get('links').upload, - query: { kind: 'file' }, - settings: { method: 'PUT', data: 'contents contents' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + query: {kind: 'file'}, + settings: {method: 'PUT', data: 'contents contents'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 404, }; mockWaterbutler(assert, request, response); - service.updateContents(file, request.settings.data).then(function() { + service.updateContents(file, request.settings.data).then(function () { assert.ok(false, 'promise should reject on error'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('addSubfolder sends valid waterbutler request', function(assert) { +test('addSubfolder sends valid waterbutler request', function (assert) { assert.expect(4); let service = this.subject(); let folder = FactoryGuy.make('file', 'isFolder'); @@ -217,9 +221,9 @@ test('addSubfolder sends valid waterbutler request', function(assert) { let request = { url: folder.get('links').new_folder, - query: { name: 'fooname', kind: 'folder' }, - settings: { method: 'PUT' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + query: {name: 'fooname', kind: 'folder'}, + settings: {method: 'PUT'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, @@ -228,14 +232,14 @@ test('addSubfolder sends valid waterbutler request', function(assert) { let p = service.addSubfolder(folder, request.query.name); - p.then(function() { + p.then(function () { done(); - }).catch(function() { + }).catch(function () { done(); }); }); -test('addSubfolder passes along error', function(assert) { +test('addSubfolder passes along error', function (assert) { assert.expect(5); let service = this.subject(); let folder = FactoryGuy.make('file', 'isFolder'); @@ -243,25 +247,25 @@ test('addSubfolder passes along error', function(assert) { let request = { url: folder.get('links').new_folder, - query: { name: 'fooname', kind: 'folder' }, - settings: { method: 'PUT' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + query: {name: 'fooname', kind: 'folder'}, + settings: {method: 'PUT'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 404, }; mockWaterbutler(assert, request, response); - service.addSubfolder(folder, request.query.name).then(function() { + service.addSubfolder(folder, request.query.name).then(function () { assert.ok(false, 'promise should reject on error'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('uploadFile sends valid waterbutler request', function(assert) { +test('uploadFile sends valid waterbutler request', function (assert) { assert.expect(5); let service = this.subject(); let folder = FactoryGuy.make('file', 'isFolder'); @@ -269,9 +273,9 @@ test('uploadFile sends valid waterbutler request', function(assert) { let request = { url: folder.get('links').upload, - query: { name: 'fooname', kind: 'file' }, - settings: { method: 'PUT', data: 'contents contents' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + query: {name: 'fooname', kind: 'file'}, + settings: {method: 'PUT', data: 'contents contents'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, @@ -279,16 +283,16 @@ test('uploadFile sends valid waterbutler request', function(assert) { mockWaterbutler(assert, request, response); let p = service.uploadFile(folder, request.query.name, - request.settings.data); + request.settings.data); - p.then(function() { + p.then(function () { done(); - }).catch(function() { + }).catch(function () { done(); }); }); -test('uploadFile passes along error', function(assert) { +test('uploadFile passes along error', function (assert) { assert.expect(6); let service = this.subject(); let file = FactoryGuy.make('file', 'isFolder'); @@ -296,9 +300,9 @@ test('uploadFile passes along error', function(assert) { let request = { url: file.get('links').upload, - query: { name: 'fooname', kind: 'file' }, - settings: { method: 'PUT', data: 'contents contents' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + query: {name: 'fooname', kind: 'file'}, + settings: {method: 'PUT', data: 'contents contents'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 401, @@ -306,36 +310,37 @@ test('uploadFile passes along error', function(assert) { mockWaterbutler(assert, request, response); service.uploadFile(file, request.query.name, - request.settings.data).then(function() { + request.settings.data).then(function () { assert.ok(false, 'promise should reject on error'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('move sends valid waterbutler request', function(assert) { +test('move sends valid waterbutler request', function (assert) { assert.expect(4); let service = this.subject(); let done = assert.async(); let file = FactoryGuy.make('file'); let folder = FactoryGuy.make('file', 'isFolder', - { path: '/path/path/this/is/a/path/' }); + {path: '/path/path/this/is/a/path/'}); let request = { url: file.get('links').move, - settings: { method: 'POST', data: { + settings: { + method: 'POST', data: { action: 'move', path: folder.get('path'), } }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, data: { data: { - attributes: { name: file.get('name') } + attributes: {name: file.get('name')} } } }; @@ -343,51 +348,52 @@ test('move sends valid waterbutler request', function(assert) { let p = service.move(file, folder); - p.then(function() { + p.then(function () { done(); - }).catch(function() { + }).catch(function () { done(); }); }); -test('move passes along error', function(assert) { +test('move passes along error', function (assert) { assert.expect(5); let service = this.subject(); let done = assert.async(); let file = FactoryGuy.make('file'); let folder = FactoryGuy.make('file', 'isFolder', - { path: '/path/path/this/is/a/path/' }); + {path: '/path/path/this/is/a/path/'}); let request = { url: file.get('links').move, - settings: { method: 'POST', data: { + settings: { + method: 'POST', data: { action: 'move', path: folder.get('path'), } }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 402, }; mockWaterbutler(assert, request, response); - service.move(file, folder).then(function() { + service.move(file, folder).then(function () { assert.ok(false, 'promise should reject'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('copy sends valid waterbutler request', function(assert) { +test('copy sends valid waterbutler request', function (assert) { assert.expect(4); let service = this.subject(); let done = assert.async(); let file = FactoryGuy.make('file'); let folder = FactoryGuy.make('file', 'isFolder', - { path: '/path/path/this/is/a/path/' }); + {path: '/path/path/this/is/a/path/'}); let request = { url: file.get('links').move, @@ -398,13 +404,13 @@ test('copy sends valid waterbutler request', function(assert) { path: folder.get('path'), } }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, data: { data: { - attributes: { name: file.get('name') } + attributes: {name: file.get('name')} } } }; @@ -412,45 +418,46 @@ test('copy sends valid waterbutler request', function(assert) { let p = service.copy(file, folder); - p.then(function() { + p.then(function () { done(); - }).catch(function() { + }).catch(function () { done(); }); }); -test('copy passes along error', function(assert) { +test('copy passes along error', function (assert) { assert.expect(5); let service = this.subject(); let done = assert.async(); let file = FactoryGuy.make('file'); let folder = FactoryGuy.make('file', 'isFolder', - { path: '/path/path/this/is/a/path/' }); + {path: '/path/path/this/is/a/path/'}); let request = { url: file.get('links').move, - settings: { method: 'POST', data: { + settings: { + method: 'POST', data: { action: 'copy', path: folder.get('path'), } }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 402, }; mockWaterbutler(assert, request, response); - service.copy(file, folder).then(function() { + service.copy(file, folder).then(function () { assert.ok(false, 'promise should reject'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('rename sends valid waterbutler request', function(assert) { +test('rename sends valid waterbutler request', function (assert) { assert.expect(4); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -458,8 +465,8 @@ test('rename sends valid waterbutler request', function(assert) { let request = { url: file.get('links').move, - settings: { method: 'POST', data: { action: 'rename', rename: 'flooby' } }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + settings: {method: 'POST', data: {action: 'rename', rename: 'flooby'}}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, @@ -475,14 +482,14 @@ test('rename sends valid waterbutler request', function(assert) { let p = service.rename(file, request.settings.data.rename); - p.then(function() { + p.then(function () { done(); - }).catch(function() { + }).catch(function () { done(); }); }); -test('rename passes along error', function(assert) { +test('rename passes along error', function (assert) { assert.expect(5); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -490,24 +497,24 @@ test('rename passes along error', function(assert) { let request = { url: file.get('links').move, - settings: { method: 'POST', data: { action: 'rename', rename: 'flooby' } }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + settings: {method: 'POST', data: {action: 'rename', rename: 'flooby'}}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 401, }; mockWaterbutler(assert, request, response); - service.rename(file, request.settings.data.rename).then(function() { + service.rename(file, request.settings.data.rename).then(function () { assert.ok(false, 'promise should reject'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('deleteFile sends valid waterbutler request', function(assert) { +test('deleteFile sends valid waterbutler request', function (assert) { assert.expect(4); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -515,24 +522,24 @@ test('deleteFile sends valid waterbutler request', function(assert) { let request = { url: file.get('links').delete, - settings: { method: 'DELETE' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + settings: {method: 'DELETE'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 200, }; mockWaterbutler(assert, request, response); - service.deleteFile(file).then(function() { + service.deleteFile(file).then(function () { assert.ok(true); done(); - }).catch(function() { + }).catch(function () { assert.ok(false, 'promise rejected!'); done(); }); }); -test('deleteFile passes along error', function(assert) { +test('deleteFile passes along error', function (assert) { assert.expect(4); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -540,24 +547,24 @@ test('deleteFile passes along error', function(assert) { let request = { url: file.get('links').delete, - settings: { method: 'DELETE' }, - headers: { Authorization: `Bearer ${fakeAccessToken}` }, + settings: {method: 'DELETE'}, + headers: {Authorization: `Bearer ${fakeAccessToken}`}, }; let response = { status: 401, }; mockWaterbutler(assert, request, response); - service.deleteFile(file).then(function() { + service.deleteFile(file).then(function () { assert.ok(false, 'promise should reject'); done(); - }).catch(function() { + }).catch(function () { assert.ok(true, 'promise rejects on error'); done(); }); }); -test('checkOut checks out', function(assert) { +test('checkOut checks out', function (assert) { assert.expect(2); let service = this.subject(); let file = FactoryGuy.make('file'); @@ -572,10 +579,10 @@ test('checkOut checks out', function(assert) { }); }); -test('checkIn checks in', function(assert) { +test('checkIn checks in', function (assert) { assert.expect(2); let service = this.subject(); - let file = FactoryGuy.make('file', { checkout: fakeUserID }); + let file = FactoryGuy.make('file', {checkout: fakeUserID}); let done = assert.async(); assert.equal(file.get('checkout'), fakeUserID, 'file.checkout already set'); @@ -587,13 +594,13 @@ test('checkIn checks in', function(assert) { }); }); -test('checkOut fails on checked-out file', function(assert) { +test('checkOut fails on checked-out file', function (assert) { assert.expect(1); let service = this.subject(); - let file = FactoryGuy.make('file', { checkout: 'someoneelse' }); + let file = FactoryGuy.make('file', {checkout: 'someoneelse'}); let done = assert.async(); - mockUpdate(file).fails({ status: 403 }); + mockUpdate(file).fails({status: 403}); service.checkIn(file).catch(() => { assert.equal(file.get('checkout'), 'someoneelse', 'file.checkout unaffected by failure'); done(); diff --git a/yarn.lock b/yarn.lock index 90a04521d..33e40fa93 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,10 +9,6 @@ JSONStream@^1.0.3: jsonparse "^1.2.0" through ">=2.2.7 <3" -"JSV@>= 4.0.x": - version "4.0.2" - resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" - abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -24,6 +20,16 @@ accepts@1.3.3, accepts@~1.3.3: mime-types "~2.1.11" negotiator "0.6.1" +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@4.0.4, acorn@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" + acorn@^1.0.3: version "1.2.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" @@ -32,18 +38,25 @@ acorn@^2.6.4, acorn@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" -acorn@^3.1.0: +acorn@^3.0.4, acorn@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" - after@0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0: + version "4.11.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -132,7 +145,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.0 || ^1.1.13" -argparse@^1.0.2, argparse@^1.0.7, argparse@~1.0.2: +argparse@^1.0.7, argparse@~1.0.2: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: @@ -189,6 +202,16 @@ array-to-sentence@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-to-sentence/-/array-to-sentence-1.1.0.tgz#c804956dafa53232495b205a9452753a258d39fc" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -263,10 +286,6 @@ async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" -async@0.2.x, async@~0.2.6, async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - async@1.x, async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -277,6 +296,10 @@ async@^2.0.1: dependencies: lodash "^4.14.0" +async@~0.2.6, async@~0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -289,6 +312,14 @@ aws4@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" +babel-code-frame@^6.16.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + babel-core@^5.0.0, babel-core@^5.8.38: version "5.8.38" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558" @@ -420,30 +451,10 @@ babel-plugin-undefined-to-void@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81" -babel-runtime@^6.20.0, babel-runtime@^6.6.1: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-types@^6.7.2: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2" - dependencies: - babel-runtime "^6.20.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - babylon@^5.8.38: version "5.8.38" resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" -babylon@^6.7.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" - backbone@^1.1.2: version "1.3.3" resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.3.3.tgz#4cc80ea7cb1631ac474889ce40f2f8bc683b2999" @@ -810,6 +821,17 @@ broccoli-kitchen-sink-helpers@^0.3.1: glob "^5.0.10" mkdirp "^0.5.1" +broccoli-lint-eslint@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/broccoli-lint-eslint/-/broccoli-lint-eslint-3.2.1.tgz#6c88cd36f2999eab98b07538a382ef2c10d2b77f" + dependencies: + broccoli-persistent-filter "^1.2.0" + escape-string-regexp "^1.0.5" + eslint "^3.0.0" + js-string-escape "^1.0.1" + json-stable-stringify "^1.0.1" + md5-hex "^2.0.0" + broccoli-merge-trees@^0.2.1: version "0.2.4" resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-0.2.4.tgz#1936f63bb09e24246b1e91d8c53162c0f7b24c3c" @@ -1126,10 +1148,20 @@ cached-path-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.0.tgz#d1094c577fbd9a8b8bd43c96af6188aa205d05f4" +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1196,7 +1228,7 @@ chalk@^0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0: +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1230,6 +1262,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1: dependencies: inherits "^2.0.1" +circular-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + clean-base-url@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clean-base-url/-/clean-base-url-1.0.0.tgz#c901cf0a20b972435b0eccd52d056824a4351b7b" @@ -1268,7 +1304,7 @@ cli-table2@^0.2.0: optionalDependencies: colors "^1.1.2" -cli-table@^0.3.1, cli-table@~0.3.1: +cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" dependencies: @@ -1327,14 +1363,14 @@ cmd-shim@~2.0.2: graceful-fs "^4.1.2" mkdirp "~0.5.0" +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -colors@0.6.x: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -1371,18 +1407,12 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.5.0, commander@^2.6.0, commander@^2.9.0, commander@~2.9.0: +commander@^2.5.0, commander@^2.6.0, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" -comment-parser@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.3.1.tgz#fd657aac8c1492d308c9a6100fc9b49d2435aba1" - dependencies: - readable-stream "^2.0.4" - commoner@~0.10.3: version "0.10.8" resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" @@ -1533,10 +1563,6 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - core-object@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/core-object/-/core-object-1.1.0.tgz#86d63918733cf9da1a5aae729e62c0a88e66ad0a" @@ -1620,25 +1646,12 @@ crypto-browserify@^3.0.0: public-encrypt "^4.0.0" randombytes "^2.0.0" -cst@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/cst/-/cst-0.3.0.tgz#67aa8b30274e0061e64366aea45c0652a5e61aef" - dependencies: - babel-runtime "^6.6.1" - babel-types "^6.7.2" - babylon "^6.7.0" - source-map-support "^0.4.0" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" dependencies: array-find-index "^1.0.1" -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - d@^0.1.1, d@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" @@ -1671,13 +1684,13 @@ debug@2.3.3: dependencies: ms "0.7.2" -debug@2.6.1: +debug@2.6.1, debug@^2.1.3: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" -debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0: +debug@^2.1.0, debug@^2.1.1, debug@^2.2.0: version "2.6.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: @@ -1691,10 +1704,6 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-equal@*: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -1724,6 +1733,18 @@ defs@~1.1.0: tryor "~0.1.2" yargs "~3.27.0" +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1806,6 +1827,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -2004,6 +2032,15 @@ ember-cli-dependency-checker@^1.2.0: is-git-url "0.2.0" semver "^4.1.0" +ember-cli-eslint@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ember-cli-eslint/-/ember-cli-eslint-3.0.3.tgz#620abced2984be96a8747a47bfd41c5adbb9b968" + dependencies: + broccoli-lint-eslint "^3.1.0" + js-string-escape "^1.0.0" + rsvp "^3.2.1" + walk-sync "^0.3.0" + ember-cli-get-component-path-option@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz#0d7b595559e2f9050abed804f1d8eff1b08bc771" @@ -2782,6 +2819,53 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint@^3.0.0, eslint@^3.18.0: + version "3.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.5.2" + debug "^2.1.1" + doctrine "^2.0.0" + escope "^3.6.0" + espree "^3.4.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" + dependencies: + acorn "4.0.4" + acorn-jsx "^3.0.0" + esprima-fb@~12001.1.0-dev-harmony-fb: version "12001.1.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-12001.1.0-dev-harmony-fb.tgz#d84400384ba95ce2678c617ad24a7f40808da915" @@ -2802,6 +2886,12 @@ esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + esrecurse@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" @@ -2813,7 +2903,7 @@ estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -2872,7 +2962,7 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" -exit@0.1.2, exit@0.1.x, exit@^0.1.2, exit@~0.1.2: +exit@0.1.2, exit@0.1.x, exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2956,10 +3046,6 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -3014,6 +3100,13 @@ figures@^1.3.5: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + filename-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" @@ -3074,6 +3167,15 @@ fireworm@^0.7.0: lodash.flatten "^3.0.2" minimatch "^3.0.2" +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" @@ -3339,7 +3441,7 @@ glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.0.5, glob@^7.1.0, glo once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.1, glob@^5.0.10, glob@^5.0.15, glob@~5.0.0: +glob@^5.0.10, glob@^5.0.15, glob@~5.0.0: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: @@ -3390,6 +3492,21 @@ globals@^6.4.0: version "6.4.1" resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f" +globals@^9.14.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + globule@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" @@ -3554,7 +3671,7 @@ htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" -htmlparser2@3.8.3, htmlparser2@3.8.x: +htmlparser2@3.8.x: version "3.8.3" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" dependencies: @@ -3591,10 +3708,6 @@ https-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" -i@0.3.x: - version "0.3.5" - resolved "https://registry.yarnpkg.com/i/-/i-0.3.5.tgz#1d2b854158ec8169113c6cb7f6b6801e99e211d5" - iconv-lite@0.4.15, iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" @@ -3607,6 +3720,10 @@ iferr@^0.1.5, iferr@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" +ignore@^3.2.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.6.tgz#26e8da0644be0bb4cb39516f6c79f0e0f4ffe48c" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3640,10 +3757,6 @@ inflight@^1.0.4, inflight@~1.0.5: once "^1.3.0" wrappy "1" -inherit@^2.2.2: - version "2.2.6" - resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.6.tgz#f1614b06c8544e8128e4229c86347db73ad9788d" - inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -3685,6 +3798,24 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + inquirer@^1.2.1: version "1.2.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918" @@ -3717,6 +3848,10 @@ insert-module-globals@^7.0.0: through2 "^2.0.0" xtend "^4.0.0" +interpret@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -3769,6 +3904,10 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + is-git-url@0.2.0, is-git-url@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-0.2.0.tgz#b9ce0fb044821c88880213d602db03bdb255da1b" @@ -3785,7 +3924,7 @@ is-integer@^1.0.4: dependencies: is-finite "^1.0.0" -is-my-json-valid@^2.12.4: +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" dependencies: @@ -3804,6 +3943,22 @@ is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -3820,6 +3975,12 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3864,7 +4025,7 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" -isstream@0.1.x, isstream@~0.1.2: +isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -3917,7 +4078,7 @@ js-md5@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.4.2.tgz#8a1231e60ab392a6d3a75db6d532ec0c59667bc3" -js-string-escape@^1.0.0: +js-string-escape@^1.0.0, js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" @@ -3925,6 +4086,10 @@ js-tokens@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + js-yaml@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" @@ -3932,73 +4097,17 @@ js-yaml@3.6.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@3.x, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.0, js-yaml@^3.6.1: +js-yaml@3.x, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.5.1, js-yaml@^3.6.0, js-yaml@^3.6.1: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" dependencies: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@~3.4.0: - version "3.4.6" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - inherit "^2.2.2" - jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" -jscs-jsdoc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz#f53ebce029aa3125bd88290ba50d64d4510a4871" - dependencies: - comment-parser "^0.3.1" - jsdoctypeparser "~1.2.0" - -jscs-preset-wikimedia@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz#fff563342038fc2e8826b7bb7309c3ae3406fc7e" - -jscs@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/jscs/-/jscs-3.0.4.tgz#614faa9265a40ca47da85d6c779a18ea9c8eb942" - dependencies: - chalk "~1.1.0" - cli-table "~0.3.1" - commander "~2.9.0" - cst "^0.3.0" - estraverse "^4.1.0" - exit "~0.1.2" - glob "^5.0.1" - htmlparser2 "3.8.3" - js-yaml "~3.4.0" - jscs-jsdoc "^2.0.0" - jscs-preset-wikimedia "~1.0.0" - jsonlint "~1.6.2" - lodash "~3.10.0" - minimatch "~3.0.0" - natural-compare "~1.2.2" - pathval "~0.1.1" - prompt "~0.2.14" - reserved-words "^0.1.1" - resolve "^1.1.6" - strip-bom "^2.0.0" - strip-json-comments "~1.0.2" - to-double-quotes "^2.0.0" - to-single-quotes "^2.0.0" - vow "~0.4.8" - vow-fs "~0.3.4" - xmlbuilder "^3.1.0" - -jsdoctypeparser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" - dependencies: - lodash "^3.7.0" - jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -4060,13 +4169,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonlint@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.2.tgz#5737045085f55eb455c68b1ff4ebc01bd50e8830" - dependencies: - JSV ">= 4.0.x" - nomnom ">= 1.5.x" - jsonparse@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.0.tgz#85fc245b1d9259acc6941960b905adf64e7de0e8" @@ -4155,7 +4257,7 @@ leven@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" -levn@~0.3.0: +levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: @@ -4448,11 +4550,11 @@ lodash@3.7.x: version "3.7.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" -lodash@^3.10.0, lodash@^3.10.1, lodash@^3.5.0, lodash@^3.7.0, lodash@^3.9.3, lodash@~3.10.0: +lodash@^3.10.0, lodash@^3.10.1, lodash@^3.9.3: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4556,6 +4658,12 @@ md5-hex@^1.0.2, md5-hex@^1.2.1, md5-hex@^1.3.0: dependencies: md5-o-matic "^0.1.1" +md5-hex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" + dependencies: + md5-o-matic "^0.1.1" + md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" @@ -4644,7 +4752,7 @@ minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.0, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -4670,7 +4778,7 @@ mkdirp@0.5.0: dependencies: minimist "0.0.8" -mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -4752,6 +4860,10 @@ mustache@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + mute-stream@0.0.6, mute-stream@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" @@ -4760,13 +4872,9 @@ nan@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" -natural-compare@~1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.2.2.tgz#1f96d60e3141cac1b6d05653ce0daeac763af6aa" - -ncp@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" negotiator@0.6.1: version "0.6.1" @@ -4873,13 +4981,6 @@ node-uuid@^1.4.3, node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -"nomnom@>= 1.5.x": - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" - "nopt@2 || 3", nopt@3.x, nopt@^3.0.1, nopt@^3.0.3, nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -5096,7 +5197,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -5266,10 +5367,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -pathval@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-0.1.1.tgz#08f911cdca9cce5942880da7817bc0b723b66d82" - pbkdf2@^3.0.3: version "3.0.9" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" @@ -5308,13 +5405,9 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -pkginfo@0.3.x: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" - -pkginfo@0.x.x: - version "0.4.0" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65" +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" portfinder@^1.0.7: version "1.0.10" @@ -5354,7 +5447,7 @@ process@~0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" -progress@~1.1.8: +progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -5364,16 +5457,6 @@ promise-map-series@^0.2.0, promise-map-series@^0.2.1: dependencies: rsvp "^3.0.14" -prompt@~0.2.14: - version "0.2.14" - resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" - dependencies: - pkginfo "0.x.x" - read "1.0.x" - revalidator "0.1.x" - utile "0.2.x" - winston "0.8.x" - promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -5417,15 +5500,15 @@ q@^1.1.2: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qs@6.2.0, qs@^6.2.0, qs@~6.2.0: +qs@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" -qs@6.2.1: +qs@6.2.1, qs@~6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" -qs@~6.3.0: +qs@^6.2.0, qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" @@ -5539,13 +5622,13 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read@1, read@1.0.x, read@~1.0.1, read@~1.0.7: +read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@~2.1.5: +"readable-stream@1 || 2", readable-stream@^2, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: @@ -5595,6 +5678,14 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + realize-package-specifier@~3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4" @@ -5620,6 +5711,12 @@ recast@^0.11.17, recast@^0.11.3: private "~0.1.5" source-map "~0.5.0" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -5643,10 +5740,6 @@ regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" -regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" - regenerator@0.8.40: version "0.8.40" resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8" @@ -5770,14 +5863,17 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" -reserved-words@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.1.tgz#6f7c15e5e5614c50da961630da46addc87c0cef2" - resolve-dir@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" @@ -5785,6 +5881,10 @@ resolve-dir@^0.1.0: expand-tilde "^1.2.2" global-modules "^0.2.3" +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -5804,17 +5904,13 @@ retry@^0.10.0, retry@~0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" -revalidator@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" - right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.2, rimraf@^2.5.3, rimraf@~2.5.4: +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.2, rimraf@^2.5.3, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -5840,12 +5936,22 @@ rsvp@~3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + rx@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" @@ -5964,6 +6070,14 @@ shelljs@0.3.x: version "0.3.0" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" +shelljs@^0.7.5: + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" @@ -5999,6 +6113,10 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -6073,12 +6191,6 @@ source-map-support@^0.2.10: dependencies: source-map "0.1.32" -source-map-support@^0.4.0: - version "0.4.8" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b" - dependencies: - source-map "^0.5.3" - source-map-url@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" @@ -6095,7 +6207,7 @@ source-map@0.4.x, source-map@^0.4.2, source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@0.5.6, source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.6, source-map@^0.5.0, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -6161,10 +6273,6 @@ stable@~0.1.3: version "0.1.5" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.5.tgz#08232f60c732e9890784b5bed0734f8b32a887b9" -stack-trace@0.0.x: - version "0.0.9" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" - "statuses@>= 1.3.1 < 2", statuses@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -6212,6 +6320,13 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + string.prototype.codepointat@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" @@ -6258,16 +6373,24 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" dependencies: get-stdin "^4.0.1" -strip-json-comments@1.0.x, strip-json-comments@~1.0.2: +strip-json-comments@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + styled_string@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" @@ -6312,6 +6435,17 @@ syntax-error@^1.1.1: dependencies: acorn "^2.7.0" +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + tap-parser@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-3.0.5.tgz#b947f69e0b3e53d4b92011f6cc552e16dadc7ec9" @@ -6430,18 +6564,10 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" -to-double-quotes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-double-quotes/-/to-double-quotes-2.0.0.tgz#aaf231d6fa948949f819301bbab4484d8588e4a7" - -to-fast-properties@^1.0.0, to-fast-properties@^1.0.1: +to-fast-properties@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -to-single-quotes@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/to-single-quotes/-/to-single-quotes-2.0.1.tgz#7cc29151f0f5f2c41946f119f5932fe554170125" - tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" @@ -6470,6 +6596,10 @@ try-resolve@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + tryor@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" @@ -6544,10 +6674,6 @@ underscore@>=1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - unique-filename@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" @@ -6581,6 +6707,12 @@ user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6595,22 +6727,11 @@ util@0.10.3, "util@>=0.10.3 <1", util@~0.10.1: dependencies: inherits "2.0.1" -utile@0.2.x: - version "0.2.1" - resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" - dependencies: - async "~0.2.9" - deep-equal "*" - i "0.3.x" - mkdirp "0.x.x" - ncp "0.4.x" - rimraf "2.x.x" - utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@^2.0.1, uuid@^2.0.2: +uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -6647,25 +6768,6 @@ vm-browserify@~0.0.1: dependencies: indexof "0.0.1" -vow-fs@~0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.6.tgz#2d4c59be22e2bf2618ddf597ab4baa923be7200d" - dependencies: - glob "^7.0.5" - uuid "^2.0.2" - vow "^0.4.7" - vow-queue "^0.4.1" - -vow-queue@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.4.2.tgz#e7fe17160e15c7c4184d1b666a9bc64e18e30184" - dependencies: - vow "~0.4.0" - -vow@^0.4.7, vow@~0.4.0, vow@~0.4.8: - version "0.4.13" - resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.13.tgz#e7c14f1bd9c8be0e7359a4597fe2d1ef6d1a7e88" - walk-sync@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.1.3.tgz#8a07261a00bda6cfb1be25e9f100fad57546f583" @@ -6738,18 +6840,6 @@ window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" -winston@0.8.x: - version "0.8.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" - dependencies: - async "0.2.x" - colors "0.6.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - pkginfo "0.3.x" - stack-trace "0.0.x" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -6789,6 +6879,12 @@ write-file-atomic@~1.2.0: imurmurhash "^0.1.4" slide "^1.1.5" +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + ws@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" @@ -6806,12 +6902,6 @@ xdg-basedir@^2.0.0: dependencies: os-homedir "^1.0.0" -xmlbuilder@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-3.1.0.tgz#2c86888f2d4eade850fa38ca7f7223f7209516e1" - dependencies: - lodash "^3.5.0" - xmldom@^0.1.19: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"