create-strapi-app 4.25.1 → 4.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -2,7 +2,21 @@ Copyright (c) 2015-present Strapi Solutions SAS
2
2
 
3
3
  Portions of the Strapi software are licensed as follows:
4
4
 
5
- * All software that resides under an "ee/" directory (the “EE Software”), if that directory exists, is licensed under the license defined in "ee/LICENSE".
5
+ * All software that resides under an "ee/" directory (the “EE Software”), if that directory exists, is licensed under the license defined below.
6
+
7
+ Enterprise License
8
+
9
+ If you or the company you represent has entered into a written agreement referencing the Enterprise Edition of the Strapi source code available at
10
+ https://github.com/strapi/strapi, then such agreement applies to your use of the Enterprise Edition of the Strapi Software. If you or the company you
11
+ represent is using the Enterprise Edition of the Strapi Software in connection with a subscription to our cloud offering, then the agreement you have
12
+ agreed to with respect to our cloud offering and the licenses included in such agreement apply to your use of the Enterprise Edition of the Strapi Software.
13
+ Otherwise, the Strapi Enterprise Software License Agreement (found here https://strapi.io/enterprise-terms) applies to your use of the Enterprise Edition of the Strapi Software.
14
+
15
+ BY ACCESSING OR USING THE ENTERPRISE EDITION OF THE STRAPI SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE RELEVANT REFERENCED AGREEMENT.
16
+ IF YOU ARE NOT AUTHORIZED TO ACCEPT THESE TERMS ON BEHALF OF THE COMPANY YOU REPRESENT OR IF YOU DO NOT AGREE TO ALL OF THE RELEVANT TERMS AND CONDITIONS REFERENCED AND YOU
17
+ HAVE NOT OTHERWISE EXECUTED A WRITTEN AGREEMENT WITH STRAPI, YOU ARE NOT AUTHORIZED TO ACCESS OR USE OR ALLOW ANY USER TO ACCESS OR USE ANY PART OF
18
+ THE ENTERPRISE EDITION OF THE STRAPI SOFTWARE. YOUR ACCESS RIGHTS ARE CONDITIONAL ON YOUR CONSENT TO THE RELEVANT REFERENCED TERMS TO THE EXCLUSION OF ALL OTHER TERMS;
19
+ IF THE RELEVANT REFERENCED TERMS ARE CONSIDERED AN OFFER BY YOU, ACCEPTANCE IS EXPRESSLY LIMITED TO THE RELEVANT REFERENCED TERMS.
6
20
 
7
21
  * All software outside of the above-mentioned directories or restrictions above is available under the "MIT Expat" license as set forth below.
8
22
 
@@ -18,5 +32,6 @@ furnished to do so, subject to the following conditions:
18
32
  The above copyright notice and this permission notice shall be included in all
19
33
  copies or substantial portions of the Software.
20
34
 
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.
35
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
36
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
37
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -59,13 +59,13 @@ function assertCloudError(e) {
59
59
  throw Error("Expected CloudError");
60
60
  }
61
61
  }
