@strapi/strapi 5.55.1 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin-styles.css +5 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/content-types/rename-field.d.ts +13 -0
- package/dist/cli/commands/content-types/rename-field.d.ts.map +1 -0
- package/dist/cli/commands/develop.d.ts.map +1 -1
- package/dist/cli/commands/enterprise/index.d.ts +7 -0
- package/dist/cli/commands/enterprise/index.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/action.d.ts +36 -0
- package/dist/cli/commands/enterprise/install/action.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/checklist-prompt.d.ts +14 -0
- package/dist/cli/commands/enterprise/install/checklist-prompt.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/constants.d.ts +7 -0
- package/dist/cli/commands/enterprise/install/constants.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/directories.d.ts +3 -0
- package/dist/cli/commands/enterprise/install/directories.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/discovery.d.ts +29 -0
- package/dist/cli/commands/enterprise/install/discovery.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/errors.d.ts +11 -0
- package/dist/cli/commands/enterprise/install/errors.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/install-packages.d.ts +11 -0
- package/dist/cli/commands/enterprise/install/install-packages.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/license.d.ts +27 -0
- package/dist/cli/commands/enterprise/install/license.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/package-manager.d.ts +17 -0
- package/dist/cli/commands/enterprise/install/package-manager.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/plugin-status.d.ts +44 -0
- package/dist/cli/commands/enterprise/install/plugin-status.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/registry-access.d.ts +55 -0
- package/dist/cli/commands/enterprise/install/registry-access.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/registry.d.ts +54 -0
- package/dist/cli/commands/enterprise/install/registry.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/selection.d.ts +62 -0
- package/dist/cli/commands/enterprise/install/selection.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/setup-links.d.ts +16 -0
- package/dist/cli/commands/enterprise/install/setup-links.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/versions.d.ts +42 -0
- package/dist/cli/commands/enterprise/install/versions.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/utils/commander.d.ts.map +1 -1
- package/dist/cli/utils/helpers.d.ts +1 -1
- package/dist/cli/utils/helpers.d.ts.map +1 -1
- package/dist/node/core/admin-vite-aliases.d.ts +9 -0
- package/dist/node/core/admin-vite-aliases.d.ts.map +1 -1
- package/dist/node/core/aliases.d.ts +4 -1
- package/dist/node/core/aliases.d.ts.map +1 -1
- package/dist/node/core/scan-roots.d.ts +20 -0
- package/dist/node/core/scan-roots.d.ts.map +1 -0
- package/dist/node/create-build-context.d.ts +10 -1
- package/dist/node/create-build-context.d.ts.map +1 -1
- package/dist/node/develop.d.ts.map +1 -1
- package/dist/node/staticFiles.d.ts +3 -1
- package/dist/node/staticFiles.d.ts.map +1 -1
- package/dist/node/vite/config.d.ts.map +1 -1
- package/dist/node/vite/plugins.d.ts +2 -1
- package/dist/node/vite/plugins.d.ts.map +1 -1
- package/dist/node/vite/plugins.test.d.ts +2 -0
- package/dist/node/vite/plugins.test.d.ts.map +1 -0
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/build.js +4 -2
- package/dist/src/cli/commands/build.js.map +1 -1
- package/dist/src/cli/commands/build.mjs +4 -2
- package/dist/src/cli/commands/build.mjs.map +1 -1
- package/dist/src/cli/commands/content-types/rename-field.js +63 -0
- package/dist/src/cli/commands/content-types/rename-field.js.map +1 -0
- package/dist/src/cli/commands/content-types/rename-field.mjs +54 -0
- package/dist/src/cli/commands/content-types/rename-field.mjs.map +1 -0
- package/dist/src/cli/commands/develop.js +4 -2
- package/dist/src/cli/commands/develop.js.map +1 -1
- package/dist/src/cli/commands/develop.mjs +4 -2
- package/dist/src/cli/commands/develop.mjs.map +1 -1
- package/dist/src/cli/commands/enterprise/index.js +17 -0
- package/dist/src/cli/commands/enterprise/index.js.map +1 -0
- package/dist/src/cli/commands/enterprise/index.mjs +15 -0
- package/dist/src/cli/commands/enterprise/index.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/action.js +253 -0
- package/dist/src/cli/commands/enterprise/install/action.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/action.mjs +244 -0
- package/dist/src/cli/commands/enterprise/install/action.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.js +117 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.mjs +110 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/constants.js +16 -0
- package/dist/src/cli/commands/enterprise/install/constants.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/constants.mjs +9 -0
- package/dist/src/cli/commands/enterprise/install/constants.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/directories.js +23 -0
- package/dist/src/cli/commands/enterprise/install/directories.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/directories.mjs +17 -0
- package/dist/src/cli/commands/enterprise/install/directories.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/discovery.js +109 -0
- package/dist/src/cli/commands/enterprise/install/discovery.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/discovery.mjs +104 -0
- package/dist/src/cli/commands/enterprise/install/discovery.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/errors.js +26 -0
- package/dist/src/cli/commands/enterprise/install/errors.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/errors.mjs +22 -0
- package/dist/src/cli/commands/enterprise/install/errors.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.js +39 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.mjs +32 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/license.js +144 -0
- package/dist/src/cli/commands/enterprise/install/license.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/license.mjs +132 -0
- package/dist/src/cli/commands/enterprise/install/license.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.js +72 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs +62 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.js +47 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.mjs +45 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.js +293 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs +277 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry.js +98 -0
- package/dist/src/cli/commands/enterprise/install/registry.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry.mjs +95 -0
- package/dist/src/cli/commands/enterprise/install/registry.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/selection.js +148 -0
- package/dist/src/cli/commands/enterprise/install/selection.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/selection.mjs +141 -0
- package/dist/src/cli/commands/enterprise/install/selection.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.js +34 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.mjs +31 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/versions.js +127 -0
- package/dist/src/cli/commands/enterprise/install/versions.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/versions.mjs +107 -0
- package/dist/src/cli/commands/enterprise/install/versions.mjs.map +1 -0
- package/dist/src/cli/commands/export/action.js +4 -4
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/export/action.mjs +2 -2
- package/dist/src/cli/commands/export/action.mjs.map +1 -1
- package/dist/src/cli/commands/import/action.js +2 -2
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/action.mjs +1 -1
- package/dist/src/cli/commands/import/action.mjs.map +1 -1
- package/dist/src/cli/commands/index.js +4 -0
- package/dist/src/cli/commands/index.js.map +1 -1
- package/dist/src/cli/commands/index.mjs +24 -20
- package/dist/src/cli/commands/index.mjs.map +1 -1
- package/dist/src/cli/commands/routes/list.js +2 -2
- package/dist/src/cli/commands/routes/list.js.map +1 -1
- package/dist/src/cli/commands/routes/list.mjs +1 -1
- package/dist/src/cli/commands/routes/list.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +2 -2
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.mjs +1 -1
- package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
- package/dist/src/cli/utils/commander.js +1 -2
- package/dist/src/cli/utils/commander.js.map +1 -1
- package/dist/src/cli/utils/commander.mjs +1 -2
- package/dist/src/cli/utils/commander.mjs.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +2 -2
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.mjs +2 -2
- package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
- package/dist/src/cli/utils/helpers.js +6 -6
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/helpers.mjs +4 -4
- package/dist/src/cli/utils/helpers.mjs.map +1 -1
- package/dist/src/node/core/admin-vite-aliases.js +51 -0
- package/dist/src/node/core/admin-vite-aliases.js.map +1 -1
- package/dist/src/node/core/admin-vite-aliases.mjs +46 -1
- package/dist/src/node/core/admin-vite-aliases.mjs.map +1 -1
- package/dist/src/node/core/aliases.js +6 -0
- package/dist/src/node/core/aliases.js.map +1 -1
- package/dist/src/node/core/aliases.mjs +6 -1
- package/dist/src/node/core/aliases.mjs.map +1 -1
- package/dist/src/node/core/scan-roots.js +87 -0
- package/dist/src/node/core/scan-roots.js.map +1 -0
- package/dist/src/node/core/scan-roots.mjs +79 -0
- package/dist/src/node/core/scan-roots.mjs.map +1 -0
- package/dist/src/node/create-build-context.js +40 -1
- package/dist/src/node/create-build-context.js.map +1 -1
- package/dist/src/node/create-build-context.mjs +40 -1
- package/dist/src/node/create-build-context.mjs.map +1 -1
- package/dist/src/node/develop.js +2 -1
- package/dist/src/node/develop.js.map +1 -1
- package/dist/src/node/develop.mjs +2 -1
- package/dist/src/node/develop.mjs.map +1 -1
- package/dist/src/node/staticFiles.js +43 -0
- package/dist/src/node/staticFiles.js.map +1 -1
- package/dist/src/node/staticFiles.mjs +42 -1
- package/dist/src/node/staticFiles.mjs.map +1 -1
- package/dist/src/node/vite/config.js +12 -2
- package/dist/src/node/vite/config.js.map +1 -1
- package/dist/src/node/vite/config.mjs +8 -2
- package/dist/src/node/vite/config.mjs.map +1 -1
- package/dist/src/node/vite/plugins.js +27 -1
- package/dist/src/node/vite/plugins.js.map +1 -1
- package/dist/src/node/vite/plugins.mjs +23 -1
- package/dist/src/node/vite/plugins.mjs.map +1 -1
- package/package.json +31 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString } from 'lodash';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (Array.isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has(pkgJSON, 'dependencies.@strapi/strapi') &&\n !has(pkgJSON, 'devDependencies.@strapi/strapi')\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n return Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","Array","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { isString,
|
|
2
|
+
import { isString, has } from 'lodash';
|
|
3
3
|
import 'boxen';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -71,7 +71,7 @@ function floorToDecimal(value, decimals) {
|
|
|
71
71
|
};
|
|
72
72
|
if (isString(message)) {
|
|
73
73
|
log(message);
|
|
74
|
-
} else if (isArray(message)) {
|
|
74
|
+
} else if (Array.isArray(message)) {
|
|
75
75
|
message.forEach((msg)=>log(msg));
|
|
76
76
|
}
|
|
77
77
|
prc.exit(code);
|
|
@@ -117,7 +117,7 @@ const assertCwdContainsStrapiProject = (name)=>{
|
|
|
117
117
|
};
|
|
118
118
|
try {
|
|
119
119
|
const pkgJSON = require(`${process.cwd()}/package.json`);
|
|
120
|
-
if (!has('dependencies.@strapi/strapi'
|
|
120
|
+
if (!has(pkgJSON, 'dependencies.@strapi/strapi') && !has(pkgJSON, 'devDependencies.@strapi/strapi')) {
|
|
121
121
|
logErrorAndExit();
|
|
122
122
|
}
|
|
123
123
|
} catch {
|
|
@@ -126,7 +126,7 @@ const assertCwdContainsStrapiProject = (name)=>{
|
|
|
126
126
|
};
|
|
127
127
|
const runAction = (name, action)=>(...args)=>{
|
|
128
128
|
assertCwdContainsStrapiProject(name);
|
|
129
|
-
Promise.resolve().then(()=>{
|
|
129
|
+
return Promise.resolve().then(()=>{
|
|
130
130
|
return action(...args);
|
|
131
131
|
}).catch((error)=>{
|
|
132
132
|
console.error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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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 } from 'lodash';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (Array.isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has(pkgJSON, 'dependencies.@strapi/strapi') &&\n !has(pkgJSON, 'devDependencies.@strapi/strapi')\n ) {\n logErrorAndExit();\n }\n } catch {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n return Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","Array","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var fs = require('node:fs');
|
|
4
|
+
var path = require('node:path');
|
|
5
|
+
var resolve_exports = require('resolve.exports');
|
|
3
6
|
var adminViteAliasModules = require('./admin-vite-alias-modules.js');
|
|
4
7
|
var resolveModule = require('./resolve-module.js');
|
|
5
8
|
var adminViteSingletonModules = require('./admin-vite-singleton-modules.js');
|
|
6
9
|
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
13
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
14
|
+
|
|
7
15
|
/**
|
|
8
16
|
* Vite resolve.alias entries for the admin bundle.
|
|
9
17
|
*
|
|
@@ -13,12 +21,54 @@ var adminViteSingletonModules = require('./admin-vite-singleton-modules.js');
|
|
|
13
21
|
*
|
|
14
22
|
* @internal
|
|
15
23
|
*/ const buildAdminViteResolveAliases = ()=>Object.fromEntries([
|
|
24
|
+
// Longest key first, so no key sits behind a prefix of itself
|
|
25
|
+
...adminViteAliasModules.ADMIN_VITE_ALIAS_MODULES.flatMap(getSubpathEntries).sort(([a], [b])=>b.length - a.length),
|
|
16
26
|
...adminViteAliasModules.ADMIN_VITE_ALIAS_MODULES.map((mod)=>[
|
|
17
27
|
mod,
|
|
18
28
|
resolveModule.getModulePath(mod)
|
|
19
29
|
]),
|
|
20
30
|
...buildSingletonAliasEntries()
|
|
21
31
|
]);
|
|
32
|
+
/**
|
|
33
|
+
* Alias key and absolute target for each exports subpath a browser build can import
|
|
34
|
+
*
|
|
35
|
+
* The bare key rewrites to a directory. A directory rewrite bypasses the exports map. Thus each
|
|
36
|
+
* subpath needs its own exact key. Wildcards and `./package.json` get no key
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/ const getSubpathEntries = (mod)=>{
|
|
40
|
+
const root = resolveModule.getModulePath(mod);
|
|
41
|
+
const entries = [];
|
|
42
|
+
let pkg;
|
|
43
|
+
try {
|
|
44
|
+
// JSON.parse returns any, and resolve.exports reads the Package fields
|
|
45
|
+
pkg = JSON.parse(fs__default.default.readFileSync(path__default.default.join(root, 'package.json'), 'utf8'));
|
|
46
|
+
} catch {
|
|
47
|
+
return entries;
|
|
48
|
+
}
|
|
49
|
+
if (!pkg?.exports) {
|
|
50
|
+
return entries;
|
|
51
|
+
}
|
|
52
|
+
for (const subpath of Object.keys(pkg.exports)){
|
|
53
|
+
if (!subpath.startsWith('./') || subpath.includes('*') || subpath === './package.json') {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const [target] = resolve_exports.exports(pkg, subpath, {
|
|
58
|
+
browser: true
|
|
59
|
+
}) ?? [];
|
|
60
|
+
if (target) {
|
|
61
|
+
entries.push([
|
|
62
|
+
`${mod}${subpath.slice(1)}`,
|
|
63
|
+
path__default.default.join(root, target)
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
} catch {
|
|
67
|
+
// A subpath resolve.exports refuses gets no key
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return entries;
|
|
71
|
+
};
|
|
22
72
|
/**
|
|
23
73
|
* Resolve the CodeMirror singleton aliases from @strapi/design-system's closure, skipping any
|
|
24
74
|
* package that cannot be resolved (e.g. optional or transitive CodeMirror packages not installed).
|
|
@@ -52,4 +102,5 @@ var adminViteSingletonModules = require('./admin-vite-singleton-modules.js');
|
|
|
52
102
|
exports.buildAdminViteResolveAliases = buildAdminViteResolveAliases;
|
|
53
103
|
exports.buildSingletonAliasEntries = buildSingletonAliasEntries;
|
|
54
104
|
exports.getResolvableSingletonModules = getResolvableSingletonModules;
|
|
105
|
+
exports.getSubpathEntries = getSubpathEntries;
|
|
55
106
|
//# sourceMappingURL=admin-vite-aliases.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-vite-aliases.js","sources":["../../../../src/node/core/admin-vite-aliases.ts"],"sourcesContent":["import { ADMIN_VITE_ALIAS_MODULES, ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-alias-modules';\nimport { getModulePath, getModulePathFrom } from './resolve-module';\n\n/**\n * Vite resolve.alias entries for the admin bundle.\n *\n * Admin alias modules resolve from @strapi/admin's closure. CodeMirror singletons resolve\n * from @strapi/design-system's closure (the real consumer), tolerantly: optional/transitive\n * CodeMirror packages that cannot be resolved are skipped rather than crashing the build\n *\n * @internal\n */\nexport const buildAdminViteResolveAliases = (): Record<string, string> =>\n Object.fromEntries([\n ...ADMIN_VITE_ALIAS_MODULES.map((mod) => [mod, getModulePath(mod)] as const),\n ...buildSingletonAliasEntries(),\n ]);\n\n/**\n * Resolve the CodeMirror singleton aliases from @strapi/design-system's closure, skipping any\n * package that cannot be resolved (e.g. optional or transitive CodeMirror packages not installed).\n *\n * @internal\n */\nexport const buildSingletonAliasEntries = (): Array<readonly [string, string]> => {\n const entries: Array<readonly [string, string]> = [];\n\n for (const mod of ADMIN_VITE_SINGLETON_MODULES) {\n try {\n entries.push([mod, getModulePathFrom('@strapi/design-system', mod)] as const);\n } catch {\n // Optional/transitive CodeMirror package not resolvable here — skip it rather than\n // throwing, so a missing singleton never breaks the admin build.\n }\n }\n\n return entries;\n};\n\n/**\n * Names of the CodeMirror singletons that actually resolve from @strapi/design-system's closure.\n *\n * Mirrors buildSingletonAliasEntries so optimizeDeps.include stays in lockstep with resolve.alias:\n * a singleton that cannot be aliased must not be forced into pre-bundling either, or Vite chokes\n * on an unresolvable optimizeDeps.include entry.\n *\n * @internal\n */\nexport const getResolvableSingletonModules = (): string[] =>\n buildSingletonAliasEntries().map(([mod]) => mod);\n"],"names":["buildAdminViteResolveAliases","Object","fromEntries","ADMIN_VITE_ALIAS_MODULES","map","mod","getModulePath","buildSingletonAliasEntries","entries","
|
|
1
|
+
{"version":3,"file":"admin-vite-aliases.js","sources":["../../../../src/node/core/admin-vite-aliases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { exports as resolveExports, type Package } from 'resolve.exports';\n\nimport { ADMIN_VITE_ALIAS_MODULES, ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-alias-modules';\nimport { getModulePath, getModulePathFrom } from './resolve-module';\n\n/**\n * Vite resolve.alias entries for the admin bundle.\n *\n * Admin alias modules resolve from @strapi/admin's closure. CodeMirror singletons resolve\n * from @strapi/design-system's closure (the real consumer), tolerantly: optional/transitive\n * CodeMirror packages that cannot be resolved are skipped rather than crashing the build\n *\n * @internal\n */\nexport const buildAdminViteResolveAliases = (): Record<string, string> =>\n Object.fromEntries([\n // Longest key first, so no key sits behind a prefix of itself\n ...ADMIN_VITE_ALIAS_MODULES.flatMap(getSubpathEntries).sort(([a], [b]) => b.length - a.length),\n ...ADMIN_VITE_ALIAS_MODULES.map((mod) => [mod, getModulePath(mod)] as const),\n ...buildSingletonAliasEntries(),\n ]);\n\n/**\n * Alias key and absolute target for each exports subpath a browser build can import\n *\n * The bare key rewrites to a directory. A directory rewrite bypasses the exports map. Thus each\n * subpath needs its own exact key. Wildcards and `./package.json` get no key\n *\n * @internal\n */\nexport const getSubpathEntries = (mod: string): Array<readonly [string, string]> => {\n const root = getModulePath(mod);\n const entries: Array<readonly [string, string]> = [];\n let pkg: Package | null;\n\n try {\n // JSON.parse returns any, and resolve.exports reads the Package fields\n pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')) as Package | null;\n } catch {\n return entries;\n }\n\n if (!pkg?.exports) {\n return entries;\n }\n\n for (const subpath of Object.keys(pkg.exports)) {\n if (!subpath.startsWith('./') || subpath.includes('*') || subpath === './package.json') {\n continue;\n }\n\n try {\n const [target] = resolveExports(pkg, subpath, { browser: true }) ?? [];\n\n if (target) {\n entries.push([`${mod}${subpath.slice(1)}`, path.join(root, target)] as const);\n }\n } catch {\n // A subpath resolve.exports refuses gets no key\n }\n }\n\n return entries;\n};\n\n/**\n * Resolve the CodeMirror singleton aliases from @strapi/design-system's closure, skipping any\n * package that cannot be resolved (e.g. optional or transitive CodeMirror packages not installed).\n *\n * @internal\n */\nexport const buildSingletonAliasEntries = (): Array<readonly [string, string]> => {\n const entries: Array<readonly [string, string]> = [];\n\n for (const mod of ADMIN_VITE_SINGLETON_MODULES) {\n try {\n entries.push([mod, getModulePathFrom('@strapi/design-system', mod)] as const);\n } catch {\n // Optional/transitive CodeMirror package not resolvable here — skip it rather than\n // throwing, so a missing singleton never breaks the admin build.\n }\n }\n\n return entries;\n};\n\n/**\n * Names of the CodeMirror singletons that actually resolve from @strapi/design-system's closure.\n *\n * Mirrors buildSingletonAliasEntries so optimizeDeps.include stays in lockstep with resolve.alias:\n * a singleton that cannot be aliased must not be forced into pre-bundling either, or Vite chokes\n * on an unresolvable optimizeDeps.include entry.\n *\n * @internal\n */\nexport const getResolvableSingletonModules = (): string[] =>\n buildSingletonAliasEntries().map(([mod]) => mod);\n"],"names":["buildAdminViteResolveAliases","Object","fromEntries","ADMIN_VITE_ALIAS_MODULES","flatMap","getSubpathEntries","sort","a","b","length","map","mod","getModulePath","buildSingletonAliasEntries","root","entries","pkg","JSON","parse","fs","readFileSync","path","join","exports","subpath","keys","startsWith","includes","target","resolveExports","browser","push","slice","ADMIN_VITE_SINGLETON_MODULES","getModulePathFrom","getResolvableSingletonModules"],"mappings":";;;;;;;;;;;;;;AAQA;;;;;;;;AAQC,IACM,MAAMA,4BAAAA,GAA+B,IAC1CC,MAAAA,CAAOC,WAAW,CAAC;;AAEdC,QAAAA,GAAAA,8CAAAA,CAAyBC,OAAO,CAACC,iBAAAA,CAAAA,CAAmBC,IAAI,CAAC,CAAC,CAACC,CAAAA,CAAE,EAAE,CAACC,EAAE,GAAKA,CAAAA,CAAEC,MAAM,GAAGF,EAAEE,MAAM,CAAA;WAC1FN,8CAAAA,CAAyBO,GAAG,CAAC,CAACC,GAAAA,GAAQ;AAACA,gBAAAA,GAAAA;gBAAKC,2BAAAA,CAAcD,GAAAA;AAAK,aAAA,CAAA;AAC/DE,QAAAA,GAAAA,0BAAAA;KACJ;AAEH;;;;;;;IAQO,MAAMR,iBAAAA,GAAoB,CAACM,GAAAA,GAAAA;AAChC,IAAA,MAAMG,OAAOF,2BAAAA,CAAcD,GAAAA,CAAAA;AAC3B,IAAA,MAAMI,UAA4C,EAAE;IACpD,IAAIC,GAAAA;IAEJ,IAAI;;QAEFA,GAAAA,GAAMC,IAAAA,CAAKC,KAAK,CAACC,mBAAAA,CAAGC,YAAY,CAACC,qBAAAA,CAAKC,IAAI,CAACR,IAAAA,EAAM,cAAA,CAAA,EAAiB,MAAA,CAAA,CAAA;AACpE,IAAA,CAAA,CAAE,OAAM;QACN,OAAOC,OAAAA;AACT,IAAA;IAEA,IAAI,CAACC,KAAKO,OAAAA,EAAS;QACjB,OAAOR,OAAAA;AACT,IAAA;AAEA,IAAA,KAAK,MAAMS,OAAAA,IAAWvB,MAAAA,CAAOwB,IAAI,CAACT,GAAAA,CAAIO,OAAO,CAAA,CAAG;QAC9C,IAAI,CAACC,OAAAA,CAAQE,UAAU,CAAC,IAAA,CAAA,IAASF,QAAQG,QAAQ,CAAC,GAAA,CAAA,IAAQH,OAAAA,KAAY,gBAAA,EAAkB;AACtF,YAAA;AACF,QAAA;QAEA,IAAI;AACF,YAAA,MAAM,CAACI,MAAAA,CAAO,GAAGC,uBAAAA,CAAeb,KAAKQ,OAAAA,EAAS;gBAAEM,OAAAA,EAAS;AAAK,aAAA,CAAA,IAAM,EAAE;AAEtE,YAAA,IAAIF,MAAAA,EAAQ;AACVb,gBAAAA,OAAAA,CAAQgB,IAAI,CAAC;AAAC,oBAAA,CAAA,EAAGpB,GAAAA,CAAAA,EAAMa,OAAAA,CAAQQ,KAAK,CAAC,CAAA,CAAA,CAAA,CAAI;oBAAEX,qBAAAA,CAAKC,IAAI,CAACR,IAAAA,EAAMc,MAAAA;AAAQ,iBAAA,CAAA;AACrE,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA;IAEA,OAAOb,OAAAA;AACT;AAEA;;;;;UAMaF,0BAAAA,GAA6B,IAAA;AACxC,IAAA,MAAME,UAA4C,EAAE;IAEpD,KAAK,MAAMJ,OAAOsB,sDAAAA,CAA8B;QAC9C,IAAI;AACFlB,YAAAA,OAAAA,CAAQgB,IAAI,CAAC;AAACpB,gBAAAA,GAAAA;AAAKuB,gBAAAA,+BAAAA,CAAkB,uBAAA,EAAyBvB,GAAAA;AAAK,aAAA,CAAA;AACrE,QAAA,CAAA,CAAE,OAAM;;;AAGR,QAAA;AACF,IAAA;IAEA,OAAOI,OAAAA;AACT;AAEA;;;;;;;;IASO,MAAMoB,6BAAAA,GAAgC,IAC3CtB,0BAAAA,EAAAA,CAA6BH,GAAG,CAAC,CAAC,CAACC,GAAAA,CAAI,GAAKA,GAAAA;;;;;;;"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { exports as exports$1 } from 'resolve.exports';
|
|
1
4
|
import { ADMIN_VITE_ALIAS_MODULES } from './admin-vite-alias-modules.mjs';
|
|
2
5
|
import { getModulePathFrom, getModulePath } from './resolve-module.mjs';
|
|
3
6
|
import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules.mjs';
|
|
@@ -11,12 +14,54 @@ import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules.mjs
|
|
|
11
14
|
*
|
|
12
15
|
* @internal
|
|
13
16
|
*/ const buildAdminViteResolveAliases = ()=>Object.fromEntries([
|
|
17
|
+
// Longest key first, so no key sits behind a prefix of itself
|
|
18
|
+
...ADMIN_VITE_ALIAS_MODULES.flatMap(getSubpathEntries).sort(([a], [b])=>b.length - a.length),
|
|
14
19
|
...ADMIN_VITE_ALIAS_MODULES.map((mod)=>[
|
|
15
20
|
mod,
|
|
16
21
|
getModulePath(mod)
|
|
17
22
|
]),
|
|
18
23
|
...buildSingletonAliasEntries()
|
|
19
24
|
]);
|
|
25
|
+
/**
|
|
26
|
+
* Alias key and absolute target for each exports subpath a browser build can import
|
|
27
|
+
*
|
|
28
|
+
* The bare key rewrites to a directory. A directory rewrite bypasses the exports map. Thus each
|
|
29
|
+
* subpath needs its own exact key. Wildcards and `./package.json` get no key
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/ const getSubpathEntries = (mod)=>{
|
|
33
|
+
const root = getModulePath(mod);
|
|
34
|
+
const entries = [];
|
|
35
|
+
let pkg;
|
|
36
|
+
try {
|
|
37
|
+
// JSON.parse returns any, and resolve.exports reads the Package fields
|
|
38
|
+
pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
39
|
+
} catch {
|
|
40
|
+
return entries;
|
|
41
|
+
}
|
|
42
|
+
if (!pkg?.exports) {
|
|
43
|
+
return entries;
|
|
44
|
+
}
|
|
45
|
+
for (const subpath of Object.keys(pkg.exports)){
|
|
46
|
+
if (!subpath.startsWith('./') || subpath.includes('*') || subpath === './package.json') {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const [target] = exports$1(pkg, subpath, {
|
|
51
|
+
browser: true
|
|
52
|
+
}) ?? [];
|
|
53
|
+
if (target) {
|
|
54
|
+
entries.push([
|
|
55
|
+
`${mod}${subpath.slice(1)}`,
|
|
56
|
+
path.join(root, target)
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
} catch {
|
|
60
|
+
// A subpath resolve.exports refuses gets no key
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return entries;
|
|
64
|
+
};
|
|
20
65
|
/**
|
|
21
66
|
* Resolve the CodeMirror singleton aliases from @strapi/design-system's closure, skipping any
|
|
22
67
|
* package that cannot be resolved (e.g. optional or transitive CodeMirror packages not installed).
|
|
@@ -47,5 +92,5 @@ import { ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-singleton-modules.mjs
|
|
|
47
92
|
* @internal
|
|
48
93
|
*/ const getResolvableSingletonModules = ()=>buildSingletonAliasEntries().map(([mod])=>mod);
|
|
49
94
|
|
|
50
|
-
export { buildAdminViteResolveAliases, buildSingletonAliasEntries, getResolvableSingletonModules };
|
|
95
|
+
export { buildAdminViteResolveAliases, buildSingletonAliasEntries, getResolvableSingletonModules, getSubpathEntries };
|
|
51
96
|
//# sourceMappingURL=admin-vite-aliases.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-vite-aliases.mjs","sources":["../../../../src/node/core/admin-vite-aliases.ts"],"sourcesContent":["import { ADMIN_VITE_ALIAS_MODULES, ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-alias-modules';\nimport { getModulePath, getModulePathFrom } from './resolve-module';\n\n/**\n * Vite resolve.alias entries for the admin bundle.\n *\n * Admin alias modules resolve from @strapi/admin's closure. CodeMirror singletons resolve\n * from @strapi/design-system's closure (the real consumer), tolerantly: optional/transitive\n * CodeMirror packages that cannot be resolved are skipped rather than crashing the build\n *\n * @internal\n */\nexport const buildAdminViteResolveAliases = (): Record<string, string> =>\n Object.fromEntries([\n ...ADMIN_VITE_ALIAS_MODULES.map((mod) => [mod, getModulePath(mod)] as const),\n ...buildSingletonAliasEntries(),\n ]);\n\n/**\n * Resolve the CodeMirror singleton aliases from @strapi/design-system's closure, skipping any\n * package that cannot be resolved (e.g. optional or transitive CodeMirror packages not installed).\n *\n * @internal\n */\nexport const buildSingletonAliasEntries = (): Array<readonly [string, string]> => {\n const entries: Array<readonly [string, string]> = [];\n\n for (const mod of ADMIN_VITE_SINGLETON_MODULES) {\n try {\n entries.push([mod, getModulePathFrom('@strapi/design-system', mod)] as const);\n } catch {\n // Optional/transitive CodeMirror package not resolvable here — skip it rather than\n // throwing, so a missing singleton never breaks the admin build.\n }\n }\n\n return entries;\n};\n\n/**\n * Names of the CodeMirror singletons that actually resolve from @strapi/design-system's closure.\n *\n * Mirrors buildSingletonAliasEntries so optimizeDeps.include stays in lockstep with resolve.alias:\n * a singleton that cannot be aliased must not be forced into pre-bundling either, or Vite chokes\n * on an unresolvable optimizeDeps.include entry.\n *\n * @internal\n */\nexport const getResolvableSingletonModules = (): string[] =>\n buildSingletonAliasEntries().map(([mod]) => mod);\n"],"names":["buildAdminViteResolveAliases","Object","fromEntries","ADMIN_VITE_ALIAS_MODULES","map","mod","getModulePath","buildSingletonAliasEntries","entries","
|
|
1
|
+
{"version":3,"file":"admin-vite-aliases.mjs","sources":["../../../../src/node/core/admin-vite-aliases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { exports as resolveExports, type Package } from 'resolve.exports';\n\nimport { ADMIN_VITE_ALIAS_MODULES, ADMIN_VITE_SINGLETON_MODULES } from './admin-vite-alias-modules';\nimport { getModulePath, getModulePathFrom } from './resolve-module';\n\n/**\n * Vite resolve.alias entries for the admin bundle.\n *\n * Admin alias modules resolve from @strapi/admin's closure. CodeMirror singletons resolve\n * from @strapi/design-system's closure (the real consumer), tolerantly: optional/transitive\n * CodeMirror packages that cannot be resolved are skipped rather than crashing the build\n *\n * @internal\n */\nexport const buildAdminViteResolveAliases = (): Record<string, string> =>\n Object.fromEntries([\n // Longest key first, so no key sits behind a prefix of itself\n ...ADMIN_VITE_ALIAS_MODULES.flatMap(getSubpathEntries).sort(([a], [b]) => b.length - a.length),\n ...ADMIN_VITE_ALIAS_MODULES.map((mod) => [mod, getModulePath(mod)] as const),\n ...buildSingletonAliasEntries(),\n ]);\n\n/**\n * Alias key and absolute target for each exports subpath a browser build can import\n *\n * The bare key rewrites to a directory. A directory rewrite bypasses the exports map. Thus each\n * subpath needs its own exact key. Wildcards and `./package.json` get no key\n *\n * @internal\n */\nexport const getSubpathEntries = (mod: string): Array<readonly [string, string]> => {\n const root = getModulePath(mod);\n const entries: Array<readonly [string, string]> = [];\n let pkg: Package | null;\n\n try {\n // JSON.parse returns any, and resolve.exports reads the Package fields\n pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')) as Package | null;\n } catch {\n return entries;\n }\n\n if (!pkg?.exports) {\n return entries;\n }\n\n for (const subpath of Object.keys(pkg.exports)) {\n if (!subpath.startsWith('./') || subpath.includes('*') || subpath === './package.json') {\n continue;\n }\n\n try {\n const [target] = resolveExports(pkg, subpath, { browser: true }) ?? [];\n\n if (target) {\n entries.push([`${mod}${subpath.slice(1)}`, path.join(root, target)] as const);\n }\n } catch {\n // A subpath resolve.exports refuses gets no key\n }\n }\n\n return entries;\n};\n\n/**\n * Resolve the CodeMirror singleton aliases from @strapi/design-system's closure, skipping any\n * package that cannot be resolved (e.g. optional or transitive CodeMirror packages not installed).\n *\n * @internal\n */\nexport const buildSingletonAliasEntries = (): Array<readonly [string, string]> => {\n const entries: Array<readonly [string, string]> = [];\n\n for (const mod of ADMIN_VITE_SINGLETON_MODULES) {\n try {\n entries.push([mod, getModulePathFrom('@strapi/design-system', mod)] as const);\n } catch {\n // Optional/transitive CodeMirror package not resolvable here — skip it rather than\n // throwing, so a missing singleton never breaks the admin build.\n }\n }\n\n return entries;\n};\n\n/**\n * Names of the CodeMirror singletons that actually resolve from @strapi/design-system's closure.\n *\n * Mirrors buildSingletonAliasEntries so optimizeDeps.include stays in lockstep with resolve.alias:\n * a singleton that cannot be aliased must not be forced into pre-bundling either, or Vite chokes\n * on an unresolvable optimizeDeps.include entry.\n *\n * @internal\n */\nexport const getResolvableSingletonModules = (): string[] =>\n buildSingletonAliasEntries().map(([mod]) => mod);\n"],"names":["buildAdminViteResolveAliases","Object","fromEntries","ADMIN_VITE_ALIAS_MODULES","flatMap","getSubpathEntries","sort","a","b","length","map","mod","getModulePath","buildSingletonAliasEntries","root","entries","pkg","JSON","parse","fs","readFileSync","path","join","exports","subpath","keys","startsWith","includes","target","resolveExports","browser","push","slice","ADMIN_VITE_SINGLETON_MODULES","getModulePathFrom","getResolvableSingletonModules"],"mappings":";;;;;;;AAQA;;;;;;;;AAQC,IACM,MAAMA,4BAAAA,GAA+B,IAC1CC,MAAAA,CAAOC,WAAW,CAAC;;AAEdC,QAAAA,GAAAA,wBAAAA,CAAyBC,OAAO,CAACC,iBAAAA,CAAAA,CAAmBC,IAAI,CAAC,CAAC,CAACC,CAAAA,CAAE,EAAE,CAACC,EAAE,GAAKA,CAAAA,CAAEC,MAAM,GAAGF,EAAEE,MAAM,CAAA;WAC1FN,wBAAAA,CAAyBO,GAAG,CAAC,CAACC,GAAAA,GAAQ;AAACA,gBAAAA,GAAAA;gBAAKC,aAAAA,CAAcD,GAAAA;AAAK,aAAA,CAAA;AAC/DE,QAAAA,GAAAA,0BAAAA;KACJ;AAEH;;;;;;;IAQO,MAAMR,iBAAAA,GAAoB,CAACM,GAAAA,GAAAA;AAChC,IAAA,MAAMG,OAAOF,aAAAA,CAAcD,GAAAA,CAAAA;AAC3B,IAAA,MAAMI,UAA4C,EAAE;IACpD,IAAIC,GAAAA;IAEJ,IAAI;;QAEFA,GAAAA,GAAMC,IAAAA,CAAKC,KAAK,CAACC,EAAAA,CAAGC,YAAY,CAACC,IAAAA,CAAKC,IAAI,CAACR,IAAAA,EAAM,cAAA,CAAA,EAAiB,MAAA,CAAA,CAAA;AACpE,IAAA,CAAA,CAAE,OAAM;QACN,OAAOC,OAAAA;AACT,IAAA;IAEA,IAAI,CAACC,KAAKO,OAAAA,EAAS;QACjB,OAAOR,OAAAA;AACT,IAAA;AAEA,IAAA,KAAK,MAAMS,OAAAA,IAAWvB,MAAAA,CAAOwB,IAAI,CAACT,GAAAA,CAAIO,OAAO,CAAA,CAAG;QAC9C,IAAI,CAACC,OAAAA,CAAQE,UAAU,CAAC,IAAA,CAAA,IAASF,QAAQG,QAAQ,CAAC,GAAA,CAAA,IAAQH,OAAAA,KAAY,gBAAA,EAAkB;AACtF,YAAA;AACF,QAAA;QAEA,IAAI;AACF,YAAA,MAAM,CAACI,MAAAA,CAAO,GAAGC,SAAAA,CAAeb,KAAKQ,OAAAA,EAAS;gBAAEM,OAAAA,EAAS;AAAK,aAAA,CAAA,IAAM,EAAE;AAEtE,YAAA,IAAIF,MAAAA,EAAQ;AACVb,gBAAAA,OAAAA,CAAQgB,IAAI,CAAC;AAAC,oBAAA,CAAA,EAAGpB,GAAAA,CAAAA,EAAMa,OAAAA,CAAQQ,KAAK,CAAC,CAAA,CAAA,CAAA,CAAI;oBAAEX,IAAAA,CAAKC,IAAI,CAACR,IAAAA,EAAMc,MAAAA;AAAQ,iBAAA,CAAA;AACrE,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA;IAEA,OAAOb,OAAAA;AACT;AAEA;;;;;UAMaF,0BAAAA,GAA6B,IAAA;AACxC,IAAA,MAAME,UAA4C,EAAE;IAEpD,KAAK,MAAMJ,OAAOsB,4BAAAA,CAA8B;QAC9C,IAAI;AACFlB,YAAAA,OAAAA,CAAQgB,IAAI,CAAC;AAACpB,gBAAAA,GAAAA;AAAKuB,gBAAAA,iBAAAA,CAAkB,uBAAA,EAAyBvB,GAAAA;AAAK,aAAA,CAAA;AACrE,QAAA,CAAA,CAAE,OAAM;;;AAGR,QAAA;AACF,IAAA;IAEA,OAAOI,OAAAA;AACT;AAEA;;;;;;;;IASO,MAAMoB,6BAAAA,GAAgC,IAC3CtB,0BAAAA,EAAAA,CAA6BH,GAAG,CAAC,CAAC,CAACC,GAAAA,CAAI,GAAKA,GAAAA;;;;"}
|
|
@@ -29,6 +29,11 @@ var path__default = /*#__PURE__*/_interopDefault(path);
|
|
|
29
29
|
'@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',
|
|
30
30
|
'@strapi/review-workflows/strapi-admin': './packages/core/review-workflows/admin/src'
|
|
31
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* The Enterprise sources of `@strapi/admin`. They sit beside the `admin/src` the alias names, and
|
|
34
|
+
* the production build compiles both into one `dist/admin`
|
|
35
|
+
*/ const eeAdminSource = './packages/core/admin/ee/admin/src';
|
|
36
|
+
const getMonorepoEeAdminSource = ({ monorepo })=>monorepo?.path ? path__default.default.join(monorepo.path, eeAdminSource) : undefined;
|
|
32
37
|
const getMonorepoAliases = ({ monorepo })=>{
|
|
33
38
|
if (!monorepo?.path) {
|
|
34
39
|
return {};
|
|
@@ -42,4 +47,5 @@ const getMonorepoAliases = ({ monorepo })=>{
|
|
|
42
47
|
};
|
|
43
48
|
|
|
44
49
|
exports.getMonorepoAliases = getMonorepoAliases;
|
|
50
|
+
exports.getMonorepoEeAdminSource = getMonorepoEeAdminSource;
|
|
45
51
|
//# sourceMappingURL=aliases.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.js","sources":["../../../../src/node/core/aliases.ts"],"sourcesContent":["import path from 'node:path';\nimport { StrapiMonorepo } from './monorepo';\n\n/**\n * The path mappings/aliases used by various tools in the monorepo to map imported modules to\n * source files in order to speed up rebuilding and avoid having a separate watcher process to build\n * from `src` to `lib`.\n *\n * This file is currently read by:\n * - Webpack when running the dev server (only when running in this monorepo)\n */\nconst devAliases: Record<string, string> = {\n '@strapi/admin/strapi-admin': './packages/core/admin/admin/src',\n '@strapi/content-releases/strapi-admin': './packages/core/content-releases/admin/src',\n '@strapi/content-manager/strapi-admin': './packages/core/content-manager/admin/src',\n '@strapi/content-type-builder/strapi-admin': './packages/core/content-type-builder/admin/src',\n '@strapi/email/strapi-admin': './packages/core/email/admin/src',\n '@strapi/upload/strapi-admin': './packages/core/upload/admin/src',\n '@strapi/plugin-cloud/strapi-admin': './packages/plugins/cloud/admin/src',\n '@strapi/plugin-color-picker/strapi-admin': './packages/plugins/color-picker/admin/src',\n '@strapi/plugin-documentation/strapi-admin': './packages/plugins/documentation/admin/src',\n '@strapi/plugin-graphql/strapi-admin': './packages/plugins/graphql/admin/src',\n '@strapi/i18n/strapi-admin': './packages/plugins/i18n/admin/src',\n '@strapi/plugin-sentry/strapi-admin': './packages/plugins/sentry/admin/src',\n '@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',\n '@strapi/review-workflows/strapi-admin': './packages/core/review-workflows/admin/src',\n};\n\nconst getMonorepoAliases = ({ monorepo }: { monorepo?: StrapiMonorepo }) => {\n if (!monorepo?.path) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(devAliases).map(([key, modulePath]) => {\n return [key, path.join(monorepo.path, modulePath)];\n })\n );\n};\n\nexport { getMonorepoAliases };\n"],"names":["devAliases","
|
|
1
|
+
{"version":3,"file":"aliases.js","sources":["../../../../src/node/core/aliases.ts"],"sourcesContent":["import path from 'node:path';\nimport { StrapiMonorepo } from './monorepo';\n\n/**\n * The path mappings/aliases used by various tools in the monorepo to map imported modules to\n * source files in order to speed up rebuilding and avoid having a separate watcher process to build\n * from `src` to `lib`.\n *\n * This file is currently read by:\n * - Webpack when running the dev server (only when running in this monorepo)\n */\nconst devAliases: Record<string, string> = {\n '@strapi/admin/strapi-admin': './packages/core/admin/admin/src',\n '@strapi/content-releases/strapi-admin': './packages/core/content-releases/admin/src',\n '@strapi/content-manager/strapi-admin': './packages/core/content-manager/admin/src',\n '@strapi/content-type-builder/strapi-admin': './packages/core/content-type-builder/admin/src',\n '@strapi/email/strapi-admin': './packages/core/email/admin/src',\n '@strapi/upload/strapi-admin': './packages/core/upload/admin/src',\n '@strapi/plugin-cloud/strapi-admin': './packages/plugins/cloud/admin/src',\n '@strapi/plugin-color-picker/strapi-admin': './packages/plugins/color-picker/admin/src',\n '@strapi/plugin-documentation/strapi-admin': './packages/plugins/documentation/admin/src',\n '@strapi/plugin-graphql/strapi-admin': './packages/plugins/graphql/admin/src',\n '@strapi/i18n/strapi-admin': './packages/plugins/i18n/admin/src',\n '@strapi/plugin-sentry/strapi-admin': './packages/plugins/sentry/admin/src',\n '@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',\n '@strapi/review-workflows/strapi-admin': './packages/core/review-workflows/admin/src',\n};\n\n/**\n * The Enterprise sources of `@strapi/admin`. They sit beside the `admin/src` the alias names, and\n * the production build compiles both into one `dist/admin`\n */\nconst eeAdminSource = './packages/core/admin/ee/admin/src';\n\nconst getMonorepoEeAdminSource = ({\n monorepo,\n}: {\n monorepo?: StrapiMonorepo;\n}): string | undefined => (monorepo?.path ? path.join(monorepo.path, eeAdminSource) : undefined);\n\nconst getMonorepoAliases = ({ monorepo }: { monorepo?: StrapiMonorepo }) => {\n if (!monorepo?.path) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(devAliases).map(([key, modulePath]) => {\n return [key, path.join(monorepo.path, modulePath)];\n })\n );\n};\n\nexport { getMonorepoAliases, getMonorepoEeAdminSource };\n"],"names":["devAliases","eeAdminSource","getMonorepoEeAdminSource","monorepo","path","join","undefined","getMonorepoAliases","Object","fromEntries","entries","map","key","modulePath"],"mappings":";;;;;;;;AAGA;;;;;;;AAOC,IACD,MAAMA,UAAAA,GAAqC;IACzC,4BAAA,EAA8B,iCAAA;IAC9B,uCAAA,EAAyC,4CAAA;IACzC,sCAAA,EAAwC,2CAAA;IACxC,2CAAA,EAA6C,gDAAA;IAC7C,4BAAA,EAA8B,iCAAA;IAC9B,6BAAA,EAA+B,kCAAA;IAC/B,mCAAA,EAAqC,oCAAA;IACrC,0CAAA,EAA4C,2CAAA;IAC5C,2CAAA,EAA6C,4CAAA;IAC7C,qCAAA,EAAuC,sCAAA;IACvC,2BAAA,EAA6B,mCAAA;IAC7B,oCAAA,EAAsC,qCAAA;IACtC,+CAAA,EAAiD,gDAAA;IACjD,uCAAA,EAAyC;AAC3C,CAAA;AAEA;;;AAGC,IACD,MAAMC,aAAAA,GAAgB,oCAAA;AAEtB,MAAMC,wBAAAA,GAA2B,CAAC,EAChCC,QAAQ,EAGT,GAA0BA,QAAAA,EAAUC,IAAAA,GAAOA,qBAAAA,CAAKC,IAAI,CAACF,QAAAA,CAASC,IAAI,EAAEH,aAAAA,CAAAA,GAAiBK;AAEtF,MAAMC,kBAAAA,GAAqB,CAAC,EAAEJ,QAAQ,EAAiC,GAAA;IACrE,IAAI,CAACA,UAAUC,IAAAA,EAAM;AACnB,QAAA,OAAO,EAAC;AACV,IAAA;AAEA,IAAA,OAAOI,MAAAA,CAAOC,WAAW,CACvBD,MAAAA,CAAOE,OAAO,CAACV,UAAAA,CAAAA,CAAYW,GAAG,CAAC,CAAC,CAACC,GAAAA,EAAKC,UAAAA,CAAW,GAAA;QAC/C,OAAO;AAACD,YAAAA,GAAAA;AAAKR,YAAAA,qBAAAA,CAAKC,IAAI,CAACF,QAAAA,CAASC,IAAI,EAAES,UAAAA;AAAY,SAAA;AACpD,IAAA,CAAA,CAAA,CAAA;AAEJ;;;;;"}
|
|
@@ -23,6 +23,11 @@ import path from 'node:path';
|
|
|
23
23
|
'@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',
|
|
24
24
|
'@strapi/review-workflows/strapi-admin': './packages/core/review-workflows/admin/src'
|
|
25
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* The Enterprise sources of `@strapi/admin`. They sit beside the `admin/src` the alias names, and
|
|
28
|
+
* the production build compiles both into one `dist/admin`
|
|
29
|
+
*/ const eeAdminSource = './packages/core/admin/ee/admin/src';
|
|
30
|
+
const getMonorepoEeAdminSource = ({ monorepo })=>monorepo?.path ? path.join(monorepo.path, eeAdminSource) : undefined;
|
|
26
31
|
const getMonorepoAliases = ({ monorepo })=>{
|
|
27
32
|
if (!monorepo?.path) {
|
|
28
33
|
return {};
|
|
@@ -35,5 +40,5 @@ const getMonorepoAliases = ({ monorepo })=>{
|
|
|
35
40
|
}));
|
|
36
41
|
};
|
|
37
42
|
|
|
38
|
-
export { getMonorepoAliases };
|
|
43
|
+
export { getMonorepoAliases, getMonorepoEeAdminSource };
|
|
39
44
|
//# sourceMappingURL=aliases.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.mjs","sources":["../../../../src/node/core/aliases.ts"],"sourcesContent":["import path from 'node:path';\nimport { StrapiMonorepo } from './monorepo';\n\n/**\n * The path mappings/aliases used by various tools in the monorepo to map imported modules to\n * source files in order to speed up rebuilding and avoid having a separate watcher process to build\n * from `src` to `lib`.\n *\n * This file is currently read by:\n * - Webpack when running the dev server (only when running in this monorepo)\n */\nconst devAliases: Record<string, string> = {\n '@strapi/admin/strapi-admin': './packages/core/admin/admin/src',\n '@strapi/content-releases/strapi-admin': './packages/core/content-releases/admin/src',\n '@strapi/content-manager/strapi-admin': './packages/core/content-manager/admin/src',\n '@strapi/content-type-builder/strapi-admin': './packages/core/content-type-builder/admin/src',\n '@strapi/email/strapi-admin': './packages/core/email/admin/src',\n '@strapi/upload/strapi-admin': './packages/core/upload/admin/src',\n '@strapi/plugin-cloud/strapi-admin': './packages/plugins/cloud/admin/src',\n '@strapi/plugin-color-picker/strapi-admin': './packages/plugins/color-picker/admin/src',\n '@strapi/plugin-documentation/strapi-admin': './packages/plugins/documentation/admin/src',\n '@strapi/plugin-graphql/strapi-admin': './packages/plugins/graphql/admin/src',\n '@strapi/i18n/strapi-admin': './packages/plugins/i18n/admin/src',\n '@strapi/plugin-sentry/strapi-admin': './packages/plugins/sentry/admin/src',\n '@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',\n '@strapi/review-workflows/strapi-admin': './packages/core/review-workflows/admin/src',\n};\n\nconst getMonorepoAliases = ({ monorepo }: { monorepo?: StrapiMonorepo }) => {\n if (!monorepo?.path) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(devAliases).map(([key, modulePath]) => {\n return [key, path.join(monorepo.path, modulePath)];\n })\n );\n};\n\nexport { getMonorepoAliases };\n"],"names":["devAliases","
|
|
1
|
+
{"version":3,"file":"aliases.mjs","sources":["../../../../src/node/core/aliases.ts"],"sourcesContent":["import path from 'node:path';\nimport { StrapiMonorepo } from './monorepo';\n\n/**\n * The path mappings/aliases used by various tools in the monorepo to map imported modules to\n * source files in order to speed up rebuilding and avoid having a separate watcher process to build\n * from `src` to `lib`.\n *\n * This file is currently read by:\n * - Webpack when running the dev server (only when running in this monorepo)\n */\nconst devAliases: Record<string, string> = {\n '@strapi/admin/strapi-admin': './packages/core/admin/admin/src',\n '@strapi/content-releases/strapi-admin': './packages/core/content-releases/admin/src',\n '@strapi/content-manager/strapi-admin': './packages/core/content-manager/admin/src',\n '@strapi/content-type-builder/strapi-admin': './packages/core/content-type-builder/admin/src',\n '@strapi/email/strapi-admin': './packages/core/email/admin/src',\n '@strapi/upload/strapi-admin': './packages/core/upload/admin/src',\n '@strapi/plugin-cloud/strapi-admin': './packages/plugins/cloud/admin/src',\n '@strapi/plugin-color-picker/strapi-admin': './packages/plugins/color-picker/admin/src',\n '@strapi/plugin-documentation/strapi-admin': './packages/plugins/documentation/admin/src',\n '@strapi/plugin-graphql/strapi-admin': './packages/plugins/graphql/admin/src',\n '@strapi/i18n/strapi-admin': './packages/plugins/i18n/admin/src',\n '@strapi/plugin-sentry/strapi-admin': './packages/plugins/sentry/admin/src',\n '@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',\n '@strapi/review-workflows/strapi-admin': './packages/core/review-workflows/admin/src',\n};\n\n/**\n * The Enterprise sources of `@strapi/admin`. They sit beside the `admin/src` the alias names, and\n * the production build compiles both into one `dist/admin`\n */\nconst eeAdminSource = './packages/core/admin/ee/admin/src';\n\nconst getMonorepoEeAdminSource = ({\n monorepo,\n}: {\n monorepo?: StrapiMonorepo;\n}): string | undefined => (monorepo?.path ? path.join(monorepo.path, eeAdminSource) : undefined);\n\nconst getMonorepoAliases = ({ monorepo }: { monorepo?: StrapiMonorepo }) => {\n if (!monorepo?.path) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(devAliases).map(([key, modulePath]) => {\n return [key, path.join(monorepo.path, modulePath)];\n })\n );\n};\n\nexport { getMonorepoAliases, getMonorepoEeAdminSource };\n"],"names":["devAliases","eeAdminSource","getMonorepoEeAdminSource","monorepo","path","join","undefined","getMonorepoAliases","Object","fromEntries","entries","map","key","modulePath"],"mappings":";;AAGA;;;;;;;AAOC,IACD,MAAMA,UAAAA,GAAqC;IACzC,4BAAA,EAA8B,iCAAA;IAC9B,uCAAA,EAAyC,4CAAA;IACzC,sCAAA,EAAwC,2CAAA;IACxC,2CAAA,EAA6C,gDAAA;IAC7C,4BAAA,EAA8B,iCAAA;IAC9B,6BAAA,EAA+B,kCAAA;IAC/B,mCAAA,EAAqC,oCAAA;IACrC,0CAAA,EAA4C,2CAAA;IAC5C,2CAAA,EAA6C,4CAAA;IAC7C,qCAAA,EAAuC,sCAAA;IACvC,2BAAA,EAA6B,mCAAA;IAC7B,oCAAA,EAAsC,qCAAA;IACtC,+CAAA,EAAiD,gDAAA;IACjD,uCAAA,EAAyC;AAC3C,CAAA;AAEA;;;AAGC,IACD,MAAMC,aAAAA,GAAgB,oCAAA;AAEtB,MAAMC,wBAAAA,GAA2B,CAAC,EAChCC,QAAQ,EAGT,GAA0BA,QAAAA,EAAUC,IAAAA,GAAOA,IAAAA,CAAKC,IAAI,CAACF,QAAAA,CAASC,IAAI,EAAEH,aAAAA,CAAAA,GAAiBK;AAEtF,MAAMC,kBAAAA,GAAqB,CAAC,EAAEJ,QAAQ,EAAiC,GAAA;IACrE,IAAI,CAACA,UAAUC,IAAAA,EAAM;AACnB,QAAA,OAAO,EAAC;AACV,IAAA;AAEA,IAAA,OAAOI,MAAAA,CAAOC,WAAW,CACvBD,MAAAA,CAAOE,OAAO,CAACV,UAAAA,CAAAA,CAAYW,GAAG,CAAC,CAAC,CAACC,GAAAA,EAAKC,UAAAA,CAAW,GAAA;QAC/C,OAAO;AAACD,YAAAA,GAAAA;AAAKR,YAAAA,IAAAA,CAAKC,IAAI,CAACF,QAAAA,CAASC,IAAI,EAAES,UAAAA;AAAY,SAAA;AACpD,IAAA,CAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_module = require('node:module');
|
|
4
|
+
var path = require('node:path');
|
|
5
|
+
var aliases = require('./aliases.js');
|
|
6
|
+
var monorepo = require('./monorepo.js');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
11
|
+
|
|
12
|
+
/** The `@strapi/strapi` dependencies that `src/admin.ts` imports, so no plugin walk finds them */ const HOST_ADMIN_PACKAGES = [
|
|
13
|
+
'@strapi/admin',
|
|
14
|
+
'@strapi/content-type-builder',
|
|
15
|
+
'@strapi/content-manager',
|
|
16
|
+
'@strapi/email',
|
|
17
|
+
'@strapi/upload',
|
|
18
|
+
'@strapi/i18n',
|
|
19
|
+
'@strapi/content-releases',
|
|
20
|
+
'@strapi/review-workflows'
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* The directories Tailwind scans for class names. Tailwind never looks in `node_modules`, so the
|
|
24
|
+
* stylesheet must name every directory that holds admin code.
|
|
25
|
+
*
|
|
26
|
+
* @param dev - true for the Vite development server, which serves `admin/src`. Tailwind must scan
|
|
27
|
+
* what Vite serves. Every other case scans `dist`
|
|
28
|
+
*/ const getScanRoots = async (ctx, dev)=>{
|
|
29
|
+
const requireFromEntry = node_module.createRequire(path__default.default.join(ctx.runtimeDir, 'app.js'));
|
|
30
|
+
const monorepo$1 = dev ? await monorepo.loadStrapiMonorepo(ctx.cwd) : undefined;
|
|
31
|
+
const aliases$1 = aliases.getMonorepoAliases({
|
|
32
|
+
monorepo: monorepo$1
|
|
33
|
+
});
|
|
34
|
+
// Under strict pnpm the `@strapi/strapi` manifest is the only place the host packages resolve
|
|
35
|
+
const manifestPath = require.resolve('@strapi/strapi/package.json');
|
|
36
|
+
const requireFromHost = node_module.createRequire(manifestPath);
|
|
37
|
+
const hostRoots = HOST_ADMIN_PACKAGES.map((name)=>{
|
|
38
|
+
const modulePath = `${name}/strapi-admin`;
|
|
39
|
+
// The alias wins, because it names the directory Vite serves and not an unbuilt `dist`
|
|
40
|
+
return aliases$1[modulePath] ?? path__default.default.dirname(requireFromHost.resolve(modulePath));
|
|
41
|
+
});
|
|
42
|
+
const pluginRoots = ctx.plugins.map((plugin)=>{
|
|
43
|
+
const alias = aliases$1[plugin.modulePath];
|
|
44
|
+
if (alias) {
|
|
45
|
+
return alias;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
return path__default.default.dirname(requireFromEntry.resolve(plugin.modulePath));
|
|
49
|
+
} catch (error) {
|
|
50
|
+
// Only a missing module means the plugin is unbuilt; other errors are their own problem
|
|
51
|
+
if (!(error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND')) {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`Cannot find the admin entry of the plugin "${plugin.name}". Build the plugin first`, {
|
|
55
|
+
cause: error
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// The `@strapi/admin` alias names `admin/src` only, so the Enterprise tree is a second root
|
|
60
|
+
const eeAdminSource = aliases.getMonorepoEeAdminSource({
|
|
61
|
+
monorepo: monorepo$1
|
|
62
|
+
});
|
|
63
|
+
const eeRoots = eeAdminSource ? [
|
|
64
|
+
eeAdminSource
|
|
65
|
+
] : [];
|
|
66
|
+
const appRoots = ctx.customisations ? [
|
|
67
|
+
path__default.default.dirname(ctx.customisations.path)
|
|
68
|
+
] : [];
|
|
69
|
+
// A package can be both a host dependency and an enabled plugin
|
|
70
|
+
return [
|
|
71
|
+
...new Set([
|
|
72
|
+
...hostRoots,
|
|
73
|
+
...pluginRoots,
|
|
74
|
+
...eeRoots,
|
|
75
|
+
...appRoots
|
|
76
|
+
])
|
|
77
|
+
];
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Converts a system path to the glob form the `@source` lines need. A glob separator is a forward
|
|
81
|
+
* slash on every platform, Windows included
|
|
82
|
+
*/ const toGlobPath = (value)=>value.replace(/\\/g, '/');
|
|
83
|
+
|
|
84
|
+
exports.HOST_ADMIN_PACKAGES = HOST_ADMIN_PACKAGES;
|
|
85
|
+
exports.getScanRoots = getScanRoots;
|
|
86
|
+
exports.toGlobPath = toGlobPath;
|
|
87
|
+
//# sourceMappingURL=scan-roots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-roots.js","sources":["../../../../src/node/core/scan-roots.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport path from 'node:path';\n\nimport { getMonorepoAliases, getMonorepoEeAdminSource } from './aliases';\nimport { loadStrapiMonorepo } from './monorepo';\n\nimport type { BuildContext } from '../create-build-context';\n\n/** The `@strapi/strapi` dependencies that `src/admin.ts` imports, so no plugin walk finds them */\nconst HOST_ADMIN_PACKAGES = [\n '@strapi/admin',\n '@strapi/content-type-builder',\n '@strapi/content-manager',\n '@strapi/email',\n '@strapi/upload',\n '@strapi/i18n',\n '@strapi/content-releases',\n '@strapi/review-workflows',\n];\n\ntype ScanContext = Pick<BuildContext, 'cwd' | 'runtimeDir' | 'plugins' | 'customisations'>;\n\n/**\n * The directories Tailwind scans for class names. Tailwind never looks in `node_modules`, so the\n * stylesheet must name every directory that holds admin code.\n *\n * @param dev - true for the Vite development server, which serves `admin/src`. Tailwind must scan\n * what Vite serves. Every other case scans `dist`\n */\nconst getScanRoots = async (ctx: ScanContext, dev: boolean): Promise<string[]> => {\n const requireFromEntry = createRequire(path.join(ctx.runtimeDir, 'app.js'));\n const monorepo = dev ? await loadStrapiMonorepo(ctx.cwd) : undefined;\n const aliases = getMonorepoAliases({ monorepo });\n\n // Under strict pnpm the `@strapi/strapi` manifest is the only place the host packages resolve\n const manifestPath = require.resolve('@strapi/strapi/package.json');\n const requireFromHost = createRequire(manifestPath);\n\n const hostRoots = HOST_ADMIN_PACKAGES.map((name) => {\n const modulePath = `${name}/strapi-admin`;\n\n // The alias wins, because it names the directory Vite serves and not an unbuilt `dist`\n return aliases[modulePath] ?? path.dirname(requireFromHost.resolve(modulePath));\n });\n\n const pluginRoots = ctx.plugins.map((plugin) => {\n const alias = aliases[plugin.modulePath];\n\n if (alias) {\n return alias;\n }\n\n try {\n return path.dirname(requireFromEntry.resolve(plugin.modulePath));\n } catch (error) {\n // Only a missing module means the plugin is unbuilt; other errors are their own problem\n if (!(error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND')) {\n throw error;\n }\n\n throw new Error(\n `Cannot find the admin entry of the plugin \"${plugin.name}\". Build the plugin first`,\n { cause: error }\n );\n }\n });\n\n // The `@strapi/admin` alias names `admin/src` only, so the Enterprise tree is a second root\n const eeAdminSource = getMonorepoEeAdminSource({ monorepo });\n const eeRoots = eeAdminSource ? [eeAdminSource] : [];\n\n const appRoots = ctx.customisations ? [path.dirname(ctx.customisations.path)] : [];\n\n // A package can be both a host dependency and an enabled plugin\n return [...new Set([...hostRoots, ...pluginRoots, ...eeRoots, ...appRoots])];\n};\n\n/**\n * Converts a system path to the glob form the `@source` lines need. A glob separator is a forward\n * slash on every platform, Windows included\n */\nconst toGlobPath = (value: string): string => value.replace(/\\\\/g, '/');\n\nexport { getScanRoots, toGlobPath, HOST_ADMIN_PACKAGES };\nexport type { ScanContext };\n"],"names":["HOST_ADMIN_PACKAGES","getScanRoots","ctx","dev","requireFromEntry","createRequire","path","join","runtimeDir","monorepo","loadStrapiMonorepo","cwd","undefined","aliases","getMonorepoAliases","manifestPath","require","resolve","requireFromHost","hostRoots","map","name","modulePath","dirname","pluginRoots","plugins","plugin","alias","error","Error","code","cause","eeAdminSource","getMonorepoEeAdminSource","eeRoots","appRoots","customisations","Set","toGlobPath","value","replace"],"mappings":";;;;;;;;;;;AAQA,yGACMA,mBAAAA,GAAsB;AAC1B,IAAA,eAAA;AACA,IAAA,8BAAA;AACA,IAAA,yBAAA;AACA,IAAA,eAAA;AACA,IAAA,gBAAA;AACA,IAAA,cAAA;AACA,IAAA,0BAAA;AACA,IAAA;AACD;AAID;;;;;;IAOA,MAAMC,YAAAA,GAAe,OAAOC,GAAAA,EAAkBC,GAAAA,GAAAA;AAC5C,IAAA,MAAMC,mBAAmBC,yBAAAA,CAAcC,qBAAAA,CAAKC,IAAI,CAACL,GAAAA,CAAIM,UAAU,EAAE,QAAA,CAAA,CAAA;AACjE,IAAA,MAAMC,aAAWN,GAAAA,GAAM,MAAMO,2BAAAA,CAAmBR,GAAAA,CAAIS,GAAG,CAAA,GAAIC,SAAAA;AAC3D,IAAA,MAAMC,YAAUC,0BAAAA,CAAmB;AAAEL,kBAAAA;AAAS,KAAA,CAAA;;IAG9C,MAAMM,YAAAA,GAAeC,OAAAA,CAAQC,OAAO,CAAC,6BAAA,CAAA;AACrC,IAAA,MAAMC,kBAAkBb,yBAAAA,CAAcU,YAAAA,CAAAA;AAEtC,IAAA,MAAMI,SAAAA,GAAYnB,mBAAAA,CAAoBoB,GAAG,CAAC,CAACC,IAAAA,GAAAA;AACzC,QAAA,MAAMC,UAAAA,GAAa,CAAA,EAAGD,IAAAA,CAAK,aAAa,CAAC;;QAGzC,OAAOR,SAAO,CAACS,UAAAA,CAAW,IAAIhB,sBAAKiB,OAAO,CAACL,eAAAA,CAAgBD,OAAO,CAACK,UAAAA,CAAAA,CAAAA;AACrE,IAAA,CAAA,CAAA;AAEA,IAAA,MAAME,cAActB,GAAAA,CAAIuB,OAAO,CAACL,GAAG,CAAC,CAACM,MAAAA,GAAAA;AACnC,QAAA,MAAMC,KAAAA,GAAQd,SAAO,CAACa,MAAAA,CAAOJ,UAAU,CAAC;AAExC,QAAA,IAAIK,KAAAA,EAAO;YACT,OAAOA,KAAAA;AACT,QAAA;QAEA,IAAI;AACF,YAAA,OAAOrB,sBAAKiB,OAAO,CAACnB,iBAAiBa,OAAO,CAACS,OAAOJ,UAAU,CAAA,CAAA;AAChE,QAAA,CAAA,CAAE,OAAOM,KAAAA,EAAO;;YAEd,IAAI,EAAEA,KAAAA,YAAiBC,KAAAA,IAAS,MAAA,IAAUD,SAASA,KAAAA,CAAME,IAAI,KAAK,kBAAiB,CAAA,EAAI;gBACrF,MAAMF,KAAAA;AACR,YAAA;YAEA,MAAM,IAAIC,KAAAA,CACR,CAAC,2CAA2C,EAAEH,OAAOL,IAAI,CAAC,yBAAyB,CAAC,EACpF;gBAAEU,KAAAA,EAAOH;AAAM,aAAA,CAAA;AAEnB,QAAA;AACF,IAAA,CAAA,CAAA;;AAGA,IAAA,MAAMI,gBAAgBC,gCAAAA,CAAyB;AAAExB,kBAAAA;AAAS,KAAA,CAAA;AAC1D,IAAA,MAAMyB,UAAUF,aAAAA,GAAgB;AAACA,QAAAA;AAAc,KAAA,GAAG,EAAE;IAEpD,MAAMG,QAAAA,GAAWjC,GAAAA,CAAIkC,cAAc,GAAG;AAAC9B,QAAAA,qBAAAA,CAAKiB,OAAO,CAACrB,GAAAA,CAAIkC,cAAc,CAAC9B,IAAI;AAAE,KAAA,GAAG,EAAE;;IAGlF,OAAO;AAAI,QAAA,GAAA,IAAI+B,GAAAA,CAAI;AAAIlB,YAAAA,GAAAA,SAAAA;AAAcK,YAAAA,GAAAA,WAAAA;AAAgBU,YAAAA,GAAAA,OAAAA;AAAYC,YAAAA,GAAAA;AAAS,SAAA;AAAE,KAAA;AAC9E;AAEA;;;AAGC,UACKG,UAAAA,GAAa,CAACC,QAA0BA,KAAAA,CAAMC,OAAO,CAAC,KAAA,EAAO,GAAA;;;;;;"}
|