@strapi/strapi 5.50.1 → 5.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/cli/commands/export/action.d.ts +3 -0
  2. package/dist/cli/commands/export/action.d.ts.map +1 -1
  3. package/dist/cli/commands/export/command.d.ts.map +1 -1
  4. package/dist/cli/commands/import/action.d.ts +3 -0
  5. package/dist/cli/commands/import/action.d.ts.map +1 -1
  6. package/dist/cli/commands/import/command.d.ts.map +1 -1
  7. package/dist/cli/commands/transfer/action.d.ts +3 -0
  8. package/dist/cli/commands/transfer/action.d.ts.map +1 -1
  9. package/dist/cli/commands/transfer/command.d.ts.map +1 -1
  10. package/dist/cli/utils/commander.d.ts +1 -1
  11. package/dist/cli/utils/commander.d.ts.map +1 -1
  12. package/dist/cli/utils/data-transfer.d.ts +56 -3
  13. package/dist/cli/utils/data-transfer.d.ts.map +1 -1
  14. package/dist/node/core/admin-vite-alias-modules.d.ts +9 -4
  15. package/dist/node/core/admin-vite-alias-modules.d.ts.map +1 -1
  16. package/dist/node/core/admin-vite-aliases.d.ts +22 -1
  17. package/dist/node/core/admin-vite-aliases.d.ts.map +1 -1
  18. package/dist/node/core/admin-vite-optimize-exclude.d.ts +38 -0
  19. package/dist/node/core/admin-vite-optimize-exclude.d.ts.map +1 -0
  20. package/dist/node/core/admin-vite-singleton-modules.d.ts +14 -0
  21. package/dist/node/core/admin-vite-singleton-modules.d.ts.map +1 -0
  22. package/dist/node/core/dependencies.d.ts.map +1 -1
  23. package/dist/node/core/resolve-module.d.ts +14 -2
  24. package/dist/node/core/resolve-module.d.ts.map +1 -1
  25. package/dist/node/create-build-context.d.ts.map +1 -1
  26. package/dist/node/vite/build.d.ts.map +1 -1
  27. package/dist/node/vite/config.d.ts.map +1 -1
  28. package/dist/node/vite/watch.d.ts.map +1 -1
  29. package/dist/node/webpack/config.d.ts.map +1 -1
  30. package/dist/package.json.js +1 -1
  31. package/dist/package.json.mjs +1 -1
  32. package/dist/src/cli/commands/export/action.js +10 -16
  33. package/dist/src/cli/commands/export/action.js.map +1 -1
  34. package/dist/src/cli/commands/export/action.mjs +11 -17
  35. package/dist/src/cli/commands/export/action.mjs.map +1 -1
  36. package/dist/src/cli/commands/export/command.js +1 -1
  37. package/dist/src/cli/commands/export/command.js.map +1 -1
  38. package/dist/src/cli/commands/export/command.mjs +2 -2
  39. package/dist/src/cli/commands/export/command.mjs.map +1 -1
  40. package/dist/src/cli/commands/import/action.js +11 -15
  41. package/dist/src/cli/commands/import/action.js.map +1 -1
  42. package/dist/src/cli/commands/import/action.mjs +12 -16
  43. package/dist/src/cli/commands/import/action.mjs.map +1 -1
  44. package/dist/src/cli/commands/import/command.js +1 -1
  45. package/dist/src/cli/commands/import/command.js.map +1 -1
  46. package/dist/src/cli/commands/import/command.mjs +2 -2
  47. package/dist/src/cli/commands/import/command.mjs.map +1 -1
  48. package/dist/src/cli/commands/transfer/action.js +10 -16
  49. package/dist/src/cli/commands/transfer/action.js.map +1 -1
  50. package/dist/src/cli/commands/transfer/action.mjs +11 -17
  51. package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
  52. package/dist/src/cli/commands/transfer/command.js +1 -1
  53. package/dist/src/cli/commands/transfer/command.js.map +1 -1
  54. package/dist/src/cli/commands/transfer/command.mjs +2 -2
  55. package/dist/src/cli/commands/transfer/command.mjs.map +1 -1
  56. package/dist/src/cli/utils/data-transfer.js +166 -4
  57. package/dist/src/cli/utils/data-transfer.js.map +1 -1
  58. package/dist/src/cli/utils/data-transfer.mjs +155 -6
  59. package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
  60. package/dist/src/node/core/admin-vite-alias-modules.js +13 -2
  61. package/dist/src/node/core/admin-vite-alias-modules.js.map +1 -1
  62. package/dist/src/node/core/admin-vite-alias-modules.mjs +13 -3
  63. package/dist/src/node/core/admin-vite-alias-modules.mjs.map +1 -1
  64. package/dist/src/node/core/admin-vite-aliases.js +44 -5
  65. package/dist/src/node/core/admin-vite-aliases.js.map +1 -1
  66. package/dist/src/node/core/admin-vite-aliases.mjs +44 -7
  67. package/dist/src/node/core/admin-vite-aliases.mjs.map +1 -1
  68. package/dist/src/node/core/admin-vite-optimize-exclude.js +162 -0
  69. package/dist/src/node/core/admin-vite-optimize-exclude.js.map +1 -0
  70. package/dist/src/node/core/admin-vite-optimize-exclude.mjs +149 -0
  71. package/dist/src/node/core/admin-vite-optimize-exclude.mjs.map +1 -0
  72. package/dist/src/node/core/admin-vite-singleton-modules.js +24 -0
  73. package/dist/src/node/core/admin-vite-singleton-modules.js.map +1 -0
  74. package/dist/src/node/core/admin-vite-singleton-modules.mjs +22 -0
  75. package/dist/src/node/core/admin-vite-singleton-modules.mjs.map +1 -0
  76. package/dist/src/node/core/dependencies.js +3 -2
  77. package/dist/src/node/core/dependencies.js.map +1 -1
  78. package/dist/src/node/core/dependencies.mjs +3 -2
  79. package/dist/src/node/core/dependencies.mjs.map +1 -1
  80. package/dist/src/node/core/resolve-module.js +25 -12
  81. package/dist/src/node/core/resolve-module.js.map +1 -1
  82. package/dist/src/node/core/resolve-module.mjs +25 -13
  83. package/dist/src/node/core/resolve-module.mjs.map +1 -1
  84. package/dist/src/node/create-build-context.js +6 -0
  85. package/dist/src/node/create-build-context.js.map +1 -1
  86. package/dist/src/node/create-build-context.mjs +6 -0
  87. package/dist/src/node/create-build-context.mjs.map +1 -1
  88. package/dist/src/node/vite/build.js +3 -0
  89. package/dist/src/node/vite/build.js.map +1 -1
  90. package/dist/src/node/vite/build.mjs +3 -0
  91. package/dist/src/node/vite/build.mjs.map +1 -1
  92. package/dist/src/node/vite/config.js +33 -16
  93. package/dist/src/node/vite/config.js.map +1 -1
  94. package/dist/src/node/vite/config.mjs +33 -12
  95. package/dist/src/node/vite/config.mjs.map +1 -1
  96. package/dist/src/node/vite/watch.js +3 -0
  97. package/dist/src/node/vite/watch.js.map +1 -1
  98. package/dist/src/node/vite/watch.mjs +3 -0
  99. package/dist/src/node/vite/watch.mjs.map +1 -1
  100. package/dist/src/node/webpack/config.js +5 -0
  101. package/dist/src/node/webpack/config.js.map +1 -1
  102. package/dist/src/node/webpack/config.mjs +5 -0
  103. package/dist/src/node/webpack/config.mjs.map +1 -1
  104. package/package.json +25 -24
  105. package/dist/cli/commands/plugin/init/files/typescript.d.ts +0 -22
  106. package/dist/cli/commands/plugin/init/files/typescript.d.ts.map +0 -1
  107. package/dist/test/mocks/inquirer.d.ts +0 -10
  108. package/dist/test/mocks/inquirer.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import path from 'path';\nimport { 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 directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n isIgnoredContentType,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\nimport { normalizeExportDirFormatOpts } from './validate-dir-format';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n /** @default 'tar' */\n format?: 'tar' | 'dir';\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 normalizeExportDirFormatOpts(opts);\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 !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);\n },\n },\n ],\n entities: [\n {\n filter(entity) {\n return !isIgnoredContentType(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 if ((opts.format ?? 'tar') === 'dir') {\n const metadataPath = path.join(outFile, 'metadata.json');\n if (!(await fs.pathExists(metadataPath))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export directory was not created correctly \"${outFile}\"`\n );\n }\n } else if (!(await fs.pathExists(outFile))) {\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 or directory destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl, format = 'tar' } = 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 if (format === 'dir') {\n const { createLocalDirectoryDestinationProvider } = directoryDataTransfer.providers;\n const dirPath = path.isAbsolute(filepath) ? filepath : path.resolve(process.cwd(), filepath);\n return createLocalDirectoryDestinationProvider({\n directory: { path: dirPath },\n file: {\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n });\n }\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","normalizeExportDirFormatOpts","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","isIgnoredContentType","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","format","metadataPath","join","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","createLocalDirectoryDestinationProvider","directoryDataTransfer","dirPath","isAbsolute","resolve","process","cwd","directory","encryption","enabled","compression"],"mappings":"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"}
1
+ {"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import path from 'path';\nimport { 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 directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n buildTransferTransforms,\n normalizeTransferFilterOptions,\n validateContentTypeTransferOptionsForStrapi,\n logTransferFilterSummary,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\nimport { normalizeExportDirFormatOpts } from './validate-dir-format';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n /** @default 'tar' */\n format?: 'tar' | 'dir';\n encrypt?: boolean;\n verbose?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n filesAutoExcluded?: boolean;\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 normalizeExportDirFormatOpts(opts);\n normalizeTransferFilterOptions(opts);\n\n const strapi = await createStrapiInstance();\n validateContentTypeTransferOptionsForStrapi(opts, strapi);\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: buildTransferTransforms(opts),\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 logTransferFilterSummary({\n exclude: opts.exclude,\n only: opts.only,\n excludeContentTypes: opts.excludeContentTypes,\n onlyContentTypes: opts.onlyContentTypes,\n filesAutoExcluded: opts.filesAutoExcluded,\n });\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 if ((opts.format ?? 'tar') === 'dir') {\n const metadataPath = path.join(outFile, 'metadata.json');\n if (!(await fs.pathExists(metadataPath))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export directory was not created correctly \"${outFile}\"`\n );\n }\n } else if (!(await fs.pathExists(outFile))) {\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 or directory destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl, format = 'tar' } = 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 if (format === 'dir') {\n const { createLocalDirectoryDestinationProvider } = directoryDataTransfer.providers;\n const dirPath = path.isAbsolute(filepath) ? filepath : path.resolve(process.cwd(), filepath);\n return createLocalDirectoryDestinationProvider({\n directory: { path: dirPath },\n file: {\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n });\n }\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","normalizeExportDirFormatOpts","normalizeTransferFilterOptions","strapi","createStrapiInstance","validateContentTypeTransferOptionsForStrapi","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","buildTransferTransforms","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","logTransferFilterSummary","excludeContentTypes","onlyContentTypes","filesAutoExcluded","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","format","metadataPath","join","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","createLocalDirectoryDestinationProvider","directoryDataTransfer","dirPath","isAbsolute","resolve","process","cwd","directory","encryption","enabled","compression"],"mappings":"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"}
@@ -12,7 +12,7 @@ var validateDirFormat = require('./validate-dir-format.js');
12
12
  return commander.createCommand('export').description('Export data from Strapi to file').allowExcessArguments(false).addOption(new commander.Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(true)).addOption(new commander.Option('--no-compress', 'Disables gzip compression of output file').default(true)).addOption(new commander.Option('--verbose', 'Enable verbose logs')).addOption(new commander.Option('-k, --key <string>', 'Provide encryption key in command instead of using the prompt')).addOption(new commander.Option('-f, --file <file>', 'tar: base name without extensions; dir: output directory path (--format dir)')).addOption(new commander.Option('--format <format>', 'export as tar archive or unpacked directory').choices([
13
13
  'tar',
14
14
  'dir'
15
- ]).default('tar')).addOption(dataTransfer.excludeOption).addOption(dataTransfer.onlyOption).addOption(dataTransfer.throttleOption).hook('preAction', dataTransfer.validateExcludeOnly).hook('preAction', validateDirFormat.prepareExportDirFormatCli).hook('preAction', commander$1.promptEncryptionKey).action(action);
15
+ ]).default('tar')).addOption(dataTransfer.excludeOption).addOption(dataTransfer.onlyOption).addOption(dataTransfer.excludeContentTypesOption).addOption(dataTransfer.onlyContentTypesOption).addOption(dataTransfer.throttleOption).hook('preAction', dataTransfer.normalizeTransferFilterOptionsHook).hook('preAction', dataTransfer.validateExcludeOnly).hook('preAction', dataTransfer.validateContentTypeTransferOptions).hook('preAction', validateDirFormat.prepareExportDirFormatCli).hook('preAction', commander$1.promptEncryptionKey).action(action);
16
16
  };
