create-strapi-app 5.35.0 → 5.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,SAAS,CAAC;AAqD9C,iBAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JhD;AA4BD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AAC7B,YAAY,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,SAAS,CAAC;AA4D9C,iBAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+JhD;AA0CD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AAC7B,YAAY,EAAE,KAAK,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -23,7 +23,9 @@ const command = new commander.Command('create-strapi-app').version(version).argu
23
23
  .option('--install', 'Install dependencies').option('--no-install', 'Do not install dependencies')// Cloud options
24
24
  .option('--skip-cloud', 'Skip cloud login and project creation')// Example app
25
25
  .option('--example', 'Use an example app').option('--no-example', 'Do not use an example app')// git options
26
- .option('--git-init', 'Initialize a git repository').option('--no-git-init', 'Do no initialize a git repository')// Database options
26
+ .option('--git-init', 'Initialize a git repository').option('--no-git-init', 'Do no initialize a git repository')// A/B testing options
27
+ .option('--enable-ab-tests', 'Enable anonymous A/B testing').option('--no-enable-ab-tests', 'Disable anonymous A/B testing')// Automation
28
+ .option('--non-interactive', 'Skip all interactive prompts and use defaults')// Database options
27
29
  .option('--dbclient <dbclient>', 'Database client').option('--dbhost <dbhost>', 'Database host').option('--dbport <dbport>', 'Database port').option('--dbname <dbname>', 'Database name').option('--dbusername <dbusername>', 'Database username').option('--dbpassword <dbpassword>', 'Database password').option('--dbssl <dbssl>', 'Database SSL').option('--dbfile <dbfile>', 'Database file path for sqlite').option('--skip-db', 'Skip database configuration').option('--template <template>', 'Specify a Strapi template').option('--template-branch <templateBranch>', 'Specify a branch for the template').option('--template-path <templatePath>', 'Specify a path to the template inside the repository').description('create a new application');
