├── .gitignore ├── .npmignore ├── .travis.yml ├── README.md ├── handlers.js ├── index.js ├── migration.js ├── package-lock.json ├── package.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | README.md 2 | .travis.yml -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - node 4 | cache: yarn 5 | deploy: 6 | provider: npm 7 | email: tommy.brunn@gmail.com 8 | api_key: 9 | secure: wCyAK47ftDDhAD9tkT7xuMicy7XvhE1kNv7/tZeJ0ivm9RmpgMwhGdspJ+cqNGMjqeVLannPPHm1cN2YbTAZ1k5HDwoVEf/OpyLZPzEimkQMQmbwEJD4YHTIpyxH9bYwi3BJW7HATvjGzMTSbbS/dWndiSVnbXbZ6AXzDnP67WapFzs/g2dmkt7HrkuF5fbGIRR1NzrfrGDCDxYDpjaJ8voGbpODPwrewAzsvws6Oh9wY45uO2bdYtRzgYQvdSsBnFA+byTEO27XS+b4hkz1+r3awkM5HJLQklD03msK5LTX7ATOH2rMSJGIRXownz45HNGkDYkPBUUNedrRgACYTgNzI6bhaIkTU3LO0xM7p8Np1KXlhu+mXpGg1KknTXkCFGUYR+4Kayr01ExADejevi2skG2kwRObFdKoJwHSMs5BTbbbsnE06e/AwHKfVNo4AjWS4ey4eoJtJ/oICi+ttuJUls5Z7YQODILZgxEK8lTN9N9XSdsCeLkU7ndfwlpfZKPY8754Uk+Cu6zkjuavDuqFYimA39iSZZGYczKXpNTnEck5zNjkw+XloxhrboC8sehGRLc9LVWZFF4PwUeyVL7Yrtos5jpk+VYF7ODpGiEujRPMW6qx6WENLKMbDHApZP6kea6JhVYnS7uRcxgiv3juHKAqBM+tjjhC+anolkc= 10 | on: 11 | tags: true 12 | repo: Nevon/serverless-pg-migrations 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Serverless PG Migrations 2 | 3 | Database migrations for AWS Lambda and RDS using [Sequelize Migrations](http://docs.sequelizejs.com/manual/tutorial/migrations.html). 4 | 5 | ## About 6 | 7 | This Serverless plugin can execute and rollback database migrations after deploys. See [Usage](#usage) 8 | 9 | > Heavily inspired by [transmogrify](https://github.com/Reckon-Limited/transmogrify). I tried to use it but encountered a lot of showstopping bugs for me, so I wrote my own, smaller and simpler version. 10 | 11 | **Notable differences from transmogrify:** 12 | 13 | * This plugin does not attempt to add handlers automatically (see [Adding handlers](#adding-handlers)) 14 | * This plugin does not create or drop databases 15 | * This plugin does not have a handler for checking database connection 16 | 17 | ## Migrations 18 | 19 | The plugin assumes that migration files live in a `migrations` directory inside your project. 20 | 21 | For details on using migrations please see the [Sequelize Migration](http://docs.sequelizejs.com/manual/tutorial/migrations.html) docs. 22 | 23 | ## Installation 24 | 25 | `yarn add serverless-pg-migrations` OR `npm install serverless-pg-migrations` 26 | 27 | ## Usage 28 | 29 | Define a migration handler somewhere in your project. Example: 30 | 31 | ``` 32 | // /migrations.js 33 | 34 | const { up, down } = require("serverless-pg-migrations/handlers"); 35 | 36 | module.exports.up = up; 37 | 38 | module.exports.down = down; 39 | ``` 40 | 41 | Add the plugin and handlers to your `serverless.yml`: 42 | 43 | ``` 44 | provider: 45 | name: aws 46 | 47 | plugins: 48 | - serverless-pg-migrations 49 | 50 | up: 51 | handler: migrations.up 52 | timeout: 30 53 | environment: 54 | DATABASE_URL: postgres://root:password@domain.rds.amazonaws.com:5432/Database 55 | down: 56 | handler: migrations.down 57 | timeout: 30 58 | environment: 59 | DATABASE_URL: postgres://root:password@domain.rds.amazonaws.com:5432/Database 60 | ``` 61 | 62 | Pass the function to the serverless deploy command to have it execute after the deploy is finished: 63 | 64 | ``` 65 | sls deploy --function up 66 | ``` 67 | 68 | You can also manually invoke the functions locally: 69 | 70 | ``` 71 | sls invoke local --function up 72 | ``` 73 | 74 | Or use the plugin directly without going through your function: 75 | 76 | ``` 77 | sls migrate up 78 | sls migrate down 79 | ``` 80 | 81 | ## Configuration 82 | 83 | The provided migration handlers can be imported with `const { up, down} = require("serverless-pg-migrations/handlers")`. 84 | 85 | The functions need to have the environment variable `DATABASE_URL` set to a valid [pg connection uri](https://node-postgres.com/features/connecting#connection-uri). -------------------------------------------------------------------------------- /handlers.js: -------------------------------------------------------------------------------- 1 | const Migration = require("./migration"); 2 | 3 | const success = response => ({ 4 | statusCode: 200, 5 | body: JSON.stringify(response) 6 | }); 7 | 8 | const failure = response => ({ 9 | statusCode: 500, 10 | body: JSON.stringify(response) 11 | }); 12 | 13 | const handler = handlerName => (event, context, callback) => { 14 | context.callbackWaitsForEmptyEventLoop = false; 15 | const migration = new Migration(process.env.DATABASE_URL); 16 | 17 | migration 18 | [handlerName]() 19 | .then(migrations => { 20 | const response = migrations.map(({ file }) => file).join("\n"); 21 | migration.close(); 22 | callback(null, success(response)); 23 | }) 24 | .catch(err => { 25 | migration.close(); 26 | callback(err); 27 | }); 28 | }; 29 | 30 | module.exports.up = handler("up"); 31 | 32 | module.exports.down = handler("down"); 33 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const Migration = require("./migration"); 4 | 5 | const logMigrationNames = (log, migrations) => 6 | migrations 7 | .map(migration => migration.file) 8 | .forEach(migration => log(migration)); 9 | 10 | class ServerlessUmzugMigrations { 11 | constructor(serverless, options) { 12 | this.serverless = serverless; 13 | this.log = message => 14 | serverless.cli.log.bind(serverless.cli)(`Migrations - ${message}`); 15 | this.options = options; 16 | 17 | this.commands = { 18 | migrate: { 19 | usage: "Runs database migrations", 20 | commands: { 21 | up: { 22 | usage: "Runs forward migrations", 23 | lifecycleEvents: ["migrate"] 24 | }, 25 | down: { 26 | usage: "Rolls back migration", 27 | lifecycleEvents: ["rollback"] 28 | } 29 | } 30 | } 31 | }; 32 | 33 | this.hooks = { 34 | "after:deploy:deploy": this.afterDeploy.bind(this), 35 | "migrate:up:migrate": this.migrate.bind(this), 36 | "migrate:down:rollback": this.rollback.bind(this) 37 | }; 38 | } 39 | 40 | afterDeploy() { 41 | if (this.options.function) { 42 | this.log(`Calling migration function: ${this.options.function}`); 43 | this.serverless.pluginManager.invoke(["invoke"]); 44 | } else { 45 | this.log("No migration function defined"); 46 | this.log("Specify a function name using the --function / -f option."); 47 | } 48 | } 49 | 50 | migrate() { 51 | const migration = new Migration(this.getDatabaseConnectionString()); 52 | 53 | return migration 54 | .up() 55 | .then(executedMigrations => { 56 | logMigrationNames( 57 | name => this.log(`Applied migration ${name}`), 58 | executedMigrations 59 | ); 60 | migration.close(); 61 | }) 62 | .catch(err => { 63 | this.log("Failed to execute migrations."); 64 | this.log(err); 65 | migration.close(); 66 | }); 67 | } 68 | 69 | rollback() { 70 | const migration = new Migration(this.getDatabaseConnectionString()); 71 | 72 | return migration 73 | .down() 74 | .then(rolledbackMigrations => { 75 | logMigrationNames( 76 | name => this.log(`Rolled back migration ${name}`), 77 | rolledbackMigrations 78 | ); 79 | migration.close(); 80 | }) 81 | .catch(err => { 82 | this.log("Failed to roll back migrations."); 83 | this.log(err); 84 | migration.close(); 85 | }); 86 | } 87 | 88 | getDatabaseConnectionString() { 89 | if (!process.env.DATABASE_URL) { 90 | this.log("DATABASE_URL environment variable required"); 91 | process.exit(1); 92 | } 93 | 94 | return process.env.DATABASE_URL; 95 | } 96 | } 97 | 98 | module.exports = ServerlessUmzugMigrations; 99 | -------------------------------------------------------------------------------- /migration.js: -------------------------------------------------------------------------------- 1 | const Sequelize = require("sequelize"); 2 | const Umzug = require("umzug"); 3 | 4 | module.exports = class Migration { 5 | constructor(connectionString) { 6 | this.connectionString = connectionString; 7 | this.close = this.init(); 8 | } 9 | 10 | init() { 11 | this.sequelize = new Sequelize(this.connectionString, { 12 | pool: { 13 | max: 1, 14 | min: 0, 15 | idle: 5000 16 | } 17 | }); 18 | 19 | this.umzug = new Umzug({ 20 | storage: "sequelize", 21 | storageOptions: { 22 | sequelize: this.sequelize 23 | }, 24 | migrations: { 25 | params: [this.sequelize.getQueryInterface(), this.sequelize.constructor] 26 | }, 27 | logging: function() { 28 | console.log.apply(null, arguments); 29 | } 30 | }); 31 | 32 | return () => { 33 | this.sequelize.close(); 34 | }; 35 | } 36 | 37 | pending() { 38 | return this.umzug.pending(); 39 | } 40 | 41 | up() { 42 | return this.umzug.up(); 43 | } 44 | 45 | down() { 46 | return this.umzug.down(); 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "serverless-pg-migrations", 3 | "version": "1.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/geojson": { 8 | "version": "1.0.2", 9 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.2.tgz", 10 | "integrity": "sha1-sC0QqwKOKSisWSoFGqpJgaGUHQM=" 11 | }, 12 | "@types/node": { 13 | "version": "6.0.85", 14 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.85.tgz", 15 | "integrity": "sha512-6qLZpfQFO/g5Ns2e7RsW6brk0Q6Xzwiw7kVVU/XiQNOiJXSojhX76GP457PBYIsNMH2WfcGgcnZB4awFDHrwpA==" 16 | }, 17 | "ap": { 18 | "version": "0.2.0", 19 | "resolved": "https://registry.npmjs.org/ap/-/ap-0.2.0.tgz", 20 | "integrity": "sha1-rglCYAspkS8NKxTsYMRejzMLYRA=" 21 | }, 22 | "babel-runtime": { 23 | "version": "6.25.0", 24 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", 25 | "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", 26 | "requires": { 27 | "core-js": "2.4.1", 28 | "regenerator-runtime": "0.10.5" 29 | } 30 | }, 31 | "bluebird": { 32 | "version": "3.5.0", 33 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 34 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" 35 | }, 36 | "buffer-writer": { 37 | "version": "1.0.1", 38 | "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", 39 | "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" 40 | }, 41 | "cls-bluebird": { 42 | "version": "2.0.1", 43 | "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.0.1.tgz", 44 | "integrity": "sha1-wlmkgK4CwOUGE0MHuxPbMERu4uc=", 45 | "requires": { 46 | "is-bluebird": "1.0.2", 47 | "shimmer": "1.1.0" 48 | } 49 | }, 50 | "core-js": { 51 | "version": "2.4.1", 52 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", 53 | "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" 54 | }, 55 | "cross-env": { 56 | "version": "3.2.4", 57 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-3.2.4.tgz", 58 | "integrity": "sha1-ngWF8neGTtQhznVvgamA/w1piro=", 59 | "requires": { 60 | "cross-spawn": "5.1.0", 61 | "is-windows": "1.0.1" 62 | } 63 | }, 64 | "cross-spawn": { 65 | "version": "5.1.0", 66 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 67 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 68 | "requires": { 69 | "lru-cache": "4.1.1", 70 | "shebang-command": "1.2.0", 71 | "which": "1.2.14" 72 | } 73 | }, 74 | "debug": { 75 | "version": "2.6.8", 76 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 77 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 78 | "requires": { 79 | "ms": "2.0.0" 80 | } 81 | }, 82 | "depd": { 83 | "version": "1.1.0", 84 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", 85 | "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" 86 | }, 87 | "dottie": { 88 | "version": "2.0.0", 89 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", 90 | "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" 91 | }, 92 | "env-cmd": { 93 | "version": "5.1.0", 94 | "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-5.1.0.tgz", 95 | "integrity": "sha1-AjbbOTw/AzAFIE/NCpLuQHI6nJ4=", 96 | "requires": { 97 | "cross-spawn": "5.1.0" 98 | } 99 | }, 100 | "generic-pool": { 101 | "version": "3.1.7", 102 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.1.7.tgz", 103 | "integrity": "sha1-2sIrLHp6BOQXMvfY0tJaMDyI9mI=" 104 | }, 105 | "inflection": { 106 | "version": "1.10.0", 107 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", 108 | "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=" 109 | }, 110 | "is-bluebird": { 111 | "version": "1.0.2", 112 | "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", 113 | "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" 114 | }, 115 | "is-windows": { 116 | "version": "1.0.1", 117 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", 118 | "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=" 119 | }, 120 | "isexe": { 121 | "version": "2.0.0", 122 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 123 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 124 | }, 125 | "lodash": { 126 | "version": "4.17.4", 127 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 128 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 129 | }, 130 | "lru-cache": { 131 | "version": "4.1.1", 132 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 133 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 134 | "requires": { 135 | "pseudomap": "1.0.2", 136 | "yallist": "2.1.2" 137 | } 138 | }, 139 | "moment": { 140 | "version": "2.18.1", 141 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", 142 | "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" 143 | }, 144 | "moment-timezone": { 145 | "version": "0.5.13", 146 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", 147 | "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=", 148 | "requires": { 149 | "moment": "2.18.1" 150 | } 151 | }, 152 | "ms": { 153 | "version": "2.0.0", 154 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 155 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 156 | }, 157 | "packet-reader": { 158 | "version": "0.3.1", 159 | "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", 160 | "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" 161 | }, 162 | "path-parse": { 163 | "version": "1.0.5", 164 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 165 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" 166 | }, 167 | "pg": { 168 | "version": "7.0.2", 169 | "resolved": "https://registry.npmjs.org/pg/-/pg-7.0.2.tgz", 170 | "integrity": "sha1-ucL+gWjn7f6TQ66+b8SFkedmrac=", 171 | "requires": { 172 | "buffer-writer": "1.0.1", 173 | "packet-reader": "0.3.1", 174 | "pg-connection-string": "0.1.3", 175 | "pg-pool": "2.0.1", 176 | "pg-types": "1.12.0", 177 | "pgpass": "1.0.2", 178 | "semver": "4.3.2" 179 | } 180 | }, 181 | "pg-connection-string": { 182 | "version": "0.1.3", 183 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", 184 | "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" 185 | }, 186 | "pg-pool": { 187 | "version": "2.0.1", 188 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.1.tgz", 189 | "integrity": "sha1-ixJUHfJxtX9wIMUKP1VmRx+Cx34=" 190 | }, 191 | "pg-types": { 192 | "version": "1.12.0", 193 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.0.tgz", 194 | "integrity": "sha1-itO3uJfj/UY+Yt4kGtX8ZAtKZvA=", 195 | "requires": { 196 | "ap": "0.2.0", 197 | "postgres-array": "1.0.2", 198 | "postgres-bytea": "1.0.0", 199 | "postgres-date": "1.0.3", 200 | "postgres-interval": "1.1.1" 201 | } 202 | }, 203 | "pgpass": { 204 | "version": "1.0.2", 205 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", 206 | "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", 207 | "requires": { 208 | "split": "1.0.0" 209 | } 210 | }, 211 | "postgres-array": { 212 | "version": "1.0.2", 213 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", 214 | "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" 215 | }, 216 | "postgres-bytea": { 217 | "version": "1.0.0", 218 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", 219 | "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" 220 | }, 221 | "postgres-date": { 222 | "version": "1.0.3", 223 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", 224 | "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" 225 | }, 226 | "postgres-interval": { 227 | "version": "1.1.1", 228 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", 229 | "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", 230 | "requires": { 231 | "xtend": "4.0.1" 232 | } 233 | }, 234 | "pseudomap": { 235 | "version": "1.0.2", 236 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 237 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 238 | }, 239 | "regenerator-runtime": { 240 | "version": "0.10.5", 241 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", 242 | "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" 243 | }, 244 | "resolve": { 245 | "version": "1.4.0", 246 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", 247 | "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", 248 | "requires": { 249 | "path-parse": "1.0.5" 250 | } 251 | }, 252 | "retry-as-promised": { 253 | "version": "2.2.0", 254 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz", 255 | "integrity": "sha1-sEY9f9PPWy/tZFAKtui4pJxbjmw=", 256 | "requires": { 257 | "bluebird": "3.5.0", 258 | "cross-env": "3.2.4", 259 | "debug": "2.6.8" 260 | } 261 | }, 262 | "semver": { 263 | "version": "4.3.2", 264 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", 265 | "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" 266 | }, 267 | "sequelize": { 268 | "version": "4.4.2", 269 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.4.2.tgz", 270 | "integrity": "sha1-lSkuCnUuJYbskqDnI2K3bk/Ljq4=", 271 | "requires": { 272 | "bluebird": "3.5.0", 273 | "cls-bluebird": "2.0.1", 274 | "debug": "2.6.8", 275 | "depd": "1.1.0", 276 | "dottie": "2.0.0", 277 | "env-cmd": "5.1.0", 278 | "generic-pool": "3.1.7", 279 | "inflection": "1.10.0", 280 | "lodash": "4.17.4", 281 | "moment": "2.18.1", 282 | "moment-timezone": "0.5.13", 283 | "retry-as-promised": "2.2.0", 284 | "semver": "5.4.1", 285 | "terraformer-wkt-parser": "1.1.2", 286 | "toposort-class": "1.0.1", 287 | "uuid": "3.1.0", 288 | "validator": "6.3.0", 289 | "wkx": "0.4.1" 290 | }, 291 | "dependencies": { 292 | "semver": { 293 | "version": "5.4.1", 294 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 295 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" 296 | } 297 | } 298 | }, 299 | "shebang-command": { 300 | "version": "1.2.0", 301 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 302 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 303 | "requires": { 304 | "shebang-regex": "1.0.0" 305 | } 306 | }, 307 | "shebang-regex": { 308 | "version": "1.0.0", 309 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 310 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 311 | }, 312 | "shimmer": { 313 | "version": "1.1.0", 314 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", 315 | "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" 316 | }, 317 | "split": { 318 | "version": "1.0.0", 319 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", 320 | "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", 321 | "requires": { 322 | "through": "2.3.8" 323 | } 324 | }, 325 | "terraformer": { 326 | "version": "1.0.8", 327 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", 328 | "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", 329 | "requires": { 330 | "@types/geojson": "1.0.2" 331 | } 332 | }, 333 | "terraformer-wkt-parser": { 334 | "version": "1.1.2", 335 | "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", 336 | "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", 337 | "requires": { 338 | "terraformer": "1.0.8" 339 | } 340 | }, 341 | "through": { 342 | "version": "2.3.8", 343 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 344 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 345 | }, 346 | "toposort-class": { 347 | "version": "1.0.1", 348 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 349 | "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" 350 | }, 351 | "umzug": { 352 | "version": "2.0.1", 353 | "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.0.1.tgz", 354 | "integrity": "sha1-29xH9FkjiFYilmgUwDaTwWnaRuc=", 355 | "requires": { 356 | "babel-runtime": "6.25.0", 357 | "bluebird": "3.5.0", 358 | "lodash": "4.17.4", 359 | "resolve": "1.4.0" 360 | } 361 | }, 362 | "uuid": { 363 | "version": "3.1.0", 364 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 365 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 366 | }, 367 | "validator": { 368 | "version": "6.3.0", 369 | "resolved": "https://registry.npmjs.org/validator/-/validator-6.3.0.tgz", 370 | "integrity": "sha1-R84j7Y1Ord+p1LjvAHG2zxB418g=" 371 | }, 372 | "which": { 373 | "version": "1.2.14", 374 | "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", 375 | "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", 376 | "requires": { 377 | "isexe": "2.0.0" 378 | } 379 | }, 380 | "wkx": { 381 | "version": "0.4.1", 382 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.1.tgz", 383 | "integrity": "sha1-L8FxtenLVcYlb+9L3h8hvkE77+4=", 384 | "requires": { 385 | "@types/node": "6.0.85" 386 | } 387 | }, 388 | "xtend": { 389 | "version": "4.0.1", 390 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 391 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 392 | }, 393 | "yallist": { 394 | "version": "2.1.2", 395 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 396 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 397 | } 398 | } 399 | } 400 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "serverless-pg-migrations", 3 | "version": "1.0.1", 4 | "description": "Trigger Postgres migrations from AWS Lambda with Serverless ⚡️", 5 | "main": "index.js", 6 | "repository": "https://github.com/Nevon/serverless-pg-migrations", 7 | "author": "Tommy Brunn ", 8 | "license": "MIT", 9 | "scripts": { 10 | "precommit": "lint-staged", 11 | "format": "prettier --write *.js" 12 | }, 13 | "dependencies": { 14 | "pg": "^6.1.0", 15 | "sequelize": "^4.4.2", 16 | "umzug": "^2.0.1" 17 | }, 18 | "devDependencies": { 19 | "husky": "^0.14.3", 20 | "lint-staged": "^4.0.2", 21 | "prettier": "^1.5.3" 22 | }, 23 | "lint-staged": { 24 | "*.js": [ 25 | "prettier --write", 26 | "git add" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/geojson@^1.0.0": 6 | version "1.0.2" 7 | resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.2.tgz#b02d10ab028e2928ac592a051aaa4981a1941d03" 8 | 9 | "@types/node@^6.0.48": 10 | version "6.0.85" 11 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.85.tgz#ec02bfe54a61044f2be44f13b389c6a0e8ee05ae" 12 | 13 | ansi-escapes@^1.0.0: 14 | version "1.4.0" 15 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 16 | 17 | ansi-regex@^2.0.0: 18 | version "2.1.1" 19 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 20 | 21 | ansi-styles@^2.2.1: 22 | version "2.2.1" 23 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 24 | 25 | ap@~0.2.0: 26 | version "0.2.0" 27 | resolved "https://registry.yarnpkg.com/ap/-/ap-0.2.0.tgz#ae0942600b29912f0d2b14ec60c45e8f330b6110" 28 | 29 | app-root-path@^2.0.0: 30 | version "2.0.1" 31 | resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" 32 | 33 | argparse@^1.0.7: 34 | version "1.0.9" 35 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 36 | dependencies: 37 | sprintf-js "~1.0.2" 38 | 39 | babel-runtime@^6.23.0: 40 | version "6.25.0" 41 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" 42 | dependencies: 43 | core-js "^2.4.0" 44 | regenerator-runtime "^0.10.0" 45 | 46 | balanced-match@^1.0.0: 47 | version "1.0.0" 48 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 49 | 50 | bluebird@^3.4.1, bluebird@^3.4.6: 51 | version "3.5.0" 52 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" 53 | 54 | brace-expansion@^1.1.7: 55 | version "1.1.8" 56 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 57 | dependencies: 58 | balanced-match "^1.0.0" 59 | concat-map "0.0.1" 60 | 61 | buffer-writer@1.0.1: 62 | version "1.0.1" 63 | resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-1.0.1.tgz#22a936901e3029afcd7547eb4487ceb697a3bf08" 64 | 65 | chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: 66 | version "1.1.3" 67 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 68 | dependencies: 69 | ansi-styles "^2.2.1" 70 | escape-string-regexp "^1.0.2" 71 | has-ansi "^2.0.0" 72 | strip-ansi "^3.0.0" 73 | supports-color "^2.0.0" 74 | 75 | ci-info@^1.0.0: 76 | version "1.0.0" 77 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" 78 | 79 | cli-cursor@^1.0.2: 80 | version "1.0.2" 81 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 82 | dependencies: 83 | restore-cursor "^1.0.1" 84 | 85 | cli-spinners@^0.1.2: 86 | version "0.1.2" 87 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" 88 | 89 | cli-truncate@^0.2.1: 90 | version "0.2.1" 91 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" 92 | dependencies: 93 | slice-ansi "0.0.4" 94 | string-width "^1.0.1" 95 | 96 | cls-bluebird@^2.0.1: 97 | version "2.0.1" 98 | resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.0.1.tgz#c259a480ae02c0e506134307bb13db30446ee2e7" 99 | dependencies: 100 | is-bluebird "^1.0.2" 101 | shimmer "^1.1.0" 102 | 103 | code-point-at@^1.0.0: 104 | version "1.1.0" 105 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 106 | 107 | commander@^2.9.0: 108 | version "2.11.0" 109 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 110 | 111 | concat-map@0.0.1: 112 | version "0.0.1" 113 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 114 | 115 | core-js@^2.4.0: 116 | version "2.4.1" 117 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 118 | 119 | cosmiconfig@^1.1.0: 120 | version "1.1.0" 121 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" 122 | dependencies: 123 | graceful-fs "^4.1.2" 124 | js-yaml "^3.4.3" 125 | minimist "^1.2.0" 126 | object-assign "^4.0.1" 127 | os-homedir "^1.0.1" 128 | parse-json "^2.2.0" 129 | pinkie-promise "^2.0.0" 130 | require-from-string "^1.1.0" 131 | 132 | cross-env@^3.1.2: 133 | version "3.2.4" 134 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.4.tgz#9e0585f277864ed421ce756f81a980ff0d698aba" 135 | dependencies: 136 | cross-spawn "^5.1.0" 137 | is-windows "^1.0.0" 138 | 139 | cross-spawn@^5.0.1, cross-spawn@^5.1.0: 140 | version "5.1.0" 141 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 142 | dependencies: 143 | lru-cache "^4.0.1" 144 | shebang-command "^1.2.0" 145 | which "^1.2.9" 146 | 147 | date-fns@^1.27.2: 148 | version "1.28.5" 149 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" 150 | 151 | debug@^2.2.0, debug@^2.3.0: 152 | version "2.6.8" 153 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 154 | dependencies: 155 | ms "2.0.0" 156 | 157 | depd@^1.1.0: 158 | version "1.1.0" 159 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 160 | 161 | dottie@^2.0.0: 162 | version "2.0.0" 163 | resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.0.tgz#da191981c8b8d713ca0115d5898cf397c2f0ddd0" 164 | 165 | elegant-spinner@^1.0.1: 166 | version "1.0.1" 167 | resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 168 | 169 | env-cmd@^5.0.0: 170 | version "5.1.0" 171 | resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-5.1.0.tgz#0236db393c3f033005204fcd0a92ee40723a9c9e" 172 | dependencies: 173 | cross-spawn "^5.0.1" 174 | 175 | error-ex@^1.2.0: 176 | version "1.3.1" 177 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 178 | dependencies: 179 | is-arrayish "^0.2.1" 180 | 181 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 182 | version "1.0.5" 183 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 184 | 185 | esprima@^4.0.0: 186 | version "4.0.0" 187 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 188 | 189 | execa@^0.7.0: 190 | version "0.7.0" 191 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 192 | dependencies: 193 | cross-spawn "^5.0.1" 194 | get-stream "^3.0.0" 195 | is-stream "^1.1.0" 196 | npm-run-path "^2.0.0" 197 | p-finally "^1.0.0" 198 | signal-exit "^3.0.0" 199 | strip-eof "^1.0.0" 200 | 201 | exit-hook@^1.0.0: 202 | version "1.1.1" 203 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 204 | 205 | figures@^1.7.0: 206 | version "1.7.0" 207 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 208 | dependencies: 209 | escape-string-regexp "^1.0.5" 210 | object-assign "^4.1.0" 211 | 212 | generic-pool@2.4.3: 213 | version "2.4.3" 214 | resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.4.3.tgz#780c36f69dfad05a5a045dd37be7adca11a4f6ff" 215 | 216 | generic-pool@^3.1.6: 217 | version "3.1.7" 218 | resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.1.7.tgz#dac22b2c7a7a04e41732f7d8d2d25a303c88f662" 219 | 220 | get-stream@^3.0.0: 221 | version "3.0.0" 222 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 223 | 224 | graceful-fs@^4.1.2: 225 | version "4.1.11" 226 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 227 | 228 | has-ansi@^2.0.0: 229 | version "2.0.0" 230 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 231 | dependencies: 232 | ansi-regex "^2.0.0" 233 | 234 | husky@^0.14.3: 235 | version "0.14.3" 236 | resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" 237 | dependencies: 238 | is-ci "^1.0.10" 239 | normalize-path "^1.0.0" 240 | strip-indent "^2.0.0" 241 | 242 | indent-string@^2.1.0: 243 | version "2.1.0" 244 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 245 | dependencies: 246 | repeating "^2.0.0" 247 | 248 | indent-string@^3.0.0: 249 | version "3.2.0" 250 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 251 | 252 | inflection@1.10.0: 253 | version "1.10.0" 254 | resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f" 255 | 256 | is-arrayish@^0.2.1: 257 | version "0.2.1" 258 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 259 | 260 | is-bluebird@^1.0.2: 261 | version "1.0.2" 262 | resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" 263 | 264 | is-ci@^1.0.10: 265 | version "1.0.10" 266 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" 267 | dependencies: 268 | ci-info "^1.0.0" 269 | 270 | is-finite@^1.0.0: 271 | version "1.0.2" 272 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 273 | dependencies: 274 | number-is-nan "^1.0.0" 275 | 276 | is-fullwidth-code-point@^1.0.0: 277 | version "1.0.0" 278 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 279 | dependencies: 280 | number-is-nan "^1.0.0" 281 | 282 | is-promise@^2.1.0: 283 | version "2.1.0" 284 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 285 | 286 | is-stream@^1.1.0: 287 | version "1.1.0" 288 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 289 | 290 | is-windows@^1.0.0: 291 | version "1.0.1" 292 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" 293 | 294 | isexe@^2.0.0: 295 | version "2.0.0" 296 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 297 | 298 | js-string-escape@1.0.1: 299 | version "1.0.1" 300 | resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" 301 | 302 | js-yaml@^3.4.3: 303 | version "3.9.0" 304 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" 305 | dependencies: 306 | argparse "^1.0.7" 307 | esprima "^4.0.0" 308 | 309 | lint-staged@^4.0.2: 310 | version "4.0.2" 311 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.0.2.tgz#8e83e11e9e1656c09b6117f6db0d55fd4960a1c0" 312 | dependencies: 313 | app-root-path "^2.0.0" 314 | cosmiconfig "^1.1.0" 315 | execa "^0.7.0" 316 | listr "^0.12.0" 317 | lodash.chunk "^4.2.0" 318 | minimatch "^3.0.0" 319 | npm-which "^3.0.1" 320 | p-map "^1.1.1" 321 | staged-git-files "0.0.4" 322 | 323 | listr-silent-renderer@^1.1.1: 324 | version "1.1.1" 325 | resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" 326 | 327 | listr-update-renderer@^0.2.0: 328 | version "0.2.0" 329 | resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" 330 | dependencies: 331 | chalk "^1.1.3" 332 | cli-truncate "^0.2.1" 333 | elegant-spinner "^1.0.1" 334 | figures "^1.7.0" 335 | indent-string "^3.0.0" 336 | log-symbols "^1.0.2" 337 | log-update "^1.0.2" 338 | strip-ansi "^3.0.1" 339 | 340 | listr-verbose-renderer@^0.4.0: 341 | version "0.4.0" 342 | resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" 343 | dependencies: 344 | chalk "^1.1.3" 345 | cli-cursor "^1.0.2" 346 | date-fns "^1.27.2" 347 | figures "^1.7.0" 348 | 349 | listr@^0.12.0: 350 | version "0.12.0" 351 | resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" 352 | dependencies: 353 | chalk "^1.1.3" 354 | cli-truncate "^0.2.1" 355 | figures "^1.7.0" 356 | indent-string "^2.1.0" 357 | is-promise "^2.1.0" 358 | is-stream "^1.1.0" 359 | listr-silent-renderer "^1.1.1" 360 | listr-update-renderer "^0.2.0" 361 | listr-verbose-renderer "^0.4.0" 362 | log-symbols "^1.0.2" 363 | log-update "^1.0.2" 364 | ora "^0.2.3" 365 | p-map "^1.1.1" 366 | rxjs "^5.0.0-beta.11" 367 | stream-to-observable "^0.1.0" 368 | strip-ansi "^3.0.1" 369 | 370 | lodash.chunk@^4.2.0: 371 | version "4.2.0" 372 | resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" 373 | 374 | lodash@^4.17.0, lodash@^4.17.1: 375 | version "4.17.4" 376 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 377 | 378 | log-symbols@^1.0.2: 379 | version "1.0.2" 380 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" 381 | dependencies: 382 | chalk "^1.0.0" 383 | 384 | log-update@^1.0.2: 385 | version "1.0.2" 386 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" 387 | dependencies: 388 | ansi-escapes "^1.0.0" 389 | cli-cursor "^1.0.2" 390 | 391 | lru-cache@^4.0.1: 392 | version "4.1.1" 393 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" 394 | dependencies: 395 | pseudomap "^1.0.2" 396 | yallist "^2.1.2" 397 | 398 | minimatch@^3.0.0: 399 | version "3.0.4" 400 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 401 | dependencies: 402 | brace-expansion "^1.1.7" 403 | 404 | minimist@^1.2.0: 405 | version "1.2.0" 406 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 407 | 408 | moment-timezone@^0.5.4: 409 | version "0.5.13" 410 | resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90" 411 | dependencies: 412 | moment ">= 2.9.0" 413 | 414 | "moment@>= 2.9.0", moment@^2.13.0: 415 | version "2.18.1" 416 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" 417 | 418 | ms@2.0.0: 419 | version "2.0.0" 420 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 421 | 422 | normalize-path@^1.0.0: 423 | version "1.0.0" 424 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" 425 | 426 | npm-path@^2.0.2: 427 | version "2.0.3" 428 | resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" 429 | dependencies: 430 | which "^1.2.10" 431 | 432 | npm-run-path@^2.0.0: 433 | version "2.0.2" 434 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 435 | dependencies: 436 | path-key "^2.0.0" 437 | 438 | npm-which@^3.0.1: 439 | version "3.0.1" 440 | resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" 441 | dependencies: 442 | commander "^2.9.0" 443 | npm-path "^2.0.2" 444 | which "^1.2.10" 445 | 446 | number-is-nan@^1.0.0: 447 | version "1.0.1" 448 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 449 | 450 | object-assign@4.1.0: 451 | version "4.1.0" 452 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 453 | 454 | object-assign@^4.0.1, object-assign@^4.1.0: 455 | version "4.1.1" 456 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 457 | 458 | onetime@^1.0.0: 459 | version "1.1.0" 460 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 461 | 462 | ora@^0.2.3: 463 | version "0.2.3" 464 | resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" 465 | dependencies: 466 | chalk "^1.1.1" 467 | cli-cursor "^1.0.2" 468 | cli-spinners "^0.1.2" 469 | object-assign "^4.0.1" 470 | 471 | os-homedir@^1.0.1: 472 | version "1.0.2" 473 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 474 | 475 | p-finally@^1.0.0: 476 | version "1.0.0" 477 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 478 | 479 | p-map@^1.1.1: 480 | version "1.1.1" 481 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" 482 | 483 | packet-reader@0.3.1: 484 | version "0.3.1" 485 | resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.3.1.tgz#cd62e60af8d7fea8a705ec4ff990871c46871f27" 486 | 487 | parse-json@^2.2.0: 488 | version "2.2.0" 489 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 490 | dependencies: 491 | error-ex "^1.2.0" 492 | 493 | path-key@^2.0.0: 494 | version "2.0.1" 495 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 496 | 497 | path-parse@^1.0.5: 498 | version "1.0.5" 499 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 500 | 501 | pg-connection-string@0.1.3: 502 | version "0.1.3" 503 | resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" 504 | 505 | pg-pool@1.*: 506 | version "1.8.0" 507 | resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-1.8.0.tgz#f7ec73824c37a03f076f51bfdf70e340147c4f37" 508 | dependencies: 509 | generic-pool "2.4.3" 510 | object-assign "4.1.0" 511 | 512 | pg-types@1.*: 513 | version "1.12.0" 514 | resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.12.0.tgz#8ad3b7b897e3fd463e62de241ad5fc640b4a66f0" 515 | dependencies: 516 | ap "~0.2.0" 517 | postgres-array "~1.0.0" 518 | postgres-bytea "~1.0.0" 519 | postgres-date "~1.0.0" 520 | postgres-interval "^1.1.0" 521 | 522 | pg@^6.1.0: 523 | version "6.4.2" 524 | resolved "https://registry.yarnpkg.com/pg/-/pg-6.4.2.tgz#c364011060eac7a507a2ae063eb857ece910e27f" 525 | dependencies: 526 | buffer-writer "1.0.1" 527 | js-string-escape "1.0.1" 528 | packet-reader "0.3.1" 529 | pg-connection-string "0.1.3" 530 | pg-pool "1.*" 531 | pg-types "1.*" 532 | pgpass "1.*" 533 | semver "4.3.2" 534 | 535 | pgpass@1.*: 536 | version "1.0.2" 537 | resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306" 538 | dependencies: 539 | split "^1.0.0" 540 | 541 | pinkie-promise@^2.0.0: 542 | version "2.0.1" 543 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 544 | dependencies: 545 | pinkie "^2.0.0" 546 | 547 | pinkie@^2.0.0: 548 | version "2.0.4" 549 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 550 | 551 | postgres-array@~1.0.0: 552 | version "1.0.2" 553 | resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.2.tgz#8e0b32eb03bf77a5c0a7851e0441c169a256a238" 554 | 555 | postgres-bytea@~1.0.0: 556 | version "1.0.0" 557 | resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" 558 | 559 | postgres-date@~1.0.0: 560 | version "1.0.3" 561 | resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz#e2d89702efdb258ff9d9cee0fe91bd06975257a8" 562 | 563 | postgres-interval@^1.1.0: 564 | version "1.1.1" 565 | resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.1.tgz#acdb0f897b4b1c6e496d9d4e0a853e1c428f06f0" 566 | dependencies: 567 | xtend "^4.0.0" 568 | 569 | prettier@^1.5.3: 570 | version "1.5.3" 571 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.5.3.tgz#59dadc683345ec6b88f88b94ed4ae7e1da394bfe" 572 | 573 | pseudomap@^1.0.2: 574 | version "1.0.2" 575 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 576 | 577 | regenerator-runtime@^0.10.0: 578 | version "0.10.5" 579 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 580 | 581 | repeating@^2.0.0: 582 | version "2.0.1" 583 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 584 | dependencies: 585 | is-finite "^1.0.0" 586 | 587 | require-from-string@^1.1.0: 588 | version "1.2.1" 589 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 590 | 591 | resolve@^1.0.0: 592 | version "1.4.0" 593 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" 594 | dependencies: 595 | path-parse "^1.0.5" 596 | 597 | restore-cursor@^1.0.1: 598 | version "1.0.1" 599 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 600 | dependencies: 601 | exit-hook "^1.0.0" 602 | onetime "^1.0.0" 603 | 604 | retry-as-promised@^2.0.0: 605 | version "2.2.0" 606 | resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.2.0.tgz#b0463d7fd3cf5b2fed64500ab6e8b8a49c5b8e6c" 607 | dependencies: 608 | bluebird "^3.4.6" 609 | cross-env "^3.1.2" 610 | debug "^2.2.0" 611 | 612 | rxjs@^5.0.0-beta.11: 613 | version "5.4.2" 614 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7" 615 | dependencies: 616 | symbol-observable "^1.0.1" 617 | 618 | semver@4.3.2: 619 | version "4.3.2" 620 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" 621 | 622 | semver@^5.0.1: 623 | version "5.4.1" 624 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 625 | 626 | sequelize@^4.4.2: 627 | version "4.4.2" 628 | resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.4.2.tgz#95292e0a752e2586ec92a0e72362b76e4fcb8eae" 629 | dependencies: 630 | bluebird "^3.4.6" 631 | cls-bluebird "^2.0.1" 632 | debug "^2.3.0" 633 | depd "^1.1.0" 634 | dottie "^2.0.0" 635 | env-cmd "^5.0.0" 636 | generic-pool "^3.1.6" 637 | inflection "1.10.0" 638 | lodash "^4.17.1" 639 | moment "^2.13.0" 640 | moment-timezone "^0.5.4" 641 | retry-as-promised "^2.0.0" 642 | semver "^5.0.1" 643 | terraformer-wkt-parser "^1.1.2" 644 | toposort-class "^1.0.1" 645 | uuid "^3.0.0" 646 | validator "^6.3.0" 647 | wkx "^0.4.1" 648 | 649 | shebang-command@^1.2.0: 650 | version "1.2.0" 651 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 652 | dependencies: 653 | shebang-regex "^1.0.0" 654 | 655 | shebang-regex@^1.0.0: 656 | version "1.0.0" 657 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 658 | 659 | shimmer@^1.1.0: 660 | version "1.1.0" 661 | resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.1.0.tgz#97d7377137ffbbab425522e429fe0aa89a488b35" 662 | 663 | signal-exit@^3.0.0: 664 | version "3.0.2" 665 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 666 | 667 | slice-ansi@0.0.4: 668 | version "0.0.4" 669 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 670 | 671 | split@^1.0.0: 672 | version "1.0.0" 673 | resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae" 674 | dependencies: 675 | through "2" 676 | 677 | sprintf-js@~1.0.2: 678 | version "1.0.3" 679 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 680 | 681 | staged-git-files@0.0.4: 682 | version "0.0.4" 683 | resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" 684 | 685 | stream-to-observable@^0.1.0: 686 | version "0.1.0" 687 | resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" 688 | 689 | string-width@^1.0.1: 690 | version "1.0.2" 691 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 692 | dependencies: 693 | code-point-at "^1.0.0" 694 | is-fullwidth-code-point "^1.0.0" 695 | strip-ansi "^3.0.0" 696 | 697 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 698 | version "3.0.1" 699 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 700 | dependencies: 701 | ansi-regex "^2.0.0" 702 | 703 | strip-eof@^1.0.0: 704 | version "1.0.0" 705 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 706 | 707 | strip-indent@^2.0.0: 708 | version "2.0.0" 709 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 710 | 711 | supports-color@^2.0.0: 712 | version "2.0.0" 713 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 714 | 715 | symbol-observable@^1.0.1: 716 | version "1.0.4" 717 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" 718 | 719 | terraformer-wkt-parser@^1.1.2: 720 | version "1.1.2" 721 | resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz#336a0c8fc82094a5aff83288f69aedecd369bf0c" 722 | dependencies: 723 | terraformer "~1.0.5" 724 | 725 | terraformer@~1.0.5: 726 | version "1.0.8" 727 | resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.8.tgz#51e0ad89746fcf2161dc6f65aa70e42377c8b593" 728 | dependencies: 729 | "@types/geojson" "^1.0.0" 730 | 731 | through@2: 732 | version "2.3.8" 733 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 734 | 735 | toposort-class@^1.0.1: 736 | version "1.0.1" 737 | resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" 738 | 739 | umzug@^2.0.1: 740 | version "2.0.1" 741 | resolved "https://registry.yarnpkg.com/umzug/-/umzug-2.0.1.tgz#dbdc47f45923885622966814c03693c169da46e7" 742 | dependencies: 743 | babel-runtime "^6.23.0" 744 | bluebird "^3.4.1" 745 | lodash "^4.17.0" 746 | resolve "^1.0.0" 747 | 748 | uuid@^3.0.0: 749 | version "3.1.0" 750 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 751 | 752 | validator@^6.3.0: 753 | version "6.3.0" 754 | resolved "https://registry.yarnpkg.com/validator/-/validator-6.3.0.tgz#47ce23ed8d4eaddfa9d4b8ef0071b6cf1078d7c8" 755 | 756 | which@^1.2.10, which@^1.2.9: 757 | version "1.2.14" 758 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 759 | dependencies: 760 | isexe "^2.0.0" 761 | 762 | wkx@^0.4.1: 763 | version "0.4.1" 764 | resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.1.tgz#2fc171b5e9cb55c6256fef4bde1f21be413befee" 765 | dependencies: 766 | "@types/node" "^6.0.48" 767 | 768 | xtend@^4.0.0: 769 | version "4.0.1" 770 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 771 | 772 | yallist@^2.1.2: 773 | version "2.1.2" 774 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 775 | --------------------------------------------------------------------------------