17
17
 
18
18
  module.exports = command;
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/export/command.ts"],"sourcesContent":["import { createCommand, Option } from 'commander';\n\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { promptEncryptionKey } from '../../utils/commander';\nimport action from './action';\nimport { prepareExportDirFormatCli } from './validate-dir-format';\n\n/**\n * `$ strapi export`\n */\nconst command = () => {\n return createCommand('export')\n .description('Export data from Strapi to file')\n .allowExcessArguments(false)\n .addOption(\n new Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(\n true\n )\n )\n .addOption(\n new Option('--no-compress', 'Disables gzip compression of output file').default(true)\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'tar: base name without extensions; dir: output directory path (--format dir)'\n )\n )\n .addOption(\n new Option('--format <format>', 'export as tar archive or unpacked directory')\n .choices(['tar', 'dir'])\n .default('tar')\n )\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', prepareExportDirFormatCli)\n .hook('preAction', promptEncryptionKey)\n .action(action);\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","addOption","Option","default","choices","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","prepareExportDirFormatCli","promptEncryptionKey","action"],"mappings":";;;;;;;;AAYA;;AAEC,UACKA,OAAAA,GAAU,IAAA;IACd,OAAOC,uBAAAA,CAAc,QAAA,CAAA,CAClBC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,SAAS,CACR,IAAIC,gBAAAA,CAAO,gBAAgB,CAAC,oDAAoD,CAAC,CAAA,CAAEC,OAAO,CACxF,IAAA,CAAA,CAAA,CAGHF,SAAS,CACR,IAAIC,gBAAAA,CAAO,eAAA,EAAiB,0CAAA,CAAA,CAA4CC,OAAO,CAAC,IAAA,CAAA,CAAA,CAEjFF,SAAS,CAAC,IAAIC,gBAAAA,CAAO,WAAA,EAAa,wBAClCD,SAAS,CACR,IAAIC,gBAAAA,CACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,gBAAAA,CACF,mBAAA,EACA,8EAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,gBAAAA,CAAO,mBAAA,EAAqB,6CAAA,CAAA,CAC7BE,OAAO,CAAC;AAAC,QAAA,KAAA;AAAO,QAAA;KAAM,CAAA,CACtBD,OAAO,CAAC,KAAA,CAAA,CAAA,CAEZF,SAAS,CAACI,4BACVJ,SAAS,CAACK,uBAAAA,CAAAA,CACVL,SAAS,CAACM,2BAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,gCAAAA,CAAAA,CAClBD,IAAI,CAAC,WAAA,EAAaE,2CAAAA,CAAAA,CAClBF,IAAI,CAAC,WAAA,EAAaG,+BAAAA,CAAAA,CAClBC,MAAM,CAACA,MAAAA,CAAAA;AACZ;;;;"}
1
+ {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/export/command.ts"],"sourcesContent":["import { createCommand, Option } from 'commander';\n\nimport {\n excludeOption,\n onlyOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n normalizeTransferFilterOptionsHook,\n} from '../../utils/data-transfer';\nimport { promptEncryptionKey } from '../../utils/commander';\nimport action from './action';\nimport { prepareExportDirFormatCli } from './validate-dir-format';\n\n/**\n * `$ strapi export`\n */\nconst command = () => {\n return createCommand('export')\n .description('Export data from Strapi to file')\n .allowExcessArguments(false)\n .addOption(\n new Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(\n true\n )\n )\n .addOption(\n new Option('--no-compress', 'Disables gzip compression of output file').default(true)\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'tar: base name without extensions; dir: output directory path (--format dir)'\n )\n )\n .addOption(\n new Option('--format <format>', 'export as tar archive or unpacked directory')\n .choices(['tar', 'dir'])\n .default('tar')\n )\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(excludeContentTypesOption)\n .addOption(onlyContentTypesOption)\n .addOption(throttleOption)\n .hook('preAction', normalizeTransferFilterOptionsHook)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', validateContentTypeTransferOptions)\n .hook('preAction', prepareExportDirFormatCli)\n .hook('preAction', promptEncryptionKey)\n .action(action);\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","addOption","Option","default","choices","excludeOption","onlyOption","excludeContentTypesOption","onlyContentTypesOption","throttleOption","hook","normalizeTransferFilterOptionsHook","validateExcludeOnly","validateContentTypeTransferOptions","prepareExportDirFormatCli","promptEncryptionKey","action"],"mappings":";;;;;;;;AAgBA;;AAEC,UACKA,OAAAA,GAAU,IAAA;IACd,OAAOC,uBAAAA,CAAc,QAAA,CAAA,CAClBC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,SAAS,CACR,IAAIC,gBAAAA,CAAO,gBAAgB,CAAC,oDAAoD,CAAC,CAAA,CAAEC,OAAO,CACxF,IAAA,CAAA,CAAA,CAGHF,SAAS,CACR,IAAIC,gBAAAA,CAAO,eAAA,EAAiB,0CAAA,CAAA,CAA4CC,OAAO,CAAC,IAAA,CAAA,CAAA,CAEjFF,SAAS,CAAC,IAAIC,gBAAAA,CAAO,WAAA,EAAa,wBAClCD,SAAS,CACR,IAAIC,gBAAAA,CACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,gBAAAA,CACF,mBAAA,EACA,8EAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,gBAAAA,CAAO,mBAAA,EAAqB,6CAAA,CAAA,CAC7BE,OAAO,CAAC;AAAC,QAAA,KAAA;AAAO,QAAA;AAAM,KAAA,CAAA,CACtBD,OAAO,CAAC,KAAA,CAAA,CAAA,CAEZF,SAAS,CAACI,4BACVJ,SAAS,CAACK,uBAAAA,CAAAA,CACVL,SAAS,CAACM,sCAAAA,CAAAA,CACVN,SAAS,CAACO,mCAAAA,CAAAA,CACVP,SAAS,CAACQ,2BAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,iDAClBD,IAAI,CAAC,aAAaE,gCAAAA,CAAAA,CAClBF,IAAI,CAAC,WAAA,EAAaG,+CAAAA,CAAAA,CAClBH,IAAI,CAAC,aAAaI,2CAAAA,CAAAA,CAClBJ,IAAI,CAAC,WAAA,EAAaK,+BAAAA,CAAAA,CAClBC,MAAM,CAACA,MAAAA,CAAAA;AACZ;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { createCommand, Option } from 'commander';
2
- import { excludeOption, onlyOption, throttleOption, validateExcludeOnly } from '../../utils/data-transfer.mjs';
2
+ import { excludeOption, onlyOption, excludeContentTypesOption, onlyContentTypesOption, throttleOption, normalizeTransferFilterOptionsHook, validateExcludeOnly, validateContentTypeTransferOptions } from '../../utils/data-transfer.mjs';
3
3
  import { promptEncryptionKey } from '../../utils/commander.mjs';
4
4
  import action from './action.mjs';
5
5
  import { prepareExportDirFormatCli } from './validate-dir-format.mjs';
@@ -10,7 +10,7 @@ import { prepareExportDirFormatCli } from './validate-dir-format.mjs';
10
10
  return createCommand('export').description('Export data from Strapi to file').allowExcessArguments(false).addOption(new Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(true)).addOption(new Option('--no-compress', 'Disables gzip compression of output file').default(true)).addOption(new Option('--verbose', 'Enable verbose logs')).addOption(new Option('-k, --key <string>', 'Provide encryption key in command instead of using the prompt')).addOption(new Option('-f, --file <file>', 'tar: base name without extensions; dir: output directory path (--format dir)')).addOption(new Option('--format <format>', 'export as tar archive or unpacked directory').choices([
11
11
  'tar',
12
12
  'dir'
13
- ]).default('tar')).addOption(excludeOption).addOption(onlyOption).addOption(throttleOption).hook('preAction', validateExcludeOnly).hook('preAction', prepareExportDirFormatCli).hook('preAction', promptEncryptionKey).action(action);
13
+ ]).default('tar')).addOption(excludeOption).addOption(onlyOption).addOption(excludeContentTypesOption).addOption(onlyContentTypesOption).addOption(throttleOption).hook('preAction', normalizeTransferFilterOptionsHook).hook('preAction', validateExcludeOnly).hook('preAction', validateContentTypeTransferOptions).hook('preAction', prepareExportDirFormatCli).hook('preAction', promptEncryptionKey).action(action);
14
14
  };
