@strapi/strapi 5.52.1 → 5.52.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/data-transfer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/data-transfer.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,54 @@ import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules';
8
8
  export declare const ADMIN_VITE_ALIAS_MODULES: readonly ["react", "react-dom", "react-router-dom", "styled-components", "react-redux", "@reduxjs/toolkit", "@strapi/design-system", "@radix-ui/react-tooltip", "lodash", "invariant", "prismjs", "react-dnd", "react-dnd-html5-backend"];
9
9
  export type AdminViteAliasModule = (typeof ADMIN_VITE_ALIAS_MODULES)[number];
10
10
  /**
11
- * Modules passed to Vite resolve.dedupe (and aliased): the admin alias modules plus the
12
- * CodeMirror singletons, so every copy collapses onto a single runtime instance.
11
+ * Modules deduplicated but deliberately NOT aliased.
12
+ *
13
+ * A local plugin (`config/plugins.ts` → `{ resolve: './src/plugins/x' }`) is imported into the
14
+ * generated `.strapi/client/app.js` by a *relative* path, so Rollup treats its built
15
+ * `dist/admin/index.mjs` as project source rather than as a dependency. The bare specifiers that
16
+ * `@strapi/sdk-plugin` externalises into that file are therefore resolved from the plugin's own
17
+ * directory first — and a local plugin installed with npm/pnpm has its own `node_modules`, because
18
+ * the SDK template lists `@strapi/strapi` in the generated `devDependencies`.
19
+ *
20
+ * Without dedupe, every local plugin pulls a second copy of the whole admin application into the
21
+ * build graph (`@strapi/admin`, `@strapi/content-manager`, `@strapi/upload`, … and their trees).
22
+ * Measured on a stock app: one empty generated plugin added 4,940 modules (+99%) and ~840MB of
23
+ * peak build heap, which is what makes `strapi build` OOM once a project has a handful of local
24
+ * plugins (#22946).
25
+ *
26
+ * `@strapi/strapi` is the head of that chain — `@strapi/admin` and the core plugins are reached
27
+ * *through* it — so deduping it alone collapses ~98% of the duplication.
28
+ *
29
+ * Only packages the app itself declares belong here. `resolve.dedupe` forces resolution from the
30
+ * app root, so a package that lives solely inside `@strapi/admin`'s closure has no top-level
31
+ * `node_modules` entry under pnpm's strict isolation, and deduping it would turn a working (if
32
+ * duplicated) plugin import into an unresolved one. Every Strapi app depends on `@strapi/strapi`
33
+ * directly, so it is always resolvable from the root. `@strapi/icons` and `react-intl` — which the
34
+ * SDK plugin template imports directly — are `@strapi/admin` dependencies, so they are deliberately
35
+ * left out; their trees are the known residual of this fix.
36
+ *
37
+ * Entries here MUST NOT be added to {@link ADMIN_VITE_ALIAS_MODULES}: `resolve.alias`
38
+ * prefix-substitutes to a filesystem path and so bypasses the package's `exports` map.
39
+ * - `@strapi/strapi` exports `./admin` (real target `dist/admin/index.mjs`) — the exact subpath
40
+ * every plugin imports. Aliasing rewrites it to a non-existent `<pkgdir>/admin` and the build
41
+ * dies with "[vite:load-fallback] Could not load …/@strapi/strapi/admin".
42
+ * - `@strapi/icons` exports `./symbols` and would fail the same way, so aliasing the package
43
+ * directory is no escape hatch for the modules excluded above either.
44
+ * - `@strapi/admin` publishes no `.` export at all, so `getModulePath()` would throw
45
+ * ERR_PACKAGE_PATH_NOT_EXPORTED at config time. It needs no entry here: deduping
46
+ * `@strapi/strapi` already collapses it.
47
+ * The contract tests in `__tests__/admin-vite-aliases.test.ts` enforce this separation.
48
+ *
49
+ * @internal
50
+ */
51
+ export declare const ADMIN_VITE_DEDUPE_ONLY_MODULES: readonly ["@strapi/strapi"];
52
+ export type AdminViteDedupeOnlyModule = (typeof ADMIN_VITE_DEDUPE_ONLY_MODULES)[number];
53
+ /**
54
+ * Modules passed to Vite resolve.dedupe: the admin alias modules plus the CodeMirror singletons
55
+ * (both of which are also aliased), plus the dedupe-only modules above, so every copy collapses
56
+ * onto a single runtime instance.
13
57
  */
14
- export declare const ADMIN_VITE_DEDUPE_MODULES: readonly ["react", "react-dom", "react-router-dom", "styled-components", "react-redux", "@reduxjs/toolkit", "@strapi/design-system", "@radix-ui/react-tooltip", "lodash", "invariant", "prismjs", "react-dnd", "react-dnd-html5-backend", "@codemirror/state", "@codemirror/view", "@codemirror/language", "@codemirror/lang-json", "@codemirror/commands", "@codemirror/lint", "@uiw/react-codemirror"];
58
+ export declare const ADMIN_VITE_DEDUPE_MODULES: readonly ["react", "react-dom", "react-router-dom", "styled-components", "react-redux", "@reduxjs/toolkit", "@strapi/design-system", "@radix-ui/react-tooltip", "lodash", "invariant", "prismjs", "react-dnd", "react-dnd-html5-backend", "@codemirror/state", "@codemirror/view", "@codemirror/language", "@codemirror/lang-json", "@codemirror/commands", "@codemirror/lint", "@uiw/react-codemirror", "@strapi/strapi"];
15
59
  export { ADMIN_VITE_SINGLETON_MODULES };
