create-strapi-app 4.26.1 → 4.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"create-strapi-app.js","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudLogin(): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n const cloudApiService = await cloudServices.cloudApiFactory({ logger });\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n\n try {\n await cloudCli.login.action(cliContext);\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to log you into Strapi Cloud at the moment.';\n logger.warn(message);\n return;\n }\n } catch (e) {\n /* empty */\n }\n logger.error(defaultErrorMessage);\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp, type NewOptions } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudLogin } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["inquirer","chalk","cloudServices","cloudCli","e","readFileSync","resolve","commander","generateNewApp","checkInstallPath"],"mappings":"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"}
1
+ {"version":3,"file":"create-strapi-app.js","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudLogin(): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n const cloudApiService = await cloudServices.cloudApiFactory({ logger });\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n\n try {\n await cloudCli.login.action(cliContext);\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to log you into Strapi Cloud at the moment.';\n logger.warn(message);\n return;\n }\n } catch (e) {\n /* empty */\n }\n logger.error(defaultErrorMessage);\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp, type NewOptions } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudLogin } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["inquirer","chalk","cloudServices","cloudCli","e","readFileSync","resolve","commander","generateNewApp","checkInstallPath"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-strapi-app.mjs","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudLogin(): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n const cloudApiService = await cloudServices.cloudApiFactory({ logger });\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n\n try {\n await cloudCli.login.action(cliContext);\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to log you into Strapi Cloud at the moment.';\n logger.warn(message);\n return;\n }\n } catch (e) {\n /* empty */\n }\n logger.error(defaultErrorMessage);\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp, type NewOptions } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudLogin } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["cloudServices","cloudCli","e"],"mappings":"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"}
1
+ {"version":3,"file":"create-strapi-app.mjs","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudLogin(): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n const cloudApiService = await cloudServices.cloudApiFactory({ logger });\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n\n try {\n await cloudCli.login.action(cliContext);\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to log you into Strapi Cloud at the moment.';\n logger.warn(message);\n return;\n }\n } catch (e) {\n /* empty */\n }\n logger.error(defaultErrorMessage);\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp, type NewOptions } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudLogin } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["cloudServices","cloudCli","e"],"mappings":";;;;;;;AAQA,eAA8B,WAC5B,aACA,SACA,oBACA;AACA,SAAO,SAAS,OAAgB;AAAA,IAC9B;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC;AAAA,IAAA;AAAA,IAET;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,QAAQ,cAAc,CAAC;AAAA,MAC9B,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,QAET;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF,CACD;AACH;AClCA,MAAM,kBAAkB;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,YAAY,MAAM;AAAA,EAClB,cAAc,MAAM;AAAA,EACpB,OAAO,MAAM;AAAA,EACb,KAAK,MAAM;AAAA,EACX,MAAM,MAAM;AAAA,EACZ,QAAQ,MAAM;AAChB;AAEA,SAAwB,aAAa,UAAkB;AACrD,MAAI,SAAS;AAEb,aAAW,CAAC,OAAO,aAAa,KAAK,OAAO,QAAQ,eAAe,GAAG;AACpE,UAAM,QAAQ,IAAI,OAAO,IAAI,KAAK,WAAW,KAAK,KAAK,GAAG;AAC1D,aAAS,OAAO,QAAQ,OAAO,CAAC,GAAG,OAAO,cAAc,GAAG,KAAA,CAAM,CAAC;AAAA,EACpE;AAEA,SAAO;AACT;ACZA,SAAS,iBAAiB,GAAqC;AAC7D,MAAK,EAAiB,aAAa,QAAW;AAC5C,UAAM,MAAM,qBAAqB;AAAA,EACnC;AACF;AAEA,eAAsB,mBAAkC;AACtD,QAAM,SAASA,SAAc,aAAa;AAAA,IACxC,QAAQ;AAAA,IACR,OAAO,QAAQ,KAAK,SAAS,SAAS;AAAA,IACtC,WAAW;AAAA,EAAA,CACZ;AACD,QAAM,kBAAkB,MAAMA,SAAc,gBAAgB,EAAE,QAAQ;AACtE,QAAM,sBACJ;AAEF,MAAI;AACF,UAAM,EAAE,MAAM,OAAA,IAAW,MAAM,gBAAgB,OAAA;AAC/C,WAAO,IAAI,aAAa,OAAO,gBAAgB,SAAS,CAAC;AAAA,EAC3D,SAAS,GAAY;AACnB,WAAO,MAAM,CAAC;AACd,WAAO,MAAM,mBAAmB;AAChC;AAAA,EACF;AACA,QAAM,EAAE,WAAA,IAAe,MAAM,SAAS,OAA+B;AAAA,IACnE;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,iBAAiB,MAAM;AAAA,IAAA;AAAA,EACnC,CACD;AAED,MAAI,eAAe,QAAQ;AACzB,UAAM,aAAa;AAAA,MACjB;AAAA,MACA,KAAK,QAAQ,IAAA;AAAA,IAAI;AAGnB,QAAI;AACF,YAAMC,IAAS,MAAM,OAAO,UAAU;AAAA,IACxC,SAAS,GAAiC;AACxC,aAAO,MAAM,CAAC;AACd,UAAI;AACF,yBAAiB,CAAC;AAClB,YAAI,EAAE,SAAS,WAAW,KAAK;AAC7B,gBAAM,UACJ,OAAO,EAAE,SAAS,SAAS,WACvB,EAAE,SAAS,OACX;AACN,iBAAO,KAAK,OAAO;AACnB;AAAA,QACF;AAAA,MACF,SAASC,IAAG;AAAA,MAEZ;AACA,aAAO,MAAM,mBAAmB;AAAA,IAClC;AAAA,EACF;AACF;AC9DA,MAAM,cAAc,KAAK,MAAM,aAAa,QAAQ,WAAW,iBAAiB,GAAG,MAAM,CAAC;AAE1F,MAAM,UAAU,IAAI,UAAU,QAAQ,YAAY,IAAI;AAEtD,MAAM,kBAAwC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,QACG,QAAQ,YAAY,OAAO,EAC3B,UAAU,aAAa,EACvB,OAAO,YAAY,kDAAkD,EACrE,OAAO,aAAa,0DAA0D,EAC9E,OAAO,WAAW,mCAAmC,EACrD,OAAO,gBAAgB,yBAAyB,EAChD,OAAO,gBAAgB,uCAAuC,EAC9D,OAAO,yBAAyB,iBAAiB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,eAAe,EAC3C,OAAO,6BAA6B,mBAAmB,EACvD,OAAO,6BAA6B,mBAAmB,EACvD,OAAO,mBAAmB,cAAc,EACxC,OAAO,qBAAqB,+BAA+B,EAC3D,OAAO,aAAa,mCAAmC,EACvD,OAAO,4BAA4B,2BAA2B,EAC9D,OAAO,sBAAsB,wCAAwC,EACrE,YAAY,0BAA0B,EACtC,OAAO,CAAC,WAAW,gBAAgB;AAClC,cAAY,WAAW,WAAW;AACpC,CAAC,EACA,MAAM,QAAQ,IAAI;AAErB,eAAe,YACb,aACA,SACA;AACA,MAAI,CAAC,aAAa;AAChB,YAAQ,MAAM,wEAAwE;AACtF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,CAAC,QAAQ,WAAW;AACtB,UAAM,iBAAA;AAAA,EACR;AAEA,SAAO,eAAe,aAAa,OAAO,EAAE,KAAK,MAAM;AACrD,QAAI,QAAQ,aAAa,SAAS;AAChC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACH;AAEA,eAAe,YAAY,aAAqB,aAAsB;AACpE,MAAI,aAAa;AACf,UAAM,iBAAiB,QAAQ,WAAW,CAAC;AAAA,EAC7C;AAEA,QAAM,eAAe,QAClB,WAAA,EACA,eAAe,OAAO,EACtB,OAAkC,CAAC,KAAK,EAAE,OAAO,WAAW,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAA,CAAE,EACrF,OAAO,OAAO;AAEjB,MAAI,YAAY,YAAY,aAAa,SAAS,YAAY,QAAQ,GAAG;AACvE,YAAQ,MAAM,GAAG,YAAY,QAAQ,0BAA0B;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,qBAAqB,gBAAgB,KAAK,CAAC,QAAQ,YAAY,GAAG,CAAC;AAEzE,MAAI,YAAY,cAAc,oBAAoB;AAChD,YAAQ;AAAA,MACN,qEAAqE,gBAAgB;AAAA,QACnF;AAAA,MAAA,CACD;AAAA,IAAA;AAEH,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,oBAAoB;AACtB,gBAAY,aAAa;AAAA,EAC3B;AAEA,MAAI,YAAY,YAAY;AAC1B,WAAO,YAAY,aAAa,WAAW;AAAA,EAC7C;AAEA,QAAM,SAAS,MAAM,WAAW,aAAa,aAAa,kBAAkB;AAC5E,QAAM,YAAY,OAAO,aAAa;AACtC,QAAM,iBAAiB,QAAQ,SAAS,CAAC;AAEzC,QAAM,UAAU;AAAA,IACd,UAAU,YAAY;AAAA,IACtB,YAAY,OAAO,SAAS,YAAY;AAAA,EAAA;AAG1C,QAAM,2BAA2B;AAAA,IAC/B,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAGL,QAAM,YAAY,WAAW,wBAAwB;AACvD;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-strapi-app",
3
- "version": "4.26.1",
3
+ "version": "4.26.2",
4
4
  "description": "Generate a new Strapi application.",
5
5
  "keywords": [
6
6
  "create-strapi-app",
@@ -43,20 +43,20 @@
43
43
  "watch": "pack-up watch"
44
44
  },
45
45
  "dependencies": {
46
- "@strapi/cloud-cli": "4.26.1",
47
- "@strapi/generate-new": "4.26.1",
46
+ "@strapi/cloud-cli": "4.26.2",
47
+ "@strapi/generate-new": "4.26.2",
48
48
  "chalk": "4.1.2",
49
49
  "commander": "8.3.0",
50
50
  "inquirer": "8.2.5"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@strapi/pack-up": "4.23.0",
54
- "eslint-config-custom": "4.26.1",
55
- "tsconfig": "4.26.1"
54
+ "eslint-config-custom": "4.26.2",
55
+ "tsconfig": "4.26.2"
56
56
  },
57
57
  "engines": {
58
- "node": ">=18.0.0 <=20.x.x",
58
+ "node": ">=18.0.0 <=22.x.x",
59
59
  "npm": ">=6.0.0"
60
60
  },
61
- "gitHead": "85ae6329351954dbd47279b3a03c34a32d976a18"
61
+ "gitHead": "7ad165f89d1ccae3c524439a36fc619ecf6b23f9"
62
62
  }