15
15
 
16
16
  export { command as default };
@@ -1 +1 @@
1
- {"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/export/command.ts"],"sourcesContent":["import { createCommand, Option } from 'commander';\n\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { promptEncryptionKey } from '../../utils/commander';\nimport action from './action';\nimport { prepareExportDirFormatCli } from './validate-dir-format';\n\n/**\n * `$ strapi export`\n */\nconst command = () => {\n return createCommand('export')\n .description('Export data from Strapi to file')\n .allowExcessArguments(false)\n .addOption(\n new Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(\n true\n )\n )\n .addOption(\n new Option('--no-compress', 'Disables gzip compression of output file').default(true)\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'tar: base name without extensions; dir: output directory path (--format dir)'\n )\n )\n .addOption(\n new Option('--format <format>', 'export as tar archive or unpacked directory')\n .choices(['tar', 'dir'])\n .default('tar')\n )\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', prepareExportDirFormatCli)\n .hook('preAction', promptEncryptionKey)\n .action(action);\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","addOption","Option","default","choices","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","prepareExportDirFormatCli","promptEncryptionKey","action"],"mappings":";;;;;;AAYA;;AAEC,UACKA,OAAAA,GAAU,IAAA;IACd,OAAOC,aAAAA,CAAc,QAAA,CAAA,CAClBC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,SAAS,CACR,IAAIC,MAAAA,CAAO,gBAAgB,CAAC,oDAAoD,CAAC,CAAA,CAAEC,OAAO,CACxF,IAAA,CAAA,CAAA,CAGHF,SAAS,CACR,IAAIC,MAAAA,CAAO,eAAA,EAAiB,0CAAA,CAAA,CAA4CC,OAAO,CAAC,IAAA,CAAA,CAAA,CAEjFF,SAAS,CAAC,IAAIC,MAAAA,CAAO,WAAA,EAAa,wBAClCD,SAAS,CACR,IAAIC,MAAAA,CACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,MAAAA,CACF,mBAAA,EACA,8EAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,MAAAA,CAAO,mBAAA,EAAqB,6CAAA,CAAA,CAC7BE,OAAO,CAAC;AAAC,QAAA,KAAA;AAAO,QAAA;KAAM,CAAA,CACtBD,OAAO,CAAC,KAAA,CAAA,CAAA,CAEZF,SAAS,CAACI,eACVJ,SAAS,CAACK,UAAAA,CAAAA,CACVL,SAAS,CAACM,cAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,mBAAAA,CAAAA,CAClBD,IAAI,CAAC,WAAA,EAAaE,yBAAAA,CAAAA,CAClBF,IAAI,CAAC,WAAA,EAAaG,mBAAAA,CAAAA,CAClBC,MAAM,CAACA,MAAAA,CAAAA;AACZ;;;;"}
1
+ {"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/export/command.ts"],"sourcesContent":["import { createCommand, Option } from 'commander';\n\nimport {\n excludeOption,\n onlyOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n normalizeTransferFilterOptionsHook,\n} from '../../utils/data-transfer';\nimport { promptEncryptionKey } from '../../utils/commander';\nimport action from './action';\nimport { prepareExportDirFormatCli } from './validate-dir-format';\n\n/**\n * `$ strapi export`\n */\nconst command = () => {\n return createCommand('export')\n .description('Export data from Strapi to file')\n .allowExcessArguments(false)\n .addOption(\n new Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(\n true\n )\n )\n .addOption(\n new Option('--no-compress', 'Disables gzip compression of output file').default(true)\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'tar: base name without extensions; dir: output directory path (--format dir)'\n )\n )\n .addOption(\n new Option('--format <format>', 'export as tar archive or unpacked directory')\n .choices(['tar', 'dir'])\n .default('tar')\n )\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(excludeContentTypesOption)\n .addOption(onlyContentTypesOption)\n .addOption(throttleOption)\n .hook('preAction', normalizeTransferFilterOptionsHook)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', validateContentTypeTransferOptions)\n .hook('preAction', prepareExportDirFormatCli)\n .hook('preAction', promptEncryptionKey)\n .action(action);\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","addOption","Option","default","choices","excludeOption","onlyOption","excludeContentTypesOption","onlyContentTypesOption","throttleOption","hook","normalizeTransferFilterOptionsHook","validateExcludeOnly","validateContentTypeTransferOptions","prepareExportDirFormatCli","promptEncryptionKey","action"],"mappings":";;;;;;AAgBA;;AAEC,UACKA,OAAAA,GAAU,IAAA;IACd,OAAOC,aAAAA,CAAc,QAAA,CAAA,CAClBC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,SAAS,CACR,IAAIC,MAAAA,CAAO,gBAAgB,CAAC,oDAAoD,CAAC,CAAA,CAAEC,OAAO,CACxF,IAAA,CAAA,CAAA,CAGHF,SAAS,CACR,IAAIC,MAAAA,CAAO,eAAA,EAAiB,0CAAA,CAAA,CAA4CC,OAAO,CAAC,IAAA,CAAA,CAAA,CAEjFF,SAAS,CAAC,IAAIC,MAAAA,CAAO,WAAA,EAAa,wBAClCD,SAAS,CACR,IAAIC,MAAAA,CACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,MAAAA,CACF,mBAAA,EACA,8EAAA,CAAA,CAAA,CAGHD,SAAS,CACR,IAAIC,MAAAA,CAAO,mBAAA,EAAqB,6CAAA,CAAA,CAC7BE,OAAO,CAAC;AAAC,QAAA,KAAA;AAAO,QAAA;AAAM,KAAA,CAAA,CACtBD,OAAO,CAAC,KAAA,CAAA,CAAA,CAEZF,SAAS,CAACI,eACVJ,SAAS,CAACK,UAAAA,CAAAA,CACVL,SAAS,CAACM,yBAAAA,CAAAA,CACVN,SAAS,CAACO,sBAAAA,CAAAA,CACVP,SAAS,CAACQ,cAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,oCAClBD,IAAI,CAAC,aAAaE,mBAAAA,CAAAA,CAClBF,IAAI,CAAC,WAAA,EAAaG,kCAAAA,CAAAA,CAClBH,IAAI,CAAC,aAAaI,yBAAAA,CAAAA,CAClBJ,IAAI,CAAC,WAAA,EAAaK,mBAAAA,CAAAA,CAClBC,MAAM,CAACA,MAAAA,CAAAA;AACZ;;;;"}
@@ -24,6 +24,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
24
24
  if (!fp.isObject(opts)) {
25
25
  helpers.exitWith(1, 'Could not parse arguments');
26
26
  }
