@strapi/strapi 5.30.0 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +3 -2
  2. package/dist/package.json.js +1 -1
  3. package/dist/package.json.mjs +1 -1
  4. package/dist/src/cli/commands/configuration/restore.js.map +1 -1
  5. package/dist/src/cli/commands/configuration/restore.mjs.map +1 -1
  6. package/dist/src/cli/commands/export/action.js.map +1 -1
  7. package/dist/src/cli/commands/export/action.mjs.map +1 -1
  8. package/dist/src/cli/commands/import/action.js.map +1 -1
  9. package/dist/src/cli/commands/import/action.mjs.map +1 -1
  10. package/dist/src/cli/commands/openapi/generate.js.map +1 -1
  11. package/dist/src/cli/commands/openapi/generate.mjs.map +1 -1
  12. package/dist/src/cli/commands/report.js.map +1 -1
  13. package/dist/src/cli/commands/report.mjs.map +1 -1
  14. package/dist/src/cli/commands/start.js.map +1 -1
  15. package/dist/src/cli/commands/start.mjs.map +1 -1
  16. package/dist/src/cli/commands/telemetry/disable.js.map +1 -1
  17. package/dist/src/cli/commands/telemetry/disable.mjs.map +1 -1
  18. package/dist/src/cli/commands/telemetry/enable.js.map +1 -1
  19. package/dist/src/cli/commands/telemetry/enable.mjs.map +1 -1
  20. package/dist/src/cli/commands/transfer/command.js.map +1 -1
  21. package/dist/src/cli/commands/transfer/command.mjs.map +1 -1
  22. package/dist/src/cli/commands/version.js.map +1 -1
  23. package/dist/src/cli/commands/version.mjs.map +1 -1
  24. package/dist/src/cli/utils/commander.js.map +1 -1
  25. package/dist/src/cli/utils/commander.mjs.map +1 -1
  26. package/dist/src/cli/utils/data-transfer.js.map +1 -1
  27. package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
  28. package/dist/src/cli/utils/helpers.js.map +1 -1
  29. package/dist/src/cli/utils/helpers.mjs.map +1 -1
  30. package/dist/src/cli/utils/logger.js.map +1 -1
  31. package/dist/src/cli/utils/logger.mjs.map +1 -1
  32. package/dist/src/cli/utils/telemetry.js.map +1 -1
  33. package/dist/src/cli/utils/telemetry.mjs.map +1 -1
  34. package/dist/src/node/core/dependencies.js.map +1 -1
  35. package/dist/src/node/core/dependencies.mjs.map +1 -1
  36. package/dist/src/node/core/errors.js.map +1 -1
  37. package/dist/src/node/core/errors.mjs.map +1 -1
  38. package/dist/src/node/core/plugins.js.map +1 -1
  39. package/dist/src/node/core/plugins.mjs.map +1 -1
  40. package/dist/src/node/core/timer.js.map +1 -1
  41. package/dist/src/node/core/timer.mjs.map +1 -1
  42. package/dist/src/node/create-build-context.js.map +1 -1
  43. package/dist/src/node/create-build-context.mjs.map +1 -1
  44. package/dist/src/node/develop.js.map +1 -1
  45. package/dist/src/node/develop.mjs.map +1 -1
  46. package/dist/src/node/staticFiles.js.map +1 -1
  47. package/dist/src/node/staticFiles.mjs.map +1 -1
  48. package/dist/src/node/vite/watch.js.map +1 -1
  49. package/dist/src/node/vite/watch.mjs.map +1 -1
  50. package/dist/src/node/webpack/config.js.map +1 -1
  51. package/dist/src/node/webpack/config.mjs.map +1 -1
  52. package/dist/src/node/webpack/watch.js.map +1 -1
  53. package/dist/src/node/webpack/watch.mjs.map +1 -1
  54. package/package.json +24 -24
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.mjs","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\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 { readableBytes, exitWith } from './helpers';\nimport { getParseListWithChoices, parseInteger, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\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 (e) {\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 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 using comma-separated types. Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types of data (plus schemas). Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\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 errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n info?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n // Create log file for all incoming diagnostics\n let logger: undefined | winston.Logger;\n const getLogger = () => {\n if (!logger) {\n logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_${Date.now()}.log`, {\n level: 'info',\n format: formats?.detailedLogs,\n })\n );\n }\n return logger;\n };\n\n // We don't want to write a log file until there is something to be logged\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' && info) {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n };\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 size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transferred (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\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: Partial<engineDataTransfer.ITransferEngineOptions>,\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\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: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\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 DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n excludeOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n};\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","DEFAULT_IGNORED_CONTENT_TYPES","abortTransfer","engine","strapi","destroy","e","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","join","getParseListWithChoices","onlyOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","errorColors","fatal","silly","yellow","formatDiagnostic","operation","info","logger","getLogger","createLogger","configs","createOutputFileConfiguration","now","format","formats","detailedLogs","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","size","elapsed","speed","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","uid","diff","path","concat","endPath","startsWith","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","includes","parseRestoreFromOptions","entitiesOptions","include","undefined","restoreConfig","entities","assets","configuration","webhook","coreStore"],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.mjs","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport 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 { readableBytes, exitWith } from './helpers';\nimport { getParseListWithChoices, parseInteger, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\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 (e) {\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 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 using comma-separated types. Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types of data (plus schemas). Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\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 errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n info?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n // Create log file for all incoming diagnostics\n let logger: undefined | winston.Logger;\n const getLogger = () => {\n if (!logger) {\n logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_${Date.now()}.log`, {\n level: 'info',\n format: formats?.detailedLogs,\n })\n );\n }\n return logger;\n };\n\n // We don't want to write a log file until there is something to be logged\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' && info) {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n };\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 size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transferred (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\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: Partial<engineDataTransfer.ITransferEngineOptions>,\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\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: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\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 DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n excludeOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n};\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","DEFAULT_IGNORED_CONTENT_TYPES","abortTransfer","engine","strapi","destroy","e","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","join","getParseListWithChoices","onlyOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","errorColors","fatal","silly","yellow","formatDiagnostic","operation","info","logger","getLogger","createLogger","configs","createOutputFileConfiguration","now","format","formats","detailedLogs","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","size","elapsed","speed","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","uid","diff","path","concat","endPath","startsWith","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","includes","parseRestoreFromOptions","entitiesOptions","include","undefined","restoreConfig","entities","assets","configuration","webhook","coreStore"],"mappings":"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"}
@@ -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 { prompt } from 'inquirer';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\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 = `${parseFloat((bytes / bytesPerKb ** i).toFixed(decimals))} ${sizes[i].padStart(\n 2\n )}`;\n\n return result.padStart(padStart);\n};\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 (err) {\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 { confirmed } = await 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 runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","parseFloat","toFixed","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","err","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, isArray } from 'lodash/fp';\nimport { prompt } from 'inquirer';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\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 = `${parseFloat((bytes / bytesPerKb ** i).toFixed(decimals))} ${sizes[i].padStart(\n 2\n )}`;\n\n return result.padStart(padStart);\n};\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 (err) {\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 { confirmed } = await 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 runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","parseFloat","toFixed","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","err","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
@@ -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 { prompt } from 'inquirer';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\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 = `${parseFloat((bytes / bytesPerKb ** i).toFixed(decimals))} ${sizes[i].padStart(\n 2\n )}`;\n\n return result.padStart(padStart);\n};\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 (err) {\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 { confirmed } = await 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 runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","parseFloat","toFixed","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","err","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
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 { prompt } from 'inquirer';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\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 = `${parseFloat((bytes / bytesPerKb ** i).toFixed(decimals))} ${sizes[i].padStart(\n 2\n )}`;\n\n return result.padStart(padStart);\n};\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 (err) {\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 { confirmed } = await 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 runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","parseFloat","toFixed","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","err","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAMA,aAAgB,GAAA;AACpBC,IAAAA,OAAAA,CAAAA,GAAAA;AACE,QAAA,OAAO,IAAI;AACb,KAAA;AACAC,IAAAA,IAAAA,CAAAA,GAAAA;AACE,QAAA,OAAO,IAAI;AACb,KAAA;AACAC,IAAAA,KAAAA,CAAAA,GAAAA;AACE,QAAA,OAAO,IAAI;AACb,KAAA;IACAC,IAAM,EAAA,EAAA;IACNC,UAAY,EAAA;AACd,CAAA;AAEA,MAAMC,iBAAoB,GAAA;AACxBH,IAAAA,KAAAA,CAAAA,GAAAA;AACE,QAAA,OAAO,IAAI;AACb,KAAA;AACAI,IAAAA,IAAAA,CAAAA,GAAAA;AACE,QAAA,OAAO,IAAI;AACb,KAAA;AACAC,IAAAA,MAAAA,CAAAA,GAAAA;AACE,QAAA,OAAO,IAAI;AACb;AACF,CAAA;AAEA,MAAMC,YAAe,GAAA,CAACC,OAAyB,GAAA,EAAE,GAAA;IAC/C,MAAM,EAAEC,MAAS,GAAA,KAAK,EAAEC,KAAAA,GAAQ,KAAK,EAAEC,SAAAA,GAAY,IAAI,EAAE,GAAGH,OAAAA;AAE5D,IAAA,MAAMI,KAAQ,GAAA;QAAEC,MAAQ,EAAA,CAAA;QAAGC,OAAS,EAAA;AAAE,KAAA;IAEtC,OAAO;AACL,QAAA,IAAIC,QAAW,CAAA,GAAA;AACb,YAAA,OAAOH,MAAME,OAAO;AACtB,SAAA;AAEA,QAAA,IAAID,MAAS,CAAA,GAAA;AACX,YAAA,OAAOD,MAAMC,MAAM;AACrB,SAAA;AAEAH,QAAAA,KAAAA,CAAAA,CAAM,GAAGM,IAAI,EAAA;YACX,IAAIP,MAAAA,IAAU,CAACC,KAAO,EAAA;AACpB,gBAAA;AACF;YAEAO,OAAQC,CAAAA,GAAG,CACTC,KAAMC,CAAAA,IAAI,CAAC,CAAC,OAAO,EAAET,SAAY,GAAA,CAAC,GAAG,EAAE,IAAIU,OAAOC,WAAW,EAAA,CAAG,CAAC,CAAC,GAAG,EAAG,CAAA,CAAC,CACtEN,EAAAA,GAAAA,IAAAA,CAAAA;AAEP,SAAA;AAEAO,QAAAA,IAAAA,CAAAA,CAAK,GAAGP,IAAI,EAAA;AACV,YAAA,IAAIP,MAAQ,EAAA;AACV,gBAAA;AACF;YAEAQ,OAAQM,CAAAA,IAAI,CACVJ,KAAMK,CAAAA,IAAI,CAAC,CAAC,MAAM,EAAEb,SAAY,GAAA,CAAC,GAAG,EAAE,IAAIU,OAAOC,WAAW,EAAA,CAAG,CAAC,CAAC,GAAG,EAAG,CAAA,CAAC,CACrEN,EAAAA,GAAAA,IAAAA,CAAAA;AAEP,SAAA;AAEAE,QAAAA,GAAAA,CAAAA,CAAI,GAAGF,IAAI,EAAA;AACT,YAAA,IAAIP,MAAQ,EAAA;AACV,gBAAA;AACF;YAEAQ,OAAQM,CAAAA,IAAI,CAACJ,KAAMK,CAAAA,IAAI,CAAC,CAAC,EAAEb,YAAY,CAAC,GAAG,EAAE,IAAIU,IAAAA,EAAAA,CAAOC,WAAW,EAAG,CAAA,CAAC,CAAC,GAAG,EAAA,CAAG,CAAC,CAAMN,EAAAA,GAAAA,IAAAA,CAAAA;AACvF,SAAA;AAEAS,QAAAA,OAAAA,CAAAA,CAAQ,GAAGT,IAAI,EAAA;AACb,YAAA,IAAIP,MAAQ,EAAA;AACV,gBAAA;AACF;YAEAQ,OAAQM,CAAAA,IAAI,CACVJ,KAAMO,CAAAA,KAAK,CAAC,CAAC,SAAS,EAAEf,SAAY,GAAA,CAAC,GAAG,EAAE,IAAIU,OAAOC,WAAW,EAAA,CAAG,CAAC,CAAC,GAAG,EAAG,CAAA,CAAC,CACzEN,EAAAA,GAAAA,IAAAA,CAAAA;AAEP,SAAA;AAEAW,QAAAA,IAAAA,CAAAA,CAAK,GAAGX,IAAI,EAAA;AACVJ,YAAAA,KAAAA,CAAME,OAAO,IAAI,CAAA;AAEjB,YAAA,IAAIL,MAAQ,EAAA;AACV,gBAAA;AACF;YAEAQ,OAAQU,CAAAA,IAAI,CACVR,KAAMS,CAAAA,MAAM,CAAC,CAAC,MAAM,EAAEjB,SAAY,GAAA,CAAC,GAAG,EAAE,IAAIU,OAAOC,WAAW,EAAA,CAAG,CAAC,CAAC,GAAG,EAAG,CAAA,CAAC,CACvEN,EAAAA,GAAAA,IAAAA,CAAAA;AAEP,SAAA;AAEAa,QAAAA,KAAAA,CAAAA,CAAM,GAAGb,IAAI,EAAA;AACXJ,YAAAA,KAAAA,CAAMC,MAAM,IAAI,CAAA;AAEhB,YAAA,IAAIJ,MAAQ,EAAA;AACV,gBAAA;AACF;YAEAQ,OAAQY,CAAAA,KAAK,CACXV,KAAMW,CAAAA,GAAG,CAAC,CAAC,OAAO,EAAEnB,SAAY,GAAA,CAAC,GAAG,EAAE,IAAIU,OAAOC,WAAW,EAAA,CAAG,CAAC,CAAC,GAAG,EAAG,CAAA,CAAC,CACrEN,EAAAA,GAAAA,IAAAA,CAAAA;AAEP,SAAA;AAEAe,QAAAA,OAAAA,CAAAA,CAAQ7B,IAAY,EAAA;AAClB,YAAA,IAAIO,MAAQ,EAAA;gBACV,OAAOX,aAAAA;AACT;AAEA,YAAA,OAAOkC,GAAI9B,CAAAA,IAAAA,CAAAA;AACb,SAAA;QAEA+B,WAAYC,CAAAA,CAAAA,SAAiB,EAAEhC,IAAY,EAAA;AACzC,YAAA,IAAIO,MAAQ,EAAA;gBACV,OAAOL,iBAAAA;AACT;AAEA,YAAA,MAAM6B,WAAc,GAAA,IAAIE,sBAAYC,CAAAA,SAAS,CAAC;AAC5CC,gBAAAA,MAAAA,EAAQ,CAAC,EAAEnC,IAAAA,GAAO,CAAC,EAAEA,KAAK,EAAE,CAAC,GAAG,EAAA,CAAG,EAAEiB,KAAMO,CAAAA,KAAK,CAAC,OAAA,CAAA,CAAS,eAAe,CAAC;gBAC1EY,eAAiB,EAAA,QAAA;gBACjBC,iBAAmB,EAAA,QAAA;gBACnBC,UAAY,EAAA,IAAA;gBACZC,WAAa,EAAA;AACf,aAAA,CAAA;YAEAR,WAAYhC,CAAAA,KAAK,CAACiC,SAAW,EAAA,CAAA,CAAA;YAE7B,OAAOD,WAAAA;AACT;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"logger.js","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.mjs","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}
1
+ {"version":3,"file":"logger.mjs","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sources":["../../../../src/cli/utils/telemetry.ts"],"sourcesContent":["import { generateInstallId, env } from '@strapi/utils';\n\nexport const sendEvent = async (event: string, uuid: string, installId?: any) => {\n const analyticsUrl = env('STRAPI_ANALYTICS_URL', 'https://analytics.strapi.io');\n try {\n await fetch(`${analyticsUrl}/api/v2/track`, {\n method: 'POST',\n body: JSON.stringify({\n event,\n deviceId: generateInstallId(uuid, installId),\n groupProperties: { projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch (e) {\n // ...\n }\n};\n"],"names":["sendEvent","event","uuid","installId","analyticsUrl","env","fetch","method","body","JSON","stringify","deviceId","generateInstallId","groupProperties","projectId","headers","e"],"mappings":";;;;AAEaA,MAAAA,SAAAA,GAAY,OAAOC,KAAAA,EAAeC,IAAcC,EAAAA,SAAAA,GAAAA;IAC3D,MAAMC,YAAAA,GAAeC,UAAI,sBAAwB,EAAA,6BAAA,CAAA;IACjD,IAAI;AACF,QAAA,MAAMC,MAAM,CAAC,EAAEF,YAAa,CAAA,aAAa,CAAC,EAAE;YAC1CG,MAAQ,EAAA,MAAA;YACRC,IAAMC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACnBT,gBAAAA,KAAAA;AACAU,gBAAAA,QAAAA,EAAUC,wBAAkBV,IAAMC,EAAAA,SAAAA,CAAAA;gBAClCU,eAAiB,EAAA;oBAAEC,SAAWZ,EAAAA;AAAK;AACrC,aAAA,CAAA;YACAa,OAAS,EAAA;gBACP,cAAgB,EAAA,kBAAA;gBAChB,gBAAkBd,EAAAA;AACpB;AACF,SAAA,CAAA;AACF,KAAA,CAAE,OAAOe,CAAG,EAAA;;AAEZ;AACF;;;;"}
1
+ {"version":3,"file":"telemetry.js","sources":["../../../../src/cli/utils/telemetry.ts"],"sourcesContent":["import { generateInstallId, env } from '@strapi/utils';\n\nexport const sendEvent = async (event: string, uuid: string, installId?: any) => {\n const analyticsUrl = env('STRAPI_ANALYTICS_URL', 'https://analytics.strapi.io');\n try {\n await fetch(`${analyticsUrl}/api/v2/track`, {\n method: 'POST',\n body: JSON.stringify({\n event,\n deviceId: generateInstallId(uuid, installId),\n groupProperties: { projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch (e) {\n // ...\n }\n};\n"],"names":["sendEvent","event","uuid","installId","analyticsUrl","env","fetch","method","body","JSON","stringify","deviceId","generateInstallId","groupProperties","projectId","headers","e"],"mappings":";;;;AAEaA,MAAAA,SAAAA,GAAY,OAAOC,KAAAA,EAAeC,IAAcC,EAAAA,SAAAA,GAAAA;IAC3D,MAAMC,YAAAA,GAAeC,UAAI,sBAAwB,EAAA,6BAAA,CAAA;IACjD,IAAI;AACF,QAAA,MAAMC,KAAM,CAAA,CAAA,EAAGF,YAAa,CAAA,aAAa,CAAC,EAAE;YAC1CG,MAAQ,EAAA,MAAA;YACRC,IAAMC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACnBT,gBAAAA,KAAAA;AACAU,gBAAAA,QAAAA,EAAUC,wBAAkBV,IAAMC,EAAAA,SAAAA,CAAAA;gBAClCU,eAAiB,EAAA;oBAAEC,SAAWZ,EAAAA;AAAK;AACrC,aAAA,CAAA;YACAa,OAAS,EAAA;gBACP,cAAgB,EAAA,kBAAA;gBAChB,gBAAkBd,EAAAA;AACpB;AACF,SAAA,CAAA;AACF,KAAA,CAAE,OAAOe,CAAG,EAAA;;AAEZ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.mjs","sources":["../../../../src/cli/utils/telemetry.ts"],"sourcesContent":["import { generateInstallId, env } from '@strapi/utils';\n\nexport const sendEvent = async (event: string, uuid: string, installId?: any) => {\n const analyticsUrl = env('STRAPI_ANALYTICS_URL', 'https://analytics.strapi.io');\n try {\n await fetch(`${analyticsUrl}/api/v2/track`, {\n method: 'POST',\n body: JSON.stringify({\n event,\n deviceId: generateInstallId(uuid, installId),\n groupProperties: { projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch (e) {\n // ...\n }\n};\n"],"names":["sendEvent","event","uuid","installId","analyticsUrl","env","fetch","method","body","JSON","stringify","deviceId","generateInstallId","groupProperties","projectId","headers","e"],"mappings":";;AAEaA,MAAAA,SAAAA,GAAY,OAAOC,KAAAA,EAAeC,IAAcC,EAAAA,SAAAA,GAAAA;IAC3D,MAAMC,YAAAA,GAAeC,IAAI,sBAAwB,EAAA,6BAAA,CAAA;IACjD,IAAI;AACF,QAAA,MAAMC,MAAM,CAAC,EAAEF,YAAa,CAAA,aAAa,CAAC,EAAE;YAC1CG,MAAQ,EAAA,MAAA;YACRC,IAAMC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACnBT,gBAAAA,KAAAA;AACAU,gBAAAA,QAAAA,EAAUC,kBAAkBV,IAAMC,EAAAA,SAAAA,CAAAA;gBAClCU,eAAiB,EAAA;oBAAEC,SAAWZ,EAAAA;AAAK;AACrC,aAAA,CAAA;YACAa,OAAS,EAAA;gBACP,cAAgB,EAAA,kBAAA;gBAChB,gBAAkBd,EAAAA;AACpB;AACF,SAAA,CAAA;AACF,KAAA,CAAE,OAAOe,CAAG,EAAA;;AAEZ;AACF;;;;"}
1
+ {"version":3,"file":"telemetry.mjs","sources":["../../../../src/cli/utils/telemetry.ts"],"sourcesContent":["import { generateInstallId, env } from '@strapi/utils';\n\nexport const sendEvent = async (event: string, uuid: string, installId?: any) => {\n const analyticsUrl = env('STRAPI_ANALYTICS_URL', 'https://analytics.strapi.io');\n try {\n await fetch(`${analyticsUrl}/api/v2/track`, {\n method: 'POST',\n body: JSON.stringify({\n event,\n deviceId: generateInstallId(uuid, installId),\n groupProperties: { projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch (e) {\n // ...\n }\n};\n"],"names":["sendEvent","event","uuid","installId","analyticsUrl","env","fetch","method","body","JSON","stringify","deviceId","generateInstallId","groupProperties","projectId","headers","e"],"mappings":";;AAEaA,MAAAA,SAAAA,GAAY,OAAOC,KAAAA,EAAeC,IAAcC,EAAAA,SAAAA,GAAAA;IAC3D,MAAMC,YAAAA,GAAeC,IAAI,sBAAwB,EAAA,6BAAA,CAAA;IACjD,IAAI;AACF,QAAA,MAAMC,KAAM,CAAA,CAAA,EAAGF,YAAa,CAAA,aAAa,CAAC,EAAE;YAC1CG,MAAQ,EAAA,MAAA;YACRC,IAAMC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACnBT,gBAAAA,KAAAA;AACAU,gBAAAA,QAAAA,EAAUC,kBAAkBV,IAAMC,EAAAA,SAAAA,CAAAA;gBAClCU,eAAiB,EAAA;oBAAEC,SAAWZ,EAAAA;AAAK;AACrC,aAAA,CAAA;YACAa,OAAS,EAAA;gBACP,cAAgB,EAAA,kBAAA;gBAChB,gBAAkBd,EAAAA;AACpB;AACF,SAAA,CAAA;AACF,KAAA,CAAE,OAAOe,CAAG,EAAA;;AAEZ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\nimport type { BuildOptions } from '../build';\nimport { getPackageManager } from './managers';\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n};\n\ninterface CheckRequiredDependenciesResult {\n didInstall: boolean;\n}\n\ninterface DepToInstall {\n name: string;\n wantedVersion: string;\n declaredVersion?: never;\n}\n\n/**\n * Checks the user's project that it has declared and installed the required dependencies\n * needed by the Strapi admin project. Whilst generally speaking most modules will be\n * declared by the actual packages there are some packages where you only really want one of\n * and thus they are declared as peer dependencies – react / styled-components / etc.\n *\n * If these deps are not installed or declared, then we prompt the user to correct this. In\n * V4 this is not a hard requirement, but in V5 it will be. Might as well get people started now.\n */\nconst checkRequiredDependencies = async ({\n cwd,\n logger,\n}: Pick<BuildOptions, 'cwd' | 'logger'>): Promise<CheckRequiredDependenciesResult> => {\n /**\n * This enables us to use experimental deps for libraries like\n * react or styled-components. This is useful for testing against.\n */\n if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n return { didInstall: false };\n }\n\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n interface DepToReview {\n name: string;\n wantedVersion: string;\n declaredVersion: string;\n }\n\n /**\n * Run through each of the peer deps and figure out if they need to be\n * installed or they need their version checked against.\n */\n const { install, review } = Object.entries(PEER_DEPS).reduce<{\n install: DepToInstall[];\n review: DepToReview[];\n }>(\n (acc, [name, version]) => {\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n const declaredVersion = pkg.packageJson.dependencies[name];\n\n if (!declaredVersion) {\n acc.install.push({\n name,\n wantedVersion: version,\n });\n } else {\n acc.review.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return acc;\n },\n {\n install: [],\n review: [],\n }\n );\n\n if (install.length > 0) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n await installDependencies(install, {\n cwd,\n logger,\n });\n\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n return { didInstall: true };\n }\n\n if (review.length) {\n const errors: string[] = [];\n\n for (const dep of review) {\n // The version specified in package.json could be incorrect, eg `foo`\n let minDeclaredVersion: SemVer | null = null;\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n /**\n * The delcared version should be semver compatible with our required version\n * of the dependency. If it's not, we should advise the user to change it.\n */\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n /**\n * TODO: when we know the packageManager we can advise the actual install command.\n */\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n }\n\n return { didInstall: false };\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nconst installDependencies = async (\n install: DepToInstall[],\n { cwd, logger }: Pick<BuildOptions, 'cwd' | 'logger'>\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = install.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nexport { checkRequiredDependencies, getModule };\nexport type { CheckRequiredDependenciesResult, PackageJson };\n"],"names":["PEER_DEPS","react","checkRequiredDependencies","cwd","logger","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","pkg","readPkgUp","Error","debug","os","EOL","packageJson","install","review","Object","entries","reduce","acc","name","version","dependencies","declaredVersion","push","wantedVersion","length","info","map","join","installDependencies","file","args","argv","execa","stdio","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","installedVersion","getModuleVersion","NODE_ENV","getModule","modulePackagePath","resolveFrom","silent","path","fs","readFile","then","res","JSON","parse","packageManager","getPackageManager","error","exit","execOptions","encoding","packages","result","npmArgs","yarnArgs","pnpmArgs","exitCode","failed"],"mappings":"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"}
1
+ {"version":3,"file":"dependencies.js","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\nimport type { BuildOptions } from '../build';\nimport { getPackageManager } from './managers';\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n};\n\ninterface CheckRequiredDependenciesResult {\n didInstall: boolean;\n}\n\ninterface DepToInstall {\n name: string;\n wantedVersion: string;\n declaredVersion?: never;\n}\n\n/**\n * Checks the user's project that it has declared and installed the required dependencies\n * needed by the Strapi admin project. Whilst generally speaking most modules will be\n * declared by the actual packages there are some packages where you only really want one of\n * and thus they are declared as peer dependencies – react / styled-components / etc.\n *\n * If these deps are not installed or declared, then we prompt the user to correct this. In\n * V4 this is not a hard requirement, but in V5 it will be. Might as well get people started now.\n */\nconst checkRequiredDependencies = async ({\n cwd,\n logger,\n}: Pick<BuildOptions, 'cwd' | 'logger'>): Promise<CheckRequiredDependenciesResult> => {\n /**\n * This enables us to use experimental deps for libraries like\n * react or styled-components. This is useful for testing against.\n */\n if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n return { didInstall: false };\n }\n\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n interface DepToReview {\n name: string;\n wantedVersion: string;\n declaredVersion: string;\n }\n\n /**\n * Run through each of the peer deps and figure out if they need to be\n * installed or they need their version checked against.\n */\n const { install, review } = Object.entries(PEER_DEPS).reduce<{\n install: DepToInstall[];\n review: DepToReview[];\n }>(\n (acc, [name, version]) => {\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n const declaredVersion = pkg.packageJson.dependencies[name];\n\n if (!declaredVersion) {\n acc.install.push({\n name,\n wantedVersion: version,\n });\n } else {\n acc.review.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return acc;\n },\n {\n install: [],\n review: [],\n }\n );\n\n if (install.length > 0) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n await installDependencies(install, {\n cwd,\n logger,\n });\n\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n return { didInstall: true };\n }\n\n if (review.length) {\n const errors: string[] = [];\n\n for (const dep of review) {\n // The version specified in package.json could be incorrect, eg `foo`\n let minDeclaredVersion: SemVer | null = null;\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n /**\n * The delcared version should be semver compatible with our required version\n * of the dependency. If it's not, we should advise the user to change it.\n */\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n /**\n * TODO: when we know the packageManager we can advise the actual install command.\n */\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n }\n\n return { didInstall: false };\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nconst installDependencies = async (\n install: DepToInstall[],\n { cwd, logger }: Pick<BuildOptions, 'cwd' | 'logger'>\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = install.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nexport { checkRequiredDependencies, getModule };\nexport type { CheckRequiredDependenciesResult, PackageJson };\n"],"names":["PEER_DEPS","react","checkRequiredDependencies","cwd","logger","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","pkg","readPkgUp","Error","debug","os","EOL","packageJson","install","review","Object","entries","reduce","acc","name","version","dependencies","declaredVersion","push","wantedVersion","length","info","map","join","installDependencies","file","args","argv","execa","stdio","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","installedVersion","getModuleVersion","NODE_ENV","getModule","modulePackagePath","resolveFrom","silent","path","fs","readFile","then","res","JSON","parse","packageManager","getPackageManager","error","exit","execOptions","encoding","packages","result","npmArgs","yarnArgs","pnpmArgs","exitCode","failed"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.mjs","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\nimport type { BuildOptions } from '../build';\nimport { getPackageManager } from './managers';\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n};\n\ninterface CheckRequiredDependenciesResult {\n didInstall: boolean;\n}\n\ninterface DepToInstall {\n name: string;\n wantedVersion: string;\n declaredVersion?: never;\n}\n\n/**\n * Checks the user's project that it has declared and installed the required dependencies\n * needed by the Strapi admin project. Whilst generally speaking most modules will be\n * declared by the actual packages there are some packages where you only really want one of\n * and thus they are declared as peer dependencies – react / styled-components / etc.\n *\n * If these deps are not installed or declared, then we prompt the user to correct this. In\n * V4 this is not a hard requirement, but in V5 it will be. Might as well get people started now.\n */\nconst checkRequiredDependencies = async ({\n cwd,\n logger,\n}: Pick<BuildOptions, 'cwd' | 'logger'>): Promise<CheckRequiredDependenciesResult> => {\n /**\n * This enables us to use experimental deps for libraries like\n * react or styled-components. This is useful for testing against.\n */\n if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n return { didInstall: false };\n }\n\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n interface DepToReview {\n name: string;\n wantedVersion: string;\n declaredVersion: string;\n }\n\n /**\n * Run through each of the peer deps and figure out if they need to be\n * installed or they need their version checked against.\n */\n const { install, review } = Object.entries(PEER_DEPS).reduce<{\n install: DepToInstall[];\n review: DepToReview[];\n }>(\n (acc, [name, version]) => {\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n const declaredVersion = pkg.packageJson.dependencies[name];\n\n if (!declaredVersion) {\n acc.install.push({\n name,\n wantedVersion: version,\n });\n } else {\n acc.review.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return acc;\n },\n {\n install: [],\n review: [],\n }\n );\n\n if (install.length > 0) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n await installDependencies(install, {\n cwd,\n logger,\n });\n\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n return { didInstall: true };\n }\n\n if (review.length) {\n const errors: string[] = [];\n\n for (const dep of review) {\n // The version specified in package.json could be incorrect, eg `foo`\n let minDeclaredVersion: SemVer | null = null;\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n /**\n * The delcared version should be semver compatible with our required version\n * of the dependency. If it's not, we should advise the user to change it.\n */\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n /**\n * TODO: when we know the packageManager we can advise the actual install command.\n */\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n }\n\n return { didInstall: false };\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nconst installDependencies = async (\n install: DepToInstall[],\n { cwd, logger }: Pick<BuildOptions, 'cwd' | 'logger'>\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = install.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nexport { checkRequiredDependencies, getModule };\nexport type { CheckRequiredDependenciesResult, PackageJson };\n"],"names":["PEER_DEPS","react","checkRequiredDependencies","cwd","logger","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","pkg","readPkgUp","Error","debug","os","EOL","packageJson","install","review","Object","entries","reduce","acc","name","version","dependencies","declaredVersion","push","wantedVersion","length","info","map","join","installDependencies","file","args","argv","execa","stdio","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","installedVersion","getModuleVersion","NODE_ENV","getModule","modulePackagePath","resolveFrom","silent","path","fs","readFile","then","res","JSON","parse","packageManager","getPackageManager","error","exit","execOptions","encoding","packages","result","npmArgs","yarnArgs","pnpmArgs","exitCode","failed"],"mappings":"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"}
1
+ {"version":3,"file":"dependencies.mjs","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\nimport type { BuildOptions } from '../build';\nimport { getPackageManager } from './managers';\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n};\n\ninterface CheckRequiredDependenciesResult {\n didInstall: boolean;\n}\n\ninterface DepToInstall {\n name: string;\n wantedVersion: string;\n declaredVersion?: never;\n}\n\n/**\n * Checks the user's project that it has declared and installed the required dependencies\n * needed by the Strapi admin project. Whilst generally speaking most modules will be\n * declared by the actual packages there are some packages where you only really want one of\n * and thus they are declared as peer dependencies – react / styled-components / etc.\n *\n * If these deps are not installed or declared, then we prompt the user to correct this. In\n * V4 this is not a hard requirement, but in V5 it will be. Might as well get people started now.\n */\nconst checkRequiredDependencies = async ({\n cwd,\n logger,\n}: Pick<BuildOptions, 'cwd' | 'logger'>): Promise<CheckRequiredDependenciesResult> => {\n /**\n * This enables us to use experimental deps for libraries like\n * react or styled-components. This is useful for testing against.\n */\n if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n return { didInstall: false };\n }\n\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n interface DepToReview {\n name: string;\n wantedVersion: string;\n declaredVersion: string;\n }\n\n /**\n * Run through each of the peer deps and figure out if they need to be\n * installed or they need their version checked against.\n */\n const { install, review } = Object.entries(PEER_DEPS).reduce<{\n install: DepToInstall[];\n review: DepToReview[];\n }>(\n (acc, [name, version]) => {\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n const declaredVersion = pkg.packageJson.dependencies[name];\n\n if (!declaredVersion) {\n acc.install.push({\n name,\n wantedVersion: version,\n });\n } else {\n acc.review.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return acc;\n },\n {\n install: [],\n review: [],\n }\n );\n\n if (install.length > 0) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n await installDependencies(install, {\n cwd,\n logger,\n });\n\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n return { didInstall: true };\n }\n\n if (review.length) {\n const errors: string[] = [];\n\n for (const dep of review) {\n // The version specified in package.json could be incorrect, eg `foo`\n let minDeclaredVersion: SemVer | null = null;\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n /**\n * The delcared version should be semver compatible with our required version\n * of the dependency. If it's not, we should advise the user to change it.\n */\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n /**\n * TODO: when we know the packageManager we can advise the actual install command.\n */\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n }\n\n return { didInstall: false };\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nconst installDependencies = async (\n install: DepToInstall[],\n { cwd, logger }: Pick<BuildOptions, 'cwd' | 'logger'>\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = install.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nexport { checkRequiredDependencies, getModule };\nexport type { CheckRequiredDependenciesResult, PackageJson };\n"],"names":["PEER_DEPS","react","checkRequiredDependencies","cwd","logger","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","pkg","readPkgUp","Error","debug","os","EOL","packageJson","install","review","Object","entries","reduce","acc","name","version","dependencies","declaredVersion","push","wantedVersion","length","info","map","join","installDependencies","file","args","argv","execa","stdio","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","installedVersion","getModuleVersion","NODE_ENV","getModule","modulePackagePath","resolveFrom","silent","path","fs","readFile","then","res","JSON","parse","packageManager","getPackageManager","error","exit","execOptions","encoding","packages","result","npmArgs","yarnArgs","pnpmArgs","exitCode","failed"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../../../../src/node/core/errors.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\nimport { errors } from '@strapi/utils';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n if (err instanceof errors.YupValidationError) {\n const message = [];\n const size = err.details.errors.length;\n\n for (const error of err.details.errors) {\n // No need to repeat the error message as it's the same as the err.message\n if (size === 1) {\n message.push(` value: ${error.value}`);\n continue;\n }\n\n message.push(\n [` [${error.name}]`, ` message: ${error.message}`, ` value: ${error.value}`].join(\n '\\n'\n )\n );\n }\n\n console.log(\n chalk.red(\n boxen(['Details:', message.join('\\n\\n')].join('\\n'), {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n"],"names":["isError","err","Error","handleUnexpectedError","console","error","chalk","red","os","EOL","stack","log","boxen","padding","align","errors","YupValidationError","message","size","details","length","push","value","name","join","process","exit"],"mappings":";;;;;;;AAKMA,MAAAA,OAAAA,GAAU,CAACC,GAAAA,GAA+BA,GAAeC,YAAAA;AAE/D;;;;;IAMA,MAAMC,wBAAwB,CAACF,GAAAA,GAAAA;IAC7BG,OAAQC,CAAAA,KAAK,CACXC,KAAAA,CAAMC,GAAG,CACP,CAAC,QAAQ,CAAC,EACV,oFACAC,EAAAA,EAAAA,CAAGC,GAAG,CAAA,CAAA;AAIV,IAAA,IAAIT,OAAQC,CAAAA,GAAAA,CAAAA,IAAQA,GAAIS,CAAAA,KAAK,EAAE;;QAE7BN,OAAQO,CAAAA,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAMX,CAAAA,GAAAA,CAAIS,KAAK,EAAE;YACfG,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;IAEA,IAAIb,GAAAA,YAAec,YAAOC,CAAAA,kBAAkB,EAAE;AAC5C,QAAA,MAAMC,UAAU,EAAE;AAClB,QAAA,MAAMC,OAAOjB,GAAIkB,CAAAA,OAAO,CAACJ,MAAM,CAACK,MAAM;AAEtC,QAAA,KAAK,MAAMf,KAASJ,IAAAA,GAAAA,CAAIkB,OAAO,CAACJ,MAAM,CAAE;;AAEtC,YAAA,IAAIG,SAAS,CAAG,EAAA;gBACdD,OAAQI,CAAAA,IAAI,CAAC,CAAC,SAAS,EAAEhB,KAAMiB,CAAAA,KAAK,CAAC,CAAC,CAAA;AACtC,gBAAA;AACF;AAEAL,YAAAA,OAAAA,CAAQI,IAAI,CACV;AAAC,gBAAA,CAAC,GAAG,EAAEhB,KAAAA,CAAMkB,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAElB,KAAMY,CAAAA,OAAO,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAEZ,KAAMiB,CAAAA,KAAK,CAAC;AAAE,aAAA,CAACE,IAAI,CACxF,IAAA,CAAA,CAAA;AAGN;AAEApB,QAAAA,OAAAA,CAAQO,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAM,CAAA;AAAC,YAAA,UAAA;AAAYK,YAAAA,OAAAA,CAAQO,IAAI,CAAC,MAAA;SAAQ,CAACA,IAAI,CAAC,IAAO,CAAA,EAAA;YACnDX,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;AAEAW,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;;;;;"}
1
+ {"version":3,"file":"errors.js","sources":["../../../../src/node/core/errors.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\nimport { errors } from '@strapi/utils';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n if (err instanceof errors.YupValidationError) {\n const message = [];\n const size = err.details.errors.length;\n\n for (const error of err.details.errors) {\n // No need to repeat the error message as it's the same as the err.message\n if (size === 1) {\n message.push(` value: ${error.value}`);\n continue;\n }\n\n message.push(\n [` [${error.name}]`, ` message: ${error.message}`, ` value: ${error.value}`].join(\n '\\n'\n )\n );\n }\n\n console.log(\n chalk.red(\n boxen(['Details:', message.join('\\n\\n')].join('\\n'), {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n"],"names":["isError","err","Error","handleUnexpectedError","console","error","chalk","red","os","EOL","stack","log","boxen","padding","align","errors","YupValidationError","message","size","details","length","push","value","name","join","process","exit"],"mappings":";;;;;;;AAKMA,MAAAA,OAAAA,GAAU,CAACC,GAAAA,GAA+BA,GAAeC,YAAAA;AAE/D;;;;;IAMA,MAAMC,wBAAwB,CAACF,GAAAA,GAAAA;IAC7BG,OAAQC,CAAAA,KAAK,CACXC,KAAAA,CAAMC,GAAG,CACP,CAAC,QAAQ,CAAC,EACV,oFACAC,EAAAA,EAAAA,CAAGC,GAAG,CAAA,CAAA;AAIV,IAAA,IAAIT,OAAQC,CAAAA,GAAAA,CAAAA,IAAQA,GAAIS,CAAAA,KAAK,EAAE;;QAE7BN,OAAQO,CAAAA,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAMX,CAAAA,GAAAA,CAAIS,KAAK,EAAE;YACfG,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;IAEA,IAAIb,GAAAA,YAAec,YAAOC,CAAAA,kBAAkB,EAAE;AAC5C,QAAA,MAAMC,UAAU,EAAE;AAClB,QAAA,MAAMC,OAAOjB,GAAIkB,CAAAA,OAAO,CAACJ,MAAM,CAACK,MAAM;AAEtC,QAAA,KAAK,MAAMf,KAASJ,IAAAA,GAAAA,CAAIkB,OAAO,CAACJ,MAAM,CAAE;;AAEtC,YAAA,IAAIG,SAAS,CAAG,EAAA;AACdD,gBAAAA,OAAAA,CAAQI,IAAI,CAAC,CAAC,SAAS,EAAEhB,KAAAA,CAAMiB,KAAK,CAAE,CAAA,CAAA;AACtC,gBAAA;AACF;AAEAL,YAAAA,OAAAA,CAAQI,IAAI,CACV;AAAC,gBAAA,CAAC,GAAG,EAAEhB,KAAAA,CAAMkB,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAElB,KAAMY,CAAAA,OAAO,CAAE,CAAA;AAAE,gBAAA,CAAC,aAAa,EAAEZ,KAAMiB,CAAAA,KAAK,CAAE;AAAC,aAAA,CAACE,IAAI,CACxF,IAAA,CAAA,CAAA;AAGN;AAEApB,QAAAA,OAAAA,CAAQO,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAM,CAAA;AAAC,YAAA,UAAA;AAAYK,YAAAA,OAAAA,CAAQO,IAAI,CAAC,MAAA;SAAQ,CAACA,IAAI,CAAC,IAAO,CAAA,EAAA;YACnDX,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;AAEAW,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","sources":["../../../../src/node/core/errors.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\nimport { errors } from '@strapi/utils';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n if (err instanceof errors.YupValidationError) {\n const message = [];\n const size = err.details.errors.length;\n\n for (const error of err.details.errors) {\n // No need to repeat the error message as it's the same as the err.message\n if (size === 1) {\n message.push(` value: ${error.value}`);\n continue;\n }\n\n message.push(\n [` [${error.name}]`, ` message: ${error.message}`, ` value: ${error.value}`].join(\n '\\n'\n )\n );\n }\n\n console.log(\n chalk.red(\n boxen(['Details:', message.join('\\n\\n')].join('\\n'), {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n"],"names":["isError","err","Error","handleUnexpectedError","console","error","chalk","red","os","EOL","stack","log","boxen","padding","align","errors","YupValidationError","message","size","details","length","push","value","name","join","process","exit"],"mappings":";;;;;AAKMA,MAAAA,OAAAA,GAAU,CAACC,GAAAA,GAA+BA,GAAeC,YAAAA;AAE/D;;;;;IAMA,MAAMC,wBAAwB,CAACF,GAAAA,GAAAA;IAC7BG,OAAQC,CAAAA,KAAK,CACXC,KAAAA,CAAMC,GAAG,CACP,CAAC,QAAQ,CAAC,EACV,oFACAC,EAAAA,EAAAA,CAAGC,GAAG,CAAA,CAAA;AAIV,IAAA,IAAIT,OAAQC,CAAAA,GAAAA,CAAAA,IAAQA,GAAIS,CAAAA,KAAK,EAAE;;QAE7BN,OAAQO,CAAAA,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAMX,CAAAA,GAAAA,CAAIS,KAAK,EAAE;YACfG,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;IAEA,IAAIb,GAAAA,YAAec,MAAOC,CAAAA,kBAAkB,EAAE;AAC5C,QAAA,MAAMC,UAAU,EAAE;AAClB,QAAA,MAAMC,OAAOjB,GAAIkB,CAAAA,OAAO,CAACJ,MAAM,CAACK,MAAM;AAEtC,QAAA,KAAK,MAAMf,KAASJ,IAAAA,GAAAA,CAAIkB,OAAO,CAACJ,MAAM,CAAE;;AAEtC,YAAA,IAAIG,SAAS,CAAG,EAAA;gBACdD,OAAQI,CAAAA,IAAI,CAAC,CAAC,SAAS,EAAEhB,KAAMiB,CAAAA,KAAK,CAAC,CAAC,CAAA;AACtC,gBAAA;AACF;AAEAL,YAAAA,OAAAA,CAAQI,IAAI,CACV;AAAC,gBAAA,CAAC,GAAG,EAAEhB,KAAAA,CAAMkB,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAElB,KAAMY,CAAAA,OAAO,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAEZ,KAAMiB,CAAAA,KAAK,CAAC;AAAE,aAAA,CAACE,IAAI,CACxF,IAAA,CAAA,CAAA;AAGN;AAEApB,QAAAA,OAAAA,CAAQO,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAM,CAAA;AAAC,YAAA,UAAA;AAAYK,YAAAA,OAAAA,CAAQO,IAAI,CAAC,MAAA;SAAQ,CAACA,IAAI,CAAC,IAAO,CAAA,EAAA;YACnDX,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;AAEAW,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;;;;"}
1
+ {"version":3,"file":"errors.mjs","sources":["../../../../src/node/core/errors.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\nimport { errors } from '@strapi/utils';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n if (err instanceof errors.YupValidationError) {\n const message = [];\n const size = err.details.errors.length;\n\n for (const error of err.details.errors) {\n // No need to repeat the error message as it's the same as the err.message\n if (size === 1) {\n message.push(` value: ${error.value}`);\n continue;\n }\n\n message.push(\n [` [${error.name}]`, ` message: ${error.message}`, ` value: ${error.value}`].join(\n '\\n'\n )\n );\n }\n\n console.log(\n chalk.red(\n boxen(['Details:', message.join('\\n\\n')].join('\\n'), {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n"],"names":["isError","err","Error","handleUnexpectedError","console","error","chalk","red","os","EOL","stack","log","boxen","padding","align","errors","YupValidationError","message","size","details","length","push","value","name","join","process","exit"],"mappings":";;;;;AAKMA,MAAAA,OAAAA,GAAU,CAACC,GAAAA,GAA+BA,GAAeC,YAAAA;AAE/D;;;;;IAMA,MAAMC,wBAAwB,CAACF,GAAAA,GAAAA;IAC7BG,OAAQC,CAAAA,KAAK,CACXC,KAAAA,CAAMC,GAAG,CACP,CAAC,QAAQ,CAAC,EACV,oFACAC,EAAAA,EAAAA,CAAGC,GAAG,CAAA,CAAA;AAIV,IAAA,IAAIT,OAAQC,CAAAA,GAAAA,CAAAA,IAAQA,GAAIS,CAAAA,KAAK,EAAE;;QAE7BN,OAAQO,CAAAA,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAMX,CAAAA,GAAAA,CAAIS,KAAK,EAAE;YACfG,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;IAEA,IAAIb,GAAAA,YAAec,MAAOC,CAAAA,kBAAkB,EAAE;AAC5C,QAAA,MAAMC,UAAU,EAAE;AAClB,QAAA,MAAMC,OAAOjB,GAAIkB,CAAAA,OAAO,CAACJ,MAAM,CAACK,MAAM;AAEtC,QAAA,KAAK,MAAMf,KAASJ,IAAAA,GAAAA,CAAIkB,OAAO,CAACJ,MAAM,CAAE;;AAEtC,YAAA,IAAIG,SAAS,CAAG,EAAA;AACdD,gBAAAA,OAAAA,CAAQI,IAAI,CAAC,CAAC,SAAS,EAAEhB,KAAAA,CAAMiB,KAAK,CAAE,CAAA,CAAA;AACtC,gBAAA;AACF;AAEAL,YAAAA,OAAAA,CAAQI,IAAI,CACV;AAAC,gBAAA,CAAC,GAAG,EAAEhB,KAAAA,CAAMkB,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAElB,KAAMY,CAAAA,OAAO,CAAE,CAAA;AAAE,gBAAA,CAAC,aAAa,EAAEZ,KAAMiB,CAAAA,KAAK,CAAE;AAAC,aAAA,CAACE,IAAI,CACxF,IAAA,CAAA,CAAA;AAGN;AAEApB,QAAAA,OAAAA,CAAQO,GAAG,CACTL,KAAMC,CAAAA,GAAG,CACPK,KAAM,CAAA;AAAC,YAAA,UAAA;AAAYK,YAAAA,OAAAA,CAAQO,IAAI,CAAC,MAAA;SAAQ,CAACA,IAAI,CAAC,IAAO,CAAA,EAAA;YACnDX,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA,CAAA,CAAA,CAAA;AAGN;AAEAW,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;;;;"}