@strapi/strapi
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
1 lines • 10.3 kB
Source Map (JSON)
{"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/import/action.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { isObject } from 'lodash/fp';\nimport chalk from 'chalk';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n getDiffHandler,\n parseRestoreFromOptions,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n providers: { createLocalFileSourceProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalStrapiDestinationProvider, DEFAULT_CONFLICT_STRATEGY },\n} = strapiDataTransfer;\n\nconst { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY } =\n engineDataTransfer;\n\ninterface CmdOptions {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n verbose?: boolean;\n key?: string;\n conflictStrategy?: 'restore';\n force?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a file to a local Strapi instance\n */\nexport default async (opts: CmdOptions) => {\n // validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse arguments');\n }\n\n /**\n * From strapi backup file\n */\n const sourceOptions = getLocalFileSourceOptions(opts);\n\n const source = createLocalFileSourceProvider(sourceOptions);\n\n /**\n * To local Strapi instance\n */\n const strapiInstance = await createStrapiInstance();\n\n /**\n * Configure and run the transfer engine\n */\n const engineOptions: EngineOptions = {\n versionStrategy: DEFAULT_VERSION_STRATEGY,\n schemaStrategy: DEFAULT_SCHEMA_STRATEGY,\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return (\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n );\n },\n },\n ],\n entities: [\n {\n filter: (entity) => !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type),\n },\n ],\n },\n };\n\n const destinationOptions = {\n async getStrapi() {\n return strapiInstance;\n },\n autoDestroy: false,\n strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,\n restore: parseRestoreFromOptions(engineOptions),\n };\n\n const destination = createLocalStrapiDestinationProvider(destinationOptions);\n destination.onWarning = (message) => console.warn(`\\n${chalk.yellow('warn')}: ${message}`);\n\n const engine = createTransferEngine(source, destination, engineOptions);\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('import', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n engine.onSchemaDiff(getDiffHandler(engine, { force: opts.force, action: 'import' }));\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log('Starting import...');\n await strapiInstance.telemetry.send(\n 'didDEITSProcessStart',\n getTransferTelemetryPayload(engine)\n );\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n results = await engine.transfer();\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapiInstance.telemetry.send(\n 'didDEITSProcessFinish',\n getTransferTelemetryPayload(engine)\n );\n await strapiInstance.destroy();\n\n exitWith(0, exitMessageText('import'));\n } catch (e) {\n await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('import', true));\n }\n};\n\n/**\n * Infer local file source provider options based on a given filename\n */\nconst getLocalFileSourceOptions = (opts: {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n key?: string;\n}) => {\n const options: fileDataTransfer.providers.ILocalFileSourceProviderOptions = {\n file: { path: opts.file ?? '' },\n compression: { enabled: !!opts.decompress },\n encryption: { enabled: !!opts.decrypt, key: opts.key },\n };\n\n return options;\n};\n"],"names":["providers","createLocalFileSourceProvider","fileDataTransfer","createLocalStrapiDestinationProvider","DEFAULT_CONFLICT_STRATEGY","strapiDataTransfer","createTransferEngine","DEFAULT_VERSION_STRATEGY","DEFAULT_SCHEMA_STRATEGY","engineDataTransfer","opts","isObject","exitWith","sourceOptions","getLocalFileSourceOptions","source","strapiInstance","createStrapiInstance","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","destinationOptions","getStrapi","autoDestroy","strategy","conflictStrategy","restore","parseRestoreFromOptions","destination","onWarning","message","console","warn","chalk","yellow","engine","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","onSchemaDiff","getDiffHandler","force","action","on","stage","data","start","succeed","log","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","e","error","destroy","exitMessageText","options","file","path","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}