diff --git a/package.json b/package.json index 02ececd..65f4a25 100644 --- a/package.json +++ b/package.json @@ -37,11 +37,14 @@ "fastify-cookie": "^3.1.0", "fastify-helmet": "^3.0.1", "fastify-jwt": "^1.0.0", - "fastify-postgres": "^2.0.0", + "fastify-sequelize": "^1.0.4", "fastify-static": "^2.5.0", "make-promises-safe": "^5.0.0", + "mysql2": "^1.7.0", "node-fetch": "^2.6.0", "pg": "^7.12.1", - "picnic": "^6.5.1" + "pg-hstore": "^2.3.3", + "picnic": "^6.5.1", + "sqlite": "^3.0.3" } } diff --git a/process-styles.js b/process-styles.js deleted file mode 100644 index 91138d6..0000000 --- a/process-styles.js +++ /dev/null @@ -1,40 +0,0 @@ -const sass = require('sass'); -const autoprefixer = require('autoprefixer'); -const cssnano = require('cssnano'); -const postcss = require('postcss'); -const fs = require('fs'); - -sass.render({ file: 'index.scss' }, function (sassErr, css) { - if (sassErr) { - throw sassErr; - } - - // fs.writeFile('public/css/index.css', css.css, (fileErr) => { - // if (fileErr) { - // throw fileErr; - // } - - // console.log('The file has been saved!'); - // }); - postcss([autoprefixer,cssnano]).process(css.css, {from:undefined}).then(result => { - result.warnings().forEach(warn => { - console.warn(warn.toString()); - }); - - if (!fs.existsSync('public')) { - fs.mkdirSync('public'); - } - if (!fs.existsSync('public/css')) { - fs.mkdirSync('public/css'); - } - fs.writeFile('public/css/index.css', result.css, (fileErr) => { - if (fileErr) { - throw fileErr; - } - - console.log('The file has been saved!'); - }); - }).catch((postcssErr) => { - throw postcssErr; - }); -}); diff --git a/server/config.example.json b/server/config.example.json index 99c792e..68e85a7 100644 --- a/server/config.example.json +++ b/server/config.example.json @@ -1,10 +1,12 @@ { "port": 3000, - "pgsql_host": "localhost", - "pgsql_port": 5432, - "pgsql_database": "readlebee", - "pgsql_username": "postgres", - "pgsql_password": "password", + "db_engine": "postgres", + "sqlite_location": "./database.sqlite", + "db_host": "localhost", + "db_port": 5432, + "db_database": "readlebee", + "db_username": "postgres", + "db_password": "password", "jwtSecretKey": "SomethingAtLeast32CharactersLong!", "tokenExpireDays": 7, "inventaireDomain": "https://inventaire.io" diff --git a/server/index.js b/server/index.js index cae69ec..b7aca93 100644 --- a/server/index.js +++ b/server/index.js @@ -24,13 +24,28 @@ fastify.register(require('fastify-cookie')); // Enable reading and setting http fastify.register(require('fastify-jwt'), { // Enable creating, parsing, and verifying JSON Web Tokens from the global fastify object secret: fastify.siteConfig.jwtSecretKey, // The secret key used to generate JWTs. Make it big and random! }); -fastify.register(require('fastify-postgres'), { - host: fastify.siteConfig.pgsql_host, - port: fastify.siteConfig.pgsql_port, - database: fastify.siteConfig.pgsql_database, - user: fastify.siteConfig.pgsql_username, - password: fastify.siteConfig.pgsql_password, -}); + +const sequelizeConfig = { + instance: 'sequelize', + autoConnect: true, + dialect: fastify.siteConfig.db_engine, +}; +switch (fastify.siteConfig.db_engine) { + case 'sqlite': { + sequelizeConfig.storage = typeof fastify.siteConfig.sqlite_location !== 'undefined' + ? path.resolve(fastify.siteConfig.sqlite_location) + : path.resolve(__dirname, './database.sqlite'); + break; + } + default: { + sequelizeConfig.host = fastify.siteConfig.db_host; + sequelizeConfig.port = fastify.siteConfig.db_port; + sequelizeConfig.database = fastify.siteConfig.db_database; + sequelizeConfig.username = fastify.siteConfig.db_username; + sequelizeConfig.password = fastify.siteConfig.db_password; + } +} +fastify.register(require('fastify-sequelize'), sequelizeConfig); // Every request, check to see if a valid token exists fastify.addHook('onRequest', (request, reply, done) => { diff --git a/server/routes/account.js b/server/routes/account.js index 33e471a..f9e93b0 100644 --- a/server/routes/account.js +++ b/server/routes/account.js @@ -1,15 +1,32 @@ +const Sequelize = require('sequelize'); +const faker = require('faker'); + async function routes(fastify, options) { fastify.get('/api/test-db-connect', async (request, reply) => { - fastify.pg.connect((err, client, release) => { - if (err) return reply.send(err); - - client.query( - 'SELECT * FROM test', [], (err, result) => { - release(); - return reply.send(err || result); - } - ); - }) + const User = fastify.sequelize.define('user', { + email: { + type: Sequelize.STRING, + allowNull: false, + }, + test: { + type: Sequelize.STRING, + allowNull: true, + } + }); + User.sync(); + + return await User.findAll() + .catch(async ex => { + return await User.sync().then(() => { + return []; + }); + }); + + // return await User.sync().then(() => { + // return User.create({ + // email: faker.internet.email(), + // }) + // }); }); /*fastify.get('/login', async (request, reply) => { diff --git a/setup-database.js b/setup-database.js new file mode 100644 index 0000000..413647e --- /dev/null +++ b/setup-database.js @@ -0,0 +1,115 @@ +const path = require('path'); +const Sequelize = require('sequelize'); +let siteConfig; +try { + siteConfig = require('./server/config.json'); +} catch (ex) { + console.error('Please copy `config.example.json` to `config.json` and fill it with your server\'s data.'); + process.exit(1); +} + +const sequelizeConfig = { + dialect: siteConfig.db_engine, +}; +switch (siteConfig.db_engine) { + case 'sqlite': { + sequelizeConfig.storage = typeof siteConfig.sqlite_location !== 'undefined' + ? path.resolve(siteConfig.sqlite_location) + : path.resolve(__dirname, './database.sqlite'); + break; + } + default: { + sequelizeConfig.host = siteConfig.db_host; + sequelizeConfig.port = siteConfig.db_port; + sequelizeConfig.database = siteConfig.db_database; + sequelizeConfig.username = siteConfig.db_username; + sequelizeConfig.password = siteConfig.db_password; + } +} + +const sequelize = new Sequelize(sequelizeConfig); + +const User = sequelize.define('user', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + email: { + type: Sequelize.STRING, + allowNull: false, + unique: true, + }, + username: { + type: Sequelize.STRING, + allowNull: false, + unique: true, + }, + displayName: { + type: Sequelize.STRING, + allowNull: false, + unique: true, + }, + passwordHash: { + type: Sequelize.STRING, + allowNull: false, + unique: true, + }, + + // Timestamps + createdAt: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.NOW, + }, + updatedAt: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.NOW, + }, +}); + +const Shelf = sequelize.define('shelf', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + user: { + type: Sequelize.INTEGER, + references: { + model: User, + key: 'id', + deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE, + } + }, + name: { + type: Sequelize.STRING, + allowNull: false, + }, + isRestricted: { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: false, + comment: 'If true, books on this shelf cannot be in other restricted shelves.', + }, + isPublic: { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: false, + }, + + // Timestamps + createdAt: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.NOW, + }, + updatedAt: { + type: Sequelize.DATE, + allowNull: false, + defaultValue: Sequelize.NOW, + }, +}); + +sequelize.sync(); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 29756fa..57f89ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -770,6 +770,11 @@ "@parcel/utils" "^1.11.0" physical-cpu-count "^2.0.0" +"@types/geojson@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf" + integrity sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w== + "@types/jsonwebtoken@^8.3.2": version "8.3.3" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.3.3.tgz#eafeea8239c74b02263d204c0e1175d5cd0bb85f" @@ -1157,6 +1162,11 @@ bl@^3.0.0: dependencies: readable-stream "^3.0.1" +bluebird@^3.4.6, bluebird@^3.5.0: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + bluebird@~3.4.1: version "3.4.7" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" @@ -1598,6 +1608,14 @@ clones@^1.2.0: resolved "https://registry.yarnpkg.com/clones/-/clones-1.2.0.tgz#b34c872045446a9f264ccceb7731bca05c529b71" integrity sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ== +cls-bluebird@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.1.0.tgz#37ef1e080a8ffb55c2f4164f536f1919e7968aee" + integrity sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4= + dependencies: + is-bluebird "^1.0.2" + shimmer "^1.1.0" + coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -2082,14 +2100,14 @@ deasync@^0.1.14: bindings "~1.2.1" node-addon-api "^1.6.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.6: +debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2181,12 +2199,17 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +denque@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" + integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: +depd@^1.1.0, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -2316,6 +2339,11 @@ dotenv@^5.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== +dottie@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.1.tgz#697ad9d72004db7574d21f892466a3c285893659" + integrity sha512-ch5OQgvGDK2u8pSZeSYAQaV/lczImd7pMJ7BcEPXmnFVjy4yJIzP6CsODJUTH8mg1tyH1Z2abOiuJO3DjZ/GBw== + duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -2758,6 +2786,13 @@ fastify-jwt@^1.0.0: jsonwebtoken "^8.3.0" steed "^1.1.3" +fastify-plugin@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-0.1.1.tgz#13a94f495a90fd5a7ae4bcd827c54ea5986c794f" + integrity sha1-E6lPSVqQ/Vp65LzYJ8VOpZhseU8= + dependencies: + semver "^5.3.0" + fastify-plugin@^1.0.0, fastify-plugin@^1.2.0, fastify-plugin@^1.2.1, fastify-plugin@^1.4.0, fastify-plugin@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-1.6.0.tgz#c8198b08608f20c502b5dad26b36e9ae27206d7c" @@ -2765,12 +2800,13 @@ fastify-plugin@^1.0.0, fastify-plugin@^1.2.0, fastify-plugin@^1.2.1, fastify-plu dependencies: semver "^6.0.0" -fastify-postgres@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fastify-postgres/-/fastify-postgres-2.0.0.tgz#5a7f7aabb8121bff1427f4f5f6a37c6e7eabe71f" - integrity sha512-JQPHhoDLPCzXtDBhemwOEXHPQ7zW+uCo0TIWO5LipbSKYbf684dyKUSlHixVfTw2mU5optG75XPm9Jb/GMQ8fg== +fastify-sequelize@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fastify-sequelize/-/fastify-sequelize-1.0.4.tgz#16aa9ff1500ff80ce8c237d6d0e6676edca52e64" + integrity sha512-GHhMBThXkPFXLNEpm1CwYjx7YRIapNceISelqGkHAS1fnHFgmXNWPaLXN2qvhBhUGTuCrNn38M/c17MhsbHwXg== dependencies: - fastify-plugin "^1.4.0" + fastify-plugin "^0.1.1" + sequelize "^4.20.1" fastify-static@^2.5.0: version "2.5.0" @@ -2991,6 +3027,18 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +generic-pool@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.5.0.tgz#acac4fd743a175ff20574f380910036464cb61f7" + integrity sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -3340,6 +3388,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.0.tgz#59cdde0a2a297cc2aeb0c6445a195ee89f127550" + integrity sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -3375,6 +3430,11 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= +inflection@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" + integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3476,6 +3536,11 @@ is-binary-path@^2.1.0: dependencies: binary-extensions "^2.0.0" +is-bluebird@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" + integrity sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI= + is-boolean-attribute@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/is-boolean-attribute/-/is-boolean-attribute-0.0.1.tgz#24ab59b7dcb9da3612c773e60c656565e5a0980c" @@ -3639,6 +3704,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -4000,7 +4070,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4: +lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4012,6 +4082,11 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -4024,7 +4099,7 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= -lru-cache@^4.1.5: +lru-cache@^4.1.3, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -4032,6 +4107,13 @@ lru-cache@^4.1.5: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -4271,6 +4353,18 @@ mixin-deep@^1.2.0: dependencies: minimist "0.0.8" +moment-timezone@^0.5.14: + version "0.5.26" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.26.tgz#c0267ca09ae84631aa3dc33f65bedbe6e8e0d772" + integrity sha512-sFP4cgEKTCymBBKgoxZjYzlSovC20Y6J7y3nanDc5RoBIXKlZhoYwBoZGe3flwU6A372AcRwScH8KiwV6zjy1g== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.20.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4291,6 +4385,27 @@ mutexify@^1.1.0: resolved "https://registry.yarnpkg.com/mutexify/-/mutexify-1.2.0.tgz#45597975a2b035f56dcf61ff15cc8d73c28e7639" integrity sha512-oprzxd2zhfrJqEuB98qc1dRMMonClBQ57UPDjnbcrah4orEMTq1jq3+AcdFe5ePzdbJXI7zmdhfftIdMnhYFoQ== +mysql2@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-1.7.0.tgz#2fbf314da016a61d038ffcd57a2a0aa3b7b8eacc" + integrity sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog== + dependencies: + denque "^1.4.1" + generate-function "^2.3.1" + iconv-lite "^0.5.0" + long "^4.0.0" + lru-cache "^5.1.1" + named-placeholders "^1.1.2" + seq-queue "^0.0.5" + sqlstring "^2.3.1" + +named-placeholders@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8" + integrity sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA== + dependencies: + lru-cache "^4.1.3" + nan@^2.12.1, nan@^2.14.0: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -4508,6 +4623,22 @@ node-libs-browser@^2.0.0: util "^0.11.0" vm-browserify "^1.0.1" +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-pre-gyp@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" @@ -5052,6 +5183,13 @@ pg-connection-string@0.1.3: resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" integrity sha1-2hhHsglA5C7hSSvq9l1J2RskXfc= +pg-hstore@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/pg-hstore/-/pg-hstore-2.3.3.tgz#d1978c12a85359830b1388d3b0ff233b88928e96" + integrity sha512-qpeTpdkguFgfdoidtfeTho1Q1zPVPbtMHgs8eQ+Aan05iLmIs3Z3oo5DOZRclPGoQ4i68I1kCtQSJSa7i0ZVYg== + dependencies: + underscore "^1.7.0" + pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" @@ -5907,7 +6045,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.0: +request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -5978,6 +6116,14 @@ ret@~0.2.0: resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== +retry-as-promised@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.3.2.tgz#cd974ee4fd9b5fe03cbf31871ee48221c07737b7" + integrity sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c= + dependencies: + bluebird "^3.4.6" + debug "^2.6.9" + reusify@^1.0.0, reusify@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -6150,6 +6296,34 @@ send@^0.16.0: range-parser "~1.2.0" statuses "~1.4.0" +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4= + +sequelize@^4.20.1: + version "4.44.3" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.44.3.tgz#29d7af9efdfad4c796a75764e91f701fc454cee0" + integrity sha512-r2A4EVDKRCcABcZhY4ItvbcosvMJKpQMooxg/S8ouRFrZzqMPQ9O2thOUfgW59q8ZcEa5ccNeqwg15MCciqPMg== + dependencies: + bluebird "^3.5.0" + cls-bluebird "^2.1.0" + debug "^3.1.0" + depd "^1.1.0" + dottie "^2.0.0" + generic-pool "3.5.0" + inflection "1.12.0" + lodash "^4.17.1" + moment "^2.20.0" + moment-timezone "^0.5.14" + retry-as-promised "^2.3.2" + semver "^5.5.0" + terraformer-wkt-parser "^1.1.2" + toposort-class "^1.0.1" + uuid "^3.2.1" + validator "^10.4.0" + wkx "^0.4.1" + serialize-to-js@^1.1.1: version "1.2.2" resolved "https://registry.yarnpkg.com/serialize-to-js/-/serialize-to-js-1.2.2.tgz#1a567b0c9bf557bc7d7b77b503dfae0a8218d15d" @@ -6238,6 +6412,11 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shimmer@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" @@ -6395,6 +6574,34 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sql-template-strings@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/sql-template-strings/-/sql-template-strings-2.2.2.tgz#3f11508a25addfce217a3042a9d300c3193b96ff" + integrity sha1-PxFQiiWt384hejBCqdMAwxk7lv8= + +sqlite3@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.1.0.tgz#e051fb9c133be15726322a69e2e37ec560368380" + integrity sha512-RvqoKxq+8pDHsJo7aXxsFR18i+dU2Wp5o12qAJOV5LNcDt+fgJsc2QKKg3sIRfXrN9ZjzY1T7SNe/DFVqAXjaw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.11.0" + request "^2.87.0" + +sqlite@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sqlite/-/sqlite-3.0.3.tgz#3f519cfc599ffa3270d76f3567bf2abb2ac18742" + integrity sha512-DpofdtBibbiOObtdADGZYE6bvnLpjRG4ut/MDTDau2nK40htOLj1E0c55aOkvbnRVqQ0ZPtjj7PJuKKyS0Ypww== + dependencies: + sqlite3 "^4.0.0" + optionalDependencies: + sql-template-strings "^2.2.2" + +sqlstring@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" + integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -6687,6 +6894,21 @@ tar@^4, tar@^4.4.10: safe-buffer "^5.1.2" yallist "^3.0.3" +terraformer-wkt-parser@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz#c9d6ac3dff25f4c0bd344e961f42694961834c34" + integrity sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w== + dependencies: + "@types/geojson" "^1.0.0" + terraformer "~1.0.5" + +terraformer@~1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.9.tgz#77851fef4a49c90b345dc53cf26809fdf29dcda6" + integrity sha512-YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag== + optionalDependencies: + "@types/geojson" "^1.0.0" + terser@^3.7.3: version "3.17.0" resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" @@ -6792,6 +7014,11 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg= + tough-cookie@^2.3.3, tough-cookie@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -6899,6 +7126,11 @@ uncss@^0.17.0: postcss-selector-parser "6.0.2" request "^2.88.0" +underscore@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + unfetch@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" @@ -7045,7 +7277,7 @@ util@^0.11.0: dependencies: inherits "2.0.3" -uuid@^3.3.2: +uuid@^3.2.1, uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -7063,6 +7295,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^10.4.0: + version "10.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" + integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== + vendors@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" @@ -7172,6 +7409,13 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +wkx@^0.4.1: + version "0.4.8" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.8.tgz#a092cf088d112683fdc7182fd31493b2c5820003" + integrity sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ== + dependencies: + "@types/node" "*" + wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -7234,7 +7478,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==