16
60
  /**
17
61
  * Alias modules with exact versions declared in @strapi/admin dependencies (not peers).
@@ -1 +1 @@
1
- {"version":3,"file":"admin-vite-alias-modules.d.ts","sourceRoot":"","sources":["../../../src/node/core/admin-vite-alias-modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,2OAsB3B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,0YAG5B,CAAC;AAEX,OAAO,EAAE,4BAA4B,EAAE,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,0BAA0B,sIAQa,CAAC"}
1
+ {"version":3,"file":"admin-vite-alias-modules.d.ts","sourceRoot":"","sources":["../../../src/node/core/admin-vite-alias-modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,2OAsB3B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,8BAA8B,6BAA8B,CAAC;AAE1E,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAExF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,4ZAI5B,CAAC;AAEX,OAAO,EAAE,4BAA4B,EAAE,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,0BAA0B,sIAQa,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "5.52.1";
3
+ var version = "5.52.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,4 @@
1
- var version = "5.52.1";
1
+ var version = "5.52.2";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -501,6 +501,11 @@ const normalizeTransferFilterOptions = (opts)=>{
501
501
  const normalizeTransferFilterOptionsHook = (command)=>{
502
502
  normalizeTransferFilterOptions(command.opts());
503
503
  };
504
+ const TRANSFER_STAGE_PRESETS = [
505
+ 'content',
506
+ 'files',
507
+ 'config'
508
+ ];
504
509
  const logTransferFilterSummary = (opts)=>{
505
510
  const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;
506
511
  if (!exclude?.length && !only?.length && !excludeContentTypes?.length && !onlyContentTypes?.length) {
@@ -516,6 +521,13 @@ const logTransferFilterSummary = (opts)=>{
516
521
  if (parts.length) {
517
522
  console.log(chalk__default.default.dim(`Transfer filters: ${parts.join('; ')}.`));
518
523
  }
524
+ // When `--only` omits stages, say so — destination data for those stages is preserved.
525
+ if (only?.length) {
526
+ const omittedStages = TRANSFER_STAGE_PRESETS.filter((stage)=>!only.includes(stage));
527
+ if (omittedStages.length) {
528
+ console.log(chalk__default.default.dim(`Stages not transferred (destination data preserved): ${omittedStages.join(', ')}.`));
529
+ }
530
+ }
519
531
  const contentTypeParts = [];
520
532
  if (excludeContentTypes?.length) {
521
533
  contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.js","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n readableBytes,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, parseList, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\n/** Media library content types — common target for `--exclude-content-types` (see issue #25008). */\nconst UPLOAD_CONTENT_TYPE_UIDS = ['plugin::upload.file', 'plugin::upload.folder'] as const;\n\nconst isIgnoredContentType = (type: string) =>\n IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.Strapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n try {\n const appContext = await compileStrapi();\n const app = createStrapi({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst MEDIA_LIBRARY_PRESET = 'media-library';\n\nconst TRANSFER_FILTER_PRESET_DESCRIPTIONS: Record<\n engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET,\n string\n> = {\n content: 'entities and links (incl. media library DB records)',\n files: 'upload binaries in public/uploads (not media library DB records)',\n config: 'core store and webhooks',\n [MEDIA_LIBRARY_PRESET]:\n 'upload binaries and media library DB records (files + plugin::upload.file, plugin::upload.folder)',\n};\n\nconst transferExcludePresetChoices = [...transferDataTypes, MEDIA_LIBRARY_PRESET];\n\nconst formatTransferPresetHelp = (types: string[]) =>\n types\n .map(\n (type) =>\n `${type} (${TRANSFER_FILTER_PRESET_DESCRIPTIONS[type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS]})`\n )\n .join('; ');\n\nconst transferExcludePresetsHelp = formatTransferPresetHelp(transferExcludePresetChoices);\nconst transferOnlyPresetsHelp = formatTransferPresetHelp(transferDataTypes);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data: ${transferExcludePresetsHelp}`\n).argParser(getParseListWithChoices(transferExcludePresetChoices, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types (plus schemas): ${transferOnlyPresetsHelp}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst excludeContentTypesOption = new Option(\n '--exclude-content-types <comma-separated UIDs>',\n `Exclude content types from entities and links (e.g. ${UPLOAD_CONTENT_TYPE_UIDS.join(',')} to omit the media library; or use --exclude media-library to skip binaries and upload records — see issue #25008)`\n).argParser(parseList);\n\nconst onlyContentTypesOption = new Option(\n '--only-content-types <comma-separated UIDs>',\n 'Transfer only these content types in entities and links (e.g. api::article.article)'\n).argParser(parseList);\n\ntype ContentTypeTransferOptions = {\n excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n};\n\ntype TransferExcludePreset = engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET;\n\ntype TransferCliFilterOptions = Partial<\n Omit<engineDataTransfer.ITransferEngineOptions, 'exclude' | 'only'>\n> & {\n exclude?: TransferExcludePreset[];\n only?: engineDataTransfer.TransferFilterPreset[];\n} & ContentTypeTransferOptions & {\n /** Set when the files stage is auto-skipped because upload types are out of scope. */\n filesAutoExcluded?: boolean;\n };\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst validateContentTypeTransferOptions = (command: Command) => {\n const { excludeContentTypes, onlyContentTypes } = command.opts();\n\n if (!excludeContentTypes?.length || !onlyContentTypes?.length) {\n return;\n }\n\n const overlap = excludeContentTypes.filter((uid: string) => onlyContentTypes.includes(uid));\n if (overlap.length > 0) {\n exitWith(\n 1,\n `Content types may not be used in both \"--exclude-content-types\" and \"--only-content-types\". Found in both: ${overlap.join(\n ','\n )}`\n );\n }\n};\n\nconst assertKnownContentTypes = (uids: string[], strapi: Core.Strapi, flag: string) => {\n const known = new Set(Object.keys(strapi.contentTypes));\n const unknown = uids.filter((uid) => !known.has(uid));\n\n if (unknown.length > 0) {\n exitWith(1, `Unknown content type(s) for ${flag}: ${unknown.join(', ')}`);\n }\n};\n\nconst validateContentTypeTransferOptionsForStrapi = (\n opts: ContentTypeTransferOptions,\n strapi: Core.Strapi\n) => {\n if (opts.excludeContentTypes?.length) {\n assertKnownContentTypes(opts.excludeContentTypes, strapi, '--exclude-content-types');\n }\n\n if (opts.onlyContentTypes?.length) {\n assertKnownContentTypes(opts.onlyContentTypes, strapi, '--only-content-types');\n }\n};\n\nconst shouldIncludeContentTypeInTransfer = (\n uid: string,\n opts: TransferCliFilterOptions\n): boolean => {\n if (isIgnoredContentType(uid)) {\n return false;\n }\n\n if (opts.excludeContentTypes?.includes(uid)) {\n return false;\n }\n\n if (opts.onlyContentTypes?.length) {\n return opts.onlyContentTypes.includes(uid);\n }\n\n return true;\n};\n\nconst createEntityFilter = (opts: TransferCliFilterOptions) => {\n return (entity: { type: string }) => shouldIncludeContentTypeInTransfer(entity.type, opts);\n};\n\nconst createLinkFilter = (opts: TransferCliFilterOptions) => {\n return (link: { left: { type: string }; right: { type: string } }) =>\n shouldIncludeContentTypeInTransfer(link.left.type, opts) &&\n shouldIncludeContentTypeInTransfer(link.right.type, opts);\n};\n\nconst buildTransferTransforms = (opts: TransferCliFilterOptions) => ({\n links: [{ filter: createLinkFilter(opts) }],\n entities: [{ filter: createEntityFilter(opts) }],\n});\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n let logger: undefined | winston.Logger;\n let logFileBasename: string | undefined;\n\n const getLogger = () => {\n if (!logger) {\n logFileBasename = `${operation}_${Date.now()}.log`;\n const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n logger = createLogger(\n configs.createOutputFileConfiguration(\n logFileBasename,\n {\n level: 'info',\n format: formats?.detailedLogs,\n },\n {\n consoleLevel: verbose ? 'info' : 'warn',\n }\n )\n );\n\n logger.info(\n `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n );\n }\n return logger;\n };\n\n return ({ details, kind }) => {\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n getLogger().error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n totalBytes?: number;\n totalCount?: number;\n };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n 'entities',\n 'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n return null;\n }\n const ratePerMs = done / elapsedMs;\n const remaining = total - done;\n const etaMs = remaining / ratePerMs;\n if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n return null;\n }\n return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const bytes = stageData?.bytes ?? 0;\n const count = stageData?.count ?? 0;\n const totalBytes = stageData?.totalBytes;\n const totalCount = stageData?.totalCount;\n\n const countLabel =\n totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n const sizeCompact =\n totalBytes != null && totalBytes > 0\n ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n : readableBytes(bytes);\n\n const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n if (elapsedTime > 0 && !stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n const itemsPerSec = (count * 1000) / elapsedTime;\n parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n } else {\n parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n }\n }\n\n let etaMs: number | null = null;\n if (!stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n } else if (totalBytes != null) {\n etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n }\n }\n parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'plugin::review-workflows.workflow' ||\n uid === 'plugin::review-workflows.workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Pick<TransferCliFilterOptions, 'exclude' | 'only'>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\nconst areUploadContentTypesInTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst areAllUploadContentTypesOutOfTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => !shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst isContentStageActive = (opts: TransferCliFilterOptions): boolean =>\n !shouldSkipStage(opts, 'content');\n\nconst expandMediaLibraryPreset = (opts: TransferCliFilterOptions) => {\n if (!opts.exclude?.includes(MEDIA_LIBRARY_PRESET)) {\n return;\n }\n\n const exclude = opts.exclude.filter(\n (item) => item !== MEDIA_LIBRARY_PRESET\n ) as engineDataTransfer.TransferFilterPreset[];\n\n opts.exclude = exclude;\n\n if (!opts.exclude.includes('files')) {\n opts.exclude.push('files');\n }\n\n const excludeContentTypes = new Set(opts.excludeContentTypes ?? []);\n for (const uid of UPLOAD_CONTENT_TYPE_UIDS) {\n excludeContentTypes.add(uid);\n }\n opts.excludeContentTypes = [...excludeContentTypes];\n};\n\nconst autoExcludeFilesWhenUploadTypesOutOfScope = (opts: TransferCliFilterOptions) => {\n if (\n opts.filesAutoExcluded ||\n !isContentStageActive(opts) ||\n opts.only?.includes('files') ||\n shouldSkipStage(opts, 'files') ||\n !areAllUploadContentTypesOutOfTransferScope(opts)\n ) {\n return;\n }\n\n opts.exclude = [...(opts.exclude ?? []), 'files'] as engineDataTransfer.TransferFilterPreset[];\n opts.filesAutoExcluded = true;\n};\n\nconst normalizeTransferFilterOptions = (opts: TransferCliFilterOptions) => {\n expandMediaLibraryPreset(opts);\n autoExcludeFilesWhenUploadTypesOutOfScope(opts);\n return opts;\n};\n\nconst normalizeTransferFilterOptionsHook = (command: Command) => {\n normalizeTransferFilterOptions(command.opts() as TransferCliFilterOptions);\n};\n\nconst logTransferFilterSummary = (opts: Partial<TransferCliFilterOptions>) => {\n const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;\n if (\n !exclude?.length &&\n !only?.length &&\n !excludeContentTypes?.length &&\n !onlyContentTypes?.length\n ) {\n return;\n }\n\n const parts: string[] = [];\n if (exclude?.length) {\n parts.push(`excluding ${exclude.join(', ')}`);\n }\n if (only?.length) {\n parts.push(`only ${only.join(', ')}`);\n }\n\n if (parts.length) {\n console.log(chalk.dim(`Transfer filters: ${parts.join('; ')}.`));\n }\n\n const contentTypeParts: string[] = [];\n if (excludeContentTypes?.length) {\n contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);\n }\n if (onlyContentTypes?.length) {\n contentTypeParts.push(`only ${onlyContentTypes.join(', ')}`);\n }\n\n if (contentTypeParts.length) {\n console.log(chalk.dim(`Content type filters: ${contentTypeParts.join('; ')}.`));\n }\n\n if (opts.filesAutoExcluded) {\n console.log(\n chalk.dim(\n 'Skipping files stage: upload content types are not in transfer scope (plugin::upload.file, plugin::upload.folder).'\n )\n );\n }\n\n if (\n shouldSkipStage(opts, 'files') &&\n !shouldSkipStage(opts, 'content') &&\n areUploadContentTypesInTransferScope(opts) &&\n !opts.filesAutoExcluded\n ) {\n console.log(\n chalk.dim(\n 'Note: Media library records (plugin::upload.file, plugin::upload.folder) are still transferred with the rest of your content (the entities stage). Sync upload binaries separately (e.g. rsync public/uploads).'\n )\n );\n }\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: TransferCliFilterOptions, strapi: Core.Strapi) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: [\n ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n ...IGNORED_CONTENT_TYPES,\n ...(opts.excludeContentTypes ?? []),\n ],\n include: undefined,\n };\n\n const contentInScope = !(\n (opts.only && !opts.only.includes('content')) ||\n opts.exclude?.includes('content')\n );\n\n if (!contentInScope) {\n // Nothing from the entities stage is transferred; do not delete any records beforehand.\n entitiesOptions.include = [];\n } else if (opts.onlyContentTypes?.length) {\n // Only wipe content types that are being replaced by this transfer.\n entitiesOptions.include = opts.onlyContentTypes;\n } else if (shouldSkipStage(opts, 'config')) {\n // When config is excluded, scope pre-transfer deletion to user content types only.\n // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n (uid) => !isIgnoredContentType(uid) && !opts.excludeContentTypes?.includes(uid)\n );\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n isIgnoredContentType,\n createStrapiInstance,\n excludeOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n validateContentTypeTransferOptionsForStrapi,\n normalizeTransferFilterOptions,\n normalizeTransferFilterOptionsHook,\n areUploadContentTypesInTransferScope,\n areAllUploadContentTypesOutOfTransferScope,\n buildTransferTransforms,\n createEntityFilter,\n createLinkFilter,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n UPLOAD_CONTENT_TYPE_UIDS,\n logTransferFilterSummary,\n};\n\nexport type { ContentTypeTransferOptions, TransferCliFilterOptions };\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","MEDIA_LIBRARY_PRESET","TRANSFER_FILTER_PRESET_DESCRIPTIONS","files","config","transferExcludePresetChoices","formatTransferPresetHelp","types","join","transferExcludePresetsHelp","transferOnlyPresetsHelp","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","getParseListWithChoices","onlyOption","excludeContentTypesOption","parseList","onlyContentTypesOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","validateContentTypeTransferOptions","excludeContentTypes","onlyContentTypes","overlap","uid","assertKnownContentTypes","uids","flag","known","Set","contentTypes","unknown","has","validateContentTypeTransferOptionsForStrapi","shouldIncludeContentTypeInTransfer","createEntityFilter","entity","createLinkFilter","link","left","right","buildTransferTransforms","links","entities","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","areUploadContentTypesInTransferScope","every","areAllUploadContentTypesOutOfTransferScope","isContentStageActive","expandMediaLibraryPreset","add","autoExcludeFilesWhenUploadTypesOutOfScope","filesAutoExcluded","normalizeTransferFilterOptions","normalizeTransferFilterOptionsHook","logTransferFilterSummary","dim","contentTypeParts","parseRestoreFromOptions","entitiesOptions","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.js","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n readableBytes,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, parseList, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\n/** Media library content types — common target for `--exclude-content-types` (see issue #25008). */\nconst UPLOAD_CONTENT_TYPE_UIDS = ['plugin::upload.file', 'plugin::upload.folder'] as const;\n\nconst isIgnoredContentType = (type: string) =>\n IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.Strapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n try {\n const appContext = await compileStrapi();\n const app = createStrapi({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst MEDIA_LIBRARY_PRESET = 'media-library';\n\nconst TRANSFER_FILTER_PRESET_DESCRIPTIONS: Record<\n engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET,\n string\n> = {\n content: 'entities and links (incl. media library DB records)',\n files: 'upload binaries in public/uploads (not media library DB records)',\n config: 'core store and webhooks',\n [MEDIA_LIBRARY_PRESET]:\n 'upload binaries and media library DB records (files + plugin::upload.file, plugin::upload.folder)',\n};\n\nconst transferExcludePresetChoices = [...transferDataTypes, MEDIA_LIBRARY_PRESET];\n\nconst formatTransferPresetHelp = (types: string[]) =>\n types\n .map(\n (type) =>\n `${type} (${TRANSFER_FILTER_PRESET_DESCRIPTIONS[type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS]})`\n )\n .join('; ');\n\nconst transferExcludePresetsHelp = formatTransferPresetHelp(transferExcludePresetChoices);\nconst transferOnlyPresetsHelp = formatTransferPresetHelp(transferDataTypes);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data: ${transferExcludePresetsHelp}`\n).argParser(getParseListWithChoices(transferExcludePresetChoices, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types (plus schemas): ${transferOnlyPresetsHelp}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst excludeContentTypesOption = new Option(\n '--exclude-content-types <comma-separated UIDs>',\n `Exclude content types from entities and links (e.g. ${UPLOAD_CONTENT_TYPE_UIDS.join(',')} to omit the media library; or use --exclude media-library to skip binaries and upload records — see issue #25008)`\n).argParser(parseList);\n\nconst onlyContentTypesOption = new Option(\n '--only-content-types <comma-separated UIDs>',\n 'Transfer only these content types in entities and links (e.g. api::article.article)'\n).argParser(parseList);\n\ntype ContentTypeTransferOptions = {\n excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n};\n\ntype TransferExcludePreset = engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET;\n\ntype TransferCliFilterOptions = Partial<\n Omit<engineDataTransfer.ITransferEngineOptions, 'exclude' | 'only'>\n> & {\n exclude?: TransferExcludePreset[];\n only?: engineDataTransfer.TransferFilterPreset[];\n} & ContentTypeTransferOptions & {\n /** Set when the files stage is auto-skipped because upload types are out of scope. */\n filesAutoExcluded?: boolean;\n };\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst validateContentTypeTransferOptions = (command: Command) => {\n const { excludeContentTypes, onlyContentTypes } = command.opts();\n\n if (!excludeContentTypes?.length || !onlyContentTypes?.length) {\n return;\n }\n\n const overlap = excludeContentTypes.filter((uid: string) => onlyContentTypes.includes(uid));\n if (overlap.length > 0) {\n exitWith(\n 1,\n `Content types may not be used in both \"--exclude-content-types\" and \"--only-content-types\". Found in both: ${overlap.join(\n ','\n )}`\n );\n }\n};\n\nconst assertKnownContentTypes = (uids: string[], strapi: Core.Strapi, flag: string) => {\n const known = new Set(Object.keys(strapi.contentTypes));\n const unknown = uids.filter((uid) => !known.has(uid));\n\n if (unknown.length > 0) {\n exitWith(1, `Unknown content type(s) for ${flag}: ${unknown.join(', ')}`);\n }\n};\n\nconst validateContentTypeTransferOptionsForStrapi = (\n opts: ContentTypeTransferOptions,\n strapi: Core.Strapi\n) => {\n if (opts.excludeContentTypes?.length) {\n assertKnownContentTypes(opts.excludeContentTypes, strapi, '--exclude-content-types');\n }\n\n if (opts.onlyContentTypes?.length) {\n assertKnownContentTypes(opts.onlyContentTypes, strapi, '--only-content-types');\n }\n};\n\nconst shouldIncludeContentTypeInTransfer = (\n uid: string,\n opts: TransferCliFilterOptions\n): boolean => {\n if (isIgnoredContentType(uid)) {\n return false;\n }\n\n if (opts.excludeContentTypes?.includes(uid)) {\n return false;\n }\n\n if (opts.onlyContentTypes?.length) {\n return opts.onlyContentTypes.includes(uid);\n }\n\n return true;\n};\n\nconst createEntityFilter = (opts: TransferCliFilterOptions) => {\n return (entity: { type: string }) => shouldIncludeContentTypeInTransfer(entity.type, opts);\n};\n\nconst createLinkFilter = (opts: TransferCliFilterOptions) => {\n return (link: { left: { type: string }; right: { type: string } }) =>\n shouldIncludeContentTypeInTransfer(link.left.type, opts) &&\n shouldIncludeContentTypeInTransfer(link.right.type, opts);\n};\n\nconst buildTransferTransforms = (opts: TransferCliFilterOptions) => ({\n links: [{ filter: createLinkFilter(opts) }],\n entities: [{ filter: createEntityFilter(opts) }],\n});\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n let logger: undefined | winston.Logger;\n let logFileBasename: string | undefined;\n\n const getLogger = () => {\n if (!logger) {\n logFileBasename = `${operation}_${Date.now()}.log`;\n const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n logger = createLogger(\n configs.createOutputFileConfiguration(\n logFileBasename,\n {\n level: 'info',\n format: formats?.detailedLogs,\n },\n {\n consoleLevel: verbose ? 'info' : 'warn',\n }\n )\n );\n\n logger.info(\n `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n );\n }\n return logger;\n };\n\n return ({ details, kind }) => {\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n getLogger().error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n totalBytes?: number;\n totalCount?: number;\n };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n 'entities',\n 'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n return null;\n }\n const ratePerMs = done / elapsedMs;\n const remaining = total - done;\n const etaMs = remaining / ratePerMs;\n if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n return null;\n }\n return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const bytes = stageData?.bytes ?? 0;\n const count = stageData?.count ?? 0;\n const totalBytes = stageData?.totalBytes;\n const totalCount = stageData?.totalCount;\n\n const countLabel =\n totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n const sizeCompact =\n totalBytes != null && totalBytes > 0\n ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n : readableBytes(bytes);\n\n const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n if (elapsedTime > 0 && !stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n const itemsPerSec = (count * 1000) / elapsedTime;\n parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n } else {\n parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n }\n }\n\n let etaMs: number | null = null;\n if (!stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n } else if (totalBytes != null) {\n etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n }\n }\n parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'plugin::review-workflows.workflow' ||\n uid === 'plugin::review-workflows.workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Pick<TransferCliFilterOptions, 'exclude' | 'only'>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\nconst areUploadContentTypesInTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst areAllUploadContentTypesOutOfTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => !shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst isContentStageActive = (opts: TransferCliFilterOptions): boolean =>\n !shouldSkipStage(opts, 'content');\n\nconst expandMediaLibraryPreset = (opts: TransferCliFilterOptions) => {\n if (!opts.exclude?.includes(MEDIA_LIBRARY_PRESET)) {\n return;\n }\n\n const exclude = opts.exclude.filter(\n (item) => item !== MEDIA_LIBRARY_PRESET\n ) as engineDataTransfer.TransferFilterPreset[];\n\n opts.exclude = exclude;\n\n if (!opts.exclude.includes('files')) {\n opts.exclude.push('files');\n }\n\n const excludeContentTypes = new Set(opts.excludeContentTypes ?? []);\n for (const uid of UPLOAD_CONTENT_TYPE_UIDS) {\n excludeContentTypes.add(uid);\n }\n opts.excludeContentTypes = [...excludeContentTypes];\n};\n\nconst autoExcludeFilesWhenUploadTypesOutOfScope = (opts: TransferCliFilterOptions) => {\n if (\n opts.filesAutoExcluded ||\n !isContentStageActive(opts) ||\n opts.only?.includes('files') ||\n shouldSkipStage(opts, 'files') ||\n !areAllUploadContentTypesOutOfTransferScope(opts)\n ) {\n return;\n }\n\n opts.exclude = [...(opts.exclude ?? []), 'files'] as engineDataTransfer.TransferFilterPreset[];\n opts.filesAutoExcluded = true;\n};\n\nconst normalizeTransferFilterOptions = (opts: TransferCliFilterOptions) => {\n expandMediaLibraryPreset(opts);\n autoExcludeFilesWhenUploadTypesOutOfScope(opts);\n return opts;\n};\n\nconst normalizeTransferFilterOptionsHook = (command: Command) => {\n normalizeTransferFilterOptions(command.opts() as TransferCliFilterOptions);\n};\n\nconst TRANSFER_STAGE_PRESETS = ['content', 'files', 'config'] as const;\n\nconst logTransferFilterSummary = (opts: Partial<TransferCliFilterOptions>) => {\n const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;\n if (\n !exclude?.length &&\n !only?.length &&\n !excludeContentTypes?.length &&\n !onlyContentTypes?.length\n ) {\n return;\n }\n\n const parts: string[] = [];\n if (exclude?.length) {\n parts.push(`excluding ${exclude.join(', ')}`);\n }\n if (only?.length) {\n parts.push(`only ${only.join(', ')}`);\n }\n\n if (parts.length) {\n console.log(chalk.dim(`Transfer filters: ${parts.join('; ')}.`));\n }\n\n // When `--only` omits stages, say so — destination data for those stages is preserved.\n if (only?.length) {\n const omittedStages = TRANSFER_STAGE_PRESETS.filter((stage) => !only.includes(stage));\n if (omittedStages.length) {\n console.log(\n chalk.dim(\n `Stages not transferred (destination data preserved): ${omittedStages.join(', ')}.`\n )\n );\n }\n }\n\n const contentTypeParts: string[] = [];\n if (excludeContentTypes?.length) {\n contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);\n }\n if (onlyContentTypes?.length) {\n contentTypeParts.push(`only ${onlyContentTypes.join(', ')}`);\n }\n\n if (contentTypeParts.length) {\n console.log(chalk.dim(`Content type filters: ${contentTypeParts.join('; ')}.`));\n }\n\n if (opts.filesAutoExcluded) {\n console.log(\n chalk.dim(\n 'Skipping files stage: upload content types are not in transfer scope (plugin::upload.file, plugin::upload.folder).'\n )\n );\n }\n\n if (\n shouldSkipStage(opts, 'files') &&\n !shouldSkipStage(opts, 'content') &&\n areUploadContentTypesInTransferScope(opts) &&\n !opts.filesAutoExcluded\n ) {\n console.log(\n chalk.dim(\n 'Note: Media library records (plugin::upload.file, plugin::upload.folder) are still transferred with the rest of your content (the entities stage). Sync upload binaries separately (e.g. rsync public/uploads).'\n )\n );\n }\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: TransferCliFilterOptions, strapi: Core.Strapi) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: [\n ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n ...IGNORED_CONTENT_TYPES,\n ...(opts.excludeContentTypes ?? []),\n ],\n include: undefined,\n };\n\n const contentInScope = !(\n (opts.only && !opts.only.includes('content')) ||\n opts.exclude?.includes('content')\n );\n\n if (!contentInScope) {\n // Nothing from the entities stage is transferred; do not delete any records beforehand.\n entitiesOptions.include = [];\n } else if (opts.onlyContentTypes?.length) {\n // Only wipe content types that are being replaced by this transfer.\n entitiesOptions.include = opts.onlyContentTypes;\n } else if (shouldSkipStage(opts, 'config')) {\n // When config is excluded, scope pre-transfer deletion to user content types only.\n // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n (uid) => !isIgnoredContentType(uid) && !opts.excludeContentTypes?.includes(uid)\n );\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n isIgnoredContentType,\n createStrapiInstance,\n excludeOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n validateContentTypeTransferOptionsForStrapi,\n normalizeTransferFilterOptions,\n normalizeTransferFilterOptionsHook,\n areUploadContentTypesInTransferScope,\n areAllUploadContentTypesOutOfTransferScope,\n buildTransferTransforms,\n createEntityFilter,\n createLinkFilter,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n UPLOAD_CONTENT_TYPE_UIDS,\n logTransferFilterSummary,\n};\n\nexport type { ContentTypeTransferOptions, TransferCliFilterOptions };\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","MEDIA_LIBRARY_PRESET","TRANSFER_FILTER_PRESET_DESCRIPTIONS","files","config","transferExcludePresetChoices","formatTransferPresetHelp","types","join","transferExcludePresetsHelp","transferOnlyPresetsHelp","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","getParseListWithChoices","onlyOption","excludeContentTypesOption","parseList","onlyContentTypesOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","validateContentTypeTransferOptions","excludeContentTypes","onlyContentTypes","overlap","uid","assertKnownContentTypes","uids","flag","known","Set","contentTypes","unknown","has","validateContentTypeTransferOptionsForStrapi","shouldIncludeContentTypeInTransfer","createEntityFilter","entity","createLinkFilter","link","left","right","buildTransferTransforms","links","entities","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","areUploadContentTypesInTransferScope","every","areAllUploadContentTypesOutOfTransferScope","isContentStageActive","expandMediaLibraryPreset","add","autoExcludeFilesWhenUploadTypesOutOfScope","filesAutoExcluded","normalizeTransferFilterOptions","normalizeTransferFilterOptionsHook","TRANSFER_STAGE_PRESETS","logTransferFilterSummary","dim","omittedStages","contentTypeParts","parseRestoreFromOptions","entitiesOptions","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":"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"}
@@ -492,6 +492,11 @@ const normalizeTransferFilterOptions = (opts)=>{
492
492
  const normalizeTransferFilterOptionsHook = (command)=>{
493
493
  normalizeTransferFilterOptions(command.opts());
494
494
  };
495
+ const TRANSFER_STAGE_PRESETS = [
496
+ 'content',
497
+ 'files',
498
+ 'config'
499
+ ];
495
500
  const logTransferFilterSummary = (opts)=>{
496
501
  const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;
497
502
  if (!exclude?.length && !only?.length && !excludeContentTypes?.length && !onlyContentTypes?.length) {
@@ -507,6 +512,13 @@ const logTransferFilterSummary = (opts)=>{
507
512
  if (parts.length) {
508
513
  console.log(chalk.dim(`Transfer filters: ${parts.join('; ')}.`));
509
514
  }
515
+ // When `--only` omits stages, say so — destination data for those stages is preserved.
516
+ if (only?.length) {
517
+ const omittedStages = TRANSFER_STAGE_PRESETS.filter((stage)=>!only.includes(stage));
518
+ if (omittedStages.length) {
519
+ console.log(chalk.dim(`Stages not transferred (destination data preserved): ${omittedStages.join(', ')}.`));
520
+ }
521
+ }
510
522
  const contentTypeParts = [];
511
523
  if (excludeContentTypes?.length) {
512
524
  contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.mjs","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n readableBytes,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, parseList, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\n/** Media library content types — common target for `--exclude-content-types` (see issue #25008). */\nconst UPLOAD_CONTENT_TYPE_UIDS = ['plugin::upload.file', 'plugin::upload.folder'] as const;\n\nconst isIgnoredContentType = (type: string) =>\n IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.Strapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n try {\n const appContext = await compileStrapi();\n const app = createStrapi({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst MEDIA_LIBRARY_PRESET = 'media-library';\n\nconst TRANSFER_FILTER_PRESET_DESCRIPTIONS: Record<\n engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET,\n string\n> = {\n content: 'entities and links (incl. media library DB records)',\n files: 'upload binaries in public/uploads (not media library DB records)',\n config: 'core store and webhooks',\n [MEDIA_LIBRARY_PRESET]:\n 'upload binaries and media library DB records (files + plugin::upload.file, plugin::upload.folder)',\n};\n\nconst transferExcludePresetChoices = [...transferDataTypes, MEDIA_LIBRARY_PRESET];\n\nconst formatTransferPresetHelp = (types: string[]) =>\n types\n .map(\n (type) =>\n `${type} (${TRANSFER_FILTER_PRESET_DESCRIPTIONS[type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS]})`\n )\n .join('; ');\n\nconst transferExcludePresetsHelp = formatTransferPresetHelp(transferExcludePresetChoices);\nconst transferOnlyPresetsHelp = formatTransferPresetHelp(transferDataTypes);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data: ${transferExcludePresetsHelp}`\n).argParser(getParseListWithChoices(transferExcludePresetChoices, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types (plus schemas): ${transferOnlyPresetsHelp}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst excludeContentTypesOption = new Option(\n '--exclude-content-types <comma-separated UIDs>',\n `Exclude content types from entities and links (e.g. ${UPLOAD_CONTENT_TYPE_UIDS.join(',')} to omit the media library; or use --exclude media-library to skip binaries and upload records — see issue #25008)`\n).argParser(parseList);\n\nconst onlyContentTypesOption = new Option(\n '--only-content-types <comma-separated UIDs>',\n 'Transfer only these content types in entities and links (e.g. api::article.article)'\n).argParser(parseList);\n\ntype ContentTypeTransferOptions = {\n excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n};\n\ntype TransferExcludePreset = engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET;\n\ntype TransferCliFilterOptions = Partial<\n Omit<engineDataTransfer.ITransferEngineOptions, 'exclude' | 'only'>\n> & {\n exclude?: TransferExcludePreset[];\n only?: engineDataTransfer.TransferFilterPreset[];\n} & ContentTypeTransferOptions & {\n /** Set when the files stage is auto-skipped because upload types are out of scope. */\n filesAutoExcluded?: boolean;\n };\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst validateContentTypeTransferOptions = (command: Command) => {\n const { excludeContentTypes, onlyContentTypes } = command.opts();\n\n if (!excludeContentTypes?.length || !onlyContentTypes?.length) {\n return;\n }\n\n const overlap = excludeContentTypes.filter((uid: string) => onlyContentTypes.includes(uid));\n if (overlap.length > 0) {\n exitWith(\n 1,\n `Content types may not be used in both \"--exclude-content-types\" and \"--only-content-types\". Found in both: ${overlap.join(\n ','\n )}`\n );\n }\n};\n\nconst assertKnownContentTypes = (uids: string[], strapi: Core.Strapi, flag: string) => {\n const known = new Set(Object.keys(strapi.contentTypes));\n const unknown = uids.filter((uid) => !known.has(uid));\n\n if (unknown.length > 0) {\n exitWith(1, `Unknown content type(s) for ${flag}: ${unknown.join(', ')}`);\n }\n};\n\nconst validateContentTypeTransferOptionsForStrapi = (\n opts: ContentTypeTransferOptions,\n strapi: Core.Strapi\n) => {\n if (opts.excludeContentTypes?.length) {\n assertKnownContentTypes(opts.excludeContentTypes, strapi, '--exclude-content-types');\n }\n\n if (opts.onlyContentTypes?.length) {\n assertKnownContentTypes(opts.onlyContentTypes, strapi, '--only-content-types');\n }\n};\n\nconst shouldIncludeContentTypeInTransfer = (\n uid: string,\n opts: TransferCliFilterOptions\n): boolean => {\n if (isIgnoredContentType(uid)) {\n return false;\n }\n\n if (opts.excludeContentTypes?.includes(uid)) {\n return false;\n }\n\n if (opts.onlyContentTypes?.length) {\n return opts.onlyContentTypes.includes(uid);\n }\n\n return true;\n};\n\nconst createEntityFilter = (opts: TransferCliFilterOptions) => {\n return (entity: { type: string }) => shouldIncludeContentTypeInTransfer(entity.type, opts);\n};\n\nconst createLinkFilter = (opts: TransferCliFilterOptions) => {\n return (link: { left: { type: string }; right: { type: string } }) =>\n shouldIncludeContentTypeInTransfer(link.left.type, opts) &&\n shouldIncludeContentTypeInTransfer(link.right.type, opts);\n};\n\nconst buildTransferTransforms = (opts: TransferCliFilterOptions) => ({\n links: [{ filter: createLinkFilter(opts) }],\n entities: [{ filter: createEntityFilter(opts) }],\n});\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n let logger: undefined | winston.Logger;\n let logFileBasename: string | undefined;\n\n const getLogger = () => {\n if (!logger) {\n logFileBasename = `${operation}_${Date.now()}.log`;\n const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n logger = createLogger(\n configs.createOutputFileConfiguration(\n logFileBasename,\n {\n level: 'info',\n format: formats?.detailedLogs,\n },\n {\n consoleLevel: verbose ? 'info' : 'warn',\n }\n )\n );\n\n logger.info(\n `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n );\n }\n return logger;\n };\n\n return ({ details, kind }) => {\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n getLogger().error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n totalBytes?: number;\n totalCount?: number;\n };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n 'entities',\n 'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n return null;\n }\n const ratePerMs = done / elapsedMs;\n const remaining = total - done;\n const etaMs = remaining / ratePerMs;\n if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n return null;\n }\n return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const bytes = stageData?.bytes ?? 0;\n const count = stageData?.count ?? 0;\n const totalBytes = stageData?.totalBytes;\n const totalCount = stageData?.totalCount;\n\n const countLabel =\n totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n const sizeCompact =\n totalBytes != null && totalBytes > 0\n ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n : readableBytes(bytes);\n\n const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n if (elapsedTime > 0 && !stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n const itemsPerSec = (count * 1000) / elapsedTime;\n parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n } else {\n parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n }\n }\n\n let etaMs: number | null = null;\n if (!stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n } else if (totalBytes != null) {\n etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n }\n }\n parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'plugin::review-workflows.workflow' ||\n uid === 'plugin::review-workflows.workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Pick<TransferCliFilterOptions, 'exclude' | 'only'>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\nconst areUploadContentTypesInTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst areAllUploadContentTypesOutOfTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => !shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst isContentStageActive = (opts: TransferCliFilterOptions): boolean =>\n !shouldSkipStage(opts, 'content');\n\nconst expandMediaLibraryPreset = (opts: TransferCliFilterOptions) => {\n if (!opts.exclude?.includes(MEDIA_LIBRARY_PRESET)) {\n return;\n }\n\n const exclude = opts.exclude.filter(\n (item) => item !== MEDIA_LIBRARY_PRESET\n ) as engineDataTransfer.TransferFilterPreset[];\n\n opts.exclude = exclude;\n\n if (!opts.exclude.includes('files')) {\n opts.exclude.push('files');\n }\n\n const excludeContentTypes = new Set(opts.excludeContentTypes ?? []);\n for (const uid of UPLOAD_CONTENT_TYPE_UIDS) {\n excludeContentTypes.add(uid);\n }\n opts.excludeContentTypes = [...excludeContentTypes];\n};\n\nconst autoExcludeFilesWhenUploadTypesOutOfScope = (opts: TransferCliFilterOptions) => {\n if (\n opts.filesAutoExcluded ||\n !isContentStageActive(opts) ||\n opts.only?.includes('files') ||\n shouldSkipStage(opts, 'files') ||\n !areAllUploadContentTypesOutOfTransferScope(opts)\n ) {\n return;\n }\n\n opts.exclude = [...(opts.exclude ?? []), 'files'] as engineDataTransfer.TransferFilterPreset[];\n opts.filesAutoExcluded = true;\n};\n\nconst normalizeTransferFilterOptions = (opts: TransferCliFilterOptions) => {\n expandMediaLibraryPreset(opts);\n autoExcludeFilesWhenUploadTypesOutOfScope(opts);\n return opts;\n};\n\nconst normalizeTransferFilterOptionsHook = (command: Command) => {\n normalizeTransferFilterOptions(command.opts() as TransferCliFilterOptions);\n};\n\nconst logTransferFilterSummary = (opts: Partial<TransferCliFilterOptions>) => {\n const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;\n if (\n !exclude?.length &&\n !only?.length &&\n !excludeContentTypes?.length &&\n !onlyContentTypes?.length\n ) {\n return;\n }\n\n const parts: string[] = [];\n if (exclude?.length) {\n parts.push(`excluding ${exclude.join(', ')}`);\n }\n if (only?.length) {\n parts.push(`only ${only.join(', ')}`);\n }\n\n if (parts.length) {\n console.log(chalk.dim(`Transfer filters: ${parts.join('; ')}.`));\n }\n\n const contentTypeParts: string[] = [];\n if (excludeContentTypes?.length) {\n contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);\n }\n if (onlyContentTypes?.length) {\n contentTypeParts.push(`only ${onlyContentTypes.join(', ')}`);\n }\n\n if (contentTypeParts.length) {\n console.log(chalk.dim(`Content type filters: ${contentTypeParts.join('; ')}.`));\n }\n\n if (opts.filesAutoExcluded) {\n console.log(\n chalk.dim(\n 'Skipping files stage: upload content types are not in transfer scope (plugin::upload.file, plugin::upload.folder).'\n )\n );\n }\n\n if (\n shouldSkipStage(opts, 'files') &&\n !shouldSkipStage(opts, 'content') &&\n areUploadContentTypesInTransferScope(opts) &&\n !opts.filesAutoExcluded\n ) {\n console.log(\n chalk.dim(\n 'Note: Media library records (plugin::upload.file, plugin::upload.folder) are still transferred with the rest of your content (the entities stage). Sync upload binaries separately (e.g. rsync public/uploads).'\n )\n );\n }\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: TransferCliFilterOptions, strapi: Core.Strapi) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: [\n ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n ...IGNORED_CONTENT_TYPES,\n ...(opts.excludeContentTypes ?? []),\n ],\n include: undefined,\n };\n\n const contentInScope = !(\n (opts.only && !opts.only.includes('content')) ||\n opts.exclude?.includes('content')\n );\n\n if (!contentInScope) {\n // Nothing from the entities stage is transferred; do not delete any records beforehand.\n entitiesOptions.include = [];\n } else if (opts.onlyContentTypes?.length) {\n // Only wipe content types that are being replaced by this transfer.\n entitiesOptions.include = opts.onlyContentTypes;\n } else if (shouldSkipStage(opts, 'config')) {\n // When config is excluded, scope pre-transfer deletion to user content types only.\n // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n (uid) => !isIgnoredContentType(uid) && !opts.excludeContentTypes?.includes(uid)\n );\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n isIgnoredContentType,\n createStrapiInstance,\n excludeOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n validateContentTypeTransferOptionsForStrapi,\n normalizeTransferFilterOptions,\n normalizeTransferFilterOptionsHook,\n areUploadContentTypesInTransferScope,\n areAllUploadContentTypesOutOfTransferScope,\n buildTransferTransforms,\n createEntityFilter,\n createLinkFilter,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n UPLOAD_CONTENT_TYPE_UIDS,\n logTransferFilterSummary,\n};\n\nexport type { ContentTypeTransferOptions, TransferCliFilterOptions };\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","MEDIA_LIBRARY_PRESET","TRANSFER_FILTER_PRESET_DESCRIPTIONS","files","config","transferExcludePresetChoices","formatTransferPresetHelp","types","join","transferExcludePresetsHelp","transferOnlyPresetsHelp","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","getParseListWithChoices","onlyOption","excludeContentTypesOption","parseList","onlyContentTypesOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","validateContentTypeTransferOptions","excludeContentTypes","onlyContentTypes","overlap","uid","assertKnownContentTypes","uids","flag","known","Set","contentTypes","unknown","has","validateContentTypeTransferOptionsForStrapi","shouldIncludeContentTypeInTransfer","createEntityFilter","entity","createLinkFilter","link","left","right","buildTransferTransforms","links","entities","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","areUploadContentTypesInTransferScope","every","areAllUploadContentTypesOutOfTransferScope","isContentStageActive","expandMediaLibraryPreset","add","autoExcludeFilesWhenUploadTypesOutOfScope","filesAutoExcluded","normalizeTransferFilterOptions","normalizeTransferFilterOptionsHook","logTransferFilterSummary","dim","contentTypeParts","parseRestoreFromOptions","entitiesOptions","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.mjs","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n readableBytes,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, parseList, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\n/** Media library content types — common target for `--exclude-content-types` (see issue #25008). */\nconst UPLOAD_CONTENT_TYPE_UIDS = ['plugin::upload.file', 'plugin::upload.folder'] as const;\n\nconst isIgnoredContentType = (type: string) =>\n IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.Strapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n try {\n const appContext = await compileStrapi();\n const app = createStrapi({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst MEDIA_LIBRARY_PRESET = 'media-library';\n\nconst TRANSFER_FILTER_PRESET_DESCRIPTIONS: Record<\n engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET,\n string\n> = {\n content: 'entities and links (incl. media library DB records)',\n files: 'upload binaries in public/uploads (not media library DB records)',\n config: 'core store and webhooks',\n [MEDIA_LIBRARY_PRESET]:\n 'upload binaries and media library DB records (files + plugin::upload.file, plugin::upload.folder)',\n};\n\nconst transferExcludePresetChoices = [...transferDataTypes, MEDIA_LIBRARY_PRESET];\n\nconst formatTransferPresetHelp = (types: string[]) =>\n types\n .map(\n (type) =>\n `${type} (${TRANSFER_FILTER_PRESET_DESCRIPTIONS[type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS]})`\n )\n .join('; ');\n\nconst transferExcludePresetsHelp = formatTransferPresetHelp(transferExcludePresetChoices);\nconst transferOnlyPresetsHelp = formatTransferPresetHelp(transferDataTypes);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data: ${transferExcludePresetsHelp}`\n).argParser(getParseListWithChoices(transferExcludePresetChoices, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types (plus schemas): ${transferOnlyPresetsHelp}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst excludeContentTypesOption = new Option(\n '--exclude-content-types <comma-separated UIDs>',\n `Exclude content types from entities and links (e.g. ${UPLOAD_CONTENT_TYPE_UIDS.join(',')} to omit the media library; or use --exclude media-library to skip binaries and upload records — see issue #25008)`\n).argParser(parseList);\n\nconst onlyContentTypesOption = new Option(\n '--only-content-types <comma-separated UIDs>',\n 'Transfer only these content types in entities and links (e.g. api::article.article)'\n).argParser(parseList);\n\ntype ContentTypeTransferOptions = {\n excludeContentTypes?: string[];\n onlyContentTypes?: string[];\n};\n\ntype TransferExcludePreset = engineDataTransfer.TransferFilterPreset | typeof MEDIA_LIBRARY_PRESET;\n\ntype TransferCliFilterOptions = Partial<\n Omit<engineDataTransfer.ITransferEngineOptions, 'exclude' | 'only'>\n> & {\n exclude?: TransferExcludePreset[];\n only?: engineDataTransfer.TransferFilterPreset[];\n} & ContentTypeTransferOptions & {\n /** Set when the files stage is auto-skipped because upload types are out of scope. */\n filesAutoExcluded?: boolean;\n };\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst validateContentTypeTransferOptions = (command: Command) => {\n const { excludeContentTypes, onlyContentTypes } = command.opts();\n\n if (!excludeContentTypes?.length || !onlyContentTypes?.length) {\n return;\n }\n\n const overlap = excludeContentTypes.filter((uid: string) => onlyContentTypes.includes(uid));\n if (overlap.length > 0) {\n exitWith(\n 1,\n `Content types may not be used in both \"--exclude-content-types\" and \"--only-content-types\". Found in both: ${overlap.join(\n ','\n )}`\n );\n }\n};\n\nconst assertKnownContentTypes = (uids: string[], strapi: Core.Strapi, flag: string) => {\n const known = new Set(Object.keys(strapi.contentTypes));\n const unknown = uids.filter((uid) => !known.has(uid));\n\n if (unknown.length > 0) {\n exitWith(1, `Unknown content type(s) for ${flag}: ${unknown.join(', ')}`);\n }\n};\n\nconst validateContentTypeTransferOptionsForStrapi = (\n opts: ContentTypeTransferOptions,\n strapi: Core.Strapi\n) => {\n if (opts.excludeContentTypes?.length) {\n assertKnownContentTypes(opts.excludeContentTypes, strapi, '--exclude-content-types');\n }\n\n if (opts.onlyContentTypes?.length) {\n assertKnownContentTypes(opts.onlyContentTypes, strapi, '--only-content-types');\n }\n};\n\nconst shouldIncludeContentTypeInTransfer = (\n uid: string,\n opts: TransferCliFilterOptions\n): boolean => {\n if (isIgnoredContentType(uid)) {\n return false;\n }\n\n if (opts.excludeContentTypes?.includes(uid)) {\n return false;\n }\n\n if (opts.onlyContentTypes?.length) {\n return opts.onlyContentTypes.includes(uid);\n }\n\n return true;\n};\n\nconst createEntityFilter = (opts: TransferCliFilterOptions) => {\n return (entity: { type: string }) => shouldIncludeContentTypeInTransfer(entity.type, opts);\n};\n\nconst createLinkFilter = (opts: TransferCliFilterOptions) => {\n return (link: { left: { type: string }; right: { type: string } }) =>\n shouldIncludeContentTypeInTransfer(link.left.type, opts) &&\n shouldIncludeContentTypeInTransfer(link.right.type, opts);\n};\n\nconst buildTransferTransforms = (opts: TransferCliFilterOptions) => ({\n links: [{ filter: createLinkFilter(opts) }],\n entities: [{ filter: createEntityFilter(opts) }],\n});\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n let logger: undefined | winston.Logger;\n let logFileBasename: string | undefined;\n\n const getLogger = () => {\n if (!logger) {\n logFileBasename = `${operation}_${Date.now()}.log`;\n const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n logger = createLogger(\n configs.createOutputFileConfiguration(\n logFileBasename,\n {\n level: 'info',\n format: formats?.detailedLogs,\n },\n {\n consoleLevel: verbose ? 'info' : 'warn',\n }\n )\n );\n\n logger.info(\n `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n );\n }\n return logger;\n };\n\n return ({ details, kind }) => {\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n getLogger().error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n totalBytes?: number;\n totalCount?: number;\n };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n 'entities',\n 'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n return null;\n }\n const ratePerMs = done / elapsedMs;\n const remaining = total - done;\n const etaMs = remaining / ratePerMs;\n if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n return null;\n }\n return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const bytes = stageData?.bytes ?? 0;\n const count = stageData?.count ?? 0;\n const totalBytes = stageData?.totalBytes;\n const totalCount = stageData?.totalCount;\n\n const countLabel =\n totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n const sizeCompact =\n totalBytes != null && totalBytes > 0\n ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n : readableBytes(bytes);\n\n const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n if (elapsedTime > 0 && !stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n const itemsPerSec = (count * 1000) / elapsedTime;\n parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n } else {\n parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n }\n }\n\n let etaMs: number | null = null;\n if (!stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n } else if (totalBytes != null) {\n etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n }\n }\n parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'plugin::review-workflows.workflow' ||\n uid === 'plugin::review-workflows.workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Pick<TransferCliFilterOptions, 'exclude' | 'only'>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\nconst areUploadContentTypesInTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst areAllUploadContentTypesOutOfTransferScope = (opts: TransferCliFilterOptions): boolean =>\n UPLOAD_CONTENT_TYPE_UIDS.every((uid) => !shouldIncludeContentTypeInTransfer(uid, opts));\n\nconst isContentStageActive = (opts: TransferCliFilterOptions): boolean =>\n !shouldSkipStage(opts, 'content');\n\nconst expandMediaLibraryPreset = (opts: TransferCliFilterOptions) => {\n if (!opts.exclude?.includes(MEDIA_LIBRARY_PRESET)) {\n return;\n }\n\n const exclude = opts.exclude.filter(\n (item) => item !== MEDIA_LIBRARY_PRESET\n ) as engineDataTransfer.TransferFilterPreset[];\n\n opts.exclude = exclude;\n\n if (!opts.exclude.includes('files')) {\n opts.exclude.push('files');\n }\n\n const excludeContentTypes = new Set(opts.excludeContentTypes ?? []);\n for (const uid of UPLOAD_CONTENT_TYPE_UIDS) {\n excludeContentTypes.add(uid);\n }\n opts.excludeContentTypes = [...excludeContentTypes];\n};\n\nconst autoExcludeFilesWhenUploadTypesOutOfScope = (opts: TransferCliFilterOptions) => {\n if (\n opts.filesAutoExcluded ||\n !isContentStageActive(opts) ||\n opts.only?.includes('files') ||\n shouldSkipStage(opts, 'files') ||\n !areAllUploadContentTypesOutOfTransferScope(opts)\n ) {\n return;\n }\n\n opts.exclude = [...(opts.exclude ?? []), 'files'] as engineDataTransfer.TransferFilterPreset[];\n opts.filesAutoExcluded = true;\n};\n\nconst normalizeTransferFilterOptions = (opts: TransferCliFilterOptions) => {\n expandMediaLibraryPreset(opts);\n autoExcludeFilesWhenUploadTypesOutOfScope(opts);\n return opts;\n};\n\nconst normalizeTransferFilterOptionsHook = (command: Command) => {\n normalizeTransferFilterOptions(command.opts() as TransferCliFilterOptions);\n};\n\nconst TRANSFER_STAGE_PRESETS = ['content', 'files', 'config'] as const;\n\nconst logTransferFilterSummary = (opts: Partial<TransferCliFilterOptions>) => {\n const { exclude, only, excludeContentTypes, onlyContentTypes } = opts;\n if (\n !exclude?.length &&\n !only?.length &&\n !excludeContentTypes?.length &&\n !onlyContentTypes?.length\n ) {\n return;\n }\n\n const parts: string[] = [];\n if (exclude?.length) {\n parts.push(`excluding ${exclude.join(', ')}`);\n }\n if (only?.length) {\n parts.push(`only ${only.join(', ')}`);\n }\n\n if (parts.length) {\n console.log(chalk.dim(`Transfer filters: ${parts.join('; ')}.`));\n }\n\n // When `--only` omits stages, say so — destination data for those stages is preserved.\n if (only?.length) {\n const omittedStages = TRANSFER_STAGE_PRESETS.filter((stage) => !only.includes(stage));\n if (omittedStages.length) {\n console.log(\n chalk.dim(\n `Stages not transferred (destination data preserved): ${omittedStages.join(', ')}.`\n )\n );\n }\n }\n\n const contentTypeParts: string[] = [];\n if (excludeContentTypes?.length) {\n contentTypeParts.push(`excluding ${excludeContentTypes.join(', ')}`);\n }\n if (onlyContentTypes?.length) {\n contentTypeParts.push(`only ${onlyContentTypes.join(', ')}`);\n }\n\n if (contentTypeParts.length) {\n console.log(chalk.dim(`Content type filters: ${contentTypeParts.join('; ')}.`));\n }\n\n if (opts.filesAutoExcluded) {\n console.log(\n chalk.dim(\n 'Skipping files stage: upload content types are not in transfer scope (plugin::upload.file, plugin::upload.folder).'\n )\n );\n }\n\n if (\n shouldSkipStage(opts, 'files') &&\n !shouldSkipStage(opts, 'content') &&\n areUploadContentTypesInTransferScope(opts) &&\n !opts.filesAutoExcluded\n ) {\n console.log(\n chalk.dim(\n 'Note: Media library records (plugin::upload.file, plugin::upload.folder) are still transferred with the rest of your content (the entities stage). Sync upload binaries separately (e.g. rsync public/uploads).'\n )\n );\n }\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (opts: TransferCliFilterOptions, strapi: Core.Strapi) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: [\n ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n ...IGNORED_CONTENT_TYPES,\n ...(opts.excludeContentTypes ?? []),\n ],\n include: undefined,\n };\n\n const contentInScope = !(\n (opts.only && !opts.only.includes('content')) ||\n opts.exclude?.includes('content')\n );\n\n if (!contentInScope) {\n // Nothing from the entities stage is transferred; do not delete any records beforehand.\n entitiesOptions.include = [];\n } else if (opts.onlyContentTypes?.length) {\n // Only wipe content types that are being replaced by this transfer.\n entitiesOptions.include = opts.onlyContentTypes;\n } else if (shouldSkipStage(opts, 'config')) {\n // When config is excluded, scope pre-transfer deletion to user content types only.\n // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n (uid) => !isIgnoredContentType(uid) && !opts.excludeContentTypes?.includes(uid)\n );\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n isIgnoredContentType,\n createStrapiInstance,\n excludeOption,\n excludeContentTypesOption,\n onlyContentTypesOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n validateContentTypeTransferOptions,\n validateContentTypeTransferOptionsForStrapi,\n normalizeTransferFilterOptions,\n normalizeTransferFilterOptionsHook,\n areUploadContentTypesInTransferScope,\n areAllUploadContentTypesOutOfTransferScope,\n buildTransferTransforms,\n createEntityFilter,\n createLinkFilter,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n UPLOAD_CONTENT_TYPE_UIDS,\n logTransferFilterSummary,\n};\n\nexport type { ContentTypeTransferOptions, TransferCliFilterOptions };\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","MEDIA_LIBRARY_PRESET","TRANSFER_FILTER_PRESET_DESCRIPTIONS","files","config","transferExcludePresetChoices","formatTransferPresetHelp","types","join","transferExcludePresetsHelp","transferOnlyPresetsHelp","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","getParseListWithChoices","onlyOption","excludeContentTypesOption","parseList","onlyContentTypesOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","validateContentTypeTransferOptions","excludeContentTypes","onlyContentTypes","overlap","uid","assertKnownContentTypes","uids","flag","known","Set","contentTypes","unknown","has","validateContentTypeTransferOptionsForStrapi","shouldIncludeContentTypeInTransfer","createEntityFilter","entity","createLinkFilter","link","left","right","buildTransferTransforms","links","entities","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","areUploadContentTypesInTransferScope","every","areAllUploadContentTypesOutOfTransferScope","isContentStageActive","expandMediaLibraryPreset","add","autoExcludeFilesWhenUploadTypesOutOfScope","filesAutoExcluded","normalizeTransferFilterOptions","normalizeTransferFilterOptionsHook","TRANSFER_STAGE_PRESETS","logTransferFilterSummary","dim","omittedStages","contentTypeParts","parseRestoreFromOptions","entitiesOptions","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":"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"}
@@ -31,14 +31,60 @@ var adminViteSingletonModules = require('./admin-vite-singleton-modules.js');
31
31
  'react-dnd-html5-backend'
32
32
  ];
33
33
  /**
34
- * Modules passed to Vite resolve.dedupe (and aliased): the admin alias modules plus the
35
- * CodeMirror singletons, so every copy collapses onto a single runtime instance.
34
+ * Modules deduplicated but deliberately NOT aliased.
35
+ *
36
+ * A local plugin (`config/plugins.ts` → `{ resolve: './src/plugins/x' }`) is imported into the
37
+ * generated `.strapi/client/app.js` by a *relative* path, so Rollup treats its built
38
+ * `dist/admin/index.mjs` as project source rather than as a dependency. The bare specifiers that
39
+ * `@strapi/sdk-plugin` externalises into that file are therefore resolved from the plugin's own
40
+ * directory first — and a local plugin installed with npm/pnpm has its own `node_modules`, because
41
+ * the SDK template lists `@strapi/strapi` in the generated `devDependencies`.
42
+ *
43
+ * Without dedupe, every local plugin pulls a second copy of the whole admin application into the
44
+ * build graph (`@strapi/admin`, `@strapi/content-manager`, `@strapi/upload`, … and their trees).
45
+ * Measured on a stock app: one empty generated plugin added 4,940 modules (+99%) and ~840MB of
46
+ * peak build heap, which is what makes `strapi build` OOM once a project has a handful of local
47
+ * plugins (#22946).
48
+ *
49
+ * `@strapi/strapi` is the head of that chain — `@strapi/admin` and the core plugins are reached
50
+ * *through* it — so deduping it alone collapses ~98% of the duplication.
51
+ *
52
+ * Only packages the app itself declares belong here. `resolve.dedupe` forces resolution from the
53
+ * app root, so a package that lives solely inside `@strapi/admin`'s closure has no top-level
54
+ * `node_modules` entry under pnpm's strict isolation, and deduping it would turn a working (if
55
+ * duplicated) plugin import into an unresolved one. Every Strapi app depends on `@strapi/strapi`
56
+ * directly, so it is always resolvable from the root. `@strapi/icons` and `react-intl` — which the
57
+ * SDK plugin template imports directly — are `@strapi/admin` dependencies, so they are deliberately
58
+ * left out; their trees are the known residual of this fix.
59
+ *
60
+ * Entries here MUST NOT be added to {@link ADMIN_VITE_ALIAS_MODULES}: `resolve.alias`
61
+ * prefix-substitutes to a filesystem path and so bypasses the package's `exports` map.
62
+ * - `@strapi/strapi` exports `./admin` (real target `dist/admin/index.mjs`) — the exact subpath
63
+ * every plugin imports. Aliasing rewrites it to a non-existent `<pkgdir>/admin` and the build
64
+ * dies with "[vite:load-fallback] Could not load …/@strapi/strapi/admin".
65
+ * - `@strapi/icons` exports `./symbols` and would fail the same way, so aliasing the package
66
+ * directory is no escape hatch for the modules excluded above either.
67
+ * - `@strapi/admin` publishes no `.` export at all, so `getModulePath()` would throw
68
+ * ERR_PACKAGE_PATH_NOT_EXPORTED at config time. It needs no entry here: deduping
69
+ * `@strapi/strapi` already collapses it.
70
+ * The contract tests in `__tests__/admin-vite-aliases.test.ts` enforce this separation.
71
+ *
72
+ * @internal
73
+ */ const ADMIN_VITE_DEDUPE_ONLY_MODULES = [
74
+ '@strapi/strapi'
75
+ ];
76
+ /**
77
+ * Modules passed to Vite resolve.dedupe: the admin alias modules plus the CodeMirror singletons
78
+ * (both of which are also aliased), plus the dedupe-only modules above, so every copy collapses
79
+ * onto a single runtime instance.
36
80
  */ const ADMIN_VITE_DEDUPE_MODULES = [
37
81
  ...ADMIN_VITE_ALIAS_MODULES,
38
- ...adminViteSingletonModules.ADMIN_VITE_SINGLETON_MODULES
82
+ ...adminViteSingletonModules.ADMIN_VITE_SINGLETON_MODULES,
83
+ ...ADMIN_VITE_DEDUPE_ONLY_MODULES
39
84
  ];
40
85
 
41
86
  exports.ADMIN_VITE_SINGLETON_MODULES = adminViteSingletonModules.ADMIN_VITE_SINGLETON_MODULES;
42
87
  exports.ADMIN_VITE_ALIAS_MODULES = ADMIN_VITE_ALIAS_MODULES;
43
88
  exports.ADMIN_VITE_DEDUPE_MODULES = ADMIN_VITE_DEDUPE_MODULES;
89
+ exports.ADMIN_VITE_DEDUPE_ONLY_MODULES = ADMIN_VITE_DEDUPE_ONLY_MODULES;
44
90
  //# sourceMappingURL=admin-vite-alias-modules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-vite-alias-modules.js","sources":["../../../../src/node/core/admin-vite-alias-modules.ts"],"sourcesContent":["import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules';\n\n/**\n * Modules given explicit Vite resolve aliases (and included in resolve.dedupe) for the admin bundle.\n * Single source of truth for resolution contract tests.\n *\n * @internal\n */\nexport const ADMIN_VITE_ALIAS_MODULES = [\n 'react',\n 'react-dom',\n 'react-router-dom',\n 'styled-components',\n 'react-redux',\n '@reduxjs/toolkit',\n '@strapi/design-system',\n '@radix-ui/react-tooltip',\n 'lodash',\n 'invariant',\n 'prismjs',\n // react-dnd holds its DndContext in module scope, and @strapi/admin and\n // @strapi/content-manager each declare react-dnd@16.0.1 themselves. npm hoisting collapses\n // those onto one copy, so the DndProvider rendered by @strapi/admin's AuthenticatedLayout and\n // the useDragLayer call in the content-manager layout share a context only by accident of\n // hoisting. Any tree that keeps the copies separate (pnpm's strict isolation,\n // install-strategy=nested, a plugin pinning its own react-dnd) gives them two different\n // contexts and the Content Manager crashes on mount with\n // \"Invariant Violation: Expected drag drop context\" (#22392, #22792).\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const;\n\nexport type AdminViteAliasModule = (typeof ADMIN_VITE_ALIAS_MODULES)[number];\n\n/**\n * Modules passed to Vite resolve.dedupe (and aliased): the admin alias modules plus the\n * CodeMirror singletons, so every copy collapses onto a single runtime instance.\n */\nexport const ADMIN_VITE_DEDUPE_MODULES = [\n ...ADMIN_VITE_ALIAS_MODULES,\n ...ADMIN_VITE_SINGLETON_MODULES,\n] as const;\n\nexport { ADMIN_VITE_SINGLETON_MODULES };\n\n/**\n * Alias modules with exact versions declared in @strapi/admin dependencies (not peers).\n */\nexport const ADMIN_PINNED_ALIAS_MODULES = [\n '@reduxjs/toolkit',\n 'react-redux',\n '@strapi/design-system',\n 'lodash',\n 'invariant',\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const satisfies readonly AdminViteAliasModule[];\n"],"names":["ADMIN_VITE_ALIAS_MODULES","ADMIN_VITE_DEDUPE_MODULES","ADMIN_VITE_SINGLETON_MODULES"],"mappings":";;;;AAEA;;;;;UAMaA,wBAAAA,GAA2B;AACtC,IAAA,OAAA;AACA,IAAA,WAAA;AACA,IAAA,kBAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,kBAAA;AACA,IAAA,uBAAA;AACA,IAAA,yBAAA;AACA,IAAA,QAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;;;;;;;;;AASA,IAAA,WAAA;AACA,IAAA;;AAKF;;;UAIaC,yBAAAA,GAA4B;AACpCD,IAAAA,GAAAA,wBAAAA;AACAE,IAAAA,GAAAA;;;;;;;"}
1
+ {"version":3,"file":"admin-vite-alias-modules.js","sources":["../../../../src/node/core/admin-vite-alias-modules.ts"],"sourcesContent":["import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules';\n\n/**\n * Modules given explicit Vite resolve aliases (and included in resolve.dedupe) for the admin bundle.\n * Single source of truth for resolution contract tests.\n *\n * @internal\n */\nexport const ADMIN_VITE_ALIAS_MODULES = [\n 'react',\n 'react-dom',\n 'react-router-dom',\n 'styled-components',\n 'react-redux',\n '@reduxjs/toolkit',\n '@strapi/design-system',\n '@radix-ui/react-tooltip',\n 'lodash',\n 'invariant',\n 'prismjs',\n // react-dnd holds its DndContext in module scope, and @strapi/admin and\n // @strapi/content-manager each declare react-dnd@16.0.1 themselves. npm hoisting collapses\n // those onto one copy, so the DndProvider rendered by @strapi/admin's AuthenticatedLayout and\n // the useDragLayer call in the content-manager layout share a context only by accident of\n // hoisting. Any tree that keeps the copies separate (pnpm's strict isolation,\n // install-strategy=nested, a plugin pinning its own react-dnd) gives them two different\n // contexts and the Content Manager crashes on mount with\n // \"Invariant Violation: Expected drag drop context\" (#22392, #22792).\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const;\n\nexport type AdminViteAliasModule = (typeof ADMIN_VITE_ALIAS_MODULES)[number];\n\n/**\n * Modules deduplicated but deliberately NOT aliased.\n *\n * A local plugin (`config/plugins.ts` → `{ resolve: './src/plugins/x' }`) is imported into the\n * generated `.strapi/client/app.js` by a *relative* path, so Rollup treats its built\n * `dist/admin/index.mjs` as project source rather than as a dependency. The bare specifiers that\n * `@strapi/sdk-plugin` externalises into that file are therefore resolved from the plugin's own\n * directory first — and a local plugin installed with npm/pnpm has its own `node_modules`, because\n * the SDK template lists `@strapi/strapi` in the generated `devDependencies`.\n *\n * Without dedupe, every local plugin pulls a second copy of the whole admin application into the\n * build graph (`@strapi/admin`, `@strapi/content-manager`, `@strapi/upload`, … and their trees).\n * Measured on a stock app: one empty generated plugin added 4,940 modules (+99%) and ~840MB of\n * peak build heap, which is what makes `strapi build` OOM once a project has a handful of local\n * plugins (#22946).\n *\n * `@strapi/strapi` is the head of that chain — `@strapi/admin` and the core plugins are reached\n * *through* it — so deduping it alone collapses ~98% of the duplication.\n *\n * Only packages the app itself declares belong here. `resolve.dedupe` forces resolution from the\n * app root, so a package that lives solely inside `@strapi/admin`'s closure has no top-level\n * `node_modules` entry under pnpm's strict isolation, and deduping it would turn a working (if\n * duplicated) plugin import into an unresolved one. Every Strapi app depends on `@strapi/strapi`\n * directly, so it is always resolvable from the root. `@strapi/icons` and `react-intl` — which the\n * SDK plugin template imports directly — are `@strapi/admin` dependencies, so they are deliberately\n * left out; their trees are the known residual of this fix.\n *\n * Entries here MUST NOT be added to {@link ADMIN_VITE_ALIAS_MODULES}: `resolve.alias`\n * prefix-substitutes to a filesystem path and so bypasses the package's `exports` map.\n * - `@strapi/strapi` exports `./admin` (real target `dist/admin/index.mjs`) — the exact subpath\n * every plugin imports. Aliasing rewrites it to a non-existent `<pkgdir>/admin` and the build\n * dies with \"[vite:load-fallback] Could not load …/@strapi/strapi/admin\".\n * - `@strapi/icons` exports `./symbols` and would fail the same way, so aliasing the package\n * directory is no escape hatch for the modules excluded above either.\n * - `@strapi/admin` publishes no `.` export at all, so `getModulePath()` would throw\n * ERR_PACKAGE_PATH_NOT_EXPORTED at config time. It needs no entry here: deduping\n * `@strapi/strapi` already collapses it.\n * The contract tests in `__tests__/admin-vite-aliases.test.ts` enforce this separation.\n *\n * @internal\n */\nexport const ADMIN_VITE_DEDUPE_ONLY_MODULES = ['@strapi/strapi'] as const;\n\nexport type AdminViteDedupeOnlyModule = (typeof ADMIN_VITE_DEDUPE_ONLY_MODULES)[number];\n\n/**\n * Modules passed to Vite resolve.dedupe: the admin alias modules plus the CodeMirror singletons\n * (both of which are also aliased), plus the dedupe-only modules above, so every copy collapses\n * onto a single runtime instance.\n */\nexport const ADMIN_VITE_DEDUPE_MODULES = [\n ...ADMIN_VITE_ALIAS_MODULES,\n ...ADMIN_VITE_SINGLETON_MODULES,\n ...ADMIN_VITE_DEDUPE_ONLY_MODULES,\n] as const;\n\nexport { ADMIN_VITE_SINGLETON_MODULES };\n\n/**\n * Alias modules with exact versions declared in @strapi/admin dependencies (not peers).\n */\nexport const ADMIN_PINNED_ALIAS_MODULES = [\n '@reduxjs/toolkit',\n 'react-redux',\n '@strapi/design-system',\n 'lodash',\n 'invariant',\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const satisfies readonly AdminViteAliasModule[];\n"],"names":["ADMIN_VITE_ALIAS_MODULES","ADMIN_VITE_DEDUPE_ONLY_MODULES","ADMIN_VITE_DEDUPE_MODULES","ADMIN_VITE_SINGLETON_MODULES"],"mappings":";;;;AAEA;;;;;UAMaA,wBAAAA,GAA2B;AACtC,IAAA,OAAA;AACA,IAAA,WAAA;AACA,IAAA,kBAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,kBAAA;AACA,IAAA,uBAAA;AACA,IAAA,yBAAA;AACA,IAAA,QAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;;;;;;;;;AASA,IAAA,WAAA;AACA,IAAA;;AAKF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAyCaC,8BAAAA,GAAiC;AAAC,IAAA;;AAI/C;;;;UAKaC,yBAAAA,GAA4B;AACpCF,IAAAA,GAAAA,wBAAAA;AACAG,IAAAA,GAAAA,sDAAAA;AACAF,IAAAA,GAAAA;;;;;;;;"}
@@ -29,12 +29,57 @@ import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules.mjs
29
29
  'react-dnd-html5-backend'
30
30
  ];
31
31
  /**
32
- * Modules passed to Vite resolve.dedupe (and aliased): the admin alias modules plus the
33
- * CodeMirror singletons, so every copy collapses onto a single runtime instance.
32
+ * Modules deduplicated but deliberately NOT aliased.
33
+ *
34
+ * A local plugin (`config/plugins.ts` → `{ resolve: './src/plugins/x' }`) is imported into the
35
+ * generated `.strapi/client/app.js` by a *relative* path, so Rollup treats its built
36
+ * `dist/admin/index.mjs` as project source rather than as a dependency. The bare specifiers that
37
+ * `@strapi/sdk-plugin` externalises into that file are therefore resolved from the plugin's own
38
+ * directory first — and a local plugin installed with npm/pnpm has its own `node_modules`, because
39
+ * the SDK template lists `@strapi/strapi` in the generated `devDependencies`.
40
+ *
41
+ * Without dedupe, every local plugin pulls a second copy of the whole admin application into the
42
+ * build graph (`@strapi/admin`, `@strapi/content-manager`, `@strapi/upload`, … and their trees).
43
+ * Measured on a stock app: one empty generated plugin added 4,940 modules (+99%) and ~840MB of
44
+ * peak build heap, which is what makes `strapi build` OOM once a project has a handful of local
45
+ * plugins (#22946).
46
+ *
47
+ * `@strapi/strapi` is the head of that chain — `@strapi/admin` and the core plugins are reached
48
+ * *through* it — so deduping it alone collapses ~98% of the duplication.
49
+ *
50
+ * Only packages the app itself declares belong here. `resolve.dedupe` forces resolution from the
51
+ * app root, so a package that lives solely inside `@strapi/admin`'s closure has no top-level
52
+ * `node_modules` entry under pnpm's strict isolation, and deduping it would turn a working (if
53
+ * duplicated) plugin import into an unresolved one. Every Strapi app depends on `@strapi/strapi`
54
+ * directly, so it is always resolvable from the root. `@strapi/icons` and `react-intl` — which the
55
+ * SDK plugin template imports directly — are `@strapi/admin` dependencies, so they are deliberately
56
+ * left out; their trees are the known residual of this fix.
57
+ *
58
+ * Entries here MUST NOT be added to {@link ADMIN_VITE_ALIAS_MODULES}: `resolve.alias`
59
+ * prefix-substitutes to a filesystem path and so bypasses the package's `exports` map.
60
+ * - `@strapi/strapi` exports `./admin` (real target `dist/admin/index.mjs`) — the exact subpath
61
+ * every plugin imports. Aliasing rewrites it to a non-existent `<pkgdir>/admin` and the build
62
+ * dies with "[vite:load-fallback] Could not load …/@strapi/strapi/admin".
63
+ * - `@strapi/icons` exports `./symbols` and would fail the same way, so aliasing the package
64
+ * directory is no escape hatch for the modules excluded above either.
65
+ * - `@strapi/admin` publishes no `.` export at all, so `getModulePath()` would throw
66
+ * ERR_PACKAGE_PATH_NOT_EXPORTED at config time. It needs no entry here: deduping
67
+ * `@strapi/strapi` already collapses it.
68
+ * The contract tests in `__tests__/admin-vite-aliases.test.ts` enforce this separation.
69
+ *
70
+ * @internal
71
+ */ const ADMIN_VITE_DEDUPE_ONLY_MODULES = [
72
+ '@strapi/strapi'
73
+ ];
74
+ /**
75
+ * Modules passed to Vite resolve.dedupe: the admin alias modules plus the CodeMirror singletons
76
+ * (both of which are also aliased), plus the dedupe-only modules above, so every copy collapses
77
+ * onto a single runtime instance.
34
78
  */ const ADMIN_VITE_DEDUPE_MODULES = [
35
79
  ...ADMIN_VITE_ALIAS_MODULES,
36
- ...ADMIN_VITE_SINGLETON_MODULES
80
+ ...ADMIN_VITE_SINGLETON_MODULES,
81
+ ...ADMIN_VITE_DEDUPE_ONLY_MODULES
37
82
  ];
38
83
 
39
- export { ADMIN_VITE_ALIAS_MODULES, ADMIN_VITE_DEDUPE_MODULES, ADMIN_VITE_SINGLETON_MODULES };
84
+ export { ADMIN_VITE_ALIAS_MODULES, ADMIN_VITE_DEDUPE_MODULES, ADMIN_VITE_DEDUPE_ONLY_MODULES, ADMIN_VITE_SINGLETON_MODULES };
40
85
  //# sourceMappingURL=admin-vite-alias-modules.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-vite-alias-modules.mjs","sources":["../../../../src/node/core/admin-vite-alias-modules.ts"],"sourcesContent":["import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules';\n\n/**\n * Modules given explicit Vite resolve aliases (and included in resolve.dedupe) for the admin bundle.\n * Single source of truth for resolution contract tests.\n *\n * @internal\n */\nexport const ADMIN_VITE_ALIAS_MODULES = [\n 'react',\n 'react-dom',\n 'react-router-dom',\n 'styled-components',\n 'react-redux',\n '@reduxjs/toolkit',\n '@strapi/design-system',\n '@radix-ui/react-tooltip',\n 'lodash',\n 'invariant',\n 'prismjs',\n // react-dnd holds its DndContext in module scope, and @strapi/admin and\n // @strapi/content-manager each declare react-dnd@16.0.1 themselves. npm hoisting collapses\n // those onto one copy, so the DndProvider rendered by @strapi/admin's AuthenticatedLayout and\n // the useDragLayer call in the content-manager layout share a context only by accident of\n // hoisting. Any tree that keeps the copies separate (pnpm's strict isolation,\n // install-strategy=nested, a plugin pinning its own react-dnd) gives them two different\n // contexts and the Content Manager crashes on mount with\n // \"Invariant Violation: Expected drag drop context\" (#22392, #22792).\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const;\n\nexport type AdminViteAliasModule = (typeof ADMIN_VITE_ALIAS_MODULES)[number];\n\n/**\n * Modules passed to Vite resolve.dedupe (and aliased): the admin alias modules plus the\n * CodeMirror singletons, so every copy collapses onto a single runtime instance.\n */\nexport const ADMIN_VITE_DEDUPE_MODULES = [\n ...ADMIN_VITE_ALIAS_MODULES,\n ...ADMIN_VITE_SINGLETON_MODULES,\n] as const;\n\nexport { ADMIN_VITE_SINGLETON_MODULES };\n\n/**\n * Alias modules with exact versions declared in @strapi/admin dependencies (not peers).\n */\nexport const ADMIN_PINNED_ALIAS_MODULES = [\n '@reduxjs/toolkit',\n 'react-redux',\n '@strapi/design-system',\n 'lodash',\n 'invariant',\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const satisfies readonly AdminViteAliasModule[];\n"],"names":["ADMIN_VITE_ALIAS_MODULES","ADMIN_VITE_DEDUPE_MODULES","ADMIN_VITE_SINGLETON_MODULES"],"mappings":";;AAEA;;;;;UAMaA,wBAAAA,GAA2B;AACtC,IAAA,OAAA;AACA,IAAA,WAAA;AACA,IAAA,kBAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,kBAAA;AACA,IAAA,uBAAA;AACA,IAAA,yBAAA;AACA,IAAA,QAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;;;;;;;;;AASA,IAAA,WAAA;AACA,IAAA;;AAKF;;;UAIaC,yBAAAA,GAA4B;AACpCD,IAAAA,GAAAA,wBAAAA;AACAE,IAAAA,GAAAA;;;;;"}
1
+ {"version":3,"file":"admin-vite-alias-modules.mjs","sources":["../../../../src/node/core/admin-vite-alias-modules.ts"],"sourcesContent":["import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules';\n\n/**\n * Modules given explicit Vite resolve aliases (and included in resolve.dedupe) for the admin bundle.\n * Single source of truth for resolution contract tests.\n *\n * @internal\n */\nexport const ADMIN_VITE_ALIAS_MODULES = [\n 'react',\n 'react-dom',\n 'react-router-dom',\n 'styled-components',\n 'react-redux',\n '@reduxjs/toolkit',\n '@strapi/design-system',\n '@radix-ui/react-tooltip',\n 'lodash',\n 'invariant',\n 'prismjs',\n // react-dnd holds its DndContext in module scope, and @strapi/admin and\n // @strapi/content-manager each declare react-dnd@16.0.1 themselves. npm hoisting collapses\n // those onto one copy, so the DndProvider rendered by @strapi/admin's AuthenticatedLayout and\n // the useDragLayer call in the content-manager layout share a context only by accident of\n // hoisting. Any tree that keeps the copies separate (pnpm's strict isolation,\n // install-strategy=nested, a plugin pinning its own react-dnd) gives them two different\n // contexts and the Content Manager crashes on mount with\n // \"Invariant Violation: Expected drag drop context\" (#22392, #22792).\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const;\n\nexport type AdminViteAliasModule = (typeof ADMIN_VITE_ALIAS_MODULES)[number];\n\n/**\n * Modules deduplicated but deliberately NOT aliased.\n *\n * A local plugin (`config/plugins.ts` → `{ resolve: './src/plugins/x' }`) is imported into the\n * generated `.strapi/client/app.js` by a *relative* path, so Rollup treats its built\n * `dist/admin/index.mjs` as project source rather than as a dependency. The bare specifiers that\n * `@strapi/sdk-plugin` externalises into that file are therefore resolved from the plugin's own\n * directory first — and a local plugin installed with npm/pnpm has its own `node_modules`, because\n * the SDK template lists `@strapi/strapi` in the generated `devDependencies`.\n *\n * Without dedupe, every local plugin pulls a second copy of the whole admin application into the\n * build graph (`@strapi/admin`, `@strapi/content-manager`, `@strapi/upload`, … and their trees).\n * Measured on a stock app: one empty generated plugin added 4,940 modules (+99%) and ~840MB of\n * peak build heap, which is what makes `strapi build` OOM once a project has a handful of local\n * plugins (#22946).\n *\n * `@strapi/strapi` is the head of that chain — `@strapi/admin` and the core plugins are reached\n * *through* it — so deduping it alone collapses ~98% of the duplication.\n *\n * Only packages the app itself declares belong here. `resolve.dedupe` forces resolution from the\n * app root, so a package that lives solely inside `@strapi/admin`'s closure has no top-level\n * `node_modules` entry under pnpm's strict isolation, and deduping it would turn a working (if\n * duplicated) plugin import into an unresolved one. Every Strapi app depends on `@strapi/strapi`\n * directly, so it is always resolvable from the root. `@strapi/icons` and `react-intl` — which the\n * SDK plugin template imports directly — are `@strapi/admin` dependencies, so they are deliberately\n * left out; their trees are the known residual of this fix.\n *\n * Entries here MUST NOT be added to {@link ADMIN_VITE_ALIAS_MODULES}: `resolve.alias`\n * prefix-substitutes to a filesystem path and so bypasses the package's `exports` map.\n * - `@strapi/strapi` exports `./admin` (real target `dist/admin/index.mjs`) — the exact subpath\n * every plugin imports. Aliasing rewrites it to a non-existent `<pkgdir>/admin` and the build\n * dies with \"[vite:load-fallback] Could not load …/@strapi/strapi/admin\".\n * - `@strapi/icons` exports `./symbols` and would fail the same way, so aliasing the package\n * directory is no escape hatch for the modules excluded above either.\n * - `@strapi/admin` publishes no `.` export at all, so `getModulePath()` would throw\n * ERR_PACKAGE_PATH_NOT_EXPORTED at config time. It needs no entry here: deduping\n * `@strapi/strapi` already collapses it.\n * The contract tests in `__tests__/admin-vite-aliases.test.ts` enforce this separation.\n *\n * @internal\n */\nexport const ADMIN_VITE_DEDUPE_ONLY_MODULES = ['@strapi/strapi'] as const;\n\nexport type AdminViteDedupeOnlyModule = (typeof ADMIN_VITE_DEDUPE_ONLY_MODULES)[number];\n\n/**\n * Modules passed to Vite resolve.dedupe: the admin alias modules plus the CodeMirror singletons\n * (both of which are also aliased), plus the dedupe-only modules above, so every copy collapses\n * onto a single runtime instance.\n */\nexport const ADMIN_VITE_DEDUPE_MODULES = [\n ...ADMIN_VITE_ALIAS_MODULES,\n ...ADMIN_VITE_SINGLETON_MODULES,\n ...ADMIN_VITE_DEDUPE_ONLY_MODULES,\n] as const;\n\nexport { ADMIN_VITE_SINGLETON_MODULES };\n\n/**\n * Alias modules with exact versions declared in @strapi/admin dependencies (not peers).\n */\nexport const ADMIN_PINNED_ALIAS_MODULES = [\n '@reduxjs/toolkit',\n 'react-redux',\n '@strapi/design-system',\n 'lodash',\n 'invariant',\n 'react-dnd',\n 'react-dnd-html5-backend',\n] as const satisfies readonly AdminViteAliasModule[];\n"],"names":["ADMIN_VITE_ALIAS_MODULES","ADMIN_VITE_DEDUPE_ONLY_MODULES","ADMIN_VITE_DEDUPE_MODULES","ADMIN_VITE_SINGLETON_MODULES"],"mappings":";;AAEA;;;;;UAMaA,wBAAAA,GAA2B;AACtC,IAAA,OAAA;AACA,IAAA,WAAA;AACA,IAAA,kBAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,kBAAA;AACA,IAAA,uBAAA;AACA,IAAA,yBAAA;AACA,IAAA,QAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;;;;;;;;;AASA,IAAA,WAAA;AACA,IAAA;;AAKF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAyCaC,8BAAAA,GAAiC;AAAC,IAAA;;AAI/C;;;;UAKaC,yBAAAA,GAA4B;AACpCF,IAAAA,GAAAA,wBAAAA;AACAG,IAAAA,GAAAA,4BAAAA;AACAF,IAAAA,GAAAA;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/strapi",
3
- "version": "5.52.1",
3
+ "version": "5.52.2",
4
4
  "description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
5
5
  "keywords": [
6
6
  "strapi",
@@ -110,25 +110,25 @@
110
110
  },
111
111
  "dependencies": {
112
112
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.17",
113
- "@strapi/admin": "5.52.1",
114
- "@strapi/cloud-cli": "5.52.1",
115
- "@strapi/content-manager": "5.52.1",
116
- "@strapi/content-releases": "5.52.1",
117
- "@strapi/content-type-builder": "5.52.1",
118
- "@strapi/core": "5.52.1",
119
- "@strapi/data-transfer": "5.52.1",
120
- "@strapi/database": "5.52.1",
121
- "@strapi/email": "5.52.1",
122
- "@strapi/generators": "5.52.1",
123
- "@strapi/i18n": "5.52.1",
124
- "@strapi/logger": "5.52.1",
125
- "@strapi/openapi": "5.52.1",
126
- "@strapi/permissions": "5.52.1",
127
- "@strapi/review-workflows": "5.52.1",
128
- "@strapi/types": "5.52.1",
129
- "@strapi/typescript-utils": "5.52.1",
130
- "@strapi/upload": "5.52.1",
131
- "@strapi/utils": "5.52.1",
113
+ "@strapi/admin": "5.52.2",
114
+ "@strapi/cloud-cli": "5.52.2",
115
+ "@strapi/content-manager": "5.52.2",
116
+ "@strapi/content-releases": "5.52.2",
117
+ "@strapi/content-type-builder": "5.52.2",
118
+ "@strapi/core": "5.52.2",
119
+ "@strapi/data-transfer": "5.52.2",
120
+ "@strapi/database": "5.52.2",
121
+ "@strapi/email": "5.52.2",
122
+ "@strapi/generators": "5.52.2",
123
+ "@strapi/i18n": "5.52.2",
124
+ "@strapi/logger": "5.52.2",
125
+ "@strapi/openapi": "5.52.2",
126
+ "@strapi/permissions": "5.52.2",
127
+ "@strapi/review-workflows": "5.52.2",
128
+ "@strapi/types": "5.52.2",
129
+ "@strapi/typescript-utils": "5.52.2",
130
+ "@strapi/upload": "5.52.2",
131
+ "@strapi/utils": "5.52.2",
132
132
  "@types/nodemon": "1.19.6",
133
133
  "@vitejs/plugin-react-swc": "3.11.0",
134
134
  "boxen": "5.1.2",
@@ -180,11 +180,11 @@
180
180
  "@types/node": "20.19.41",
181
181
  "@types/webpack-bundle-analyzer": "4.7.0",
182
182
  "@types/webpack-hot-middleware": "2.25.12",
183
- "eslint-config-custom": "5.52.1",
183
+ "eslint-config-custom": "5.52.2",
184
184
  "jest": "29.6.0",
185
185
  "react": "18.3.1",
186
186
  "react-dom": "18.3.1",
187
- "tsconfig": "5.52.1",
187
+ "tsconfig": "5.52.2",
188
188
  "yalc": "1.0.0-pre.53"
189
189
  },
190
190
  "peerDependencies": {