27
+ dataTransfer$1.normalizeTransferFilterOptions(opts);
27
28
  const backupPath = opts.file ?? '';
28
29
  const source = (await fse__default.default.stat(backupPath)).isDirectory() ? dataTransfer.directory.providers.createLocalDirectorySourceProvider({
29
30
  directory: {
@@ -33,6 +34,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
33
34
  /**
34
35
  * To local Strapi instance
35
36
  */ const strapiInstance = await dataTransfer$1.createStrapiInstance();
37
+ dataTransfer$1.validateContentTypeTransferOptionsForStrapi(opts, strapiInstance);
36
38
  /**
37
39
  * Configure and run the transfer engine
38
40
  */ const engineOptions = {
@@ -41,20 +43,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
41
43
  exclude: opts.exclude,
42
44
  only: opts.only,
43
45
  throttle: opts.throttle,
44
- transforms: {
45
- links: [
46
- {
47
- filter (link) {
48
- return !dataTransfer$1.isIgnoredContentType(link.left.type) && !dataTransfer$1.isIgnoredContentType(link.right.type);
49
- }
50
- }
51
- ],
52
- entities: [
53
- {
54
- filter: (entity)=>!dataTransfer$1.isIgnoredContentType(entity.type)
55
- }
56
- ]
57
- }
46
+ transforms: dataTransfer$1.buildTransferTransforms(opts)
58
47
  };
59
48
  const destinationOptions = {
60
49
  async getStrapi () {
@@ -62,7 +51,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
62
51
  },
63
52
  autoDestroy: false,
64
53
  strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,
65
- restore: dataTransfer$1.parseRestoreFromOptions(engineOptions, strapiInstance)
54
+ restore: dataTransfer$1.parseRestoreFromOptions(opts, strapiInstance)
66
55
  };
67
56
  const destination = createLocalStrapiDestinationProvider(destinationOptions);
68
57
  destination.onWarning = (message)=>console.warn(`\n${chalk__default.default.yellow('warn')}: ${message}`);
@@ -85,6 +74,13 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
85
74
  });
86
75
  progress.on('transfer::start', async ()=>{
87
76
  console.log('Starting import...');
77
+ dataTransfer$1.logTransferFilterSummary({
78
+ exclude: opts.exclude,
79
+ only: opts.only,
80
+ excludeContentTypes: opts.excludeContentTypes,
81
+ onlyContentTypes: opts.onlyContentTypes,
82
+ filesAutoExcluded: opts.filesAutoExcluded
83
+ });
88
84
  await strapiInstance.telemetry.send('didDEITSProcessStart', dataTransfer$1.getTransferTelemetryPayload(engine));
89
85
  });
90
86
  let results;
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","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 fs from 'fs-extra';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n isIgnoredContentType,\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 Strapi backup file or unpacked export directory 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 const backupPath = opts.file ?? '';\n const source = (await fs.stat(backupPath)).isDirectory()\n ? directoryDataTransfer.providers.createLocalDirectorySourceProvider({\n directory: { path: backupPath },\n })\n : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\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 !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);\n },\n },\n ],\n entities: [\n {\n filter: (entity) => !isIgnoredContentType(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, strapiInstance),\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","backupPath","file","source","fs","stat","isDirectory","directoryDataTransfer","createLocalDirectorySourceProvider","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","isIgnoredContentType","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","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}
1
+ {"version":3,"file":"action.js","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 fs from 'fs-extra';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n getDiffHandler,\n parseRestoreFromOptions,\n buildTransferTransforms,\n normalizeTransferFilterOptions,\n validateContentTypeTransferOptionsForStrapi,\n logTransferFilterSummary,\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 excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n filesAutoExcluded?: boolean;\n throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a Strapi backup file or unpacked export directory 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 normalizeTransferFilterOptions(opts);\n\n const backupPath = opts.file ?? '';\n const source = (await fs.stat(backupPath)).isDirectory()\n ? directoryDataTransfer.providers.createLocalDirectorySourceProvider({\n directory: { path: backupPath },\n })\n : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\n\n /**\n * To local Strapi instance\n */\n const strapiInstance = await createStrapiInstance();\n validateContentTypeTransferOptionsForStrapi(opts, strapiInstance);\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: buildTransferTransforms(opts),\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(opts, strapiInstance),\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 logTransferFilterSummary({\n exclude: opts.exclude,\n only: opts.only,\n excludeContentTypes: opts.excludeContentTypes,\n onlyContentTypes: opts.onlyContentTypes,\n filesAutoExcluded: opts.filesAutoExcluded,\n });\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","normalizeTransferFilterOptions","backupPath","file","source","fs","stat","isDirectory","directoryDataTransfer","createLocalDirectorySourceProvider","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","validateContentTypeTransferOptionsForStrapi","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","buildTransferTransforms","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","logTransferFilterSummary","excludeContentTypes","onlyContentTypes","filesAutoExcluded","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","e","error","destroy","exitMessageText","options","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { isObject } from 'lodash/fp';
2
2
  import chalk from 'chalk';
3
3
  import fse from 'fs-extra';
4
4
  import { file, strapi as strapi$1, engine, directory } from '@strapi/data-transfer';
5
- import { createStrapiInstance, parseRestoreFromOptions, formatDiagnostic, getDiffHandler, getTransferTelemetryPayload, setSignalHandler, abortTransfer, buildTransferTable, exitMessageText, isIgnoredContentType, loadersFactory } from '../../utils/data-transfer.mjs';
5
+ import { normalizeTransferFilterOptions, createStrapiInstance, validateContentTypeTransferOptionsForStrapi, parseRestoreFromOptions, formatDiagnostic, getDiffHandler, logTransferFilterSummary, getTransferTelemetryPayload, setSignalHandler, abortTransfer, buildTransferTable, exitMessageText, buildTransferTransforms, loadersFactory } from '../../utils/data-transfer.mjs';
6
6
  import { exitWith } from '../../utils/helpers.mjs';
7
7
 
8
8
  const { providers: { createLocalFileSourceProvider } } = file;
@@ -17,6 +17,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
17
17
  if (!isObject(opts)) {
18
18
  exitWith(1, 'Could not parse arguments');
19
19
  }
20
+ normalizeTransferFilterOptions(opts);
20
21
  const backupPath = opts.file ?? '';
21
22
  const source = (await fse.stat(backupPath)).isDirectory() ? directory.providers.createLocalDirectorySourceProvider({
22
23
  directory: {
@@ -26,6 +27,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
26
27
  /**
27
28
  * To local Strapi instance
28
29
  */ const strapiInstance = await createStrapiInstance();
30
+ validateContentTypeTransferOptionsForStrapi(opts, strapiInstance);
29
31
  /**
30
32
  * Configure and run the transfer engine
31
33
  */ const engineOptions = {
@@ -34,20 +36,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
34
36
  exclude: opts.exclude,
35
37
  only: opts.only,
36
38
  throttle: opts.throttle,
37
- transforms: {
38
- links: [
39
- {
40
- filter (link) {
41
- return !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);
42
- }
43
- }
44
- ],
45
- entities: [
46
- {
47
- filter: (entity)=>!isIgnoredContentType(entity.type)
48
- }
49
- ]
50
- }
39
+ transforms: buildTransferTransforms(opts)
51
40
  };
52
41
  const destinationOptions = {
53
42
  async getStrapi () {
@@ -55,7 +44,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
55
44
  },
56
45
  autoDestroy: false,
57
46
  strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,
58
- restore: parseRestoreFromOptions(engineOptions, strapiInstance)
47
+ restore: parseRestoreFromOptions(opts, strapiInstance)
59
48
  };
60
49
  const destination = createLocalStrapiDestinationProvider(destinationOptions);
61
50
  destination.onWarning = (message)=>console.warn(`\n${chalk.yellow('warn')}: ${message}`);
@@ -78,6 +67,13 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
78
67
  });
79
68
  progress.on('transfer::start', async ()=>{
80
69
  console.log('Starting import...');
70
+ logTransferFilterSummary({
71
+ exclude: opts.exclude,
72
+ only: opts.only,
73
+ excludeContentTypes: opts.excludeContentTypes,
74
+ onlyContentTypes: opts.onlyContentTypes,
75
+ filesAutoExcluded: opts.filesAutoExcluded
76
+ });
81
77
  await strapiInstance.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));
82
78
  });
