diff --git a/js/modules/migrations/migrations_0_database_with_attachment_data.js b/js/modules/migrations/migrations_0_database_with_attachment_data.js index 45fc11505..6f8f99079 100644 --- a/js/modules/migrations/migrations_0_database_with_attachment_data.js +++ b/js/modules/migrations/migrations_0_database_with_attachment_data.js @@ -1,5 +1,4 @@ -const isFunction = require('lodash/isFunction'); -const isObject = require('lodash/isObject'); +const { runMigrations } = require('./run_migrations'); // IMPORTANT: The migrations below are run on a database that may be very large @@ -147,20 +146,5 @@ const database = { migrations, }; -exports.run = ({ Backbone } = {}) => { - if (!isObject(Backbone) || !isObject(Backbone.Collection) || - !isFunction(Backbone.Collection.extend)) { - throw new TypeError('"Backbone" is required'); - } - - const migrationCollection = new (Backbone.Collection.extend({ - database, - storeName: 'conversations', - }))(); - - return new Promise((resolve) => { - // NOTE: This `then` refers to a jQuery `Deferred`: - // eslint-disable-next-line more/no-then - migrationCollection.fetch().then(() => resolve()); - }); -}; +exports.run = ({ Backbone } = {}) => + runMigrations({ Backbone, database }); diff --git a/js/modules/migrations/run_migrations.js b/js/modules/migrations/run_migrations.js new file mode 100644 index 000000000..cdd26dd97 --- /dev/null +++ b/js/modules/migrations/run_migrations.js @@ -0,0 +1,27 @@ +const isFunction = require('lodash/isFunction'); +const isObject = require('lodash/isObject'); +const isString = require('lodash/isString'); + + +exports.runMigrations = ({ Backbone, database } = {}) => { + if (!isObject(Backbone) || !isObject(Backbone.Collection) || + !isFunction(Backbone.Collection.extend)) { + throw new TypeError('"Backbone" is required'); + } + + if (!isObject(database) || !isString(database.id) || + !Array.isArray(database.migrations)) { + throw new TypeError('"database" is required'); + } + + const migrationCollection = new (Backbone.Collection.extend({ + database, + storeName: 'items', + }))(); + + return new Promise((resolve) => { + // NOTE: This `then` refers to a jQuery `Deferred`: + // eslint-disable-next-line more/no-then + migrationCollection.fetch().then(() => resolve()); + }); +};