create-strapi-app 5.0.0-rc.13 → 5.0.0-rc.14

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":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAiBA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsDtD"}
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAiBA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqDtD"}
package/dist/index.js CHANGED
@@ -531,7 +531,8 @@ function isStderrError(error) {
531
531
  const MAX_PREFIX_LENGTH = 8;
532
532
  const badge = (text, bgColor, textColor = chalk__default.default.black) => {
533
533
  const wrappedText = ` ${text} `;
534
- return " ".repeat(MAX_PREFIX_LENGTH - wrappedText.length) + bgColor(textColor(wrappedText));
534
+ const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);
535
+ return " ".repeat(repeat) + bgColor(textColor(wrappedText));
535
536
  };
536
537
  const textIndent = (text, indentFirst = true, indent = MAX_PREFIX_LENGTH + 2) => {
537
538
  const parts = Array.isArray(text) ? text : [text];
@@ -699,10 +700,10 @@ async function createApp(scope) {
699
700
  `
700
701
  ]);
701
702
  if (installDependencies2) {
702
- logger.log(["To get start run", "", `${chalk__default.default.cyan("cd")} ${rootPath}`, `${cmd} develop`]);
703
+ logger.log(["To get started run", "", `${chalk__default.default.cyan("cd")} ${rootPath}`, `${cmd} develop`]);
703
704
  } else {
704
705
  logger.log([
705
- "To get start run",
706
+ "To get started run",
706
707
  "",
707
708
  `${chalk__default.default.cyan("cd")} ${rootPath}`,
708
709
  `${chalk__default.default.cyan(packageManager)} install`,
@@ -710,10 +711,10 @@ async function createApp(scope) {
710
711
  ]);
711
712
  }
712
713
  if (runApp && installDependencies2) {
713
- logger.title("Starting", "Running your Strapi application");
714
+ logger.title("Run", "Running your Strapi application");
714
715
  try {
715
716
  await trackUsage({ event: "willStartServer", scope });
716
- await execa__default.default("npm", ["run", "develop"], {
717
+ await execa__default.default(packageManager, ["run", "develop"], {
717
718
  stdio: "inherit",
718
719
  cwd: rootPath,
719
720
  env: {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/prompts.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/utils/template.ts","../src/utils/git.ts","../src/utils/usage.ts","../src/utils/engines.ts","../src/utils/package-json.ts","../src/utils/dot-env.ts","../src/types.ts","../src/utils/logger.ts","../src/create-strapi.ts","../src/utils/check-requirements.ts","../src/utils/check-install-path.ts","../src/utils/machine-id.ts","../src/utils/database.ts","../src/index.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nasync function directory() {\n const { directory } = await inquirer.prompt<{\n directory: string;\n }>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What is the name of your project?',\n },\n ]);\n\n return directory;\n}\n\nasync function typescript() {\n const { useTypescript } = await inquirer.prompt<{\n useTypescript: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useTypescript',\n message: 'Start with Typescript?',\n default: true,\n },\n ]);\n\n return useTypescript;\n}\n\nasync function example() {\n const { useExampleApp } = await inquirer.prompt<{\n useExampleApp: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useExampleApp',\n message: 'Start with an example structure & data?',\n default: true,\n },\n ]);\n\n return useExampleApp;\n}\n\nasync function gitInit() {\n const { gitInit } = await inquirer.prompt<{\n gitInit: boolean;\n }>([\n {\n type: 'confirm',\n name: 'gitInit',\n message: 'Initialize a git repository?',\n default: true,\n },\n ]);\n\n return gitInit;\n}\n\nasync function installDependencies(packageManager: string) {\n const { installDependencies } = await inquirer.prompt<{\n installDependencies: boolean;\n }>([\n {\n type: 'confirm',\n name: 'installDependencies',\n message: `Install dependencies with ${packageManager}?`,\n default: true,\n },\n ]);\n\n return installDependencies;\n}\n\nexport { directory, typescript, example, gitInit, installDependencies };\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\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 path from 'node:path';\nimport url from 'node:url';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport * as tar from 'tar';\nimport retry from 'async-retry';\n\nimport fse from 'fs-extra';\nimport type { Scope } from '../types';\n\nconst stripTrailingSlash = (str: string) => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\n// Merge template with new project being created\nexport async function copyTemplate(scope: Scope, rootPath: string) {\n const { template } = scope;\n\n if (!template) {\n throw new Error('Missing template or example app option');\n }\n\n if (await isOfficialTemplate(template, scope.templateBranch)) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner: 'strapi',\n repo: 'strapi',\n branch: scope.templateBranch,\n subPath: `templates/${template}`,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isLocalTemplate(template)) {\n const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;\n\n await fse.copy(filePath, rootPath);\n }\n\n if (isGithubShorthand(template)) {\n const [owner, repo, ...pathSegments] = template.split('/');\n const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;\n\n await retry(\n () => downloadGithubRepo(rootPath, { owner, repo, branch: scope.templateBranch, subPath }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isGithubRepo(template)) {\n const url = new URL(template);\n\n const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(\n url.pathname.slice(1)\n ).split('/');\n\n if (t !== undefined && t !== 'tree') {\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n\n if (scope.templateBranch) {\n await downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: scope.templateBranch,\n subPath: scope.templatePath,\n });\n }\n\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: decodeURIComponent(branch) ?? scope.templateBranch,\n subPath: pathSegments.length\n ? decodeURIComponent(pathSegments.join('/'))\n : scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n}\n\ntype RepoInfo = {\n owner: string;\n repo: string;\n branch?: string;\n subPath?: string | null;\n};\n\nasync function downloadGithubRepo(rootPath: string, { owner, repo, branch, subPath }: RepoInfo) {\n const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;\n\n let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;\n if (filePath) {\n checkContentUrl = `${checkContentUrl}/${filePath}`;\n }\n\n if (branch) {\n checkContentUrl = `${checkContentUrl}?ref=${branch}`;\n }\n\n const checkRes = await fetch(checkContentUrl, {\n method: 'HEAD',\n });\n\n if (checkRes.status !== 200) {\n throw new Error(\n `Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`\n );\n }\n\n let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;\n\n if (branch) {\n url = `${url}/${branch}`;\n }\n\n const res = await fetch(url);\n\n if (!res.body) {\n throw new Error(`Failed to download ${url}`);\n }\n\n await pipeline(\n // @ts-expect-error - Readable is not a valid source\n Readable.fromWeb(res.body),\n tar.x({\n cwd: rootPath,\n strip: filePath ? filePath.split('/').length + 1 : 1,\n filter(path) {\n if (filePath) {\n return path.split('/').slice(1).join('/').startsWith(filePath);\n }\n\n return true;\n },\n })\n );\n}\n\nfunction isLocalTemplate(template: string) {\n return (\n template.startsWith('file://') ||\n fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template))\n );\n}\n\nfunction isGithubShorthand(value: string) {\n if (isValidUrl(value)) {\n return false;\n }\n\n return /^[\\w-]+\\/[\\w-.]+(\\/[\\w-.]+)*$/.test(value);\n}\n\nfunction isGithubRepo(value: string) {\n try {\n const url = new URL(value);\n\n return url.origin === 'https://github.com';\n } catch {\n return false;\n }\n}\n\nfunction isValidUrl(value: string) {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isOfficialTemplate(template: string, branch: string | undefined) {\n if (isValidUrl(template)) {\n return false;\n }\n\n const res = await fetch(\n `https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`,\n { method: 'HEAD' }\n );\n\n return res.status === 200;\n}\n","import execa from 'execa';\n\nasync function isInGitRepository(rootDir: string) {\n try {\n await execa('git', ['rev-parse', '--is-inside-work-tree'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nasync function isInMercurialRepository(rootDir: string) {\n try {\n await execa('hg', ['-cwd', '.', 'root'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport async function tryGitInit(rootDir: string) {\n try {\n await execa('git', ['--version'], { stdio: 'ignore' });\n if ((await isInGitRepository(rootDir)) || (await isInMercurialRepository(rootDir))) {\n return false;\n }\n\n await execa('git', ['init'], { stdio: 'ignore', cwd: rootDir });\n\n await execa('git', ['add', '.'], { stdio: 'ignore', cwd: rootDir });\n await execa('git', ['commit', '-m', 'Initial commit from Strapi'], {\n stdio: 'ignore',\n cwd: rootDir,\n });\n\n return true;\n } catch (e) {\n console.error('Error while trying to initialize git:', e);\n return false;\n }\n}\n","import os from 'os';\nimport _ from 'lodash';\n\nimport { Scope, StderrError } from '../types';\n\ntype TrackError = Error | string | StderrError;\n\n// Add properties from the package.json strapi key in the metadata\nfunction addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) {\n const { packageJsonStrapi = {} } = scope;\n\n return _.defaults(metadata, packageJsonStrapi);\n}\n\nconst getProperties = (scope: Scope, error?: TrackError) => {\n const eventProperties = {\n error: typeof error === 'string' ? error : error && error.message,\n };\n\n const userProperties = {\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const groupProperties = {\n version: scope.strapiVersion,\n docker: scope.docker,\n useYarn: scope.packageManager === 'yarn',\n packageManager: scope.packageManager,\n useTypescriptOnServer: scope.useTypescript,\n useTypescriptOnAdmin: scope.useTypescript,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n noRun: (scope.runApp !== true).toString(),\n projectId: scope.uuid,\n };\n\n return {\n eventProperties,\n userProperties,\n groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope),\n };\n};\n\nfunction trackEvent(event: string, payload: Record<string, unknown>) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n try {\n return fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n ...payload,\n }),\n signal: AbortSignal.timeout(1000),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }).catch(() => {});\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackError({ scope, error }: { scope: Scope; error?: TrackError }) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent('didNotCreateProject', {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackUsage({\n event,\n scope,\n error,\n}: {\n event: string;\n scope: Scope;\n error?: TrackError;\n}) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent(event, {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n","export const engines = {\n node: '>=18.0.0 <=20.x.x',\n npm: '>=6.0.0',\n};\n","import { join } from 'path';\nimport { kebabCase, merge } from 'lodash';\nimport fse from 'fs-extra';\n\nimport { engines } from './engines';\nimport type { Scope } from '../types';\n\nexport async function createPackageJSON(scope: Scope) {\n const { sortPackageJson } = await import('sort-package-json');\n\n const pkgJSONPath = join(scope.rootPath, 'package.json');\n\n const existingPkg = await fse.readJSON(pkgJSONPath).catch(() => ({}));\n\n const pkg = {\n name: kebabCase(scope.name),\n private: true,\n version: '0.1.0',\n description: 'A Strapi application',\n devDependencies: scope.devDependencies ?? {},\n dependencies: scope.dependencies ?? {},\n strapi: {\n ...(scope.packageJsonStrapi ?? {}),\n uuid: scope.uuid,\n },\n engines,\n };\n\n // copy templates\n await fse.writeJSON(pkgJSONPath, sortPackageJson(merge(existingPkg, pkg)), {\n spaces: 2,\n });\n}\n","import crypto from 'crypto';\nimport _ from 'lodash';\n\nimport type { Scope } from '../types';\n\nconst generateASecret = () => crypto.randomBytes(16).toString('base64');\n\nconst envTmpl = `\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=<%= appKeys %>\nAPI_TOKEN_SALT=<%= apiTokenSalt %>\nADMIN_JWT_SECRET=<%= adminJwtToken %>\nTRANSFER_TOKEN_SALT=<%= transferTokenSalt %>\n\n# Database\nDATABASE_CLIENT=<%= database.client %>\nDATABASE_HOST=<%= database.connection.host %>\nDATABASE_PORT=<%= database.connection.port %>\nDATABASE_NAME=<%= database.connection.database %>\nDATABASE_USERNAME=<%= database.connection.username %>\nDATABASE_PASSWORD=<%= database.connection.password %>\nDATABASE_SSL=<%= database.connection.ssl %>\nDATABASE_FILENAME=<%= database.connection.filename %>\n`;\n\nexport function generateDotEnv(scope: Scope) {\n const compile = _.template(envTmpl);\n\n return compile({\n appKeys: new Array(4).fill(null).map(generateASecret).join(','),\n apiTokenSalt: generateASecret(),\n transferTokenSalt: generateASecret(),\n adminJwtToken: generateASecret(),\n database: {\n client: scope.database.client,\n connection: {\n ...scope.database.connection,\n ssl: scope.database.connection?.ssl || false,\n },\n },\n });\n}\n","export interface Options {\n useNpm?: boolean;\n usePnpm?: boolean;\n useYarn?: boolean;\n quickstart?: boolean;\n run?: boolean;\n dbclient?: DBClient;\n skipCloud?: boolean;\n skipDb?: boolean;\n dbhost?: string;\n dbport?: string;\n dbname?: string;\n dbusername?: string;\n dbpassword?: string;\n dbssl?: string;\n dbfile?: string;\n template?: string;\n typescript?: boolean;\n javascript?: boolean;\n install?: boolean;\n example?: boolean;\n gitInit?: boolean;\n templateBranch?: string;\n templatePath?: string;\n}\n\nexport type DBClient = 'mysql' | 'postgres' | 'sqlite';\n\nexport type DBConfig = {\n client: DBClient;\n connection: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n};\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm';\n\nexport interface Scope {\n name: string;\n rootPath: string;\n template?: string;\n templateBranch?: string;\n templatePath?: string;\n strapiVersion?: string;\n installDependencies?: boolean;\n devDependencies?: Record<string, string>;\n dependencies?: Record<string, string>;\n docker?: boolean;\n packageManager: PackageManager;\n runApp?: boolean;\n isQuickstart?: boolean;\n uuid?: string;\n deviceId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExampleApp?: boolean;\n gitInit?: boolean;\n}\n\nexport type ClientName = 'mysql' | 'postgres' | 'sqlite';\n\nexport interface DatabaseInfo {\n client: ClientName;\n connection?: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n}\n\nexport interface StderrError extends Error {\n stderr: string;\n}\n\nexport function isStderrError(error: unknown): error is StderrError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'stderr' in error &&\n typeof error.stderr === 'string'\n );\n}\n","import chalk from 'chalk';\nimport type { ChalkFunction } from 'chalk';\n\nconst MAX_PREFIX_LENGTH = 8;\n\nconst badge = (text: string, bgColor: ChalkFunction, textColor: ChalkFunction = chalk.black) => {\n const wrappedText = ` ${text} `;\n\n return ' '.repeat(MAX_PREFIX_LENGTH - wrappedText.length) + bgColor(textColor(wrappedText));\n};\n\nconst textIndent = (\n text: string | string[],\n indentFirst = true,\n indent: number = MAX_PREFIX_LENGTH + 2\n) => {\n const parts = Array.isArray(text) ? text : [text];\n\n return parts\n .map((part, i) => {\n if (i === 0 && !indentFirst) {\n return part;\n }\n\n return ' '.repeat(indent) + part;\n })\n .join('\\n');\n};\n\nexport const logger = {\n log(message: string | string[]): void {\n console.log(textIndent(message));\n },\n title(title: string, message: string): void {\n const prefix = badge(title, chalk.bgBlueBright);\n console.log(`\\n${prefix} ${message}`);\n },\n info(message: string): void {\n console.log(`${' '.repeat(7)}${chalk.cyan('●')} ${message}`);\n },\n success(message: string): void {\n console.log(`\\n${' '.repeat(7)}${chalk.green('✓')} ${chalk.green(message)}`);\n },\n fatal(message?: string | string[]): never {\n const prefix = badge('Error', chalk.bgRed);\n\n if (message) {\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n }\n\n process.exit(1);\n },\n error(message: string | string[]): void {\n const prefix = badge('Error', chalk.bgRed);\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n warn(message: string | string[]): void {\n const prefix = badge('Warn', chalk.bgYellow);\n console.warn(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n};\n","import { join } from 'node:path';\n\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport fse from 'fs-extra';\n\nimport { copyTemplate } from './utils/template';\nimport { tryGitInit } from './utils/git';\nimport { trackUsage } from './utils/usage';\nimport { createPackageJSON } from './utils/package-json';\nimport { generateDotEnv } from './utils/dot-env';\nimport { isStderrError } from './types';\n\nimport type { Scope } from './types';\nimport { logger } from './utils/logger';\n\nasync function createStrapi(scope: Scope) {\n const { rootPath } = scope;\n try {\n await fse.ensureDir(rootPath);\n await createApp(scope);\n } catch (error) {\n await fse.remove(rootPath);\n\n throw error;\n }\n}\n\nasync function createApp(scope: Scope) {\n const {\n rootPath,\n useTypescript,\n useExampleApp,\n installDependencies,\n isQuickstart,\n template,\n packageManager,\n gitInit,\n runApp,\n } = scope;\n\n await trackUsage({ event: 'willCreateProject', scope });\n\n logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);\n\n if (!isQuickstart) {\n await trackUsage({ event: 'didChooseCustomDatabase', scope });\n } else {\n await trackUsage({ event: 'didChooseQuickstart', scope });\n }\n\n if (!template) {\n let templateName = useExampleApp ? 'example' : 'vanilla';\n\n if (!useTypescript) {\n templateName = `${templateName}-js`;\n }\n\n const internalTemplatePath = join(__dirname, '../templates', templateName);\n if (await fse.exists(internalTemplatePath)) {\n await fse.copy(internalTemplatePath, rootPath);\n }\n } else {\n try {\n logger.info(`${chalk.cyan('Installing template')} ${template}`);\n\n await copyTemplate(scope, rootPath);\n\n logger.success('Template copied successfully.');\n } catch (error) {\n if (error instanceof Error) {\n logger.fatal(`Template installation failed: ${error.message}`);\n }\n\n throw error;\n }\n\n if (!fse.existsSync(join(rootPath, 'package.json'))) {\n logger.fatal(`Missing ${chalk.bold('package.json')} in template`);\n }\n }\n\n await trackUsage({ event: 'didCopyProjectFiles', scope });\n\n try {\n await createPackageJSON(scope);\n\n await trackUsage({ event: 'didWritePackageJSON', scope });\n\n // ensure node_modules is created\n await fse.ensureDir(join(rootPath, 'node_modules'));\n\n // create config/database\n await fse.writeFile(join(rootPath, '.env'), generateDotEnv(scope));\n\n await trackUsage({ event: 'didCopyConfigurationFiles', scope });\n } catch (err) {\n await fse.remove(rootPath);\n throw err;\n }\n\n if (installDependencies) {\n try {\n logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);\n\n await trackUsage({ event: 'willInstallProjectDependencies', scope });\n\n await runInstall(scope);\n\n await trackUsage({ event: 'didInstallProjectDependencies', scope });\n\n logger.success(`Dependencies installed`);\n } catch (error) {\n const stderr = isStderrError(error) ? error.stderr : '';\n\n await trackUsage({\n event: 'didNotInstallProjectDependencies',\n scope,\n error: stderr.slice(-1024),\n });\n\n logger.fatal([\n chalk.bold(\n 'Oh, it seems that you encountered an error while installing dependencies in your project'\n ),\n '',\n `Don't give up, your project was created correctly`,\n '',\n `Fix the issues mentioned in the installation errors and try to run the following command:`,\n '',\n `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`,\n ]);\n }\n }\n\n await trackUsage({ event: 'didCreateProject', scope });\n\n // Init git\n if (gitInit) {\n logger.title('git', 'Initializing git repository.');\n await tryGitInit(rootPath);\n logger.success('Initialized a git repository.');\n }\n\n logger.title('Strapi', `Your application was created!`);\n\n const cmd = chalk.cyan(`${packageManager} run`);\n\n logger.log([\n 'Available commands in your project:',\n '',\n 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',\n `${cmd} develop`,\n '',\n 'Start Strapi without watch mode.',\n `${cmd} start`,\n '',\n 'Build Strapi admin panel.',\n `${cmd} build`,\n '',\n 'Deploy Strapi project.',\n `${cmd} deploy`,\n '',\n 'Display all available commands.',\n `${cmd} strapi\\n`,\n ]);\n\n if (installDependencies) {\n logger.log(['To get start run', '', `${chalk.cyan('cd')} ${rootPath}`, `${cmd} develop`]);\n } else {\n logger.log([\n 'To get start run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n `${chalk.cyan(packageManager)} install`,\n `${cmd} develop`,\n ]);\n }\n\n if (runApp && installDependencies) {\n logger.title('Starting', 'Running your Strapi application');\n\n try {\n await trackUsage({ event: 'willStartServer', scope });\n\n await execa('npm', ['run', 'develop'], {\n stdio: 'inherit',\n cwd: rootPath,\n env: {\n FORCE_COLOR: '1',\n },\n });\n } catch (error) {\n if (typeof error === 'string' || error instanceof Error) {\n await trackUsage({\n event: 'didNotStartServer',\n scope,\n error,\n });\n }\n\n logger.fatal('Failed to start your Strapi application');\n }\n }\n}\n\nconst installArguments = ['install'];\n\nconst installArgumentsMap = {\n npm: ['--legacy-peer-deps'],\n yarn: ['--network-timeout 1000000'],\n pnpm: [],\n};\n\nfunction runInstall({ rootPath, packageManager }: Scope) {\n const options: execa.Options = {\n cwd: rootPath,\n stdio: 'inherit',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n };\n\n if (packageManager in installArgumentsMap) {\n installArguments.push(...(installArgumentsMap[packageManager] ?? []));\n }\n\n const proc = execa(packageManager, installArguments, options);\n\n return proc;\n}\n\nexport { createStrapi };\n","import chalk from 'chalk';\nimport semver from 'semver';\n\nimport { engines } from './engines';\nimport { logger } from './logger';\n\nexport function checkNodeRequirements() {\n const currentNodeVersion = process.versions.node;\n\n // error if the node version isn't supported\n if (!semver.satisfies(currentNodeVersion, engines.node)) {\n logger.fatal([\n chalk.red(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi requires ${chalk.bold(chalk.green(`Node.js ${engines.node}`))}`,\n 'Please make sure to use the right version of Node.',\n ]);\n }\n\n // warn if not using a LTS version\n else if (semver.major(currentNodeVersion) % 2 !== 0) {\n logger.warn([\n chalk.yellow(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi only supports ${chalk.bold(chalk.green('LTS versions of Node.js'))}, other versions may not be compatible.`,\n ]);\n }\n}\n","import { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport { logger } from './logger';\n\n// Checks if the an empty directory exists at rootPath\nexport async function checkInstallPath(directory: string): Promise<string> {\n const rootPath = resolve(directory);\n\n if (await fse.pathExists(rootPath)) {\n const stat = await fse.stat(rootPath);\n\n if (!stat.isDirectory()) {\n logger.fatal(\n `${chalk.green(\n rootPath\n )} is not a directory. Make sure to create a Strapi application in an empty directory.`\n );\n }\n\n const files = await fse.readdir(rootPath);\n if (files.length > 1) {\n logger.fatal([\n 'You can only create a Strapi app in an empty directory',\n `Make sure ${chalk.green(rootPath)} is empty.`,\n ]);\n }\n }\n\n return rootPath;\n}\n","import { randomUUID } from 'crypto';\nimport { machineIdSync } from 'node-machine-id';\n\nexport function machineID() {\n try {\n const deviceId = machineIdSync();\n return deviceId;\n } catch (error) {\n const deviceId = randomUUID();\n return deviceId;\n }\n}\n","import inquirer from 'inquirer';\nimport type { Question } from 'inquirer';\n\nimport type { Scope, Options, DBClient, DBConfig } from '../types';\nimport { logger } from './logger';\n\nconst DBOptions = ['dbclient', 'dbhost', 'dbport', 'dbname', 'dbusername', 'dbpassword'];\n\nconst VALID_CLIENTS = ['sqlite', 'mysql', 'postgres'] as const;\n\nconst DEFAULT_CONFIG: DBConfig = {\n client: 'sqlite',\n connection: {\n filename: '.tmp/data.db',\n },\n};\n\nasync function dbPrompt() {\n const { useDefault } = await inquirer.prompt<{ useDefault: boolean }>([\n {\n type: 'confirm',\n name: 'useDefault',\n message: 'Do you want to use the default database (sqlite) ?',\n default: true,\n },\n ]);\n\n if (useDefault) {\n return DEFAULT_CONFIG;\n }\n\n const { client } = await inquirer.prompt<{ client: DBClient }>([\n {\n type: 'list',\n name: 'client',\n message: 'Choose your default database client',\n choices: ['sqlite', 'postgres', 'mysql'],\n default: 'sqlite',\n },\n ]);\n\n const questions = dbQuestions[client].map((q) => q({ client }));\n\n const responses = await inquirer.prompt(questions);\n\n return {\n client,\n connection: responses,\n };\n}\n\nexport async function getDatabaseInfos(options: Options): Promise<DBConfig> {\n if (options.skipDb) {\n return DEFAULT_CONFIG;\n }\n\n if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {\n logger.fatal(\n `Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`\n );\n }\n\n const matchingArgs = DBOptions.filter((key) => key in options);\n const missingArgs = DBOptions.filter((key) => !(key in options));\n\n if (\n matchingArgs.length > 0 &&\n matchingArgs.length !== DBOptions.length &&\n options.dbclient !== 'sqlite'\n ) {\n logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);\n }\n\n const hasDBOptions = DBOptions.some((key) => key in options);\n\n if (!hasDBOptions) {\n if (options.quickstart) {\n return DEFAULT_CONFIG;\n }\n\n return dbPrompt();\n }\n\n if (!options.dbclient) {\n return logger.fatal('Please specify the database client');\n }\n\n const database: DBConfig = {\n client: options.dbclient,\n connection: {\n host: options.dbhost,\n port: options.dbport,\n database: options.dbname,\n username: options.dbusername,\n password: options.dbpassword,\n filename: options.dbfile,\n },\n };\n\n if (options.dbssl !== undefined) {\n database.connection.ssl = options.dbssl === 'true';\n }\n\n return database;\n}\n\nconst sqlClientModule = {\n mysql: { mysql2: '3.9.4' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '9.4.3' },\n};\n\nexport function addDatabaseDependencies(scope: Scope) {\n scope.dependencies = {\n ...scope.dependencies,\n ...sqlClientModule[scope.database.client],\n };\n}\n\ninterface QuestionFactory {\n (options: { client: DBClient }): Question;\n}\n\nconst DEFAULT_PORTS = {\n postgres: 5432,\n mysql: 3306,\n sqlite: undefined,\n};\n\nconst database: QuestionFactory = () => ({\n type: 'input',\n name: 'database',\n message: 'Database name:',\n default: 'strapi',\n validate(value: string) {\n if (value.includes('.')) {\n return `The database name can't contain a \".\"`;\n }\n\n return true;\n },\n});\n\nconst host: QuestionFactory = () => ({\n type: 'input',\n name: 'host',\n message: 'Host:',\n default: '127.0.0.1',\n});\n\nconst port: QuestionFactory = ({ client }) => ({\n type: 'input',\n name: 'port',\n message: 'Port:',\n default: DEFAULT_PORTS[client],\n});\n\nconst username: QuestionFactory = () => ({\n type: 'input',\n name: 'username',\n message: 'Username:',\n});\n\nconst password: QuestionFactory = () => ({\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n});\n\nconst ssl: QuestionFactory = () => ({\n type: 'confirm',\n name: 'ssl',\n message: 'Enable SSL connection:',\n default: false,\n});\n\nconst filename: QuestionFactory = () => ({\n type: 'input',\n name: 'filename',\n message: 'Filename:',\n default: '.tmp/data.db',\n});\n\nconst dbQuestions = {\n sqlite: [filename],\n postgres: [database, host, port, username, password, ssl],\n mysql: [database, host, port, username, password, ssl],\n};\n","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 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.useExampleApp = false;\n } else if (options.example === true || options.quickstart) {\n scope.useExampleApp = true;\n } else if (options.example === false) {\n scope.useExampleApp = false;\n } else {\n scope.useExampleApp = 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":["directory","inquirer","gitInit","installDependencies","chalk","_","logger","cloudServices","cloudCli","e","retry","url","fse","path","pipeline","Readable","tar","execa","os","join","kebabCase","merge","crypto","semver","resolve","machineIdSync","randomUUID","database","commander","prompts.directory","basename","prompts.example","prompts.typescript","prompts.installDependencies","prompts.gitInit"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,eAAe,YAAY;AACzB,QAAM,EAAE,WAAAA,WAAc,IAAA,MAAMC,kBAAAA,QAAS,OAElC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEMD,SAAAA;AACT;AAEA,eAAe,aAAa;AAC1B,QAAM,EAAE,cAAA,IAAkB,MAAMC,kBAAAA,QAAS,OAEtC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAEA,eAAe,UAAU;AACvB,QAAM,EAAE,cAAA,IAAkB,MAAMA,kBAAAA,QAAS,OAEtC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAEA,eAAe,UAAU;AACvB,QAAM,EAAE,SAAAC,SAAY,IAAA,MAAMD,kBAAAA,QAAS,OAEhC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEMC,SAAAA;AACT;AAEA,eAAe,oBAAoB,gBAAwB;AACzD,QAAM,EAAE,qBAAAC,qBAAwB,IAAA,MAAMF,kBAAAA,QAAS,OAE5C;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,6BAA6B,cAAc;AAAA,MACpD,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEME,SAAAA;AACT;ACvEA,MAAM,kBAAkB;AAAA,EACtB,eAAeC,eAAM,QAAA;AAAA,EACrB,YAAYA,eAAM,QAAA;AAAA,EAClB,cAAcA,eAAM,QAAA;AAAA,EACpB,OAAOA,eAAM,QAAA;AAAA,EACb,KAAKA,eAAM,QAAA;AAAA,EACX,MAAMA,eAAM,QAAA;AAAA,EACZ,QAAQA,eAAM,QAAA;AAChB;AAEA,SAAwB,aAAa,UAAkB;AACrD,MAAI,SAAS;AAEb,aAAW,CAAC,OAAO,aAAa,KAAK,OAAO,QAAQ,eAAe,GAAG;AAC9D,UAAA,QAAQ,IAAI,OAAO,IAAI,KAAK,WAAW,KAAK,KAAK,GAAG;AACjD,aAAA,OAAO,QAAQ,OAAO,CAACC,IAAG,OAAO,cAAc,GAAG,KAAK,CAAC,CAAC;AAAA,EACpE;AAEO,SAAA;AACT;ACZA,SAAS,iBAAiB,GAAqC;AACxD,MAAA,EAAiB,aAAa,QAAW;AAC5C,UAAM,MAAM,qBAAqB;AAAA,EACnC;AACF;AAEA,eAAsB,mBAAkC;AAChD,QAAAC,UAASC,kBAAc,aAAa;AAAA,IACxC,QAAQ;AAAA,IACR,OAAO,QAAQ,KAAK,SAAS,SAAS;AAAA,IACtC,WAAW;AAAA,EAAA,CACZ;AACD,QAAM,kBAAkB,MAAMA,SAAA,SAAc,gBAAgB,EAAE,QAAAD,QAAQ,CAAA;AACtE,QAAM,sBACJ;AAEE,MAAA;AACF,UAAM,EAAE,MAAM,OAAA,IAAW,MAAM,gBAAgB,OAAO;AACtD,IAAAA,QAAO,IAAI,aAAa,OAAO,gBAAgB,SAAS,CAAC;AAAA,WAClD,GAAY;AACnB,IAAAA,QAAO,MAAM,CAAC;AACd,IAAAA,QAAO,MAAM,mBAAmB;AAChC;AAAA,EACF;AAEA,QAAM,EAAE,WAAA,IAAe,MAAML,kBAAAA,QAAS,OAA+B;AAAA,IACnE;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,iBAAiB,MAAM;AAAA,IACnC;AAAA,EAAA,CACD;AAED,MAAI,eAAe,QAAQ;AACzB,UAAM,aAAa;AAAA,MACjB,QAAAK;AAAA,MACA,KAAK,QAAQ,IAAI;AAAA,IAAA;AAGf,QAAA;AACI,YAAAE,aAAS,MAAM,OAAO,UAAU;AAAA,aAC/B,GAAiC;AACxC,MAAAF,QAAO,MAAM,CAAC;AACV,UAAA;AACF,yBAAiB,CAAC;AACd,YAAA,EAAE,SAAS,WAAW,KAAK;AACvB,gBAAA,UACJ,OAAO,EAAE,SAAS,SAAS,WACvB,EAAE,SAAS,OACX;AACN,UAAAA,QAAO,KAAK,OAAO;AACnB;AAAA,QACF;AAAA,eACOG,IAAG;AAAA,MAEZ;AACA,MAAAH,QAAO,MAAM,mBAAmB;AAAA,IAClC;AAAA,EACF;AACF;AC7DA,MAAM,qBAAqB,CAAC,QAAgB;AACnC,SAAA,IAAI,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAChD;AAGsB,eAAA,aAAa,OAAc,UAAkB;AAC3D,QAAA,EAAE,SAAa,IAAA;AAErB,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,MAAI,MAAM,mBAAmB,UAAU,MAAM,cAAc,GAAG;AACtD,UAAAI,eAAA;AAAA,MACJ,MACE,mBAAmB,UAAU;AAAA,QAC3B,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ,MAAM;AAAA,QACd,SAAS,aAAa,QAAQ;AAAA,MAAA,CAC/B;AAAA,MACH;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,KAAK,SAAS;AACpB,kBAAQ,IAAI,8CAA8C,OAAO,YAAY,GAAG,EAAE;AAAA,QACpF;AAAA,MACF;AAAA,IAAA;AAGF;AAAA,EACF;AAEI,MAAA,gBAAgB,QAAQ,GAAG;AACvB,UAAA,WAAW,SAAS,WAAW,SAAS,IAAIC,aAAAA,QAAI,cAAc,QAAQ,IAAI;AAE1E,UAAAC,qBAAI,KAAK,UAAU,QAAQ;AAAA,EACnC;AAEI,MAAA,kBAAkB,QAAQ,GAAG;AACzB,UAAA,CAAC,OAAO,MAAM,GAAG,YAAY,IAAI,SAAS,MAAM,GAAG;AACzD,UAAM,UAAU,aAAa,SAAS,aAAa,KAAK,GAAG,IAAI,MAAM;AAE/D,UAAAF,eAAA;AAAA,MACJ,MAAM,mBAAmB,UAAU,EAAE,OAAO,MAAM,QAAQ,MAAM,gBAAgB,SAAS;AAAA,MACzF;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,KAAK,SAAS;AACpB,kBAAQ,IAAI,8CAA8C,OAAO,YAAY,GAAG,EAAE;AAAA,QACpF;AAAA,MACF;AAAA,IAAA;AAGF;AAAA,EACF;AAEI,MAAA,aAAa,QAAQ,GAAG;AACpBC,UAAAA,OAAM,IAAI,IAAI,QAAQ;AAE5B,UAAM,CAAC,OAAO,MAAM,GAAG,QAAQ,GAAG,YAAY,IAAI;AAAA,MAChDA,KAAI,SAAS,MAAM,CAAC;AAAA,IAAA,EACpB,MAAM,GAAG;AAEP,QAAA,MAAM,UAAa,MAAM,QAAQ;AACnC,YAAM,IAAI,MAAM,gCAAgC,QAAQ,EAAE;AAAA,IAC5D;AAEA,QAAI,MAAM,gBAAgB;AACxB,YAAM,mBAAmB,UAAU;AAAA,QACjC;AAAA,QACA;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,MAAA,CAChB;AAAA,IACH;AAEM,UAAAD,eAAA;AAAA,MACJ,MACE,mBAAmB,UAAU;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,QAAQ,mBAAmB,MAAM,KAAK,MAAM;AAAA,QAC5C,SAAS,aAAa,SAClB,mBAAmB,aAAa,KAAK,GAAG,CAAC,IACzC,MAAM;AAAA,MAAA,CACX;AAAA,MACH;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,KAAK,SAAS;AACpB,kBAAQ,IAAI,8CAA8C,OAAO,YAAY,GAAG,EAAE;AAAA,QACpF;AAAA,MACF;AAAA,IAAA;AAGF,UAAM,IAAI,MAAM,gCAAgC,QAAQ,EAAE;AAAA,EAC5D;AACF;AASA,eAAe,mBAAmB,UAAkB,EAAE,OAAO,MAAM,QAAQ,WAAqB;AACxF,QAAA,WAAW,UAAU,QAAQ,MAAM,GAAG,EAAE,KAAKG,sBAAK,MAAM,GAAG,IAAI;AAErE,MAAI,kBAAkB,gCAAgC,KAAK,IAAI,IAAI;AACnE,MAAI,UAAU;AACM,sBAAA,GAAG,eAAe,IAAI,QAAQ;AAAA,EAClD;AAEA,MAAI,QAAQ;AACQ,sBAAA,GAAG,eAAe,QAAQ,MAAM;AAAA,EACpD;AAEM,QAAA,WAAW,MAAM,MAAM,iBAAiB;AAAA,IAC5C,QAAQ;AAAA,EAAA,CACT;AAEG,MAAA,SAAS,WAAW,KAAK;AAC3B,UAAM,IAAI;AAAA,MACR,mDAAmD,KAAK,IAAI,IAAI,GAAG,SAAS,cAAc,MAAM,KAAK,EAAE,GAAG,WAAW,YAAY,QAAQ,KAAK,EAAE;AAAA,IAAA;AAAA,EAEpJ;AAEA,MAAIF,OAAM,gCAAgC,KAAK,IAAI,IAAI;AAEvD,MAAI,QAAQ;AACVA,WAAM,GAAGA,IAAG,IAAI,MAAM;AAAA,EACxB;AAEM,QAAA,MAAM,MAAM,MAAMA,IAAG;AAEvB,MAAA,CAAC,IAAI,MAAM;AACb,UAAM,IAAI,MAAM,sBAAsBA,IAAG,EAAE;AAAA,EAC7C;AAEM,QAAAG,SAAA;AAAA;AAAA,IAEJC,qBAAS,QAAQ,IAAI,IAAI;AAAA,IACzBC,eAAI,EAAE;AAAA,MACJ,KAAK;AAAA,MACL,OAAO,WAAW,SAAS,MAAM,GAAG,EAAE,SAAS,IAAI;AAAA,MACnD,OAAOH,OAAM;AACX,YAAI,UAAU;AACLA,iBAAAA,MAAK,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,WAAW,QAAQ;AAAA,QAC/D;AAEO,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;AAEA,SAAS,gBAAgB,UAAkB;AACzC,SACE,SAAS,WAAW,SAAS,KAC7BD,aAAAA,QAAI,WAAWC,cAAAA,QAAK,WAAW,QAAQ,IAAI,WAAWA,cAAAA,QAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,CAAC;AAE/F;AAEA,SAAS,kBAAkB,OAAe;AACpC,MAAA,WAAW,KAAK,GAAG;AACd,WAAA;AAAA,EACT;AAEO,SAAA,gCAAgC,KAAK,KAAK;AACnD;AAEA,SAAS,aAAa,OAAe;AAC/B,MAAA;AACIF,UAAAA,OAAM,IAAI,IAAI,KAAK;AAEzB,WAAOA,KAAI,WAAW;AAAA,EAAA,QAChB;AACC,WAAA;AAAA,EACT;AACF;AAEA,SAAS,WAAW,OAAe;AAC7B,MAAA;AAEF,QAAI,IAAI,KAAK;AACN,WAAA;AAAA,EAAA,QACD;AACC,WAAA;AAAA,EACT;AACF;AAEA,eAAe,mBAAmB,UAAkB,QAA4B;AAC1E,MAAA,WAAW,QAAQ,GAAG;AACjB,WAAA;AAAA,EACT;AAEA,QAAM,MAAM,MAAM;AAAA,IAChB,iEAAiE,QAAQ,IAAI,SAAS,OAAO,MAAM,KAAK,EAAE;AAAA,IAC1G,EAAE,QAAQ,OAAO;AAAA,EAAA;AAGnB,SAAO,IAAI,WAAW;AACxB;ACjNA,eAAe,kBAAkB,SAAiB;AAC5C,MAAA;AACI,UAAAM,uBAAM,OAAO,CAAC,aAAa,uBAAuB,GAAG,EAAE,OAAO,UAAU,KAAK,QAAS,CAAA;AACrF,WAAA;AAAA,WACAZ,IAAG;AACH,WAAA;AAAA,EACT;AACF;AAEA,eAAe,wBAAwB,SAAiB;AAClD,MAAA;AACF,UAAMY,uBAAM,MAAM,CAAC,QAAQ,KAAK,MAAM,GAAG,EAAE,OAAO,UAAU,KAAK,QAAS,CAAA;AACnE,WAAA;AAAA,WACAZ,IAAG;AACH,WAAA;AAAA,EACT;AACF;AAEA,eAAsB,WAAW,SAAiB;AAC5C,MAAA;AACI,UAAAY,eAAAA,QAAM,OAAO,CAAC,WAAW,GAAG,EAAE,OAAO,UAAU;AACrD,QAAK,MAAM,kBAAkB,OAAO,KAAO,MAAM,wBAAwB,OAAO,GAAI;AAC3E,aAAA;AAAA,IACT;AAEM,UAAAA,eAAA,QAAM,OAAO,CAAC,MAAM,GAAG,EAAE,OAAO,UAAU,KAAK,QAAA,CAAS;AAExD,UAAAA,uBAAM,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,UAAU,KAAK,QAAS,CAAA;AAClE,UAAMA,eAAAA,QAAM,OAAO,CAAC,UAAU,MAAM,4BAA4B,GAAG;AAAA,MACjE,OAAO;AAAA,MACP,KAAK;AAAA,IAAA,CACN;AAEM,WAAA;AAAA,WACA,GAAG;AACF,YAAA,MAAM,yCAAyC,CAAC;AACjD,WAAA;AAAA,EACT;AACF;AChCA,SAAS,6BAA6B,UAAmC,OAAc;AACrF,QAAM,EAAE,oBAAoB,GAAO,IAAA;AAE5B,SAAAZ,mBAAE,SAAS,UAAU,iBAAiB;AAC/C;AAEA,MAAM,gBAAgB,CAAC,OAAc,UAAuB;AAC1D,QAAM,kBAAkB;AAAA,IACtB,OAAO,OAAO,UAAU,WAAW,QAAQ,SAAS,MAAM;AAAA,EAAA;AAG5D,QAAM,iBAAiB;AAAA,IACrB,IAAIa,oBAAG,KAAK;AAAA,IACZ,YAAYA,oBAAG,SAAS;AAAA,IACxB,QAAQA,oBAAG,KAAK;AAAA,IAChB,WAAWA,oBAAG,QAAQ;AAAA,IACtB,aAAa,QAAQ,SAAS;AAAA,EAAA;AAGhC,QAAM,kBAAkB;AAAA,IACtB,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,SAAS,MAAM,mBAAmB;AAAA,IAClC,gBAAgB,MAAM;AAAA,IACtB,uBAAuB,MAAM;AAAA,IAC7B,sBAAsB,MAAM;AAAA,IAC5B,uBAAuB,QAAQ,IAAI,mBAAmB;AAAA,IACtD,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,IACxC,WAAW,MAAM;AAAA,EAAA;AAGZ,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,6BAA6B,iBAAiB,KAAK;AAAA,EAAA;AAExE;AAEA,SAAS,WAAW,OAAe,SAAkC;AAC/D,MAAA,QAAQ,IAAI,aAAa,QAAQ;AACnC;AAAA,EACF;AAEI,MAAA;AACF,WAAO,MAAM,4CAA4C;AAAA,MACvD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,GAAG;AAAA,MAAA,CACJ;AAAA,MACD,QAAQ,YAAY,QAAQ,GAAI;AAAA,MAChC,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,MACpB;AAAA,IAAA,CACD,EAAE,MAAM,MAAM;AAAA,IAAA,CAAE;AAAA,WACV,KAAK;AAEZ,WAAO,QAAQ;EACjB;AACF;AAEA,eAAsB,WAAW,EAAE,OAAO,SAA+C;AACjF,QAAA,aAAa,cAAc,OAAO,KAAK;AAEzC,MAAA;AACK,WAAA,MAAM,WAAW,uBAAuB;AAAA,MAC7C,UAAU,MAAM;AAAA,MAChB,GAAG;AAAA,IAAA,CACJ;AAAA,WACM,KAAK;AAEZ,WAAO,QAAQ;EACjB;AACF;AAEA,eAAsB,WAAW;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACK,QAAA,aAAa,cAAc,OAAO,KAAK;AAEzC,MAAA;AACK,WAAA,MAAM,WAAW,OAAO;AAAA,MAC7B,UAAU,MAAM;AAAA,MAChB,GAAG;AAAA,IAAA,CACJ;AAAA,WACM,KAAK;AAEZ,WAAO,QAAQ;EACjB;AACF;ACxGO,MAAM,UAAU;AAAA,EACrB,MAAM;AAAA,EACN,KAAK;AACP;ACIA,eAAsB,kBAAkB,OAAc;AACpD,QAAM,EAAE,gBAAA,IAAoB,MAAM,OAAO,mBAAmB;AAE5D,QAAM,cAAcC,OAAA,KAAK,MAAM,UAAU,cAAc;AAEjD,QAAA,cAAc,MAAMP,aAAAA,QAAI,SAAS,WAAW,EAAE,MAAM,OAAO,CAAG,EAAA;AAEpE,QAAM,MAAM;AAAA,IACV,MAAMQ,EAAAA,UAAU,MAAM,IAAI;AAAA,IAC1B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB,MAAM,mBAAmB,CAAC;AAAA,IAC3C,cAAc,MAAM,gBAAgB,CAAC;AAAA,IACrC,QAAQ;AAAA,MACN,GAAI,MAAM,qBAAqB,CAAC;AAAA,MAChC,MAAM,MAAM;AAAA,IACd;AAAA,IACA;AAAA,EAAA;AAII,QAAAR,aAAA,QAAI,UAAU,aAAa,gBAAgBS,EAAAA,MAAM,aAAa,GAAG,CAAC,GAAG;AAAA,IACzE,QAAQ;AAAA,EAAA,CACT;AACH;AC3BA,MAAM,kBAAkB,MAAMC,gBAAAA,QAAO,YAAY,EAAE,EAAE,SAAS,QAAQ;AAEtE,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBT,SAAS,eAAe,OAAc;AACrC,QAAA,UAAUjB,WAAAA,QAAE,SAAS,OAAO;AAElC,SAAO,QAAQ;AAAA,IACb,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,eAAe,EAAE,KAAK,GAAG;AAAA,IAC9D,cAAc,gBAAgB;AAAA,IAC9B,mBAAmB,gBAAgB;AAAA,IACnC,eAAe,gBAAgB;AAAA,IAC/B,UAAU;AAAA,MACR,QAAQ,MAAM,SAAS;AAAA,MACvB,YAAY;AAAA,QACV,GAAG,MAAM,SAAS;AAAA,QAClB,KAAK,MAAM,SAAS,YAAY,OAAO;AAAA,MACzC;AAAA,IACF;AAAA,EAAA,CACD;AACH;ACyCO,SAAS,cAAc,OAAsC;AAEhE,SAAA,OAAO,UAAU,YACjB,UAAU,QACV,YAAY,SACZ,OAAO,MAAM,WAAW;AAE5B;AC1FA,MAAM,oBAAoB;AAE1B,MAAM,QAAQ,CAAC,MAAc,SAAwB,YAA2BD,eAAAA,QAAM,UAAU;AACxF,QAAA,cAAc,IAAI,IAAI;AAErB,SAAA,IAAI,OAAO,oBAAoB,YAAY,MAAM,IAAI,QAAQ,UAAU,WAAW,CAAC;AAC5F;AAEA,MAAM,aAAa,CACjB,MACA,cAAc,MACd,SAAiB,oBAAoB,MAClC;AACH,QAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAEhD,SAAO,MACJ,IAAI,CAAC,MAAM,MAAM;AACZ,QAAA,MAAM,KAAK,CAAC,aAAa;AACpB,aAAA;AAAA,IACT;AAEO,WAAA,IAAI,OAAO,MAAM,IAAI;AAAA,EAAA,CAC7B,EACA,KAAK,IAAI;AACd;AAEO,MAAM,SAAS;AAAA,EACpB,IAAI,SAAkC;AAC5B,YAAA,IAAI,WAAW,OAAO,CAAC;AAAA,EACjC;AAAA,EACA,MAAM,OAAe,SAAuB;AAC1C,UAAM,SAAS,MAAM,OAAOA,eAAA,QAAM,YAAY;AAC9C,YAAQ,IAAI;AAAA,EAAK,MAAM,KAAK,OAAO,EAAE;AAAA,EACvC;AAAA,EACA,KAAK,SAAuB;AAC1B,YAAQ,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,GAAGA,eAAAA,QAAM,KAAK,GAAG,CAAC,KAAK,OAAO,EAAE;AAAA,EAC9D;AAAA,EACA,QAAQ,SAAuB;AAC7B,YAAQ,IAAI;AAAA,EAAK,IAAI,OAAO,CAAC,CAAC,GAAGA,eAAAA,QAAM,MAAM,GAAG,CAAC,KAAKA,eAAAA,QAAM,MAAM,OAAO,CAAC,EAAE;AAAA,EAC9E;AAAA,EACA,MAAM,SAAoC;AACxC,UAAM,SAAS,MAAM,SAASA,eAAA,QAAM,KAAK;AAEzC,QAAI,SAAS;AACX,cAAQ,MAAM;AAAA,EAAK,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,CAAI;AAAA,IAC9D;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,MAAM,SAAkC;AACtC,UAAM,SAAS,MAAM,SAASA,eAAA,QAAM,KAAK;AACzC,YAAQ,MAAM;AAAA,EAAK,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,CAAI;AAAA,EAC9D;AAAA,EACA,KAAK,SAAkC;AACrC,UAAM,SAAS,MAAM,QAAQA,eAAA,QAAM,QAAQ;AAC3C,YAAQ,KAAK;AAAA,EAAK,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,CAAI;AAAA,EAC7D;AACF;AC5CA,eAAe,aAAa,OAAc;AAClC,QAAA,EAAE,SAAa,IAAA;AACjB,MAAA;AACI,UAAAQ,aAAA,QAAI,UAAU,QAAQ;AAC5B,UAAM,UAAU,KAAK;AAAA,WACd,OAAO;AACR,UAAAA,aAAA,QAAI,OAAO,QAAQ;AAEnB,UAAA;AAAA,EACR;AACF;AAEA,eAAe,UAAU,OAAc;AAC/B,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,qBAAAT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAAD;AAAA,IACA;AAAA,EACE,IAAA;AAEJ,QAAM,WAAW,EAAE,OAAO,qBAAqB,MAAO,CAAA;AAEtD,SAAO,MAAM,UAAU,iCAAiCE,uBAAM,MAAM,QAAQ,CAAC,EAAE;AAE/E,MAAI,CAAC,cAAc;AACjB,UAAM,WAAW,EAAE,OAAO,2BAA2B,MAAO,CAAA;AAAA,EAAA,OACvD;AACL,UAAM,WAAW,EAAE,OAAO,uBAAuB,MAAO,CAAA;AAAA,EAC1D;AAEA,MAAI,CAAC,UAAU;AACT,QAAA,eAAe,gBAAgB,YAAY;AAE/C,QAAI,CAAC,eAAe;AAClB,qBAAe,GAAG,YAAY;AAAA,IAChC;AAEA,UAAM,uBAAuBe,KAAA,KAAK,WAAW,gBAAgB,YAAY;AACzE,QAAI,MAAMP,aAAA,QAAI,OAAO,oBAAoB,GAAG;AACpC,YAAAA,qBAAI,KAAK,sBAAsB,QAAQ;AAAA,IAC/C;AAAA,EAAA,OACK;AACD,QAAA;AACK,aAAA,KAAK,GAAGR,uBAAM,KAAK,qBAAqB,CAAC,IAAI,QAAQ,EAAE;AAExD,YAAA,aAAa,OAAO,QAAQ;AAElC,aAAO,QAAQ,+BAA+B;AAAA,aACvC,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,eAAO,MAAM,iCAAiC,MAAM,OAAO,EAAE;AAAA,MAC/D;AAEM,YAAA;AAAA,IACR;AAEA,QAAI,CAACQ,aAAI,QAAA,WAAWO,UAAK,UAAU,cAAc,CAAC,GAAG;AACnD,aAAO,MAAM,WAAWf,eAAAA,QAAM,KAAK,cAAc,CAAC,cAAc;AAAA,IAClE;AAAA,EACF;AAEA,QAAM,WAAW,EAAE,OAAO,uBAAuB,MAAO,CAAA;AAEpD,MAAA;AACF,UAAM,kBAAkB,KAAK;AAE7B,UAAM,WAAW,EAAE,OAAO,uBAAuB,MAAO,CAAA;AAGxD,UAAMQ,aAAAA,QAAI,UAAUO,KAAAA,KAAK,UAAU,cAAc,CAAC;AAG5C,UAAAP,aAAA,QAAI,UAAUO,UAAK,UAAU,MAAM,GAAG,eAAe,KAAK,CAAC;AAEjE,UAAM,WAAW,EAAE,OAAO,6BAA6B,MAAO,CAAA;AAAA,WACvD,KAAK;AACN,UAAAP,aAAA,QAAI,OAAO,QAAQ;AACnB,UAAA;AAAA,EACR;AAEA,MAAIT,sBAAqB;AACnB,QAAA;AACF,aAAO,MAAM,QAAQ,gCAAgCC,uBAAM,KAAK,cAAc,CAAC,EAAE;AAEjF,YAAM,WAAW,EAAE,OAAO,kCAAkC,MAAO,CAAA;AAEnE,YAAM,WAAW,KAAK;AAEtB,YAAM,WAAW,EAAE,OAAO,iCAAiC,MAAO,CAAA;AAElE,aAAO,QAAQ,wBAAwB;AAAA,aAChC,OAAO;AACd,YAAM,SAAS,cAAc,KAAK,IAAI,MAAM,SAAS;AAErD,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP;AAAA,QACA,OAAO,OAAO,MAAM,KAAK;AAAA,MAAA,CAC1B;AAED,aAAO,MAAM;AAAA,QACXA,eAAAA,QAAM;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAMA,eAAAA,QAAM,MAAM,QAAQ,CAAC,OAAOA,eAAAA,QAAM,KAAK,cAAc,CAAC;AAAA,MAAA,CAC7D;AAAA,IACH;AAAA,EACF;AAEA,QAAM,WAAW,EAAE,OAAO,oBAAoB,MAAO,CAAA;AAGrD,MAAIF,UAAS;AACJ,WAAA,MAAM,OAAO,8BAA8B;AAClD,UAAM,WAAW,QAAQ;AACzB,WAAO,QAAQ,+BAA+B;AAAA,EAChD;AAEO,SAAA,MAAM,UAAU,+BAA+B;AAEtD,QAAM,MAAME,eAAAA,QAAM,KAAK,GAAG,cAAc,MAAM;AAE9C,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA;AAAA,EAAA,CACP;AAED,MAAID,sBAAqB;AACvB,WAAO,IAAI,CAAC,oBAAoB,IAAI,GAAGC,eAAM,QAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,GAAG,GAAG,UAAU,CAAC;AAAA,EAAA,OACnF;AACL,WAAO,IAAI;AAAA,MACT;AAAA,MACA;AAAA,MACA,GAAGA,eAAM,QAAA,KAAK,IAAI,CAAC,IAAI,QAAQ;AAAA,MAC/B,GAAGA,eAAAA,QAAM,KAAK,cAAc,CAAC;AAAA,MAC7B,GAAG,GAAG;AAAA,IAAA,CACP;AAAA,EACH;AAEA,MAAI,UAAUD,sBAAqB;AAC1B,WAAA,MAAM,YAAY,iCAAiC;AAEtD,QAAA;AACF,YAAM,WAAW,EAAE,OAAO,mBAAmB,MAAO,CAAA;AAEpD,YAAMc,eAAM,QAAA,OAAO,CAAC,OAAO,SAAS,GAAG;AAAA,QACrC,OAAO;AAAA,QACP,KAAK;AAAA,QACL,KAAK;AAAA,UACH,aAAa;AAAA,QACf;AAAA,MAAA,CACD;AAAA,aACM,OAAO;AACd,UAAI,OAAO,UAAU,YAAY,iBAAiB,OAAO;AACvD,cAAM,WAAW;AAAA,UACf,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAEA,aAAO,MAAM,yCAAyC;AAAA,IACxD;AAAA,EACF;AACF;AAEA,MAAM,mBAAmB,CAAC,SAAS;AAEnC,MAAM,sBAAsB;AAAA,EAC1B,KAAK,CAAC,oBAAoB;AAAA,EAC1B,MAAM,CAAC,2BAA2B;AAAA,EAClC,MAAM,CAAC;AACT;AAEA,SAAS,WAAW,EAAE,UAAU,kBAAyB;AACvD,QAAM,UAAyB;AAAA,IAC7B,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,EAAA;AAGF,MAAI,kBAAkB,qBAAqB;AACzC,qBAAiB,KAAK,GAAI,oBAAoB,cAAc,KAAK,CAAG,CAAA;AAAA,EACtE;AAEA,QAAM,OAAOA,eAAA,QAAM,gBAAgB,kBAAkB,OAAO;AAErD,SAAA;AACT;ACjOO,SAAS,wBAAwB;AAChC,QAAA,qBAAqB,QAAQ,SAAS;AAG5C,MAAI,CAACM,gBAAO,QAAA,UAAU,oBAAoB,QAAQ,IAAI,GAAG;AACvD,WAAO,MAAM;AAAA,MACXnB,eAAAA,QAAM,IAAI,mBAAmBA,uBAAM,KAAK,WAAW,kBAAkB,EAAE,CAAC,EAAE;AAAA,MAC1E,mBAAmBA,eAAAA,QAAM,KAAKA,eAAM,QAAA,MAAM,WAAW,QAAQ,IAAI,EAAE,CAAC,CAAC;AAAA,MACrE;AAAA,IAAA,CACD;AAAA,EAAA,WAIMmB,gBAAO,QAAA,MAAM,kBAAkB,IAAI,MAAM,GAAG;AACnD,WAAO,KAAK;AAAA,MACVnB,eAAAA,QAAM,OAAO,mBAAmBA,uBAAM,KAAK,WAAW,kBAAkB,EAAE,CAAC,EAAE;AAAA,MAC7E,wBAAwBA,eAAM,QAAA,KAAKA,eAAAA,QAAM,MAAM,yBAAyB,CAAC,CAAC;AAAA,IAAA,CAC3E;AAAA,EACH;AACF;ACnBA,eAAsB,iBAAiBJ,YAAoC;AACnE,QAAA,WAAWwB,aAAQxB,UAAS;AAElC,MAAI,MAAMY,aAAA,QAAI,WAAW,QAAQ,GAAG;AAClC,UAAM,OAAO,MAAMA,aAAAA,QAAI,KAAK,QAAQ;AAEhC,QAAA,CAAC,KAAK,eAAe;AAChB,aAAA;AAAA,QACL,GAAGR,eAAM,QAAA;AAAA,UACP;AAAA,QACD,CAAA;AAAA,MAAA;AAAA,IAEL;AAEA,UAAM,QAAQ,MAAMQ,aAAAA,QAAI,QAAQ,QAAQ;AACpC,QAAA,MAAM,SAAS,GAAG;AACpB,aAAO,MAAM;AAAA,QACX;AAAA,QACA,aAAaR,eAAA,QAAM,MAAM,QAAQ,CAAC;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EACF;AAEO,SAAA;AACT;AC3BO,SAAS,YAAY;AACtB,MAAA;AACF,UAAM,WAAWqB,cAAAA;AACV,WAAA;AAAA,WACA,OAAO;AACd,UAAM,WAAWC,OAAAA;AACV,WAAA;AAAA,EACT;AACF;ACLA,MAAM,YAAY,CAAC,YAAY,UAAU,UAAU,UAAU,cAAc,YAAY;AAEvF,MAAM,gBAAgB,CAAC,UAAU,SAAS,UAAU;AAEpD,MAAM,iBAA2B;AAAA,EAC/B,QAAQ;AAAA,EACR,YAAY;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAEA,eAAe,WAAW;AACxB,QAAM,EAAE,WAAA,IAAe,MAAMzB,kBAAAA,QAAS,OAAgC;AAAA,IACpE;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAED,MAAI,YAAY;AACP,WAAA;AAAA,EACT;AAEA,QAAM,EAAE,OAAA,IAAW,MAAMA,kBAAAA,QAAS,OAA6B;AAAA,IAC7D;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,UAAU,YAAY,OAAO;AAAA,MACvC,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEK,QAAA,YAAY,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAQ,CAAA,CAAC;AAE9D,QAAM,YAAY,MAAMA,kBAAAA,QAAS,OAAO,SAAS;AAE1C,SAAA;AAAA,IACL;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;AAEA,eAAsB,iBAAiB,SAAqC;AAC1E,MAAI,QAAQ,QAAQ;AACX,WAAA;AAAA,EACT;AAEA,MAAI,QAAQ,YAAY,CAAC,cAAc,SAAS,QAAQ,QAAQ,GAAG;AAC1D,WAAA;AAAA,MACL,uBAAuB,QAAQ,QAAQ,qBAAqB,cAAc,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAExF;AAEA,QAAM,eAAe,UAAU,OAAO,CAAC,QAAQ,OAAO,OAAO;AAC7D,QAAM,cAAc,UAAU,OAAO,CAAC,QAAQ,EAAE,OAAO,QAAQ;AAG7D,MAAA,aAAa,SAAS,KACtB,aAAa,WAAW,UAAU,UAClC,QAAQ,aAAa,UACrB;AACA,WAAO,MAAM,4CAA4C,YAAY,KAAK,IAAI,CAAC,GAAG;AAAA,EACpF;AAEA,QAAM,eAAe,UAAU,KAAK,CAAC,QAAQ,OAAO,OAAO;AAE3D,MAAI,CAAC,cAAc;AACjB,QAAI,QAAQ,YAAY;AACf,aAAA;AAAA,IACT;AAEA,WAAO,SAAS;AAAA,EAClB;AAEI,MAAA,CAAC,QAAQ,UAAU;AACd,WAAA,OAAO,MAAM,oCAAoC;AAAA,EAC1D;AAEA,QAAM0B,YAAqB;AAAA,IACzB,QAAQ,QAAQ;AAAA,IAChB,YAAY;AAAA,MACV,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,IACpB;AAAA,EAAA;AAGE,MAAA,QAAQ,UAAU,QAAW;AAC/BA,cAAS,WAAW,MAAM,QAAQ,UAAU;AAAA,EAC9C;AAEOA,SAAAA;AACT;AAEA,MAAM,kBAAkB;AAAA,EACtB,OAAO,EAAE,QAAQ,QAAQ;AAAA,EACzB,UAAU,EAAE,IAAI,QAAQ;AAAA,EACxB,QAAQ,EAAE,kBAAkB,QAAQ;AACtC;AAEO,SAAS,wBAAwB,OAAc;AACpD,QAAM,eAAe;AAAA,IACnB,GAAG,MAAM;AAAA,IACT,GAAG,gBAAgB,MAAM,SAAS,MAAM;AAAA,EAAA;AAE5C;AAMA,MAAM,gBAAgB;AAAA,EACpB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AACV;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS,OAAe;AAClB,QAAA,MAAM,SAAS,GAAG,GAAG;AAChB,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACT;AACF;AAEA,MAAM,OAAwB,OAAO;AAAA,EACnC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,OAAwB,CAAC,EAAE,cAAc;AAAA,EAC7C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,cAAc,MAAM;AAC/B;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AACX;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AACR;AAEA,MAAM,MAAuB,OAAO;AAAA,EAClC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,cAAc;AAAA,EAClB,QAAQ,CAAC,QAAQ;AAAA,EACjB,UAAU,CAAC,UAAU,MAAM,MAAM,UAAU,UAAU,GAAG;AAAA,EACxD,OAAO,CAAC,UAAU,MAAM,MAAM,UAAU,UAAU,GAAG;AACvD;ACzKA,MAAM,EAAE,YAAYf,aAAAA,QAAI,aAAaO,KAAK,KAAA,WAAW,MAAM,cAAc,CAAC;AAE1E,MAAM,UAAU,IAAIS,mBAAAA,QAAU,QAAQ,mBAAmB,EACtD,QAAQ,OAAO,EACf,UAAU,aAAa,EACvB,MAAM,uBAAuB,EAC7B,OAAO,gBAAgB,sCAAsC,EAC7D,OAAO,YAAY,mDAAmD,EAGtE,OAAO,sBAAsB,kDAAkD,EAC/E,OAAO,sBAAsB,wCAAwC,EAGrE,OAAO,aAAa,wCAAwC,EAC5D,OAAO,cAAc,yCAAyC,EAC9D,OAAO,cAAc,yCAAyC,EAG9D,OAAO,aAAa,sBAAsB,EAC1C,OAAO,gBAAgB,6BAA6B,EAGpD,OAAO,gBAAgB,uCAAuC,EAG9D,OAAO,aAAa,oBAAoB,EACxC,OAAO,gBAAgB,2BAA2B,EAGlD,OAAO,cAAc,6BAA6B,EAClD,OAAO,iBAAiB,mCAAmC,EAG3D,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,6BAA6B,EAEjD,OAAO,yBAAyB,2BAA2B,EAC3D,OAAO,sCAAsC,mCAAmC,EAChF,OAAO,kCAAkC,sDAAsD,EAE/F,YAAY,0BAA0B;AAEzC,eAAe,IAAI,MAA+B;AAChD,QAAM,UAAU,QAAQ,MAAM,IAAI,EAAE,KAAc;AAC5C,QAAA5B,cAAY,QAAQ,KAAK,CAAC;AAEzB,SAAA;AAAA,IACL;AAAA,IACA,GAAGI,eAAAA,QAAM,MAAMA,eAAAA,QAAM,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,IAAIA,eAAM,QAAA,KAAK,kCAAkC,CAAC;AAAA;AAAA,EAAA;AAI1F,OAAA,QAAQ,eAAe,UAAa,QAAQ,eAAe,WAC5D,QAAQ,aAAa,QACrB;AACO,WAAA;AAAA,MACL,kBAAkBA,eAAAA,QAAM,KAAK,cAAc,CAAC,OAAOA,eAAA,QAAM,KAAK,cAAc,CAAC,SAASA,eAAAA,QAAM,KAAK,YAAY,CAAC;AAAA,IAAA;AAAA,EAElH;AAEA,MAAI,QAAQ,eAAe,QAAQ,QAAQ,eAAe,MAAM;AACvD,WAAA;AAAA,MACL,uBAAuBA,eAAAA,QAAM,KAAK,cAAc,CAAC,eAAeA,eAAAA,QAAM,KAAK,cAAc,CAAC;AAAA,IAAA;AAAA,EAE9F;AAGA,MAAI,QAAQ,YAAY,QAAQ,QAAQ,aAAa,QAAW;AACvD,WAAA,MAAM,kBAAkBA,eAAAA,QAAM,KAAK,WAAW,CAAC,SAASA,eAAAA,QAAM,KAAK,YAAY,CAAC,EAAE;AAAA,EAC3F;AAEA,MAAI,QAAQ,aAAa,UAAa,QAAQ,SAAS,WAAW,GAAG,GAAG;AAC/D,WAAA,MAAM,iBAAiBA,eAAAA,QAAM,KAAK,IAAI,QAAQ,QAAQ,GAAG,CAAC,aAAa;AAAA,EAChF;AAEA,MAAI,CAAC,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS,GAAG;AAC1E,WAAA;AAAA,MACL,iEAAiEA,eAAA,QAAM,KAAK,qCAAqC,CAAC;AAAA,IAAA;AAAA,EAEtH;AAEI,MAAA,QAAQ,cAAc,CAACJ,aAAW;AAC7B,WAAA;AAAA,MACL,sBAAsBI,uBAAM,KAAK,aAAa,CAAC,+BAA+BA,uBAAM,KAAK,cAAc,CAAC;AAAA,IAAA;AAAA,EAE5G;AAEsB;AAEtB,QAAM,eAAeJ,eAAc,MAAM6B;AAEnC,QAAA,WAAW,MAAM,iBAAiB,YAAY;AAEhD,MAAA,CAAC,QAAQ,WAAW;AACtB,UAAM,iBAAiB;AAAA,EACzB;AAEA,QAAM,UAAUV,KAAA,KAAKD,cAAG,QAAA,OAAA,GAAU,SAASI,gBAAO,QAAA,YAAY,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE;AAElF,QAAM,QAAe;AAAA,IACnB;AAAA,IACA,MAAMQ,cAAS,QAAQ;AAAA,IACvB,gBAAgB,cAAc,OAAO;AAAA,IACrC,UAAU,MAAM,iBAAiB,OAAO;AAAA,IACxC,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,cAAc,QAAQ;AAAA,IACtB,cAAc,QAAQ;AAAA,IACtB,QAAQ,QAAQ,eAAe,QAAQ,QAAQ,QAAQ;AAAA,IACvD,eAAe;AAAA,IACf,mBAAmB;AAAA,MACjB,UAAU,QAAQ;AAAA,IACpB;AAAA,IACA,OAAO,QAAQ,IAAI,sBAAsB,MAAMR,wBAAO,WAAW;AAAA,IACjE,QAAQ,QAAQ,IAAI,WAAW;AAAA,IAC/B,UAAU,UAAU;AAAA,IACpB;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB,CAAC;AAAA,IAClB,cAAc;AAAA,MACZ,kBAAkB;AAAA,MAClB,oCAAoC;AAAA,MACpC,wBAAwB;AAAA;AAAA,MAExB,OAAO;AAAA,MACP,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,EAAA;AAGE,MAAA,QAAQ,aAAa,QAAW;AAClC,UAAM,gBAAgB;AAAA,EACb,WAAA,QAAQ,YAAY,QAAQ,QAAQ,YAAY;AACzD,UAAM,gBAAgB;AAAA,EAAA,WACb,QAAQ,YAAY,OAAO;AACpC,UAAM,gBAAgB;AAAA,EAAA,OACjB;AACC,UAAA,gBAAgB,MAAMS;EAC9B;AAEI,MAAA,QAAQ,eAAe,MAAM;AAC/B,UAAM,gBAAgB;AAAA,EACb,WAAA,QAAQ,eAAe,QAAQ,QAAQ,YAAY;AAC5D,UAAM,gBAAgB;AAAA,EAAA,WACb,CAAC,QAAQ,UAAU;AACtB,UAAA,gBAAgB,MAAMC;EAC9B;AAEA,MAAI,QAAQ,YAAY,QAAQ,QAAQ,YAAY;AAClD,UAAM,sBAAsB;AAAA,EAAA,WACnB,QAAQ,YAAY,OAAO;AACpC,UAAM,sBAAsB;AAAA,EAAA,OACvB;AACL,UAAM,sBAAsB,MAAMC,oBAA4B,MAAM,cAAc;AAAA,EACpF;AAEA,MAAI,MAAM,eAAe;AACvB,UAAM,kBAAkB;AAAA,MACtB,GAAG,MAAM;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,IAAA;AAAA,EAExB;AAEA,MAAI,QAAQ,YAAY,QAAQ,QAAQ,YAAY;AAClD,UAAM,UAAU;AAAA,EAAA,WACP,QAAQ,YAAY,OAAO;AACpC,UAAM,UAAU;AAAA,EAAA,OACX;AACC,UAAA,UAAU,MAAMC;EACxB;AAEA,0BAAwB,KAAK;AAEzB,MAAA;AACF,UAAM,aAAa,KAAK;AAAA,WACjB,OAAgB;AACnB,QAAA,EAAE,iBAAiB,QAAQ;AACvB,YAAA;AAAA,IACR;AAEA,UAAM,WAAW,EAAE,OAAO,MAAO,CAAA;AAE1B,WAAA,MAAM,MAAM,OAAO;AAAA,EAC5B;AACF;AAEA,SAAS,cAAc,SAAkB;AACnC,MAAA,QAAQ,WAAW,MAAM;AACpB,WAAA;AAAA,EACT;AAEI,MAAA,QAAQ,YAAY,MAAM;AACrB,WAAA;AAAA,EACT;AAEI,MAAA,QAAQ,YAAY,MAAM;AACrB,WAAA;AAAA,EACT;AAEM,QAAA,YAAY,QAAQ,IAAI,yBAAyB;AAEnD,MAAA,UAAU,WAAW,MAAM,GAAG;AACzB,WAAA;AAAA,EACT;AAEI,MAAA,UAAU,WAAW,MAAM,GAAG;AACzB,WAAA;AAAA,EACT;AAEO,SAAA;AACT;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/prompts.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/utils/template.ts","../src/utils/git.ts","../src/utils/usage.ts","../src/utils/engines.ts","../src/utils/package-json.ts","../src/utils/dot-env.ts","../src/types.ts","../src/utils/logger.ts","../src/create-strapi.ts","../src/utils/check-requirements.ts","../src/utils/check-install-path.ts","../src/utils/machine-id.ts","../src/utils/database.ts","../src/index.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nasync function directory() {\n const { directory } = await inquirer.prompt<{\n directory: string;\n }>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What is the name of your project?',\n },\n ]);\n\n return directory;\n}\n\nasync function typescript() {\n const { useTypescript } = await inquirer.prompt<{\n useTypescript: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useTypescript',\n message: 'Start with Typescript?',\n default: true,\n },\n ]);\n\n return useTypescript;\n}\n\nasync function example() {\n const { useExampleApp } = await inquirer.prompt<{\n useExampleApp: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useExampleApp',\n message: 'Start with an example structure & data?',\n default: true,\n },\n ]);\n\n return useExampleApp;\n}\n\nasync function gitInit() {\n const { gitInit } = await inquirer.prompt<{\n gitInit: boolean;\n }>([\n {\n type: 'confirm',\n name: 'gitInit',\n message: 'Initialize a git repository?',\n default: true,\n },\n ]);\n\n return gitInit;\n}\n\nasync function installDependencies(packageManager: string) {\n const { installDependencies } = await inquirer.prompt<{\n installDependencies: boolean;\n }>([\n {\n type: 'confirm',\n name: 'installDependencies',\n message: `Install dependencies with ${packageManager}?`,\n default: true,\n },\n ]);\n\n return installDependencies;\n}\n\nexport { directory, typescript, example, gitInit, installDependencies };\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 path from 'node:path';\nimport url from 'node:url';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport * as tar from 'tar';\nimport retry from 'async-retry';\n\nimport fse from 'fs-extra';\nimport type { Scope } from '../types';\n\nconst stripTrailingSlash = (str: string) => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\n// Merge template with new project being created\nexport async function copyTemplate(scope: Scope, rootPath: string) {\n const { template } = scope;\n\n if (!template) {\n throw new Error('Missing template or example app option');\n }\n\n if (await isOfficialTemplate(template, scope.templateBranch)) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner: 'strapi',\n repo: 'strapi',\n branch: scope.templateBranch,\n subPath: `templates/${template}`,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isLocalTemplate(template)) {\n const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;\n\n await fse.copy(filePath, rootPath);\n }\n\n if (isGithubShorthand(template)) {\n const [owner, repo, ...pathSegments] = template.split('/');\n const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;\n\n await retry(\n () => downloadGithubRepo(rootPath, { owner, repo, branch: scope.templateBranch, subPath }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isGithubRepo(template)) {\n const url = new URL(template);\n\n const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(\n url.pathname.slice(1)\n ).split('/');\n\n if (t !== undefined && t !== 'tree') {\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n\n if (scope.templateBranch) {\n await downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: scope.templateBranch,\n subPath: scope.templatePath,\n });\n }\n\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: decodeURIComponent(branch) ?? scope.templateBranch,\n subPath: pathSegments.length\n ? decodeURIComponent(pathSegments.join('/'))\n : scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n}\n\ntype RepoInfo = {\n owner: string;\n repo: string;\n branch?: string;\n subPath?: string | null;\n};\n\nasync function downloadGithubRepo(rootPath: string, { owner, repo, branch, subPath }: RepoInfo) {\n const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;\n\n let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;\n if (filePath) {\n checkContentUrl = `${checkContentUrl}/${filePath}`;\n }\n\n if (branch) {\n checkContentUrl = `${checkContentUrl}?ref=${branch}`;\n }\n\n const checkRes = await fetch(checkContentUrl, {\n method: 'HEAD',\n });\n\n if (checkRes.status !== 200) {\n throw new Error(\n `Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`\n );\n }\n\n let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;\n\n if (branch) {\n url = `${url}/${branch}`;\n }\n\n const res = await fetch(url);\n\n if (!res.body) {\n throw new Error(`Failed to download ${url}`);\n }\n\n await pipeline(\n // @ts-expect-error - Readable is not a valid source\n Readable.fromWeb(res.body),\n tar.x({\n cwd: rootPath,\n strip: filePath ? filePath.split('/').length + 1 : 1,\n filter(path) {\n if (filePath) {\n return path.split('/').slice(1).join('/').startsWith(filePath);\n }\n\n return true;\n },\n })\n );\n}\n\nfunction isLocalTemplate(template: string) {\n return (\n template.startsWith('file://') ||\n fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template))\n );\n}\n\nfunction isGithubShorthand(value: string) {\n if (isValidUrl(value)) {\n return false;\n }\n\n return /^[\\w-]+\\/[\\w-.]+(\\/[\\w-.]+)*$/.test(value);\n}\n\nfunction isGithubRepo(value: string) {\n try {\n const url = new URL(value);\n\n return url.origin === 'https://github.com';\n } catch {\n return false;\n }\n}\n\nfunction isValidUrl(value: string) {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isOfficialTemplate(template: string, branch: string | undefined) {\n if (isValidUrl(template)) {\n return false;\n }\n\n const res = await fetch(\n `https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`,\n { method: 'HEAD' }\n );\n\n return res.status === 200;\n}\n","import execa from 'execa';\n\nasync function isInGitRepository(rootDir: string) {\n try {\n await execa('git', ['rev-parse', '--is-inside-work-tree'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nasync function isInMercurialRepository(rootDir: string) {\n try {\n await execa('hg', ['-cwd', '.', 'root'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport async function tryGitInit(rootDir: string) {\n try {\n await execa('git', ['--version'], { stdio: 'ignore' });\n if ((await isInGitRepository(rootDir)) || (await isInMercurialRepository(rootDir))) {\n return false;\n }\n\n await execa('git', ['init'], { stdio: 'ignore', cwd: rootDir });\n\n await execa('git', ['add', '.'], { stdio: 'ignore', cwd: rootDir });\n await execa('git', ['commit', '-m', 'Initial commit from Strapi'], {\n stdio: 'ignore',\n cwd: rootDir,\n });\n\n return true;\n } catch (e) {\n console.error('Error while trying to initialize git:', e);\n return false;\n }\n}\n","import os from 'os';\nimport _ from 'lodash';\n\nimport { Scope, StderrError } from '../types';\n\ntype TrackError = Error | string | StderrError;\n\n// Add properties from the package.json strapi key in the metadata\nfunction addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) {\n const { packageJsonStrapi = {} } = scope;\n\n return _.defaults(metadata, packageJsonStrapi);\n}\n\nconst getProperties = (scope: Scope, error?: TrackError) => {\n const eventProperties = {\n error: typeof error === 'string' ? error : error && error.message,\n };\n\n const userProperties = {\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const groupProperties = {\n version: scope.strapiVersion,\n docker: scope.docker,\n useYarn: scope.packageManager === 'yarn',\n packageManager: scope.packageManager,\n useTypescriptOnServer: scope.useTypescript,\n useTypescriptOnAdmin: scope.useTypescript,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n noRun: (scope.runApp !== true).toString(),\n projectId: scope.uuid,\n };\n\n return {\n eventProperties,\n userProperties,\n groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope),\n };\n};\n\nfunction trackEvent(event: string, payload: Record<string, unknown>) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n try {\n return fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n ...payload,\n }),\n signal: AbortSignal.timeout(1000),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }).catch(() => {});\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackError({ scope, error }: { scope: Scope; error?: TrackError }) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent('didNotCreateProject', {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackUsage({\n event,\n scope,\n error,\n}: {\n event: string;\n scope: Scope;\n error?: TrackError;\n}) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent(event, {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n","export const engines = {\n node: '>=18.0.0 <=20.x.x',\n npm: '>=6.0.0',\n};\n","import { join } from 'path';\nimport { kebabCase, merge } from 'lodash';\nimport fse from 'fs-extra';\n\nimport { engines } from './engines';\nimport type { Scope } from '../types';\n\nexport async function createPackageJSON(scope: Scope) {\n const { sortPackageJson } = await import('sort-package-json');\n\n const pkgJSONPath = join(scope.rootPath, 'package.json');\n\n const existingPkg = await fse.readJSON(pkgJSONPath).catch(() => ({}));\n\n const pkg = {\n name: kebabCase(scope.name),\n private: true,\n version: '0.1.0',\n description: 'A Strapi application',\n devDependencies: scope.devDependencies ?? {},\n dependencies: scope.dependencies ?? {},\n strapi: {\n ...(scope.packageJsonStrapi ?? {}),\n uuid: scope.uuid,\n },\n engines,\n };\n\n // copy templates\n await fse.writeJSON(pkgJSONPath, sortPackageJson(merge(existingPkg, pkg)), {\n spaces: 2,\n });\n}\n","import crypto from 'crypto';\nimport _ from 'lodash';\n\nimport type { Scope } from '../types';\n\nconst generateASecret = () => crypto.randomBytes(16).toString('base64');\n\nconst envTmpl = `\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=<%= appKeys %>\nAPI_TOKEN_SALT=<%= apiTokenSalt %>\nADMIN_JWT_SECRET=<%= adminJwtToken %>\nTRANSFER_TOKEN_SALT=<%= transferTokenSalt %>\n\n# Database\nDATABASE_CLIENT=<%= database.client %>\nDATABASE_HOST=<%= database.connection.host %>\nDATABASE_PORT=<%= database.connection.port %>\nDATABASE_NAME=<%= database.connection.database %>\nDATABASE_USERNAME=<%= database.connection.username %>\nDATABASE_PASSWORD=<%= database.connection.password %>\nDATABASE_SSL=<%= database.connection.ssl %>\nDATABASE_FILENAME=<%= database.connection.filename %>\n`;\n\nexport function generateDotEnv(scope: Scope) {\n const compile = _.template(envTmpl);\n\n return compile({\n appKeys: new Array(4).fill(null).map(generateASecret).join(','),\n apiTokenSalt: generateASecret(),\n transferTokenSalt: generateASecret(),\n adminJwtToken: generateASecret(),\n database: {\n client: scope.database.client,\n connection: {\n ...scope.database.connection,\n ssl: scope.database.connection?.ssl || false,\n },\n },\n });\n}\n","export interface Options {\n useNpm?: boolean;\n usePnpm?: boolean;\n useYarn?: boolean;\n quickstart?: boolean;\n run?: boolean;\n dbclient?: DBClient;\n skipCloud?: boolean;\n skipDb?: boolean;\n dbhost?: string;\n dbport?: string;\n dbname?: string;\n dbusername?: string;\n dbpassword?: string;\n dbssl?: string;\n dbfile?: string;\n template?: string;\n typescript?: boolean;\n javascript?: boolean;\n install?: boolean;\n example?: boolean;\n gitInit?: boolean;\n templateBranch?: string;\n templatePath?: string;\n}\n\nexport type DBClient = 'mysql' | 'postgres' | 'sqlite';\n\nexport type DBConfig = {\n client: DBClient;\n connection: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n};\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm';\n\nexport interface Scope {\n name: string;\n rootPath: string;\n template?: string;\n templateBranch?: string;\n templatePath?: string;\n strapiVersion?: string;\n installDependencies?: boolean;\n devDependencies?: Record<string, string>;\n dependencies?: Record<string, string>;\n docker?: boolean;\n packageManager: PackageManager;\n runApp?: boolean;\n isQuickstart?: boolean;\n uuid?: string;\n deviceId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExampleApp?: boolean;\n gitInit?: boolean;\n}\n\nexport type ClientName = 'mysql' | 'postgres' | 'sqlite';\n\nexport interface DatabaseInfo {\n client: ClientName;\n connection?: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n}\n\nexport interface StderrError extends Error {\n stderr: string;\n}\n\nexport function isStderrError(error: unknown): error is StderrError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'stderr' in error &&\n typeof error.stderr === 'string'\n );\n}\n","import chalk from 'chalk';\nimport type { ChalkFunction } from 'chalk';\n\nconst MAX_PREFIX_LENGTH = 8;\n\nconst badge = (text: string, bgColor: ChalkFunction, textColor: ChalkFunction = chalk.black) => {\n const wrappedText = ` ${text} `;\n\n const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);\n\n return ' '.repeat(repeat) + bgColor(textColor(wrappedText));\n};\n\nconst textIndent = (\n text: string | string[],\n indentFirst = true,\n indent: number = MAX_PREFIX_LENGTH + 2\n) => {\n const parts = Array.isArray(text) ? text : [text];\n\n return parts\n .map((part, i) => {\n if (i === 0 && !indentFirst) {\n return part;\n }\n\n return ' '.repeat(indent) + part;\n })\n .join('\\n');\n};\n\nexport const logger = {\n log(message: string | string[]): void {\n console.log(textIndent(message));\n },\n title(title: string, message: string): void {\n const prefix = badge(title, chalk.bgBlueBright);\n console.log(`\\n${prefix} ${message}`);\n },\n info(message: string): void {\n console.log(`${' '.repeat(7)}${chalk.cyan('●')} ${message}`);\n },\n success(message: string): void {\n console.log(`\\n${' '.repeat(7)}${chalk.green('✓')} ${chalk.green(message)}`);\n },\n fatal(message?: string | string[]): never {\n const prefix = badge('Error', chalk.bgRed);\n\n if (message) {\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n }\n\n process.exit(1);\n },\n error(message: string | string[]): void {\n const prefix = badge('Error', chalk.bgRed);\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n warn(message: string | string[]): void {\n const prefix = badge('Warn', chalk.bgYellow);\n console.warn(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n};\n","import { join } from 'node:path';\n\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport fse from 'fs-extra';\n\nimport { copyTemplate } from './utils/template';\nimport { tryGitInit } from './utils/git';\nimport { trackUsage } from './utils/usage';\nimport { createPackageJSON } from './utils/package-json';\nimport { generateDotEnv } from './utils/dot-env';\nimport { isStderrError } from './types';\n\nimport type { Scope } from './types';\nimport { logger } from './utils/logger';\n\nasync function createStrapi(scope: Scope) {\n const { rootPath } = scope;\n try {\n await fse.ensureDir(rootPath);\n await createApp(scope);\n } catch (error) {\n await fse.remove(rootPath);\n\n throw error;\n }\n}\n\nasync function createApp(scope: Scope) {\n const {\n rootPath,\n useTypescript,\n useExampleApp,\n installDependencies,\n isQuickstart,\n template,\n packageManager,\n gitInit,\n runApp,\n } = scope;\n\n await trackUsage({ event: 'willCreateProject', scope });\n\n logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);\n\n if (!isQuickstart) {\n await trackUsage({ event: 'didChooseCustomDatabase', scope });\n } else {\n await trackUsage({ event: 'didChooseQuickstart', scope });\n }\n\n if (!template) {\n let templateName = useExampleApp ? 'example' : 'vanilla';\n\n if (!useTypescript) {\n templateName = `${templateName}-js`;\n }\n\n const internalTemplatePath = join(__dirname, '../templates', templateName);\n if (await fse.exists(internalTemplatePath)) {\n await fse.copy(internalTemplatePath, rootPath);\n }\n } else {\n try {\n logger.info(`${chalk.cyan('Installing template')} ${template}`);\n\n await copyTemplate(scope, rootPath);\n\n logger.success('Template copied successfully.');\n } catch (error) {\n if (error instanceof Error) {\n logger.fatal(`Template installation failed: ${error.message}`);\n }\n\n throw error;\n }\n\n if (!fse.existsSync(join(rootPath, 'package.json'))) {\n logger.fatal(`Missing ${chalk.bold('package.json')} in template`);\n }\n }\n\n await trackUsage({ event: 'didCopyProjectFiles', scope });\n\n try {\n await createPackageJSON(scope);\n\n await trackUsage({ event: 'didWritePackageJSON', scope });\n\n // ensure node_modules is created\n await fse.ensureDir(join(rootPath, 'node_modules'));\n\n // create config/database\n await fse.writeFile(join(rootPath, '.env'), generateDotEnv(scope));\n\n await trackUsage({ event: 'didCopyConfigurationFiles', scope });\n } catch (err) {\n await fse.remove(rootPath);\n throw err;\n }\n\n if (installDependencies) {\n try {\n logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);\n\n await trackUsage({ event: 'willInstallProjectDependencies', scope });\n\n await runInstall(scope);\n\n await trackUsage({ event: 'didInstallProjectDependencies', scope });\n\n logger.success(`Dependencies installed`);\n } catch (error) {\n const stderr = isStderrError(error) ? error.stderr : '';\n\n await trackUsage({\n event: 'didNotInstallProjectDependencies',\n scope,\n error: stderr.slice(-1024),\n });\n\n logger.fatal([\n chalk.bold(\n 'Oh, it seems that you encountered an error while installing dependencies in your project'\n ),\n '',\n `Don't give up, your project was created correctly`,\n '',\n `Fix the issues mentioned in the installation errors and try to run the following command:`,\n '',\n `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`,\n ]);\n }\n }\n\n await trackUsage({ event: 'didCreateProject', scope });\n\n // Init git\n if (gitInit) {\n logger.title('git', 'Initializing git repository.');\n await tryGitInit(rootPath);\n logger.success('Initialized a git repository.');\n }\n\n logger.title('Strapi', `Your application was created!`);\n\n const cmd = chalk.cyan(`${packageManager} run`);\n\n logger.log([\n 'Available commands in your project:',\n '',\n 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',\n `${cmd} develop`,\n '',\n 'Start Strapi without watch mode.',\n `${cmd} start`,\n '',\n 'Build Strapi admin panel.',\n `${cmd} build`,\n '',\n 'Deploy Strapi project.',\n `${cmd} deploy`,\n '',\n 'Display all available commands.',\n `${cmd} strapi\\n`,\n ]);\n\n if (installDependencies) {\n logger.log(['To get started run', '', `${chalk.cyan('cd')} ${rootPath}`, `${cmd} develop`]);\n } else {\n logger.log([\n 'To get started run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n `${chalk.cyan(packageManager)} install`,\n `${cmd} develop`,\n ]);\n }\n\n if (runApp && installDependencies) {\n logger.title('Run', 'Running your Strapi application');\n\n try {\n await trackUsage({ event: 'willStartServer', scope });\n\n await execa(packageManager, ['run', 'develop'], {\n stdio: 'inherit',\n cwd: rootPath,\n env: {\n FORCE_COLOR: '1',\n },\n });\n } catch (error) {\n if (typeof error === 'string' || error instanceof Error) {\n await trackUsage({\n event: 'didNotStartServer',\n scope,\n error,\n });\n }\n\n logger.fatal('Failed to start your Strapi application');\n }\n }\n}\n\nconst installArguments = ['install'];\n\nconst installArgumentsMap = {\n npm: ['--legacy-peer-deps'],\n yarn: ['--network-timeout 1000000'],\n pnpm: [],\n};\n\nfunction runInstall({ rootPath, packageManager }: Scope) {\n const options: execa.Options = {\n cwd: rootPath,\n stdio: 'inherit',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n };\n\n if (packageManager in installArgumentsMap) {\n installArguments.push(...(installArgumentsMap[packageManager] ?? []));\n }\n\n const proc = execa(packageManager, installArguments, options);\n\n return proc;\n}\n\nexport { createStrapi };\n","import chalk from 'chalk';\nimport semver from 'semver';\n\nimport { engines } from './engines';\nimport { logger } from './logger';\n\nexport function checkNodeRequirements() {\n const currentNodeVersion = process.versions.node;\n\n // error if the node version isn't supported\n if (!semver.satisfies(currentNodeVersion, engines.node)) {\n logger.fatal([\n chalk.red(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi requires ${chalk.bold(chalk.green(`Node.js ${engines.node}`))}`,\n 'Please make sure to use the right version of Node.',\n ]);\n }\n\n // warn if not using a LTS version\n else if (semver.major(currentNodeVersion) % 2 !== 0) {\n logger.warn([\n chalk.yellow(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi only supports ${chalk.bold(chalk.green('LTS versions of Node.js'))}, other versions may not be compatible.`,\n ]);\n }\n}\n","import { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport { logger } from './logger';\n\n// Checks if the an empty directory exists at rootPath\nexport async function checkInstallPath(directory: string): Promise<string> {\n const rootPath = resolve(directory);\n\n if (await fse.pathExists(rootPath)) {\n const stat = await fse.stat(rootPath);\n\n if (!stat.isDirectory()) {\n logger.fatal(\n `${chalk.green(\n rootPath\n )} is not a directory. Make sure to create a Strapi application in an empty directory.`\n );\n }\n\n const files = await fse.readdir(rootPath);\n if (files.length > 1) {\n logger.fatal([\n 'You can only create a Strapi app in an empty directory',\n `Make sure ${chalk.green(rootPath)} is empty.`,\n ]);\n }\n }\n\n return rootPath;\n}\n","import { randomUUID } from 'crypto';\nimport { machineIdSync } from 'node-machine-id';\n\nexport function machineID() {\n try {\n const deviceId = machineIdSync();\n return deviceId;\n } catch (error) {\n const deviceId = randomUUID();\n return deviceId;\n }\n}\n","import inquirer from 'inquirer';\nimport type { Question } from 'inquirer';\n\nimport type { Scope, Options, DBClient, DBConfig } from '../types';\nimport { logger } from './logger';\n\nconst DBOptions = ['dbclient', 'dbhost', 'dbport', 'dbname', 'dbusername', 'dbpassword'];\n\nconst VALID_CLIENTS = ['sqlite', 'mysql', 'postgres'] as const;\n\nconst DEFAULT_CONFIG: DBConfig = {\n client: 'sqlite',\n connection: {\n filename: '.tmp/data.db',\n },\n};\n\nasync function dbPrompt() {\n const { useDefault } = await inquirer.prompt<{ useDefault: boolean }>([\n {\n type: 'confirm',\n name: 'useDefault',\n message: 'Do you want to use the default database (sqlite) ?',\n default: true,\n },\n ]);\n\n if (useDefault) {\n return DEFAULT_CONFIG;\n }\n\n const { client } = await inquirer.prompt<{ client: DBClient }>([\n {\n type: 'list',\n name: 'client',\n message: 'Choose your default database client',\n choices: ['sqlite', 'postgres', 'mysql'],\n default: 'sqlite',\n },\n ]);\n\n const questions = dbQuestions[client].map((q) => q({ client }));\n\n const responses = await inquirer.prompt(questions);\n\n return {\n client,\n connection: responses,\n };\n}\n\nexport async function getDatabaseInfos(options: Options): Promise<DBConfig> {\n if (options.skipDb) {\n return DEFAULT_CONFIG;\n }\n\n if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {\n logger.fatal(\n `Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`\n );\n }\n\n const matchingArgs = DBOptions.filter((key) => key in options);\n const missingArgs = DBOptions.filter((key) => !(key in options));\n\n if (\n matchingArgs.length > 0 &&\n matchingArgs.length !== DBOptions.length &&\n options.dbclient !== 'sqlite'\n ) {\n logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);\n }\n\n const hasDBOptions = DBOptions.some((key) => key in options);\n\n if (!hasDBOptions) {\n if (options.quickstart) {\n return DEFAULT_CONFIG;\n }\n\n return dbPrompt();\n }\n\n if (!options.dbclient) {\n return logger.fatal('Please specify the database client');\n }\n\n const database: DBConfig = {\n client: options.dbclient,\n connection: {\n host: options.dbhost,\n port: options.dbport,\n database: options.dbname,\n username: options.dbusername,\n password: options.dbpassword,\n filename: options.dbfile,\n },\n };\n\n if (options.dbssl !== undefined) {\n database.connection.ssl = options.dbssl === 'true';\n }\n\n return database;\n}\n\nconst sqlClientModule = {\n mysql: { mysql2: '3.9.4' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '9.4.3' },\n};\n\nexport function addDatabaseDependencies(scope: Scope) {\n scope.dependencies = {\n ...scope.dependencies,\n ...sqlClientModule[scope.database.client],\n };\n}\n\ninterface QuestionFactory {\n (options: { client: DBClient }): Question;\n}\n\nconst DEFAULT_PORTS = {\n postgres: 5432,\n mysql: 3306,\n sqlite: undefined,\n};\n\nconst database: QuestionFactory = () => ({\n type: 'input',\n name: 'database',\n message: 'Database name:',\n default: 'strapi',\n validate(value: string) {\n if (value.includes('.')) {\n return `The database name can't contain a \".\"`;\n }\n\n return true;\n },\n});\n\nconst host: QuestionFactory = () => ({\n type: 'input',\n name: 'host',\n message: 'Host:',\n default: '127.0.0.1',\n});\n\nconst port: QuestionFactory = ({ client }) => ({\n type: 'input',\n name: 'port',\n message: 'Port:',\n default: DEFAULT_PORTS[client],\n});\n\nconst username: QuestionFactory = () => ({\n type: 'input',\n name: 'username',\n message: 'Username:',\n});\n\nconst password: QuestionFactory = () => ({\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n});\n\nconst ssl: QuestionFactory = () => ({\n type: 'confirm',\n name: 'ssl',\n message: 'Enable SSL connection:',\n default: false,\n});\n\nconst filename: QuestionFactory = () => ({\n type: 'input',\n name: 'filename',\n message: 'Filename:',\n default: '.tmp/data.db',\n});\n\nconst dbQuestions = {\n sqlite: [filename],\n postgres: [database, host, port, username, password, ssl],\n mysql: [database, host, port, username, password, ssl],\n};\n","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 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.useExampleApp = false;\n } else if (options.example === true || options.quickstart) {\n scope.useExampleApp = true;\n } else if (options.example === false) {\n scope.useExampleApp = false;\n } else {\n scope.useExampleApp = 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":["directory","inquirer","gitInit","installDependencies","chalk","_","logger","cloudServices","cloudCli","e","retry","url","fse","path","pipeline","Readable","tar","execa","os","join","kebabCase","merge","crypto","semver","resolve","machineIdSync","randomUUID","database","commander","prompts.directory","basename","prompts.example","prompts.typescript","prompts.installDependencies","prompts.gitInit"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -474,7 +474,8 @@ function isStderrError(error) {
474
474
  const MAX_PREFIX_LENGTH = 8;
475
475
  const badge = (text, bgColor, textColor = chalk.black) => {
476
476
  const wrappedText = ` ${text} `;
477
- return " ".repeat(MAX_PREFIX_LENGTH - wrappedText.length) + bgColor(textColor(wrappedText));
477
+ const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);
478
+ return " ".repeat(repeat) + bgColor(textColor(wrappedText));
478
479
  };
479
480
  const textIndent = (text, indentFirst = true, indent = MAX_PREFIX_LENGTH + 2) => {
480
481
  const parts = Array.isArray(text) ? text : [text];
@@ -642,10 +643,10 @@ async function createApp(scope) {
642
643
  `
643
644
  ]);
644
645
  if (installDependencies2) {
645
- logger.log(["To get start run", "", `${chalk.cyan("cd")} ${rootPath}`, `${cmd} develop`]);
646
+ logger.log(["To get started run", "", `${chalk.cyan("cd")} ${rootPath}`, `${cmd} develop`]);
646
647
  } else {
647
648
  logger.log([
648
- "To get start run",
649
+ "To get started run",
649
650
  "",
650
651
  `${chalk.cyan("cd")} ${rootPath}`,
651
652
  `${chalk.cyan(packageManager)} install`,
@@ -653,10 +654,10 @@ async function createApp(scope) {
653
654
  ]);
654
655
  }
655
656
  if (runApp && installDependencies2) {
656
- logger.title("Starting", "Running your Strapi application");
657
+ logger.title("Run", "Running your Strapi application");
657
658
  try {
658
659
  await trackUsage({ event: "willStartServer", scope });
659
- await execa("npm", ["run", "develop"], {
660
+ await execa(packageManager, ["run", "develop"], {
660
661
  stdio: "inherit",
661
662
  cwd: rootPath,
662
663
  env: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/prompts.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/utils/template.ts","../src/utils/git.ts","../src/utils/usage.ts","../src/utils/engines.ts","../src/utils/package-json.ts","../src/utils/dot-env.ts","../src/types.ts","../src/utils/logger.ts","../src/create-strapi.ts","../src/utils/check-requirements.ts","../src/utils/check-install-path.ts","../src/utils/machine-id.ts","../src/utils/database.ts","../src/index.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nasync function directory() {\n const { directory } = await inquirer.prompt<{\n directory: string;\n }>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What is the name of your project?',\n },\n ]);\n\n return directory;\n}\n\nasync function typescript() {\n const { useTypescript } = await inquirer.prompt<{\n useTypescript: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useTypescript',\n message: 'Start with Typescript?',\n default: true,\n },\n ]);\n\n return useTypescript;\n}\n\nasync function example() {\n const { useExampleApp } = await inquirer.prompt<{\n useExampleApp: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useExampleApp',\n message: 'Start with an example structure & data?',\n default: true,\n },\n ]);\n\n return useExampleApp;\n}\n\nasync function gitInit() {\n const { gitInit } = await inquirer.prompt<{\n gitInit: boolean;\n }>([\n {\n type: 'confirm',\n name: 'gitInit',\n message: 'Initialize a git repository?',\n default: true,\n },\n ]);\n\n return gitInit;\n}\n\nasync function installDependencies(packageManager: string) {\n const { installDependencies } = await inquirer.prompt<{\n installDependencies: boolean;\n }>([\n {\n type: 'confirm',\n name: 'installDependencies',\n message: `Install dependencies with ${packageManager}?`,\n default: true,\n },\n ]);\n\n return installDependencies;\n}\n\nexport { directory, typescript, example, gitInit, installDependencies };\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\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 path from 'node:path';\nimport url from 'node:url';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport * as tar from 'tar';\nimport retry from 'async-retry';\n\nimport fse from 'fs-extra';\nimport type { Scope } from '../types';\n\nconst stripTrailingSlash = (str: string) => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\n// Merge template with new project being created\nexport async function copyTemplate(scope: Scope, rootPath: string) {\n const { template } = scope;\n\n if (!template) {\n throw new Error('Missing template or example app option');\n }\n\n if (await isOfficialTemplate(template, scope.templateBranch)) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner: 'strapi',\n repo: 'strapi',\n branch: scope.templateBranch,\n subPath: `templates/${template}`,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isLocalTemplate(template)) {\n const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;\n\n await fse.copy(filePath, rootPath);\n }\n\n if (isGithubShorthand(template)) {\n const [owner, repo, ...pathSegments] = template.split('/');\n const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;\n\n await retry(\n () => downloadGithubRepo(rootPath, { owner, repo, branch: scope.templateBranch, subPath }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isGithubRepo(template)) {\n const url = new URL(template);\n\n const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(\n url.pathname.slice(1)\n ).split('/');\n\n if (t !== undefined && t !== 'tree') {\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n\n if (scope.templateBranch) {\n await downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: scope.templateBranch,\n subPath: scope.templatePath,\n });\n }\n\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: decodeURIComponent(branch) ?? scope.templateBranch,\n subPath: pathSegments.length\n ? decodeURIComponent(pathSegments.join('/'))\n : scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n}\n\ntype RepoInfo = {\n owner: string;\n repo: string;\n branch?: string;\n subPath?: string | null;\n};\n\nasync function downloadGithubRepo(rootPath: string, { owner, repo, branch, subPath }: RepoInfo) {\n const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;\n\n let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;\n if (filePath) {\n checkContentUrl = `${checkContentUrl}/${filePath}`;\n }\n\n if (branch) {\n checkContentUrl = `${checkContentUrl}?ref=${branch}`;\n }\n\n const checkRes = await fetch(checkContentUrl, {\n method: 'HEAD',\n });\n\n if (checkRes.status !== 200) {\n throw new Error(\n `Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`\n );\n }\n\n let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;\n\n if (branch) {\n url = `${url}/${branch}`;\n }\n\n const res = await fetch(url);\n\n if (!res.body) {\n throw new Error(`Failed to download ${url}`);\n }\n\n await pipeline(\n // @ts-expect-error - Readable is not a valid source\n Readable.fromWeb(res.body),\n tar.x({\n cwd: rootPath,\n strip: filePath ? filePath.split('/').length + 1 : 1,\n filter(path) {\n if (filePath) {\n return path.split('/').slice(1).join('/').startsWith(filePath);\n }\n\n return true;\n },\n })\n );\n}\n\nfunction isLocalTemplate(template: string) {\n return (\n template.startsWith('file://') ||\n fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template))\n );\n}\n\nfunction isGithubShorthand(value: string) {\n if (isValidUrl(value)) {\n return false;\n }\n\n return /^[\\w-]+\\/[\\w-.]+(\\/[\\w-.]+)*$/.test(value);\n}\n\nfunction isGithubRepo(value: string) {\n try {\n const url = new URL(value);\n\n return url.origin === 'https://github.com';\n } catch {\n return false;\n }\n}\n\nfunction isValidUrl(value: string) {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isOfficialTemplate(template: string, branch: string | undefined) {\n if (isValidUrl(template)) {\n return false;\n }\n\n const res = await fetch(\n `https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`,\n { method: 'HEAD' }\n );\n\n return res.status === 200;\n}\n","import execa from 'execa';\n\nasync function isInGitRepository(rootDir: string) {\n try {\n await execa('git', ['rev-parse', '--is-inside-work-tree'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nasync function isInMercurialRepository(rootDir: string) {\n try {\n await execa('hg', ['-cwd', '.', 'root'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport async function tryGitInit(rootDir: string) {\n try {\n await execa('git', ['--version'], { stdio: 'ignore' });\n if ((await isInGitRepository(rootDir)) || (await isInMercurialRepository(rootDir))) {\n return false;\n }\n\n await execa('git', ['init'], { stdio: 'ignore', cwd: rootDir });\n\n await execa('git', ['add', '.'], { stdio: 'ignore', cwd: rootDir });\n await execa('git', ['commit', '-m', 'Initial commit from Strapi'], {\n stdio: 'ignore',\n cwd: rootDir,\n });\n\n return true;\n } catch (e) {\n console.error('Error while trying to initialize git:', e);\n return false;\n }\n}\n","import os from 'os';\nimport _ from 'lodash';\n\nimport { Scope, StderrError } from '../types';\n\ntype TrackError = Error | string | StderrError;\n\n// Add properties from the package.json strapi key in the metadata\nfunction addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) {\n const { packageJsonStrapi = {} } = scope;\n\n return _.defaults(metadata, packageJsonStrapi);\n}\n\nconst getProperties = (scope: Scope, error?: TrackError) => {\n const eventProperties = {\n error: typeof error === 'string' ? error : error && error.message,\n };\n\n const userProperties = {\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const groupProperties = {\n version: scope.strapiVersion,\n docker: scope.docker,\n useYarn: scope.packageManager === 'yarn',\n packageManager: scope.packageManager,\n useTypescriptOnServer: scope.useTypescript,\n useTypescriptOnAdmin: scope.useTypescript,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n noRun: (scope.runApp !== true).toString(),\n projectId: scope.uuid,\n };\n\n return {\n eventProperties,\n userProperties,\n groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope),\n };\n};\n\nfunction trackEvent(event: string, payload: Record<string, unknown>) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n try {\n return fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n ...payload,\n }),\n signal: AbortSignal.timeout(1000),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }).catch(() => {});\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackError({ scope, error }: { scope: Scope; error?: TrackError }) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent('didNotCreateProject', {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackUsage({\n event,\n scope,\n error,\n}: {\n event: string;\n scope: Scope;\n error?: TrackError;\n}) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent(event, {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n","export const engines = {\n node: '>=18.0.0 <=20.x.x',\n npm: '>=6.0.0',\n};\n","import { join } from 'path';\nimport { kebabCase, merge } from 'lodash';\nimport fse from 'fs-extra';\n\nimport { engines } from './engines';\nimport type { Scope } from '../types';\n\nexport async function createPackageJSON(scope: Scope) {\n const { sortPackageJson } = await import('sort-package-json');\n\n const pkgJSONPath = join(scope.rootPath, 'package.json');\n\n const existingPkg = await fse.readJSON(pkgJSONPath).catch(() => ({}));\n\n const pkg = {\n name: kebabCase(scope.name),\n private: true,\n version: '0.1.0',\n description: 'A Strapi application',\n devDependencies: scope.devDependencies ?? {},\n dependencies: scope.dependencies ?? {},\n strapi: {\n ...(scope.packageJsonStrapi ?? {}),\n uuid: scope.uuid,\n },\n engines,\n };\n\n // copy templates\n await fse.writeJSON(pkgJSONPath, sortPackageJson(merge(existingPkg, pkg)), {\n spaces: 2,\n });\n}\n","import crypto from 'crypto';\nimport _ from 'lodash';\n\nimport type { Scope } from '../types';\n\nconst generateASecret = () => crypto.randomBytes(16).toString('base64');\n\nconst envTmpl = `\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=<%= appKeys %>\nAPI_TOKEN_SALT=<%= apiTokenSalt %>\nADMIN_JWT_SECRET=<%= adminJwtToken %>\nTRANSFER_TOKEN_SALT=<%= transferTokenSalt %>\n\n# Database\nDATABASE_CLIENT=<%= database.client %>\nDATABASE_HOST=<%= database.connection.host %>\nDATABASE_PORT=<%= database.connection.port %>\nDATABASE_NAME=<%= database.connection.database %>\nDATABASE_USERNAME=<%= database.connection.username %>\nDATABASE_PASSWORD=<%= database.connection.password %>\nDATABASE_SSL=<%= database.connection.ssl %>\nDATABASE_FILENAME=<%= database.connection.filename %>\n`;\n\nexport function generateDotEnv(scope: Scope) {\n const compile = _.template(envTmpl);\n\n return compile({\n appKeys: new Array(4).fill(null).map(generateASecret).join(','),\n apiTokenSalt: generateASecret(),\n transferTokenSalt: generateASecret(),\n adminJwtToken: generateASecret(),\n database: {\n client: scope.database.client,\n connection: {\n ...scope.database.connection,\n ssl: scope.database.connection?.ssl || false,\n },\n },\n });\n}\n","export interface Options {\n useNpm?: boolean;\n usePnpm?: boolean;\n useYarn?: boolean;\n quickstart?: boolean;\n run?: boolean;\n dbclient?: DBClient;\n skipCloud?: boolean;\n skipDb?: boolean;\n dbhost?: string;\n dbport?: string;\n dbname?: string;\n dbusername?: string;\n dbpassword?: string;\n dbssl?: string;\n dbfile?: string;\n template?: string;\n typescript?: boolean;\n javascript?: boolean;\n install?: boolean;\n example?: boolean;\n gitInit?: boolean;\n templateBranch?: string;\n templatePath?: string;\n}\n\nexport type DBClient = 'mysql' | 'postgres' | 'sqlite';\n\nexport type DBConfig = {\n client: DBClient;\n connection: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n};\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm';\n\nexport interface Scope {\n name: string;\n rootPath: string;\n template?: string;\n templateBranch?: string;\n templatePath?: string;\n strapiVersion?: string;\n installDependencies?: boolean;\n devDependencies?: Record<string, string>;\n dependencies?: Record<string, string>;\n docker?: boolean;\n packageManager: PackageManager;\n runApp?: boolean;\n isQuickstart?: boolean;\n uuid?: string;\n deviceId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExampleApp?: boolean;\n gitInit?: boolean;\n}\n\nexport type ClientName = 'mysql' | 'postgres' | 'sqlite';\n\nexport interface DatabaseInfo {\n client: ClientName;\n connection?: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n}\n\nexport interface StderrError extends Error {\n stderr: string;\n}\n\nexport function isStderrError(error: unknown): error is StderrError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'stderr' in error &&\n typeof error.stderr === 'string'\n );\n}\n","import chalk from 'chalk';\nimport type { ChalkFunction } from 'chalk';\n\nconst MAX_PREFIX_LENGTH = 8;\n\nconst badge = (text: string, bgColor: ChalkFunction, textColor: ChalkFunction = chalk.black) => {\n const wrappedText = ` ${text} `;\n\n return ' '.repeat(MAX_PREFIX_LENGTH - wrappedText.length) + bgColor(textColor(wrappedText));\n};\n\nconst textIndent = (\n text: string | string[],\n indentFirst = true,\n indent: number = MAX_PREFIX_LENGTH + 2\n) => {\n const parts = Array.isArray(text) ? text : [text];\n\n return parts\n .map((part, i) => {\n if (i === 0 && !indentFirst) {\n return part;\n }\n\n return ' '.repeat(indent) + part;\n })\n .join('\\n');\n};\n\nexport const logger = {\n log(message: string | string[]): void {\n console.log(textIndent(message));\n },\n title(title: string, message: string): void {\n const prefix = badge(title, chalk.bgBlueBright);\n console.log(`\\n${prefix} ${message}`);\n },\n info(message: string): void {\n console.log(`${' '.repeat(7)}${chalk.cyan('●')} ${message}`);\n },\n success(message: string): void {\n console.log(`\\n${' '.repeat(7)}${chalk.green('✓')} ${chalk.green(message)}`);\n },\n fatal(message?: string | string[]): never {\n const prefix = badge('Error', chalk.bgRed);\n\n if (message) {\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n }\n\n process.exit(1);\n },\n error(message: string | string[]): void {\n const prefix = badge('Error', chalk.bgRed);\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n warn(message: string | string[]): void {\n const prefix = badge('Warn', chalk.bgYellow);\n console.warn(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n};\n","import { join } from 'node:path';\n\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport fse from 'fs-extra';\n\nimport { copyTemplate } from './utils/template';\nimport { tryGitInit } from './utils/git';\nimport { trackUsage } from './utils/usage';\nimport { createPackageJSON } from './utils/package-json';\nimport { generateDotEnv } from './utils/dot-env';\nimport { isStderrError } from './types';\n\nimport type { Scope } from './types';\nimport { logger } from './utils/logger';\n\nasync function createStrapi(scope: Scope) {\n const { rootPath } = scope;\n try {\n await fse.ensureDir(rootPath);\n await createApp(scope);\n } catch (error) {\n await fse.remove(rootPath);\n\n throw error;\n }\n}\n\nasync function createApp(scope: Scope) {\n const {\n rootPath,\n useTypescript,\n useExampleApp,\n installDependencies,\n isQuickstart,\n template,\n packageManager,\n gitInit,\n runApp,\n } = scope;\n\n await trackUsage({ event: 'willCreateProject', scope });\n\n logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);\n\n if (!isQuickstart) {\n await trackUsage({ event: 'didChooseCustomDatabase', scope });\n } else {\n await trackUsage({ event: 'didChooseQuickstart', scope });\n }\n\n if (!template) {\n let templateName = useExampleApp ? 'example' : 'vanilla';\n\n if (!useTypescript) {\n templateName = `${templateName}-js`;\n }\n\n const internalTemplatePath = join(__dirname, '../templates', templateName);\n if (await fse.exists(internalTemplatePath)) {\n await fse.copy(internalTemplatePath, rootPath);\n }\n } else {\n try {\n logger.info(`${chalk.cyan('Installing template')} ${template}`);\n\n await copyTemplate(scope, rootPath);\n\n logger.success('Template copied successfully.');\n } catch (error) {\n if (error instanceof Error) {\n logger.fatal(`Template installation failed: ${error.message}`);\n }\n\n throw error;\n }\n\n if (!fse.existsSync(join(rootPath, 'package.json'))) {\n logger.fatal(`Missing ${chalk.bold('package.json')} in template`);\n }\n }\n\n await trackUsage({ event: 'didCopyProjectFiles', scope });\n\n try {\n await createPackageJSON(scope);\n\n await trackUsage({ event: 'didWritePackageJSON', scope });\n\n // ensure node_modules is created\n await fse.ensureDir(join(rootPath, 'node_modules'));\n\n // create config/database\n await fse.writeFile(join(rootPath, '.env'), generateDotEnv(scope));\n\n await trackUsage({ event: 'didCopyConfigurationFiles', scope });\n } catch (err) {\n await fse.remove(rootPath);\n throw err;\n }\n\n if (installDependencies) {\n try {\n logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);\n\n await trackUsage({ event: 'willInstallProjectDependencies', scope });\n\n await runInstall(scope);\n\n await trackUsage({ event: 'didInstallProjectDependencies', scope });\n\n logger.success(`Dependencies installed`);\n } catch (error) {\n const stderr = isStderrError(error) ? error.stderr : '';\n\n await trackUsage({\n event: 'didNotInstallProjectDependencies',\n scope,\n error: stderr.slice(-1024),\n });\n\n logger.fatal([\n chalk.bold(\n 'Oh, it seems that you encountered an error while installing dependencies in your project'\n ),\n '',\n `Don't give up, your project was created correctly`,\n '',\n `Fix the issues mentioned in the installation errors and try to run the following command:`,\n '',\n `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`,\n ]);\n }\n }\n\n await trackUsage({ event: 'didCreateProject', scope });\n\n // Init git\n if (gitInit) {\n logger.title('git', 'Initializing git repository.');\n await tryGitInit(rootPath);\n logger.success('Initialized a git repository.');\n }\n\n logger.title('Strapi', `Your application was created!`);\n\n const cmd = chalk.cyan(`${packageManager} run`);\n\n logger.log([\n 'Available commands in your project:',\n '',\n 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',\n `${cmd} develop`,\n '',\n 'Start Strapi without watch mode.',\n `${cmd} start`,\n '',\n 'Build Strapi admin panel.',\n `${cmd} build`,\n '',\n 'Deploy Strapi project.',\n `${cmd} deploy`,\n '',\n 'Display all available commands.',\n `${cmd} strapi\\n`,\n ]);\n\n if (installDependencies) {\n logger.log(['To get start run', '', `${chalk.cyan('cd')} ${rootPath}`, `${cmd} develop`]);\n } else {\n logger.log([\n 'To get start run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n `${chalk.cyan(packageManager)} install`,\n `${cmd} develop`,\n ]);\n }\n\n if (runApp && installDependencies) {\n logger.title('Starting', 'Running your Strapi application');\n\n try {\n await trackUsage({ event: 'willStartServer', scope });\n\n await execa('npm', ['run', 'develop'], {\n stdio: 'inherit',\n cwd: rootPath,\n env: {\n FORCE_COLOR: '1',\n },\n });\n } catch (error) {\n if (typeof error === 'string' || error instanceof Error) {\n await trackUsage({\n event: 'didNotStartServer',\n scope,\n error,\n });\n }\n\n logger.fatal('Failed to start your Strapi application');\n }\n }\n}\n\nconst installArguments = ['install'];\n\nconst installArgumentsMap = {\n npm: ['--legacy-peer-deps'],\n yarn: ['--network-timeout 1000000'],\n pnpm: [],\n};\n\nfunction runInstall({ rootPath, packageManager }: Scope) {\n const options: execa.Options = {\n cwd: rootPath,\n stdio: 'inherit',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n };\n\n if (packageManager in installArgumentsMap) {\n installArguments.push(...(installArgumentsMap[packageManager] ?? []));\n }\n\n const proc = execa(packageManager, installArguments, options);\n\n return proc;\n}\n\nexport { createStrapi };\n","import chalk from 'chalk';\nimport semver from 'semver';\n\nimport { engines } from './engines';\nimport { logger } from './logger';\n\nexport function checkNodeRequirements() {\n const currentNodeVersion = process.versions.node;\n\n // error if the node version isn't supported\n if (!semver.satisfies(currentNodeVersion, engines.node)) {\n logger.fatal([\n chalk.red(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi requires ${chalk.bold(chalk.green(`Node.js ${engines.node}`))}`,\n 'Please make sure to use the right version of Node.',\n ]);\n }\n\n // warn if not using a LTS version\n else if (semver.major(currentNodeVersion) % 2 !== 0) {\n logger.warn([\n chalk.yellow(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi only supports ${chalk.bold(chalk.green('LTS versions of Node.js'))}, other versions may not be compatible.`,\n ]);\n }\n}\n","import { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport { logger } from './logger';\n\n// Checks if the an empty directory exists at rootPath\nexport async function checkInstallPath(directory: string): Promise<string> {\n const rootPath = resolve(directory);\n\n if (await fse.pathExists(rootPath)) {\n const stat = await fse.stat(rootPath);\n\n if (!stat.isDirectory()) {\n logger.fatal(\n `${chalk.green(\n rootPath\n )} is not a directory. Make sure to create a Strapi application in an empty directory.`\n );\n }\n\n const files = await fse.readdir(rootPath);\n if (files.length > 1) {\n logger.fatal([\n 'You can only create a Strapi app in an empty directory',\n `Make sure ${chalk.green(rootPath)} is empty.`,\n ]);\n }\n }\n\n return rootPath;\n}\n","import { randomUUID } from 'crypto';\nimport { machineIdSync } from 'node-machine-id';\n\nexport function machineID() {\n try {\n const deviceId = machineIdSync();\n return deviceId;\n } catch (error) {\n const deviceId = randomUUID();\n return deviceId;\n }\n}\n","import inquirer from 'inquirer';\nimport type { Question } from 'inquirer';\n\nimport type { Scope, Options, DBClient, DBConfig } from '../types';\nimport { logger } from './logger';\n\nconst DBOptions = ['dbclient', 'dbhost', 'dbport', 'dbname', 'dbusername', 'dbpassword'];\n\nconst VALID_CLIENTS = ['sqlite', 'mysql', 'postgres'] as const;\n\nconst DEFAULT_CONFIG: DBConfig = {\n client: 'sqlite',\n connection: {\n filename: '.tmp/data.db',\n },\n};\n\nasync function dbPrompt() {\n const { useDefault } = await inquirer.prompt<{ useDefault: boolean }>([\n {\n type: 'confirm',\n name: 'useDefault',\n message: 'Do you want to use the default database (sqlite) ?',\n default: true,\n },\n ]);\n\n if (useDefault) {\n return DEFAULT_CONFIG;\n }\n\n const { client } = await inquirer.prompt<{ client: DBClient }>([\n {\n type: 'list',\n name: 'client',\n message: 'Choose your default database client',\n choices: ['sqlite', 'postgres', 'mysql'],\n default: 'sqlite',\n },\n ]);\n\n const questions = dbQuestions[client].map((q) => q({ client }));\n\n const responses = await inquirer.prompt(questions);\n\n return {\n client,\n connection: responses,\n };\n}\n\nexport async function getDatabaseInfos(options: Options): Promise<DBConfig> {\n if (options.skipDb) {\n return DEFAULT_CONFIG;\n }\n\n if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {\n logger.fatal(\n `Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`\n );\n }\n\n const matchingArgs = DBOptions.filter((key) => key in options);\n const missingArgs = DBOptions.filter((key) => !(key in options));\n\n if (\n matchingArgs.length > 0 &&\n matchingArgs.length !== DBOptions.length &&\n options.dbclient !== 'sqlite'\n ) {\n logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);\n }\n\n const hasDBOptions = DBOptions.some((key) => key in options);\n\n if (!hasDBOptions) {\n if (options.quickstart) {\n return DEFAULT_CONFIG;\n }\n\n return dbPrompt();\n }\n\n if (!options.dbclient) {\n return logger.fatal('Please specify the database client');\n }\n\n const database: DBConfig = {\n client: options.dbclient,\n connection: {\n host: options.dbhost,\n port: options.dbport,\n database: options.dbname,\n username: options.dbusername,\n password: options.dbpassword,\n filename: options.dbfile,\n },\n };\n\n if (options.dbssl !== undefined) {\n database.connection.ssl = options.dbssl === 'true';\n }\n\n return database;\n}\n\nconst sqlClientModule = {\n mysql: { mysql2: '3.9.4' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '9.4.3' },\n};\n\nexport function addDatabaseDependencies(scope: Scope) {\n scope.dependencies = {\n ...scope.dependencies,\n ...sqlClientModule[scope.database.client],\n };\n}\n\ninterface QuestionFactory {\n (options: { client: DBClient }): Question;\n}\n\nconst DEFAULT_PORTS = {\n postgres: 5432,\n mysql: 3306,\n sqlite: undefined,\n};\n\nconst database: QuestionFactory = () => ({\n type: 'input',\n name: 'database',\n message: 'Database name:',\n default: 'strapi',\n validate(value: string) {\n if (value.includes('.')) {\n return `The database name can't contain a \".\"`;\n }\n\n return true;\n },\n});\n\nconst host: QuestionFactory = () => ({\n type: 'input',\n name: 'host',\n message: 'Host:',\n default: '127.0.0.1',\n});\n\nconst port: QuestionFactory = ({ client }) => ({\n type: 'input',\n name: 'port',\n message: 'Port:',\n default: DEFAULT_PORTS[client],\n});\n\nconst username: QuestionFactory = () => ({\n type: 'input',\n name: 'username',\n message: 'Username:',\n});\n\nconst password: QuestionFactory = () => ({\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n});\n\nconst ssl: QuestionFactory = () => ({\n type: 'confirm',\n name: 'ssl',\n message: 'Enable SSL connection:',\n default: false,\n});\n\nconst filename: QuestionFactory = () => ({\n type: 'input',\n name: 'filename',\n message: 'Filename:',\n default: '.tmp/data.db',\n});\n\nconst dbQuestions = {\n sqlite: [filename],\n postgres: [database, host, port, username, password, ssl],\n mysql: [database, host, port, username, password, ssl],\n};\n","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 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.useExampleApp = false;\n } else if (options.example === true || options.quickstart) {\n scope.useExampleApp = true;\n } else if (options.example === false) {\n scope.useExampleApp = false;\n } else {\n scope.useExampleApp = 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":["directory","gitInit","installDependencies","_","logger","cloudServices","cloudCli","e","url","path","join","database","prompts.directory","os","prompts.example","prompts.typescript","prompts.installDependencies","prompts.gitInit"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/prompts.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/utils/template.ts","../src/utils/git.ts","../src/utils/usage.ts","../src/utils/engines.ts","../src/utils/package-json.ts","../src/utils/dot-env.ts","../src/types.ts","../src/utils/logger.ts","../src/create-strapi.ts","../src/utils/check-requirements.ts","../src/utils/check-install-path.ts","../src/utils/machine-id.ts","../src/utils/database.ts","../src/index.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nasync function directory() {\n const { directory } = await inquirer.prompt<{\n directory: string;\n }>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What is the name of your project?',\n },\n ]);\n\n return directory;\n}\n\nasync function typescript() {\n const { useTypescript } = await inquirer.prompt<{\n useTypescript: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useTypescript',\n message: 'Start with Typescript?',\n default: true,\n },\n ]);\n\n return useTypescript;\n}\n\nasync function example() {\n const { useExampleApp } = await inquirer.prompt<{\n useExampleApp: boolean;\n }>([\n {\n type: 'confirm',\n name: 'useExampleApp',\n message: 'Start with an example structure & data?',\n default: true,\n },\n ]);\n\n return useExampleApp;\n}\n\nasync function gitInit() {\n const { gitInit } = await inquirer.prompt<{\n gitInit: boolean;\n }>([\n {\n type: 'confirm',\n name: 'gitInit',\n message: 'Initialize a git repository?',\n default: true,\n },\n ]);\n\n return gitInit;\n}\n\nasync function installDependencies(packageManager: string) {\n const { installDependencies } = await inquirer.prompt<{\n installDependencies: boolean;\n }>([\n {\n type: 'confirm',\n name: 'installDependencies',\n message: `Install dependencies with ${packageManager}?`,\n default: true,\n },\n ]);\n\n return installDependencies;\n}\n\nexport { directory, typescript, example, gitInit, installDependencies };\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 path from 'node:path';\nimport url from 'node:url';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport * as tar from 'tar';\nimport retry from 'async-retry';\n\nimport fse from 'fs-extra';\nimport type { Scope } from '../types';\n\nconst stripTrailingSlash = (str: string) => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\n// Merge template with new project being created\nexport async function copyTemplate(scope: Scope, rootPath: string) {\n const { template } = scope;\n\n if (!template) {\n throw new Error('Missing template or example app option');\n }\n\n if (await isOfficialTemplate(template, scope.templateBranch)) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner: 'strapi',\n repo: 'strapi',\n branch: scope.templateBranch,\n subPath: `templates/${template}`,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isLocalTemplate(template)) {\n const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;\n\n await fse.copy(filePath, rootPath);\n }\n\n if (isGithubShorthand(template)) {\n const [owner, repo, ...pathSegments] = template.split('/');\n const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;\n\n await retry(\n () => downloadGithubRepo(rootPath, { owner, repo, branch: scope.templateBranch, subPath }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isGithubRepo(template)) {\n const url = new URL(template);\n\n const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(\n url.pathname.slice(1)\n ).split('/');\n\n if (t !== undefined && t !== 'tree') {\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n\n if (scope.templateBranch) {\n await downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: scope.templateBranch,\n subPath: scope.templatePath,\n });\n }\n\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: decodeURIComponent(branch) ?? scope.templateBranch,\n subPath: pathSegments.length\n ? decodeURIComponent(pathSegments.join('/'))\n : scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n}\n\ntype RepoInfo = {\n owner: string;\n repo: string;\n branch?: string;\n subPath?: string | null;\n};\n\nasync function downloadGithubRepo(rootPath: string, { owner, repo, branch, subPath }: RepoInfo) {\n const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;\n\n let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;\n if (filePath) {\n checkContentUrl = `${checkContentUrl}/${filePath}`;\n }\n\n if (branch) {\n checkContentUrl = `${checkContentUrl}?ref=${branch}`;\n }\n\n const checkRes = await fetch(checkContentUrl, {\n method: 'HEAD',\n });\n\n if (checkRes.status !== 200) {\n throw new Error(\n `Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`\n );\n }\n\n let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;\n\n if (branch) {\n url = `${url}/${branch}`;\n }\n\n const res = await fetch(url);\n\n if (!res.body) {\n throw new Error(`Failed to download ${url}`);\n }\n\n await pipeline(\n // @ts-expect-error - Readable is not a valid source\n Readable.fromWeb(res.body),\n tar.x({\n cwd: rootPath,\n strip: filePath ? filePath.split('/').length + 1 : 1,\n filter(path) {\n if (filePath) {\n return path.split('/').slice(1).join('/').startsWith(filePath);\n }\n\n return true;\n },\n })\n );\n}\n\nfunction isLocalTemplate(template: string) {\n return (\n template.startsWith('file://') ||\n fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template))\n );\n}\n\nfunction isGithubShorthand(value: string) {\n if (isValidUrl(value)) {\n return false;\n }\n\n return /^[\\w-]+\\/[\\w-.]+(\\/[\\w-.]+)*$/.test(value);\n}\n\nfunction isGithubRepo(value: string) {\n try {\n const url = new URL(value);\n\n return url.origin === 'https://github.com';\n } catch {\n return false;\n }\n}\n\nfunction isValidUrl(value: string) {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isOfficialTemplate(template: string, branch: string | undefined) {\n if (isValidUrl(template)) {\n return false;\n }\n\n const res = await fetch(\n `https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`,\n { method: 'HEAD' }\n );\n\n return res.status === 200;\n}\n","import execa from 'execa';\n\nasync function isInGitRepository(rootDir: string) {\n try {\n await execa('git', ['rev-parse', '--is-inside-work-tree'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nasync function isInMercurialRepository(rootDir: string) {\n try {\n await execa('hg', ['-cwd', '.', 'root'], { stdio: 'ignore', cwd: rootDir });\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport async function tryGitInit(rootDir: string) {\n try {\n await execa('git', ['--version'], { stdio: 'ignore' });\n if ((await isInGitRepository(rootDir)) || (await isInMercurialRepository(rootDir))) {\n return false;\n }\n\n await execa('git', ['init'], { stdio: 'ignore', cwd: rootDir });\n\n await execa('git', ['add', '.'], { stdio: 'ignore', cwd: rootDir });\n await execa('git', ['commit', '-m', 'Initial commit from Strapi'], {\n stdio: 'ignore',\n cwd: rootDir,\n });\n\n return true;\n } catch (e) {\n console.error('Error while trying to initialize git:', e);\n return false;\n }\n}\n","import os from 'os';\nimport _ from 'lodash';\n\nimport { Scope, StderrError } from '../types';\n\ntype TrackError = Error | string | StderrError;\n\n// Add properties from the package.json strapi key in the metadata\nfunction addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) {\n const { packageJsonStrapi = {} } = scope;\n\n return _.defaults(metadata, packageJsonStrapi);\n}\n\nconst getProperties = (scope: Scope, error?: TrackError) => {\n const eventProperties = {\n error: typeof error === 'string' ? error : error && error.message,\n };\n\n const userProperties = {\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const groupProperties = {\n version: scope.strapiVersion,\n docker: scope.docker,\n useYarn: scope.packageManager === 'yarn',\n packageManager: scope.packageManager,\n useTypescriptOnServer: scope.useTypescript,\n useTypescriptOnAdmin: scope.useTypescript,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n noRun: (scope.runApp !== true).toString(),\n projectId: scope.uuid,\n };\n\n return {\n eventProperties,\n userProperties,\n groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope),\n };\n};\n\nfunction trackEvent(event: string, payload: Record<string, unknown>) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n try {\n return fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n ...payload,\n }),\n signal: AbortSignal.timeout(1000),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }).catch(() => {});\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackError({ scope, error }: { scope: Scope; error?: TrackError }) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent('didNotCreateProject', {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackUsage({\n event,\n scope,\n error,\n}: {\n event: string;\n scope: Scope;\n error?: TrackError;\n}) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent(event, {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n","export const engines = {\n node: '>=18.0.0 <=20.x.x',\n npm: '>=6.0.0',\n};\n","import { join } from 'path';\nimport { kebabCase, merge } from 'lodash';\nimport fse from 'fs-extra';\n\nimport { engines } from './engines';\nimport type { Scope } from '../types';\n\nexport async function createPackageJSON(scope: Scope) {\n const { sortPackageJson } = await import('sort-package-json');\n\n const pkgJSONPath = join(scope.rootPath, 'package.json');\n\n const existingPkg = await fse.readJSON(pkgJSONPath).catch(() => ({}));\n\n const pkg = {\n name: kebabCase(scope.name),\n private: true,\n version: '0.1.0',\n description: 'A Strapi application',\n devDependencies: scope.devDependencies ?? {},\n dependencies: scope.dependencies ?? {},\n strapi: {\n ...(scope.packageJsonStrapi ?? {}),\n uuid: scope.uuid,\n },\n engines,\n };\n\n // copy templates\n await fse.writeJSON(pkgJSONPath, sortPackageJson(merge(existingPkg, pkg)), {\n spaces: 2,\n });\n}\n","import crypto from 'crypto';\nimport _ from 'lodash';\n\nimport type { Scope } from '../types';\n\nconst generateASecret = () => crypto.randomBytes(16).toString('base64');\n\nconst envTmpl = `\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=<%= appKeys %>\nAPI_TOKEN_SALT=<%= apiTokenSalt %>\nADMIN_JWT_SECRET=<%= adminJwtToken %>\nTRANSFER_TOKEN_SALT=<%= transferTokenSalt %>\n\n# Database\nDATABASE_CLIENT=<%= database.client %>\nDATABASE_HOST=<%= database.connection.host %>\nDATABASE_PORT=<%= database.connection.port %>\nDATABASE_NAME=<%= database.connection.database %>\nDATABASE_USERNAME=<%= database.connection.username %>\nDATABASE_PASSWORD=<%= database.connection.password %>\nDATABASE_SSL=<%= database.connection.ssl %>\nDATABASE_FILENAME=<%= database.connection.filename %>\n`;\n\nexport function generateDotEnv(scope: Scope) {\n const compile = _.template(envTmpl);\n\n return compile({\n appKeys: new Array(4).fill(null).map(generateASecret).join(','),\n apiTokenSalt: generateASecret(),\n transferTokenSalt: generateASecret(),\n adminJwtToken: generateASecret(),\n database: {\n client: scope.database.client,\n connection: {\n ...scope.database.connection,\n ssl: scope.database.connection?.ssl || false,\n },\n },\n });\n}\n","export interface Options {\n useNpm?: boolean;\n usePnpm?: boolean;\n useYarn?: boolean;\n quickstart?: boolean;\n run?: boolean;\n dbclient?: DBClient;\n skipCloud?: boolean;\n skipDb?: boolean;\n dbhost?: string;\n dbport?: string;\n dbname?: string;\n dbusername?: string;\n dbpassword?: string;\n dbssl?: string;\n dbfile?: string;\n template?: string;\n typescript?: boolean;\n javascript?: boolean;\n install?: boolean;\n example?: boolean;\n gitInit?: boolean;\n templateBranch?: string;\n templatePath?: string;\n}\n\nexport type DBClient = 'mysql' | 'postgres' | 'sqlite';\n\nexport type DBConfig = {\n client: DBClient;\n connection: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n};\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm';\n\nexport interface Scope {\n name: string;\n rootPath: string;\n template?: string;\n templateBranch?: string;\n templatePath?: string;\n strapiVersion?: string;\n installDependencies?: boolean;\n devDependencies?: Record<string, string>;\n dependencies?: Record<string, string>;\n docker?: boolean;\n packageManager: PackageManager;\n runApp?: boolean;\n isQuickstart?: boolean;\n uuid?: string;\n deviceId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExampleApp?: boolean;\n gitInit?: boolean;\n}\n\nexport type ClientName = 'mysql' | 'postgres' | 'sqlite';\n\nexport interface DatabaseInfo {\n client: ClientName;\n connection?: {\n host?: string;\n port?: string;\n database?: string;\n username?: string;\n password?: string;\n filename?: string;\n ssl?: boolean;\n };\n}\n\nexport interface StderrError extends Error {\n stderr: string;\n}\n\nexport function isStderrError(error: unknown): error is StderrError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'stderr' in error &&\n typeof error.stderr === 'string'\n );\n}\n","import chalk from 'chalk';\nimport type { ChalkFunction } from 'chalk';\n\nconst MAX_PREFIX_LENGTH = 8;\n\nconst badge = (text: string, bgColor: ChalkFunction, textColor: ChalkFunction = chalk.black) => {\n const wrappedText = ` ${text} `;\n\n const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);\n\n return ' '.repeat(repeat) + bgColor(textColor(wrappedText));\n};\n\nconst textIndent = (\n text: string | string[],\n indentFirst = true,\n indent: number = MAX_PREFIX_LENGTH + 2\n) => {\n const parts = Array.isArray(text) ? text : [text];\n\n return parts\n .map((part, i) => {\n if (i === 0 && !indentFirst) {\n return part;\n }\n\n return ' '.repeat(indent) + part;\n })\n .join('\\n');\n};\n\nexport const logger = {\n log(message: string | string[]): void {\n console.log(textIndent(message));\n },\n title(title: string, message: string): void {\n const prefix = badge(title, chalk.bgBlueBright);\n console.log(`\\n${prefix} ${message}`);\n },\n info(message: string): void {\n console.log(`${' '.repeat(7)}${chalk.cyan('●')} ${message}`);\n },\n success(message: string): void {\n console.log(`\\n${' '.repeat(7)}${chalk.green('✓')} ${chalk.green(message)}`);\n },\n fatal(message?: string | string[]): never {\n const prefix = badge('Error', chalk.bgRed);\n\n if (message) {\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n }\n\n process.exit(1);\n },\n error(message: string | string[]): void {\n const prefix = badge('Error', chalk.bgRed);\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n warn(message: string | string[]): void {\n const prefix = badge('Warn', chalk.bgYellow);\n console.warn(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n};\n","import { join } from 'node:path';\n\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport fse from 'fs-extra';\n\nimport { copyTemplate } from './utils/template';\nimport { tryGitInit } from './utils/git';\nimport { trackUsage } from './utils/usage';\nimport { createPackageJSON } from './utils/package-json';\nimport { generateDotEnv } from './utils/dot-env';\nimport { isStderrError } from './types';\n\nimport type { Scope } from './types';\nimport { logger } from './utils/logger';\n\nasync function createStrapi(scope: Scope) {\n const { rootPath } = scope;\n try {\n await fse.ensureDir(rootPath);\n await createApp(scope);\n } catch (error) {\n await fse.remove(rootPath);\n\n throw error;\n }\n}\n\nasync function createApp(scope: Scope) {\n const {\n rootPath,\n useTypescript,\n useExampleApp,\n installDependencies,\n isQuickstart,\n template,\n packageManager,\n gitInit,\n runApp,\n } = scope;\n\n await trackUsage({ event: 'willCreateProject', scope });\n\n logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);\n\n if (!isQuickstart) {\n await trackUsage({ event: 'didChooseCustomDatabase', scope });\n } else {\n await trackUsage({ event: 'didChooseQuickstart', scope });\n }\n\n if (!template) {\n let templateName = useExampleApp ? 'example' : 'vanilla';\n\n if (!useTypescript) {\n templateName = `${templateName}-js`;\n }\n\n const internalTemplatePath = join(__dirname, '../templates', templateName);\n if (await fse.exists(internalTemplatePath)) {\n await fse.copy(internalTemplatePath, rootPath);\n }\n } else {\n try {\n logger.info(`${chalk.cyan('Installing template')} ${template}`);\n\n await copyTemplate(scope, rootPath);\n\n logger.success('Template copied successfully.');\n } catch (error) {\n if (error instanceof Error) {\n logger.fatal(`Template installation failed: ${error.message}`);\n }\n\n throw error;\n }\n\n if (!fse.existsSync(join(rootPath, 'package.json'))) {\n logger.fatal(`Missing ${chalk.bold('package.json')} in template`);\n }\n }\n\n await trackUsage({ event: 'didCopyProjectFiles', scope });\n\n try {\n await createPackageJSON(scope);\n\n await trackUsage({ event: 'didWritePackageJSON', scope });\n\n // ensure node_modules is created\n await fse.ensureDir(join(rootPath, 'node_modules'));\n\n // create config/database\n await fse.writeFile(join(rootPath, '.env'), generateDotEnv(scope));\n\n await trackUsage({ event: 'didCopyConfigurationFiles', scope });\n } catch (err) {\n await fse.remove(rootPath);\n throw err;\n }\n\n if (installDependencies) {\n try {\n logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);\n\n await trackUsage({ event: 'willInstallProjectDependencies', scope });\n\n await runInstall(scope);\n\n await trackUsage({ event: 'didInstallProjectDependencies', scope });\n\n logger.success(`Dependencies installed`);\n } catch (error) {\n const stderr = isStderrError(error) ? error.stderr : '';\n\n await trackUsage({\n event: 'didNotInstallProjectDependencies',\n scope,\n error: stderr.slice(-1024),\n });\n\n logger.fatal([\n chalk.bold(\n 'Oh, it seems that you encountered an error while installing dependencies in your project'\n ),\n '',\n `Don't give up, your project was created correctly`,\n '',\n `Fix the issues mentioned in the installation errors and try to run the following command:`,\n '',\n `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`,\n ]);\n }\n }\n\n await trackUsage({ event: 'didCreateProject', scope });\n\n // Init git\n if (gitInit) {\n logger.title('git', 'Initializing git repository.');\n await tryGitInit(rootPath);\n logger.success('Initialized a git repository.');\n }\n\n logger.title('Strapi', `Your application was created!`);\n\n const cmd = chalk.cyan(`${packageManager} run`);\n\n logger.log([\n 'Available commands in your project:',\n '',\n 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',\n `${cmd} develop`,\n '',\n 'Start Strapi without watch mode.',\n `${cmd} start`,\n '',\n 'Build Strapi admin panel.',\n `${cmd} build`,\n '',\n 'Deploy Strapi project.',\n `${cmd} deploy`,\n '',\n 'Display all available commands.',\n `${cmd} strapi\\n`,\n ]);\n\n if (installDependencies) {\n logger.log(['To get started run', '', `${chalk.cyan('cd')} ${rootPath}`, `${cmd} develop`]);\n } else {\n logger.log([\n 'To get started run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n `${chalk.cyan(packageManager)} install`,\n `${cmd} develop`,\n ]);\n }\n\n if (runApp && installDependencies) {\n logger.title('Run', 'Running your Strapi application');\n\n try {\n await trackUsage({ event: 'willStartServer', scope });\n\n await execa(packageManager, ['run', 'develop'], {\n stdio: 'inherit',\n cwd: rootPath,\n env: {\n FORCE_COLOR: '1',\n },\n });\n } catch (error) {\n if (typeof error === 'string' || error instanceof Error) {\n await trackUsage({\n event: 'didNotStartServer',\n scope,\n error,\n });\n }\n\n logger.fatal('Failed to start your Strapi application');\n }\n }\n}\n\nconst installArguments = ['install'];\n\nconst installArgumentsMap = {\n npm: ['--legacy-peer-deps'],\n yarn: ['--network-timeout 1000000'],\n pnpm: [],\n};\n\nfunction runInstall({ rootPath, packageManager }: Scope) {\n const options: execa.Options = {\n cwd: rootPath,\n stdio: 'inherit',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n };\n\n if (packageManager in installArgumentsMap) {\n installArguments.push(...(installArgumentsMap[packageManager] ?? []));\n }\n\n const proc = execa(packageManager, installArguments, options);\n\n return proc;\n}\n\nexport { createStrapi };\n","import chalk from 'chalk';\nimport semver from 'semver';\n\nimport { engines } from './engines';\nimport { logger } from './logger';\n\nexport function checkNodeRequirements() {\n const currentNodeVersion = process.versions.node;\n\n // error if the node version isn't supported\n if (!semver.satisfies(currentNodeVersion, engines.node)) {\n logger.fatal([\n chalk.red(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi requires ${chalk.bold(chalk.green(`Node.js ${engines.node}`))}`,\n 'Please make sure to use the right version of Node.',\n ]);\n }\n\n // warn if not using a LTS version\n else if (semver.major(currentNodeVersion) % 2 !== 0) {\n logger.warn([\n chalk.yellow(`You are running ${chalk.bold(`Node.js ${currentNodeVersion}`)}`),\n `Strapi only supports ${chalk.bold(chalk.green('LTS versions of Node.js'))}, other versions may not be compatible.`,\n ]);\n }\n}\n","import { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport { logger } from './logger';\n\n// Checks if the an empty directory exists at rootPath\nexport async function checkInstallPath(directory: string): Promise<string> {\n const rootPath = resolve(directory);\n\n if (await fse.pathExists(rootPath)) {\n const stat = await fse.stat(rootPath);\n\n if (!stat.isDirectory()) {\n logger.fatal(\n `${chalk.green(\n rootPath\n )} is not a directory. Make sure to create a Strapi application in an empty directory.`\n );\n }\n\n const files = await fse.readdir(rootPath);\n if (files.length > 1) {\n logger.fatal([\n 'You can only create a Strapi app in an empty directory',\n `Make sure ${chalk.green(rootPath)} is empty.`,\n ]);\n }\n }\n\n return rootPath;\n}\n","import { randomUUID } from 'crypto';\nimport { machineIdSync } from 'node-machine-id';\n\nexport function machineID() {\n try {\n const deviceId = machineIdSync();\n return deviceId;\n } catch (error) {\n const deviceId = randomUUID();\n return deviceId;\n }\n}\n","import inquirer from 'inquirer';\nimport type { Question } from 'inquirer';\n\nimport type { Scope, Options, DBClient, DBConfig } from '../types';\nimport { logger } from './logger';\n\nconst DBOptions = ['dbclient', 'dbhost', 'dbport', 'dbname', 'dbusername', 'dbpassword'];\n\nconst VALID_CLIENTS = ['sqlite', 'mysql', 'postgres'] as const;\n\nconst DEFAULT_CONFIG: DBConfig = {\n client: 'sqlite',\n connection: {\n filename: '.tmp/data.db',\n },\n};\n\nasync function dbPrompt() {\n const { useDefault } = await inquirer.prompt<{ useDefault: boolean }>([\n {\n type: 'confirm',\n name: 'useDefault',\n message: 'Do you want to use the default database (sqlite) ?',\n default: true,\n },\n ]);\n\n if (useDefault) {\n return DEFAULT_CONFIG;\n }\n\n const { client } = await inquirer.prompt<{ client: DBClient }>([\n {\n type: 'list',\n name: 'client',\n message: 'Choose your default database client',\n choices: ['sqlite', 'postgres', 'mysql'],\n default: 'sqlite',\n },\n ]);\n\n const questions = dbQuestions[client].map((q) => q({ client }));\n\n const responses = await inquirer.prompt(questions);\n\n return {\n client,\n connection: responses,\n };\n}\n\nexport async function getDatabaseInfos(options: Options): Promise<DBConfig> {\n if (options.skipDb) {\n return DEFAULT_CONFIG;\n }\n\n if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {\n logger.fatal(\n `Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`\n );\n }\n\n const matchingArgs = DBOptions.filter((key) => key in options);\n const missingArgs = DBOptions.filter((key) => !(key in options));\n\n if (\n matchingArgs.length > 0 &&\n matchingArgs.length !== DBOptions.length &&\n options.dbclient !== 'sqlite'\n ) {\n logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);\n }\n\n const hasDBOptions = DBOptions.some((key) => key in options);\n\n if (!hasDBOptions) {\n if (options.quickstart) {\n return DEFAULT_CONFIG;\n }\n\n return dbPrompt();\n }\n\n if (!options.dbclient) {\n return logger.fatal('Please specify the database client');\n }\n\n const database: DBConfig = {\n client: options.dbclient,\n connection: {\n host: options.dbhost,\n port: options.dbport,\n database: options.dbname,\n username: options.dbusername,\n password: options.dbpassword,\n filename: options.dbfile,\n },\n };\n\n if (options.dbssl !== undefined) {\n database.connection.ssl = options.dbssl === 'true';\n }\n\n return database;\n}\n\nconst sqlClientModule = {\n mysql: { mysql2: '3.9.4' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '9.4.3' },\n};\n\nexport function addDatabaseDependencies(scope: Scope) {\n scope.dependencies = {\n ...scope.dependencies,\n ...sqlClientModule[scope.database.client],\n };\n}\n\ninterface QuestionFactory {\n (options: { client: DBClient }): Question;\n}\n\nconst DEFAULT_PORTS = {\n postgres: 5432,\n mysql: 3306,\n sqlite: undefined,\n};\n\nconst database: QuestionFactory = () => ({\n type: 'input',\n name: 'database',\n message: 'Database name:',\n default: 'strapi',\n validate(value: string) {\n if (value.includes('.')) {\n return `The database name can't contain a \".\"`;\n }\n\n return true;\n },\n});\n\nconst host: QuestionFactory = () => ({\n type: 'input',\n name: 'host',\n message: 'Host:',\n default: '127.0.0.1',\n});\n\nconst port: QuestionFactory = ({ client }) => ({\n type: 'input',\n name: 'port',\n message: 'Port:',\n default: DEFAULT_PORTS[client],\n});\n\nconst username: QuestionFactory = () => ({\n type: 'input',\n name: 'username',\n message: 'Username:',\n});\n\nconst password: QuestionFactory = () => ({\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n});\n\nconst ssl: QuestionFactory = () => ({\n type: 'confirm',\n name: 'ssl',\n message: 'Enable SSL connection:',\n default: false,\n});\n\nconst filename: QuestionFactory = () => ({\n type: 'input',\n name: 'filename',\n message: 'Filename:',\n default: '.tmp/data.db',\n});\n\nconst dbQuestions = {\n sqlite: [filename],\n postgres: [database, host, port, username, password, ssl],\n mysql: [database, host, port, username, password, ssl],\n};\n","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 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.useExampleApp = false;\n } else if (options.example === true || options.quickstart) {\n scope.useExampleApp = true;\n } else if (options.example === false) {\n scope.useExampleApp = false;\n } else {\n scope.useExampleApp = 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":["directory","gitInit","installDependencies","_","logger","cloudServices","cloudCli","e","url","path","join","database","prompts.directory","os","prompts.example","prompts.typescript","prompts.installDependencies","prompts.gitInit"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,eAAe,YAAY;AACzB,QAAM,EAAE,WAAAA,WAAc,IAAA,MAAM,SAAS,OAElC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEMA,SAAAA;AACT;AAEA,eAAe,aAAa;AAC1B,QAAM,EAAE,cAAA,IAAkB,MAAM,SAAS,OAEtC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAEA,eAAe,UAAU;AACvB,QAAM,EAAE,cAAA,IAAkB,MAAM,SAAS,OAEtC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAEA,eAAe,UAAU;AACvB,QAAM,EAAE,SAAAC,SAAY,IAAA,MAAM,SAAS,OAEhC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEMA,SAAAA;AACT;AAEA,eAAe,oBAAoB,gBAAwB;AACzD,QAAM,EAAE,qBAAAC,qBAAwB,IAAA,MAAM,SAAS,OAE5C;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,6BAA6B,cAAc;AAAA,MACpD,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEMA,SAAAA;AACT;ACvEA,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;AAC9D,UAAA,QAAQ,IAAI,OAAO,IAAI,KAAK,WAAW,KAAK,KAAK,GAAG;AACjD,aAAA,OAAO,QAAQ,OAAO,CAACC,IAAG,OAAO,cAAc,GAAG,KAAK,CAAC,CAAC;AAAA,EACpE;AAEO,SAAA;AACT;ACZA,SAAS,iBAAiB,GAAqC;AACxD,MAAA,EAAiB,aAAa,QAAW;AAC5C,UAAM,MAAM,qBAAqB;AAAA,EACnC;AACF;AAEA,eAAsB,mBAAkC;AAChD,QAAAC,UAASC,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,QAAAD,QAAQ,CAAA;AACtE,QAAM,sBACJ;AAEE,MAAA;AACF,UAAM,EAAE,MAAM,OAAA,IAAW,MAAM,gBAAgB,OAAO;AACtD,IAAAA,QAAO,IAAI,aAAa,OAAO,gBAAgB,SAAS,CAAC;AAAA,WAClD,GAAY;AACnB,IAAAA,QAAO,MAAM,CAAC;AACd,IAAAA,QAAO,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,IACnC;AAAA,EAAA,CACD;AAED,MAAI,eAAe,QAAQ;AACzB,UAAM,aAAa;AAAA,MACjB,QAAAA;AAAA,MACA,KAAK,QAAQ,IAAI;AAAA,IAAA;AAGf,QAAA;AACI,YAAAE,IAAS,MAAM,OAAO,UAAU;AAAA,aAC/B,GAAiC;AACxC,MAAAF,QAAO,MAAM,CAAC;AACV,UAAA;AACF,yBAAiB,CAAC;AACd,YAAA,EAAE,SAAS,WAAW,KAAK;AACvB,gBAAA,UACJ,OAAO,EAAE,SAAS,SAAS,WACvB,EAAE,SAAS,OACX;AACN,UAAAA,QAAO,KAAK,OAAO;AACnB;AAAA,QACF;AAAA,eACOG,IAAG;AAAA,MAEZ;AACA,MAAAH,QAAO,MAAM,mBAAmB;AAAA,IAClC;AAAA,EACF;AACF;AC5DA,MAAM,qBAAqB,CAAC,QAAgB;AACnC,SAAA,IAAI,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAChD;AAGsB,eAAA,aAAa,OAAc,UAAkB;AAC3D,QAAA,EAAE,SAAa,IAAA;AAErB,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,MAAI,MAAM,mBAAmB,UAAU,MAAM,cAAc,GAAG;AACtD,UAAA;AAAA,MACJ,MACE,mBAAmB,UAAU;AAAA,QAC3B,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ,MAAM;AAAA,QACd,SAAS,aAAa,QAAQ;AAAA,MAAA,CAC/B;AAAA,MACH;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,KAAK,SAAS;AACpB,kBAAQ,IAAI,8CAA8C,OAAO,YAAY,GAAG,EAAE;AAAA,QACpF;AAAA,MACF;AAAA,IAAA;AAGF;AAAA,EACF;AAEI,MAAA,gBAAgB,QAAQ,GAAG;AACvB,UAAA,WAAW,SAAS,WAAW,SAAS,IAAI,IAAI,cAAc,QAAQ,IAAI;AAE1E,UAAA,IAAI,KAAK,UAAU,QAAQ;AAAA,EACnC;AAEI,MAAA,kBAAkB,QAAQ,GAAG;AACzB,UAAA,CAAC,OAAO,MAAM,GAAG,YAAY,IAAI,SAAS,MAAM,GAAG;AACzD,UAAM,UAAU,aAAa,SAAS,aAAa,KAAK,GAAG,IAAI,MAAM;AAE/D,UAAA;AAAA,MACJ,MAAM,mBAAmB,UAAU,EAAE,OAAO,MAAM,QAAQ,MAAM,gBAAgB,SAAS;AAAA,MACzF;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,KAAK,SAAS;AACpB,kBAAQ,IAAI,8CAA8C,OAAO,YAAY,GAAG,EAAE;AAAA,QACpF;AAAA,MACF;AAAA,IAAA;AAGF;AAAA,EACF;AAEI,MAAA,aAAa,QAAQ,GAAG;AACpBI,UAAAA,OAAM,IAAI,IAAI,QAAQ;AAE5B,UAAM,CAAC,OAAO,MAAM,GAAG,QAAQ,GAAG,YAAY,IAAI;AAAA,MAChDA,KAAI,SAAS,MAAM,CAAC;AAAA,IAAA,EACpB,MAAM,GAAG;AAEP,QAAA,MAAM,UAAa,MAAM,QAAQ;AACnC,YAAM,IAAI,MAAM,gCAAgC,QAAQ,EAAE;AAAA,IAC5D;AAEA,QAAI,MAAM,gBAAgB;AACxB,YAAM,mBAAmB,UAAU;AAAA,QACjC;AAAA,QACA;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,MAAA,CAChB;AAAA,IACH;AAEM,UAAA;AAAA,MACJ,MACE,mBAAmB,UAAU;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,QAAQ,mBAAmB,MAAM,KAAK,MAAM;AAAA,QAC5C,SAAS,aAAa,SAClB,mBAAmB,aAAa,KAAK,GAAG,CAAC,IACzC,MAAM;AAAA,MAAA,CACX;AAAA,MACH;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,KAAK,SAAS;AACpB,kBAAQ,IAAI,8CAA8C,OAAO,YAAY,GAAG,EAAE;AAAA,QACpF;AAAA,MACF;AAAA,IAAA;AAGF,UAAM,IAAI,MAAM,gCAAgC,QAAQ,EAAE;AAAA,EAC5D;AACF;AASA,eAAe,mBAAmB,UAAkB,EAAE,OAAO,MAAM,QAAQ,WAAqB;AACxF,QAAA,WAAW,UAAU,QAAQ,MAAM,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG,IAAI;AAErE,MAAI,kBAAkB,gCAAgC,KAAK,IAAI,IAAI;AACnE,MAAI,UAAU;AACM,sBAAA,GAAG,eAAe,IAAI,QAAQ;AAAA,EAClD;AAEA,MAAI,QAAQ;AACQ,sBAAA,GAAG,eAAe,QAAQ,MAAM;AAAA,EACpD;AAEM,QAAA,WAAW,MAAM,MAAM,iBAAiB;AAAA,IAC5C,QAAQ;AAAA,EAAA,CACT;AAEG,MAAA,SAAS,WAAW,KAAK;AAC3B,UAAM,IAAI;AAAA,MACR,mDAAmD,KAAK,IAAI,IAAI,GAAG,SAAS,cAAc,MAAM,KAAK,EAAE,GAAG,WAAW,YAAY,QAAQ,KAAK,EAAE;AAAA,IAAA;AAAA,EAEpJ;AAEA,MAAIA,OAAM,gCAAgC,KAAK,IAAI,IAAI;AAEvD,MAAI,QAAQ;AACVA,WAAM,GAAGA,IAAG,IAAI,MAAM;AAAA,EACxB;AAEM,QAAA,MAAM,MAAM,MAAMA,IAAG;AAEvB,MAAA,CAAC,IAAI,MAAM;AACb,UAAM,IAAI,MAAM,sBAAsBA,IAAG,EAAE;AAAA,EAC7C;AAEM,QAAA;AAAA;AAAA,IAEJ,SAAS,QAAQ,IAAI,IAAI;AAAA,IACzB,IAAI,EAAE;AAAA,MACJ,KAAK;AAAA,MACL,OAAO,WAAW,SAAS,MAAM,GAAG,EAAE,SAAS,IAAI;AAAA,MACnD,OAAOC,OAAM;AACX,YAAI,UAAU;AACLA,iBAAAA,MAAK,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,WAAW,QAAQ;AAAA,QAC/D;AAEO,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;AAEA,SAAS,gBAAgB,UAAkB;AACzC,SACE,SAAS,WAAW,SAAS,KAC7B,IAAI,WAAW,KAAK,WAAW,QAAQ,IAAI,WAAW,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,CAAC;AAE/F;AAEA,SAAS,kBAAkB,OAAe;AACpC,MAAA,WAAW,KAAK,GAAG;AACd,WAAA;AAAA,EACT;AAEO,SAAA,gCAAgC,KAAK,KAAK;AACnD;AAEA,SAAS,aAAa,OAAe;AAC/B,MAAA;AACID,UAAAA,OAAM,IAAI,IAAI,KAAK;AAEzB,WAAOA,KAAI,WAAW;AAAA,EAAA,QAChB;AACC,WAAA;AAAA,EACT;AACF;AAEA,SAAS,WAAW,OAAe;AAC7B,MAAA;AAEF,QAAI,IAAI,KAAK;AACN,WAAA;AAAA,EAAA,QACD;AACC,WAAA;AAAA,EACT;AACF;AAEA,eAAe,mBAAmB,UAAkB,QAA4B;AAC1E,MAAA,WAAW,QAAQ,GAAG;AACjB,WAAA;AAAA,EACT;AAEA,QAAM,MAAM,MAAM;AAAA,IAChB,iEAAiE,QAAQ,IAAI,SAAS,OAAO,MAAM,KAAK,EAAE;AAAA,IAC1G,EAAE,QAAQ,OAAO;AAAA,EAAA;AAGnB,SAAO,IAAI,WAAW;AACxB;ACjNA,eAAe,kBAAkB,SAAiB;AAC5C,MAAA;AACI,UAAA,MAAM,OAAO,CAAC,aAAa,uBAAuB,GAAG,EAAE,OAAO,UAAU,KAAK,QAAS,CAAA;AACrF,WAAA;AAAA,WACAL,IAAG;AACH,WAAA;AAAA,EACT;AACF;AAEA,eAAe,wBAAwB,SAAiB;AAClD,MAAA;AACF,UAAM,MAAM,MAAM,CAAC,QAAQ,KAAK,MAAM,GAAG,EAAE,OAAO,UAAU,KAAK,QAAS,CAAA;AACnE,WAAA;AAAA,WACAA,IAAG;AACH,WAAA;AAAA,EACT;AACF;AAEA,eAAsB,WAAW,SAAiB;AAC5C,MAAA;AACI,UAAA,MAAM,OAAO,CAAC,WAAW,GAAG,EAAE,OAAO,UAAU;AACrD,QAAK,MAAM,kBAAkB,OAAO,KAAO,MAAM,wBAAwB,OAAO,GAAI;AAC3E,aAAA;AAAA,IACT;AAEM,UAAA,MAAM,OAAO,CAAC,MAAM,GAAG,EAAE,OAAO,UAAU,KAAK,QAAA,CAAS;AAExD,UAAA,MAAM,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,UAAU,KAAK,QAAS,CAAA;AAClE,UAAM,MAAM,OAAO,CAAC,UAAU,MAAM,4BAA4B,GAAG;AAAA,MACjE,OAAO;AAAA,MACP,KAAK;AAAA,IAAA,CACN;AAEM,WAAA;AAAA,WACA,GAAG;AACF,YAAA,MAAM,yCAAyC,CAAC;AACjD,WAAA;AAAA,EACT;AACF;AChCA,SAAS,6BAA6B,UAAmC,OAAc;AACrF,QAAM,EAAE,oBAAoB,GAAO,IAAA;AAE5B,SAAA,EAAE,SAAS,UAAU,iBAAiB;AAC/C;AAEA,MAAM,gBAAgB,CAAC,OAAc,UAAuB;AAC1D,QAAM,kBAAkB;AAAA,IACtB,OAAO,OAAO,UAAU,WAAW,QAAQ,SAAS,MAAM;AAAA,EAAA;AAG5D,QAAM,iBAAiB;AAAA,IACrB,IAAI,GAAG,KAAK;AAAA,IACZ,YAAY,GAAG,SAAS;AAAA,IACxB,QAAQ,GAAG,KAAK;AAAA,IAChB,WAAW,GAAG,QAAQ;AAAA,IACtB,aAAa,QAAQ,SAAS;AAAA,EAAA;AAGhC,QAAM,kBAAkB;AAAA,IACtB,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,SAAS,MAAM,mBAAmB;AAAA,IAClC,gBAAgB,MAAM;AAAA,IACtB,uBAAuB,MAAM;AAAA,IAC7B,sBAAsB,MAAM;AAAA,IAC5B,uBAAuB,QAAQ,IAAI,mBAAmB;AAAA,IACtD,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,IACxC,WAAW,MAAM;AAAA,EAAA;AAGZ,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,6BAA6B,iBAAiB,KAAK;AAAA,EAAA;AAExE;AAEA,SAAS,WAAW,OAAe,SAAkC;AAC/D,MAAA,QAAQ,IAAI,aAAa,QAAQ;AACnC;AAAA,EACF;AAEI,MAAA;AACF,WAAO,MAAM,4CAA4C;AAAA,MACvD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,GAAG;AAAA,MAAA,CACJ;AAAA,MACD,QAAQ,YAAY,QAAQ,GAAI;AAAA,MAChC,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,MACpB;AAAA,IAAA,CACD,EAAE,MAAM,MAAM;AAAA,IAAA,CAAE;AAAA,WACV,KAAK;AAEZ,WAAO,QAAQ;EACjB;AACF;AAEA,eAAsB,WAAW,EAAE,OAAO,SAA+C;AACjF,QAAA,aAAa,cAAc,OAAO,KAAK;AAEzC,MAAA;AACK,WAAA,MAAM,WAAW,uBAAuB;AAAA,MAC7C,UAAU,MAAM;AAAA,MAChB,GAAG;AAAA,IAAA,CACJ;AAAA,WACM,KAAK;AAEZ,WAAO,QAAQ;EACjB;AACF;AAEA,eAAsB,WAAW;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACK,QAAA,aAAa,cAAc,OAAO,KAAK;AAEzC,MAAA;AACK,WAAA,MAAM,WAAW,OAAO;AAAA,MAC7B,UAAU,MAAM;AAAA,MAChB,GAAG;AAAA,IAAA,CACJ;AAAA,WACM,KAAK;AAEZ,WAAO,QAAQ;EACjB;AACF;ACxGO,MAAM,UAAU;AAAA,EACrB,MAAM;AAAA,EACN,KAAK;AACP;ACIA,eAAsB,kBAAkB,OAAc;AACpD,QAAM,EAAE,gBAAA,IAAoB,MAAM,OAAO,mBAAmB;AAE5D,QAAM,cAAc,KAAK,MAAM,UAAU,cAAc;AAEjD,QAAA,cAAc,MAAM,IAAI,SAAS,WAAW,EAAE,MAAM,OAAO,CAAG,EAAA;AAEpE,QAAM,MAAM;AAAA,IACV,MAAM,UAAU,MAAM,IAAI;AAAA,IAC1B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB,MAAM,mBAAmB,CAAC;AAAA,IAC3C,cAAc,MAAM,gBAAgB,CAAC;AAAA,IACrC,QAAQ;AAAA,MACN,GAAI,MAAM,qBAAqB,CAAC;AAAA,MAChC,MAAM,MAAM;AAAA,IACd;AAAA,IACA;AAAA,EAAA;AAII,QAAA,IAAI,UAAU,aAAa,gBAAgB,MAAM,aAAa,GAAG,CAAC,GAAG;AAAA,IACzE,QAAQ;AAAA,EAAA,CACT;AACH;AC3BA,MAAM,kBAAkB,MAAM,OAAO,YAAY,EAAE,EAAE,SAAS,QAAQ;AAEtE,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBT,SAAS,eAAe,OAAc;AACrC,QAAA,UAAU,EAAE,SAAS,OAAO;AAElC,SAAO,QAAQ;AAAA,IACb,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,eAAe,EAAE,KAAK,GAAG;AAAA,IAC9D,cAAc,gBAAgB;AAAA,IAC9B,mBAAmB,gBAAgB;AAAA,IACnC,eAAe,gBAAgB;AAAA,IAC/B,UAAU;AAAA,MACR,QAAQ,MAAM,SAAS;AAAA,MACvB,YAAY;AAAA,QACV,GAAG,MAAM,SAAS;AAAA,QAClB,KAAK,MAAM,SAAS,YAAY,OAAO;AAAA,MACzC;AAAA,IACF;AAAA,EAAA,CACD;AACH;ACyCO,SAAS,cAAc,OAAsC;AAEhE,SAAA,OAAO,UAAU,YACjB,UAAU,QACV,YAAY,SACZ,OAAO,MAAM,WAAW;AAE5B;AC1FA,MAAM,oBAAoB;AAE1B,MAAM,QAAQ,CAAC,MAAc,SAAwB,YAA2B,MAAM,UAAU;AACxF,QAAA,cAAc,IAAI,IAAI;AAE5B,QAAM,SAAS,KAAK,IAAI,GAAG,oBAAoB,YAAY,MAAM;AAEjE,SAAO,IAAI,OAAO,MAAM,IAAI,QAAQ,UAAU,WAAW,CAAC;AAC5D;AAEA,MAAM,aAAa,CACjB,MACA,cAAc,MACd,SAAiB,oBAAoB,MAClC;AACH,QAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAEhD,SAAO,MACJ,IAAI,CAAC,MAAM,MAAM;AACZ,QAAA,MAAM,KAAK,CAAC,aAAa;AACpB,aAAA;AAAA,IACT;AAEO,WAAA,IAAI,OAAO,MAAM,IAAI;AAAA,EAAA,CAC7B,EACA,KAAK,IAAI;AACd;AAEO,MAAM,SAAS;AAAA,EACpB,IAAI,SAAkC;AAC5B,YAAA,IAAI,WAAW,OAAO,CAAC;AAAA,EACjC;AAAA,EACA,MAAM,OAAe,SAAuB;AAC1C,UAAM,SAAS,MAAM,OAAO,MAAM,YAAY;AAC9C,YAAQ,IAAI;AAAA,EAAK,MAAM,KAAK,OAAO,EAAE;AAAA,EACvC;AAAA,EACA,KAAK,SAAuB;AAC1B,YAAQ,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC,KAAK,OAAO,EAAE;AAAA,EAC9D;AAAA,EACA,QAAQ,SAAuB;AAC7B,YAAQ,IAAI;AAAA,EAAK,IAAI,OAAO,CAAC,CAAC,GAAG,MAAM,MAAM,GAAG,CAAC,KAAK,MAAM,MAAM,OAAO,CAAC,EAAE;AAAA,EAC9E;AAAA,EACA,MAAM,SAAoC;AACxC,UAAM,SAAS,MAAM,SAAS,MAAM,KAAK;AAEzC,QAAI,SAAS;AACX,cAAQ,MAAM;AAAA,EAAK,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,CAAI;AAAA,IAC9D;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,MAAM,SAAkC;AACtC,UAAM,SAAS,MAAM,SAAS,MAAM,KAAK;AACzC,YAAQ,MAAM;AAAA,EAAK,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,CAAI;AAAA,EAC9D;AAAA,EACA,KAAK,SAAkC;AACrC,UAAM,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAC3C,YAAQ,KAAK;AAAA,EAAK,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,CAAI;AAAA,EAC7D;AACF;AC9CA,eAAe,aAAa,OAAc;AAClC,QAAA,EAAE,SAAa,IAAA;AACjB,MAAA;AACI,UAAA,IAAI,UAAU,QAAQ;AAC5B,UAAM,UAAU,KAAK;AAAA,WACd,OAAO;AACR,UAAA,IAAI,OAAO,QAAQ;AAEnB,UAAA;AAAA,EACR;AACF;AAEA,eAAe,UAAU,OAAc;AAC/B,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,qBAAAD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAAD;AAAA,IACA;AAAA,EACE,IAAA;AAEJ,QAAM,WAAW,EAAE,OAAO,qBAAqB,MAAO,CAAA;AAEtD,SAAO,MAAM,UAAU,iCAAiC,MAAM,MAAM,QAAQ,CAAC,EAAE;AAE/E,MAAI,CAAC,cAAc;AACjB,UAAM,WAAW,EAAE,OAAO,2BAA2B,MAAO,CAAA;AAAA,EAAA,OACvD;AACL,UAAM,WAAW,EAAE,OAAO,uBAAuB,MAAO,CAAA;AAAA,EAC1D;AAEA,MAAI,CAAC,UAAU;AACT,QAAA,eAAe,gBAAgB,YAAY;AAE/C,QAAI,CAAC,eAAe;AAClB,qBAAe,GAAG,YAAY;AAAA,IAChC;AAEA,UAAM,uBAAuBS,OAAK,WAAW,gBAAgB,YAAY;AACzE,QAAI,MAAM,IAAI,OAAO,oBAAoB,GAAG;AACpC,YAAA,IAAI,KAAK,sBAAsB,QAAQ;AAAA,IAC/C;AAAA,EAAA,OACK;AACD,QAAA;AACK,aAAA,KAAK,GAAG,MAAM,KAAK,qBAAqB,CAAC,IAAI,QAAQ,EAAE;AAExD,YAAA,aAAa,OAAO,QAAQ;AAElC,aAAO,QAAQ,+BAA+B;AAAA,aACvC,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,eAAO,MAAM,iCAAiC,MAAM,OAAO,EAAE;AAAA,MAC/D;AAEM,YAAA;AAAA,IACR;AAEA,QAAI,CAAC,IAAI,WAAWA,OAAK,UAAU,cAAc,CAAC,GAAG;AACnD,aAAO,MAAM,WAAW,MAAM,KAAK,cAAc,CAAC,cAAc;AAAA,IAClE;AAAA,EACF;AAEA,QAAM,WAAW,EAAE,OAAO,uBAAuB,MAAO,CAAA;AAEpD,MAAA;AACF,UAAM,kBAAkB,KAAK;AAE7B,UAAM,WAAW,EAAE,OAAO,uBAAuB,MAAO,CAAA;AAGxD,UAAM,IAAI,UAAUA,OAAK,UAAU,cAAc,CAAC;AAG5C,UAAA,IAAI,UAAUA,OAAK,UAAU,MAAM,GAAG,eAAe,KAAK,CAAC;AAEjE,UAAM,WAAW,EAAE,OAAO,6BAA6B,MAAO,CAAA;AAAA,WACvD,KAAK;AACN,UAAA,IAAI,OAAO,QAAQ;AACnB,UAAA;AAAA,EACR;AAEA,MAAIR,sBAAqB;AACnB,QAAA;AACF,aAAO,MAAM,QAAQ,gCAAgC,MAAM,KAAK,cAAc,CAAC,EAAE;AAEjF,YAAM,WAAW,EAAE,OAAO,kCAAkC,MAAO,CAAA;AAEnE,YAAM,WAAW,KAAK;AAEtB,YAAM,WAAW,EAAE,OAAO,iCAAiC,MAAO,CAAA;AAElE,aAAO,QAAQ,wBAAwB;AAAA,aAChC,OAAO;AACd,YAAM,SAAS,cAAc,KAAK,IAAI,MAAM,SAAS;AAErD,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP;AAAA,QACA,OAAO,OAAO,MAAM,KAAK;AAAA,MAAA,CAC1B;AAED,aAAO,MAAM;AAAA,QACX,MAAM;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,MAAM,MAAM,QAAQ,CAAC,OAAO,MAAM,KAAK,cAAc,CAAC;AAAA,MAAA,CAC7D;AAAA,IACH;AAAA,EACF;AAEA,QAAM,WAAW,EAAE,OAAO,oBAAoB,MAAO,CAAA;AAGrD,MAAID,UAAS;AACJ,WAAA,MAAM,OAAO,8BAA8B;AAClD,UAAM,WAAW,QAAQ;AACzB,WAAO,QAAQ,+BAA+B;AAAA,EAChD;AAEO,SAAA,MAAM,UAAU,+BAA+B;AAEtD,QAAM,MAAM,MAAM,KAAK,GAAG,cAAc,MAAM;AAE9C,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAG,GAAG;AAAA;AAAA,EAAA,CACP;AAED,MAAIC,sBAAqB;AACvB,WAAO,IAAI,CAAC,sBAAsB,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,GAAG,GAAG,UAAU,CAAC;AAAA,EAAA,OACrF;AACL,WAAO,IAAI;AAAA,MACT;AAAA,MACA;AAAA,MACA,GAAG,MAAM,KAAK,IAAI,CAAC,IAAI,QAAQ;AAAA,MAC/B,GAAG,MAAM,KAAK,cAAc,CAAC;AAAA,MAC7B,GAAG,GAAG;AAAA,IAAA,CACP;AAAA,EACH;AAEA,MAAI,UAAUA,sBAAqB;AAC1B,WAAA,MAAM,OAAO,iCAAiC;AAEjD,QAAA;AACF,YAAM,WAAW,EAAE,OAAO,mBAAmB,MAAO,CAAA;AAEpD,YAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,GAAG;AAAA,QAC9C,OAAO;AAAA,QACP,KAAK;AAAA,QACL,KAAK;AAAA,UACH,aAAa;AAAA,QACf;AAAA,MAAA,CACD;AAAA,aACM,OAAO;AACd,UAAI,OAAO,UAAU,YAAY,iBAAiB,OAAO;AACvD,cAAM,WAAW;AAAA,UACf,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAEA,aAAO,MAAM,yCAAyC;AAAA,IACxD;AAAA,EACF;AACF;AAEA,MAAM,mBAAmB,CAAC,SAAS;AAEnC,MAAM,sBAAsB;AAAA,EAC1B,KAAK,CAAC,oBAAoB;AAAA,EAC1B,MAAM,CAAC,2BAA2B;AAAA,EAClC,MAAM,CAAC;AACT;AAEA,SAAS,WAAW,EAAE,UAAU,kBAAyB;AACvD,QAAM,UAAyB;AAAA,IAC7B,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,EAAA;AAGF,MAAI,kBAAkB,qBAAqB;AACzC,qBAAiB,KAAK,GAAI,oBAAoB,cAAc,KAAK,CAAG,CAAA;AAAA,EACtE;AAEA,QAAM,OAAO,MAAM,gBAAgB,kBAAkB,OAAO;AAErD,SAAA;AACT;ACjOO,SAAS,wBAAwB;AAChC,QAAA,qBAAqB,QAAQ,SAAS;AAG5C,MAAI,CAAC,OAAO,UAAU,oBAAoB,QAAQ,IAAI,GAAG;AACvD,WAAO,MAAM;AAAA,MACX,MAAM,IAAI,mBAAmB,MAAM,KAAK,WAAW,kBAAkB,EAAE,CAAC,EAAE;AAAA,MAC1E,mBAAmB,MAAM,KAAK,MAAM,MAAM,WAAW,QAAQ,IAAI,EAAE,CAAC,CAAC;AAAA,MACrE;AAAA,IAAA,CACD;AAAA,EAAA,WAIM,OAAO,MAAM,kBAAkB,IAAI,MAAM,GAAG;AACnD,WAAO,KAAK;AAAA,MACV,MAAM,OAAO,mBAAmB,MAAM,KAAK,WAAW,kBAAkB,EAAE,CAAC,EAAE;AAAA,MAC7E,wBAAwB,MAAM,KAAK,MAAM,MAAM,yBAAyB,CAAC,CAAC;AAAA,IAAA,CAC3E;AAAA,EACH;AACF;ACnBA,eAAsB,iBAAiBF,YAAoC;AACnE,QAAA,WAAW,QAAQA,UAAS;AAElC,MAAI,MAAM,IAAI,WAAW,QAAQ,GAAG;AAClC,UAAM,OAAO,MAAM,IAAI,KAAK,QAAQ;AAEhC,QAAA,CAAC,KAAK,eAAe;AAChB,aAAA;AAAA,QACL,GAAG,MAAM;AAAA,UACP;AAAA,QACD,CAAA;AAAA,MAAA;AAAA,IAEL;AAEA,UAAM,QAAQ,MAAM,IAAI,QAAQ,QAAQ;AACpC,QAAA,MAAM,SAAS,GAAG;AACpB,aAAO,MAAM;AAAA,QACX;AAAA,QACA,aAAa,MAAM,MAAM,QAAQ,CAAC;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EACF;AAEO,SAAA;AACT;AC3BO,SAAS,YAAY;AACtB,MAAA;AACF,UAAM,WAAW;AACV,WAAA;AAAA,WACA,OAAO;AACd,UAAM,WAAW;AACV,WAAA;AAAA,EACT;AACF;ACLA,MAAM,YAAY,CAAC,YAAY,UAAU,UAAU,UAAU,cAAc,YAAY;AAEvF,MAAM,gBAAgB,CAAC,UAAU,SAAS,UAAU;AAEpD,MAAM,iBAA2B;AAAA,EAC/B,QAAQ;AAAA,EACR,YAAY;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAEA,eAAe,WAAW;AACxB,QAAM,EAAE,WAAA,IAAe,MAAM,SAAS,OAAgC;AAAA,IACpE;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAED,MAAI,YAAY;AACP,WAAA;AAAA,EACT;AAEA,QAAM,EAAE,OAAA,IAAW,MAAM,SAAS,OAA6B;AAAA,IAC7D;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,UAAU,YAAY,OAAO;AAAA,MACvC,SAAS;AAAA,IACX;AAAA,EAAA,CACD;AAEK,QAAA,YAAY,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAQ,CAAA,CAAC;AAE9D,QAAM,YAAY,MAAM,SAAS,OAAO,SAAS;AAE1C,SAAA;AAAA,IACL;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;AAEA,eAAsB,iBAAiB,SAAqC;AAC1E,MAAI,QAAQ,QAAQ;AACX,WAAA;AAAA,EACT;AAEA,MAAI,QAAQ,YAAY,CAAC,cAAc,SAAS,QAAQ,QAAQ,GAAG;AAC1D,WAAA;AAAA,MACL,uBAAuB,QAAQ,QAAQ,qBAAqB,cAAc,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAExF;AAEA,QAAM,eAAe,UAAU,OAAO,CAAC,QAAQ,OAAO,OAAO;AAC7D,QAAM,cAAc,UAAU,OAAO,CAAC,QAAQ,EAAE,OAAO,QAAQ;AAG7D,MAAA,aAAa,SAAS,KACtB,aAAa,WAAW,UAAU,UAClC,QAAQ,aAAa,UACrB;AACA,WAAO,MAAM,4CAA4C,YAAY,KAAK,IAAI,CAAC,GAAG;AAAA,EACpF;AAEA,QAAM,eAAe,UAAU,KAAK,CAAC,QAAQ,OAAO,OAAO;AAE3D,MAAI,CAAC,cAAc;AACjB,QAAI,QAAQ,YAAY;AACf,aAAA;AAAA,IACT;AAEA,WAAO,SAAS;AAAA,EAClB;AAEI,MAAA,CAAC,QAAQ,UAAU;AACd,WAAA,OAAO,MAAM,oCAAoC;AAAA,EAC1D;AAEA,QAAMW,YAAqB;AAAA,IACzB,QAAQ,QAAQ;AAAA,IAChB,YAAY;AAAA,MACV,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,IACpB;AAAA,EAAA;AAGE,MAAA,QAAQ,UAAU,QAAW;AAC/BA,cAAS,WAAW,MAAM,QAAQ,UAAU;AAAA,EAC9C;AAEOA,SAAAA;AACT;AAEA,MAAM,kBAAkB;AAAA,EACtB,OAAO,EAAE,QAAQ,QAAQ;AAAA,EACzB,UAAU,EAAE,IAAI,QAAQ;AAAA,EACxB,QAAQ,EAAE,kBAAkB,QAAQ;AACtC;AAEO,SAAS,wBAAwB,OAAc;AACpD,QAAM,eAAe;AAAA,IACnB,GAAG,MAAM;AAAA,IACT,GAAG,gBAAgB,MAAM,SAAS,MAAM;AAAA,EAAA;AAE5C;AAMA,MAAM,gBAAgB;AAAA,EACpB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AACV;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS,OAAe;AAClB,QAAA,MAAM,SAAS,GAAG,GAAG;AAChB,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACT;AACF;AAEA,MAAM,OAAwB,OAAO;AAAA,EACnC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,OAAwB,CAAC,EAAE,cAAc;AAAA,EAC7C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,cAAc,MAAM;AAC/B;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AACX;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AACR;AAEA,MAAM,MAAuB,OAAO;AAAA,EAClC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,WAA4B,OAAO;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,cAAc;AAAA,EAClB,QAAQ,CAAC,QAAQ;AAAA,EACjB,UAAU,CAAC,UAAU,MAAM,MAAM,UAAU,UAAU,GAAG;AAAA,EACxD,OAAO,CAAC,UAAU,MAAM,MAAM,UAAU,UAAU,GAAG;AACvD;ACzKA,MAAM,EAAE,YAAY,IAAI,aAAaD,OAAK,WAAW,MAAM,cAAc,CAAC;AAE1E,MAAM,UAAU,IAAI,UAAU,QAAQ,mBAAmB,EACtD,QAAQ,OAAO,EACf,UAAU,aAAa,EACvB,MAAM,uBAAuB,EAC7B,OAAO,gBAAgB,sCAAsC,EAC7D,OAAO,YAAY,mDAAmD,EAGtE,OAAO,sBAAsB,kDAAkD,EAC/E,OAAO,sBAAsB,wCAAwC,EAGrE,OAAO,aAAa,wCAAwC,EAC5D,OAAO,cAAc,yCAAyC,EAC9D,OAAO,cAAc,yCAAyC,EAG9D,OAAO,aAAa,sBAAsB,EAC1C,OAAO,gBAAgB,6BAA6B,EAGpD,OAAO,gBAAgB,uCAAuC,EAG9D,OAAO,aAAa,oBAAoB,EACxC,OAAO,gBAAgB,2BAA2B,EAGlD,OAAO,cAAc,6BAA6B,EAClD,OAAO,iBAAiB,mCAAmC,EAG3D,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,6BAA6B,EAEjD,OAAO,yBAAyB,2BAA2B,EAC3D,OAAO,sCAAsC,mCAAmC,EAChF,OAAO,kCAAkC,sDAAsD,EAE/F,YAAY,0BAA0B;AAEzC,eAAe,IAAI,MAA+B;AAChD,QAAM,UAAU,QAAQ,MAAM,IAAI,EAAE,KAAc;AAC5C,QAAAV,cAAY,QAAQ,KAAK,CAAC;AAEzB,SAAA;AAAA,IACL;AAAA,IACA,GAAG,MAAM,MAAM,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,MAAM,KAAK,kCAAkC,CAAC;AAAA;AAAA,EAAA;AAI1F,OAAA,QAAQ,eAAe,UAAa,QAAQ,eAAe,WAC5D,QAAQ,aAAa,QACrB;AACO,WAAA;AAAA,MACL,kBAAkB,MAAM,KAAK,cAAc,CAAC,OAAO,MAAM,KAAK,cAAc,CAAC,SAAS,MAAM,KAAK,YAAY,CAAC;AAAA,IAAA;AAAA,EAElH;AAEA,MAAI,QAAQ,eAAe,QAAQ,QAAQ,eAAe,MAAM;AACvD,WAAA;AAAA,MACL,uBAAuB,MAAM,KAAK,cAAc,CAAC,eAAe,MAAM,KAAK,cAAc,CAAC;AAAA,IAAA;AAAA,EAE9F;AAGA,MAAI,QAAQ,YAAY,QAAQ,QAAQ,aAAa,QAAW;AACvD,WAAA,MAAM,kBAAkB,MAAM,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,YAAY,CAAC,EAAE;AAAA,EAC3F;AAEA,MAAI,QAAQ,aAAa,UAAa,QAAQ,SAAS,WAAW,GAAG,GAAG;AAC/D,WAAA,MAAM,iBAAiB,MAAM,KAAK,IAAI,QAAQ,QAAQ,GAAG,CAAC,aAAa;AAAA,EAChF;AAEA,MAAI,CAAC,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS,GAAG;AAC1E,WAAA;AAAA,MACL,iEAAiE,MAAM,KAAK,qCAAqC,CAAC;AAAA,IAAA;AAAA,EAEtH;AAEI,MAAA,QAAQ,cAAc,CAACA,aAAW;AAC7B,WAAA;AAAA,MACL,sBAAsB,MAAM,KAAK,aAAa,CAAC,+BAA+B,MAAM,KAAK,cAAc,CAAC;AAAA,IAAA;AAAA,EAE5G;AAEsB;AAEtB,QAAM,eAAeA,eAAc,MAAMY;AAEnC,QAAA,WAAW,MAAM,iBAAiB,YAAY;AAEhD,MAAA,CAAC,QAAQ,WAAW;AACtB,UAAM,iBAAiB;AAAA,EACzB;AAEA,QAAM,UAAUF,OAAKG,KAAG,OAAA,GAAU,SAAS,OAAO,YAAY,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE;AAElF,QAAM,QAAe;AAAA,IACnB;AAAA,IACA,MAAM,SAAS,QAAQ;AAAA,IACvB,gBAAgB,cAAc,OAAO;AAAA,IACrC,UAAU,MAAM,iBAAiB,OAAO;AAAA,IACxC,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,cAAc,QAAQ;AAAA,IACtB,cAAc,QAAQ;AAAA,IACtB,QAAQ,QAAQ,eAAe,QAAQ,QAAQ,QAAQ;AAAA,IACvD,eAAe;AAAA,IACf,mBAAmB;AAAA,MACjB,UAAU,QAAQ;AAAA,IACpB;AAAA,IACA,OAAO,QAAQ,IAAI,sBAAsB,MAAM,OAAO,WAAW;AAAA,IACjE,QAAQ,QAAQ,IAAI,WAAW;AAAA,IAC/B,UAAU,UAAU;AAAA,IACpB;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB,CAAC;AAAA,IAClB,cAAc;AAAA,MACZ,kBAAkB;AAAA,MAClB,oCAAoC;AAAA,MACpC,wBAAwB;AAAA;AAAA,MAExB,OAAO;AAAA,MACP,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,EAAA;AAGE,MAAA,QAAQ,aAAa,QAAW;AAClC,UAAM,gBAAgB;AAAA,EACb,WAAA,QAAQ,YAAY,QAAQ,QAAQ,YAAY;AACzD,UAAM,gBAAgB;AAAA,EAAA,WACb,QAAQ,YAAY,OAAO;AACpC,UAAM,gBAAgB;AAAA,EAAA,OACjB;AACC,UAAA,gBAAgB,MAAMC;EAC9B;AAEI,MAAA,QAAQ,eAAe,MAAM;AAC/B,UAAM,gBAAgB;AAAA,EACb,WAAA,QAAQ,eAAe,QAAQ,QAAQ,YAAY;AAC5D,UAAM,gBAAgB;AAAA,EAAA,WACb,CAAC,QAAQ,UAAU;AACtB,UAAA,gBAAgB,MAAMC;EAC9B;AAEA,MAAI,QAAQ,YAAY,QAAQ,QAAQ,YAAY;AAClD,UAAM,sBAAsB;AAAA,EAAA,WACnB,QAAQ,YAAY,OAAO;AACpC,UAAM,sBAAsB;AAAA,EAAA,OACvB;AACL,UAAM,sBAAsB,MAAMC,oBAA4B,MAAM,cAAc;AAAA,EACpF;AAEA,MAAI,MAAM,eAAe;AACvB,UAAM,kBAAkB;AAAA,MACtB,GAAG,MAAM;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,IAAA;AAAA,EAExB;AAEA,MAAI,QAAQ,YAAY,QAAQ,QAAQ,YAAY;AAClD,UAAM,UAAU;AAAA,EAAA,WACP,QAAQ,YAAY,OAAO;AACpC,UAAM,UAAU;AAAA,EAAA,OACX;AACC,UAAA,UAAU,MAAMC;EACxB;AAEA,0BAAwB,KAAK;AAEzB,MAAA;AACF,UAAM,aAAa,KAAK;AAAA,WACjB,OAAgB;AACnB,QAAA,EAAE,iBAAiB,QAAQ;AACvB,YAAA;AAAA,IACR;AAEA,UAAM,WAAW,EAAE,OAAO,MAAO,CAAA;AAE1B,WAAA,MAAM,MAAM,OAAO;AAAA,EAC5B;AACF;AAEA,SAAS,cAAc,SAAkB;AACnC,MAAA,QAAQ,WAAW,MAAM;AACpB,WAAA;AAAA,EACT;AAEI,MAAA,QAAQ,YAAY,MAAM;AACrB,WAAA;AAAA,EACT;AAEI,MAAA,QAAQ,YAAY,MAAM;AACrB,WAAA;AAAA,EACT;AAEM,QAAA,YAAY,QAAQ,IAAI,yBAAyB;AAEnD,MAAA,UAAU,WAAW,MAAM,GAAG;AACzB,WAAA;AAAA,EACT;AAEI,MAAA,UAAU,WAAW,MAAM,GAAG;AACzB,WAAA;AAAA,EACT;AAEO,SAAA;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,MAAM;iBACJ,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;iBAGxB,MAAM,WAAW,MAAM,GAAG,IAAI;kBAI7B,MAAM,GAAG,IAAI;qBAGV,MAAM,GAAG,IAAI;oBAGd,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK;mBAS1B,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;kBAIzB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;CAIvC,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,MAAM;iBACJ,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;iBAGxB,MAAM,WAAW,MAAM,GAAG,IAAI;kBAI7B,MAAM,GAAG,IAAI;qBAGV,MAAM,GAAG,IAAI;oBAGd,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK;mBAS1B,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;kBAIzB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;CAIvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-strapi-app",
3
- "version": "5.0.0-rc.13",
3
+ "version": "5.0.0-rc.14",
4
4
  "description": "Generate a new Strapi application.",
5
5
  "keywords": [
6
6
  "create-strapi-app",
@@ -48,7 +48,7 @@
48
48
  "watch": "pack-up watch"
49
49
  },
50
50
  "dependencies": {
51
- "@strapi/cloud-cli": "5.0.0-rc.13",
51
+ "@strapi/cloud-cli": "5.0.0-rc.14",
52
52
  "async-retry": "1.3.3",
53
53
  "chalk": "4.1.2",
54
54
  "commander": "8.3.0",
@@ -68,12 +68,12 @@
68
68
  "@types/async-retry": "^1",
69
69
  "@types/fs-extra": "11.0.4",
70
70
  "@types/inquirer": "8.2.5",
71
- "eslint-config-custom": "5.0.0-rc.13",
72
- "tsconfig": "5.0.0-rc.13"
71
+ "eslint-config-custom": "5.0.0-rc.14",
72
+ "tsconfig": "5.0.0-rc.14"
73
73
  },
74
74
  "engines": {
75
75
  "node": ">=18.0.0 <=20.x.x",
76
76
  "npm": ">=6.0.0"
77
77
  },
78
- "gitHead": "cbc694f62f14f82d2931f7a407ea458a831045c9"
78
+ "gitHead": "e18c706dc0bfda296f9c3005e719bd60b3732531"
79
79
  }