UNPKG

contentful-import

Version:

this tool allows you to import JSON dump exported by contentful-export

214 lines (166 loc) 6.46 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = runContentfulImport; var _cliTable = require('cli-table3'); var _cliTable2 = _interopRequireDefault(_cliTable); var _listr = require('listr'); var _listr2 = _interopRequireDefault(_listr); var _listrUpdateRenderer = require('listr-update-renderer'); var _listrUpdateRenderer2 = _interopRequireDefault(_listrUpdateRenderer); var _listrVerboseRenderer = require('listr-verbose-renderer'); var _listrVerboseRenderer2 = _interopRequireDefault(_listrVerboseRenderer); var _lodash = require('lodash'); var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); var _logging = require('contentful-batch-libs/dist/logging'); var _listr3 = require('contentful-batch-libs/dist/listr'); var _initClient = require('./tasks/init-client'); var _initClient2 = _interopRequireDefault(_initClient); var _getDestinationData = require('./tasks/get-destination-data'); var _getDestinationData2 = _interopRequireDefault(_getDestinationData); var _pushToSpace = require('./tasks/push-to-space/push-to-space'); var _pushToSpace2 = _interopRequireDefault(_pushToSpace); var _transformSpace = require('./transform/transform-space'); var _transformSpace2 = _interopRequireDefault(_transformSpace); var _validations = require('./utils/validations'); var _parseOptions = require('./parseOptions'); var _parseOptions2 = _interopRequireDefault(_parseOptions); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function createListrOptions(options) { if (options.useVerboseRenderer) { return { renderer: _listrVerboseRenderer2.default }; } return { renderer: _listrUpdateRenderer2.default, collapse: false }; } function runContentfulImport(params) { const log = []; const options = (0, _parseOptions2.default)(params); const listrOptions = createListrOptions(options); // Setup custom log listener to store log messages for later (0, _logging.setupLogging)(log); const infoTable = new _cliTable2.default(); infoTable.push([{ colSpan: 2, content: 'The following entities are going to be imported:' }]); Object.keys(options.content).forEach(type => { if (options.skipLocales && type === 'locales') { return; } if (options.skipContentModel && ['contentTypes', 'editorInterfaces'].indexOf(type) >= 0) { return; } if (options.contentModelOnly && !(['contentTypes', 'editorInterfaces', 'locales'].indexOf(type) >= 0)) { return; } infoTable.push([(0, _lodash.startCase)(type), options.content[type].length]); }); console.log(infoTable.toString()); const tasks = new _listr2.default([{ title: 'Validating content-file', task: ctx => { (0, _validations.assertPayload)(options.content); } }, { title: 'Initialize client', task: (0, _listr3.wrapTask)(ctx => { try { ctx.client = (0, _initClient2.default)(options); return Promise.resolve(); } catch (err) { return Promise.reject(err); } }) }, { title: 'Checking if destination space already has any content and retrieving it', task: (0, _listr3.wrapTask)((ctx, task) => { return (0, _getDestinationData2.default)({ client: ctx.client, spaceId: options.spaceId, environmentId: options.environmentId, sourceData: options.content, skipLocales: options.skipLocales, skipContentModel: options.skipContentModel }).then(destinationData => { ctx.sourceDataUntransformed = options.content; ctx.destinationData = destinationData; (0, _validations.assertDefaultLocale)(ctx.sourceDataUntransformed, ctx.destinationData); }); }) }, { title: 'Apply transformations to source data', task: (0, _listr3.wrapTask)(ctx => { try { const transformedSourceData = (0, _transformSpace2.default)(ctx.sourceDataUntransformed, ctx.destinationData); ctx.sourceData = transformedSourceData; return Promise.resolve(); } catch (err) { return Promise.reject(err); } }) }, { title: 'Push content to destination space', task: (ctx, _task) => { return (0, _pushToSpace2.default)({ sourceData: ctx.sourceData, destinationData: ctx.destinationData, client: ctx.client, spaceId: options.spaceId, environmentId: options.environmentId, contentModelOnly: options.contentModelOnly, skipLocales: options.skipLocales, skipContentModel: options.skipContentModel, skipContentPublishing: options.skipContentPublishing, prePublishDelay: options.prePublishDelay, timeout: options.timeout, retryLimit: options.retryLimit, listrOptions }); } }], listrOptions); return tasks.run({ data: {} }).then(ctx => { console.log('Finished importing all data'); const resultTypes = Object.keys(ctx.data); if (resultTypes.length) { const resultTable = new _cliTable2.default(); resultTable.push([{ colSpan: 2, content: 'Imported entities' }]); resultTypes.forEach(type => { resultTable.push([(0, _lodash.startCase)(type), ctx.data[type].length]); }); console.log(resultTable.toString()); } else { console.log('No data was imported'); } const durationHuman = options.startTime.fromNow(true); const durationSeconds = (0, _moment2.default)().diff(options.startTime, 'seconds'); console.log(`The import took ${durationHuman} (${durationSeconds}s)`); return ctx.data; }).catch(err => { log.push({ ts: new Date().toJSON(), level: 'error', error: err }); }).then(data => { const errorLog = log.filter(logMessage => logMessage.level !== 'info' && logMessage.level !== 'warning'); const displayLog = log.filter(logMessage => logMessage.level !== 'info'); (0, _logging.displayErrorLog)(displayLog); if (errorLog.length) { return (0, _logging.writeErrorLogFile)(options.errorLogFile, errorLog).then(() => { const multiError = new Error('Errors occurred'); multiError.name = 'ContentfulMultiError'; multiError.errors = errorLog; throw multiError; }); } console.log('The import was successful.'); return data; }); } module.exports = exports.default;