28
30
  async function run(args) {
29
31
  const options = command.parse(args).opts();
@@ -52,11 +54,15 @@ async function run(args) {
52
54
  if (options.quickstart && !directory) {
53
55
  logger.logger.fatal(`Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--quickstart')}`);
54
56
  }
57
+ if (options.nonInteractive && !directory) {
58
+ logger.logger.fatal(`Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--non-interactive')}`);
59
+ }
60
+ const skipPrompts = options.quickstart || options.nonInteractive;
55
61
  checkRequirements.checkNodeRequirements();
56
62
  const appDirectory = directory || await prompts.directory();
57
63
  const rootPath = await checkInstallPath.checkInstallPath(appDirectory);
58
64
  let shouldCreateGrowthSsoTrial = false;
59
- if (!options.skipCloud) {
65
+ if (!options.skipCloud && !options.nonInteractive) {
60
66
  shouldCreateGrowthSsoTrial = await cloud.handleCloudLogin();
61
67
  }
62
68
  const tmpPath = path.join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);
@@ -101,25 +107,19 @@ async function run(args) {
101
107
  scope.useExample = false;
102
108
  } else if (options.example === true) {
103
109
  scope.useExample = true;
104
- } else if (options.example === false || options.quickstart === true) {
110
+ } else if (options.example === false || skipPrompts) {
105
111
  scope.useExample = false;
106
112
  } else {
107
113
  scope.useExample = await prompts.example();
108
114
  }
109
115
  if (options.javascript === true) {
110
116
  scope.useTypescript = false;
111
- } else if (options.typescript === true || options.quickstart) {
117
+ } else if (options.typescript === true || skipPrompts) {
112
118
  scope.useTypescript = true;
113
119
  } else if (!options.template) {
114
120
  scope.useTypescript = await prompts.typescript();
115
121
  }
116
- if (options.install === true || options.quickstart) {
117
- scope.installDependencies = true;
118
- } else if (options.install === false) {
119
- scope.installDependencies = false;
120
- } else {
121
- scope.installDependencies = await prompts.installDependencies(scope.packageManager);
122
- }
122
+ scope.installDependencies = await resolveOption(options.install, skipPrompts, true, ()=>prompts.installDependencies(scope.packageManager));
123
123
  if (scope.useTypescript) {
124
124
  scope.devDependencies = {
125
125
  ...scope.devDependencies,
@@ -129,14 +129,8 @@ async function run(args) {
129
129
  '@types/react-dom': '^18'
130
130
  };
131
131
  }
132
- if (options.gitInit === true || options.quickstart) {
133
- scope.gitInit = true;
134
- } else if (options.gitInit === false) {
135
- scope.gitInit = false;
136
- } else {
137
- scope.gitInit = await prompts.gitInit();
138
- }
139
- scope.isABTestEnabled = await prompts.enableABTests();
132
+ scope.gitInit = await resolveOption(options.gitInit, skipPrompts, true, prompts.gitInit);
133
+ scope.isABTestEnabled = await resolveOption(options.enableAbTests, skipPrompts, false, prompts.enableABTests);
140
134
  database.addDatabaseDependencies(scope);
141
135
  try {
142
136
  await createStrapi.createStrapi(scope);
@@ -151,6 +145,13 @@ async function run(args) {
151
145
  logger.logger.fatal(error.message);
152
146
  }
153
147
  }
148
+ /**
149
+ * Resolves a boolean CLI option: explicit flag wins, then non-interactive default, then interactive prompt.
150
+ */ async function resolveOption(explicitValue, skipPrompts, defaultValue, promptFn) {
151
+ if (explicitValue !== undefined) return explicitValue;
152
+ if (skipPrompts) return defaultValue;
153
+ return promptFn();
154
+ }
154
155
  function getPkgManager(options) {
155
156
  if (options.useNpm === true) {
156
157
  return 'npm';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { join, basename } from 'node:path';\nimport os from 'node:os';\nimport chalk from 'chalk';\nimport commander from 'commander';\nimport crypto from 'crypto';\nimport fse from 'fs-extra';\n\nimport * as prompts from './prompts';\nimport { handleCloudLogin } from './cloud';\nimport { createStrapi } from './create-strapi';\nimport { checkNodeRequirements } from './utils/check-requirements';\nimport { checkInstallPath } from './utils/check-install-path';\nimport { installID } from './utils/install-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 let shouldCreateGrowthSsoTrial = false;\n if (!options.skipCloud) {\n shouldCreateGrowthSsoTrial = await handleCloudLogin();\n }\n\n const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);\n\n const randomUUID = crypto.randomUUID();\n const uuid = (process.env.STRAPI_UUID_PREFIX || '') + randomUUID;\n const installId = installID(uuid);\n\n const scope: Scope = {\n rootPath,\n name: basename(rootPath),\n packageManager: getPkgManager(options),\n database: await getDatabaseInfos(options),\n template: options.template,\n templateBranch: options.templateBranch,\n templatePath: options.templatePath,\n isQuickstart: options.quickstart,\n useExample: false,\n runApp: options.quickstart === true && options.run !== false,\n strapiVersion: version,\n packageJsonStrapi: {\n template: options.template,\n },\n uuid,\n docker: process.env.DOCKER === 'true',\n installId,\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 shouldCreateGrowthSsoTrial,\n isABTestEnabled: false,\n };\n\n if (options.template !== undefined) {\n scope.useExample = false;\n } else if (options.example === true) {\n scope.useExample = true;\n } else if (options.example === false || options.quickstart === true) {\n scope.useExample = false;\n } else {\n scope.useExample = await prompts.example();\n }\n\n if (options.javascript === true) {\n scope.useTypescript = false;\n } else if (options.typescript === true || options.quickstart) {\n scope.useTypescript = true;\n } else if (!options.template) {\n scope.useTypescript = await prompts.typescript();\n }\n\n if (options.install === true || options.quickstart) {\n scope.installDependencies = true;\n } else if (options.install === false) {\n scope.installDependencies = false;\n } else {\n scope.installDependencies = await prompts.installDependencies(scope.packageManager);\n }\n\n if (scope.useTypescript) {\n scope.devDependencies = {\n ...scope.devDependencies,\n typescript: '^5',\n '@types/node': '^20',\n '@types/react': '^18',\n '@types/react-dom': '^18',\n };\n }\n\n if (options.gitInit === true || options.quickstart) {\n scope.gitInit = true;\n } else if (options.gitInit === false) {\n scope.gitInit = false;\n } else {\n scope.gitInit = await prompts.gitInit();\n }\n\n scope.isABTestEnabled = await prompts.enableABTests();\n\n addDatabaseDependencies(scope);\n\n try {\n await createStrapi(scope);\n } catch (error: unknown) {\n if (!(error instanceof Error)) {\n throw error;\n }\n\n await trackError({ scope, error });\n\n logger.fatal(error.message);\n }\n}\n\nfunction getPkgManager(options: Options) {\n if (options.useNpm === true) {\n return 'npm';\n }\n\n if (options.usePnpm === true) {\n return 'pnpm';\n }\n\n if (options.useYarn === true) {\n return 'yarn';\n }\n\n const userAgent = process.env.npm_config_user_agent || '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n return 'npm';\n}\n\nexport { run, createStrapi };\nexport type { Scope };\n"],"names":["version","fse","readJSONSync","join","__dirname","command","commander","Command","arguments","usage","option","description","run","args","options","parse","opts","directory","logger","title","chalk","green","bold","javascript","undefined","typescript","template","fatal","example","startsWith","useNpm","usePnpm","useYarn","filter","Boolean","length","quickstart","checkNodeRequirements","appDirectory","prompts","rootPath","checkInstallPath","shouldCreateGrowthSsoTrial","skipCloud","handleCloudLogin","tmpPath","os","tmpdir","crypto","randomBytes","toString","randomUUID","uuid","process","env","STRAPI_UUID_PREFIX","installId","installID","scope","name","basename","packageManager","getPkgManager","database","getDatabaseInfos","templateBranch","templatePath","isQuickstart","useExample","runApp","strapiVersion","packageJsonStrapi","docker","DOCKER","gitInit","devDependencies","dependencies","react","isABTestEnabled","useTypescript","install","installDependencies","addDatabaseDependencies","createStrapi","error","Error","trackError","message","userAgent","npm_config_user_agent"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { join, basename } from 'node:path';\nimport os from 'node:os';\nimport chalk from 'chalk';\nimport commander from 'commander';\nimport crypto from 'crypto';\nimport fse from 'fs-extra';\n\nimport * as prompts from './prompts';\nimport { handleCloudLogin } from './cloud';\nimport { createStrapi } from './create-strapi';\nimport { checkNodeRequirements } from './utils/check-requirements';\nimport { checkInstallPath } from './utils/check-install-path';\nimport { installID } from './utils/install-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 // A/B testing options\n .option('--enable-ab-tests', 'Enable anonymous A/B testing')\n .option('--no-enable-ab-tests', 'Disable anonymous A/B testing')\n\n // Automation\n .option('--non-interactive', 'Skip all interactive prompts and use defaults')\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 if (options.nonInteractive && !directory) {\n logger.fatal(\n `Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--non-interactive')}`\n );\n }\n\n const skipPrompts = options.quickstart || options.nonInteractive;\n\n checkNodeRequirements();\n\n const appDirectory = directory || (await prompts.directory());\n\n const rootPath = await checkInstallPath(appDirectory);\n\n let shouldCreateGrowthSsoTrial = false;\n if (!options.skipCloud && !options.nonInteractive) {\n shouldCreateGrowthSsoTrial = await handleCloudLogin();\n }\n\n const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);\n\n const randomUUID = crypto.randomUUID();\n const uuid = (process.env.STRAPI_UUID_PREFIX || '') + randomUUID;\n const installId = installID(uuid);\n\n const scope: Scope = {\n rootPath,\n name: basename(rootPath),\n packageManager: getPkgManager(options),\n database: await getDatabaseInfos(options),\n template: options.template,\n templateBranch: options.templateBranch,\n templatePath: options.templatePath,\n isQuickstart: options.quickstart,\n useExample: false,\n runApp: options.quickstart === true && options.run !== false,\n strapiVersion: version,\n packageJsonStrapi: {\n template: options.template,\n },\n uuid,\n docker: process.env.DOCKER === 'true',\n installId,\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 shouldCreateGrowthSsoTrial,\n isABTestEnabled: false,\n };\n\n if (options.template !== undefined) {\n scope.useExample = false;\n } else if (options.example === true) {\n scope.useExample = true;\n } else if (options.example === false || skipPrompts) {\n scope.useExample = false;\n } else {\n scope.useExample = await prompts.example();\n }\n\n if (options.javascript === true) {\n scope.useTypescript = false;\n } else if (options.typescript === true || skipPrompts) {\n scope.useTypescript = true;\n } else if (!options.template) {\n scope.useTypescript = await prompts.typescript();\n }\n\n scope.installDependencies = await resolveOption(options.install, skipPrompts, true, () =>\n 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 scope.gitInit = await resolveOption(options.gitInit, skipPrompts, true, prompts.gitInit);\n\n scope.isABTestEnabled = await resolveOption(\n options.enableAbTests,\n skipPrompts,\n false,\n prompts.enableABTests\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\n/**\n * Resolves a boolean CLI option: explicit flag wins, then non-interactive default, then interactive prompt.\n */\nasync function resolveOption(\n explicitValue: boolean | undefined,\n skipPrompts: boolean | undefined,\n defaultValue: boolean,\n promptFn: () => Promise<boolean>\n): Promise<boolean> {\n if (explicitValue !== undefined) return explicitValue;\n if (skipPrompts) return defaultValue;\n return promptFn();\n}\n\nfunction getPkgManager(options: Options) {\n if (options.useNpm === true) {\n return 'npm';\n }\n\n if (options.usePnpm === true) {\n return 'pnpm';\n }\n\n if (options.useYarn === true) {\n return 'yarn';\n }\n\n const userAgent = process.env.npm_config_user_agent || '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n return 'npm';\n}\n\nexport { run, createStrapi };\nexport type { Scope };\n"],"names":["version","fse","readJSONSync","join","__dirname","command","commander","Command","arguments","usage","option","description","run","args","options","parse","opts","directory","logger","title","chalk","green","bold","javascript","undefined","typescript","template","fatal","example","startsWith","useNpm","usePnpm","useYarn","filter","Boolean","length","quickstart","nonInteractive","skipPrompts","checkNodeRequirements","appDirectory","prompts","rootPath","checkInstallPath","shouldCreateGrowthSsoTrial","skipCloud","handleCloudLogin","tmpPath","os","tmpdir","crypto","randomBytes","toString","randomUUID","uuid","process","env","STRAPI_UUID_PREFIX","installId","installID","scope","name","basename","packageManager","getPkgManager","database","getDatabaseInfos","templateBranch","templatePath","isQuickstart","useExample","runApp","strapiVersion","packageJsonStrapi","docker","DOCKER","gitInit","devDependencies","dependencies","react","isABTestEnabled","useTypescript","installDependencies","resolveOption","install","enableAbTests","addDatabaseDependencies","createStrapi","error","Error","trackError","message","explicitValue","defaultValue","promptFn","userAgent","npm_config_user_agent"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -21,7 +21,9 @@ const command = new commander.Command('create-strapi-app').version(version).argu
21
21
  .option('--install', 'Install dependencies').option('--no-install', 'Do not install dependencies')// Cloud options
22
22
  .option('--skip-cloud', 'Skip cloud login and project creation')// Example app
23
23
  .option('--example', 'Use an example app').option('--no-example', 'Do not use an example app')// git options
24
- .option('--git-init', 'Initialize a git repository').option('--no-git-init', 'Do no initialize a git repository')// Database options
24
+ .option('--git-init', 'Initialize a git repository').option('--no-git-init', 'Do no initialize a git repository')// A/B testing options
25
+ .option('--enable-ab-tests', 'Enable anonymous A/B testing').option('--no-enable-ab-tests', 'Disable anonymous A/B testing')// Automation
26
+ .option('--non-interactive', 'Skip all interactive prompts and use defaults')// Database options
25
27
  .option('--dbclient <dbclient>', 'Database client').option('--dbhost <dbhost>', 'Database host').option('--dbport <dbport>', 'Database port').option('--dbname <dbname>', 'Database name').option('--dbusername <dbusername>', 'Database username').option('--dbpassword <dbpassword>', 'Database password').option('--dbssl <dbssl>', 'Database SSL').option('--dbfile <dbfile>', 'Database file path for sqlite').option('--skip-db', 'Skip database configuration').option('--template <template>', 'Specify a Strapi template').option('--template-branch <templateBranch>', 'Specify a branch for the template').option('--template-path <templatePath>', 'Specify a path to the template inside the repository').description('create a new application');
26
28
  async function run(args) {
27
29
  const options = command.parse(args).opts();
@@ -50,11 +52,15 @@ async function run(args) {
50
52
  if (options.quickstart && !directory$1) {
51
53
  logger.fatal(`Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--quickstart')}`);
52
54
  }
55
+ if (options.nonInteractive && !directory$1) {
56
+ logger.fatal(`Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--non-interactive')}`);
57
+ }
58
+ const skipPrompts = options.quickstart || options.nonInteractive;
53
59
  checkNodeRequirements();
54
60
  const appDirectory = directory$1 || await directory();
55
61
  const rootPath = await checkInstallPath(appDirectory);
56
62
  let shouldCreateGrowthSsoTrial = false;
57
- if (!options.skipCloud) {
63
+ if (!options.skipCloud && !options.nonInteractive) {
58
64
  shouldCreateGrowthSsoTrial = await handleCloudLogin();
59
65
  }
60
66
  const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);
@@ -99,25 +105,19 @@ async function run(args) {
99
105
  scope.useExample = false;
100
106
  } else if (options.example === true) {
101
107
  scope.useExample = true;
102
- } else if (options.example === false || options.quickstart === true) {
108
+ } else if (options.example === false || skipPrompts) {
103
109
  scope.useExample = false;
104
110
  } else {
105
111
  scope.useExample = await example();
106
112
  }
107
113
  if (options.javascript === true) {
108
114
  scope.useTypescript = false;
109
- } else if (options.typescript === true || options.quickstart) {
115
+ } else if (options.typescript === true || skipPrompts) {
110
116
  scope.useTypescript = true;
111
117
  } else if (!options.template) {
112
118
  scope.useTypescript = await typescript();
113
119
  }
114
- if (options.install === true || options.quickstart) {
115
- scope.installDependencies = true;
116
- } else if (options.install === false) {
117
- scope.installDependencies = false;
118
- } else {
119
- scope.installDependencies = await installDependencies(scope.packageManager);
120
- }
120
+ scope.installDependencies = await resolveOption(options.install, skipPrompts, true, ()=>installDependencies(scope.packageManager));
121
121
  if (scope.useTypescript) {
122
122
  scope.devDependencies = {
123
123
  ...scope.devDependencies,
@@ -127,14 +127,8 @@ async function run(args) {
127
127
  '@types/react-dom': '^18'
128
128
  };
129
129
  }
130
- if (options.gitInit === true || options.quickstart) {
131
- scope.gitInit = true;
132
- } else if (options.gitInit === false) {
133
- scope.gitInit = false;
134
- } else {
135
- scope.gitInit = await gitInit();
136
- }
137
- scope.isABTestEnabled = await enableABTests();
130
+ scope.gitInit = await resolveOption(options.gitInit, skipPrompts, true, gitInit);
131
+ scope.isABTestEnabled = await resolveOption(options.enableAbTests, skipPrompts, false, enableABTests);
138
132
  addDatabaseDependencies(scope);
139
133
  try {
140
134
  await createStrapi(scope);
@@ -149,6 +143,13 @@ async function run(args) {
149
143
  logger.fatal(error.message);
150
144
  }
151
145
  }
146
+ /**
147
+ * Resolves a boolean CLI option: explicit flag wins, then non-interactive default, then interactive prompt.
148
+ */ async function resolveOption(explicitValue, skipPrompts, defaultValue, promptFn) {
149
+ if (explicitValue !== undefined) return explicitValue;
150
+ if (skipPrompts) return defaultValue;
151
+ return promptFn();
152
+ }
152
153
  function getPkgManager(options) {
153
154
  if (options.useNpm === true) {
154
155
  return 'npm';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { join, basename } from 'node:path';\nimport os from 'node:os';\nimport chalk from 'chalk';\nimport commander from 'commander';\nimport crypto from 'crypto';\nimport fse from 'fs-extra';\n\nimport * as prompts from './prompts';\nimport { handleCloudLogin } from './cloud';\nimport { createStrapi } from './create-strapi';\nimport { checkNodeRequirements } from './utils/check-requirements';\nimport { checkInstallPath } from './utils/check-install-path';\nimport { installID } from './utils/install-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 let shouldCreateGrowthSsoTrial = false;\n if (!options.skipCloud) {\n shouldCreateGrowthSsoTrial = await handleCloudLogin();\n }\n\n const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);\n\n const randomUUID = crypto.randomUUID();\n const uuid = (process.env.STRAPI_UUID_PREFIX || '') + randomUUID;\n const installId = installID(uuid);\n\n const scope: Scope = {\n rootPath,\n name: basename(rootPath),\n packageManager: getPkgManager(options),\n database: await getDatabaseInfos(options),\n template: options.template,\n templateBranch: options.templateBranch,\n templatePath: options.templatePath,\n isQuickstart: options.quickstart,\n useExample: false,\n runApp: options.quickstart === true && options.run !== false,\n strapiVersion: version,\n packageJsonStrapi: {\n template: options.template,\n },\n uuid,\n docker: process.env.DOCKER === 'true',\n installId,\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 shouldCreateGrowthSsoTrial,\n isABTestEnabled: false,\n };\n\n if (options.template !== undefined) {\n scope.useExample = false;\n } else if (options.example === true) {\n scope.useExample = true;\n } else if (options.example === false || options.quickstart === true) {\n scope.useExample = false;\n } else {\n scope.useExample = await prompts.example();\n }\n\n if (options.javascript === true) {\n scope.useTypescript = false;\n } else if (options.typescript === true || options.quickstart) {\n scope.useTypescript = true;\n } else if (!options.template) {\n scope.useTypescript = await prompts.typescript();\n }\n\n if (options.install === true || options.quickstart) {\n scope.installDependencies = true;\n } else if (options.install === false) {\n scope.installDependencies = false;\n } else {\n scope.installDependencies = await prompts.installDependencies(scope.packageManager);\n }\n\n if (scope.useTypescript) {\n scope.devDependencies = {\n ...scope.devDependencies,\n typescript: '^5',\n '@types/node': '^20',\n '@types/react': '^18',\n '@types/react-dom': '^18',\n };\n }\n\n if (options.gitInit === true || options.quickstart) {\n scope.gitInit = true;\n } else if (options.gitInit === false) {\n scope.gitInit = false;\n } else {\n scope.gitInit = await prompts.gitInit();\n }\n\n scope.isABTestEnabled = await prompts.enableABTests();\n\n addDatabaseDependencies(scope);\n\n try {\n await createStrapi(scope);\n } catch (error: unknown) {\n if (!(error instanceof Error)) {\n throw error;\n }\n\n await trackError({ scope, error });\n\n logger.fatal(error.message);\n }\n}\n\nfunction getPkgManager(options: Options) {\n if (options.useNpm === true) {\n return 'npm';\n }\n\n if (options.usePnpm === true) {\n return 'pnpm';\n }\n\n if (options.useYarn === true) {\n return 'yarn';\n }\n\n const userAgent = process.env.npm_config_user_agent || '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n return 'npm';\n}\n\nexport { run, createStrapi };\nexport type { Scope };\n"],"names":["version","fse","readJSONSync","join","__dirname","command","commander","Command","arguments","usage","option","description","run","args","options","parse","opts","directory","logger","title","chalk","green","bold","javascript","undefined","typescript","template","fatal","example","startsWith","useNpm","usePnpm","useYarn","filter","Boolean","length","quickstart","checkNodeRequirements","appDirectory","prompts","rootPath","checkInstallPath","shouldCreateGrowthSsoTrial","skipCloud","handleCloudLogin","tmpPath","os","tmpdir","crypto","randomBytes","toString","randomUUID","uuid","process","env","STRAPI_UUID_PREFIX","installId","installID","scope","name","basename","packageManager","getPkgManager","database","getDatabaseInfos","templateBranch","templatePath","isQuickstart","useExample","runApp","strapiVersion","packageJsonStrapi","docker","DOCKER","gitInit","devDependencies","dependencies","react","isABTestEnabled","useTypescript","install","installDependencies","addDatabaseDependencies","createStrapi","error","Error","trackError","message","userAgent","npm_config_user_agent"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,EAAEA,OAAO,EAAE,GAAGC,IAAIC,YAAY,CAACC,IAAKC,CAAAA,SAAAA,EAAW,IAAM,EAAA,cAAA,CAAA,CAAA;AAE3D,MAAMC,OAAAA,GAAU,IAAIC,SAAUC,CAAAA,OAAO,CAAC,mBACnCP,CAAAA,CAAAA,OAAO,CAACA,OAAAA,CAAAA,CACRQ,SAAS,CAAC,eACVC,KAAK,CAAC,uBACNC,CAAAA,CAAAA,MAAM,CAAC,cAAA,EAAgB,wCACvBA,MAAM,CAAC,UAAY,EAAA,mDAAA,CAEpB;AACCA,CAAAA,MAAM,CAAC,oBAAsB,EAAA,kDAAA,CAAA,CAC7BA,MAAM,CAAC,oBAAA,EAAsB,yCAE9B;CACCA,MAAM,CAAC,WAAa,EAAA,wCAAA,CAAA,CACpBA,MAAM,CAAC,YAAc,EAAA,yCAAA,CAAA,CACrBA,MAAM,CAAC,YAAc,EAAA,yCAAA,CAEtB;AACCA,CAAAA,MAAM,CAAC,WAAa,EAAA,sBAAA,CAAA,CACpBA,MAAM,CAAC,cAAA,EAAgB,8BAExB;CACCA,MAAM,CAAC,cAAgB,EAAA,uCAAA,CAExB;AACCA,CAAAA,MAAM,CAAC,WAAa,EAAA,oBAAA,CAAA,CACpBA,MAAM,CAAC,cAAA,EAAgB,4BAExB;AACCA,CAAAA,MAAM,CAAC,YAAc,EAAA,6BAAA,CAAA,CACrBA,MAAM,CAAC,eAAA,EAAiB,oCAEzB;CACCA,MAAM,CAAC,yBAAyB,iBAChCA,CAAAA,CAAAA,MAAM,CAAC,mBAAqB,EAAA,eAAA,CAAA,CAC5BA,MAAM,CAAC,mBAAqB,EAAA,eAAA,CAAA,CAC5BA,MAAM,CAAC,mBAAA,EAAqB,iBAC5BA,MAAM,CAAC,6BAA6B,mBACpCA,CAAAA,CAAAA,MAAM,CAAC,2BAAA,EAA6B,mBACpCA,CAAAA,CAAAA,MAAM,CAAC,iBAAmB,EAAA,cAAA,CAAA,CAC1BA,MAAM,CAAC,mBAAA,EAAqB,iCAC5BA,MAAM,CAAC,WAAa,EAAA,6BAAA,CAAA,CAEpBA,MAAM,CAAC,yBAAyB,2BAChCA,CAAAA,CAAAA,MAAM,CAAC,oCAAsC,EAAA,mCAAA,CAAA,CAC7CA,MAAM,CAAC,gCAAA,EAAkC,sDAEzCC,CAAAA,CAAAA,WAAW,CAAC,0BAAA,CAAA;AAEf,eAAeC,IAAIC,IAAc,EAAA;AAC/B,IAAA,MAAMC,OAAUT,GAAAA,OAAAA,CAAQU,KAAK,CAACF,MAAMG,IAAI,EAAA;AACxC,IAAA,MAAMC,WAAYZ,GAAAA,OAAAA,CAAQQ,IAAI,CAAC,CAAE,CAAA;IAEjCK,MAAOC,CAAAA,KAAK,CACV,QACA,EAAA,CAAA,EAAGC,MAAMC,KAAK,CAACD,KAAME,CAAAA,IAAI,CAAC,CAAC,CAAC,EAAEtB,OAAAA,CAAAA,CAAS,GAAG,CAAC,EAAEoB,MAAME,IAAI,CAAC,kCAAoC,CAAA,CAAA,EAAE,CAAC,CAAA;AAGjG,IAAA,IACE,CAACR,OAAQS,CAAAA,UAAU,KAAKC,SAAaV,IAAAA,OAAAA,CAAQW,UAAU,KAAKD,SAAQ,KACpEV,OAAQY,CAAAA,QAAQ,KAAKF,SACrB,EAAA;QACAN,MAAOS,CAAAA,KAAK,CACV,CAAC,eAAe,EAAEP,KAAME,CAAAA,IAAI,CAAC,cAAgB,CAAA,CAAA,IAAI,EAAEF,KAAME,CAAAA,IAAI,CAAC,cAAgB,CAAA,CAAA,MAAM,EAAEF,KAAME,CAAAA,IAAI,CAAC,YAAe,CAAA,CAAA,CAAA,CAAA;AAEpH;AAEA,IAAA,IAAIR,QAAQS,UAAU,KAAK,QAAQT,OAAQW,CAAAA,UAAU,KAAK,IAAM,EAAA;AAC9DP,QAAAA,MAAAA,CAAOS,KAAK,CACV,CAAC,oBAAoB,EAAEP,MAAME,IAAI,CAAC,cAAgB,CAAA,CAAA,YAAY,EAAEF,KAAME,CAAAA,IAAI,CAAC,cAAA,CAAA,CAAgB,sBAAsB,CAAC,CAAA;AAEtH;;AAGA,IAAA,IAAIR,QAAQc,OAAO,KAAK,QAAQd,OAAQY,CAAAA,QAAQ,KAAKF,SAAW,EAAA;AAC9DN,QAAAA,MAAAA,CAAOS,KAAK,CAAC,CAAC,eAAe,EAAEP,KAAME,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAa,MAAM,EAAEF,KAAME,CAAAA,IAAI,CAAC,YAAe,CAAA,CAAA,CAAA,CAAA;AAC3F;IAEA,IAAIR,OAAAA,CAAQY,QAAQ,KAAKF,SAAAA,IAAaV,QAAQY,QAAQ,CAACG,UAAU,CAAC,GAAM,CAAA,EAAA;AACtEX,QAAAA,MAAAA,CAAOS,KAAK,CAAC,CAAC,cAAc,EAAEP,KAAAA,CAAME,IAAI,CAAC,CAAC,CAAC,EAAER,QAAQY,QAAQ,CAAC,CAAC,CAAC,CAAA,CAAE,WAAW,CAAC,CAAA;AAChF;IAEA,IAAI;AAACZ,QAAAA,OAAAA,CAAQgB,MAAM;AAAEhB,QAAAA,OAAAA,CAAQiB,OAAO;AAAEjB,QAAAA,OAAAA,CAAQkB;AAAQ,KAAA,CAACC,MAAM,CAACC,OAASC,CAAAA,CAAAA,MAAM,GAAG,CAAG,EAAA;QACjFjB,MAAOS,CAAAA,KAAK,CACV,CAAC,8DAA8D,EAAEP,KAAME,CAAAA,IAAI,CAAC,qCAAwC,CAAA,CAAA,CAAA,CAAA;AAExH;AAEA,IAAA,IAAIR,OAAQsB,CAAAA,UAAU,IAAI,CAACnB,WAAW,EAAA;AACpCC,QAAAA,MAAAA,CAAOS,KAAK,CACV,CAAC,mBAAmB,EAAEP,KAAME,CAAAA,IAAI,CAAC,aAAA,CAAA,CAAe,4BAA4B,EAAEF,KAAME,CAAAA,IAAI,CAAC,cAAiB,CAAA,CAAA,CAAA,CAAA;AAE9G;AAEAe,IAAAA,qBAAAA,EAAAA;AAEA,IAAA,MAAMC,YAAerB,GAAAA,WAAAA,IAAc,MAAMsB,SAAiB,EAAA;IAE1D,MAAMC,QAAAA,GAAW,MAAMC,gBAAiBH,CAAAA,YAAAA,CAAAA;AAExC,IAAA,IAAII,0BAA6B,GAAA,KAAA;IACjC,IAAI,CAAC5B,OAAQ6B,CAAAA,SAAS,EAAE;AACtBD,QAAAA,0BAAAA,GAA6B,MAAME,gBAAAA,EAAAA;AACrC;AAEA,IAAA,MAAMC,OAAU1C,GAAAA,IAAAA,CAAK2C,EAAGC,CAAAA,MAAM,IAAI,CAAC,MAAM,EAAEC,MAAAA,CAAOC,WAAW,CAAC,CAAGC,CAAAA,CAAAA,QAAQ,CAAC,KAAQ,CAAA,CAAA,CAAA,CAAA;IAElF,MAAMC,UAAAA,GAAaH,OAAOG,UAAU,EAAA;IACpC,MAAMC,IAAAA,GAAO,CAACC,OAAAA,CAAQC,GAAG,CAACC,kBAAkB,IAAI,EAAC,IAAKJ,UAAAA;AACtD,IAAA,MAAMK,YAAYC,SAAUL,CAAAA,IAAAA,CAAAA;AAE5B,IAAA,MAAMM,KAAe,GAAA;AACnBlB,QAAAA,QAAAA;AACAmB,QAAAA,IAAAA,EAAMC,QAASpB,CAAAA,QAAAA,CAAAA;AACfqB,QAAAA,cAAAA,EAAgBC,aAAchD,CAAAA,OAAAA,CAAAA;AAC9BiD,QAAAA,QAAAA,EAAU,MAAMC,gBAAiBlD,CAAAA,OAAAA,CAAAA;AACjCY,QAAAA,QAAAA,EAAUZ,QAAQY,QAAQ;AAC1BuC,QAAAA,cAAAA,EAAgBnD,QAAQmD,cAAc;AACtCC,QAAAA,YAAAA,EAAcpD,QAAQoD,YAAY;AAClCC,QAAAA,YAAAA,EAAcrD,QAAQsB,UAAU;QAChCgC,UAAY,EAAA,KAAA;AACZC,QAAAA,MAAAA,EAAQvD,QAAQsB,UAAU,KAAK,IAAQtB,IAAAA,OAAAA,CAAQF,GAAG,KAAK,KAAA;QACvD0D,aAAetE,EAAAA,OAAAA;QACfuE,iBAAmB,EAAA;AACjB7C,YAAAA,QAAAA,EAAUZ,QAAQY;AACpB,SAAA;AACA0B,QAAAA,IAAAA;AACAoB,QAAAA,MAAAA,EAAQnB,OAAQC,CAAAA,GAAG,CAACmB,MAAM,KAAK,MAAA;AAC/BjB,QAAAA,SAAAA;AACAX,QAAAA,OAAAA;QACA6B,OAAS,EAAA,IAAA;AACTC,QAAAA,eAAAA,EAAiB,EAAC;QAClBC,YAAc,EAAA;YACZ,gBAAkB5E,EAAAA,OAAAA;YAClB,kCAAoCA,EAAAA,OAAAA;YACpC,sBAAwBA,EAAAA,OAAAA;;YAExB6E,KAAO,EAAA,SAAA;YACP,WAAa,EAAA,SAAA;YACb,kBAAoB,EAAA,QAAA;YACpB,mBAAqB,EAAA;AACvB,SAAA;AACAnC,QAAAA,0BAAAA;QACAoC,eAAiB,EAAA;AACnB,KAAA;IAEA,IAAIhE,OAAAA,CAAQY,QAAQ,KAAKF,SAAW,EAAA;AAClCkC,QAAAA,KAAAA,CAAMU,UAAU,GAAG,KAAA;AACrB,KAAA,MAAO,IAAItD,OAAAA,CAAQc,OAAO,KAAK,IAAM,EAAA;AACnC8B,QAAAA,KAAAA,CAAMU,UAAU,GAAG,IAAA;KACd,MAAA,IAAItD,QAAQc,OAAO,KAAK,SAASd,OAAQsB,CAAAA,UAAU,KAAK,IAAM,EAAA;AACnEsB,QAAAA,KAAAA,CAAMU,UAAU,GAAG,KAAA;KACd,MAAA;AACLV,QAAAA,KAAAA,CAAMU,UAAU,GAAG,MAAM7B,OAAe,EAAA;AAC1C;IAEA,IAAIzB,OAAAA,CAAQS,UAAU,KAAK,IAAM,EAAA;AAC/BmC,QAAAA,KAAAA,CAAMqB,aAAa,GAAG,KAAA;AACxB,KAAA,MAAO,IAAIjE,OAAQW,CAAAA,UAAU,KAAK,IAAQX,IAAAA,OAAAA,CAAQsB,UAAU,EAAE;AAC5DsB,QAAAA,KAAAA,CAAMqB,aAAa,GAAG,IAAA;AACxB,KAAA,MAAO,IAAI,CAACjE,OAAQY,CAAAA,QAAQ,EAAE;AAC5BgC,QAAAA,KAAAA,CAAMqB,aAAa,GAAG,MAAMxC,UAAkB,EAAA;AAChD;AAEA,IAAA,IAAIzB,QAAQkE,OAAO,KAAK,IAAQlE,IAAAA,OAAAA,CAAQsB,UAAU,EAAE;AAClDsB,QAAAA,KAAAA,CAAMuB,mBAAmB,GAAG,IAAA;AAC9B,KAAA,MAAO,IAAInE,OAAAA,CAAQkE,OAAO,KAAK,KAAO,EAAA;AACpCtB,QAAAA,KAAAA,CAAMuB,mBAAmB,GAAG,KAAA;KACvB,MAAA;AACLvB,QAAAA,KAAAA,CAAMuB,mBAAmB,GAAG,MAAM1C,mBAA2B,CAACmB,MAAMG,cAAc,CAAA;AACpF;IAEA,IAAIH,KAAAA,CAAMqB,aAAa,EAAE;AACvBrB,QAAAA,KAAAA,CAAMiB,eAAe,GAAG;AACtB,YAAA,GAAGjB,MAAMiB,eAAe;YACxBlD,UAAY,EAAA,IAAA;YACZ,aAAe,EAAA,KAAA;YACf,cAAgB,EAAA,KAAA;YAChB,kBAAoB,EAAA;AACtB,SAAA;AACF;AAEA,IAAA,IAAIX,QAAQ4D,OAAO,KAAK,IAAQ5D,IAAAA,OAAAA,CAAQsB,UAAU,EAAE;AAClDsB,QAAAA,KAAAA,CAAMgB,OAAO,GAAG,IAAA;AAClB,KAAA,MAAO,IAAI5D,OAAAA,CAAQ4D,OAAO,KAAK,KAAO,EAAA;AACpChB,QAAAA,KAAAA,CAAMgB,OAAO,GAAG,KAAA;KACX,MAAA;AACLhB,QAAAA,KAAAA,CAAMgB,OAAO,GAAG,MAAMnC,OAAe,EAAA;AACvC;AAEAmB,IAAAA,KAAAA,CAAMoB,eAAe,GAAG,MAAMvC,aAAqB,EAAA;IAEnD2C,uBAAwBxB,CAAAA,KAAAA,CAAAA;IAExB,IAAI;AACF,QAAA,MAAMyB,YAAazB,CAAAA,KAAAA,CAAAA;AACrB,KAAA,CAAE,OAAO0B,KAAgB,EAAA;AACvB,QAAA,IAAI,EAAEA,KAAiBC,YAAAA,KAAI,CAAI,EAAA;YAC7B,MAAMD,KAAAA;AACR;AAEA,QAAA,MAAME,UAAW,CAAA;AAAE5B,YAAAA,KAAAA;AAAO0B,YAAAA;AAAM,SAAA,CAAA;QAEhClE,MAAOS,CAAAA,KAAK,CAACyD,KAAAA,CAAMG,OAAO,CAAA;AAC5B;AACF;AAEA,SAASzB,cAAchD,OAAgB,EAAA;IACrC,IAAIA,OAAAA,CAAQgB,MAAM,KAAK,IAAM,EAAA;QAC3B,OAAO,KAAA;AACT;IAEA,IAAIhB,OAAAA,CAAQiB,OAAO,KAAK,IAAM,EAAA;QAC5B,OAAO,MAAA;AACT;IAEA,IAAIjB,OAAAA,CAAQkB,OAAO,KAAK,IAAM,EAAA;QAC5B,OAAO,MAAA;AACT;AAEA,IAAA,MAAMwD,SAAYnC,GAAAA,OAAAA,CAAQC,GAAG,CAACmC,qBAAqB,IAAI,EAAA;IAEvD,IAAID,SAAAA,CAAU3D,UAAU,CAAC,MAAS,CAAA,EAAA;QAChC,OAAO,MAAA;AACT;IAEA,IAAI2D,SAAAA,CAAU3D,UAAU,CAAC,MAAS,CAAA,EAAA;QAChC,OAAO,MAAA;AACT;IAEA,OAAO,KAAA;AACT;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { join, basename } from 'node:path';\nimport os from 'node:os';\nimport chalk from 'chalk';\nimport commander from 'commander';\nimport crypto from 'crypto';\nimport fse from 'fs-extra';\n\nimport * as prompts from './prompts';\nimport { handleCloudLogin } from './cloud';\nimport { createStrapi } from './create-strapi';\nimport { checkNodeRequirements } from './utils/check-requirements';\nimport { checkInstallPath } from './utils/check-install-path';\nimport { installID } from './utils/install-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 // A/B testing options\n .option('--enable-ab-tests', 'Enable anonymous A/B testing')\n .option('--no-enable-ab-tests', 'Disable anonymous A/B testing')\n\n // Automation\n .option('--non-interactive', 'Skip all interactive prompts and use defaults')\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 if (options.nonInteractive && !directory) {\n logger.fatal(\n `Please specify the ${chalk.bold('<directory>')} of your project when using ${chalk.bold('--non-interactive')}`\n );\n }\n\n const skipPrompts = options.quickstart || options.nonInteractive;\n\n checkNodeRequirements();\n\n const appDirectory = directory || (await prompts.directory());\n\n const rootPath = await checkInstallPath(appDirectory);\n\n let shouldCreateGrowthSsoTrial = false;\n if (!options.skipCloud && !options.nonInteractive) {\n shouldCreateGrowthSsoTrial = await handleCloudLogin();\n }\n\n const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);\n\n const randomUUID = crypto.randomUUID();\n const uuid = (process.env.STRAPI_UUID_PREFIX || '') + randomUUID;\n const installId = installID(uuid);\n\n const scope: Scope = {\n rootPath,\n name: basename(rootPath),\n packageManager: getPkgManager(options),\n database: await getDatabaseInfos(options),\n template: options.template,\n templateBranch: options.templateBranch,\n templatePath: options.templatePath,\n isQuickstart: options.quickstart,\n useExample: false,\n runApp: options.quickstart === true && options.run !== false,\n strapiVersion: version,\n packageJsonStrapi: {\n template: options.template,\n },\n uuid,\n docker: process.env.DOCKER === 'true',\n installId,\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 shouldCreateGrowthSsoTrial,\n isABTestEnabled: false,\n };\n\n if (options.template !== undefined) {\n scope.useExample = false;\n } else if (options.example === true) {\n scope.useExample = true;\n } else if (options.example === false || skipPrompts) {\n scope.useExample = false;\n } else {\n scope.useExample = await prompts.example();\n }\n\n if (options.javascript === true) {\n scope.useTypescript = false;\n } else if (options.typescript === true || skipPrompts) {\n scope.useTypescript = true;\n } else if (!options.template) {\n scope.useTypescript = await prompts.typescript();\n }\n\n scope.installDependencies = await resolveOption(options.install, skipPrompts, true, () =>\n 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 scope.gitInit = await resolveOption(options.gitInit, skipPrompts, true, prompts.gitInit);\n\n scope.isABTestEnabled = await resolveOption(\n options.enableAbTests,\n skipPrompts,\n false,\n prompts.enableABTests\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\n/**\n * Resolves a boolean CLI option: explicit flag wins, then non-interactive default, then interactive prompt.\n */\nasync function resolveOption(\n explicitValue: boolean | undefined,\n skipPrompts: boolean | undefined,\n defaultValue: boolean,\n promptFn: () => Promise<boolean>\n): Promise<boolean> {\n if (explicitValue !== undefined) return explicitValue;\n if (skipPrompts) return defaultValue;\n return promptFn();\n}\n\nfunction getPkgManager(options: Options) {\n if (options.useNpm === true) {\n return 'npm';\n }\n\n if (options.usePnpm === true) {\n return 'pnpm';\n }\n\n if (options.useYarn === true) {\n return 'yarn';\n }\n\n const userAgent = process.env.npm_config_user_agent || '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n return 'npm';\n}\n\nexport { run, createStrapi };\nexport type { Scope };\n"],"names":["version","fse","readJSONSync","join","__dirname","command","commander","Command","arguments","usage","option","description","run","args","options","parse","opts","directory","logger","title","chalk","green","bold","javascript","undefined","typescript","template","fatal","example","startsWith","useNpm","usePnpm","useYarn","filter","Boolean","length","quickstart","nonInteractive","skipPrompts","checkNodeRequirements","appDirectory","prompts","rootPath","checkInstallPath","shouldCreateGrowthSsoTrial","skipCloud","handleCloudLogin","tmpPath","os","tmpdir","crypto","randomBytes","toString","randomUUID","uuid","process","env","STRAPI_UUID_PREFIX","installId","installID","scope","name","basename","packageManager","getPkgManager","database","getDatabaseInfos","templateBranch","templatePath","isQuickstart","useExample","runApp","strapiVersion","packageJsonStrapi","docker","DOCKER","gitInit","devDependencies","dependencies","react","isABTestEnabled","useTypescript","installDependencies","resolveOption","install","enableAbTests","addDatabaseDependencies","createStrapi","error","Error","trackError","message","explicitValue","defaultValue","promptFn","userAgent","npm_config_user_agent"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -20,6 +20,8 @@ export interface Options {
20
20
  install?: boolean;
21
21
  example?: boolean;
22
22
  gitInit?: boolean;
23
+ enableAbTests?: boolean;
24
+ nonInteractive?: boolean;
23
25
  templateBranch?: string;
24
26
  templatePath?: string;
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["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 installId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExample?: boolean;\n gitInit?: boolean;\n shouldCreateGrowthSsoTrial: boolean;\n isABTestEnabled: 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"],"names":["isStderrError","error","stderr"],"mappings":";;AAwFO,SAASA,cAAcC,KAAc,EAAA;IAC1C,OACE,OAAOA,KAAU,KAAA,QAAA,IACjBA,KAAU,KAAA,IAAA,IACV,YAAYA,KACZ,IAAA,OAAOA,KAAMC,CAAAA,MAAM,KAAK,QAAA;AAE5B;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["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 enableAbTests?: boolean;\n nonInteractive?: 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 installId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExample?: boolean;\n gitInit?: boolean;\n shouldCreateGrowthSsoTrial: boolean;\n isABTestEnabled: 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"],"names":["isStderrError","error","stderr"],"mappings":";;AA0FO,SAASA,cAAcC,KAAc,EAAA;IAC1C,OACE,OAAOA,KAAU,KAAA,QAAA,IACjBA,KAAU,KAAA,IAAA,IACV,YAAYA,KACZ,IAAA,OAAOA,KAAMC,CAAAA,MAAM,KAAK,QAAA;AAE5B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../src/types.ts"],"sourcesContent":["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 installId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExample?: boolean;\n gitInit?: boolean;\n shouldCreateGrowthSsoTrial: boolean;\n isABTestEnabled: 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"],"names":["isStderrError","error","stderr"],"mappings":"AAwFO,SAASA,cAAcC,KAAc,EAAA;IAC1C,OACE,OAAOA,KAAU,KAAA,QAAA,IACjBA,KAAU,KAAA,IAAA,IACV,YAAYA,KACZ,IAAA,OAAOA,KAAMC,CAAAA,MAAM,KAAK,QAAA;AAE5B;;;;"}
1
+ {"version":3,"file":"types.mjs","sources":["../src/types.ts"],"sourcesContent":["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 enableAbTests?: boolean;\n nonInteractive?: 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 installId?: string;\n database: DatabaseInfo;\n tmpPath?: string;\n packageJsonStrapi?: Record<string, unknown>;\n useTypescript?: boolean;\n useExample?: boolean;\n gitInit?: boolean;\n shouldCreateGrowthSsoTrial: boolean;\n isABTestEnabled: 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"],"names":["isStderrError","error","stderr"],"mappings":"AA0FO,SAASA,cAAcC,KAAc,EAAA;IAC1C,OACE,OAAOA,KAAU,KAAA,QAAA,IACjBA,KAAU,KAAA,IAAA,IACV,YAAYA,KACZ,IAAA,OAAOA,KAAMC,CAAAA,MAAM,KAAK,QAAA;AAE5B;;;;"}
@@ -70,7 +70,7 @@ async function getDatabaseInfos(options) {
70
70
  }
71
71
  const hasDBOptions = DBOptions.some((key)=>key in options);
72
72
  if (!hasDBOptions) {
73
- if (options.quickstart) {
73
+ if (options.quickstart || options.nonInteractive) {
74
74
  return DEFAULT_CONFIG;
75
75
  }
76
76
  return dbPrompt();
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sources":["../../src/utils/database.ts"],"sourcesContent":["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.8' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '12.4.1' },\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"],"names":["DBOptions","VALID_CLIENTS","DEFAULT_CONFIG","client","connection","filename","dbPrompt","useDefault","inquirer","prompt","type","name","message","default","choices","questions","dbQuestions","map","q","responses","getDatabaseInfos","options","skipDb","dbclient","includes","logger","fatal","join","matchingArgs","filter","key","missingArgs","length","hasDBOptions","some","quickstart","database","host","dbhost","port","dbport","dbname","username","dbusername","password","dbpassword","dbfile","dbssl","undefined","ssl","sqlClientModule","mysql","mysql2","postgres","pg","sqlite","addDatabaseDependencies","scope","dependencies","DEFAULT_PORTS","validate","value","mask"],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sources":["../../src/utils/database.ts"],"sourcesContent":["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 || options.nonInteractive) {\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.8' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '12.4.1' },\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"],"names":["DBOptions","VALID_CLIENTS","DEFAULT_CONFIG","client","connection","filename","dbPrompt","useDefault","inquirer","prompt","type","name","message","default","choices","questions","dbQuestions","map","q","responses","getDatabaseInfos","options","skipDb","dbclient","includes","logger","fatal","join","matchingArgs","filter","key","missingArgs","length","hasDBOptions","some","quickstart","nonInteractive","database","host","dbhost","port","dbport","dbname","username","dbusername","password","dbpassword","dbfile","dbssl","undefined","ssl","sqlClientModule","mysql","mysql2","postgres","pg","sqlite","addDatabaseDependencies","scope","dependencies","DEFAULT_PORTS","validate","value","mask"],"mappings":"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"}
@@ -68,7 +68,7 @@ async function getDatabaseInfos(options) {
68
68
  }
69
69
  const hasDBOptions = DBOptions.some((key)=>key in options);
70
70
  if (!hasDBOptions) {
71
- if (options.quickstart) {
71
+ if (options.quickstart || options.nonInteractive) {
72
72
  return DEFAULT_CONFIG;
73
73
  }
74
74
  return dbPrompt();
@@ -1 +1 @@
1
- {"version":3,"file":"database.mjs","sources":["../../src/utils/database.ts"],"sourcesContent":["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.8' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '12.4.1' },\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"],"names":["DBOptions","VALID_CLIENTS","DEFAULT_CONFIG","client","connection","filename","dbPrompt","useDefault","inquirer","prompt","type","name","message","default","choices","questions","dbQuestions","map","q","responses","getDatabaseInfos","options","skipDb","dbclient","includes","logger","fatal","join","matchingArgs","filter","key","missingArgs","length","hasDBOptions","some","quickstart","database","host","dbhost","port","dbport","dbname","username","dbusername","password","dbpassword","dbfile","dbssl","undefined","ssl","sqlClientModule","mysql","mysql2","postgres","pg","sqlite","addDatabaseDependencies","scope","dependencies","DEFAULT_PORTS","validate","value","mask"],"mappings":"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"}
1
+ {"version":3,"file":"database.mjs","sources":["../../src/utils/database.ts"],"sourcesContent":["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 || options.nonInteractive) {\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.8' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '12.4.1' },\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"],"names":["DBOptions","VALID_CLIENTS","DEFAULT_CONFIG","client","connection","filename","dbPrompt","useDefault","inquirer","prompt","type","name","message","default","choices","questions","dbQuestions","map","q","responses","getDatabaseInfos","options","skipDb","dbclient","includes","logger","fatal","join","matchingArgs","filter","key","missingArgs","length","hasDBOptions","some","quickstart","nonInteractive","database","host","dbhost","port","dbport","dbname","username","dbusername","password","dbpassword","dbfile","dbssl","undefined","ssl","sqlClientModule","mysql","mysql2","postgres","pg","sqlite","addDatabaseDependencies","scope","dependencies","DEFAULT_PORTS","validate","value","mask"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-strapi-app",
3
- "version": "5.35.0",
3
+ "version": "5.36.0",
4
4
  "description": "Generate a new Strapi application.",
5
5
  "keywords": [
6
6
  "create-strapi-app",
@@ -50,7 +50,7 @@
50
50
  "watch": "run -T rollup -c -w"
51
51
  },
52
52
  "dependencies": {
53
- "@strapi/cloud-cli": "5.35.0",
53
+ "@strapi/cloud-cli": "5.36.0",
54
54
  "async-retry": "1.3.3",
55
55
  "chalk": "4.1.2",
56
56
  "commander": "8.3.0",
@@ -69,8 +69,8 @@
69
69
  "@types/async-retry": "^1",
70
70
  "@types/fs-extra": "11.0.4",
71
71
  "@types/inquirer": "8.2.5",
72
- "eslint-config-custom": "5.35.0",
73
- "tsconfig": "5.35.0"
72
+ "eslint-config-custom": "5.36.0",
73
+ "tsconfig": "5.36.0"
74
74
  },
75
75
  "engines": {
76
76
  "node": ">=20.0.0 <=24.x.x",
@@ -1,4 +1,6 @@
1
- export default ({ env }) => ({
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Admin => ({
2
4
  auth: {
3
5
  secret: env('ADMIN_JWT_SECRET'),
4
6
  },
@@ -18,3 +20,5 @@ export default ({ env }) => ({
18
20
  promoteEE: env.bool('FLAG_PROMOTE_EE', true),
19
21
  },
20
22
  });
23
+
24
+ export default config;
@@ -1,7 +1,11 @@
1
- export default {
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config: Core.Config.Api = {
2
4
  rest: {
3
5
  defaultLimit: 25,
4
6
  maxLimit: 100,
5
7
  withCount: true,
6
8
  },
7
9
  };
10
+
11
+ export default config;
@@ -1,6 +1,7 @@
1
1
  import path from 'path';
2
+ import type { Core } from '@strapi/strapi';
2
3
 
3
- export default ({ env }) => {
4
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Database => {
4
5
  const client = env('DATABASE_CLIENT', 'sqlite');
5
6
 
6
7
  const connections = {
@@ -58,3 +59,5 @@ export default ({ env }) => {
58
59
  },
59
60
  };
60
61
  };
62
+
63
+ export default config;
@@ -1,4 +1,6 @@
1
- export default [
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config: Core.Config.Middlewares = [
2
4
  'strapi::logger',
3
5
  'strapi::errors',
4
6
  'strapi::security',
@@ -10,3 +12,5 @@ export default [
10
12
  'strapi::favicon',
11
13
  'strapi::public',
12
14
  ];
15
+
16
+ export default config;
@@ -1 +1,5 @@
1
- export default () => ({});
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Plugin => ({});
4
+
5
+ export default config;
@@ -1,7 +1,11 @@
1
- export default ({ env }) => ({
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Server => ({
2
4
  host: env('HOST', '0.0.0.0'),
3
5
  port: env.int('PORT', 1337),
4
6
  app: {
5
7
  keys: env.array('APP_KEYS'),
6
8
  },
7
9
  });
10
+
11
+ export default config;
@@ -1,4 +1,6 @@
1
- export default ({ env }) => ({
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Admin => ({
2
4
  auth: {
3
5
  secret: env('ADMIN_JWT_SECRET'),
4
6
  },
@@ -18,3 +20,5 @@ export default ({ env }) => ({
18
20
  promoteEE: env.bool('FLAG_PROMOTE_EE', true),
19
21
  },
20
22
  });
23
+
24
+ export default config;
@@ -1,7 +1,11 @@
1
- export default {
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config: Core.Config.Api = {
2
4
  rest: {
3
5
  defaultLimit: 25,
4
6
  maxLimit: 100,
5
7
  withCount: true,
6
8
  },
7
9
  };
10
+
11
+ export default config;
@@ -1,6 +1,7 @@
1
1
  import path from 'path';
2
+ import type { Core } from '@strapi/strapi';
2
3
 
3
- export default ({ env }) => {
4
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Database => {
4
5
  const client = env('DATABASE_CLIENT', 'sqlite');
5
6
 
6
7
  const connections = {
@@ -58,3 +59,5 @@ export default ({ env }) => {
58
59
  },
59
60
  };
60
61
  };
62
+
63
+ export default config;
@@ -1,4 +1,6 @@
1
- export default [
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config: Core.Config.Middlewares = [
2
4
  'strapi::logger',
3
5
  'strapi::errors',
4
6
  'strapi::security',
@@ -10,3 +12,5 @@ export default [
10
12
  'strapi::favicon',
11
13
  'strapi::public',
12
14
  ];
15
+
16
+ export default config;
@@ -1 +1,5 @@
1
- export default () => ({});
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Plugin => ({});
4
+
5
+ export default config;
@@ -1,7 +1,11 @@
1
- export default ({ env }) => ({
1
+ import type { Core } from '@strapi/strapi';
2
+
3
+ const config = ({ env }: Core.Config.Shared.ConfigParams): Core.Config.Server => ({
2
4
  host: env('HOST', '0.0.0.0'),
3
5
  port: env.int('PORT', 1337),
4
6
  app: {
5
7
  keys: env.array('APP_KEYS'),
6
8
  },
7
9
  });
10
+
11
+ export default config;