diff --git a/.travis.yml b/.travis.yml index bf5d4e7..ca15152 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ sudo: required -langauge: python - services: - docker diff --git a/Dockerfile b/Dockerfile index cb9f46a..316ddd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,5 +12,5 @@ RUN apt-get update \ libspatialite-dev \ # -- specific node version -- # -RUN curl -sL https://deb.nodesource.com/setup_8.x \ +RUN curl -sL https://deb.nodesource.com/setup_10.x \ && apt-get install nodejs \ No newline at end of file diff --git a/config.js b/config.js index 5e638ed..b32a7d6 100644 --- a/config.js +++ b/config.js @@ -2,9 +2,9 @@ module.exports = { test: { - db: ':memory:' + db: './db/test-posm-paths.sqlite3' }, - development: { - db: './db/posm-paths.sql' + develop: { + db: './db/posm-paths.sqlite3' } } \ No newline at end of file diff --git a/db/index.js b/db/index.js index f49fb77..18b6179 100644 --- a/db/index.js +++ b/db/index.js @@ -8,7 +8,7 @@ class Database { constructor() { if (!Database.instance) { this._spatialite = process.env.SPATIALITE_LOCATION; - this._dbLoc = config[process.env.ENVIRONMENT].db; + this._dbLoc = config[process.env.ENVIRONMENT || 'develop'].db; } return Database.instance }; diff --git a/db/migrations/.migrate b/db/migrations/.migrate new file mode 100644 index 0000000..c088eec --- /dev/null +++ b/db/migrations/.migrate @@ -0,0 +1,17 @@ +{ + "lastRun": "1533377102405-add-images.js", + "migrations": [ + { + "title": "1533377087768-add-users.js", + "timestamp": 1533418332304 + }, + { + "title": "1533377095426-add-sequences.js", + "timestamp": 1533418332325 + }, + { + "title": "1533377102405-add-images.js", + "timestamp": 1533418332609 + } + ] +} \ No newline at end of file diff --git a/migrations/1533377087768-add-users.js b/db/migrations/1533377087768-add-users.js similarity index 53% rename from migrations/1533377087768-add-users.js rename to db/migrations/1533377087768-add-users.js index 03445aa..90604a1 100644 --- a/migrations/1533377087768-add-users.js +++ b/db/migrations/1533377087768-add-users.js @@ -2,10 +2,11 @@ const fs = require('fs'); const path = require('path'); -const upSQL = fs.readFileSync(path.join(__dirname, '1533377087768-add-users-up.sql')).toString(); -const downSQL = fs.readFileSync(path.join(__dirname, '1533377087768-add-users-down.sql')).toString(); -const dbLoc = require('../config')[process.env.ENVIRONMENT || 'develop'].db; -const Database = require('../db'); +const upSQL = fs.readFileSync(path.join(__dirname, '..', 'sql', '1533377087768-add-users-up.sql')).toString(); +const downSQL = fs.readFileSync(path.join(__dirname, '..', 'sql', '1533377087768-add-users-down.sql')).toString(); + +const dbLoc = require('../../config')[process.env.ENVIRONMENT || 'develop'].db; +const Database = require('../'); Database.connect(dbLoc); module.exports.up = function (next) { diff --git a/migrations/1533377095426-add-sequences.js b/db/migrations/1533377095426-add-sequences.js similarity index 52% rename from migrations/1533377095426-add-sequences.js rename to db/migrations/1533377095426-add-sequences.js index 40a7b4d..0cda53d 100644 --- a/migrations/1533377095426-add-sequences.js +++ b/db/migrations/1533377095426-add-sequences.js @@ -2,11 +2,11 @@ const fs = require('fs'); const path = require('path'); -const upSQL = fs.readFileSync(path.join(__dirname, '1533377095426-add-sequences-up.sql')).toString(); -const downSQL = fs.readFileSync(path.join(__dirname, '1533377095426-add-sequences-down.sql')).toString(); +const upSQL = fs.readFileSync(path.join(__dirname, '..', 'sql', '1533377095426-add-sequences-up.sql')).toString(); +const downSQL = fs.readFileSync(path.join(__dirname, '..', 'sql', '1533377095426-add-sequences-down.sql')).toString(); -const dbLoc = require('../config')[process.env.ENVIRONMENT || 'develop'].db; -const Database = require('../db'); +const dbLoc = require('../../config')[process.env.ENVIRONMENT || 'develop'].db; +const Database = require('../'); Database.connect(dbLoc); module.exports.up = function (next) { diff --git a/db/migrations/1533377102405-add-images.js b/db/migrations/1533377102405-add-images.js new file mode 100644 index 0000000..c5c26a5 --- /dev/null +++ b/db/migrations/1533377102405-add-images.js @@ -0,0 +1,22 @@ +'use strict' + +const fs = require('fs'); +const path = require('path'); +const upSQL = fs.readFileSync(path.join(__dirname, '..', 'sql', '1533377102405-add-images-up.sql')).toString(); +const downSQL = fs.readFileSync(path.join(__dirname, '..', 'sql', '1533377102405-add-images-down.sql')).toString(); + +const dbLoc = require('../../config')[process.env.ENVIRONMENT || 'develop'].db; +const Database = require('../'); +Database.connect(dbLoc); + +module.exports.up = function (next) { + Database.executeSpatial(upSQL) + .then(() => next()) + .catch(error => { console.error(error); next(); }) +} + +module.exports.down = function (next) { + Database.executeSpatial(downSQL) + .then(() => next()) + .catch(error => { console.error(error); next(); }); +} diff --git a/db/seeds/index.js b/db/seeds/index.js new file mode 100644 index 0000000..16edb94 --- /dev/null +++ b/db/seeds/index.js @@ -0,0 +1,26 @@ +'use strict'; + +const users = require('../../testData/seeds').users; +const uuidv4 = require('uuid/v4'); +const dbLoc = require('../../config')[process.env.ENVIRONMENT || 'develop'].db; +const Database = require('../'); + +Database.connect(dbLoc); + +let seeds = [ + { + users: () => { + const values = users.map(user => `('${uuidv4()}', '${user.name}')`).join(','); + const sql = `INSERT INTO Users VALUES ${values};`; + return Database.execute(sql) + .catch((err) => { throw err; }); + } + } +]; + +if (process.argv.slice(2).length > 0) { + seeds = seeds.filter(s => process.argv.includes(Object.keys(s)[0])); +} + +seeds.forEach(s => Object.values(s)[0]()); + diff --git a/db/sql/1533377087768-add-users-down.sql b/db/sql/1533377087768-add-users-down.sql new file mode 100644 index 0000000..2c30e1e --- /dev/null +++ b/db/sql/1533377087768-add-users-down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS Users; \ No newline at end of file diff --git a/migrations/1533377087768-add-users-up.sql b/db/sql/1533377087768-add-users-up.sql similarity index 59% rename from migrations/1533377087768-add-users-up.sql rename to db/sql/1533377087768-add-users-up.sql index 032a2c0..e2ff386 100644 --- a/migrations/1533377087768-add-users-up.sql +++ b/db/sql/1533377087768-add-users-up.sql @@ -1,4 +1,4 @@ -CREATE TABLE Users ( +CREATE TABLE IF NOT EXISTS Users( id UUID PRIMARY KEY, name TEXT NOT NULL ); \ No newline at end of file diff --git a/db/sql/1533377095426-add-sequences-down.sql b/db/sql/1533377095426-add-sequences-down.sql new file mode 100644 index 0000000..deafb3d --- /dev/null +++ b/db/sql/1533377095426-add-sequences-down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS Sequences; \ No newline at end of file diff --git a/migrations/1533377087768-add-sequences-up.sql b/db/sql/1533377095426-add-sequences-up.sql similarity index 77% rename from migrations/1533377087768-add-sequences-up.sql rename to db/sql/1533377095426-add-sequences-up.sql index 07054e4..fc9e480 100644 --- a/migrations/1533377087768-add-sequences-up.sql +++ b/db/sql/1533377095426-add-sequences-up.sql @@ -1,4 +1,4 @@ -CREATE TABLE Sequences( +CREATE TABLE IF NOT EXISTS Sequences( id UUID NOT NULL PRIMARY KEY, userId UUID NOT NULL, images JSON1 NOT NULL, diff --git a/db/sql/1533377102405-add-images-down.sql b/db/sql/1533377102405-add-images-down.sql new file mode 100644 index 0000000..a2da4c6 --- /dev/null +++ b/db/sql/1533377102405-add-images-down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS Images; diff --git a/migrations/1533377087768-add-images-up.sql b/db/sql/1533377102405-add-images-up.sql similarity index 60% rename from migrations/1533377087768-add-images-up.sql rename to db/sql/1533377102405-add-images-up.sql index 891848f..3a762b2 100644 --- a/migrations/1533377087768-add-images-up.sql +++ b/db/sql/1533377102405-add-images-up.sql @@ -1,4 +1,6 @@ -CREATE TABLE Images( +SELECT InitSpatialMetaData(1); + +CREATE TABLE IF NOT EXISTS Images( id UUID NOT NULL PRIMARY KEY, path TEXT NOT NULL, time TEXT NOT NULL, @@ -9,7 +11,5 @@ CREATE TABLE Images( FOREIGN KEY(seqId) REFERENCES Sequences(id) ); ---- SpatialLite for image locations --- -SELECT AddGeometryColumn( - 'Images', 'loc', 4326, 'POINT', 'XY' -); +-- SpatialLite for image locations --- +SELECT AddGeometryColumn('Images', 'loc', 4326, 'POINT', 'XY'); diff --git a/db/test-posm-paths.sqlite3 b/db/test-posm-paths.sqlite3 new file mode 100644 index 0000000..3b6bd8f Binary files /dev/null and b/db/test-posm-paths.sqlite3 differ diff --git a/migrations/1533377087768-add-images-down.sql b/migrations/1533377087768-add-images-down.sql deleted file mode 100644 index e69de29..0000000 diff --git a/migrations/1533377087768-add-sequences-down.sql b/migrations/1533377087768-add-sequences-down.sql deleted file mode 100644 index e69de29..0000000 diff --git a/migrations/1533377087768-add-users-down.sql b/migrations/1533377087768-add-users-down.sql deleted file mode 100644 index e69de29..0000000 diff --git a/migrations/1533377102405-add-images.js b/migrations/1533377102405-add-images.js deleted file mode 100644 index 581795b..0000000 --- a/migrations/1533377102405-add-images.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict' - -const fs = require('fs'); -const path = require('path'); -const upSQL = fs.readFileSync(path.join(__dirname, '1533377087768-add-images-up.sql')).toString(); -const downSQL = fs.readFileSync(path.join(__dirname, '1533377087768-add-images-up.sql')).toString(); -const dbLoc = require('../config')[process.env.ENVIRONMENT || 'develop'].db; -const Database = require('../db'); -Database.connect(dbLoc); - -module.exports.up = function (next) { - Database.execute(upSQL) - .then(() => next()) - .catch(error => { console.error(error); next(); }) -} - -module.exports.down = function (next) { - Database.execute(downSQL) - .then(() => next()) - .catch(error => { console.error(error); next(); }); -} diff --git a/package.json b/package.json index 93e3dd8..c5550bc 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,10 @@ "license": "MIT", "scripts": { "test": "./node_modules/.bin/mocha test/**/* --exit", - "seed": "knex seed:run" + "migrate:up": "migrate up --state-file db/migrations/.migrate --migrations-dir db/migrations", + "migrate:down": "migrate down --state-file db/migrations/.migrate --migrations-dir db/migrations", + "seed": "node db/seeds/index.js", + "migrate:up:seed": "npm run migrate:up && npm run seed" }, "dependencies": { "bluebird": "^3.5.1", diff --git a/seeds/users.js b/seeds/users.js deleted file mode 100644 index 9b074f4..0000000 --- a/seeds/users.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const users = require('../testData/seeds').users; -const uuidv4 = require('uuid/v4'); -const dbLoc = require('../config').test.db; -const Database = require('../db'); - -Database.connect(dbLoc); - -module.exports = (next) => { - const values = users.map(user => `(${uuidv4()}, ${user.name})`).join(','); - const sql = `INSERT INTO Users VALUES ${values};`; - Database.execute(sql) - .then(() => next()) - .catch(() => { console.error(error); next(); }); -} \ No newline at end of file diff --git a/test/db.js b/test/db.js index 3857643..07f0e21 100644 --- a/test/db.js +++ b/test/db.js @@ -73,6 +73,6 @@ describe('db', () => { Database .executeSpatial(badSql) .catch((err) => expect(err).to.be.instanceof(Error)); - }) + }); }); }); \ No newline at end of file diff --git a/test/migrations.js b/test/migrations.js index 56a56ee..9c02357 100644 --- a/test/migrations.js +++ b/test/migrations.js @@ -1,22 +1,22 @@ 'use strict'; -const expect = require('chai').expect; -const migrate = require('migrate'); +Promise = require('bluebird'); +const expect = require('chai').expect; +const migrate = Promise.promisifyAll(require('migrate')); const path = require('path'); -const migrationsPath = path.join(process.cwd(), 'migrations'); +const migrationsPath = path.join(__dirname, '..', 'db', 'migrations'); const migrationStore = path.join(migrationsPath, '.migrate'); -const migrationOpts = { migrationsDirectory: migrationsPath, stateStore: migrationStore }; +const migrationOpts = { migrationsDirectory: migrationsPath, stateStore: migrationStore }; describe('migrations', () => { it('migrates db up and back down', () => { - migrate.load(migrationOpts, (err, set) => { - if (err) throw err - console.log(set); - set.up((err, res) => { - if (err) throw err; - set.down((err, res) => { if (err) throw err; }) - }); - }); + migrate.loadAsync(migrationOpts) + .then((set) => { + set = Promise.promisifyAll(set); + set.upAsync().then(() => set.downAsync()) + }) + .catch((err) => console.error(err)); }); -}); \ No newline at end of file +}); + \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log index 0900b8f..7ebc172 100644 --- a/yarn-error.log +++ b/yarn-error.log @@ -1,5 +1,5 @@ Arguments: - /home/max/.nvm/versions/node/v10.7.0/bin/node /home/max/.nvm/versions/node/v10.7.0/bin/yarn add -D geojson-validate + /home/max/.nvm/versions/node/v10.7.0/bin/node /home/max/.nvm/versions/node/v10.7.0/bin/yarn migrate:up PATH: /home/max/.cargo/bin:/home/max/.pyenv/plugins/pyenv-virtualenv/shims:/home/max/.rbenv/shims:/home/max/.rbenv/bin:/home/max/.pyenv/bin:/home/max/.nvm/versions/node/v10.7.0/bin:usr/share/rvm/bin:/home/max/.cargo/bin:/home/max/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/share/rvm/bin @@ -14,17 +14,12 @@ Platform: linux x64 Trace: - Error: https://registry.yarnpkg.com/geojson-validate: Not found - at Request.params.callback [as _callback] (/home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:65656:18) - at Request.self.callback (/home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:134675:22) - at Request.emit (events.js:182:13) - at Request. (/home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:135658:10) - at Request.emit (events.js:182:13) - at IncomingMessage. (/home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:135578:12) - at Object.onceWrapper (events.js:273:13) - at IncomingMessage.emit (events.js:187:15) - at endReadableNT (_stream_readable.js:1081:12) - at process._tickCallback (internal/process/next_tick.js:63:19) + SyntaxError: /home/max/Desktop/github/posm/posm-paths/package.json: Unexpected token } in JSON at position 476 + at JSON.parse () + at /home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:1130:59 + at Generator.next () + at step (/home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:98:30) + at /home/max/.nvm/versions/node/v10.7.0/lib/node_modules/yarn/lib/cli.js:109:13 npm manifest: { @@ -35,9 +30,9 @@ npm manifest: "author": "Max Grossman ", "license": "MIT", "scripts": { - "migrate": "sqlite3 db/posm-paths.sqlite3 < db/posm-paths.sql", "test": "./node_modules/.bin/mocha test/**/* --exit", - "seed": "knex seed:run" + "migrate:up": "migrate up --state-file db/migrations/.migrate --migrations-dir db/migrations", + "migrate:down": "migrate down --state-file db/migrations/.migrate --migrations-dir db/migrations", }, "dependencies": { "bluebird": "^3.5.1", @@ -49,12 +44,17 @@ npm manifest: "hapi": "^17.4.0", "joi": "^13.2.0", "knex": "^0.14.6", + "migrate": "^1.6.0", "mocha": "^5.1.1", "spatialite": "^0.1.0", - "sqlite3": "https://github.com/mapbox/node-sqlite3/tarball/master" + "sqlite3": "https://github.com/mapbox/node-sqlite3/tarball/master", + "taskboard": "^2.0.6" }, "devDependencies": { - "turf-feature": "^1.0.0" + "async": "^2.6.1", + "geojson-validation": "^0.2.1", + "turf-feature": "^1.0.0", + "turf-featurecollection": "^1.0.1" } } @@ -100,6 +100,10 @@ Lockfile: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -159,6 +163,12 @@ Lockfile: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + dependencies: + lodash "^4.17.10" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -261,6 +271,10 @@ Lockfile: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + bson@~0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/bson/-/bson-0.4.23.tgz#e65a2e3c7507ffade4109bc7575a76e50f8da915" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -322,6 +336,16 @@ Lockfile: escape-string-regexp "^1.0.5" supports-color "^5.3.0" + chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + check-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -378,6 +402,10 @@ Lockfile: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + commander@^2.9.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.0.tgz#9d07b25e2a6f198b76d8b756a0e8a9604a6a1a60" + component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -420,6 +448,10 @@ Lockfile: dependencies: assert-plus "^1.0.0" + dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + dayjs@^1.5.16: version "1.5.16" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.5.16.tgz#f500ba23a573bca7b15b8e8e35c9c548bb527af7" @@ -489,6 +521,10 @@ Lockfile: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + dotenv@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + dotenv@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" @@ -500,7 +536,11 @@ Lockfile: jsbn "~0.1.0" safer-buffer "^2.1.0" - escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + es6-promise@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" + + escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -680,6 +720,10 @@ Lockfile: strip-ansi "^3.0.1" wide-align "^1.1.0" + geojson-validation@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/geojson-validation/-/geojson-validation-0.2.1.tgz#7f9c9a3f7f967ae8e267940fda14478943342f2f" + get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" @@ -764,6 +808,12 @@ Lockfile: ajv "^5.1.0" har-schema "^2.0.0" + has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -852,7 +902,7 @@ Lockfile: once "^1.3.0" wrappy "1" - inherits@2, inherits@~2.0.3: + inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -995,6 +1045,10 @@ Lockfile: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1118,7 +1172,7 @@ Lockfile: rechoir "^0.6.2" resolve "^1.1.7" - lodash@^4.17.5: + lodash@^4.17.10, lodash@^4.17.5: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -1156,6 +1210,19 @@ Lockfile: snapdragon "^0.8.1" to-regex "^3.0.1" + migrate@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/migrate/-/migrate-1.6.0.tgz#bcbad039459152b7d1e860e44fdb274f4c0a348b" + dependencies: + chalk "^1.1.3" + commander "^2.9.0" + dateformat "^2.0.0" + dotenv "^4.0.0" + inherits "^2.0.3" + minimatch "^3.0.3" + mkdirp "^0.5.1" + slug "^0.9.1" + mime-db@1.x.x: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -1177,7 +1244,7 @@ Lockfile: hoek "5.x.x" mime-db "1.x.x" - minimatch@3.0.4, minimatch@^3.0.4: + minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -1233,10 +1300,31 @@ Lockfile: mkdirp "0.5.1" supports-color "4.4.0" + mongodb-core@1.3.21: + version "1.3.21" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-1.3.21.tgz#fe129e7bee2b3b26c1409de02ab60d03f6291cca" + dependencies: + bson "~0.4.23" + require_optional "~1.0.0" + + mongodb@2.1: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.1.21.tgz#764709dbcceb5825b4eb31f95395f965fd442272" + dependencies: + es6-promise "3.0.2" + mongodb-core "1.3.21" + readable-stream "1.0.31" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + my-mongo@latest: + version "1.2.9" + resolved "https://registry.yarnpkg.com/my-mongo/-/my-mongo-1.2.9.tgz#d4ab6548beb07755aa548d02ea31772ddbf370a0" + dependencies: + mongodb "2.1" + nan@~2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" @@ -1476,6 +1564,15 @@ Lockfile: minimist "^1.2.0" strip-json-comments "~2.0.1" + readable-stream@1.0.31: + version "1.0.31" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.31.tgz#8f2502e0bc9e3b0da1b94520aabb4e2603ecafae" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@2.3.6, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -1538,6 +1635,13 @@ Lockfile: tunnel-agent "^0.6.0" uuid "^3.1.0" + require_optional@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -1545,6 +1649,10 @@ Lockfile: expand-tilde "^2.0.0" global-modules "^1.0.0" + resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -1587,7 +1695,7 @@ Lockfile: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - semver@^5.3.0: + semver@^5.1.0, semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -1624,6 +1732,12 @@ Lockfile: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + slug@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/slug/-/slug-0.9.1.tgz#af08f608a7c11516b61778aa800dce84c518cfda" + dependencies: + unicode ">= 0.3.1" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -1745,6 +1859,10 @@ Lockfile: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" + string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -1783,6 +1901,10 @@ Lockfile: dependencies: has-flag "^2.0.0" + supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + supports-color@^5.3.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" @@ -1805,6 +1927,12 @@ Lockfile: version "1.1.4" resolved "https://registry.yarnpkg.com/tarn/-/tarn-1.1.4.tgz#aeeb85964b1afa0bbf381359c1167df237c27b6a" + taskboard@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/taskboard/-/taskboard-2.0.6.tgz#f816d13ee66980d944d97d6e3a31705721976952" + dependencies: + my-mongo latest + teamwork@3.x.x: version "3.0.1" resolved "https://registry.yarnpkg.com/teamwork/-/teamwork-3.0.1.tgz#ff38c7161f41f8070b7813716eb6154036ece196" @@ -1859,6 +1987,10 @@ Lockfile: version "1.0.0" resolved "https://registry.yarnpkg.com/turf-feature/-/turf-feature-1.0.0.tgz#d08d72ffbc4fbb21c4f05df7f40a85622d999b17" + turf-featurecollection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/turf-featurecollection/-/turf-featurecollection-1.0.1.tgz#eccd1cf9124176bfc6db197cbb45d6de55f724c5" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -1871,6 +2003,10 @@ Lockfile: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + "unicode@>= 0.3.1": + version "11.0.1" + resolved "https://registry.yarnpkg.com/unicode/-/unicode-11.0.1.tgz#735bd422ec75cf28d396eb224d535d168d5f1db6" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"