{"version":3,"file":"create-strapi.mjs","sources":["../src/create-strapi.ts"],"sourcesContent":["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';\nimport { gitIgnore } from './utils/gitignore';\nimport { getInstallArgs } from './utils/get-package-manager-args';\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    useExample,\n    installDependencies,\n    isQuickstart,\n    template,\n    packageManager,\n    gitInit,\n    runApp,\n  } = scope;\n\n  const shouldRunSeed = useExample && installDependencies;\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 = useExample ? '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  // make sure a gitignore file is created regardless of the user using git or not\n  if (!(await fse.exists(join(rootPath, '.gitignore')))) {\n    await fse.writeFile(join(rootPath, '.gitignore'), gitIgnore);\n  }\n\n  // Init git\n  if (gitInit) {\n    logger.title('git', 'Initializing git repository.');\n\n    await tryGitInit(rootPath);\n\n    logger.success('Initialized a git repository.');\n  }\n\n  if (shouldRunSeed) {\n    if (await fse.exists(join(rootPath, 'scripts/seed.js'))) {\n      logger.title('Seed', 'Seeding your database with sample data');\n\n      try {\n        await execa(packageManager, ['run', 'seed:example'], {\n          stdio: 'inherit',\n          cwd: rootPath,\n        });\n        logger.success('Sample data added to your database');\n      } catch (error) {\n        logger.error('Failed to seed your database. Skipping');\n      }\n    }\n  }\n\n  const cmd = chalk.cyan(`${packageManager} run`);\n\n  logger.title('Strapi', `Your application was created!`);\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  ]);\n\n  if (useExample) {\n    logger.log(['Seed your database with sample data.', `${cmd} seed:example`, '']);\n  }\n\n  logger.log(['Display all available commands.', `${cmd} strapi\\n`]);\n\n  if (installDependencies) {\n    logger.log([\n      'To get started run',\n      '',\n      `${chalk.cyan('cd')} ${rootPath}`,\n      !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`,\n    ]);\n  } else {\n    logger.log([\n      'To get started run',\n      '',\n      `${chalk.cyan('cd')} ${rootPath}`,\n      `${chalk.cyan(packageManager)} install`,\n      !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${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\nasync function runInstall({ rootPath, packageManager }: Scope) {\n  // include same cwd and env to ensure version check returns same version we use below\n  const { envArgs, cmdArgs } = await getInstallArgs(packageManager, {\n    cwd: rootPath,\n    env: {\n      ...process.env,\n      NODE_ENV: 'development',\n    },\n  });\n\n  const options: execa.Options = {\n    cwd: rootPath,\n    stdio: 'inherit',\n    env: {\n      ...process.env,\n      ...envArgs,\n      NODE_ENV: 'development',\n    },\n  };\n\n  const proc = execa(packageManager, cmdArgs, options);\n\n  return proc;\n}\n\nexport { createStrapi };\n"],"names":["createStrapi","scope","rootPath","fse","ensureDir","createApp","error","remove","useTypescript","useExample","installDependencies","isQuickstart","template","packageManager","gitInit","runApp","shouldRunSeed","trackUsage","event","logger","title","chalk","green","templateName","internalTemplatePath","join","__dirname","exists","copy","info","cyan","copyTemplate","success","Error","fatal","message","existsSync","bold","createPackageJSON","writeFile","generateDotEnv","err","runInstall","stderr","isStderrError","slice","gitIgnore","tryGitInit","execa","stdio","cwd","cmd","log","env","FORCE_COLOR","envArgs","cmdArgs","getInstallArgs","process","NODE_ENV","options","proc"],"mappings":";;;;;;;;;;;;;;AAkBA,eAAeA,aAAaC,KAAY,EAAA;IACtC,MAAM,EAAEC,QAAQ,EAAE,GAAGD,KAAAA;IACrB,IAAI;QACF,MAAME,GAAAA,CAAIC,SAAS,CAACF,QAAAA,CAAAA;AACpB,QAAA,MAAMG,SAAUJ,CAAAA,KAAAA,CAAAA;AAClB,KAAA,CAAE,OAAOK,KAAO,EAAA;QACd,MAAMH,GAAAA,CAAII,MAAM,CAACL,QAAAA,CAAAA;QAEjB,MAAMI,KAAAA;AACR;AACF;AAEA,eAAeD,UAAUJ,KAAY,EAAA;AACnC,IAAA,MAAM,EACJC,QAAQ,EACRM,aAAa,EACbC,UAAU,EACVC,mBAAmB,EACnBC,YAAY,EACZC,QAAQ,EACRC,cAAc,EACdC,OAAO,EACPC,MAAM,EACP,GAAGd,KAAAA;AAEJ,IAAA,MAAMe,gBAAgBP,UAAcC,IAAAA,mBAAAA;AAEpC,IAAA,MAAMO,UAAW,CAAA;QAAEC,KAAO,EAAA,mBAAA;AAAqBjB,QAAAA;AAAM,KAAA,CAAA;IAErDkB,MAAOC,CAAAA,KAAK,CAAC,QAAA,EAAU,CAAC,8BAA8B,EAAEC,KAAMC,CAAAA,KAAK,CAACpB,QAAAA,CAAAA,CAAU,CAAC,CAAA;AAE/E,IAAA,IAAI,CAACS,YAAc,EAAA;AACjB,QAAA,MAAMM,UAAW,CAAA;YAAEC,KAAO,EAAA,yBAAA;AAA2BjB,YAAAA;AAAM,SAAA,CAAA;KACtD,MAAA;AACL,QAAA,MAAMgB,UAAW,CAAA;YAAEC,KAAO,EAAA,qBAAA;AAAuBjB,YAAAA;AAAM,SAAA,CAAA;AACzD;AAEA,IAAA,IAAI,CAACW,QAAU,EAAA;QACb,IAAIW,YAAAA,GAAed,aAAa,SAAY,GAAA,SAAA;AAE5C,QAAA,IAAI,CAACD,aAAe,EAAA;AAClBe,YAAAA,YAAAA,GAAe,CAAC,EAAEA,YAAa,CAAA,GAAG,CAAC;AACrC;QAEA,MAAMC,oBAAAA,GAAuBC,IAAKC,CAAAA,SAAAA,EAAW,cAAgBH,EAAAA,YAAAA,CAAAA;AAC7D,QAAA,IAAI,MAAMpB,GAAAA,CAAIwB,MAAM,CAACH,oBAAuB,CAAA,EAAA;YAC1C,MAAMrB,GAAAA,CAAIyB,IAAI,CAACJ,oBAAsBtB,EAAAA,QAAAA,CAAAA;AACvC;KACK,MAAA;QACL,IAAI;YACFiB,MAAOU,CAAAA,IAAI,CAAC,CAAC,EAAER,KAAAA,CAAMS,IAAI,CAAC,qBAAuB,CAAA,CAAA,CAAC,EAAElB,QAAAA,CAAS,CAAC,CAAA;AAE9D,YAAA,MAAMmB,aAAa9B,KAAOC,EAAAA,QAAAA,CAAAA;AAE1BiB,YAAAA,MAAAA,CAAOa,OAAO,CAAC,+BAAA,CAAA;AACjB,SAAA,CAAE,OAAO1B,KAAO,EAAA;AACd,YAAA,IAAIA,iBAAiB2B,KAAO,EAAA;gBAC1Bd,MAAOe,CAAAA,KAAK,CAAC,CAAC,8BAA8B,EAAE5B,KAAM6B,CAAAA,OAAO,CAAC,CAAC,CAAA;AAC/D;YAEA,MAAM7B,KAAAA;AACR;AAEA,QAAA,IAAI,CAACH,GAAIiC,CAAAA,UAAU,CAACX,IAAAA,CAAKvB,UAAU,cAAkB,CAAA,CAAA,EAAA;YACnDiB,MAAOe,CAAAA,KAAK,CAAC,CAAC,QAAQ,EAAEb,MAAMgB,IAAI,CAAC,cAAgB,CAAA,CAAA,YAAY,CAAC,CAAA;AAClE;AACF;AAEA,IAAA,MAAMpB,UAAW,CAAA;QAAEC,KAAO,EAAA,qBAAA;AAAuBjB,QAAAA;AAAM,KAAA,CAAA;IAEvD,IAAI;AACF,QAAA,MAAMqC,iBAAkBrC,CAAAA,KAAAA,CAAAA;AAExB,QAAA,MAAMgB,UAAW,CAAA;YAAEC,KAAO,EAAA,qBAAA;AAAuBjB,YAAAA;AAAM,SAAA,CAAA;;AAGvD,QAAA,MAAME,GAAIC,CAAAA,SAAS,CAACqB,IAAAA,CAAKvB,QAAU,EAAA,cAAA,CAAA,CAAA;;AAGnC,QAAA,MAAMC,IAAIoC,SAAS,CAACd,IAAKvB,CAAAA,QAAAA,EAAU,SAASsC,cAAevC,CAAAA,KAAAA,CAAAA,CAAAA;AAE3D,QAAA,MAAMgB,UAAW,CAAA;YAAEC,KAAO,EAAA,2BAAA;AAA6BjB,YAAAA;AAAM,SAAA,CAAA;AAC/D,KAAA,CAAE,OAAOwC,GAAK,EAAA;QACZ,MAAMtC,GAAAA,CAAII,MAAM,CAACL,QAAAA,CAAAA;QACjB,MAAMuC,GAAAA;AACR;AAEA,IAAA,IAAI/B,mBAAqB,EAAA;QACvB,IAAI;YACFS,MAAOC,CAAAA,KAAK,CAAC,MAAA,EAAQ,CAAC,6BAA6B,EAAEC,KAAMS,CAAAA,IAAI,CAACjB,cAAAA,CAAAA,CAAgB,CAAC,CAAA;AAEjF,YAAA,MAAMI,UAAW,CAAA;gBAAEC,KAAO,EAAA,gCAAA;AAAkCjB,gBAAAA;AAAM,aAAA,CAAA;AAElE,YAAA,MAAMyC,UAAWzC,CAAAA,KAAAA,CAAAA;AAEjB,YAAA,MAAMgB,UAAW,CAAA;gBAAEC,KAAO,EAAA,+BAAA;AAAiCjB,gBAAAA;AAAM,aAAA,CAAA;AAEjEkB,YAAAA,MAAAA,CAAOa,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAA;AACzC,SAAA,CAAE,OAAO1B,KAAO,EAAA;AACd,YAAA,MAAMqC,MAASC,GAAAA,aAAAA,CAActC,KAASA,CAAAA,GAAAA,KAAAA,CAAMqC,MAAM,GAAG,EAAA;AAErD,YAAA,MAAM1B,UAAW,CAAA;gBACfC,KAAO,EAAA,kCAAA;AACPjB,gBAAAA,KAAAA;gBACAK,KAAOqC,EAAAA,MAAAA,CAAOE,KAAK,CAAC,CAAC,IAAA;AACvB,aAAA,CAAA;AAEA1B,YAAAA,MAAAA,CAAOe,KAAK,CAAC;AACXb,gBAAAA,KAAAA,CAAMgB,IAAI,CACR,0FAAA,CAAA;AAEF,gBAAA,EAAA;AACA,gBAAA,CAAC,iDAAiD,CAAC;AACnD,gBAAA,EAAA;AACA,gBAAA,CAAC,yFAAyF,CAAC;AAC3F,gBAAA,EAAA;AACA,gBAAA,CAAC,GAAG,EAAEhB,KAAMC,CAAAA,KAAK,CAACpB,QAAAA,CAAAA,CAAU,IAAI,EAAEmB,KAAMS,CAAAA,IAAI,CAACjB,cAAAA,CAAAA,CAAgB,QAAQ;AACtE,aAAA,CAAA;AACH;AACF;AAEA,IAAA,MAAMI,UAAW,CAAA;QAAEC,KAAO,EAAA,kBAAA;AAAoBjB,QAAAA;AAAM,KAAA,CAAA;;AAGpD,IAAA,IAAI,CAAE,MAAME,GAAAA,CAAIwB,MAAM,CAACF,IAAAA,CAAKvB,UAAU,YAAiB,CAAA,CAAA,EAAA;AACrD,QAAA,MAAMC,GAAIoC,CAAAA,SAAS,CAACd,IAAAA,CAAKvB,UAAU,YAAe4C,CAAAA,EAAAA,SAAAA,CAAAA;AACpD;;AAGA,IAAA,IAAIhC,OAAS,EAAA;QACXK,MAAOC,CAAAA,KAAK,CAAC,KAAO,EAAA,8BAAA,CAAA;AAEpB,QAAA,MAAM2B,UAAW7C,CAAAA,QAAAA,CAAAA;AAEjBiB,QAAAA,MAAAA,CAAOa,OAAO,CAAC,+BAAA,CAAA;AACjB;AAEA,IAAA,IAAIhB,aAAe,EAAA;AACjB,QAAA,IAAI,MAAMb,GAAIwB,CAAAA,MAAM,CAACF,IAAAA,CAAKvB,UAAU,iBAAqB,CAAA,CAAA,EAAA;YACvDiB,MAAOC,CAAAA,KAAK,CAAC,MAAQ,EAAA,wCAAA,CAAA;YAErB,IAAI;AACF,gBAAA,MAAM4B,MAAMnC,cAAgB,EAAA;AAAC,oBAAA,KAAA;AAAO,oBAAA;iBAAe,EAAE;oBACnDoC,KAAO,EAAA,SAAA;oBACPC,GAAKhD,EAAAA;AACP,iBAAA,CAAA;AACAiB,gBAAAA,MAAAA,CAAOa,OAAO,CAAC,oCAAA,CAAA;AACjB,aAAA,CAAE,OAAO1B,KAAO,EAAA;AACda,gBAAAA,MAAAA,CAAOb,KAAK,CAAC,wCAAA,CAAA;AACf;AACF;AACF;IAEA,MAAM6C,GAAAA,GAAM9B,MAAMS,IAAI,CAAC,CAAC,EAAEjB,cAAAA,CAAe,IAAI,CAAC,CAAA;AAE9CM,IAAAA,MAAAA,CAAOC,KAAK,CAAC,QAAU,EAAA,CAAC,6BAA6B,CAAC,CAAA;AAEtDD,IAAAA,MAAAA,CAAOiC,GAAG,CAAC;AACT,QAAA,qCAAA;AACA,QAAA,EAAA;AACA,QAAA,6FAAA;QACA,CAAC,EAAED,GAAI,CAAA,QAAQ,CAAC;AAChB,QAAA,EAAA;AACA,QAAA,kCAAA;QACA,CAAC,EAAEA,GAAI,CAAA,MAAM,CAAC;AACd,QAAA,EAAA;AACA,QAAA,2BAAA;QACA,CAAC,EAAEA,GAAI,CAAA,MAAM,CAAC;AACd,QAAA,EAAA;AACA,QAAA,wBAAA;QACA,CAAC,EAAEA,GAAI,CAAA,OAAO,CAAC;AACf,QAAA;AACD,KAAA,CAAA;AAED,IAAA,IAAI1C,UAAY,EAAA;AACdU,QAAAA,MAAAA,CAAOiC,GAAG,CAAC;AAAC,YAAA,sCAAA;YAAwC,CAAC,EAAED,GAAI,CAAA,aAAa,CAAC;AAAE,YAAA;AAAG,SAAA,CAAA;AAChF;AAEAhC,IAAAA,MAAAA,CAAOiC,GAAG,CAAC;AAAC,QAAA,iCAAA;QAAmC,CAAC,EAAED,GAAI,CAAA,SAAS;AAAE,KAAA,CAAA;AAEjE,IAAA,IAAIzC,mBAAqB,EAAA;AACvBS,QAAAA,MAAAA,CAAOiC,GAAG,CAAC;AACT,YAAA,oBAAA;AACA,YAAA,EAAA;YACA,CAAC,EAAE/B,MAAMS,IAAI,CAAC,MAAM,CAAC,EAAE5B,SAAS,CAAC;AACjC,YAAA,CAACc,aAAiBP,IAAAA,UAAAA,GAAa,CAAC,EAAE0C,IAAI,iBAAiB,EAAEA,GAAI,CAAA,QAAQ,CAAC,GAAG,CAAC,EAAEA,GAAAA,CAAI,QAAQ;AACzF,SAAA,CAAA;KACI,MAAA;AACLhC,QAAAA,MAAAA,CAAOiC,GAAG,CAAC;AACT,YAAA,oBAAA;AACA,YAAA,EAAA;YACA,CAAC,EAAE/B,MAAMS,IAAI,CAAC,MAAM,CAAC,EAAE5B,SAAS,CAAC;AACjC,YAAA,CAAC,EAAEmB,KAAMS,CAAAA,IAAI,CAACjB,cAAAA,CAAAA,CAAgB,QAAQ,CAAC;AACvC,YAAA,CAACG,aAAiBP,IAAAA,UAAAA,GAAa,CAAC,EAAE0C,IAAI,iBAAiB,EAAEA,GAAI,CAAA,QAAQ,CAAC,GAAG,CAAC,EAAEA,GAAAA,CAAI,QAAQ;AACzF,SAAA,CAAA;AACH;AAEA,IAAA,IAAIpC,UAAUL,mBAAqB,EAAA;QACjCS,MAAOC,CAAAA,KAAK,CAAC,KAAO,EAAA,iCAAA,CAAA;QAEpB,IAAI;AACF,YAAA,MAAMH,UAAW,CAAA;gBAAEC,KAAO,EAAA,iBAAA;AAAmBjB,gBAAAA;AAAM,aAAA,CAAA;AAEnD,YAAA,MAAM+C,MAAMnC,cAAgB,EAAA;AAAC,gBAAA,KAAA;AAAO,gBAAA;aAAU,EAAE;gBAC9CoC,KAAO,EAAA,SAAA;gBACPC,GAAKhD,EAAAA,QAAAA;gBACLmD,GAAK,EAAA;oBACHC,WAAa,EAAA;AACf;AACF,aAAA,CAAA;AACF,SAAA,CAAE,OAAOhD,KAAO,EAAA;AACd,YAAA,IAAI,OAAOA,KAAAA,KAAU,QAAYA,IAAAA,KAAAA,YAAiB2B,KAAO,EAAA;AACvD,gBAAA,MAAMhB,UAAW,CAAA;oBACfC,KAAO,EAAA,mBAAA;AACPjB,oBAAAA,KAAAA;AACAK,oBAAAA;AACF,iBAAA,CAAA;AACF;AAEAa,YAAAA,MAAAA,CAAOe,KAAK,CAAC,yCAAA,CAAA;AACf;AACF;AACF;AAEA,eAAeQ,UAAW,CAAA,EAAExC,QAAQ,EAAEW,cAAc,EAAS,EAAA;;IAE3D,MAAM,EAAE0C,OAAO,EAAEC,OAAO,EAAE,GAAG,MAAMC,eAAe5C,cAAgB,EAAA;QAChEqC,GAAKhD,EAAAA,QAAAA;QACLmD,GAAK,EAAA;AACH,YAAA,GAAGK,QAAQL,GAAG;YACdM,QAAU,EAAA;AACZ;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,OAAyB,GAAA;QAC7BV,GAAKhD,EAAAA,QAAAA;QACL+C,KAAO,EAAA,SAAA;QACPI,GAAK,EAAA;AACH,YAAA,GAAGK,QAAQL,GAAG;AACd,YAAA,GAAGE,OAAO;YACVI,QAAU,EAAA;AACZ;AACF,KAAA;IAEA,MAAME,IAAAA,GAAOb,KAAMnC,CAAAA,cAAAA,EAAgB2C,OAASI,EAAAA,OAAAA,CAAAA;IAE5C,OAAOC,IAAAA;AACT;;;;"}