UNPKG

@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.4 kB
{"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n encrypt?: boolean;\n verbose?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n // Validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse command arguments');\n }\n\n const strapi = await createStrapiInstance();\n\n const source = createSourceProvider(strapi);\n const destination = createDestinationProvider(opts);\n\n const engine = engineDataTransfer.createTransferEngine(source, destination, {\n versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\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) {\n return !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type);\n },\n },\n ],\n },\n });\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('export', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\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 export...`);\n\n await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n let outFile: string;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n results = await engine.transfer();\n outFile = results.destination?.file?.path ?? '';\n const outFileExists = await fs.pathExists(outFile);\n if (!outFileExists) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export file not created \"${outFile}\"`\n );\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\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 console.log(`Export archive is in ${chalk.green(outFile)}`);\n exitWith(0, exitMessageText('export'));\n } catch {\n await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('export', true));\n }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.Strapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl } = opts;\n\n const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n : undefined;\n\n return createLocalFileDestinationProvider({\n file: {\n path: filepath,\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n encryption: {\n enabled: encrypt ?? false,\n key: encrypt ? key : undefined,\n },\n compression: {\n enabled: compress ?? false,\n },\n });\n};\n"],"names":["providers","createLocalFileDestinationProvider","fileDataTransfer","createLocalStrapiSourceProvider","strapiDataTransfer","BYTES_IN_MB","opts","isObject","exitWith","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","outFileExists","fs","pathExists","errors","TransferEngineTransferError","table","buildTransferTable","toString","e","error","chalk","green","exitMessageText","getStrapi","compress","encrypt","key","maxSizeJsonl","filepath","isString","length","getDefaultExportName","maxSizeJsonlInMb","isFinite","toNumber","undefined","encryption","enabled","compression"],"mappings":"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"}