From 459e8215b9c6e24a63f0eccea060d85b15e5091b Mon Sep 17 00:00:00 2001 From: Naz Date: Fri, 21 May 2021 18:20:11 +0400 Subject: [PATCH] Split data exporter's index file into separate module refs https://github.com/TryGhost/Team/issues/610 - This is a next step removing bloat from export module's index.js file, which get's rid of eslisn error completely --- core/server/data/exporter/export-filename.js | 34 +++++++ core/server/data/exporter/exporter.js | 66 ++++++++++++ core/server/data/exporter/index.js | 101 +------------------ 3 files changed, 103 insertions(+), 98 deletions(-) create mode 100644 core/server/data/exporter/export-filename.js create mode 100644 core/server/data/exporter/exporter.js diff --git a/core/server/data/exporter/export-filename.js b/core/server/data/exporter/export-filename.js new file mode 100644 index 0000000000..256e4b8aa5 --- /dev/null +++ b/core/server/data/exporter/export-filename.js @@ -0,0 +1,34 @@ +const _ = require('lodash'); +const logging = require('../../../shared/logging'); +const errors = require('@tryghost/errors'); +const security = require('@tryghost/security'); +const models = require('../../models'); + +const modelOptions = {context: {internal: true}}; + +const exportFileName = async function exportFileName(options) { + const datetime = require('moment')().format('YYYY-MM-DD-HH-mm-ss'); + let title = ''; + + options = options || {}; + + // custom filename + if (options.filename) { + return options.filename + '.json'; + } + + try { + const settingsTitle = await models.Settings.findOne({key: 'title'}, _.merge({}, modelOptions, _.pick(options, 'transacting'))); + + if (settingsTitle) { + title = security.string.safe(settingsTitle.get('value')) + '.'; + } + + return title + 'ghost.' + datetime + '.json'; + } catch (err) { + logging.error(new errors.GhostError({err: err})); + return 'ghost.' + datetime + '.json'; + } +}; + +module.exports = exportFileName; diff --git a/core/server/data/exporter/exporter.js b/core/server/data/exporter/exporter.js new file mode 100644 index 0000000000..92dbd5092c --- /dev/null +++ b/core/server/data/exporter/exporter.js @@ -0,0 +1,66 @@ +const _ = require('lodash'); +const Promise = require('bluebird'); +const db = require('../../data/db'); +const commands = require('../schema').commands; +const ghostVersion = require('../../lib/ghost-version'); +const i18n = require('../../../shared/i18n'); +const errors = require('@tryghost/errors'); + +const { + TABLES_ALLOWLIST, + SETTING_KEYS_BLOCKLIST +} = require('./table-lists'); + +const exportTable = function exportTable(tableName, options) { + if (TABLES_ALLOWLIST.includes(tableName) || + (options.include && _.isArray(options.include) && options.include.indexOf(tableName) !== -1)) { + const query = (options.transacting || db.knex)(tableName); + + return query.select(); + } +}; + +const getSettingsTableData = function getSettingsTableData(settingsData) { + return settingsData && settingsData.filter((setting) => { + return !SETTING_KEYS_BLOCKLIST.includes(setting.key); + }); +}; + +const doExport = async function doExport(options) { + options = options || {include: []}; + + try { + const tables = await commands.getTables(options.transacting); + + const tableData = await Promise.mapSeries(tables, function (tableName) { + return exportTable(tableName, options); + }); + + const exportData = { + meta: { + exported_on: new Date().getTime(), + version: ghostVersion.full + }, + data: { + // Filled below + } + }; + + tables.forEach((name, i) => { + if (name === 'settings') { + exportData.data[name] = getSettingsTableData(tableData[i]); + } else { + exportData.data[name] = tableData[i]; + } + }); + + return exportData; + } catch (err) { + throw new errors.DataExportError({ + err: err, + context: i18n.t('errors.data.export.errorExportingData') + }); + } +}; + +module.exports = doExport; diff --git a/core/server/data/exporter/index.js b/core/server/data/exporter/index.js index f715602fa8..06959124b7 100644 --- a/core/server/data/exporter/index.js +++ b/core/server/data/exporter/index.js @@ -1,100 +1,5 @@ -const _ = require('lodash'); -const Promise = require('bluebird'); -const db = require('../../data/db'); -const commands = require('../schema').commands; -const ghostVersion = require('../../lib/ghost-version'); -const i18n = require('../../../shared/i18n'); -const logging = require('../../../shared/logging'); -const errors = require('@tryghost/errors'); -const security = require('@tryghost/security'); -const models = require('../../models'); -const { - BACKUP_TABLES, - TABLES_ALLOWLIST, - SETTING_KEYS_BLOCKLIST -} = require('./table-lists'); - -const modelOptions = {context: {internal: true}}; - -const exportFileName = async function exportFileName(options) { - const datetime = require('moment')().format('YYYY-MM-DD-HH-mm-ss'); - let title = ''; - - options = options || {}; - - // custom filename - if (options.filename) { - return options.filename + '.json'; - } - - try { - const settingsTitle = await models.Settings.findOne({key: 'title'}, _.merge({}, modelOptions, _.pick(options, 'transacting'))); - - if (settingsTitle) { - title = security.string.safe(settingsTitle.get('value')) + '.'; - } - - return title + 'ghost.' + datetime + '.json'; - } catch (err) { - logging.error(new errors.GhostError({err: err})); - return 'ghost.' + datetime + '.json'; - } -}; - -const exportTable = function exportTable(tableName, options) { - if (TABLES_ALLOWLIST.includes(tableName) || - (options.include && _.isArray(options.include) && options.include.indexOf(tableName) !== -1)) { - const query = (options.transacting || db.knex)(tableName); - - return query.select(); - } -}; - -const getSettingsTableData = function getSettingsTableData(settingsData) { - return settingsData && settingsData.filter((setting) => { - return !SETTING_KEYS_BLOCKLIST.includes(setting.key); - }); -}; - -const doExport = async function doExport(options) { - options = options || {include: []}; - - try { - const tables = await commands.getTables(options.transacting); - - const tableData = await Promise.mapSeries(tables, function (tableName) { - return exportTable(tableName, options); - }); - - const exportData = { - meta: { - exported_on: new Date().getTime(), - version: ghostVersion.full - }, - data: { - // Filled below - } - }; - - tables.forEach((name, i) => { - if (name === 'settings') { - exportData.data[name] = getSettingsTableData(tableData[i]); - } else { - exportData.data[name] = tableData[i]; - } - }); - - return exportData; - } catch (err) { - throw new errors.DataExportError({ - err: err, - context: i18n.t('errors.data.export.errorExportingData') - }); - } -}; - module.exports = { - doExport: doExport, - fileName: exportFileName, - BACKUP_TABLES: BACKUP_TABLES + doExport: require('./exporter'), + fileName: require('./export-filename'), + BACKUP_TABLES: require('./table-lists').BACKUP_TABLES };