From c68ef72ad38eb5e3dd756e4e72875f950d71fb66 Mon Sep 17 00:00:00 2001 From: Samuel Marks Date: Tue, 11 Jul 2017 17:23:24 +1000 Subject: [PATCH] General code cleanup: linting (semicolons; strict mode; var/let => const); .editorconfig; package-lock.json; == to === (in obvious cases); and a .jshintrc update. --- .editorconfig | 27 + .gitignore | 1 + .jshintrc | 4 +- gulpfile.js | 12 +- lib/adapter.js | 248 +- lib/error.js | 22 +- lib/procedures.js | 34 +- lib/spatial.js | 50 +- lib/sql.js | 4 +- lib/util.js | 197 +- package-lock.json | 4655 +++++++++++++++++++++++++++++++++ package.json | 1 + test/integration/pg/index.js | 174 +- test/integration/pg/models.js | 90 +- test/integration/runner.js | 109 +- test/integration/wl/index.js | 140 +- test/integration/wl/models.js | 72 +- 17 files changed, 5265 insertions(+), 575 deletions(-) create mode 100644 .editorconfig create mode 100644 package-lock.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d8f614d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,27 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true + +# Matches multiple files with brace expansion notation +# Set default charset +[*.{js}] +charset = utf-8 + +# Tab indentation (no size specified) +[Makefile] +indent_style = tab + +# Indentation override for all JS under lib directory +[lib/**.js] +indent_style = space +indent_size = 2 + +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/.gitignore b/.gitignore index c617d90..e2d5555 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea dist/ *.sw* diff --git a/.jshintrc b/.jshintrc index f0ee4e3..63ac28b 100755 --- a/.jshintrc +++ b/.jshintrc @@ -6,5 +6,7 @@ "expr": true, "trailing": true, "node": true, - "esnext": true + "esversion": 6, + "mocha": true, + "strict": "global" } diff --git a/gulpfile.js b/gulpfile.js index b761259..24e4752 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,8 +1,10 @@ -var gulp = require('gulp'); -var babel = require('gulp-babel'); +'use strict'; + +const gulp = require('gulp'); +const babel = require('gulp-babel'); gulp.task('default', function () { - return gulp.src([ 'lib/**' ]) - .pipe(babel()) - .pipe(gulp.dest('dist')); + return gulp.src(['lib/**']) + .pipe(babel()) + .pipe(gulp.dest('dist')); }); diff --git a/lib/adapter.js b/lib/adapter.js index 4ee5425..da10847 100644 --- a/lib/adapter.js +++ b/lib/adapter.js @@ -1,17 +1,18 @@ -import Knex from 'knex' -import _ from 'lodash' -import camelize from 'camelize' -import WaterlineSequel from 'waterline-sequel' - -import KnexPostgis from 'knex-postgis' -import WaterlineError from 'waterline-errors' -import AdapterError from './error' -import Util from './util' -import SpatialUtil from './spatial' -import SQL from './sql' +'use strict'; -const Adapter = { +import Knex from "knex"; +import _ from "lodash"; +import camelize from "camelize"; +import WaterlineSequel from "waterline-sequel"; + +import KnexPostgis from "knex-postgis"; +import WaterlineError from "waterline-errors"; +import AdapterError from "./error"; +import Util from "./util"; +import SpatialUtil from "./spatial"; +import SQL from "./sql"; +const Adapter = { identity: 'waterline-postgresql', wlSqlOptions: { @@ -80,26 +81,26 @@ const Adapter = { return cb(WaterlineError.adapter.IdentityDuplicate) } - _.defaultsDeep(connection, Adapter.defaults) + _.defaultsDeep(connection, Adapter.defaults); - let knex = Knex({ + const knex = Knex({ client: 'pg', connection: connection.url || connection.connection, pool: connection.pool, debug: process.env.WATERLINE_DEBUG_SQL || connection.debug - }) - let cxn = { + }); + const cxn = { identity: connection.identity, schema: Adapter.buildSchema(connection, collections), collections: collections, config: connection, knex: knex, st: KnexPostgis(knex) - } + }; return Util.initializeConnection(cxn) .then(() => { - Adapter.connections.set(connection.identity, cxn) + Adapter.connections.set(connection.identity, cxn); cb() }) .catch(cb) @@ -114,9 +115,9 @@ const Adapter = { buildSchema (connection, collections) { return _.chain(collections) .map((model, modelName) => { - let definition = _.get(model, [ 'waterline', 'schema', model.identity ]) + const definition = _.get(model, ['waterline', 'schema', model.identity]); return _.defaultsDeep(definition, { - attributes: { }, + attributes: {}, tableName: modelName }) }) @@ -131,7 +132,7 @@ const Adapter = { getVersion (cxn) { return cxn.knex .raw('select version() as version') - .then(({ rows: [row] }) => { + .then(({rows: [row]}) => { return row.version.split(' ')[1].split('.') }) }, @@ -143,7 +144,7 @@ const Adapter = { * @param tableName */ describe (connectionName, tableName, cb) { - let cxn = Adapter.connections.get(connectionName) + const cxn = Adapter.connections.get(connectionName); return cxn.knex(tableName).columnInfo() .then(columnInfo => { @@ -151,9 +152,9 @@ const Adapter = { return cb() } - return Adapter._query(cxn, SQL.indexes, [ tableName ]) - .then(({ rows }) => { - _.merge(columnInfo, _.keyBy(camelize(rows), 'columnName')) + return Adapter._query(cxn, SQL.indexes, [tableName]) + .then(({rows}) => { + _.merge(columnInfo, _.keyBy(camelize(rows), 'columnName')); _.isFunction(cb) && cb(null, columnInfo) }) }) @@ -169,11 +170,11 @@ const Adapter = { * @param data */ query (connectionName, tableName, queryString, args, cb) { - let cxn = Adapter.connections.get(connectionName) + const cxn = Adapter.connections.get(connectionName); return Adapter._query(cxn, queryString, args) - .then((result = { }) => { - _.isFunction(cb) && cb(null, result) + .then((result = {}) => { + _.isFunction(cb) && cb(null, result); return result }) .catch(AdapterError.wrap(cb)) @@ -181,7 +182,7 @@ const Adapter = { _query (cxn, query, values) { return cxn.knex.raw(Util.toKnexRawQuery(query), Util.castValues(values)) - .then((result = { }) => result) + .then((result = {}) => result) }, /** @@ -193,20 +194,20 @@ const Adapter = { * @param cb */ define (connectionName, _tableName, definition, cb) { - let cxn = Adapter.connections.get(connectionName) - let schema = cxn.collections[_tableName] - let tableName = _tableName.substring(0, 63) + const cxn = Adapter.connections.get(connectionName); + const schema = cxn.collections[_tableName]; + const tableName = _tableName.substring(0, 63); return cxn.knex.schema .hasTable(tableName) .then(exists => { - if (exists) return + if (exists) return; return cxn.knex.schema.createTable(tableName, table => { _.each(definition, (definition, attributeName) => { - let newColumn = Util.toKnexColumn(table, attributeName, definition, schema, cxn.collections) + const newColumn = Util.toKnexColumn(table, attributeName, definition, schema, cxn.collections); Util.applyColumnConstraints(newColumn, definition) - }) + }); Util.applyTableConstraints(table, definition) }) }) @@ -220,8 +221,8 @@ const Adapter = { /** * Drop a table */ - drop (connectionName, tableName, relations = [ ], cb = relations) { - let cxn = Adapter.connections.get(connectionName) + drop (connectionName, tableName, relations = [], cb = relations) { + const cxn = Adapter.connections.get(connectionName); return cxn.knex.schema.dropTableIfExists(tableName) .then(() => { @@ -239,12 +240,12 @@ const Adapter = { * Add a column to a table */ addAttribute (connectionName, tableName, attributeName, definition, cb) { - let cxn = Adapter.connections.get(connectionName) - let schema = cxn.collections[tableName] + const cxn = Adapter.connections.get(connectionName); + const schema = cxn.collections[tableName]; return cxn.knex.schema .table(tableName, table => { - let newColumn = Util.toKnexColumn(table, attributeName, definition, schema, cxn.collections) + const newColumn = Util.toKnexColumn(table, attributeName, definition, schema, cxn.collections); Util.applyColumnConstraints(newColumn, definition) }) .then(() => { @@ -257,14 +258,14 @@ const Adapter = { * Remove a column from a table */ removeAttribute (connectionName, tableName, attributeName, cb) { - let cxn = Adapter.connections.get(connectionName) + const cxn = Adapter.connections.get(connectionName); return cxn.knex.schema .table(tableName, table => { table.dropColumn(attributeName) }) .then(result => { - _.isFunction(cb) && cb(null, result) + _.isFunction(cb) && cb(null, result); return result }) .catch(AdapterError.wrap(cb)) @@ -274,19 +275,19 @@ const Adapter = { * Create a new record */ create (connectionName, tableName, data, cb) { - let cxn = Adapter.connections.get(connectionName) - let insertData = Util.sanitize(data, cxn.collections[tableName], cxn) - let schema = cxn.collections[tableName] - let spatialColumns = SpatialUtil.buildSpatialSelect(schema.definition, tableName, cxn) + const cxn = Adapter.connections.get(connectionName); + const insertData = Util.sanitize(data, cxn.collections[tableName], cxn); + const schema = cxn.collections[tableName]; + const spatialColumns = SpatialUtil.buildSpatialSelect(schema.definition, tableName, cxn); return cxn.knex(tableName) .insert(insertData) - .returning([ '*', ...spatialColumns ]) + .returning(['*', ...spatialColumns]) .then(rows => { - let casted = Util.castResultRows(rows, schema) - let result = _.isArray(data) ? casted : casted[0] + const casted = Util.castResultRows(rows, schema); + const result = _.isArray(data) ? casted : casted[0]; - _.isFunction(cb) && cb(null, result) + _.isFunction(cb) && cb(null, result); return result }) .catch(AdapterError.wrap(cb, null, data)) @@ -304,22 +305,22 @@ const Adapter = { * Update a record */ update (connectionName, tableName, options, data, cb) { - let cxn = Adapter.connections.get(connectionName) - let schema = cxn.collections[tableName] - let wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions) - let spatialColumns = SpatialUtil.getSpatialColumns(schema.definition) - let updateData = _.omit(data, _.keys(spatialColumns)) + const cxn = Adapter.connections.get(connectionName); + const schema = cxn.collections[tableName]; + const wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions); + const spatialColumns = SpatialUtil.getSpatialColumns(schema.definition); + const updateData = _.omit(data, _.keys(spatialColumns)); return new Promise((resolve, reject) => { - if (_.isEmpty(data)) { - return Adapter.find(connectionName, tableName, options, cb) - } - resolve(wlsql.update(tableName, options, updateData)) - }) - .then(({ query, values }) => { + if (_.isEmpty(data)) { + return Adapter.find(connectionName, tableName, options, cb) + } + resolve(wlsql.update(tableName, options, updateData)) + }) + .then(({query, values}) => { return Adapter._query(cxn, query, values) }) - .then(({ rows }) => { + .then(({rows}) => { cb && cb(null, rows) }) .catch(AdapterError.wrap(cb, null, data)) @@ -329,16 +330,16 @@ const Adapter = { * Destroy a record */ destroy (connectionName, tableName, options, cb) { - let cxn = Adapter.connections.get(connectionName) - let wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions) + const cxn = Adapter.connections.get(connectionName); + const wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions); return new Promise((resolve, reject) => { - resolve(wlsql.destroy(tableName, options)) - }) - .then(({ query, values }) => { + resolve(wlsql.destroy(tableName, options)) + }) + .then(({query, values}) => { return Adapter._query(cxn, query, values) }) - .then(({ rows }) => { + .then(({rows}) => { cb(null, rows) }) .catch(AdapterError.wrap(cb)) @@ -348,28 +349,28 @@ const Adapter = { * Populate record associations */ join (connectionName, tableName, options, cb) { - let cxn = Adapter.connections.get(connectionName) - let schema = cxn.collections[tableName] + const cxn = Adapter.connections.get(connectionName); + const schema = cxn.collections[tableName]; - return Util.buildKnexJoinQuery (cxn, tableName, options) + return Util.buildKnexJoinQuery(cxn, tableName, options) .then(result => { // return unique records only. // TODO move to SQL - _.each(_.reject(options.joins, { select: false }), join => { - let alias = Util.getJoinAlias(join) - let pk = Adapter.getPrimaryKey(cxn, join.child) - let schema = cxn.collections[join.child] + _.each(_.reject(options.joins, {select: false}), join => { + const alias = Util.getJoinAlias(join); + const pk = Adapter.getPrimaryKey(cxn, join.child); + const schema = cxn.collections[join.child]; _.each(result, row => { row[alias] = Util.castResultRows(_.compact(_.uniqBy(row[alias], pk)), schema) }) - }) + }); return result }) .then(result => { - result = Util.castResultRows(result, schema) - _.isFunction(cb) && cb(null, result) + result = Util.castResultRows(result, schema); + _.isFunction(cb) && cb(null, result); return result }) .catch(AdapterError.wrap(cb)) @@ -378,14 +379,14 @@ const Adapter = { /** * Get the primary key column of a table */ - getPrimaryKey ({ collections }, tableName) { - let definition = collections[tableName].definition + getPrimaryKey ({collections}, tableName) { + const definition = collections[tableName].definition; if (!definition._pk) { - let pk = _.findKey(definition, (attr, name) => { + const pk = _.findKey(definition, (attr, name) => { return attr.primaryKey === true - }) + }); definition._pk = pk || 'id' } @@ -396,28 +397,28 @@ const Adapter = { * Find records */ find (connectionName, tableName, options, cb) { - let cxn = Adapter.connections.get(connectionName) - let wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions) - let schema = cxn.collections[tableName] + const cxn = Adapter.connections.get(connectionName); + const wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions); + const schema = cxn.collections[tableName]; //console.log('find', tableName, options) //console.log('schema types', schema._types) return new Promise((resolve, reject) => { - resolve(wlsql.find(tableName, options)) - }) - .then(({ query: [query], values: [values] }) => { - let spatialColumns = SpatialUtil.buildSpatialSelect(schema.definition, tableName, cxn) - let fullQuery = Util.addSelectColumns(spatialColumns, query) + resolve(wlsql.find(tableName, options)) + }) + .then(({query: [query], values: [values]}) => { + const spatialColumns = SpatialUtil.buildSpatialSelect(schema.definition, tableName, cxn); + const fullQuery = Util.addSelectColumns(spatialColumns, query); //console.log('fullQuery', fullQuery) //console.log('values', values) return Adapter._query(cxn, fullQuery, values) }) - .then(({ rows }) => { - let result = Util.castResultRows(rows, schema) - _.isFunction(cb) && cb(null, result) + .then(({rows}) => { + const result = Util.castResultRows(rows, schema); + _.isFunction(cb) && cb(null, result); return result }) .catch(AdapterError.wrap(cb)) @@ -427,18 +428,18 @@ const Adapter = { * Count the number of records */ count (connectionName, tableName, options, cb) { - let cxn = Adapter.connections.get(connectionName) - let wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions) + const cxn = Adapter.connections.get(connectionName); + const wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions); return new Promise((resolve, reject) => { - resolve(wlsql.count(tableName, options)) - }) - .then(({ query: [query], values: [values] }) => { + resolve(wlsql.count(tableName, options)) + }) + .then(({query: [query], values: [values]}) => { return Adapter._query(cxn, query, values) }) - .then(({ rows: [row] }) => { - let count = Number(row.count) - _.isFunction(cb) && cb(null, count) + .then(({rows: [row]}) => { + const count = Number(row.count); + _.isFunction(cb) && cb(null, count); return count }) .catch(AdapterError.wrap(cb)) @@ -457,11 +458,11 @@ const Adapter = { * .catch(txn.rollback) */ transaction (connectionName, tableName, cb) { - let cxn = Adapter.connections.get(connectionName) + const cxn = Adapter.connections.get(connectionName); return new Promise(resolve => { cxn.knex.transaction(txn => { - _.isFunction(cb) && cb(null, txn) + _.isFunction(cb) && cb(null, txn); resolve(txn) }) }) @@ -471,22 +472,21 @@ const Adapter = { * Invoke a database function, aka "stored procedure" * * @param connectionName - * @param tableName * @param procedureName the name of the stored procedure to invoke * @param args An array of arguments to pass to the stored procedure */ - procedure (connectionName, procedureName, args = [ ], cb = args) { - let cxn = Adapter.connections.get(connectionName) - let procedure = cxn.storedProcedures[procedureName.toLowerCase()] + procedure (connectionName, procedureName, args = [], cb = args) { + const cxn = Adapter.connections.get(connectionName); + const procedure = cxn.storedProcedures[procedureName.toLowerCase()]; if (!procedure) { - let error = new Error(`No stored procedure found with the name ${procedureName}`) + const error = new Error(`No stored procedure found with the name ${procedureName}`); return (_.isFunction(cb) ? cb(error) : Promise.reject(error)) } return procedure.invoke(args) .then(result => { - _.isFunction(cb) && cb(null, result) + _.isFunction(cb) && cb(null, result); return result }) .catch(AdapterError.wrap(cb)) @@ -498,15 +498,15 @@ const Adapter = { * TODO not tested */ stream (connectionName, tableName, options, outputStream) { - let cxn = Adapter.connections.get(connectionName) - let wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions) + const cxn = Adapter.connections.get(connectionName); + const wlsql = new WaterlineSequel(cxn.schema, Adapter.wlSqlOptions); return new Promise((resolve, reject) => { - resolve(wlsql.find(tableName, options)) - }) - .then(({ query: [query], values: [values] }) => { - let resultStream = cxn.knex.raw(query, values) - resultStream.pipe(outputStream) + resolve(wlsql.find(tableName, options)) + }) + .then(({query: [query], values: [values]}) => { + const resultStream = cxn.knex.raw(query, values); + resultStream.pipe(outputStream); return new Promise((resolve, reject) => { resultStream.on('end', resolve) @@ -524,19 +524,19 @@ const Adapter = { * @return {[type]} [description] */ teardown (conn, cb = conn) { - let connections = conn ? [ Adapter.connections.get(conn) ] : Adapter.connections.values() - let teardownPromises = [ ] + const connections = conn ? [Adapter.connections.get(conn)] : Adapter.connections.values(); + const teardownPromises = []; - for (let cxn of connections) { - if (!cxn) continue + for (const cxn of connections) { + if (!cxn) continue; teardownPromises.push(cxn.knex.destroy()) } return Promise.all(teardownPromises) .then(() => { // only delete connection references after all open sessions are closed - for (let cxn of connections) { - if (!cxn) continue + for (const cxn of connections) { + if (!cxn) continue; Adapter.connections.delete(cxn.identity) } cb() @@ -550,10 +550,10 @@ const Adapter = { * @param connectionName */ knex (connectionName) { - let cnx = Adapter.connections.get(connectionName) + const cnx = Adapter.connections.get(connectionName); if (cnx) { return cnx.knex } } -} +}; export default Adapter diff --git a/lib/error.js b/lib/error.js index 6c28452..c17a566 100644 --- a/lib/error.js +++ b/lib/error.js @@ -1,14 +1,14 @@ -import _ from 'lodash' -import AdapterUtil from './util' +'use strict'; +import _ from "lodash"; +import AdapterUtil from "./util"; const Errors = { - E_UNIQUE (pgError) { return { code: 'E_UNIQUE', message: pgError.message, - invalidAttributes: [ pgError.column ] + invalidAttributes: [pgError.column] } }, @@ -16,14 +16,14 @@ const Errors = { return { code: 'E_UNIQUE', message: pgError.message, - invalidAttributes: [ pgError.column ] + invalidAttributes: [pgError.column] } }, E_PGERROR (pgError) { return pgError } -} +}; const PostgresErrorMapping = { // uniqueness constraint violation @@ -36,19 +36,19 @@ const PostgresErrorMapping = { '39004': Errors.E_NOTNULL, // todo finish mapping -} +}; const AdapterError = { wrap (cb, txn, payload) { return function (pgError) { - let errorWrapper = PostgresErrorMapping[pgError.code] - let error = pgError + let errorWrapper = PostgresErrorMapping[pgError.code]; + let error = pgError; if (_.isFunction(errorWrapper)) { error = errorWrapper(pgError) } - console.error(error) + console.error(error); if (AdapterUtil.isTransaction(txn)) { return txn.rollback().then(AdapterError.wrap(cb)) } @@ -56,6 +56,6 @@ const AdapterError = { _.isFunction(cb) && cb(error) } } -} +}; export default AdapterError diff --git a/lib/procedures.js b/lib/procedures.js index b44ed01..e4bf873 100644 --- a/lib/procedures.js +++ b/lib/procedures.js @@ -1,5 +1,7 @@ -import _ from 'lodash' -import SQL from './sql' +'use strict'; + +import _ from "lodash"; +import SQL from "./sql"; export const Procedures = { @@ -8,26 +10,26 @@ export const Procedures = { * database connection */ describeAll (cxn) { - let sp = cxn.knex.raw(SQL.storedProcedures) + const sp = cxn.knex.raw(SQL.storedProcedures); return sp - .then(({ rows }) => { - let procedures = _.map(rows, row => { + .then(({rows}) => { + const procedures = _.map(rows, row => { return Procedures.buildStoredProcedure(row, cxn) - }) + }); - procedures.push(Procedures.buildStoredProcedure({ name: 'version' }, cxn)) + procedures.push(Procedures.buildStoredProcedure({name: 'version'}, cxn)); - return _.isEmpty(procedures) ? { } : _.keyBy(procedures, 'name') + return _.isEmpty(procedures) ? {} : _.keyBy(procedures, 'name') }) }, /** * Build a function that invokes the SP with the required arguments */ - buildStoredProcedure ({ schema, name, returntype, signature }, cxn) { - let argTemplate = Procedures.buildArgumentTemplate(signature) - let fullName = (!schema || (schema == 'public')) ? name : `${schema}.${name}` + buildStoredProcedure ({schema, name, returntype, signature}, cxn) { + const argTemplate = Procedures.buildArgumentTemplate(signature); + const fullName = (!schema || (schema === 'public')) ? name : `${schema}.${name}`; return { name: fullName, @@ -44,18 +46,18 @@ export const Procedures = { }, buildArgumentTemplate (signature) { - if (!signature) return '' + if (!signature) return ''; - let args = signature.split(', ') - return args.map(arg => '?').join(',') + const args = signature.split(', '); + return args.map(arg => '?').join(','); }, parseSignature (signature = '') { - let parameters = signature.split(', ') + const parameters = signature.split(', '); return _.map(parameters, param => { return param.split(' ')[0] }) } -} +}; export default Procedures diff --git a/lib/spatial.js b/lib/spatial.js index 00bb017..2b15eab 100644 --- a/lib/spatial.js +++ b/lib/spatial.js @@ -1,4 +1,6 @@ -import _ from 'lodash' +'use strict'; + +import _ from "lodash"; const SpatialUtil = { @@ -10,7 +12,7 @@ const SpatialUtil = { getPostgisVersion (cxn) { return cxn.knex .raw('select postgis_lib_version()') - .then(({ rows: [{ version }] }) => { + .then(({rows: [{version}]}) => { return version.split('.') }) }, @@ -19,7 +21,7 @@ const SpatialUtil = { * Parse and validate the installed postgis version * (must be newer than 2.1) */ - validatePostgisVersion ([ major, minor, patch ]) { + validatePostgisVersion ([major, minor, patch]) { if (major < 2 || (major == 2 && minor < 1)) { throw new Error(` PostGIS ${major}.${minor}.${patch} detected. This adapter requires PostGIS 2.1 or higher. @@ -33,22 +35,22 @@ const SpatialUtil = { }, /* - addGeometryColumns (cxn, tableName, tableDefinition) { - let geometryColumns = _.chain(tableDefinition) - .pick(SpatialUtil.isSpatialColumn) - .map((attr, name) => { - return SpatialUtil.addGeometryColumn(cxn, tableName, name, attr) - }) - .value() - - return Promise.all(geometryColumns) - }, - */ + addGeometryColumns (cxn, tableName, tableDefinition) { + let geometryColumns = _.chain(tableDefinition) + .pick(SpatialUtil.isSpatialColumn) + .map((attr, name) => { + return SpatialUtil.addGeometryColumn(cxn, tableName, name, attr) + }) + .value() + + return Promise.all(geometryColumns) + }, + */ /** * Add a geometry column to a table * http://postgis.net/docs/AddGeometryColumn.html - addGeometryColumn (cxn, tableName, attributeName, definition) { + addGeometryColumn (cxn, tableName, attributeName, definition) { let columnName = attributeName || definition.columnName let srid = definition.srid || 4326 @@ -65,10 +67,10 @@ const SpatialUtil = { * http://postgis.org/docs/ST_Transform.html */ fromGeojson (geojson, definition, cxn) { - if (_.isEmpty(geojson)) return + if (_.isEmpty(geojson)) return; - let obj = _.isString(geojson) ? JSON.parse(geojson) : geojson - let geometry = obj.geometry || obj + let obj = _.isString(geojson) ? JSON.parse(geojson) : geojson; + let geometry = obj.geometry || obj; _.defaultsDeep(geometry, { crs: { @@ -77,7 +79,7 @@ const SpatialUtil = { name: 'EPSG:' + SpatialUtil.getDeclaredSrid(geometry, definition) } } - }) + }); return cxn.st.transform( cxn.st.geomFromGeoJSON(geometry), @@ -90,7 +92,7 @@ const SpatialUtil = { * that we're inserting into the database. */ getDeclaredSrid (geometry, definition) { - let [ $, declaredSrid ] = (_.get(geometry, [ 'crs', 'properties', 'name' ]) || '').split(':') + let [$, declaredSrid] = (_.get(geometry, ['crs', 'properties', 'name']) || '').split(':'); return declaredSrid || SpatialUtil.getNativeSrid(definition) }, @@ -102,7 +104,7 @@ const SpatialUtil = { * geometry(Point, 4326) */ getNativeSrid (definition) { - let [ $, dbType, geoType, srid ] = SpatialUtil.spatialTypeRegex.exec(definition.dbType) + let [$, dbType, geoType, srid] = SpatialUtil.spatialTypeRegex.exec(definition.dbType); return srid || 0 }, @@ -121,11 +123,11 @@ const SpatialUtil = { }, isSpatialColumn (definition) { - if (!definition || !definition.dbType) return false + if (!definition || !definition.dbType) return false; - let [ $, dbType, geoType, srid ] = SpatialUtil.spatialTypeRegex.exec(definition.dbType) || [ ] + let [$, dbType, geoType, srid] = SpatialUtil.spatialTypeRegex.exec(definition.dbType) || []; return dbType === 'geometry' } -} +}; export default SpatialUtil diff --git a/lib/sql.js b/lib/sql.js index b862276..374d49e 100644 --- a/lib/sql.js +++ b/lib/sql.js @@ -1,3 +1,5 @@ +'use strict'; + const SQL = { indexes: ` @@ -35,6 +37,6 @@ const SQL = { and p.proname not like '\\_%' order by schema, name ` -} +}; export default SQL diff --git a/lib/util.js b/lib/util.js index 16b0bc4..66bae27 100644 --- a/lib/util.js +++ b/lib/util.js @@ -1,9 +1,11 @@ -import _ from 'lodash' -import Adapter from './adapter' -import CriteriaParser from 'waterline-sequel/sequel/lib/criteriaProcessor' -import SpatialUtil from './spatial' -import Procedures from './procedures' -import knex from 'knex' +'use strict'; + +import _ from "lodash"; +import Adapter from "./adapter"; +import CriteriaParser from "waterline-sequel/sequel/lib/criteriaProcessor"; +import SpatialUtil from "./spatial"; +import Procedures from "./procedures"; +import knex from "knex"; const Util = { @@ -12,13 +14,13 @@ const Util = { initializeConnection (cxn) { return Adapter.getVersion(cxn) .then(version => { - cxn.version = Util.validateVersion(version) + cxn.version = Util.validateVersion(version); return Procedures.describeAll(cxn) }) .then(procedures => { cxn.storedProcedures = procedures - }) + }); }, getTransaction (txn, query) { @@ -42,23 +44,23 @@ const Util = { * @param definition - a waterline attribute definition */ applyPrimaryKeyConstraints (table, definition) { - let primaryKeys = _.keys(_.pickBy(definition, attribute => { + const primaryKeys = _.keys(_.pickBy(definition, attribute => { return attribute.primaryKey - })) + })); - if (!primaryKeys.length) return + if (!primaryKeys.length) return; return table.primary(primaryKeys) }, applyCompositeUniqueConstraints (table, definition) { _.each(definition, (attribute, name) => { - let uniqueDef = attribute.unique || { } - if (attribute.primaryKey) return - if (_.isEmpty(uniqueDef)) return - if (!_.isArray(uniqueDef.composite)) return + const uniqueDef = attribute.unique || {}; + if (attribute.primaryKey) return; + if (_.isEmpty(uniqueDef)) return; + if (!_.isArray(uniqueDef.composite)) return; - let uniqueKeys = _.uniq([ name, ...uniqueDef.composite ]) + const uniqueKeys = _.uniq([name, ...uniqueDef.composite]); table.unique(uniqueKeys) }) @@ -85,7 +87,7 @@ const Util = { return } return _.map(definition, (value, key) => { - if (key == 'defaultsTo' && definition.autoIncrement && value == 'AUTO_INCREMENT') { + if (key === 'defaultsTo' && definition.autoIncrement && value === 'AUTO_INCREMENT') { return } @@ -97,12 +99,12 @@ const Util = { * Apply value constraints to a particular column */ applyParticularColumnConstraint (column, constraintName, value, definition) { - if (!value) return + if (!value) return; switch (constraintName) { case 'index': - return column.index(_.get(value, 'indexName'), _.get(value, 'indexType')) + return column.index(_.get(value, 'indexName'), _.get(value, 'indexType')); /** * Acceptable forms: @@ -118,60 +120,60 @@ const Util = { if ((value === true || _.get(value, 'unique') === true) && !definition.primaryKey) { column.unique() } - return + return; case 'notNull': - return column.notNullable() + return column.notNullable(); case 'defaultsTo': - if (_.isArray(value) && definition.type == 'array') { + if (_.isArray(value) && definition.type === 'array') { return column.defaultTo('{' + value.join(',') + '}') } if (!_.isFunction(value)) { - return column.defaultTo(value) + return column.defaultTo(value); } - /* - * TODO - case 'comment': - return table.comment(attr.comment || attr.description) - */ + /* + * TODO + case 'comment': + return table.comment(attr.comment || attr.description) + */ case 'primaryKey': case 'autoIncrement': - if (definition.dbType == 'uuid') { + if (definition.dbType === 'uuid') { return column.defaultTo(knex.raw('uuid_generate_v4()')) } } }, - /** * Create a column for Knex from a Waterline attribute definition */ toKnexColumn (table, _name, attrDefinition, wlModel, schema) { - let attr = _.isObject(attrDefinition) ? attrDefinition : { type: attrDefinition } - let type = attr.autoIncrement ? 'serial' : attr.type - let name = attr.columnName || _name + const attr = _.isObject(attrDefinition) ? attrDefinition : {type: attrDefinition}; + let type = attr.autoIncrement ? 'serial' : attr.type; + const name = attr.columnName || _name; if (_.includes(wlModel.meta.uuids, _name) && !wlModel.meta.junctionTable) { - wlModel._attributes[_name].type = 'uuid' - wlModel.definition[_name].type = 'uuid' - wlModel._cast._types[_name] = 'uuid' + wlModel._attributes[_name].type = 'uuid'; + wlModel.definition[_name].type = 'uuid'; + wlModel._cast._types[_name] = 'uuid'; - type = 'uuid' + type = 'uuid'; } if (attrDefinition.foreignKey && attrDefinition.model) { - const refModel = schema[attrDefinition.model] + const refModel = schema[attrDefinition.model]; try { - const fpk = Adapter.getPrimaryKey({ collections: schema }, attrDefinition.model) + const fpk = Adapter.getPrimaryKey({collections: schema}, attrDefinition.model); if (_.includes(refModel.meta.uuids, fpk) && !refModel.meta.junctionTable) { type = 'uuid' } } - catch (e) { } + catch (e) { + } } // set key types for m2m @@ -179,7 +181,8 @@ const Util = { try { type = schema[attrDefinition.references].attributes[attrDefinition.on].type } - catch (e) { } + catch (e) { + } } /** @@ -202,27 +205,27 @@ const Util = { case 'text': case 'mediumtext': case 'longtext': - return table.text(name, type) + return table.text(name, type); /** * table.string(name, [length]) * Adds a string column, with optional length defaulting to 255. */ case 'character varying': - return table.string(name, attr.length) + return table.string(name, attr.length); case 'serial': case 'smallserial': - return table.specificType(name, 'serial') + return table.specificType(name, 'serial'); case 'bigserial': - return table.specificType(name, 'bigserial') + return table.specificType(name, 'bigserial'); /** * table.boolean(name) * Adds a boolean column. */ case 'boolean': - return table.boolean(name) + return table.boolean(name); /** * table.integer(name) @@ -231,7 +234,7 @@ const Util = { case 'int': case 'integer': case 'smallint': - return table.integer(name) + return table.integer(name); /** * table.bigInteger(name) @@ -241,7 +244,7 @@ const Util = { */ case 'bigint': case 'biginteger': - return table.bigInteger(name) + return table.bigInteger(name); /** * table.float(column, [precision], [scale]) @@ -249,31 +252,31 @@ const Util = { */ case 'real': case 'float': - return table.float(name, attr.precision, attr.scale) + return table.float(name, attr.precision, attr.scale); case 'double': - return table.float(name, 15, attr.scale) + return table.float(name, 15, attr.scale); /** * table.decimal(column, [precision], [scale]) * Adds a decimal column, with optional precision and scale. */ case 'decimal': - return table.decimal(name, attr.precision, attr.scale) + return table.decimal(name, attr.precision, attr.scale); /** * table.time(name) * Adds a time column. */ case 'time': - return table.time(name) + return table.time(name); /** * table.date(name) * Adds a date column. */ case 'date': - return table.date(name) + return table.date(name); /** * table.timestamp(name, [standard]) @@ -286,10 +289,10 @@ const Util = { */ case 'datestamp': case 'datetime': - return table.timestamp(name, attr.standard) + return table.timestamp(name, attr.standard); case 'array': - return table.specificType(name, 'text ARRAY') + return table.specificType(name, 'text ARRAY'); /** * table.json(name, [jsonb]) @@ -299,10 +302,10 @@ const Util = { */ case 'json': case 'jsonb': - return table.jsonb(name) + return table.jsonb(name); case 'binary': - return table.binary(name) + return table.binary(name); /** * table.uuid(name) @@ -310,7 +313,7 @@ const Util = { * and falling back to a char(36) in other databases. */ case 'uuid': - return table.uuid(name) + return table.uuid(name); default: return table.specificType(name, attr.dbType || type) @@ -321,9 +324,9 @@ const Util = { * Convert a parameterized waterline query into a knex-compatible query string */ toKnexRawQuery (sql) { - const wlSqlOptions = Adapter.wlSqlOptions + const wlSqlOptions = Adapter.wlSqlOptions; - sql = (sql || '').replace(/\$\d+/g, '?') + sql = (sql || '').replace(/\$\d+/g, '?'); if (_.get(wlSqlOptions, 'wlNext.caseSensitive')) { sql = sql.replace(/LOWER\(("\w+"."\w+")\)/ig, '$1') } @@ -352,8 +355,8 @@ const Util = { castResultValues (values, schema) { return _.mapValues(values, (value, attr) => { - let definition = schema.definition[attr] - if (!definition) return value + const definition = schema.definition[attr]; + if (!definition) return value; if (SpatialUtil.isSpatialColumn(definition)) { try { @@ -392,11 +395,11 @@ const Util = { sanitizeRecord (data, schema, cxn) { _.each(data, (value, attr) => { - let definition = schema.definition[attr] + const definition = schema.definition[attr]; // remove unrecognized fields (according to schema) from data if (!definition) { - delete data[attr] + delete data[attr]; return } @@ -407,7 +410,7 @@ const Util = { if (SpatialUtil.isSpatialColumn(definition)) { data[attr] = SpatialUtil.fromGeojson(data[attr], definition, cxn) } - }) + }); return data }, @@ -416,10 +419,10 @@ const Util = { * Construct a knex query that joins one or more tables for populate() */ buildKnexJoinQuery (cxn, tableName, options) { - let schema = cxn.collections[tableName] - let pk = Adapter.getPrimaryKey(cxn, tableName) + const schema = cxn.collections[tableName]; + const pk = Adapter.getPrimaryKey(cxn, tableName); - let query = cxn.knex + const query = cxn.knex .select(`${tableName}.*`) .select(SpatialUtil.buildSpatialSelect(schema.definition, tableName, cxn)) .select(cxn.knex.raw(Util.buildSelectAggregationColumns(cxn, options))) @@ -428,25 +431,25 @@ const Util = { .groupBy(`${tableName}.${pk}`) .orderByRaw(Util.buildOrderByClause(tableName, options)) .limit(options.limit || Util.PG_MAX_INT) - .offset(options.skip || 0) + .offset(options.skip || 0); - Util.buildKnexJoins(cxn, options, query) + Util.buildKnexJoins(cxn, options, query); return query }, addSelectColumns (columns, query) { - let [ oldSelectClause, fromClause ] = query.split('FROM') - let newSelectClause = [ oldSelectClause.split(','), ...columns ].join(',') + const [oldSelectClause, fromClause] = query.split('FROM'); + const newSelectClause = [oldSelectClause.split(','), ...columns].join(','); return `${newSelectClause} FROM ${fromClause}` }, - buildKnexJoins (cxn, { joins }, query) { + buildKnexJoins (cxn, {joins}, query) { _.each(joins, join => { - let parentAlias = Util.getParentAlias(join) - let alias = Util.getSubqueryAlias(join) - let subquery = Util.buildKnexJoinSubquery(cxn, join) + const parentAlias = Util.getParentAlias(join); + const alias = Util.getSubqueryAlias(join); + const subquery = Util.buildKnexJoinSubquery(cxn, join); query.leftJoin( cxn.knex.raw(`(${subquery}) as "${alias}"`), @@ -456,8 +459,8 @@ const Util = { }) }, - buildKnexJoinSubquery (cxn, { criteria, child }) { - let schema = cxn.collections[child] + buildKnexJoinSubquery (cxn, {criteria, child}) { + const schema = cxn.collections[child]; return cxn.knex .select('*') @@ -466,28 +469,28 @@ const Util = { .where(Util.buildWhereClause(cxn, child, criteria)) }, - buildOrderByClause (tableName, { sort }) { + buildOrderByClause (tableName, {sort}) { if (_.isEmpty(sort)) { return '1' } - let queryTokens = _.map(sort, (_direction, field) => { - let direction = _direction === 1 ? '' : 'desc' - return `"${tableName}"."${field}" ${direction}` - }) + const queryTokens = _.map(sort, (_direction, field) => { + const direction = _direction === 1 ? '' : 'desc'; + return `"${tableName}"."${field}" ${direction}`; + }); return queryTokens.join(', ') }, buildWhereClause (cxn, tableName, options) { - let parser = new CriteriaParser(tableName, cxn.schema, Adapter.wlSqlOptions) - let { query, values } = parser.read(_.omit(options, [ + const parser = new CriteriaParser(tableName, cxn.schema, Adapter.wlSqlOptions); + const {query, values} = parser.read(_.omit(options, [ 'sort', 'limit', 'groupBy', 'skip' - ])) + ])); return cxn.knex.raw(Util.toKnexRawQuery(query), Util.castValues(values)) }, - getJoinAlias ({ alias, parentKey, removeParentKey }) { + getJoinAlias ({alias, parentKey, removeParentKey}) { if (alias != parentKey && removeParentKey === true) { return parentKey } @@ -509,15 +512,15 @@ const Util = { return Util.getJoinAlias(join) + join.child }, - buildSelectAggregationColumns (cxn, { joins }) { - return _.map(_.reject(joins, { select: false }), join => { + buildSelectAggregationColumns (cxn, {joins}) { + return _.map(_.reject(joins, {select: false}), join => { - let criteria = join.criteria || { } - let subqueryAlias = Util.getSubqueryAlias(join) - let asColumn = Util.getJoinAlias(join) - let orderBy = Util.buildOrderByClause(subqueryAlias, criteria) - let start = (criteria.skip || 0) + 1 - let end = (criteria.limit || (Util.PG_MAX_INT - start)) + start - 1 + const criteria = join.criteria || {}; + const subqueryAlias = Util.getSubqueryAlias(join); + const asColumn = Util.getJoinAlias(join); + const orderBy = Util.buildOrderByClause(subqueryAlias, criteria); + const start = (criteria.skip || 0) + 1; + const end = (criteria.limit || (Util.PG_MAX_INT - start)) + start - 1; if (!criteria.skip && !criteria.limit) { return `json_agg("${subqueryAlias}".* order by ${orderBy}) as "${asColumn}"` @@ -530,7 +533,7 @@ const Util = { /** * Parse and validate a Postgres "select version()" result */ - validateVersion ([ major, minor, patch ]) { + validateVersion ([major, minor, patch]) { if (major < 9 || (major === 9 && minor < 4)) { throw new Error(` PostgreSQL ${major}.${minor}.${patch} detected. This adapter requires PostgreSQL 9.4 or higher. @@ -542,6 +545,6 @@ const Util = { return parseFloat(`${major}.${minor}`) } -} +}; export default Util diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d02924f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4655 @@ +{ + "name": "waterline-postgresql", + "version": "0.14.8", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@sailshq/lodash": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.2.tgz", + "integrity": "sha1-FWfUc0U2TCwuIHe8ETSHsd/mIVQ=", + "dev": true + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "dev": true, + "requires": { + "stable": "0.1.6" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "anchor": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/anchor/-/anchor-0.11.5.tgz", + "integrity": "sha1-WjRQVJQu83JpLaWaMSwV9cHxD3g=", + "dev": true, + "requires": { + "@mapbox/geojsonhint": "1.2.1", + "@sailshq/lodash": "3.10.2", + "validator": "4.4.0" + }, + "dependencies": { + "@mapbox/geojsonhint": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@mapbox/geojsonhint/-/geojsonhint-1.2.1.tgz", + "integrity": "sha1-Kv5DXo1WeqUYc+seG6ZcxNRjx6A=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "concat-stream": "1.4.10", + "jsonlint-lines": "1.7.1", + "minimist": "1.1.1", + "text-table": "0.2.0" + } + }, + "minimist": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz", + "integrity": "sha1-G8K8cWWM3KVxJHVoQ2NhWwtPaVs=", + "dev": true + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } + }, + "ap": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ap/-/ap-0.2.0.tgz", + "integrity": "sha1-rglCYAspkS8NKxTsYMRejzMLYRA=" + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-slice": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", + "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "babel": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel/-/babel-5.8.38.tgz", + "integrity": "sha1-37CHwiiUkXxXb7Z86c8yjUWGKfs=", + "dev": true, + "requires": { + "babel-core": "5.8.38", + "chokidar": "1.7.0", + "commander": "2.11.0", + "convert-source-map": "1.5.0", + "fs-readdir-recursive": "0.1.2", + "glob": "5.0.15", + "lodash": "3.10.1", + "output-file-sync": "1.1.2", + "path-exists": "1.0.0", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.6" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "babel-core": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", + "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", + "dev": true, + "requires": { + "babel-plugin-constant-folding": "1.0.1", + "babel-plugin-dead-code-elimination": "1.0.2", + "babel-plugin-eval": "1.0.1", + "babel-plugin-inline-environment-variables": "1.0.1", + "babel-plugin-jscript": "1.0.4", + "babel-plugin-member-expression-literals": "1.0.1", + "babel-plugin-property-literals": "1.0.1", + "babel-plugin-proto-to-assign": "1.0.4", + "babel-plugin-react-constant-elements": "1.0.3", + "babel-plugin-react-display-name": "1.0.3", + "babel-plugin-remove-console": "1.0.1", + "babel-plugin-remove-debugger": "1.0.1", + "babel-plugin-runtime": "1.0.7", + "babel-plugin-undeclared-variables-check": "1.0.2", + "babel-plugin-undefined-to-void": "1.1.6", + "babylon": "5.8.38", + "bluebird": "2.11.0", + "chalk": "1.1.3", + "convert-source-map": "1.5.0", + "core-js": "1.2.7", + "debug": "2.6.8", + "detect-indent": "3.0.1", + "esutils": "2.0.2", + "fs-readdir-recursive": "0.1.2", + "globals": "6.4.1", + "home-or-tmp": "1.0.0", + "is-integer": "1.0.7", + "js-tokens": "1.0.1", + "json5": "0.4.0", + "lodash": "3.10.1", + "minimatch": "2.0.10", + "output-file-sync": "1.1.2", + "path-exists": "1.0.0", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "regenerator": "0.8.40", + "regexpu": "1.3.0", + "repeating": "1.1.3", + "resolve": "1.1.7", + "shebang-regex": "1.0.0", + "slash": "1.0.0", + "source-map": "0.5.6", + "source-map-support": "0.2.10", + "to-fast-properties": "1.0.3", + "trim-right": "1.0.1", + "try-resolve": "1.0.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "babel-plugin-constant-folding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", + "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", + "dev": true + }, + "babel-plugin-dead-code-elimination": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", + "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", + "dev": true + }, + "babel-plugin-eval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", + "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", + "dev": true + }, + "babel-plugin-inline-environment-variables": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", + "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", + "dev": true + }, + "babel-plugin-jscript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", + "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", + "dev": true + }, + "babel-plugin-member-expression-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", + "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", + "dev": true + }, + "babel-plugin-property-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", + "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", + "dev": true + }, + "babel-plugin-proto-to-assign": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", + "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", + "dev": true, + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "babel-plugin-react-constant-elements": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", + "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", + "dev": true + }, + "babel-plugin-react-display-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", + "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", + "dev": true + }, + "babel-plugin-remove-console": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", + "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", + "dev": true + }, + "babel-plugin-remove-debugger": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", + "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", + "dev": true + }, + "babel-plugin-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", + "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", + "dev": true + }, + "babel-plugin-undeclared-variables-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", + "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", + "dev": true, + "requires": { + "leven": "1.0.2" + } + }, + "babel-plugin-undefined-to-void": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", + "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", + "dev": true + }, + "babylon": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", + "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "breakable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "buffer-writer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", + "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "commoner": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", + "dev": true, + "requires": { + "commander": "2.11.0", + "detective": "4.5.0", + "glob": "5.0.15", + "graceful-fs": "4.1.11", + "iconv-lite": "0.4.18", + "mkdirp": "0.5.1", + "private": "0.1.7", + "q": "1.5.0", + "recast": "0.11.23" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.7", + "source-map": "0.5.6" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", + "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "1.1.14", + "typedarray": "0.0.6" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", + "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", + "dev": true + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-diff": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.3.tgz", + "integrity": "sha1-ZJBxAgRh0srDrAwK3Ud0pHO3eZ4=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.2" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "defs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", + "dev": true, + "requires": { + "alter": "0.2.0", + "ast-traverse": "0.1.1", + "breakable": "1.0.0", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "simple-fmt": "0.1.0", + "simple-is": "0.2.0", + "stringmap": "0.2.2", + "stringset": "0.2.1", + "tryor": "0.1.2", + "yargs": "3.27.0" + } + }, + "deprecated": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "detect-file": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "dev": true, + "requires": { + "fs-exists-sync": "0.1.0" + } + }, + "detect-indent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "minimist": "1.1.3", + "repeating": "1.1.3" + } + }, + "detective": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", + "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "dev": true, + "requires": { + "acorn": "4.0.13", + "defined": "1.0.0" + } + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "1.3.3" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + } + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "extend": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.1.tgz", + "integrity": "sha1-HugBBonnOV/5RIJByYZSvHWagmA=" + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "findup-sync": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.2.1.tgz", + "integrity": "sha1-4KkKRQB1xJRm7lE3MgV1FLgeh4w=", + "requires": { + "glob": "4.3.5" + } + }, + "fined": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "is-plain-object": "2.0.3", + "object.defaults": "1.1.0", + "object.pick": "1.2.0", + "parse-filepath": "1.0.1" + }, + "dependencies": { + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "fs-readdir-recursive": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", + "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "0.1.0" + } + }, + "generic-pool": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", + "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=" + }, + "geojsonhint": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/geojsonhint/-/geojsonhint-1.2.1.tgz", + "integrity": "sha1-U0gnDsrDxCi0Vc/tqyRdQKWun8c=", + "requires": { + "chalk": "1.1.3", + "concat-stream": "1.4.10", + "jsonlint-lines": "1.7.1", + "minimist": "1.1.1", + "text-table": "0.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz", + "integrity": "sha1-G8K8cWWM3KVxJHVoQ2NhWwtPaVs=" + } + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "glob": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz", + "integrity": "sha1-gPuwjKVA8jiszl0R0em8QedRc9M=", + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "4.3.5", + "glob2base": "0.0.12", + "minimatch": "2.0.10", + "ordered-read-streams": "0.1.0", + "through2": "0.6.5", + "unique-stream": "1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + } + } + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "0.5.2" + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "0.1.1" + } + }, + "global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true, + "requires": { + "global-prefix": "0.1.5", + "is-windows": "0.2.0" + } + }, + "global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1", + "ini": "1.3.4", + "is-windows": "0.2.0", + "which": "1.2.14" + } + }, + "globals": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", + "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", + "dev": true + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "1.0.0", + "chalk": "1.1.3", + "deprecated": "0.0.1", + "gulp-util": "3.0.8", + "interpret": "1.0.3", + "liftoff": "2.3.0", + "minimist": "1.1.3", + "orchestrator": "0.3.8", + "pretty-hrtime": "1.0.3", + "semver": "4.3.6", + "tildify": "1.0.0", + "v8flags": "2.1.1", + "vinyl-fs": "0.3.14" + }, + "dependencies": { + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "findup-sync": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "dev": true, + "requires": { + "detect-file": "0.1.0", + "is-glob": "2.0.1", + "micromatch": "2.3.11", + "resolve-dir": "0.1.1" + } + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "liftoff": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", + "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "dev": true, + "requires": { + "extend": "3.0.1", + "findup-sync": "0.4.3", + "fined": "1.1.0", + "flagged-respawn": "0.3.2", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.mapvalues": "4.6.0", + "rechoir": "0.6.2", + "resolve": "1.1.7" + } + } + } + }, + "gulp-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-5.3.0.tgz", + "integrity": "sha1-GGlYYkwMeGYK1qUS9CNfyIhtLBs=", + "dev": true, + "requires": { + "babel-core": "5.8.38", + "gulp-util": "3.0.8", + "object-assign": "4.1.1", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl-sourcemaps-apply": "0.2.1" + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.0.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.1.3", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "hashmap": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hashmap/-/hashmap-2.1.0.tgz", + "integrity": "sha1-/hY6p4HbRmW7129VTjkMjFXOkgo=" + }, + "home-or-tmp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", + "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "user-home": "1.1.1" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" + } + }, + "i": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", + "integrity": "sha1-HSuFQVjsgWkRPGy39raAHpniEdU=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true, + "requires": { + "is-relative": "0.2.1", + "is-windows": "0.2.0" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-integer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", + "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-plain-object": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", + "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true, + "requires": { + "is-unc-path": "0.1.2" + } + }, + "is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "js-tokens": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", + "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "jshint": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", + "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", + "dev": true, + "requires": { + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "3.7.0", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "lodash": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", + "dev": true + }, + "jsonlint-lines": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz", + "integrity": "sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8=", + "requires": { + "JSV": "4.0.2", + "nomnom": "1.8.1" + } + }, + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "knex": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.10.0.tgz", + "integrity": "sha1-bYW53yJNEx89s3xbmC4HaYXmYrE=", + "requires": { + "bluebird": "2.11.0", + "chalk": "1.1.3", + "commander": "2.11.0", + "debug": "2.6.8", + "inherits": "2.0.3", + "interpret": "0.6.6", + "liftoff": "2.0.3", + "lodash": "3.10.1", + "minimist": "1.1.3", + "mkdirp": "0.5.1", + "pg-connection-string": "0.1.3", + "pool2": "1.4.1", + "readable-stream": "1.1.14", + "tildify": "1.0.0", + "v8flags": "2.1.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, + "knex-postgis": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/knex-postgis/-/knex-postgis-0.1.11.tgz", + "integrity": "sha1-eWHa/2Nr6rI0QCwa9w96ZJttZY4=", + "requires": { + "geojsonhint": "1.2.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "leven": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", + "dev": true + }, + "liftoff": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.0.3.tgz", + "integrity": "sha1-+6slNipQasKKPbDFXN6VYvvXBFY=", + "requires": { + "extend": "2.0.1", + "findup-sync": "0.2.1", + "flagged-respawn": "0.3.2", + "minimist": "1.1.3", + "resolve": "1.1.7" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", + "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.0", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "debug": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", + "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true, + "optional": true + }, + "natives": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", + "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", + "dev": true + }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", + "dev": true + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "1.0.1", + "array-slice": "1.0.0", + "for-own": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", + "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", + "dev": true, + "requires": { + "isobject": "2.1.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "0.1.5", + "sequencify": "0.0.7", + "stream-consume": "0.1.0" + } + }, + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "packet-reader": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.2.0.tgz", + "integrity": "sha1-gZ300BC4LV6lZx+KGjrPA5vNdwA=" + }, + "parse-filepath": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true, + "requires": { + "is-absolute": "0.2.6", + "map-cache": "0.2.2", + "path-root": "0.1.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "path-exists": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "0.1.2" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "pg": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/pg/-/pg-4.5.6.tgz", + "integrity": "sha1-od5IeK+lyyCKJYFfX/idLg6/Uvg=", + "requires": { + "buffer-writer": "1.0.1", + "generic-pool": "2.4.2", + "packet-reader": "0.2.0", + "pg-connection-string": "0.1.3", + "pg-types": "1.12.0", + "pgpass": "0.0.3", + "semver": "4.3.6" + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-cursor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-1.0.0.tgz", + "integrity": "sha1-tbS3vyd7NHjejBHN+dNLzaaXPA8=" + }, + "pg-query-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pg-query-stream/-/pg-query-stream-1.0.0.tgz", + "integrity": "sha1-qbNNpcgcCkw3sosa81JZ6JQw/Jg=", + "requires": { + "pg-cursor": "1.0.0", + "readable-stream": "2.3.3" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "pg-types": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.0.tgz", + "integrity": "sha1-itO3uJfj/UY+Yt4kGtX8ZAtKZvA=", + "requires": { + "ap": "0.2.0", + "postgres-array": "1.0.2", + "postgres-bytea": "1.0.0", + "postgres-date": "1.0.3", + "postgres-interval": "1.1.0" + } + }, + "pgpass": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-0.0.3.tgz", + "integrity": "sha1-EuZ+NDsxicLzEgbrycwL7//PkUA=", + "requires": { + "split": "0.3.3" + } + }, + "pkginfo": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", + "integrity": "sha1-NJ27f/04CB/K3AhT32h/DHdEzWU=", + "dev": true + }, + "pool2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/pool2/-/pool2-1.4.1.tgz", + "integrity": "sha1-MvvU9qN3ZFmQAvrquKBJSip2otA=", + "requires": { + "debug": "2.6.8", + "double-ended-queue": "2.1.0-0", + "hashmap": "2.1.0", + "simple-backoff": "1.0.0" + } + }, + "postgres-array": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", + "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", + "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" + }, + "postgres-interval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.0.tgz", + "integrity": "sha1-EDHnusNFZBMoYq3J62xtLzqnW7Q=", + "requires": { + "xtend": "4.0.1" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "prompt": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "dev": true, + "requires": { + "pkginfo": "0.4.0", + "read": "1.0.7", + "revalidator": "0.1.8", + "utile": "0.2.1", + "winston": "0.8.3" + } + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "0.0.7" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "recast": { + "version": "0.10.33", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", + "dev": true, + "requires": { + "ast-types": "0.8.12", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.7", + "source-map": "0.5.6" + }, + "dependencies": { + "ast-types": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.1.7" + } + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator": { + "version": "0.8.40", + "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", + "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", + "dev": true, + "requires": { + "commoner": "0.10.8", + "defs": "1.1.1", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.7", + "recast": "0.10.33", + "through": "2.3.8" + } + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "regexpu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", + "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "recast": "0.10.33", + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + }, + "resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true, + "requires": { + "expand-tilde": "1.2.2", + "global-modules": "0.2.3" + } + }, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sails-memory": { + "version": "github:balderdashy/sails-memory#d686d185a460786789988d6483a33cd9d744959e", + "dev": true, + "requires": { + "async": "1.5.2", + "lodash": "3.10.1", + "waterline-criteria": "1.0.1", + "waterline-cursor": "0.0.7", + "waterline-errors": "0.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "waterline-criteria": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/waterline-criteria/-/waterline-criteria-1.0.1.tgz", + "integrity": "sha1-iHcFfsfWRyEAAXo6V/zJS2Kh/ak=", + "dev": true, + "requires": { + "lodash": "3.10.1" + } + } + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + }, + "sequencify": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "should": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/should/-/should-11.2.1.tgz", + "integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=", + "dev": true, + "requires": { + "should-equal": "1.0.1", + "should-format": "3.0.3", + "should-type": "1.4.0", + "should-type-adaptors": "1.0.1", + "should-util": "1.0.0" + } + }, + "should-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", + "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", + "dev": true, + "requires": { + "should-type": "1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "1.4.0", + "should-type-adaptors": "1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", + "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", + "dev": true, + "requires": { + "should-type": "1.4.0", + "should-util": "1.0.0" + } + }, + "should-util": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", + "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "simple-backoff": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-backoff/-/simple-backoff-1.0.0.tgz", + "integrity": "sha1-pPopDsAZacB8oTb+i7+0Dg7zWsI=" + }, + "simple-fmt": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", + "dev": true + }, + "simple-is": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-support": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "dev": true, + "requires": { + "source-map": "0.1.32" + }, + "dependencies": { + "source-map": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "requires": { + "through": "2.3.8" + } + }, + "stable": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz", + "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "stream-consume": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", + "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "stringmap": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", + "dev": true + }, + "stringset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "is-utf8": "0.2.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "switchback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/switchback/-/switchback-2.0.0.tgz", + "integrity": "sha1-KifZAzPe8wWnUh3MHjL2qOOtcgU=", + "dev": true, + "requires": { + "lodash": "2.4.2" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "tildify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.0.0.tgz", + "integrity": "sha1-KgIdtej73gqPi03zetqo+x05190=", + "requires": { + "user-home": "1.1.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", + "dev": true + }, + "tryor": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" + }, + "unique-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utile": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", + "dev": true, + "requires": { + "async": "0.2.10", + "deep-equal": "1.0.1", + "i": "0.3.5", + "mkdirp": "0.5.1", + "ncp": "0.4.2", + "rimraf": "2.6.1" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "requires": { + "user-home": "1.1.1" + } + }, + "validator": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-4.4.0.tgz", + "integrity": "sha1-NeKVVd1feCb5cKTq7P+ebfbfPaY=", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "1.0.3", + "glob-stream": "3.1.18", + "glob-watcher": "0.0.6", + "graceful-fs": "3.0.11", + "mkdirp": "0.5.1", + "strip-bom": "1.0.0", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "graceful-fs": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "requires": { + "natives": "1.1.0" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "waterline": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/waterline/-/waterline-0.11.11.tgz", + "integrity": "sha1-bS7BTY9srqSUNK2tiDKuShvusog=", + "dev": true, + "requires": { + "anchor": "0.11.5", + "async": "1.5.2", + "bluebird": "3.2.1", + "deep-diff": "0.3.3", + "lodash": "3.10.1", + "prompt": "0.2.14", + "switchback": "2.0.0", + "waterline-criteria": "0.11.2", + "waterline-schema": "0.2.2" + }, + "dependencies": { + "bluebird": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.2.1.tgz", + "integrity": "sha1-POzzUEkEwwzj55wXCHfok6EZEP0=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "waterline-adapter-tests": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/waterline-adapter-tests/-/waterline-adapter-tests-0.11.2.tgz", + "integrity": "sha1-0o2nLCmGpl5mN/llvqlwgecV68w=", + "dev": true, + "requires": { + "async": "1.5.2", + "bluebird": "3.2.1", + "lodash": "3.10.1", + "mocha": "2.4.5", + "sails-memory": "github:balderdashy/sails-memory#d686d185a460786789988d6483a33cd9d744959e", + "should": "8.2.1", + "waterline": "0.11.11" + }, + "dependencies": { + "bluebird": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.2.1.tgz", + "integrity": "sha1-POzzUEkEwwzj55wXCHfok6EZEP0=", + "dev": true + }, + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "glob": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "dev": true, + "requires": { + "graceful-fs": "2.0.3", + "inherits": "2.0.3", + "minimatch": "0.2.14" + } + }, + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "dev": true + }, + "growl": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz", + "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "mocha": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.4.5.tgz", + "integrity": "sha1-FRdo3Sh161G8gpXpgAAm6fK7OY8=", + "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.3", + "growl": "1.8.1", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "should": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/should/-/should-8.2.1.tgz", + "integrity": "sha1-aW3q/mMbOSbgc/X2xumHjipVPKE=", + "dev": true, + "requires": { + "should-equal": "0.7.2", + "should-format": "0.3.2", + "should-type": "0.2.0" + } + }, + "should-equal": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-0.7.2.tgz", + "integrity": "sha1-pqlj2/UBuT7TS3gHrn1/BC/CTKg=", + "dev": true, + "requires": { + "should-type": "0.2.0" + } + }, + "should-format": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.2.tgz", + "integrity": "sha1-pZgx4Bot3uFJkRvHFIvlyAMZ4f8=", + "dev": true, + "requires": { + "should-type": "0.2.0" + } + }, + "should-type": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", + "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + } + } + }, + "waterline-criteria": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/waterline-criteria/-/waterline-criteria-0.11.2.tgz", + "integrity": "sha1-apEVVjd47531TEbF0Wh8unmoTqE=", + "dev": true, + "requires": { + "lodash": "2.4.2" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "waterline-cursor": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/waterline-cursor/-/waterline-cursor-0.0.7.tgz", + "integrity": "sha1-zNnP7WYdlK9gJ0lZQrX6J61l/rM=", + "dev": true, + "requires": { + "async": "1.5.2", + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "waterline-errors": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/waterline-errors/-/waterline-errors-0.10.1.tgz", + "integrity": "sha1-7mNjKq3emTJxt1FLfKmNn9W4ai4=" + }, + "waterline-schema": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/waterline-schema/-/waterline-schema-0.2.2.tgz", + "integrity": "sha1-Olrw15XlwjsID7sLmfnQCl5Aekw=", + "dev": true, + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "waterline-sequel": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/waterline-sequel/-/waterline-sequel-0.5.7.tgz", + "integrity": "sha1-HX5DKLq/rYoxvT+yaobXGACtgo0=", + "requires": { + "lodash": "3.10.0" + }, + "dependencies": { + "lodash": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.0.tgz", + "integrity": "sha1-k9UcZygopEFqEq9XIguoqHN+L7s=" + } + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "dev": true, + "requires": { + "async": "0.2.10", + "colors": "0.6.2", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "pkginfo": "0.3.1", + "stack-trace": "0.0.10" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "dev": true + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", + "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "window-size": "0.1.4", + "y18n": "3.2.1" + } + } + } +} diff --git a/package.json b/package.json index ce00fca..5f8ac48 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "babel": "^5.6.23", "gulp": "^3.9.0", "gulp-babel": "^5.2.0", + "jshint": "^2.9.5", "mocha": "*", "should": "*", "waterline": "^0.11.0", diff --git a/test/integration/pg/index.js b/test/integration/pg/index.js index abba125..87bb857 100644 --- a/test/integration/pg/index.js +++ b/test/integration/pg/index.js @@ -1,99 +1,95 @@ -'use strict' +'use strict'; -const _ = require('lodash') -const assert = require('assert') -const Waterline = require('waterline') -const models = require('./models') -const Adapter = require('../../../dist/adapter') +const assert = require('assert'); +const Waterline = require('waterline'); +const models = require('./models'); +const Adapter = require('../../../dist/adapter'); describe('pg edge cases', () => { - const wlconfig = { - adapters: { - edgetests: Adapter - }, - connections: { - edgetests: { - migrate: 'drop', - adapter: 'edgetests', - connection: { + const wlconfig = { + adapters: { + edgetests: Adapter + }, + connections: { + edgetests: { + migrate: 'drop', + adapter: 'edgetests', + connection: {} + } } - } - } - } - let waterline, orm + }; + let waterline, orm; - before(done => { - waterline = new Waterline(); - waterline.loadCollection(models.ArrayModel) - waterline.loadCollection(models.JsonModel) - waterline.initialize(wlconfig, (err, _orm) => { - if (err) return done(err) + before(done => { + waterline = new Waterline(); + waterline.loadCollection(models.ArrayModel); + waterline.loadCollection(models.JsonModel); + waterline.initialize(wlconfig, (err, _orm) => { + if (err) return done(err); - orm = _orm.collections - done() - }) - }) + orm = _orm.collections; + done(); + }); + }); - describe('array type', () => { - it('should initialize without error', () => { - assert(orm.arraymodel) - }) - it('should support insertion with list field', done => { - orm.arraymodel.create({ - list: [1,2,3], - listSyntaxA: [4,5,6], - listOfObjects: [{ index: 1 }, { index: 2 }] - }) - .then(record => { - assert.equal(record.list.length, 3) - assert.equal(record.listSyntaxA.length, 3) - assert.equal(record.listOfObjects.length, 2) - done() - }) - }) - it('should parse array of objects on load', done => { - orm.arraymodel.create({ - list: [1,2,3], - listSyntaxA: [4,5,6], - listOfObjects: [{ index: 1 }, { index: 2 }] - }) - .then(record => { - assert.ok(record.id) - assert.equal(record.list.length, 3) - assert.equal(record.listSyntaxA.length, 3) - assert.equal(record.listOfObjects.length, 2) + describe('array type', () => { + it('should initialize without error', () => { + assert(orm.arraymodel) + }); + it('should support insertion with list field', done => { + orm.arraymodel.create({ + list: [1, 2, 3], + listSyntaxA: [4, 5, 6], + listOfObjects: [{index: 1}, {index: 2}] + }) + .then(record => { + assert.equal(record.list.length, 3); + assert.equal(record.listSyntaxA.length, 3); + assert.equal(record.listOfObjects.length, 2); + done(); + }); + }); + it('should parse array of objects on load', done => { + orm.arraymodel.create({ + list: [1, 2, 3], + listSyntaxA: [4, 5, 6], + listOfObjects: [{index: 1}, {index: 2}] + }) + .then(record => { + assert.ok(record.id); + assert.equal(record.list.length, 3); + assert.equal(record.listSyntaxA.length, 3); + assert.equal(record.listOfObjects.length, 2); - return orm.arraymodel.findOne(record.id) - }) - .then(record => { - assert.equal(record.listOfObjects.length, 2) - assert.equal(typeof record.listOfObjects[0], 'object') - done() - }) - }) + return orm.arraymodel.findOne(record.id); + }) + .then(record => { + assert.equal(record.listOfObjects.length, 2); + assert.equal(typeof record.listOfObjects[0], 'object'); + done(); + }); + }); + }); - }) + describe('jsonb type', () => { + it('should initialize without error', () => { + assert(orm.jsonmodel); + }); - describe('jsonb type', () => { - it('should initialize without error', () => { - assert(orm.jsonmodel) - }) - - it('should support insertion with json field', done => { - orm.jsonmodel.create({ - json: { foo: 'bar' }, - jsonb: { foo: 'bar' }, - jsonbSyntaxA: { - a: 1, - b: { foo: 'bar' } - } - }) - .then(record => { - assert.equal(record.json.foo, 'bar') - assert.equal(record.jsonbSyntaxA.b.foo, 'bar') - done() - }) - }) - }) - -}) + it('should support insertion with json field', done => { + orm.jsonmodel.create({ + json: {foo: 'bar'}, + jsonb: {foo: 'bar'}, + jsonbSyntaxA: { + a: 1, + b: {foo: 'bar'} + } + }) + .then(record => { + assert.equal(record.json.foo, 'bar'); + assert.equal(record.jsonbSyntaxA.b.foo, 'bar'); + done(); + }); + }); + }); +}); diff --git a/test/integration/pg/models.js b/test/integration/pg/models.js index a22c23e..8f9b1d3 100644 --- a/test/integration/pg/models.js +++ b/test/integration/pg/models.js @@ -1,50 +1,50 @@ -const Waterline = require('waterline') +'use strict'; -module.exports = { - - ArrayModel: Waterline.Collection.extend({ - identity: 'arraymodel', - connection: 'edgetests', - dynamicFinders: false, - associationFinders: false, +const Waterline = require('waterline'); - attributes: { - list: { - type: 'array' - }, - listSyntaxA: { - type: 'array', - defaultsTo: '{}' - }, - listOfObjects: { - type: 'array', - defaultsTo: [] - } - } - }), +module.exports = { + ArrayModel: Waterline.Collection.extend({ + identity: 'arraymodel', + connection: 'edgetests', + dynamicFinders: false, + associationFinders: false, - JsonModel: Waterline.Collection.extend({ - identity: 'jsonmodel', - connection: 'edgetests', - dynamicFinders: false, - associationFinders: false, + attributes: { + list: { + type: 'array' + }, + listSyntaxA: { + type: 'array', + defaultsTo: '{}' + }, + listOfObjects: { + type: 'array', + defaultsTo: [] + } + } + }), - attributes: { - json: { - type: 'json' - }, - jsonb: { - type: 'json' - }, - jsonbSyntaxA: { - type: 'json', - defaultsTo: '[]' - }, - jsonbSyntaxB: { - type: 'json', - defaultsTo: '{}' - } - } - }) + JsonModel: Waterline.Collection.extend({ + identity: 'jsonmodel', + connection: 'edgetests', + dynamicFinders: false, + associationFinders: false, -} + attributes: { + json: { + type: 'json' + }, + jsonb: { + type: 'json' + }, + jsonbSyntaxA: { + type: 'json', + defaultsTo: '[]' + }, + jsonbSyntaxB: { + type: 'json', + defaultsTo: '{}' + } + } + }) +}; diff --git a/test/integration/runner.js b/test/integration/runner.js index 168edae..b0be36d 100644 --- a/test/integration/runner.js +++ b/test/integration/runner.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Run integration tests * @@ -12,31 +14,30 @@ /** * Module dependencies */ -var util = require('util'); -var mocha = require('mocha'); -var TestRunner = require('waterline-adapter-tests'); -var Adapter = require('../../dist/adapter'); +const util = require('util'); +// const mocha = require('mocha'); +const TestRunner = require('waterline-adapter-tests'); +const Adapter = require('../../dist/adapter'); // Grab targeted interfaces from this adapter's `package.json` file: -var package = {}, - interfaces = [], - features = []; +let pkg = {}, + interfaces = [], + features = []; try { - package = require('../../package.json'); - interfaces = package.waterlineAdapter.interfaces; - features = package.waterlineAdapter.features; + pkg = require('../../package.json'); + interfaces = pkg.waterlineAdapter.interfaces; + features = pkg.waterlineAdapter.features; } catch (e) { - throw new Error( - '\n' + - 'Could not read supported interfaces from `waterlineAdapter.interfaces`' + '\n' + - 'in this adapter\'s `package.json` file ::' + '\n' + - util.inspect(e) - ); + throw new Error( + '\n' + + 'Could not read supported interfaces from `waterlineAdapter.interfaces`' + '\n' + + 'in this adapter\'s `package.json` file ::' + '\n' + + util.inspect(e) + ); } - -console.log('Testing `' + package.name + '`, a Sails/Waterline adapter.'); +console.log('Testing `' + pkg.name + '`, a Sails/Waterline adapter.'); console.log('Running `waterline-adapter-tests` against ' + interfaces.length + ' interfaces...'); console.log('( ' + interfaces.join(', ') + ' )'); console.log(); @@ -45,7 +46,6 @@ console.log('http://links.sailsjs.org/docs/plugins/adapters/interfaces'); console.log(); - /** * Integration Test Runner * @@ -55,44 +55,43 @@ console.log(); */ new TestRunner({ - // Mocha opts - mocha: { - bail: false, - grep: /(case in)|(case se)|(greaterThanOrEqual key when searching strings)|(>= usage when searching strings)/, - invert: true - }, + // Mocha opts + mocha: { + bail: false, + grep: /(case in)|(case se)|(greaterThanOrEqual key when searching strings)|(>= usage when searching strings)/, + invert: true + }, + + // Load the adapter module. + adapter: Adapter, - // Load the adapter module. - adapter: Adapter, + // Default connection config to use. + config: {}, - // Default connection config to use. - config: { - }, + failOnError: true, + // The set of adapter interfaces to test against. + // (grabbed these from this adapter's package.json file above) + interfaces: interfaces, - failOnError: true, - // The set of adapter interfaces to test against. - // (grabbed these from this adapter's package.json file above) - interfaces: interfaces, - - // The set of adapter features to test against. - // (grabbed these from this adapter's package.json file above) - features: features, + // The set of adapter features to test against. + // (grabbed these from this adapter's package.json file above) + features: features, - // Most databases implement 'semantic' and 'queryable'. - // - // As of Sails/Waterline v0.10, the 'associations' interface - // is also available. If you don't implement 'associations', - // it will be polyfilled for you by Waterline core. The core - // implementation will always be used for cross-adapter / cross-connection - // joins. - // - // In future versions of Sails/Waterline, 'queryable' may be also - // be polyfilled by core. - // - // These polyfilled implementations can usually be further optimized at the - // adapter level, since most databases provide optimizations for internal - // operations. - // - // Full interface reference: - // https://github.com/balderdashy/sails-docs/blob/master/adapter-specification.md + // Most databases implement 'semantic' and 'queryable'. + // + // As of Sails/Waterline v0.10, the 'associations' interface + // is also available. If you don't implement 'associations', + // it will be polyfilled for you by Waterline core. The core + // implementation will always be used for cross-adapter / cross-connection + // joins. + // + // In future versions of Sails/Waterline, 'queryable' may be also + // be polyfilled by core. + // + // These polyfilled implementations can usually be further optimized at the + // adapter level, since most databases provide optimizations for internal + // operations. + // + // Full interface reference: + // https://github.com/balderdashy/sails-docs/blob/master/adapter-specification.md }); diff --git a/test/integration/wl/index.js b/test/integration/wl/index.js index 7d010c5..7379ec3 100644 --- a/test/integration/wl/index.js +++ b/test/integration/wl/index.js @@ -1,81 +1,79 @@ -'use strict' +'use strict'; -const _ = require('lodash') -const assert = require('assert') -const Waterline = require('waterline') -const models = require('./models') -const Adapter = require('../../../dist/adapter') +const _ = require('lodash'); +const assert = require('assert'); +const Waterline = require('waterline'); +const models = require('./models'); +const Adapter = require('../../../dist/adapter'); describe('wl edge cases', () => { - const wlconfig = { - adapters: { - edgetests: Adapter - }, - connections: { - edgetests: { - adapter: 'edgetests', - connection: { - + const wlconfig = { + adapters: { + edgetests: Adapter + }, + connections: { + edgetests: { + adapter: 'edgetests', + connection: {} + } } - } - } - } - let waterline, orm, wl + }; + let waterline, orm, wl; - before(done => { - waterline = new Waterline(); - waterline.loadCollection(models.NoisyModel) - waterline.loadCollection(models.NormalModel) - waterline.initialize(wlconfig, (err, _orm) => { - if (err) return done(err) + before(done => { + waterline = new Waterline(); + waterline.loadCollection(models.NoisyModel); + waterline.loadCollection(models.NormalModel); + waterline.initialize(wlconfig, (err, _orm) => { + if (err) return done(err); - wl = _orm - orm = _orm.collections - done() - }) - }) + wl = _orm; + orm = _orm.collections; + done() + }); + }); - describe('update order by', () => { - it('update should ignore orderBy', () => { - orm.normalmodel.update({ id: 1 }, { - where: { - name: 'hello' - }, - orderBy: 'id asc' - }) - }) - }) + describe('update order by', () => { + it('update should ignore orderBy', () => { + orm.normalmodel.update({id: 1}, { + where: { + name: 'hello' + }, + orderBy: 'id asc' + }) + }) + }); + + describe('model definition noise', () => { + it('should insert itself normally when .create invoked on the model', done => { + const model = orm.noisymodel; + const modelObject = { + name: model.globalId, + identity: model.identity, + attributes: _.omit(model.attributes, _.functions(model.attributes)), + noise: model.noise, + description: model.description + }; + orm.noisymodel.create(modelObject) + .then(record => { + assert.equal(record.identity, 'noisymodel'); + done() + }) + }); - describe('model definition noise', () => { - it('should insert itself normally when .create invoked on the model', done => { - const model = orm.noisymodel - const modelObject = { - name: model.globalId, - identity: model.identity, - attributes: _.omit(model.attributes, _.functions(model.attributes)), - noise: model.noise, - description: model.description - } - orm.noisymodel.create(modelObject) - .then(record => { - assert.equal(record.identity, 'noisymodel') - done() + it('should insert normally when .create invoked on the adapter', done => { + const model = orm.noisymodel; + const modelObject = { + name: model.globalId, + identity: model.identity, + attributes: _.omit(model.attributes, _.functions(model.attributes)), + noise: model.noise, + description: model.description + }; + wl.connections.edgetests._adapter.create('edgetests', 'noisymodel', modelObject, (err, record) => { + assert.equal(record.identity, 'noisymodel'); + done() + }) }) }) - it('should insert normally when .create invoked on the adapter', done => { - const model = orm.noisymodel - const modelObject = { - name: model.globalId, - identity: model.identity, - attributes: _.omit(model.attributes, _.functions(model.attributes)), - noise: model.noise, - description: model.description - } - wl.connections.edgetests._adapter.create('edgetests', 'noisymodel', modelObject, (err, record) => { - assert.equal(record.identity, 'noisymodel') - done() - }) - }) - }) -}) - +}); diff --git a/test/integration/wl/models.js b/test/integration/wl/models.js index 1aeaa12..521bab1 100644 --- a/test/integration/wl/models.js +++ b/test/integration/wl/models.js @@ -1,42 +1,42 @@ -const Waterline = require('waterline') +'use strict'; -module.exports = { - - NormalModel: Waterline.Collection.extend({ - identity: 'normalmodel', - connection: 'edgetests', - dynamicFinders: false, - associationFinders: false, +const Waterline = require('waterline'); - attributes: { - name: 'string' - } - }), +module.exports = { + NormalModel: Waterline.Collection.extend({ + identity: 'normalmodel', + connection: 'edgetests', + dynamicFinders: false, + associationFinders: false, - NoisyModel: Waterline.Collection.extend({ - identity: 'noisymodel', - connection: 'edgetests', - dynamicFinders: false, - associationFinders: false, + attributes: { + name: 'string' + } + }), - // noise - description: 'hello', - noise: { - foo: 'bar' - }, + NoisyModel: Waterline.Collection.extend({ + identity: 'noisymodel', + connection: 'edgetests', + dynamicFinders: false, + associationFinders: false, - attributes: { - id: { - type: 'integer', - primaryKey: true, - autoIncrement: true - }, - name: 'string', - identity: 'string', - attributes: 'json', - //noise: 'json', - description: 'string' - } - }) -} + // noise + description: 'hello', + noise: { + foo: 'bar' + }, + attributes: { + id: { + type: 'integer', + primaryKey: true, + autoIncrement: true + }, + name: 'string', + identity: 'string', + attributes: 'json', + //noise: 'json', + description: 'string' + } + }) +};