@strapi/strapi 5.56.0 → 5.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/content-types/rename-field.d.ts +13 -0
- package/dist/cli/commands/content-types/rename-field.d.ts.map +1 -0
- package/dist/cli/commands/develop.d.ts.map +1 -1
- package/dist/cli/commands/enterprise/index.d.ts +7 -0
- package/dist/cli/commands/enterprise/index.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/action.d.ts +36 -0
- package/dist/cli/commands/enterprise/install/action.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/checklist-prompt.d.ts +14 -0
- package/dist/cli/commands/enterprise/install/checklist-prompt.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/constants.d.ts +7 -0
- package/dist/cli/commands/enterprise/install/constants.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/directories.d.ts +3 -0
- package/dist/cli/commands/enterprise/install/directories.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/discovery.d.ts +29 -0
- package/dist/cli/commands/enterprise/install/discovery.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/errors.d.ts +11 -0
- package/dist/cli/commands/enterprise/install/errors.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/install-packages.d.ts +11 -0
- package/dist/cli/commands/enterprise/install/install-packages.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/license.d.ts +27 -0
- package/dist/cli/commands/enterprise/install/license.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/package-manager.d.ts +17 -0
- package/dist/cli/commands/enterprise/install/package-manager.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/plugin-status.d.ts +44 -0
- package/dist/cli/commands/enterprise/install/plugin-status.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/registry-access.d.ts +55 -0
- package/dist/cli/commands/enterprise/install/registry-access.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/registry.d.ts +54 -0
- package/dist/cli/commands/enterprise/install/registry.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/selection.d.ts +62 -0
- package/dist/cli/commands/enterprise/install/selection.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/setup-links.d.ts +16 -0
- package/dist/cli/commands/enterprise/install/setup-links.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/versions.d.ts +42 -0
- package/dist/cli/commands/enterprise/install/versions.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/utils/commander.d.ts.map +1 -1
- package/dist/cli/utils/helpers.d.ts +1 -1
- package/dist/cli/utils/helpers.d.ts.map +1 -1
- package/dist/node/vite/config.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/build.js +4 -2
- package/dist/src/cli/commands/build.js.map +1 -1
- package/dist/src/cli/commands/build.mjs +4 -2
- package/dist/src/cli/commands/build.mjs.map +1 -1
- package/dist/src/cli/commands/content-types/rename-field.js +63 -0
- package/dist/src/cli/commands/content-types/rename-field.js.map +1 -0
- package/dist/src/cli/commands/content-types/rename-field.mjs +54 -0
- package/dist/src/cli/commands/content-types/rename-field.mjs.map +1 -0
- package/dist/src/cli/commands/develop.js +4 -2
- package/dist/src/cli/commands/develop.js.map +1 -1
- package/dist/src/cli/commands/develop.mjs +4 -2
- package/dist/src/cli/commands/develop.mjs.map +1 -1
- package/dist/src/cli/commands/enterprise/index.js +17 -0
- package/dist/src/cli/commands/enterprise/index.js.map +1 -0
- package/dist/src/cli/commands/enterprise/index.mjs +15 -0
- package/dist/src/cli/commands/enterprise/index.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/action.js +253 -0
- package/dist/src/cli/commands/enterprise/install/action.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/action.mjs +244 -0
- package/dist/src/cli/commands/enterprise/install/action.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.js +117 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.mjs +110 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/constants.js +16 -0
- package/dist/src/cli/commands/enterprise/install/constants.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/constants.mjs +9 -0
- package/dist/src/cli/commands/enterprise/install/constants.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/directories.js +23 -0
- package/dist/src/cli/commands/enterprise/install/directories.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/directories.mjs +17 -0
- package/dist/src/cli/commands/enterprise/install/directories.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/discovery.js +109 -0
- package/dist/src/cli/commands/enterprise/install/discovery.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/discovery.mjs +104 -0
- package/dist/src/cli/commands/enterprise/install/discovery.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/errors.js +26 -0
- package/dist/src/cli/commands/enterprise/install/errors.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/errors.mjs +22 -0
- package/dist/src/cli/commands/enterprise/install/errors.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.js +39 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.mjs +32 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/license.js +144 -0
- package/dist/src/cli/commands/enterprise/install/license.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/license.mjs +132 -0
- package/dist/src/cli/commands/enterprise/install/license.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.js +72 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs +62 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.js +47 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.mjs +45 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.js +293 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs +277 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry.js +98 -0
- package/dist/src/cli/commands/enterprise/install/registry.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry.mjs +95 -0
- package/dist/src/cli/commands/enterprise/install/registry.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/selection.js +148 -0
- package/dist/src/cli/commands/enterprise/install/selection.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/selection.mjs +141 -0
- package/dist/src/cli/commands/enterprise/install/selection.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.js +34 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.mjs +31 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/versions.js +127 -0
- package/dist/src/cli/commands/enterprise/install/versions.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/versions.mjs +107 -0
- package/dist/src/cli/commands/enterprise/install/versions.mjs.map +1 -0
- package/dist/src/cli/commands/export/action.js +4 -4
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/export/action.mjs +2 -2
- package/dist/src/cli/commands/export/action.mjs.map +1 -1
- package/dist/src/cli/commands/import/action.js +2 -2
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/action.mjs +1 -1
- package/dist/src/cli/commands/import/action.mjs.map +1 -1
- package/dist/src/cli/commands/index.js +4 -0
- package/dist/src/cli/commands/index.js.map +1 -1
- package/dist/src/cli/commands/index.mjs +24 -20
- package/dist/src/cli/commands/index.mjs.map +1 -1
- package/dist/src/cli/commands/routes/list.js +2 -2
- package/dist/src/cli/commands/routes/list.js.map +1 -1
- package/dist/src/cli/commands/routes/list.mjs +1 -1
- package/dist/src/cli/commands/routes/list.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +2 -2
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.mjs +1 -1
- package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
- package/dist/src/cli/utils/commander.js +1 -2
- package/dist/src/cli/utils/commander.js.map +1 -1
- package/dist/src/cli/utils/commander.mjs +1 -2
- package/dist/src/cli/utils/commander.mjs.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +2 -2
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.mjs +2 -2
- package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
- package/dist/src/cli/utils/helpers.js +6 -6
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/helpers.mjs +4 -4
- package/dist/src/cli/utils/helpers.mjs.map +1 -1
- package/dist/src/node/vite/config.js +0 -1
- package/dist/src/node/vite/config.js.map +1 -1
- package/dist/src/node/vite/config.mjs +0 -1
- package/dist/src/node/vite/config.mjs.map +1 -1
- package/package.json +23 -23
|
@@ -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\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 strapiDataTransfer.isIgnoredOfficialTransferType(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} (${\n TRANSFER_FILTER_PRESET_DESCRIPTIONS[\n type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS\n ]\n })`\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(\n ','\n )} 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${\n params ? JSON.stringify(params, null, 2) : ''\n }`;\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 ...strapiDataTransfer.getIgnoredOfficialTransferTypes(),\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","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","strapiDataTransfer","isIgnoredOfficialTransferType","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","includes","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","startsWith","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","getIgnoredOfficialTransferTypes","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":";;;;;;;;;;;;AAmBA,MAAM,EACJA,MAAAA,EAAQ,EAAEC,iCAAiC,EAAE,EAC9C,GAAGC,MAAAA;AAEJ,MAAMC,eAAAA,GAAkB,CAACC,QAAAA,EAAiBC,KAAAA,GAAQ,KAAK,GAAA;IACrD,MAAMC,kBAAAA,GAAqBF,QAAO,CAAC,CAAA,CAAE,CAACG,WAAW,EAAA,GAAKH,QAAAA,CAAQI,KAAK,CAAC,CAAA,CAAA;AAEpE,IAAA,IAAI,CAACH,KAAAA,EAAO;QACV,OAAOI,KAAAA,CAAMC,IAAI,CACfD,KAAAA,CAAME,KAAK,CAAC,CAAA,EAAGL,kBAAAA,CAAmB,yCAAyC,CAAC,CAAA,CAAA;AAEhF,IAAA;IAEA,OAAOG,KAAAA,CAAMC,IAAI,CAACD,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGN,kBAAAA,CAAmB,gBAAgB,CAAC,CAAA,CAAA;AACrE;AAEA,MAAMO,MAAM,CAACC,CAAAA,GAAAA;AACX,IAAA,OAAO,CAACA,CAAAA,GAAI,KAAK,GAAA,GAAM,EAAC,IAAKC,MAAAA,CAAOD,CAAAA,CAAAA;AACtC,CAAA;AAEA,MAAME,cAAAA,GAAiB,IAAA;AACrB,IAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;IAEjB,OACED,IAAAA,CAAKE,WAAW,EAAA,GAChBN,GAAAA,CAAII,KAAKG,QAAQ,EAAA,GAAK,CAAA,CAAA,GACtBP,GAAAA,CAAII,IAAAA,CAAKI,OAAO,MAChBR,GAAAA,CAAII,IAAAA,CAAKK,QAAQ,EAAA,CAAA,GACjBT,GAAAA,CAAII,KAAKM,UAAU,EAAA,CAAA,GACnBV,GAAAA,CAAII,IAAAA,CAAKO,UAAU,EAAA,CAAA;AAEvB,CAAA;AAEA,MAAMC,oBAAAA,GAAuB,IAAA;IAC3B,OAAO,CAAC,OAAO,EAAET,cAAAA,EAAAA,CAAAA,CAAkB;AACrC;AAOA,MAAMU,qBAAqB,CAACC,UAAAA,GAAAA;AAC1B,IAAA,IAAI,CAACA,UAAAA,EAAY;AACf,QAAA;AACF,IAAA;;IAGA,MAAMC,KAAAA,GAAQ,IAAIC,QAAAA,CAAM;QACtBC,IAAAA,EAAM;AAAC,YAAA,MAAA;AAAQ,YAAA,OAAA;AAAS,YAAA;SAAO,CAACC,GAAG,CAAC,CAACC,IAAAA,GAASvB,MAAMC,IAAI,CAACuB,IAAI,CAACD,IAAAA,CAAAA;AAChE,KAAA,CAAA;AAEA,IAAA,IAAIE,UAAAA,GAAa,CAAA;AACjB,IAAA,IAAIC,UAAAA,GAAa,CAAA;AAChBC,IAAAA,MAAAA,CAAOC,IAAI,CAACV,UAAAA,CAAAA,CAAmDW,OAAO,CAAC,CAACC,KAAAA,GAAAA;QACvE,MAAMC,IAAAA,GAAOb,UAAU,CAACY,KAAAA,CAAM;AAE9B,QAAA,IAAI,CAACC,IAAAA,EAAM;AACT,YAAA;AACF,QAAA;AAEAZ,QAAAA,KAAAA,CAAMa,IAAI,CAAC;AACT,YAAA;gBAAEC,MAAAA,EAAQ,MAAA;gBAAQC,OAAAA,EAASlC,KAAAA,CAAMC,IAAI,CAAC6B,KAAAA;AAAO,aAAA;AAC7C,YAAA;gBAAEG,MAAAA,EAAQ,OAAA;AAASC,gBAAAA,OAAAA,EAASH,KAAKI;AAAM,aAAA;AACvC,YAAA;gBAAEF,MAAAA,EAAQ,OAAA;gBAASC,OAAAA,EAAS,CAAA,EAAGE,cAAcL,IAAAA,CAAKM,KAAK,EAAE,CAAA,EAAG,EAAA,CAAA,CAAI,CAAC;AAAE;AACpE,SAAA,CAAA;AACDZ,QAAAA,UAAAA,IAAcM,KAAKM,KAAK;AACxBX,QAAAA,UAAAA,IAAcK,KAAKI,KAAK;QAExB,IAAIJ,IAAAA,CAAKO,UAAU,EAAE;YAClBX,MAAAA,CAAOC,IAAI,CAACG,IAAAA,CAAKO,UAAU,EACzBC,IAAI,EAAA,CACJV,OAAO,CAAC,CAACW,MAAAA,GAAAA;gBACR,IAAI,CAACT,IAAAA,CAAKO,UAAU,EAAE;AACpB,oBAAA;AACF,gBAAA;AAEA,gBAAA,MAAMG,OAAAA,GAAUV,IAAAA,CAAKO,UAAU,CAACE,MAAAA,CAAO;AAEvCrB,gBAAAA,KAAAA,CAAMa,IAAI,CAAC;AACT,oBAAA;wBAAEC,MAAAA,EAAQ,MAAA;wBAAQC,OAAAA,EAAS,CAAC,GAAG,EAAElC,KAAAA,CAAMC,IAAI,CAACyC,IAAI,CAACF,MAAAA,CAAAA,CAAAA;AAAU,qBAAA;AAC3D,oBAAA;wBAAEP,MAAAA,EAAQ,OAAA;AAASC,wBAAAA,OAAAA,EAASlC,KAAAA,CAAM0C,IAAI,CAACD,OAAAA,CAAQN,KAAK;AAAE,qBAAA;AACtD,oBAAA;wBAAEF,MAAAA,EAAQ,OAAA;AAASC,wBAAAA,OAAAA,EAASlC,KAAAA,CAAM0C,IAAI,CAAC,CAAC,CAAC,EAAEN,aAAAA,CAAcK,OAAAA,CAAQJ,KAAK,EAAE,CAAA,EAAG,EAAA,CAAA,CAAI,CAAC,CAAC;AAAE;AACpF,iBAAA,CAAA;AACH,YAAA,CAAA,CAAA;AACJ,QAAA;AACF,IAAA,CAAA,CAAA;AACAlB,IAAAA,KAAAA,CAAMa,IAAI,CAAC;AACT,QAAA;YAAEC,MAAAA,EAAQ,MAAA;AAAQC,YAAAA,OAAAA,EAASlC,KAAAA,CAAMC,IAAI,CAACC,KAAK,CAAC,OAAA;AAAS,SAAA;AACrD,QAAA;YAAE+B,MAAAA,EAAQ,OAAA;AAASC,YAAAA,OAAAA,EAASlC,KAAAA,CAAMC,IAAI,CAACC,KAAK,CAACwB,UAAAA;AAAY,SAAA;AACzD,QAAA;YAAEO,MAAAA,EAAQ,OAAA;YAASC,OAAAA,EAAS,CAAA,EAAGlC,KAAAA,CAAMC,IAAI,CAACC,KAAK,CAACkC,aAAAA,CAAcX,UAAAA,EAAY,CAAA,EAAG,EAAA,CAAA,CAAA,CAAK,CAAC;AAAE;AACtF,KAAA,CAAA;IAED,OAAON,KAAAA;AACT;AAEA,2GACMwB,wBAAAA,GAA2B;AAAC,IAAA,qBAAA;AAAuB,IAAA;AAAwB;AAEjF,MAAMC,oBAAAA,GAAuB,CAACC,IAAAA,GAC5BC,QAAAA,CAAmBC,6BAA6B,CAACF,IAAAA;AAEnD,MAAMG,gBAAgB,OAAO,EAC3BC,MAAM,EACNC,MAAAA,EAAAA,OAAM,EAIP,GAAA;IACC,IAAI;AACF,QAAA,MAAMD,OAAOD,aAAa,EAAA;AAC1B,QAAA,MAAME,QAAOC,OAAO,EAAA;AACtB,IAAA,CAAA,CAAE,OAAM;;QAEN,OAAO,KAAA;AACT,IAAA;IACA,OAAO,IAAA;AACT;AAEA,MAAMC,gBAAAA,GAAmB,OACvBC,OAAAA,EACAC,OAAAA,GAAU;AAAC,IAAA,QAAA;AAAU,IAAA,SAAA;AAAW,IAAA;AAAU,CAAA,GAAA;IAE1CA,OAAAA,CAAQzB,OAAO,CAAC,CAAC0B,MAAAA,GAAAA;;;AAGf5D,QAAAA,OAAAA,CAAQ6D,kBAAkB,CAACD,MAAAA,CAAAA;QAC3B5D,OAAAA,CAAQ8D,EAAE,CAACF,MAAAA,EAAQF,OAAAA,CAAAA;AACrB,IAAA,CAAA,CAAA;AACF;AAEA,MAAMK,oBAAAA,GAAuB,OAAOC,IAAAA,GAA8B,EAAE,GAAA;IAClE,IAAI;AACF,QAAA,MAAMC,aAAa,MAAMC,aAAAA,EAAAA;AACzB,QAAA,MAAMC,MAAMC,YAAAA,CAAa;AAAE,YAAA,GAAGJ,IAAI;AAAE,YAAA,GAAGC;AAAW,SAAA,CAAA;AAElDE,QAAAA,GAAAA,CAAIE,GAAG,CAACC,KAAK,GAAGN,IAAAA,CAAKO,QAAQ,IAAI,OAAA;QACjC,OAAO,MAAMJ,IAAIK,IAAI,EAAA;AACvB,IAAA,CAAA,CAAE,OAAOvE,KAAAA,EAAO;AACd,QAAA,IAAIA,iBAAiBwE,KAAAA,IAAS,MAAA,IAAUxE,SAASA,KAAAA,CAAMyE,IAAI,KAAK,cAAA,EAAgB;AAC9E,YAAA,MAAM,IAAID,KAAAA,CAAM,yEAAA,CAAA;AAClB,QAAA;QAEA,MAAMxE,KAAAA;AACR,IAAA;AACF;AAEA,MAAM0E,iBAAAA,GAAoB3C,MAAAA,CAAOC,IAAI,CAACnC,OAAmB8E,oBAAoB,CAAA;AAE7E,MAAMC,oBAAAA,GAAuB,eAAA;AAE7B,MAAMC,mCAAAA,GAGF;IACFvC,OAAAA,EAAS,qDAAA;IACTwC,KAAAA,EAAO,kEAAA;IACPC,MAAAA,EAAQ,yBAAA;AACR,IAAA,CAACH,uBACC;AACJ,CAAA;AAEA,MAAMI,4BAAAA,GAA+B;AAAIN,IAAAA,GAAAA,iBAAAA;AAAmBE,IAAAA;AAAqB,CAAA;AAEjF,MAAMK,wBAAAA,GAA2B,CAACC,KAAAA,GAChCA,KAAAA,CACGxD,GAAG,CACF,CAACuB,OACC,CAAA,EAAGA,IAAAA,CAAK,EAAE,EACR4B,mCAAmC,CACjC5B,IAAAA,CACD,CACF,CAAC,CAAC,CAAA,CAENkC,IAAI,CAAC,IAAA,CAAA;AAEV,MAAMC,6BAA6BH,wBAAAA,CAAyBD,4BAAAA,CAAAA;AAC5D,MAAMK,0BAA0BJ,wBAAAA,CAAyBP,iBAAAA,CAAAA;AAEzD,MAAMY,cAAAA,GAAiB,IAAIC,MAAAA,CACzB,sCAAA,EACA,CAAC,2DAA2D,CAAC,CAAA,CAE5DC,SAAS,CAACC,YAAAA,CAAAA,CACVC,QAAQ;AAEX,MAAMC,aAAAA,GAAgB,IAAIJ,MAAAA,CACxB,wCAAA,EACA,CAAC,cAAc,EAAEH,0BAAAA,CAAAA,CAA4B,CAAA,CAC7CI,SAAS,CAACI,uBAAAA,CAAwBZ,4BAAAA,EAA8B,+BAAA,CAAA;AAElE,MAAMa,UAAAA,GAAa,IAAIN,MAAAA,CACrB,uCAAA,EACA,CAAC,yCAAyC,EAAEF,uBAAAA,CAAAA,CAAyB,CAAA,CACrEG,SAAS,CAACI,uBAAAA,CAAwBlB,iBAAAA,EAAmB,4BAAA,CAAA;AAEvD,MAAMoB,yBAAAA,GAA4B,IAAIP,MAAAA,CACpC,gDAAA,EACA,CAAC,oDAAoD,EAAExC,wBAAAA,CAAyBoC,IAAI,CAClF,GAAA,CAAA,CACA,kHAAkH,CAAC,CAAA,CACrHK,SAAS,CAACO,SAAAA;AAEZ,MAAMC,yBAAyB,IAAIT,MAAAA,CACjC,6CAAA,EACA,qFAAA,CAAA,CACAC,SAAS,CAACO,SAAAA;AAmBZ,MAAME,sBAAsB,CAACC,OAAAA,GAAAA;AAC3B,IAAA,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGF,QAAQnC,IAAI,EAAA;IACtC,IAAI,CAACqC,IAAAA,IAAQ,CAACD,OAAAA,EAAS;AACrB,QAAA;AACF,IAAA;AAEA,IAAA,MAAME,aAAAA,GAAgBD,IAAAA,CAAKE,MAAM,CAAC,CAAC7F,CAAAA,GAAAA;AACjC,QAAA,OAAO0F,OAAAA,CAAQI,OAAO,CAAC9F,CAAAA,CAAAA,KAAO,EAAC;AACjC,IAAA,CAAA,CAAA;IACA,IAAI4F,aAAAA,CAAcG,MAAM,GAAG,CAAA,EAAG;AAC5BC,QAAAA,QAAAA,CACE,GACA,CAAC,4FAA4F,EAAEJ,aAAAA,CAAclB,IAAI,CAC/G,GAAA,CAAA,CAAA,CACC,CAAA;AAEP,IAAA;AACF;AAEA,MAAMuB,qCAAqC,CAACR,OAAAA,GAAAA;AAC1C,IAAA,MAAM,EAAES,mBAAmB,EAAEC,gBAAgB,EAAE,GAAGV,QAAQnC,IAAI,EAAA;AAE9D,IAAA,IAAI,CAAC4C,mBAAAA,EAAqBH,MAAAA,IAAU,CAACI,kBAAkBJ,MAAAA,EAAQ;AAC7D,QAAA;AACF,IAAA;IAEA,MAAMK,OAAAA,GAAUF,oBAAoBL,MAAM,CAAC,CAACQ,GAAAA,GAAgBF,gBAAAA,CAAiBG,QAAQ,CAACD,GAAAA,CAAAA,CAAAA;IACtF,IAAID,OAAAA,CAAQL,MAAM,GAAG,CAAA,EAAG;AACtBC,QAAAA,QAAAA,CACE,GACA,CAAC,2GAA2G,EAAEI,OAAAA,CAAQ1B,IAAI,CACxH,GAAA,CAAA,CAAA,CACC,CAAA;AAEP,IAAA;AACF;AAEA,MAAM6B,uBAAAA,GAA0B,CAACC,IAAAA,EAAgB3D,OAAAA,EAAqB4D,IAAAA,GAAAA;AACpE,IAAA,MAAMC,QAAQ,IAAIC,GAAAA,CAAIrF,OAAOC,IAAI,CAACsB,QAAO+D,YAAY,CAAA,CAAA;IACrD,MAAMC,OAAAA,GAAUL,KAAKX,MAAM,CAAC,CAACQ,GAAAA,GAAQ,CAACK,KAAAA,CAAMI,GAAG,CAACT,GAAAA,CAAAA,CAAAA;IAEhD,IAAIQ,OAAAA,CAAQd,MAAM,GAAG,CAAA,EAAG;QACtBC,QAAAA,CAAS,CAAA,EAAG,CAAC,4BAA4B,EAAES,IAAAA,CAAK,EAAE,EAAEI,OAAAA,CAAQnC,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAC1E,IAAA;AACF,CAAA;AAEA,MAAMqC,2CAAAA,GAA8C,CAClDzD,IAAAA,EACAT,OAAAA,GAAAA;IAEA,IAAIS,IAAAA,CAAK4C,mBAAmB,EAAEH,MAAAA,EAAQ;QACpCQ,uBAAAA,CAAwBjD,IAAAA,CAAK4C,mBAAmB,EAAErD,OAAAA,EAAQ,yBAAA,CAAA;AAC5D,IAAA;IAEA,IAAIS,IAAAA,CAAK6C,gBAAgB,EAAEJ,MAAAA,EAAQ;QACjCQ,uBAAAA,CAAwBjD,IAAAA,CAAK6C,gBAAgB,EAAEtD,OAAAA,EAAQ,sBAAA,CAAA;AACzD,IAAA;AACF;AAEA,MAAMmE,kCAAAA,GAAqC,CACzCX,GAAAA,EACA/C,IAAAA,GAAAA;AAEA,IAAA,IAAIf,qBAAqB8D,GAAAA,CAAAA,EAAM;QAC7B,OAAO,KAAA;AACT,IAAA;AAEA,IAAA,IAAI/C,IAAAA,CAAK4C,mBAAmB,EAAEI,QAAAA,CAASD,GAAAA,CAAAA,EAAM;QAC3C,OAAO,KAAA;AACT,IAAA;IAEA,IAAI/C,IAAAA,CAAK6C,gBAAgB,EAAEJ,MAAAA,EAAQ;AACjC,QAAA,OAAOzC,IAAAA,CAAK6C,gBAAgB,CAACG,QAAQ,CAACD,GAAAA,CAAAA;AACxC,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMY,qBAAqB,CAAC3D,IAAAA,GAAAA;AAC1B,IAAA,OAAO,CAAC4D,MAAAA,GAA6BF,kCAAAA,CAAmCE,MAAAA,CAAO1E,IAAI,EAAEc,IAAAA,CAAAA;AACvF;AAEA,MAAM6D,mBAAmB,CAAC7D,IAAAA,GAAAA;AACxB,IAAA,OAAO,CAAC8D,IAAAA,GACNJ,kCAAAA,CAAmCI,IAAAA,CAAKC,IAAI,CAAC7E,IAAI,EAAEc,IAAAA,CAAAA,IACnD0D,kCAAAA,CAAmCI,IAAAA,CAAKE,KAAK,CAAC9E,IAAI,EAAEc,IAAAA,CAAAA;AACxD;AAEA,MAAMiE,uBAAAA,GAA0B,CAACjE,IAAAA,IAAoC;QACnEkE,KAAAA,EAAO;AAAC,YAAA;AAAE3B,gBAAAA,MAAAA,EAAQsB,gBAAAA,CAAiB7D,IAAAA;AAAM;AAAE,SAAA;QAC3CmE,QAAAA,EAAU;AAAC,YAAA;AAAE5B,gBAAAA,MAAAA,EAAQoB,kBAAAA,CAAmB3D,IAAAA;AAAM;AAAE;KAClD;AAEA,MAAMoE,WAAAA,GAAc;AAClBC,IAAAA,KAAAA,EAAOhI,MAAMG,GAAG;AAChBP,IAAAA,KAAAA,EAAOI,MAAMG,GAAG;AAChB8H,IAAAA,KAAAA,EAAOjI,MAAMkI;AACf,CAAA;AAEA,MAAMC,gBAAAA,GAAmB,CACvBC,SAAAA,EACAC,OAAAA,GAAAA;IAEA,IAAIC,MAAAA;IACJ,IAAIC,eAAAA;AAEJ,IAAA,MAAMC,SAAAA,GAAY,IAAA;AAChB,QAAA,IAAI,CAACF,MAAAA,EAAQ;YACXC,eAAAA,GAAkB,CAAA,EAAGH,UAAU,CAAC,EAAE3H,KAAKgI,GAAG,EAAA,CAAG,IAAI,CAAC;AAClD,YAAA,MAAMC,kBAAkBC,IAAAA,CAAKC,OAAO,CAACjJ,OAAAA,CAAQkJ,GAAG,EAAA,EAAIN,eAAAA,CAAAA;AAEpDD,YAAAA,MAAAA,GAASQ,YAAAA,CACPC,OAAAA,CAAQC,6BAA6B,CACnCT,eAAAA,EACA;gBACEtE,KAAAA,EAAO,MAAA;AACPgF,gBAAAA,MAAAA,EAAQC,OAAAA,EAASC;aACnB,EACA;AACEC,gBAAAA,YAAAA,EAAcf,UAAU,MAAA,GAAS;AACnC,aAAA,CAAA,CAAA;YAIJC,MAAAA,CAAOe,IAAI,CACT,CAAC,CAAC,EAAEjB,UAAU,uBAAuB,EAAEM,eAAAA,CAAgB,8DAA8D,CAAC,CAAA;AAE1H,QAAA;QACA,OAAOJ,MAAAA;AACT,IAAA,CAAA;AAEA,IAAA,OAAO,CAAC,EAAEgB,OAAO,EAAEC,IAAI,EAAE,GAAA;QACvB,IAAI;AACF,YAAA,IAAIA,SAAS,OAAA,EAAS;AACpB,gBAAA,MAAM,EAAEC,OAAO,EAAEC,QAAAA,GAAW,OAAO,EAAE,GAAGH,OAAAA;gBAExC,MAAMI,aAAAA,GAAgB3B,WAAW,CAAC0B,QAAAA,CAAS;gBAC3C,MAAME,YAAAA,GAAeD,aAAAA,CAAc,CAAC,CAAC,EAAED,SAAS3J,WAAW,EAAA,CAAG,EAAE,EAAE0J,OAAAA,CAAAA,CAAS,CAAA;AAE3EhB,gBAAAA,SAAAA,EAAAA,CAAY5I,KAAK,CAAC+J,YAAAA,CAAAA;AACpB,YAAA;AACA,YAAA,IAAIJ,SAAS,MAAA,EAAQ;AACnB,gBAAA,MAAM,EAAEC,OAAO,EAAEI,MAAM,EAAEC,MAAM,EAAE,GAAGP,OAAAA;AAEpC,gBAAA,MAAMQ,MAAM,CAAC,CAAC,EAAED,MAAAA,IAAU,UAAA,CAAW,EAAE,EAAEL,OAAAA,CAAQ,EAAE,EACjDI,SAASG,IAAAA,CAAKC,SAAS,CAACJ,MAAAA,EAAQ,IAAA,EAAM,KAAK,EAAA,CAAA,CAC3C;AAEFpB,gBAAAA,SAAAA,EAAAA,CAAYa,IAAI,CAACS,GAAAA,CAAAA;AACnB,YAAA;AACA,YAAA,IAAIP,SAAS,SAAA,EAAW;AACtB,gBAAA,MAAM,EAAEM,MAAM,EAAEL,OAAO,EAAE,GAAGF,OAAAA;gBAE5Bd,SAAAA,EAAAA,CAAYyB,IAAI,CAAC,CAAC,CAAC,EAAEJ,MAAAA,IAAU,UAAA,CAAW,EAAE,EAAEL,OAAAA,CAAAA,CAAS,CAAA;AACzD,YAAA;AACF,QAAA,CAAA,CAAE,OAAOU,GAAAA,EAAK;AACZ1B,YAAAA,SAAAA,EAAAA,CAAY5I,KAAK,CAACsK,GAAAA,CAAAA;AACpB,QAAA;AACF,IAAA,CAAA;AACF;AAiBA,wGACA,MAAMC,2BAAAA,GAA8B,IAAInD,GAAAA,CAAsC;AAC5E,IAAA,UAAA;AACA,IAAA;AACD,CAAA,CAAA;AAED,MAAMoD,UAAAA,GAAa,QAAA;AAEnB;;;AAGC,IACD,MAAMC,aAAAA,GAAgB,CAACC,SAAAA,EAAmBC,IAAAA,EAAcC,KAAAA,GAAAA;AACtD,IAAA,IAAIF,YAAY,GAAA,IAAOC,IAAAA,IAAQ,KAAKC,KAAAA,IAAS,CAAA,IAAKD,QAAQC,KAAAA,EAAO;QAC/D,OAAO,IAAA;AACT,IAAA;AACA,IAAA,MAAMC,YAAYF,IAAAA,GAAOD,SAAAA;AACzB,IAAA,MAAMI,YAAYF,KAAAA,GAAQD,IAAAA;AAC1B,IAAA,MAAMI,QAAQD,SAAAA,GAAYD,SAAAA;IAC1B,IAAI,CAACG,OAAOC,QAAQ,CAACF,UAAUA,KAAAA,IAAS,CAAA,IAAKA,SAASP,UAAAA,EAAY;QAChE,OAAO,IAAA;AACT,IAAA;IACA,OAAOO,KAAAA;AACT,CAAA;AAEA,MAAMG,cAAAA,GAAiB,CAACC,cAAAA,GAA0B,EAAa,GAAA;AAC7D,IAAA,MAAMC,OAAAA,GAAUD,cAAAA;IAChB,MAAME,YAAAA,GAAe,CAACnJ,KAAAA,EAAyCoJ,IAAAA,GAAAA;AAC7D,QAAA,IAAI,EAAEpJ,KAAAA,IAASkJ,OAAM,CAAA,EAAI;YACvBG,YAAAA,CAAarJ,KAAAA,CAAAA;AACf,QAAA;QAEA,MAAMsJ,SAAAA,GAAYF,IAAI,CAACpJ,KAAAA,CAAM;AAC7B,QAAA,MAAMuJ,WAAAA,GAAcD,SAAAA,EAAWE,SAAAA,GAC1BF,CAAAA,SAAAA,EAAWG,OAAAA,IAAW9K,IAAAA,CAAKgI,GAAG,EAAC,IAAK2C,SAAAA,CAAUE,SAAS,GACxD,CAAA;QACJ,MAAMjJ,KAAAA,GAAQ+I,WAAW/I,KAAAA,IAAS,CAAA;QAClC,MAAMF,KAAAA,GAAQiJ,WAAWjJ,KAAAA,IAAS,CAAA;AAClC,QAAA,MAAMV,aAAa2J,SAAAA,EAAW3J,UAAAA;AAC9B,QAAA,MAAM+J,aAAaJ,SAAAA,EAAWI,UAAAA;QAE9B,MAAMC,UAAAA,GACJD,UAAAA,IAAc,IAAA,IAAQA,UAAAA,GAAa,CAAA,GAAI,CAAA,EAAGrJ,KAAAA,CAAM,GAAG,EAAEqJ,UAAAA,CAAAA,CAAY,GAAGlL,MAAAA,CAAO6B,KAAAA,CAAAA;AAC7E,QAAA,MAAMuJ,WAAAA,GACJjK,UAAAA,IAAc,IAAA,IAAQA,UAAAA,GAAa,CAAA,GAC/B,CAAA,EAAGW,aAAAA,CAAcC,KAAAA,CAAAA,CAAO,GAAG,EAAED,aAAAA,CAAcX,UAAAA,CAAAA,CAAAA,CAAa,GACxDW,aAAAA,CAAcC,KAAAA,CAAAA;AAEpB,QAAA,MAAMsJ,KAAAA,GAAkB;AAAC,YAAA,CAAA,EAAG7J,KAAAA,CAAM,EAAE,EAAE2J,UAAAA,CAAW,YAAY,CAAC;AAAEC,YAAAA;AAAY,SAAA;AAE5E,QAAA,IAAIL,WAAAA,GAAc,CAAA,IAAK,CAACD,SAAAA,EAAWG,OAAAA,EAAS;YAC1C,IAAIpB,2BAAAA,CAA4BhD,GAAG,CAACrF,KAAAA,CAAAA,EAAQ;gBAC1C,MAAM8J,WAAAA,GAAc,KAACzJ,GAAQ,IAAA,GAAQkJ,WAAAA;gBACrCM,KAAAA,CAAM3J,IAAI,CAAC,CAAA,EAAG4J,WAAAA,CAAYC,OAAO,CAAC,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAA;YAChD,CAAA,MAAO;gBACLF,KAAAA,CAAM3J,IAAI,CAAC,CAAA,EAAGI,aAAAA,CAAc,KAACC,GAAQ,IAAA,GAAQgJ,WAAAA,CAAAA,CAAa,EAAE,CAAC,CAAA;AAC/D,YAAA;AACF,QAAA;AAEA,QAAA,IAAIV,KAAAA,GAAuB,IAAA;QAC3B,IAAI,CAACS,WAAWG,OAAAA,EAAS;AACvB,YAAA,IAAIpB,2BAAAA,CAA4BhD,GAAG,CAACrF,KAAAA,CAAAA,IAAU0J,cAAc,IAAA,EAAM;gBAChEb,KAAAA,GAAQN,aAAAA,CAAcgB,aAAalJ,KAAAA,EAAOqJ,UAAAA,CAAAA;YAC5C,CAAA,MAAO,IAAI/J,cAAc,IAAA,EAAM;gBAC7BkJ,KAAAA,GAAQN,aAAAA,CAAcgB,aAAahJ,KAAAA,EAAOZ,UAAAA,CAAAA;AAC5C,YAAA;AACF,QAAA;AACAkK,QAAAA,KAAAA,CAAM3J,IAAI,CAAC8J,mCAAAA,CAAoCT,WAAAA,IAAe,CAAA,EAAGV,KAAAA,CAAAA,CAAAA;AAEjEK,QAAAA,OAAO,CAAClJ,KAAAA,CAAM,CAACP,IAAI,GAAGoK,KAAAA,CAAM5G,IAAI,CAACgH,2BAAAA,CAAAA;QAEjC,OAAOf,OAAO,CAAClJ,KAAAA,CAAM;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMqJ,eAAe,CAACrJ,KAAAA,GAAAA;QACpBH,MAAAA,CAAOqK,MAAM,CAAChB,OAAAA,EAAS;AAAE,YAAA,CAAClJ,QAAQmK,GAAAA;AAAM,SAAA,CAAA;QACxC,OAAOjB,OAAO,CAAClJ,KAAAA,CAAM;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMoK,YAAY,CAACpK,KAAAA,GAAAA;QACjB,OAAOkJ,OAAO,CAAClJ,KAAAA,CAAM;AACvB,IAAA,CAAA;IAEA,OAAO;AACLmJ,QAAAA,YAAAA;AACAE,QAAAA,YAAAA;AACAe,QAAAA;AACF,KAAA;AACF;AAEA;;IAGA,MAAMC,8BAA8B,CAAClJ,MAAAA,GAAAA;IACnC,OAAO;QACLmJ,eAAAA,EAAiB;AACfC,YAAAA,MAAAA,EAAQpJ,QAAQqJ,cAAAA,EAAgBC,IAAAA;AAChCC,YAAAA,WAAAA,EAAavJ,QAAQwJ,mBAAAA,EAAqBF;AAC5C;AACF,KAAA;AACF;AAEA;;IAGA,MAAMG,iBAAiB,CACrBzJ,MAAAA,EACA,EACE0J,KAAK,EACLC,MAAM,EAIP,GAAA;AAED,IAAA,OAAO,OACLC,OAAAA,EACAC,IAAAA,GAAAA;;QAGA1J,gBAAAA,CAAiB,UAAA;AACf,YAAA,MAAMJ,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA;YAC5DmD,QAAAA,CAAS,CAAA,EAAG3G,gBAAgBkN,MAAAA,EAAQ,IAAA,CAAA,CAAA;AACtC,QAAA,CAAA,CAAA;QAEA,IAAIG,eAAAA;AACJ,QAAA,MAAMV,MAAAA,GAAS,kBAAA;QAEf1K,MAAAA,CAAOqL,OAAO,CAACH,OAAAA,CAAQI,KAAK,CAAA,CAAEpL,OAAO,CAAC,CAAC,CAAC6E,GAAAA,EAAKuG,KAAAA,CAAM,GAAA;YACjD,KAAK,MAAMC,QAAQD,KAAAA,CAAO;AACxB,gBAAA,MAAMtE,IAAAA,GAAO;AAACjC,oBAAAA;AAAI,iBAAA,CAACyG,MAAM,CAACD,IAAAA,CAAKvE,IAAI,CAAA,CAAE5D,IAAI,CAAC,GAAA,CAAA;gBAC1C,MAAMqI,OAAAA,GAAUF,KAAKvE,IAAI,CAACuE,KAAKvE,IAAI,CAACvC,MAAM,GAAG,CAAA,CAAE;;gBAG/C,IACEM,GAAAA,KAAQ,uCACRA,GAAAA,KAAQ,yCAAA,IACR0G,SAASC,UAAAA,CAAW,cAAA,CAAA,IACpBD,OAAAA,EAASC,UAAAA,CAAW,iBAAA,CAAA,EACpB;AACAN,oBAAAA,eAAAA,GAAkBG,KAAK3D,IAAI;AAC7B,gBAAA,CAAA,MAEK,IAAI2D,IAAAA,CAAK3D,IAAI,KAAK,OAAA,EAAS;AAC9BtG,oBAAAA,MAAAA,CAAOqK,aAAa,CAACtN,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGH,KAAAA,CAAMC,IAAI,CAAC0I,IAAAA,CAAAA,CAAM,yBAAyB,CAAC,CAAA,EAAG0D,MAAAA,CAAAA;AAClF,gBAAA,CAAA,MAAO,IAAIa,IAAAA,CAAK3D,IAAI,KAAK,SAAA,EAAW;AAClCtG,oBAAAA,MAAAA,CAAOqK,aAAa,CAClBtN,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGH,KAAAA,CAAMC,IAAI,CAAC0I,IAAAA,CAAAA,CAAM,8BAA8B,CAAC,CAAA,EAC7D0D,MAAAA,CAAAA;AAEJ,gBAAA,CAAA,MAAO,IAAIa,IAAAA,CAAK3D,IAAI,KAAK,UAAA,EAAY;AACnCtG,oBAAAA,MAAAA,CAAOqK,aAAa,CAACtN,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGH,KAAAA,CAAMC,IAAI,CAAC0I,IAAAA,CAAAA,CAAM,0BAA0B,CAAC,CAAA,EAAG0D,MAAAA,CAAAA;AACnF,gBAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAA;;AAGA,QAAA,IAAIU,oBAAoB,OAAA,EAAS;YAC/B9J,MAAAA,CAAOqK,aAAa,CAACtN,KAAAA,CAAMG,GAAG,CAAC,CAAC,iDAAiD,CAAC,CAAA,EAAGkM,MAAAA,CAAAA;QACvF,CAAA,MAAO,IAAIU,oBAAoB,SAAA,EAAW;YACxC9J,MAAAA,CAAOqK,aAAa,CAClBtN,KAAAA,CAAMG,GAAG,CAAC,CAAC,sDAAsD,CAAC,CAAA,EAClEkM,MAAAA,CAAAA;QAEJ,CAAA,MAAO,IAAIU,oBAAoB,UAAA,EAAY;YACzC9J,MAAAA,CAAOsK,KAAK,CACV,IAAI/N,iCAAAA,CAAkC,qDAAA,CAAA,CAAA;AAE1C,QAAA;QAEA,MAAMgO,SAAAA,GAAY,MAAMC,cAAAA,CACtB,gJAAA,EACA;AACEd,YAAAA;AACF,SAAA,CAAA;;AAIFvJ,QAAAA,gBAAAA,CAAiB,IAAMJ,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA,CAAA;AAE7E,QAAA,IAAIsK,SAAAA,EAAW;AACbX,YAAAA,OAAAA,CAAQa,YAAY,GAAGC,KAAAA,CAAMd,QAAQI,KAAK,EAAEJ,QAAQa,YAAY,CAAA;AAClE,QAAA;AAEA,QAAA,OAAOZ,IAAAA,CAAKD,OAAAA,CAAAA;AACd,IAAA,CAAA;AACF;AAEA,MAAMe,yBAAyB,CAC7B3K,MAAAA,EACA,EACE0J,KAAK,EACLC,MAAM,EAIP,GAAA;AAED,IAAA,OAAO,OACLC,OAAAA,EACAC,IAAAA,GAAAA;;QAGA1J,gBAAAA,CAAiB,UAAA;AACf,YAAA,MAAMJ,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA;YAC5DmD,QAAAA,CAAS,CAAA,EAAG3G,gBAAgBkN,MAAAA,EAAQ,IAAA,CAAA,CAAA;AACtC,QAAA,CAAA,CAAA;AAEAiB,QAAAA,OAAAA,CAAQ5D,IAAI,CACV,0IAAA,CAAA;QAEF,MAAMuD,SAAAA,GAAY,MAAMC,cAAAA,CACtB,uEAAA,EACA;AACEd,YAAAA;AACF,SAAA,CAAA;AAGF,QAAA,IAAIa,SAAAA,EAAW;AACbX,YAAAA,OAAAA,CAAQiB,MAAM,GAAG,IAAA;AACnB,QAAA;;AAGA1K,QAAAA,gBAAAA,CAAiB,IAAMJ,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA,CAAA;AAC7E,QAAA,OAAO4J,IAAAA,CAAKD,OAAAA,CAAAA;AACd,IAAA,CAAA;AACF;AAEA,MAAMkB,eAAAA,GAAkB,CACtBpK,IAAAA,EACAqK,QAAAA,GAAAA;AAEA,IAAA,IAAIrK,IAAAA,CAAKoC,OAAO,EAAEY,QAAAA,CAASqH,QAAAA,CAAAA,EAAW;QACpC,OAAO,IAAA;AACT,IAAA;IACA,IAAIrK,IAAAA,CAAKqC,IAAI,EAAE;AACb,QAAA,OAAO,CAACrC,IAAAA,CAAKqC,IAAI,CAACW,QAAQ,CAACqH,QAAAA,CAAAA;AAC7B,IAAA;IAEA,OAAO,KAAA;AACT;AAEA,MAAMC,oCAAAA,GAAuC,CAACtK,IAAAA,GAC5ChB,wBAAAA,CAAyBuL,KAAK,CAAC,CAACxH,GAAAA,GAAQW,kCAAAA,CAAmCX,GAAAA,EAAK/C,IAAAA,CAAAA;AAElF,MAAMwK,0CAAAA,GAA6C,CAACxK,IAAAA,GAClDhB,wBAAAA,CAAyBuL,KAAK,CAAC,CAACxH,GAAAA,GAAQ,CAACW,kCAAAA,CAAmCX,GAAAA,EAAK/C,IAAAA,CAAAA;AAEnF,MAAMyK,oBAAAA,GAAuB,CAACzK,IAAAA,GAC5B,CAACoK,gBAAgBpK,IAAAA,EAAM,SAAA,CAAA;AAEzB,MAAM0K,2BAA2B,CAAC1K,IAAAA,GAAAA;AAChC,IAAA,IAAI,CAACA,IAAAA,CAAKoC,OAAO,EAAEY,SAASnC,oBAAAA,CAAAA,EAAuB;AACjD,QAAA;AACF,IAAA;IAEA,MAAMuB,OAAAA,GAAUpC,KAAKoC,OAAO,CAACG,MAAM,CACjC,CAACnE,OAASA,IAAAA,KAASyC,oBAAAA,CAAAA;AAGrBb,IAAAA,IAAAA,CAAKoC,OAAO,GAAGA,OAAAA;AAEf,IAAA,IAAI,CAACpC,IAAAA,CAAKoC,OAAO,CAACY,QAAQ,CAAC,OAAA,CAAA,EAAU;QACnChD,IAAAA,CAAKoC,OAAO,CAAC/D,IAAI,CAAC,OAAA,CAAA;AACpB,IAAA;AAEA,IAAA,MAAMuE,sBAAsB,IAAIS,GAAAA,CAAIrD,IAAAA,CAAK4C,mBAAmB,IAAI,EAAE,CAAA;IAClE,KAAK,MAAMG,OAAO/D,wBAAAA,CAA0B;AAC1C4D,QAAAA,mBAAAA,CAAoB+H,GAAG,CAAC5H,GAAAA,CAAAA;AAC1B,IAAA;AACA/C,IAAAA,IAAAA,CAAK4C,mBAAmB,GAAG;AAAIA,QAAAA,GAAAA;AAAoB,KAAA;AACrD,CAAA;AAEA,MAAMgI,4CAA4C,CAAC5K,IAAAA,GAAAA;AACjD,IAAA,IACEA,KAAK6K,iBAAiB,IACtB,CAACJ,oBAAAA,CAAqBzK,SACtBA,IAAAA,CAAKqC,IAAI,EAAEW,QAAAA,CAAS,YACpBoH,eAAAA,CAAgBpK,IAAAA,EAAM,OAAA,CAAA,IACtB,CAACwK,2CAA2CxK,IAAAA,CAAAA,EAC5C;AACA,QAAA;AACF,IAAA;AAEAA,IAAAA,IAAAA,CAAKoC,OAAO,GAAG;WAAKpC,IAAAA,CAAKoC,OAAO,IAAI,EAAE;AAAG,QAAA;AAAQ,KAAA;AACjDpC,IAAAA,IAAAA,CAAK6K,iBAAiB,GAAG,IAAA;AAC3B,CAAA;AAEA,MAAMC,iCAAiC,CAAC9K,IAAAA,GAAAA;IACtC0K,wBAAAA,CAAyB1K,IAAAA,CAAAA;IACzB4K,yCAAAA,CAA0C5K,IAAAA,CAAAA;IAC1C,OAAOA,IAAAA;AACT;AAEA,MAAM+K,qCAAqC,CAAC5I,OAAAA,GAAAA;AAC1C2I,IAAAA,8BAAAA,CAA+B3I,QAAQnC,IAAI,EAAA,CAAA;AAC7C;AAEA,MAAMgL,sBAAAA,GAAyB;AAAC,IAAA,SAAA;AAAW,IAAA,OAAA;AAAS,IAAA;AAAS,CAAA;AAE7D,MAAMC,2BAA2B,CAACjL,IAAAA,GAAAA;IAChC,MAAM,EAAEoC,OAAO,EAAEC,IAAI,EAAEO,mBAAmB,EAAEC,gBAAgB,EAAE,GAAG7C,IAAAA;IACjE,IACE,CAACoC,OAAAA,EAASK,MAAAA,IACV,CAACJ,IAAAA,EAAMI,MAAAA,IACP,CAACG,mBAAAA,EAAqBH,MAAAA,IACtB,CAACI,gBAAAA,EAAkBJ,MAAAA,EACnB;AACA,QAAA;AACF,IAAA;AAEA,IAAA,MAAMuF,QAAkB,EAAE;AAC1B,IAAA,IAAI5F,SAASK,MAAAA,EAAQ;QACnBuF,KAAAA,CAAM3J,IAAI,CAAC,CAAC,UAAU,EAAE+D,OAAAA,CAAQhB,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAC9C,IAAA;AACA,IAAA,IAAIiB,MAAMI,MAAAA,EAAQ;QAChBuF,KAAAA,CAAM3J,IAAI,CAAC,CAAC,KAAK,EAAEgE,IAAAA,CAAKjB,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AACtC,IAAA;IAEA,IAAI4G,KAAAA,CAAMvF,MAAM,EAAE;AAChByH,QAAAA,OAAAA,CAAQ7J,GAAG,CAAChE,KAAAA,CAAM6O,GAAG,CAAC,CAAC,kBAAkB,EAAElD,KAAAA,CAAM5G,IAAI,CAAC,IAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAChE,IAAA;;AAGA,IAAA,IAAIiB,MAAMI,MAAAA,EAAQ;QAChB,MAAM0I,aAAAA,GAAgBH,uBAAuBzI,MAAM,CAAC,CAACpE,KAAAA,GAAU,CAACkE,IAAAA,CAAKW,QAAQ,CAAC7E,KAAAA,CAAAA,CAAAA;QAC9E,IAAIgN,aAAAA,CAAc1I,MAAM,EAAE;AACxByH,YAAAA,OAAAA,CAAQ7J,GAAG,CACThE,KAAAA,CAAM6O,GAAG,CACP,CAAC,qDAAqD,EAAEC,aAAAA,CAAc/J,IAAI,CAAC,IAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAGzF,QAAA;AACF,IAAA;AAEA,IAAA,MAAMgK,mBAA6B,EAAE;AACrC,IAAA,IAAIxI,qBAAqBH,MAAAA,EAAQ;QAC/B2I,gBAAAA,CAAiB/M,IAAI,CAAC,CAAC,UAAU,EAAEuE,mBAAAA,CAAoBxB,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AACrE,IAAA;AACA,IAAA,IAAIyB,kBAAkBJ,MAAAA,EAAQ;QAC5B2I,gBAAAA,CAAiB/M,IAAI,CAAC,CAAC,KAAK,EAAEwE,gBAAAA,CAAiBzB,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAC7D,IAAA;IAEA,IAAIgK,gBAAAA,CAAiB3I,MAAM,EAAE;AAC3ByH,QAAAA,OAAAA,CAAQ7J,GAAG,CAAChE,KAAAA,CAAM6O,GAAG,CAAC,CAAC,sBAAsB,EAAEE,gBAAAA,CAAiBhK,IAAI,CAAC,IAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC/E,IAAA;IAEA,IAAIpB,IAAAA,CAAK6K,iBAAiB,EAAE;AAC1BX,QAAAA,OAAAA,CAAQ7J,GAAG,CACThE,KAAAA,CAAM6O,GAAG,CACP,oHAAA,CAAA,CAAA;AAGN,IAAA;AAEA,IAAA,IACEd,eAAAA,CAAgBpK,IAAAA,EAAM,OAAA,CAAA,IACtB,CAACoK,eAAAA,CAAgBpK,IAAAA,EAAM,SAAA,CAAA,IACvBsK,oCAAAA,CAAqCtK,IAAAA,CAAAA,IACrC,CAACA,IAAAA,CAAK6K,iBAAiB,EACvB;AACAX,QAAAA,OAAAA,CAAQ7J,GAAG,CACThE,KAAAA,CAAM6O,GAAG,CACP,iNAAA,CAAA,CAAA;AAGN,IAAA;AACF;AAMA;AACA,MAAMG,uBAAAA,GAA0B,CAACrL,IAAAA,EAAgCT,OAAAA,GAAAA;AAC/D,IAAA,MAAM+L,eAAAA,GAA6C;QACjDlJ,OAAAA,EAAS;AACJpE,YAAAA,GAAAA,MAAAA,CAAOC,IAAI,CAACsB,OAAAA,CAAO+D,YAAY,CAAA,CAAEf,MAAM,CAACtD,oBAAAA,CAAAA;AACxCE,YAAAA,GAAAA,QAAAA,CAAmBoM,+BAA+B,EAAA;eACjDvL,IAAAA,CAAK4C,mBAAmB,IAAI;AACjC,SAAA;QACD4I,OAAAA,EAASC;AACX,KAAA;AAEA,IAAA,MAAMC,iBAAiB,EACrB,IAAC1L,CAAKqC,IAAI,IAAI,CAACrC,IAAAA,CAAKqC,IAAI,CAACW,QAAQ,CAAC,SAAA,CAAA,IAClChD,KAAKoC,OAAO,EAAEY,SAAS,SAAA,CAAS,CAAA;AAGlC,IAAA,IAAI,CAAC0I,cAAAA,EAAgB;;QAEnBJ,eAAAA,CAAgBE,OAAO,GAAG,EAAE;AAC9B,IAAA,CAAA,MAAO,IAAIxL,IAAAA,CAAK6C,gBAAgB,EAAEJ,MAAAA,EAAQ;;QAExC6I,eAAAA,CAAgBE,OAAO,GAAGxL,IAAAA,CAAK6C,gBAAgB;IACjD,CAAA,MAAO,IAAIuH,eAAAA,CAAgBpK,IAAAA,EAAM,QAAA,CAAA,EAAW;;;AAG1CsL,QAAAA,eAAAA,CAAgBE,OAAO,GAAGxN,MAAAA,CAAOC,IAAI,CAACsB,OAAAA,CAAO+D,YAAY,CAAA,CAAEf,MAAM,CAC/D,CAACQ,GAAAA,GAAQ,CAAC9D,oBAAAA,CAAqB8D,GAAAA,CAAAA,IAAQ,CAAC/C,IAAAA,CAAK4C,mBAAmB,EAAEI,QAAAA,CAASD,GAAAA,CAAAA,CAAAA;AAE/E,IAAA;AAEA,IAAA,MAAM4I,aAAAA,GACJ;QACExH,QAAAA,EAAUmH,eAAAA;QACVM,MAAAA,EAAQ,CAACxB,gBAAgBpK,IAAAA,EAAM,OAAA,CAAA;QAC/B6L,aAAAA,EAAe;YACbC,OAAAA,EAAS,CAAC1B,gBAAgBpK,IAAAA,EAAM,QAAA,CAAA;YAChC+L,SAAAA,EAAW,CAAC3B,gBAAgBpK,IAAAA,EAAM,QAAA;AACpC;AACF,KAAA;IAEF,OAAO2L,aAAAA;AACT;;;;"}
|
|
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';\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\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 strapiDataTransfer.isIgnoredOfficialTransferType(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} (${\n TRANSFER_FILTER_PRESET_DESCRIPTIONS[\n type as keyof typeof TRANSFER_FILTER_PRESET_DESCRIPTIONS\n ]\n })`\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(\n ','\n )} 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${\n params ? JSON.stringify(params, null, 2) : ''\n }`;\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 ...strapiDataTransfer.getIgnoredOfficialTransferTypes(),\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","UPLOAD_CONTENT_TYPE_UIDS","isIgnoredContentType","type","strapiDataTransfer","isIgnoredOfficialTransferType","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","includes","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","startsWith","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","getIgnoredOfficialTransferTypes","include","undefined","contentInScope","restoreConfig","assets","configuration","webhook","coreStore"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
|
-
var
|
|
4
|
+
var _ = require('lodash');
|
|
5
5
|
require('boxen');
|
|
6
6
|
|
|
7
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -75,9 +75,9 @@ function floorToDecimal(value, decimals) {
|
|
|
75
75
|
logger.error(chalk__default.default.red(message));
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
|
-
if (
|
|
78
|
+
if (_.isString(message)) {
|
|
79
79
|
log(message);
|
|
80
|
-
} else if (
|
|
80
|
+
} else if (Array.isArray(message)) {
|
|
81
81
|
message.forEach((msg)=>log(msg));
|
|
82
82
|
}
|
|
83
83
|
prc.exit(code);
|
|
@@ -93,7 +93,7 @@ function floorToDecimal(value, decimals) {
|
|
|
93
93
|
if (!protocol) {
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
|
-
if (
|
|
96
|
+
if (_.isString(protocol)) {
|
|
97
97
|
if (protocol !== url.protocol) {
|
|
98
98
|
exitWith(1, `${url.toString()} must have the protocol ${protocol}`);
|
|
99
99
|
}
|
|
@@ -123,7 +123,7 @@ const assertCwdContainsStrapiProject = (name)=>{
|
|
|
123
123
|
};
|
|
124
124
|
try {
|
|
125
125
|
const pkgJSON = require(`${process.cwd()}/package.json`);
|
|
126
|
-
if (!
|
|
126
|
+
if (!_.has(pkgJSON, 'dependencies.@strapi/strapi') && !_.has(pkgJSON, 'devDependencies.@strapi/strapi')) {
|
|
127
127
|
logErrorAndExit();
|
|
128
128
|
}
|
|
129
129
|
} catch {
|
|
@@ -132,7 +132,7 @@ const assertCwdContainsStrapiProject = (name)=>{
|
|
|
132
132
|
};
|
|
133
133
|
const runAction = (name, action)=>(...args)=>{
|
|
134
134
|
assertCwdContainsStrapiProject(name);
|
|
135
|
-
Promise.resolve().then(()=>{
|
|
135
|
+
return Promise.resolve().then(()=>{
|
|
136
136
|
return action(...args);
|
|
137
137
|
}).catch((error)=>{
|
|
138
138
|
console.error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString } from 'lodash';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (Array.isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has(pkgJSON, 'dependencies.@strapi/strapi') &&\n !has(pkgJSON, 'devDependencies.@strapi/strapi')\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n return Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","Array","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { isString,
|
|
2
|
+
import { isString, has } from 'lodash';
|
|
3
3
|
import 'boxen';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -71,7 +71,7 @@ function floorToDecimal(value, decimals) {
|
|
|
71
71
|
};
|
|
72
72
|
if (isString(message)) {
|
|
73
73
|
log(message);
|
|
74
|
-
} else if (isArray(message)) {
|
|
74
|
+
} else if (Array.isArray(message)) {
|
|
75
75
|
message.forEach((msg)=>log(msg));
|
|
76
76
|
}
|
|
77
77
|
prc.exit(code);
|
|
@@ -117,7 +117,7 @@ const assertCwdContainsStrapiProject = (name)=>{
|
|
|
117
117
|
};
|
|
118
118
|
try {
|
|
119
119
|
const pkgJSON = require(`${process.cwd()}/package.json`);
|
|
120
|
-
if (!has('dependencies.@strapi/strapi'
|
|
120
|
+
if (!has(pkgJSON, 'dependencies.@strapi/strapi') && !has(pkgJSON, 'devDependencies.@strapi/strapi')) {
|
|
121
121
|
logErrorAndExit();
|
|
122
122
|
}
|
|
123
123
|
} catch {
|
|
@@ -126,7 +126,7 @@ const assertCwdContainsStrapiProject = (name)=>{
|
|
|
126
126
|
};
|
|
127
127
|
const runAction = (name, action)=>(...args)=>{
|
|
128
128
|
assertCwdContainsStrapiProject(name);
|
|
129
|
-
Promise.resolve().then(()=>{
|
|
129
|
+
return Promise.resolve().then(()=>{
|
|
130
130
|
return action(...args);
|
|
131
131
|
}).catch((error)=>{
|
|
132
132
|
console.error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":";;;;AAOA;;AAEC,IACD,MAAMA,UAAAA,GAAa,IAAA;AACnB,MAAMC,KAAAA,GAAQ;AAAC,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA;AAAK,CAAA;AAElD;;IAGA,MAAMC,gBAAgB,CAACC,KAAAA,EAAeC,WAAW,CAAC,EAAEC,WAAW,CAAC,GAAA;AAC9D,IAAA,IAAI,CAACF,KAAAA,EAAO;QACV,OAAO,GAAA;AACT,IAAA;IACA,MAAMG,CAAAA,GAAIC,IAAAA,CAAKC,KAAK,CAACD,IAAAA,CAAKE,GAAG,CAACN,KAAAA,CAAAA,GAASI,IAAAA,CAAKE,GAAG,CAACT,UAAAA,CAAAA,CAAAA;AAChD,IAAA,MAAMU,SAAS,CAAA,EAAIP,CAAAA,KAAAA,GAAQH,UAAAA,IAAcM,CAAAA,EAAGK,OAAO,CAACP,QAAAA,CAAAA,CAAU,CAAC,EAAEH,KAAK,CAACK,EAAE,CAACD,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAI;IAEvF,OAAOK,MAAAA,CAAOL,QAAQ,CAACA,QAAAA,CAAAA;AACzB;AAEA;AACA,SAASO,cAAAA,CAAeC,KAAa,EAAET,QAAgB,EAAA;AACrD,IAAA,MAAMU,SAAS,EAAA,IAAMV,QAAAA;AACrB,IAAA,OAAOG,IAAAA,CAAKC,KAAK,CAACK,KAAAA,GAAQC,MAAAA,CAAAA,GAAUA,MAAAA;AACtC;AAEA;;IAGA,MAAMC,eAAe,CAACC,WAAAA,EAAqBZ,WAAW,CAAC,EAAEC,WAAW,CAAC,GAAA;IACnE,IAAIQ,KAAAA;IACJ,IAAII,IAAAA;AAEJ,IAAA,IAAID,eAAe,KAAA,EAAO;AACxBH,QAAAA,KAAAA,GAAQG,WAAAA,GAAc,KAAA;QACtBC,IAAAA,GAAO,GAAA;IACT,CAAA,MAAO,IAAID,eAAe,IAAA,EAAM;AAC9BH,QAAAA,KAAAA,GAAQG,WAAAA,GAAc,IAAA;QACtBC,IAAAA,GAAO,GAAA;IACT,CAAA,MAAO;QACLJ,KAAAA,GAAQG,WAAAA;QACRC,IAAAA,GAAO,IAAA;AACT,IAAA;IAEA,MAAMC,OAAAA,GAAUN,eAAeC,KAAAA,EAAOT,QAAAA,CAAAA;AACtC,IAAA,MAAMM,SAAS,CAAA,EAAGQ,OAAAA,CAAQP,OAAO,CAACP,YAAYa,IAAAA,CAAAA,CAAM;IACpD,OAAOP,MAAAA,CAAOL,QAAQ,CAACA,QAAAA,CAAAA;AACzB;AAEA;;;AAGC,UACKc,2BAAAA,GAA8B;AAEpC;;;AAGC,UACKC,mCAAAA,GAAsC,CAC1CC,SAAAA,EACAC,WAAAA,GAEAA,eAAe,IAAA,GACX,CAAA,EAAGP,YAAAA,CAAaM,SAAAA,CAAAA,CAAW,GAAG,EAAEN,YAAAA,CAAaO,aAAa,UAAU,CAAC,GACrEP,YAAAA,CAAaM,SAAAA;AAOnB;;;;;AAKC,UACKE,QAAAA,GAAW,CAACC,MAAcC,OAAAA,EAA6BC,OAAAA,GAA2B,EAAE,GAAA;AACxF,IAAA,MAAM,EAAEC,MAAAA,GAASC,OAAO,EAAEC,GAAAA,GAAMC,OAAO,EAAE,GAAGJ,OAAAA;AAE5C,IAAA,MAAMjB,MAAM,CAACgB,OAAAA,GAAAA;AACX,QAAA,IAAID,SAAS,CAAA,EAAG;AACdG,YAAAA,MAAAA,CAAOlB,GAAG,CAACsB,KAAAA,CAAMC,KAAK,CAACP,OAAAA,CAAAA,CAAAA;QACzB,CAAA,MAAO;AACLE,YAAAA,MAAAA,CAAOM,KAAK,CAACF,KAAAA,CAAMG,GAAG,CAACT,OAAAA,CAAAA,CAAAA;AACzB,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAIU,SAASV,OAAAA,CAAAA,EAAU;QACrBhB,GAAAA,CAAIgB,OAAAA,CAAAA;IACN,CAAA,MAAO,IAAIW,QAAQX,OAAAA,CAAAA,EAAU;AAC3BA,QAAAA,OAAAA,CAAQY,OAAO,CAAC,CAACC,GAAAA,GAAQ7B,GAAAA,CAAI6B,GAAAA,CAAAA,CAAAA;AAC/B,IAAA;AAEAT,IAAAA,GAAAA,CAAIU,IAAI,CAACf,IAAAA,CAAAA;AACX;AAEA;;;IAIA,MAAMgB,oBAAAA,GAAuB,CAACC,GAAAA,EAAUC,QAAAA,GAAAA;IACtC,IAAI,CAACD,GAAAA,CAAIC,QAAQ,EAAE;AACjBnB,QAAAA,QAAAA,CAAS,GAAG,CAAA,EAAGkB,GAAAA,CAAIE,QAAQ,EAAA,CAAG,yBAAyB,CAAC,CAAA;AAC1D,IAAA;;AAGA,IAAA,IAAI,CAACD,QAAAA,EAAU;AACb,QAAA;AACF,IAAA;AAEA,IAAA,IAAIP,SAASO,QAAAA,CAAAA,EAAW;QACtB,IAAIA,QAAAA,KAAaD,GAAAA,CAAIC,QAAQ,EAAE;AAC7BnB,YAAAA,QAAAA,CAAS,GAAG,CAAA,EAAGkB,GAAAA,CAAIE,QAAQ,EAAA,CAAG,wBAAwB,EAAED,QAAAA,CAAAA,CAAU,CAAA;AACpE,QAAA;AACA,QAAA;AACF,IAAA;;IAGA,IAAI,CAACA,SAASE,IAAI,CAAC,CAACF,QAAAA,GAAaD,GAAAA,CAAIC,QAAQ,KAAKA,QAAAA,CAAAA,EAAW;QAC3D,OAAOnB,QAAAA,CACL,CAAA,EACA,CAAA,EAAGkB,GAAAA,CAAIE,QAAQ,EAAA,CAAG,2CAA2C,EAAED,QAAAA,CAASG,IAAI,CAAC,GAAA,CAAA,CAAA,CAAM,CAAA;AAEvF,IAAA;AACF;AAMA;;IAGA,MAAMC,SAAAA,GAAY,CAChBC,iBAAAA,EACAC,aAAAA,GAA+B,WAAa,CAAC,EAC7CC,gBAAAA,GAAqC,UAAA,CAAa,CAAC,GAAA;AAEnD,IAAA,OAAO,OAAOC,OAAAA,GAAAA;QACZ,MAAMC,IAAAA,GAAOD,QAAQC,IAAI,EAAA;QACzB,IAAI,MAAMJ,kBAAkBI,IAAAA,CAAAA,EAAO;AACjC,YAAA,MAAMH,aAAAA,CAAcE,OAAAA,CAAAA;QACtB,CAAA,MAAO;AACL,YAAA,MAAMD,gBAAAA,CAAiBC,OAAAA,CAAAA;AACzB,QAAA;AACF,IAAA,CAAA;AACF;AAEA,MAAME,iCAAiC,CAACC,IAAAA,GAAAA;AACtC,IAAA,MAAMC,eAAAA,GAAkB,IAAA;AACtB1B,QAAAA,OAAAA,CAAQnB,GAAG,CACT,CAAC,gBAAgB,EAAEsB,KAAAA,CAAMwB,MAAM,CAC7B,CAAC,OAAO,EAAEF,IAAAA,CAAAA,CAAM,CAAA,CAChB,+DAA+D,CAAC,CAAA;AAEpEvB,QAAAA,OAAAA,CAAQS,IAAI,CAAC,CAAA,CAAA;AACf,IAAA,CAAA;IAEA,IAAI;AACF,QAAA,MAAMiB,UAAUC,OAAAA,CAAQ,CAAA,EAAG3B,QAAQ4B,GAAG,EAAA,CAAG,aAAa,CAAC,CAAA;AACvD,QAAA,IACE,CAACC,GAAAA,CAAI,6BAAA,EAA+BH,YACpC,CAACG,GAAAA,CAAI,kCAAkCH,OAAAA,CAAAA,EACvC;AACAF,YAAAA,eAAAA,EAAAA;AACF,QAAA;AACF,IAAA,CAAA,CAAE,OAAM;AACNA,QAAAA,eAAAA,EAAAA;AACF,IAAA;AACF;AAEA,MAAMM,SAAAA,GACJ,CAACP,IAAAA,EAAcQ,MAAAA,GACf,CAAC,GAAGC,IAAAA,GAAAA;QACFV,8BAAAA,CAA+BC,IAAAA,CAAAA;QAE/BU,OAAAA,CAAQC,OAAO,EAAA,CACZC,IAAI,CAAC,IAAA;AACJ,YAAA,OAAOJ,MAAAA,CAAAA,GAAUC,IAAAA,CAAAA;QACnB,CAAA,CAAA,CACCI,KAAK,CAAC,CAACjC,KAAAA,GAAAA;AACNL,YAAAA,OAAAA,CAAQK,KAAK,CAACA,KAAAA,CAAAA;AACdH,YAAAA,OAAAA,CAAQS,IAAI,CAAC,CAAA,CAAA;AACf,QAAA,CAAA,CAAA;AACJ,IAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"helpers.mjs","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString } from 'lodash';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (Array.isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has(pkgJSON, 'dependencies.@strapi/strapi') &&\n !has(pkgJSON, 'devDependencies.@strapi/strapi')\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n return Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","Array","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../../src/node/vite/config.ts"],"sourcesContent":["import path from 'node:path';\n\nimport type { InlineConfig, UserConfig } from 'vite';\n\nimport { getUserConfig } from '../core/config';\nimport { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules';\nimport {\n buildAdminViteResolveAliases,\n getResolvableSingletonModules,\n} from '../core/admin-vite-aliases';\nimport { collectAdminOptimizeDepsExclude } from '../core/admin-vite-optimize-exclude';\nimport { isDesignSystemLinked } from '../core/linked-packages';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport { getMonorepoAliases } from '../core/aliases';\nimport type { BuildContext } from '../create-build-context';\nimport { buildFilesPlugin } from './plugins';\n\nconst resolveBaseConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n const isMonorepoExampleApp = (ctx.strapi as any).internal_config?.uuid === 'getstarted';\n const designSystemLinked = isDesignSystemLinked();\n const pluginOptimizeDepsExclude = await collectAdminOptimizeDepsExclude(ctx.cwd, ctx.plugins);\n const optimizeDepsExclude = [\n ...(designSystemLinked ? ['@strapi/design-system'] : []),\n ...pluginOptimizeDepsExclude,\n ];\n\n // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of\n // its CJS entry, which emits \"The CJS build of Vite's Node API is deprecated\".\n // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated\n const { default: react } = await import('@vitejs/plugin-react-swc');\n\n // Imported dynamically so a flag-off build never loads the native oxide and lightningcss binaries\n // Make it a static import again when the flag goes\n const tailwindPlugins = ctx.nextDesignSystem\n ? [(await import('@tailwindcss/vite')).default()]\n : [];\n\n return {\n root: ctx.cwd,\n base: ctx.basePath,\n // Public files are served by the strapi::public middleware at runtime, so they do not need to\n // be copied into the admin build output.\n publicDir: false,\n build: {\n emptyOutDir: false, // Rely on CLI to do this\n outDir: ctx.distDir,\n target,\n },\n cacheDir: 'node_modules/.strapi/vite',\n configFile: false,\n define: {\n process: {},\n 'process.env': JSON.stringify(ctx.env),\n },\n envPrefix: 'STRAPI_ADMIN_',\n optimizeDeps: {\n // Contract (#26964, #26944, #27014):\n // - CJS packages imported by @strapi/admin MUST be in optimizeDeps.include (invariant, lodash, …).\n // - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.\n // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling\n // so changes are reflected without clearing node_modules/.strapi/vite cache.\n // Also skip allowlisted / opt-in pre-built ESM plugin UI kits (see collectAdminOptimizeDepsExclude).\n ...(optimizeDepsExclude.length > 0 && { exclude: optimizeDepsExclude }),\n include: [\n // pre-bundle React dependencies to avoid React duplicates,\n // even if React dependencies are not direct dependencies\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n 'react',\n `react/jsx-runtime`,\n 'react-dom/client',\n 'styled-components',\n 'react-router-dom',\n // Admin + RTK Query share react-redux context; pre-bundle so dev chunks cannot load a\n // second copy (avoids \"could not find react-redux context value\" after upgrades / hoisting).\n 'react-redux',\n '@reduxjs/toolkit',\n // Pre-bundle design-system so plugin custom field chunks (dynamic imports) resolve\n // to the same instance as the main app. Otherwise TooltipProvider/DesignSystemProvider\n // context from the root is not seen by components in plugin chunks.\n // Omit when linked so local changes are picked up (see exclude above)\n ...(!designSystemLinked ? ['@strapi/design-system'] : []),\n '@radix-ui/react-tooltip',\n // CJS-only; required for @strapi/admin in dev (#26944, #26964, #27014).\n 'lodash',\n 'invariant',\n // UMD; without pre-bundling plugin chunks get empty namespace → \"Prism is not defined\" (#26964).\n 'prismjs',\n // Do NOT add `prismjs/components/*.js` to include. #26978 prebundled every language for\n // all apps; combined with #27014's optimizeDeps contract, Vite evaluates those chunks in\n // reverse import order so parents (e.g. basic before vbnet) load too late →\n // `Cannot set properties of undefined (setting 'comment')` and a blank admin in develop.\n // Keep `prismjs` only; let language components load as normal ESM side-effect imports.\n // CodeMirror must be a single instance across design-system, lang-json and uiw or the\n // JSON custom field crashes on instanceof checks. Pre-bundle for every build — dev and\n // production — not only monorepo examples. Use the resolvable subset so include stays in\n // lockstep with resolve.alias (an unresolvable singleton must not be forced into pre-bundling).\n ...getResolvableSingletonModules(),\n /**\n * Pre-bundle other dependencies that would otherwise cause a page reload when imported.\n * See \"performance\" section: https://vite.dev/guide/dep-pre-bundling.html#the-why\n * Only include dependencies for our internal example apps, otherwise it will break\n * real user apps that may not have those dependencies.\n */\n ...(isMonorepoExampleApp\n ? [\n '@dnd-kit/core',\n '@dnd-kit/sortable',\n '@dnd-kit/utilities',\n '@dnd-kit/modifiers',\n '@radix-ui/react-toolbar',\n 'codemirror5',\n 'codemirror5/addon/display/placeholder',\n 'date-fns-tz',\n 'date-fns/format',\n 'date-fns/formatISO',\n 'highlight.js',\n 'lodash/capitalize',\n 'lodash/fp',\n 'lodash/groupBy',\n 'lodash/has',\n 'lodash/isNil',\n 'lodash/locale',\n 'lodash/map',\n 'lodash/mapValues',\n 'lodash/pull',\n 'lodash/size',\n 'lodash/sortBy',\n 'lodash/tail',\n 'lodash/toLower',\n 'lodash/toNumber',\n 'lodash/toString',\n 'lodash/truncate',\n 'lodash/uniq',\n 'lodash/upperFirst',\n 'markdown-it',\n 'markdown-it-abbr',\n 'markdown-it-container',\n 'markdown-it-deflist',\n 'markdown-it-emoji',\n 'markdown-it-footnote',\n 'markdown-it-ins',\n 'markdown-it-mark',\n 'markdown-it-sub',\n 'markdown-it-sup',\n 'react-colorful',\n 'react-dnd-html5-backend',\n 'react-window',\n 'semver',\n 'semver/functions/lt',\n 'semver/functions/valid',\n 'slate',\n 'slate-history',\n 'slate-react',\n 'motion',\n ]\n : []),\n ],\n },\n resolve: {\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n // Include design-system so plugin chunks use the same instance and inherit root context\n dedupe: [...ADMIN_VITE_DEDUPE_MODULES],\n // Explicit aliases ensure resolution under pnpm's strict dependency isolation,\n // where packages imported by plugins may not be resolvable from plugin chunks\n alias: buildAdminViteResolveAliases(),\n },\n plugins: [...tailwindPlugins, react(), buildFilesPlugin(ctx)],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const {\n options: { minify, sourcemap },\n } = ctx;\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n logLevel: 'silent',\n mode: 'production',\n build: {\n ...baseConfig.build,\n assetsDir: '',\n minify,\n sourcemap,\n rollupOptions: {\n input: {\n strapi: ctx.nextDesignSystem ? path.join(ctx.runtimeDir, 'index.html') : ctx.entry,\n },\n },\n },\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n mode: 'development',\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve?.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n server: {\n cors: false,\n /**\n * In middleware mode Strapi forwards the browser Host from reverse proxies (nginx, Traefik).\n * Vite 5+ blocks unknown hosts unless explicitly allowed (#23491).\n */\n allowedHosts: true,\n middlewareMode: true,\n open: ctx.options.open,\n hmr: {\n overlay: false,\n /**\n * Use Strapi's http.Server so HMR websockets reuse the app's listen port. A separate listener\n * plus clientPort pushes browsers toward host:5173-style URLs that fail behind proxies that\n * only expose the Strapi server port (#23491, #23008).\n */\n server: ctx.strapi.server.httpServer,\n },\n },\n appType: 'custom',\n };\n};\n\nconst USER_CONFIGS = ['vite.config.js', 'vite.config.mjs', 'vite.config.ts', 'vite.config.mts'];\n\ntype UserViteConfig = (config: UserConfig) => UserConfig;\n\nconst mergeConfigWithUserConfig = async (config: InlineConfig, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserViteConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n return userConfig(config);\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveProductionConfig, resolveDevelopmentConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","isMonorepoExampleApp","strapi","internal_config","uuid","designSystemLinked","isDesignSystemLinked","pluginOptimizeDepsExclude","collectAdminOptimizeDepsExclude","cwd","plugins","optimizeDepsExclude","react","tailwindPlugins","nextDesignSystem","root","base","basePath","publicDir","build","emptyOutDir","outDir","distDir","cacheDir","configFile","define","process","JSON","stringify","env","envPrefix","optimizeDeps","length","exclude","include","getResolvableSingletonModules","resolve","dedupe","ADMIN_VITE_DEDUPE_MODULES","alias","buildAdminViteResolveAliases","buildFilesPlugin","resolveProductionConfig","options","minify","sourcemap","baseConfig","logLevel","mode","assetsDir","rollupOptions","input","path","join","runtimeDir","entry","resolveDevelopmentConfig","monorepo","loadStrapiMonorepo","getMonorepoAliases","server","cors","allowedHosts","middlewareMode","open","hmr","overlay","httpServer","appType","USER_CONFIGS","mergeConfigWithUserConfig","config","userConfig","getUserConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../../src/node/vite/config.ts"],"sourcesContent":["import path from 'node:path';\n\nimport type { InlineConfig, UserConfig } from 'vite';\n\nimport { getUserConfig } from '../core/config';\nimport { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules';\nimport {\n buildAdminViteResolveAliases,\n getResolvableSingletonModules,\n} from '../core/admin-vite-aliases';\nimport { collectAdminOptimizeDepsExclude } from '../core/admin-vite-optimize-exclude';\nimport { isDesignSystemLinked } from '../core/linked-packages';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport { getMonorepoAliases } from '../core/aliases';\nimport type { BuildContext } from '../create-build-context';\nimport { buildFilesPlugin } from './plugins';\n\nconst resolveBaseConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n const isMonorepoExampleApp = (ctx.strapi as any).internal_config?.uuid === 'getstarted';\n const designSystemLinked = isDesignSystemLinked();\n const pluginOptimizeDepsExclude = await collectAdminOptimizeDepsExclude(ctx.cwd, ctx.plugins);\n const optimizeDepsExclude = [\n ...(designSystemLinked ? ['@strapi/design-system'] : []),\n ...pluginOptimizeDepsExclude,\n ];\n\n // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of\n // its CJS entry, which emits \"The CJS build of Vite's Node API is deprecated\".\n // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated\n const { default: react } = await import('@vitejs/plugin-react-swc');\n\n // Imported dynamically so a flag-off build never loads the native oxide and lightningcss binaries\n // Make it a static import again when the flag goes\n const tailwindPlugins = ctx.nextDesignSystem\n ? [(await import('@tailwindcss/vite')).default()]\n : [];\n\n return {\n root: ctx.cwd,\n base: ctx.basePath,\n // Public files are served by the strapi::public middleware at runtime, so they do not need to\n // be copied into the admin build output.\n publicDir: false,\n build: {\n emptyOutDir: false, // Rely on CLI to do this\n outDir: ctx.distDir,\n target,\n },\n cacheDir: 'node_modules/.strapi/vite',\n configFile: false,\n define: {\n process: {},\n 'process.env': JSON.stringify(ctx.env),\n },\n envPrefix: 'STRAPI_ADMIN_',\n optimizeDeps: {\n // Contract (#26964, #26944, #27014):\n // - CJS packages imported by @strapi/admin MUST be in optimizeDeps.include (invariant, lodash, …).\n // - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.\n // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling\n // so changes are reflected without clearing node_modules/.strapi/vite cache.\n // Also skip allowlisted / opt-in pre-built ESM plugin UI kits (see collectAdminOptimizeDepsExclude).\n ...(optimizeDepsExclude.length > 0 && { exclude: optimizeDepsExclude }),\n include: [\n // pre-bundle React dependencies to avoid React duplicates,\n // even if React dependencies are not direct dependencies\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n 'react',\n `react/jsx-runtime`,\n 'react-dom/client',\n 'styled-components',\n 'react-router-dom',\n // Admin + RTK Query share react-redux context; pre-bundle so dev chunks cannot load a\n // second copy (avoids \"could not find react-redux context value\" after upgrades / hoisting).\n 'react-redux',\n '@reduxjs/toolkit',\n // Pre-bundle design-system so plugin custom field chunks (dynamic imports) resolve\n // to the same instance as the main app. Otherwise TooltipProvider/DesignSystemProvider\n // context from the root is not seen by components in plugin chunks.\n // Omit when linked so local changes are picked up (see exclude above)\n ...(!designSystemLinked ? ['@strapi/design-system'] : []),\n '@radix-ui/react-tooltip',\n // CJS-only; required for @strapi/admin in dev (#26944, #26964, #27014).\n 'lodash',\n 'invariant',\n // UMD; without pre-bundling plugin chunks get empty namespace → \"Prism is not defined\" (#26964).\n 'prismjs',\n // Do NOT add `prismjs/components/*.js` to include. #26978 prebundled every language for\n // all apps; combined with #27014's optimizeDeps contract, Vite evaluates those chunks in\n // reverse import order so parents (e.g. basic before vbnet) load too late →\n // `Cannot set properties of undefined (setting 'comment')` and a blank admin in develop.\n // Keep `prismjs` only; let language components load as normal ESM side-effect imports.\n // CodeMirror must be a single instance across design-system, lang-json and uiw or the\n // JSON custom field crashes on instanceof checks. Pre-bundle for every build — dev and\n // production — not only monorepo examples. Use the resolvable subset so include stays in\n // lockstep with resolve.alias (an unresolvable singleton must not be forced into pre-bundling).\n ...getResolvableSingletonModules(),\n /**\n * Pre-bundle other dependencies that would otherwise cause a page reload when imported.\n * See \"performance\" section: https://vite.dev/guide/dep-pre-bundling.html#the-why\n * Only include dependencies for our internal example apps, otherwise it will break\n * real user apps that may not have those dependencies.\n */\n ...(isMonorepoExampleApp\n ? [\n '@dnd-kit/core',\n '@dnd-kit/sortable',\n '@dnd-kit/utilities',\n '@dnd-kit/modifiers',\n '@radix-ui/react-toolbar',\n 'codemirror5',\n 'codemirror5/addon/display/placeholder',\n 'date-fns-tz',\n 'date-fns/format',\n 'date-fns/formatISO',\n 'highlight.js',\n 'lodash/capitalize',\n 'lodash/groupBy',\n 'lodash/has',\n 'lodash/isNil',\n 'lodash/locale',\n 'lodash/map',\n 'lodash/mapValues',\n 'lodash/pull',\n 'lodash/size',\n 'lodash/sortBy',\n 'lodash/tail',\n 'lodash/toLower',\n 'lodash/toNumber',\n 'lodash/toString',\n 'lodash/truncate',\n 'lodash/uniq',\n 'lodash/upperFirst',\n 'markdown-it',\n 'markdown-it-abbr',\n 'markdown-it-container',\n 'markdown-it-deflist',\n 'markdown-it-emoji',\n 'markdown-it-footnote',\n 'markdown-it-ins',\n 'markdown-it-mark',\n 'markdown-it-sub',\n 'markdown-it-sup',\n 'react-colorful',\n 'react-dnd-html5-backend',\n 'react-window',\n 'semver',\n 'semver/functions/lt',\n 'semver/functions/valid',\n 'slate',\n 'slate-history',\n 'slate-react',\n 'motion',\n ]\n : []),\n ],\n },\n resolve: {\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n // Include design-system so plugin chunks use the same instance and inherit root context\n dedupe: [...ADMIN_VITE_DEDUPE_MODULES],\n // Explicit aliases ensure resolution under pnpm's strict dependency isolation,\n // where packages imported by plugins may not be resolvable from plugin chunks\n alias: buildAdminViteResolveAliases(),\n },\n plugins: [...tailwindPlugins, react(), buildFilesPlugin(ctx)],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const {\n options: { minify, sourcemap },\n } = ctx;\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n logLevel: 'silent',\n mode: 'production',\n build: {\n ...baseConfig.build,\n assetsDir: '',\n minify,\n sourcemap,\n rollupOptions: {\n input: {\n strapi: ctx.nextDesignSystem ? path.join(ctx.runtimeDir, 'index.html') : ctx.entry,\n },\n },\n },\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n mode: 'development',\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve?.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n server: {\n cors: false,\n /**\n * In middleware mode Strapi forwards the browser Host from reverse proxies (nginx, Traefik).\n * Vite 5+ blocks unknown hosts unless explicitly allowed (#23491).\n */\n allowedHosts: true,\n middlewareMode: true,\n open: ctx.options.open,\n hmr: {\n overlay: false,\n /**\n * Use Strapi's http.Server so HMR websockets reuse the app's listen port. A separate listener\n * plus clientPort pushes browsers toward host:5173-style URLs that fail behind proxies that\n * only expose the Strapi server port (#23491, #23008).\n */\n server: ctx.strapi.server.httpServer,\n },\n },\n appType: 'custom',\n };\n};\n\nconst USER_CONFIGS = ['vite.config.js', 'vite.config.mjs', 'vite.config.ts', 'vite.config.mts'];\n\ntype UserViteConfig = (config: UserConfig) => UserConfig;\n\nconst mergeConfigWithUserConfig = async (config: InlineConfig, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserViteConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n return userConfig(config);\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveProductionConfig, resolveDevelopmentConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","isMonorepoExampleApp","strapi","internal_config","uuid","designSystemLinked","isDesignSystemLinked","pluginOptimizeDepsExclude","collectAdminOptimizeDepsExclude","cwd","plugins","optimizeDepsExclude","react","tailwindPlugins","nextDesignSystem","root","base","basePath","publicDir","build","emptyOutDir","outDir","distDir","cacheDir","configFile","define","process","JSON","stringify","env","envPrefix","optimizeDeps","length","exclude","include","getResolvableSingletonModules","resolve","dedupe","ADMIN_VITE_DEDUPE_MODULES","alias","buildAdminViteResolveAliases","buildFilesPlugin","resolveProductionConfig","options","minify","sourcemap","baseConfig","logLevel","mode","assetsDir","rollupOptions","input","path","join","runtimeDir","entry","resolveDevelopmentConfig","monorepo","loadStrapiMonorepo","getMonorepoAliases","server","cors","allowedHosts","middlewareMode","open","hmr","overlay","httpServer","appType","USER_CONFIGS","mergeConfigWithUserConfig","config","userConfig","getUserConfig"],"mappings":";;;;;;;;;;;;;;;;AAiBA,MAAMA,oBAAoB,OAAOC,GAAAA,GAAAA;AAC/B,IAAA,MAAM,EAAEC,OAAAA,EAASC,qBAAqB,EAAE,GAAG,MAAM,OAAO,yBAAA,CAAA;IACxD,MAAMC,MAAAA,GAASD,qBAAAA,CAAsBF,GAAAA,CAAIG,MAAM,CAAA;AAC/C,IAAA,MAAMC,uBAAuB,GAACJ,CAAIK,MAAM,CAASC,eAAe,EAAEC,IAAAA,KAAS,YAAA;AAC3E,IAAA,MAAMC,kBAAAA,GAAqBC,mCAAAA,EAAAA;AAC3B,IAAA,MAAMC,4BAA4B,MAAMC,wDAAAA,CAAgCX,IAAIY,GAAG,EAAEZ,IAAIa,OAAO,CAAA;AAC5F,IAAA,MAAMC,mBAAAA,GAAsB;WACtBN,kBAAAA,GAAqB;AAAC,YAAA;AAAwB,SAAA,GAAG,EAAE;AACpDE,QAAAA,GAAAA;AACJ,KAAA;;;;AAKD,IAAA,MAAM,EAAET,OAAAA,EAASc,KAAK,EAAE,GAAG,MAAM,OAAO,0BAAA,CAAA;;;IAIxC,MAAMC,eAAAA,GAAkBhB,GAAAA,CAAIiB,gBAAgB,GACxC;AAAE,QAAA,CAAA,MAAM,OAAO,mBAAA,CAAmB,EAAGhB,OAAO;AAAG,KAAA,GAC/C,EAAE;IAEN,OAAO;AACLiB,QAAAA,IAAAA,EAAMlB,IAAIY,GAAG;AACbO,QAAAA,IAAAA,EAAMnB,IAAIoB,QAAQ;;;QAGlBC,SAAAA,EAAW,KAAA;QACXC,KAAAA,EAAO;YACLC,WAAAA,EAAa,KAAA;AACbC,YAAAA,MAAAA,EAAQxB,IAAIyB,OAAO;AACnBtB,YAAAA;AACF,SAAA;QACAuB,QAAAA,EAAU,2BAAA;QACVC,UAAAA,EAAY,KAAA;QACZC,MAAAA,EAAQ;AACNC,YAAAA,OAAAA,EAAS,EAAC;AACV,YAAA,aAAA,EAAeC,IAAAA,CAAKC,SAAS,CAAC/B,GAAAA,CAAIgC,GAAG;AACvC,SAAA;QACAC,SAAAA,EAAW,eAAA;QACXC,YAAAA,EAAc;;;;;;;YAOZ,GAAIpB,mBAAAA,CAAoBqB,MAAM,GAAG,CAAA,IAAK;gBAAEC,OAAAA,EAAStB;aAAqB;YACtEuB,OAAAA,EAAS;;;;AAIP,gBAAA,OAAA;AACA,gBAAA,CAAC,iBAAiB,CAAC;AACnB,gBAAA,kBAAA;AACA,gBAAA,mBAAA;AACA,gBAAA,kBAAA;;;AAGA,gBAAA,aAAA;AACA,gBAAA,kBAAA;;;;;AAKI,gBAAA,GAAA,CAAC7B,kBAAAA,GAAqB;AAAC,oBAAA;AAAwB,iBAAA,GAAG,EAAE;AACxD,gBAAA,yBAAA;;AAEA,gBAAA,QAAA;AACA,gBAAA,WAAA;;AAEA,gBAAA,SAAA;;;;;;;;;;AAUG8B,gBAAAA,GAAAA,8CAAAA,EAAAA;AACH;;;;;AAKC,YAAA,GACGlC,oBAAAA,GACA;AACE,oBAAA,eAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,oBAAA;AACA,oBAAA,oBAAA;AACA,oBAAA,yBAAA;AACA,oBAAA,aAAA;AACA,oBAAA,uCAAA;AACA,oBAAA,aAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,oBAAA;AACA,oBAAA,cAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,gBAAA;AACA,oBAAA,YAAA;AACA,oBAAA,cAAA;AACA,oBAAA,eAAA;AACA,oBAAA,YAAA;AACA,oBAAA,kBAAA;AACA,oBAAA,aAAA;AACA,oBAAA,aAAA;AACA,oBAAA,eAAA;AACA,oBAAA,aAAA;AACA,oBAAA,gBAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,aAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,aAAA;AACA,oBAAA,kBAAA;AACA,oBAAA,uBAAA;AACA,oBAAA,qBAAA;AACA,oBAAA,mBAAA;AACA,oBAAA,sBAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,kBAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,iBAAA;AACA,oBAAA,gBAAA;AACA,oBAAA,yBAAA;AACA,oBAAA,cAAA;AACA,oBAAA,QAAA;AACA,oBAAA,qBAAA;AACA,oBAAA,wBAAA;AACA,oBAAA,OAAA;AACA,oBAAA,eAAA;AACA,oBAAA,aAAA;AACA,oBAAA;AACD,iBAAA,GACD;AACL;AACH,SAAA;QACAmC,OAAAA,EAAS;;;YAGPC,MAAAA,EAAQ;AAAIC,gBAAAA,GAAAA;AAA0B,aAAA;;;YAGtCC,KAAAA,EAAOC,6CAAAA;AACT,SAAA;QACA9B,OAAAA,EAAS;AAAIG,YAAAA,GAAAA,eAAAA;AAAiBD,YAAAA,KAAAA,EAAAA;YAAS6B,wBAAAA,CAAiB5C,GAAAA;AAAK;AAC/D,KAAA;AACF,CAAA;AAEA,MAAM6C,0BAA0B,OAAO7C,GAAAA,GAAAA;IACrC,MAAM,EACJ8C,SAAS,EAAEC,MAAM,EAAEC,SAAS,EAAE,EAC/B,GAAGhD,GAAAA;IAEJ,MAAMiD,UAAAA,GAAa,MAAMlD,iBAAAA,CAAkBC,GAAAA,CAAAA;IAE3C,OAAO;AACL,QAAA,GAAGiD,UAAU;QACbC,QAAAA,EAAU,QAAA;QACVC,IAAAA,EAAM,YAAA;QACN7B,KAAAA,EAAO;AACL,YAAA,GAAG2B,WAAW3B,KAAK;YACnB8B,SAAAA,EAAW,EAAA;AACXL,YAAAA,MAAAA;AACAC,YAAAA,SAAAA;YACAK,aAAAA,EAAe;gBACbC,KAAAA,EAAO;oBACLjD,MAAAA,EAAQL,GAAAA,CAAIiB,gBAAgB,GAAGsC,qBAAAA,CAAKC,IAAI,CAACxD,GAAAA,CAAIyD,UAAU,EAAE,YAAA,CAAA,GAAgBzD,GAAAA,CAAI0D;AAC/E;AACF;AACF;AACF,KAAA;AACF;AAEA,MAAMC,2BAA2B,OAAO3D,GAAAA,GAAAA;AACtC,IAAA,MAAM4D,UAAAA,GAAW,MAAMC,2BAAAA,CAAmB7D,GAAAA,CAAIY,GAAG,CAAA;IACjD,MAAMqC,UAAAA,GAAa,MAAMlD,iBAAAA,CAAkBC,GAAAA,CAAAA;IAE3C,OAAO;AACL,QAAA,GAAGiD,UAAU;QACbE,IAAAA,EAAM,aAAA;QACNZ,OAAAA,EAAS;AACP,YAAA,GAAGU,WAAWV,OAAO;YACrBG,KAAAA,EAAO;gBACL,GAAGO,UAAAA,CAAWV,OAAO,EAAEG,KAAK;AAC5B,gBAAA,GAAGoB,0BAAAA,CAAmB;AAAEF,8BAAAA;iBAAS;AACnC;AACF,SAAA;QACAG,MAAAA,EAAQ;YACNC,IAAAA,EAAM,KAAA;AACN;;;AAGC,UACDC,YAAAA,EAAc,IAAA;YACdC,cAAAA,EAAgB,IAAA;YAChBC,IAAAA,EAAMnE,GAAAA,CAAI8C,OAAO,CAACqB,IAAI;YACtBC,GAAAA,EAAK;gBACHC,OAAAA,EAAS,KAAA;AACT;;;;AAIC,YACDN,QAAQ/D,GAAAA,CAAIK,MAAM,CAAC0D,MAAM,CAACO;AAC5B;AACF,SAAA;QACAC,OAAAA,EAAS;AACX,KAAA;AACF;AAEA,MAAMC,YAAAA,GAAe;AAAC,IAAA,gBAAA;AAAkB,IAAA,iBAAA;AAAmB,IAAA,gBAAA;AAAkB,IAAA;AAAkB,CAAA;AAI/F,MAAMC,yBAAAA,GAA4B,OAAOC,QAAAA,EAAsB1E,GAAAA,GAAAA;IAC7D,MAAM2E,UAAAA,GAAa,MAAMC,oBAAAA,CAA8BJ,YAAAA,EAAcxE,GAAAA,CAAAA;AAErE,IAAA,IAAI2E,UAAAA,EAAY;AACd,QAAA,OAAOA,UAAAA,CAAWD,QAAAA,CAAAA;AACpB,IAAA;IAEA,OAAOA,QAAAA;AACT;;;;;;"}
|