From ca2db34d4c320f7d60891fe9cd5a1437c1473674 Mon Sep 17 00:00:00 2001 From: Misha Kaletsky <15040698+mmkal@users.noreply.github.com> Date: Thu, 16 Dec 2021 02:48:55 +0000 Subject: [PATCH] Sequelize v6 (#527) * Sequelize v6 * use exact, stable version of sequelize Co-authored-by: Misha Kaletsky --- .github/workflows/ci.yml | 6 +- README.md | 2 + package-lock.json | 108 +++++++++++++-------------------- package.json | 2 +- test/storage/sequelize.test.ts | 14 ++--- 5 files changed, 52 insertions(+), 80 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab740533..6321be98 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,6 @@ jobs: strategy: matrix: node-version: [14.x, 12.x] - sequelize-version: [null, latest] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} @@ -15,11 +14,8 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: npm install - - run: npm install sequelize@${{ matrix.sequelize-version }} - if: matrix.sequelize-version != null - run: npm run lint - if: matrix.sequelize-version == null - run: npm run test -- --coverage - name: Coverage uses: codecov/codecov-action@v2 - if: matrix.node-version == '14.x' && matrix.sequelize-version == null + if: matrix.node-version == '14.x' diff --git a/README.md b/README.md index e5d24b77..f5b790a4 100644 --- a/README.md +++ b/README.md @@ -520,6 +520,8 @@ Using `SequelizeStorage` will create a table in your SQL database called `Sequel Detailed documentation for the options it can take are in the `_SequelizeStorageConstructorOptions` TypeScript interface, which can be found in [src/storage/sequelize.ts](./src/storage/sequelize.ts). +This library has been tested with sequelize v6. It may or may not work with lower versions - use at your own risk. + #### MongoDB Storage Using `MongoDBStorage` will create a collection in your MongoDB database called `migrations` containing an entry for each executed migration. You will have either to pass a MongoDB Driver Collection as `collection` property. Alternatively you can pass a established MongoDB Driver connection and a collection name. diff --git a/package-lock.json b/package-lock.json index 0076f55d..2a28f536 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2712,12 +2712,6 @@ "inherits": "~2.0.0" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -3123,16 +3117,6 @@ } } }, - "cls-bluebird": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", - "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", - "dev": true, - "requires": { - "is-bluebird": "^1.0.2", - "shimmer": "^1.1.0" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5294,9 +5278,9 @@ "dev": true }, "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.1.tgz", + "integrity": "sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==", "dev": true }, "inflight": { @@ -5594,12 +5578,6 @@ "has-bigints": "^1.0.1" } }, - "is-bluebird": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", - "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=", - "dev": true - }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -9047,9 +9025,9 @@ "dev": true }, "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "dev": true, "requires": { "moment": ">= 2.9.0" @@ -10116,6 +10094,12 @@ "dev": true, "optional": true }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10602,46 +10586,42 @@ } }, "sequelize": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.4.tgz", - "integrity": "sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.11.0.tgz", + "integrity": "sha512-+j3N5lr+FR1eicMRGR3bRsGOl9HMY0UGb2PyB2i1yZ64XBgsz3xejMH0UD45LcUitj40soDGIa9CyvZG0dfzKg==", "dev": true, "requires": { - "bluebird": "^3.5.0", - "cls-bluebird": "^2.1.0", "debug": "^4.1.1", "dottie": "^2.0.0", - "inflection": "1.12.0", - "lodash": "^4.17.15", - "moment": "^2.24.0", - "moment-timezone": "^0.5.21", + "inflection": "1.13.1", + "lodash": "^4.17.20", + "moment": "^2.26.0", + "moment-timezone": "^0.5.31", + "pg-connection-string": "^2.5.0", "retry-as-promised": "^3.2.0", - "semver": "^6.3.0", - "sequelize-pool": "^2.3.0", + "semver": "^7.3.2", + "sequelize-pool": "^6.0.0", "toposort-class": "^1.0.1", - "uuid": "^3.3.3", - "validator": "^10.11.0", - "wkx": "^0.4.8" + "uuid": "^8.1.0", + "validator": "^13.7.0", + "wkx": "^0.5.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "sequelize-pool": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz", - "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz", + "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==", "dev": true }, "set-blocking": { @@ -10665,12 +10645,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", - "dev": true - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -11421,9 +11395,9 @@ } }, "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "dev": true }, "verror": { @@ -11570,9 +11544,9 @@ } }, "wkx": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", - "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index 3b9842a0..31a10c93 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "lodash": "4.17.21", "np": "7.6.0", "prettier": "2.5.1", - "sequelize": "5.22.4", + "sequelize": "6.11.0", "sinon": "12.0.1", "source-map-support": "0.5.21", "sqlite3": "5.0.2", diff --git a/test/storage/sequelize.test.ts b/test/storage/sequelize.test.ts index 5dca6c91..758675b0 100644 --- a/test/storage/sequelize.test.ts +++ b/test/storage/sequelize.test.ts @@ -6,14 +6,9 @@ import path = require('path'); import { v4 as uuid } from 'uuid'; import jetpack = require('fs-jetpack'); -// TODO [>=3.0.0]: Investigate whether we are mis-using `model.describe()` here, and get rid of `any`. +// TOMAYBEDO: Investigate whether we are mis-using `model.describe()` here, and get rid of `any`. // See https://github.com/sequelize/umzug/pull/226 and https://github.com/sequelize/sequelize/issues/12296 for details -const describeModel = (model: any) => - model.describe().then((d: any) => { - // FIXME [sequelize@>=6] remove this hack when only sequelize>=6 is supported - Object.keys(d).forEach(k => delete d[k].unique); - return d; - }); +const describeModel = (model: any) => model.describe(); describe('sequelize', () => { jetpack.cwd(__dirname).dir('tmp', { empty: true }); @@ -76,6 +71,7 @@ describe('sequelize', () => { "defaultValue": undefined, "primaryKey": true, "type": "VARCHAR(255)", + "unique": true, }, } `); @@ -120,6 +116,7 @@ describe('sequelize', () => { "defaultValue": undefined, "primaryKey": true, "type": "VARCHAR(255)", + "unique": true, }, } `); @@ -142,18 +139,21 @@ describe('sequelize', () => { "defaultValue": undefined, "primaryKey": false, "type": "DATETIME", + "unique": false, }, "name": Object { "allowNull": false, "defaultValue": undefined, "primaryKey": true, "type": "VARCHAR(255)", + "unique": true, }, "updatedAt": Object { "allowNull": false, "defaultValue": undefined, "primaryKey": false, "type": "DATETIME", + "unique": false, }, } `);