create-strapi-app
Version:
Generate a new Strapi application.
1 lines • 15.7 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { join, basename } from 'node:path';\nimport os from 'node:os';\nimport chalk from 'chalk';\nimport commander from 'commander';\nimport crypto from 'crypto';\nimport fse from 'fs-extra';\n\nimport * as prompts from './prompts';\nimport { handleCloudLogin } from './cloud';\nimport { createStrapi } from './create-strapi';\nimport { checkNodeRequirements } from './utils/check-requirements';\nimport { checkInstallPath } from './utils/check-install-path';\nimport { machineID } from './utils/machine-id';\nimport { trackError } from './utils/usage';\nimport { addDatabaseDependencies, getDatabaseInfos } from './utils/database';\n\nimport type { Options, Scope } from './types';\nimport { logger } from './utils/logger';\n\nconst { version } = fse.readJSONSync(join(__dirname, '..', 'package.json'));\n\nconst command = new commander.Command('create-strapi-app')\n .version(version)\n .arguments('[directory]')\n .usage('[directory] [options]')\n .option('--quickstart', 'Quickstart app creation (deprecated)')\n .option('--no-run', 'Do not start the application after it is created.')\n\n // setup options\n .option('--ts, --typescript', 'Initialize the project with TypeScript (default)')\n .option('--js, --javascript', 'Initialize the project with Javascript')\n\n // Package manager options\n .option('--use-npm', 'Use npm as the project package manager')\n .option('--use-yarn', 'Use yarn as the project package manager')\n .option('--use-pnpm', 'Use pnpm as the project package manager')\n\n // dependencies options\n .option('--install', 'Install dependencies')\n .option('--no-install', 'Do not install dependencies')\n\n // Cloud options\n .option('--skip-cloud', 'Skip cloud login and project creation')\n\n // Example app\n .option('--example', 'Use an example app')\n .option('--no-example', 'Do not use an example app')\n\n // git options\n .option('--git-init', 'Initialize a git repository')\n .option('--no-git-init', 'Do no initialize a git repository')\n\n // Database options\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('--skip-db', 'Skip database configuration')\n\n .option('--template <template>', 'Specify a Strapi template')\n .option('--template-branch <templateBranch>', 'Specify a branch for the template')\n .option('--template-path <templatePath>', 'Specify a path to the template inside the repository')\n\n .description('create a new application');\n\nasync function run(args: string[]): Promise<void> {\n const options = command.parse(args).opts<Options>();\n const directory = command.args[0];\n\n logger.title(\n 'Strapi',\n `${chalk.green(chalk.bold(`v${version}`))} ${chalk.bold(\"🚀 Let's create your new project\")}\\n`\n );\n\n if (\n (options.javascript !== undefined || options.typescript !== undefined) &&\n options.template !== undefined\n ) {\n logger.fatal(\n `You cannot use ${chalk.bold('--javascript')} or ${chalk.bold('--typescript')} with ${chalk.bold('--template')}`\n );\n }\n\n if (options.javascript === true && options.typescript === true) {\n logger.fatal(\n `You cannot use both ${chalk.bold('--typescript')} (--ts) and ${chalk.bold('--javascript')} (--js) flags together`\n );\n }\n\n // Only prompt the example app option if there is no template option\n if (options.example === true && options.template !== undefined) {\n logger.fatal(`You cannot use ${chalk.bold('--example')} with ${chalk.bold('--template')}`);\n }\n\n if (options.template !== undefined && options.template.startsWith('-')) {\n logger.fatal(`Template name ${chalk.bold(`\"${options.template}\"`)} is invalid`);\n }\n\n if ([options.useNpm, options.usePnpm, options.useYarn].filter(Boolean).length > 1) {\n logger.fatal(\n `You cannot specify multiple package managers at the same time ${chalk.bold('(--use-npm, --use-pnpm, --use-yarn)')}`\n );\n }\n\n if (options.quickstart && !directory) {\n logger.fatal(\n `Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--quickstart')}`\n );\n }\n\n checkNodeRequirements();\n\n const appDirectory = directory || (await prompts.directory());\n\n const rootPath = await checkInstallPath(appDirectory);\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);\n\n const scope: Scope = {\n rootPath,\n name: basename(rootPath),\n packageManager: getPkgManager(options),\n database: await getDatabaseInfos(options),\n template: options.template,\n templateBranch: options.templateBranch,\n templatePath: options.templatePath,\n isQuickstart: options.quickstart,\n useExample: false,\n runApp: options.quickstart === true && options.run !== false,\n strapiVersion: version,\n packageJsonStrapi: {\n template: options.template,\n },\n uuid: (process.env.STRAPI_UUID_PREFIX || '') + crypto.randomUUID(),\n docker: process.env.DOCKER === 'true',\n deviceId: machineID(),\n tmpPath,\n gitInit: true,\n devDependencies: {},\n dependencies: {\n '@strapi/strapi': version,\n '@strapi/plugin-users-permissions': version,\n '@strapi/plugin-cloud': version,\n // third party\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n },\n };\n\n if (options.template !== undefined) {\n scope.useExample = false;\n } else if (options.example === true) {\n scope.useExample = true;\n } else if (options.example === false || options.quickstart === true) {\n scope.useExample = false;\n } else {\n scope.useExample = await prompts.example();\n }\n\n if (options.javascript === true) {\n scope.useTypescript = false;\n } else if (options.typescript === true || options.quickstart) {\n scope.useTypescript = true;\n } else if (!options.template) {\n scope.useTypescript = await prompts.typescript();\n }\n\n if (options.install === true || options.quickstart) {\n scope.installDependencies = true;\n } else if (options.install === false) {\n scope.installDependencies = false;\n } else {\n scope.installDependencies = await prompts.installDependencies(scope.packageManager);\n }\n\n if (scope.useTypescript) {\n scope.devDependencies = {\n ...scope.devDependencies,\n typescript: '^5',\n '@types/node': '^20',\n '@types/react': '^18',\n '@types/react-dom': '^18',\n };\n }\n\n if (options.gitInit === true || options.quickstart) {\n scope.gitInit = true;\n } else if (options.gitInit === false) {\n scope.gitInit = false;\n } else {\n scope.gitInit = await prompts.gitInit();\n }\n\n addDatabaseDependencies(scope);\n\n try {\n await createStrapi(scope);\n } catch (error: unknown) {\n if (!(error instanceof Error)) {\n throw error;\n }\n\n await trackError({ scope, error });\n\n logger.fatal(error.message);\n }\n}\n\nfunction getPkgManager(options: Options) {\n if (options.useNpm === true) {\n return 'npm';\n }\n\n if (options.usePnpm === true) {\n return 'pnpm';\n }\n\n if (options.useYarn === true) {\n return 'yarn';\n }\n\n const userAgent = process.env.npm_config_user_agent || '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n return 'npm';\n}\n\nexport { run, createStrapi };\nexport type { Scope };\n"],"names":["version","fse","readJSONSync","join","__dirname","command","commander","Command","arguments","usage","option","description","run","args","options","parse","opts","directory","logger","title","chalk","green","bold","javascript","undefined","typescript","template","fatal","example","startsWith","useNpm","usePnpm","useYarn","filter","Boolean","length","quickstart","checkNodeRequirements","appDirectory","prompts","rootPath","checkInstallPath","skipCloud","handleCloudLogin","tmpPath","os","tmpdir","crypto","randomBytes","toString","scope","name","basename","packageManager","getPkgManager","database","getDatabaseInfos","templateBranch","templatePath","isQuickstart","useExample","runApp","strapiVersion","packageJsonStrapi","uuid","process","env","STRAPI_UUID_PREFIX","randomUUID","docker","DOCKER","deviceId","machineID","gitInit","devDependencies","dependencies","react","useTypescript","install","installDependencies","addDatabaseDependencies","createStrapi","error","Error","trackError","message","userAgent","npm_config_user_agent"],"mappings":"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"}