83
79
  let results;
@@ -1 +1 @@
1
- {"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 fs from 'fs-extra';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n isIgnoredContentType,\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 Strapi backup file or unpacked export directory 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 const backupPath = opts.file ?? '';\n const source = (await fs.stat(backupPath)).isDirectory()\n ? directoryDataTransfer.providers.createLocalDirectorySourceProvider({\n directory: { path: backupPath },\n })\n : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\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 !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);\n },\n },\n ],\n entities: [\n {\n filter: (entity) => !isIgnoredContentType(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, strapiInstance),\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","backupPath","file","source","fs","stat","isDirectory","directoryDataTransfer","createLocalDirectorySourceProvider","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","isIgnoredContentType","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","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}
1
+ {"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 fs from 'fs-extra';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n getDiffHandler,\n parseRestoreFromOptions,\n buildTransferTransforms,\n normalizeTransferFilterOptions,\n validateContentTypeTransferOptionsForStrapi,\n logTransferFilterSummary,\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 excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n filesAutoExcluded?: boolean;\n throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a Strapi backup file or unpacked export directory 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 normalizeTransferFilterOptions(opts);\n\n const backupPath = opts.file ?? '';\n const source = (await fs.stat(backupPath)).isDirectory()\n ? directoryDataTransfer.providers.createLocalDirectorySourceProvider({\n directory: { path: backupPath },\n })\n : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\n\n /**\n * To local Strapi instance\n */\n const strapiInstance = await createStrapiInstance();\n validateContentTypeTransferOptionsForStrapi(opts, strapiInstance);\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: buildTransferTransforms(opts),\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(opts, strapiInstance),\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 logTransferFilterSummary({\n exclude: opts.exclude,\n only: opts.only,\n excludeContentTypes: opts.excludeContentTypes,\n onlyContentTypes: opts.onlyContentTypes,\n filesAutoExcluded: opts.filesAutoExcluded,\n });\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","normalizeTransferFilterOptions","backupPath","file","source","fs","stat","isDirectory","directoryDataTransfer","createLocalDirectorySourceProvider","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","validateContentTypeTransferOptionsForStrapi","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","buildTransferTransforms","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","logTransferFilterSummary","excludeContentTypes","onlyContentTypes","filesAutoExcluded","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","e","error","destroy","exitMessageText","options","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}
@@ -16,7 +16,7 @@ var path__default = /*#__PURE__*/_interopDefault(path);
16
16
  /**
17
17
  * `$ strapi import`
18
18
  */ const command = ()=>{
19
- return commander.createCommand('import').description('Import data from file to Strapi').allowExcessArguments(false).requiredOption('-f, --file <file>', 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory').addOption(new commander.Option('-k, --key <string>', 'Provide encryption key in command instead of using the prompt')).addOption(new commander.Option('--verbose', 'Enable verbose logs')).addOption(commander$1.forceOption).addOption(dataTransfer.excludeOption).addOption(dataTransfer.onlyOption).addOption(dataTransfer.throttleOption).hook('preAction', dataTransfer.validateExcludeOnly).hook('preAction', async (thisCommand)=>{
19
+ return commander.createCommand('import').description('Import data from file to Strapi').allowExcessArguments(false).requiredOption('-f, --file <file>', 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory').addOption(new commander.Option('-k, --key <string>', 'Provide encryption key in command instead of using the prompt')).addOption(new commander.Option('--verbose', 'Enable verbose logs')).addOption(commander$1.forceOption).addOption(dataTransfer.excludeOption).addOption(dataTransfer.onlyOption).addOption(dataTransfer.excludeContentTypesOption).addOption(dataTransfer.onlyContentTypesOption).addOption(dataTransfer.throttleOption).hook('preAction', dataTransfer.normalizeTransferFilterOptionsHook).hook('preAction', dataTransfer.validateExcludeOnly).hook('preAction', dataTransfer.validateContentTypeTransferOptions).hook('preAction', async (thisCommand)=>{
20
20
  const opts = thisCommand.opts();
21
21
  const ext = path__default.default.extname(String(opts.file));
22
22
  // check extension to guess if we should prompt for key
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import { statSync } from 'fs';\nimport path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename (archive only)\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n const filePath = String(opts.file);\n\n let isDirectory = false;\n try {\n isDirectory = statSync(filePath).isDirectory();\n } catch {\n // missing path or unreadable — let the transfer fail later with a clear error\n }\n\n if (isDirectory) {\n thisCommand.opts().decrypt = false;\n thisCommand.opts().decompress = false;\n return;\n }\n\n const { extname, parse } = path;\n\n let file = filePath;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. Use a path ending in .tar[.gz][.enc], or an existing directory that contains an unpacked export (e.g. metadata.json).`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","filePath","isDirectory","statSync","decrypt","decompress","parse","getCommanderConfirmMessage","failMessage","action"],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import { statSync } from 'fs';\nimport path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n excludeOption,\n onlyOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n normalizeTransferFilterOptionsHook,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(excludeContentTypesOption)\n .addOption(onlyContentTypesOption)\n .addOption(throttleOption)\n .hook('preAction', normalizeTransferFilterOptionsHook)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', validateContentTypeTransferOptions)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename (archive only)\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n const filePath = String(opts.file);\n\n let isDirectory = false;\n try {\n isDirectory = statSync(filePath).isDirectory();\n } catch {\n // missing path or unreadable — let the transfer fail later with a clear error\n }\n\n if (isDirectory) {\n thisCommand.opts().decrypt = false;\n thisCommand.opts().decompress = false;\n return;\n }\n\n const { extname, parse } = path;\n\n let file = filePath;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. Use a path ending in .tar[.gz][.enc], or an existing directory that contains an unpacked export (e.g. metadata.json).`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","excludeContentTypesOption","onlyContentTypesOption","throttleOption","hook","normalizeTransferFilterOptionsHook","validateExcludeOnly","validateContentTypeTransferOptions","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","filePath","isDirectory","statSync","decrypt","decompress","parse","getCommanderConfirmMessage","failMessage","action"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { statSync } from 'fs';
2
2
  import path from 'path';
3
3
  import { createCommand, Option } from 'commander';
4
- import { excludeOption, onlyOption, throttleOption, validateExcludeOnly } from '../../utils/data-transfer.mjs';
4
+ import { excludeOption, onlyOption, excludeContentTypesOption, onlyContentTypesOption, throttleOption, normalizeTransferFilterOptionsHook, validateExcludeOnly, validateContentTypeTransferOptions } from '../../utils/data-transfer.mjs';
5
5
  import { forceOption, getCommanderConfirmMessage } from '../../utils/commander.mjs';
6
6
  import { exitWith } from '../../utils/helpers.mjs';
7
7
  import { getInquirer } from '../../utils/get-inquirer.mjs';
@@ -10,7 +10,7 @@ import action from './action.mjs';
10
10
  /**
11
11
  * `$ strapi import`
12
12
  */ const command = ()=>{
13
- return createCommand('import').description('Import data from file to Strapi').allowExcessArguments(false).requiredOption('-f, --file <file>', 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory').addOption(new Option('-k, --key <string>', 'Provide encryption key in command instead of using the prompt')).addOption(new Option('--verbose', 'Enable verbose logs')).addOption(forceOption).addOption(excludeOption).addOption(onlyOption).addOption(throttleOption).hook('preAction', validateExcludeOnly).hook('preAction', async (thisCommand)=>{
13
+ return createCommand('import').description('Import data from file to Strapi').allowExcessArguments(false).requiredOption('-f, --file <file>', 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory').addOption(new Option('-k, --key <string>', 'Provide encryption key in command instead of using the prompt')).addOption(new Option('--verbose', 'Enable verbose logs')).addOption(forceOption).addOption(excludeOption).addOption(onlyOption).addOption(excludeContentTypesOption).addOption(onlyContentTypesOption).addOption(throttleOption).hook('preAction', normalizeTransferFilterOptionsHook).hook('preAction', validateExcludeOnly).hook('preAction', validateContentTypeTransferOptions).hook('preAction', async (thisCommand)=>{
14
14
  const opts = thisCommand.opts();
15
15
  const ext = path.extname(String(opts.file));
16
16
  // check extension to guess if we should prompt for key
@@ -1 +1 @@
1
- {"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import { statSync } from 'fs';\nimport path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename (archive only)\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n const filePath = String(opts.file);\n\n let isDirectory = false;\n try {\n isDirectory = statSync(filePath).isDirectory();\n } catch {\n // missing path or unreadable — let the transfer fail later with a clear error\n }\n\n if (isDirectory) {\n thisCommand.opts().decrypt = false;\n thisCommand.opts().decompress = false;\n return;\n }\n\n const { extname, parse } = path;\n\n let file = filePath;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. Use a path ending in .tar[.gz][.enc], or an existing directory that contains an unpacked export (e.g. metadata.json).`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","filePath","isDirectory","statSync","decrypt","decompress","parse","getCommanderConfirmMessage","failMessage","action"],"mappings":"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"}
1
+ {"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import { statSync } from 'fs';\nimport path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n excludeOption,\n onlyOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n normalizeTransferFilterOptionsHook,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path to a Strapi export (.tar[.gz][.enc]) or to an unpacked export directory'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(excludeContentTypesOption)\n .addOption(onlyContentTypesOption)\n .addOption(throttleOption)\n .hook('preAction', normalizeTransferFilterOptionsHook)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', validateContentTypeTransferOptions)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename (archive only)\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n const filePath = String(opts.file);\n\n let isDirectory = false;\n try {\n isDirectory = statSync(filePath).isDirectory();\n } catch {\n // missing path or unreadable — let the transfer fail later with a clear error\n }\n\n if (isDirectory) {\n thisCommand.opts().decrypt = false;\n thisCommand.opts().decompress = false;\n return;\n }\n\n const { extname, parse } = path;\n\n let file = filePath;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. Use a path ending in .tar[.gz][.enc], or an existing directory that contains an unpacked export (e.g. metadata.json).`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","excludeContentTypesOption","onlyContentTypesOption","throttleOption","hook","normalizeTransferFilterOptionsHook","validateExcludeOnly","validateContentTypeTransferOptions","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","filePath","isDirectory","statSync","decrypt","decompress","parse","getCommanderConfirmMessage","failMessage","action"],"mappings":"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"}
@@ -37,7 +37,9 @@ const resolveRemotePullAssetIdleTimeoutMs = (value)=>{
37
37
  if (!(opts.from || opts.to) || opts.from && opts.to) {
38
38
  helpers.exitWith(1, 'Exactly one source (from) or destination (to) option must be provided');
39
39
  }
40
+ dataTransfer$1.normalizeTransferFilterOptions(opts);
40
41
  const strapi = await dataTransfer$1.createStrapiInstance();
42
+ dataTransfer$1.validateContentTypeTransferOptionsForStrapi(opts, strapi);
41
43
  const checksumsEnabled = opts.checksums !== false;
42
44
  let source;
43
45
  let destination;
@@ -105,22 +107,7 @@ const resolveRemotePullAssetIdleTimeoutMs = (value)=>{
105
107
  exclude: opts.exclude,
106
108
  only: opts.only,
107
109
  throttle: opts.throttle,
108
- transforms: {
109
- links: [
110
- {
111
- filter (link) {
112
- return !dataTransfer$1.isIgnoredContentType(link.left.type) && !dataTransfer$1.isIgnoredContentType(link.right.type);
113
- }
114
- }
115
- ],
116
- entities: [
117
- {
118
- filter (entity) {
119
- return !dataTransfer$1.isIgnoredContentType(entity.type);
120
- }
121
- }
122
- ]
123
- }
110
+ transforms: dataTransfer$1.buildTransferTransforms(opts)
124
111
  });
125
112
  engine.diagnostics.onDiagnostic(dataTransfer$1.formatDiagnostic('transfer', opts.verbose));
126
113
  const progress = engine.progress.stream;
@@ -208,6 +195,13 @@ const resolveRemotePullAssetIdleTimeoutMs = (value)=>{
208
195
  progress.on('transfer::start', async ()=>{
209
196
  transferPrepStartedAt = Date.now();
210
197
  prepStepDetail = null;
198
+ dataTransfer$1.logTransferFilterSummary({
199
+ exclude: opts.exclude,
200
+ only: opts.only,
201
+ excludeContentTypes: opts.excludeContentTypes,
202
+ onlyContentTypes: opts.onlyContentTypes,
203
+ filesAutoExcluded: opts.filesAutoExcluded
204
+ });
211
205
  startingSpinner = ora__default.default(formatPrepSpinnerLine()).start();
212
206
  startingElapsedInterval = setInterval(()=>{
213
207
  if (startingSpinner && transferPrepStartedAt != null) {