62
- async function handleCloudProject(projectName) {
62
+ async function handleCloudLogin() {
63
63
  const logger = cloudCli.services.createLogger({
64
64
  silent: false,
65
65
  debug: process.argv.includes("--debug"),
66
66
  timestamp: false
67
67
  });
68
- let cloudApiService = await cloudCli.services.cloudApiFactory();
68
+ const cloudApiService = await cloudCli.services.cloudApiFactory({ logger });
69
69
  const defaultErrorMessage = "An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.";
70
70
  try {
71
71
  const { data: config } = await cloudApiService.config();
@@ -88,53 +88,20 @@ async function handleCloudProject(projectName) {
88
88
  logger,
89
89
  cwd: process.cwd()
90
90
  };
91
- const projectCreationSpinner = logger.spinner("Creating project on Strapi Cloud");
92
91
  try {
93
- const tokenService = await cloudCli.services.tokenServiceFactory(cliContext);
94
- const loginSuccess = await cloudCli.cli.login.action(cliContext);
95
- if (!loginSuccess) {
96
- return;
97
- }
98
- logger.debug("Retrieving token");
99
- const token = await tokenService.retrieveToken();
100
- cloudApiService = await cloudCli.services.cloudApiFactory(token);
101
- logger.debug("Retrieving config");
102
- const { data: config } = await cloudApiService.config();
103
- logger.debug("config", config);
104
- const defaultProjectValues = config.projectCreation?.defaults || {};
105
- logger.debug("default project values", defaultProjectValues);
106
- projectCreationSpinner.start();
107
- const { data: project } = await cloudApiService.createProject({
108
- nodeVersion: process.versions?.node?.slice(1, 3) || "20",
109
- region: "NYC",
110
- plan: "trial",
111
- ...defaultProjectValues,
112
- name: projectName
113
- });
114
- projectCreationSpinner.succeed("Project created on Strapi Cloud");
115
- const projectPath = node_path.resolve(projectName);
116
- logger.debug(project, projectPath);
117
- await cloudCli.services.local.save({ project }, { directoryPath: projectPath });
92
+ await cloudCli.cli.login.action(cliContext);
118
93
  } catch (e) {
119
94
  logger.debug(e);
120
95
  try {
121
96
  assertCloudError(e);
122
97
  if (e.response.status === 403) {
123
- const message = typeof e.response.data === "string" ? e.response.data : "We are sorry, but we are not able to create a Strapi Cloud project for you at the moment.";
124
- if (projectCreationSpinner.isSpinning) {
125
- projectCreationSpinner.fail(message);
126
- } else {
127
- logger.warn(message);
128
- }
98
+ const message = typeof e.response.data === "string" ? e.response.data : "We are sorry, but we are not able to log you into Strapi Cloud at the moment.";
99
+ logger.warn(message);
129
100
  return;
130
101
  }
131
102
  } catch (e2) {
132
103
  }
133
- if (projectCreationSpinner.isSpinning) {
134
- projectCreationSpinner.fail(defaultErrorMessage);
135
- } else {
136
- logger.error(defaultErrorMessage);
137
- }
104
+ logger.error(defaultErrorMessage);
138
105
  }
139
106
  }
140
107
  }
@@ -159,8 +126,7 @@ async function generateApp(projectName, options) {
159
126
  process.exit(1);
160
127
  }
161
128
  if (!options.skipCloud) {
162
- generateNew.checkRequirements();
163
- await handleCloudProject(projectName);
129
+ await handleCloudLogin();
164
130
  }
165
131
  return generateNew.generateNewApp(projectName, options).then(() => {
166
132
  if (process.platform === "win32") {
@@ -1 +1 @@
1
- {"version":3,"file":"create-strapi-app.js","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { resolve } from 'node:path';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudProject(projectName: string): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n let cloudApiService = await cloudServices.cloudApiFactory();\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n const projectCreationSpinner = logger.spinner('Creating project on Strapi Cloud');\n\n try {\n const tokenService = await cloudServices.tokenServiceFactory(cliContext);\n const loginSuccess = await cloudCli.login.action(cliContext);\n if (!loginSuccess) {\n return;\n }\n logger.debug('Retrieving token');\n const token = await tokenService.retrieveToken();\n\n cloudApiService = await cloudServices.cloudApiFactory(token);\n\n logger.debug('Retrieving config');\n const { data: config } = await cloudApiService.config();\n logger.debug('config', config);\n const defaultProjectValues = config.projectCreation?.defaults || {};\n logger.debug('default project values', defaultProjectValues);\n projectCreationSpinner.start();\n const { data: project } = await cloudApiService.createProject({\n nodeVersion: process.versions?.node?.slice(1, 3) || '20',\n region: 'NYC',\n plan: 'trial',\n ...defaultProjectValues,\n name: projectName,\n });\n projectCreationSpinner.succeed('Project created on Strapi Cloud');\n const projectPath = resolve(projectName);\n logger.debug(project, projectPath);\n await cloudServices.local.save({ project }, { directoryPath: projectPath });\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to create a Strapi Cloud project for you at the moment.';\n if (projectCreationSpinner.isSpinning) {\n projectCreationSpinner.fail(message);\n } else {\n logger.warn(message);\n }\n return;\n }\n } catch (e) {\n /* empty */\n }\n if (projectCreationSpinner.isSpinning) {\n projectCreationSpinner.fail(defaultErrorMessage);\n } else {\n logger.error(defaultErrorMessage);\n }\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport {\n checkInstallPath,\n checkRequirements,\n generateNewApp,\n type NewOptions,\n} from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudProject } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n checkRequirements();\n await handleCloudProject(projectName);\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["inquirer","chalk","cloudServices","cloudCli","resolve","e","readFileSync","commander","checkRequirements","generateNewApp","checkInstallPath"],"mappings":"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"}
1
+ {"version":3,"file":"create-strapi-app.js","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudLogin(): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n const cloudApiService = await cloudServices.cloudApiFactory({ logger });\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n\n try {\n await cloudCli.login.action(cliContext);\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to log you into Strapi Cloud at the moment.';\n logger.warn(message);\n return;\n }\n } catch (e) {\n /* empty */\n }\n logger.error(defaultErrorMessage);\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp, type NewOptions } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudLogin } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["inquirer","chalk","cloudServices","cloudCli","e","readFileSync","resolve","commander","generateNewApp","checkInstallPath"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
3
  import commander from "commander";
4
- import { checkInstallPath, checkRequirements, generateNewApp } from "@strapi/generate-new";
4
+ import { checkInstallPath, generateNewApp } from "@strapi/generate-new";
5
5
  import inquirer from "inquirer";
6
6
  import { services, cli } from "@strapi/cloud-cli";
7
7
  import chalk from "chalk";
@@ -54,13 +54,13 @@ function assertCloudError(e) {
54
54
  throw Error("Expected CloudError");
55
55
  }
56
56
  }
57
- async function handleCloudProject(projectName) {
57
+ async function handleCloudLogin() {
58
58
  const logger = services.createLogger({
59
59
  silent: false,
60
60
  debug: process.argv.includes("--debug"),
61
61
  timestamp: false
62
62
  });
63
- let cloudApiService = await services.cloudApiFactory();
63
+ const cloudApiService = await services.cloudApiFactory({ logger });
64
64
  const defaultErrorMessage = "An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.";
65
65
  try {
66
66
  const { data: config } = await cloudApiService.config();
@@ -83,53 +83,20 @@ async function handleCloudProject(projectName) {
83
83
  logger,
84
84
  cwd: process.cwd()
85
85
  };
86
- const projectCreationSpinner = logger.spinner("Creating project on Strapi Cloud");
87
86
  try {
88
- const tokenService = await services.tokenServiceFactory(cliContext);
89
- const loginSuccess = await cli.login.action(cliContext);
90
- if (!loginSuccess) {
91
- return;
92
- }
93
- logger.debug("Retrieving token");
94
- const token = await tokenService.retrieveToken();
95
- cloudApiService = await services.cloudApiFactory(token);
96
- logger.debug("Retrieving config");
97
- const { data: config } = await cloudApiService.config();
98
- logger.debug("config", config);
99
- const defaultProjectValues = config.projectCreation?.defaults || {};
100
- logger.debug("default project values", defaultProjectValues);
101
- projectCreationSpinner.start();
102
- const { data: project } = await cloudApiService.createProject({
103
- nodeVersion: process.versions?.node?.slice(1, 3) || "20",
104
- region: "NYC",
105
- plan: "trial",
106
- ...defaultProjectValues,
107
- name: projectName
108
- });
109
- projectCreationSpinner.succeed("Project created on Strapi Cloud");
110
- const projectPath = resolve(projectName);
111
- logger.debug(project, projectPath);
112
- await services.local.save({ project }, { directoryPath: projectPath });
87
+ await cli.login.action(cliContext);
113
88
  } catch (e) {
114
89
  logger.debug(e);
115
90
  try {
116
91
  assertCloudError(e);
117
92
  if (e.response.status === 403) {
118
- const message = typeof e.response.data === "string" ? e.response.data : "We are sorry, but we are not able to create a Strapi Cloud project for you at the moment.";
119
- if (projectCreationSpinner.isSpinning) {
120
- projectCreationSpinner.fail(message);
121
- } else {
122
- logger.warn(message);
123
- }
93
+ const message = typeof e.response.data === "string" ? e.response.data : "We are sorry, but we are not able to log you into Strapi Cloud at the moment.";
94
+ logger.warn(message);
124
95
  return;
125
96
  }
126
97
  } catch (e2) {
127
98
  }
128
- if (projectCreationSpinner.isSpinning) {
129
- projectCreationSpinner.fail(defaultErrorMessage);
130
- } else {
131
- logger.error(defaultErrorMessage);
132
- }
99
+ logger.error(defaultErrorMessage);
133
100
  }
134
101
  }
135
102
  }
@@ -154,8 +121,7 @@ async function generateApp(projectName, options) {
154
121
  process.exit(1);
155
122
  }
156
123
  if (!options.skipCloud) {
157
- checkRequirements();
158
- await handleCloudProject(projectName);
124
+ await handleCloudLogin();
159
125
  }
160
126
  return generateNewApp(projectName, options).then(() => {
161
127
  if (process.platform === "win32") {
@@ -1 +1 @@
1
- {"version":3,"file":"create-strapi-app.mjs","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { resolve } from 'node:path';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudProject(projectName: string): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n let cloudApiService = await cloudServices.cloudApiFactory();\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n const projectCreationSpinner = logger.spinner('Creating project on Strapi Cloud');\n\n try {\n const tokenService = await cloudServices.tokenServiceFactory(cliContext);\n const loginSuccess = await cloudCli.login.action(cliContext);\n if (!loginSuccess) {\n return;\n }\n logger.debug('Retrieving token');\n const token = await tokenService.retrieveToken();\n\n cloudApiService = await cloudServices.cloudApiFactory(token);\n\n logger.debug('Retrieving config');\n const { data: config } = await cloudApiService.config();\n logger.debug('config', config);\n const defaultProjectValues = config.projectCreation?.defaults || {};\n logger.debug('default project values', defaultProjectValues);\n projectCreationSpinner.start();\n const { data: project } = await cloudApiService.createProject({\n nodeVersion: process.versions?.node?.slice(1, 3) || '20',\n region: 'NYC',\n plan: 'trial',\n ...defaultProjectValues,\n name: projectName,\n });\n projectCreationSpinner.succeed('Project created on Strapi Cloud');\n const projectPath = resolve(projectName);\n logger.debug(project, projectPath);\n await cloudServices.local.save({ project }, { directoryPath: projectPath });\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to create a Strapi Cloud project for you at the moment.';\n if (projectCreationSpinner.isSpinning) {\n projectCreationSpinner.fail(message);\n } else {\n logger.warn(message);\n }\n return;\n }\n } catch (e) {\n /* empty */\n }\n if (projectCreationSpinner.isSpinning) {\n projectCreationSpinner.fail(defaultErrorMessage);\n } else {\n logger.error(defaultErrorMessage);\n }\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport {\n checkInstallPath,\n checkRequirements,\n generateNewApp,\n type NewOptions,\n} from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudProject } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n checkRequirements();\n await handleCloudProject(projectName);\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["cloudServices","cloudCli","e"],"mappings":"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"}
1
+ {"version":3,"file":"create-strapi-app.mjs","sources":["../src/utils/prompt-user.ts","../src/utils/parse-to-chalk.ts","../src/cloud.ts","../src/create-strapi-app.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Program } from '../types';\n\ninterface Answers {\n directory: string;\n quick: boolean;\n}\n\nexport default async function promptUser(\n projectName: string,\n program: Program,\n hasDatabaseOptions: boolean\n) {\n return inquirer.prompt<Answers>([\n {\n type: 'input',\n default: 'my-strapi-project',\n name: 'directory',\n message: 'What would you like to name your project?',\n when: !projectName,\n },\n {\n type: 'list',\n name: 'quick',\n message: 'Choose your installation type',\n when: !program.quickstart && !hasDatabaseOptions,\n choices: [\n {\n name: 'Quickstart (recommended)',\n value: true,\n },\n {\n name: 'Custom (manual settings)',\n value: false,\n },\n ],\n },\n ]);\n}\n","import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n","import inquirer from 'inquirer';\nimport { cli as cloudCli, services as cloudServices } from '@strapi/cloud-cli';\nimport parseToChalk from './utils/parse-to-chalk';\n\ninterface CloudError {\n response: {\n status: number;\n data: string | object;\n };\n}\n\nfunction assertCloudError(e: unknown): asserts e is CloudError {\n if ((e as CloudError).response === undefined) {\n throw Error('Expected CloudError');\n }\n}\n\nexport async function handleCloudLogin(): Promise<void> {\n const logger = cloudServices.createLogger({\n silent: false,\n debug: process.argv.includes('--debug'),\n timestamp: false,\n });\n const cloudApiService = await cloudServices.cloudApiFactory({ logger });\n const defaultErrorMessage =\n 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';\n\n try {\n const { data: config } = await cloudApiService.config();\n logger.log(parseToChalk(config.projectCreation.introText));\n } catch (e: unknown) {\n logger.debug(e);\n logger.error(defaultErrorMessage);\n return;\n }\n const { userChoice } = await inquirer.prompt<{ userChoice: string }>([\n {\n type: 'list',\n name: 'userChoice',\n message: `Please log in or sign up.`,\n choices: ['Login/Sign up', 'Skip'],\n },\n ]);\n\n if (userChoice !== 'Skip') {\n const cliContext = {\n logger,\n cwd: process.cwd(),\n };\n\n try {\n await cloudCli.login.action(cliContext);\n } catch (e: Error | CloudError | unknown) {\n logger.debug(e);\n try {\n assertCloudError(e);\n if (e.response.status === 403) {\n const message =\n typeof e.response.data === 'string'\n ? e.response.data\n : 'We are sorry, but we are not able to log you into Strapi Cloud at the moment.';\n logger.warn(message);\n return;\n }\n } catch (e) {\n /* empty */\n }\n logger.error(defaultErrorMessage);\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp, type NewOptions } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\nimport { handleCloudLogin } from './cloud';\n\nconst packageJson = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf8'));\n\nconst command = new commander.Command(packageJson.name);\n\nconst databaseOptions: Array<keyof Program> = [\n 'dbclient',\n 'dbhost',\n 'dbport',\n 'dbname',\n 'dbusername',\n 'dbpassword',\n 'dbssl',\n 'dbfile',\n];\n\ncommand\n .version(packageJson.version)\n .arguments('[directory]')\n .option('--no-run', 'Do not start the application after it is created')\n .option('--use-npm', 'Force usage of npm instead of yarn to create the project')\n .option('--debug', 'Display database connection error')\n .option('--quickstart', 'Quickstart app creation')\n .option('--skip-cloud', 'Skip cloud login and project creation')\n .option('--dbclient <dbclient>', 'Database client')\n .option('--dbhost <dbhost>', 'Database host')\n .option('--dbport <dbport>', 'Database port')\n .option('--dbname <dbname>', 'Database name')\n .option('--dbusername <dbusername>', 'Database username')\n .option('--dbpassword <dbpassword>', 'Database password')\n .option('--dbssl <dbssl>', 'Database SSL')\n .option('--dbfile <dbfile>', 'Database file path for sqlite')\n .option('--dbforce', 'Overwrite database content if any')\n .option('--template <templateurl>', 'Specify a Strapi template')\n .option('--ts, --typescript', 'Use TypeScript to generate the project')\n .description('create a new application')\n .action((directory, programArgs) => {\n initProject(directory, programArgs);\n })\n .parse(process.argv);\n\nasync function generateApp(\n projectName: string,\n options: Partial<NewOptions> & { skipCloud?: boolean | undefined }\n) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\n }\n\n if (!options.skipCloud) {\n await handleCloudLogin();\n }\n\n return generateNewApp(projectName, options).then(() => {\n if (process.platform === 'win32') {\n process.exit(0);\n }\n });\n}\n\nasync function initProject(projectName: string, programArgs: Program) {\n if (projectName) {\n await checkInstallPath(resolve(projectName));\n }\n\n const programFlags = command\n .createHelp()\n .visibleOptions(command)\n .reduce<Array<string | undefined>>((acc, { short, long }) => [...acc, short, long], [])\n .filter(Boolean);\n\n if (programArgs.template && programFlags.includes(programArgs.template)) {\n console.error(`${programArgs.template} is not a valid template`);\n process.exit(1);\n }\n\n const hasDatabaseOptions = databaseOptions.some((opt) => programArgs[opt]);\n\n if (programArgs.quickstart && hasDatabaseOptions) {\n console.error(\n `The quickstart option is incompatible with the following options: ${databaseOptions.join(\n ', '\n )}`\n );\n process.exit(1);\n }\n\n if (hasDatabaseOptions) {\n programArgs.quickstart = false; // Will disable the quickstart question because != 'undefined'\n }\n\n if (programArgs.quickstart) {\n return generateApp(projectName, programArgs);\n }\n\n const prompt = await promptUser(projectName, programArgs, hasDatabaseOptions);\n const directory = prompt.directory || projectName;\n await checkInstallPath(resolve(directory));\n\n const options = {\n template: programArgs.template,\n quickstart: prompt.quick || programArgs.quickstart,\n };\n\n const generateStrapiAppOptions = {\n ...programArgs,\n ...options,\n };\n\n await generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["cloudServices","cloudCli","e"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-strapi-app",
3
- "version": "4.25.1",
3
+ "version": "4.25.2",
4
4
  "description": "Generate a new Strapi application.",
5
5
  "keywords": [
6
6
  "create-strapi-app",
@@ -43,20 +43,20 @@
43
43
  "watch": "pack-up watch"
44
44
  },
45
45
  "dependencies": {
46
- "@strapi/cloud-cli": "4.25.1",
47
- "@strapi/generate-new": "4.25.1",
46
+ "@strapi/cloud-cli": "4.25.2",
47
+ "@strapi/generate-new": "4.25.2",
48
48
  "chalk": "4.1.2",
49
49
  "commander": "8.3.0",
50
50
  "inquirer": "8.2.5"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@strapi/pack-up": "4.23.0",
54
- "eslint-config-custom": "4.25.1",
55
- "tsconfig": "4.25.1"
54
+ "eslint-config-custom": "4.25.2",
55
+ "tsconfig": "4.25.2"
56
56
  },
57
57
  "engines": {
58
58
  "node": ">=18.0.0 <=20.x.x",
59
59
  "npm": ">=6.0.0"
60
60
  },
61
- "gitHead": "67a0dd09704141e3f74efd95f57fadc8503a7644"
61
+ "gitHead": "8991df149bf14762f53e135330a8e84ca6b7e983"
62
62
  }