create-strapi-app 4.24.5 → 4.25.1
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.
|
@@ -4,9 +4,12 @@ const node_path = require("node:path");
|
|
|
4
4
|
const commander = require("commander");
|
|
5
5
|
const generateNew = require("@strapi/generate-new");
|
|
6
6
|
const inquirer = require("inquirer");
|
|
7
|
+
const cloudCli = require("@strapi/cloud-cli");
|
|
8
|
+
const chalk = require("chalk");
|
|
7
9
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
8
10
|
const commander__default = /* @__PURE__ */ _interopDefault(commander);
|
|
9
11
|
const inquirer__default = /* @__PURE__ */ _interopDefault(inquirer);
|
|
12
|
+
const chalk__default = /* @__PURE__ */ _interopDefault(chalk);
|
|
10
13
|
async function promptUser(projectName, program, hasDatabaseOptions) {
|
|
11
14
|
return inquirer__default.default.prompt([
|
|
12
15
|
{
|
|
@@ -34,6 +37,107 @@ async function promptUser(projectName, program, hasDatabaseOptions) {
|
|
|
34
37
|
}
|
|
35
38
|
]);
|
|
36
39
|
}
|
|
40
|
+
const supportedStyles = {
|
|
41
|
+
magentaBright: chalk__default.default.magentaBright,
|
|
42
|
+
blueBright: chalk__default.default.blueBright,
|
|
43
|
+
yellowBright: chalk__default.default.yellowBright,
|
|
44
|
+
green: chalk__default.default.green,
|
|
45
|
+
red: chalk__default.default.red,
|
|
46
|
+
bold: chalk__default.default.bold,
|
|
47
|
+
italic: chalk__default.default.italic
|
|
48
|
+
};
|
|
49
|
+
function parseToChalk(template) {
|
|
50
|
+
let result = template;
|
|
51
|
+
for (const [color, chalkFunction] of Object.entries(supportedStyles)) {
|
|
52
|
+
const regex = new RegExp(`{${color}}(.*?){/${color}}`, "g");
|
|
53
|
+
result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
function assertCloudError(e) {
|
|
58
|
+
if (e.response === void 0) {
|
|
59
|
+
throw Error("Expected CloudError");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function handleCloudProject(projectName) {
|
|
63
|
+
const logger = cloudCli.services.createLogger({
|
|
64
|
+
silent: false,
|
|
65
|
+
debug: process.argv.includes("--debug"),
|
|
66
|
+
timestamp: false
|
|
67
|
+
});
|
|
68
|
+
let cloudApiService = await cloudCli.services.cloudApiFactory();
|
|
69
|
+
const defaultErrorMessage = "An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.";
|
|
70
|
+
try {
|
|
71
|
+
const { data: config } = await cloudApiService.config();
|
|
72
|
+
logger.log(parseToChalk(config.projectCreation.introText));
|
|
73
|
+
} catch (e) {
|
|
74
|
+
logger.debug(e);
|
|
75
|
+
logger.error(defaultErrorMessage);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const { userChoice } = await inquirer__default.default.prompt([
|
|
79
|
+
{
|
|
80
|
+
type: "list",
|
|
81
|
+
name: "userChoice",
|
|
82
|
+
message: `Please log in or sign up.`,
|
|
83
|
+
choices: ["Login/Sign up", "Skip"]
|
|
84
|
+
}
|
|
85
|
+
]);
|
|
86
|
+
if (userChoice !== "Skip") {
|
|
87
|
+
const cliContext = {
|
|
88
|
+
logger,
|
|
89
|
+
cwd: process.cwd()
|
|
90
|
+
};
|
|
91
|
+
const projectCreationSpinner = logger.spinner("Creating project on Strapi Cloud");
|
|
92
|
+
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 });
|
|
118
|
+
} catch (e) {
|
|
119
|
+
logger.debug(e);
|
|
120
|
+
try {
|
|
121
|
+
assertCloudError(e);
|
|
122
|
+
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
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
} catch (e2) {
|
|
132
|
+
}
|
|
133
|
+
if (projectCreationSpinner.isSpinning) {
|
|
134
|
+
projectCreationSpinner.fail(defaultErrorMessage);
|
|
135
|
+
} else {
|
|
136
|
+
logger.error(defaultErrorMessage);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
37
141
|
const packageJson = JSON.parse(node_fs.readFileSync(node_path.resolve(__dirname, "../package.json"), "utf8"));
|
|
38
142
|
const command = new commander__default.default.Command(packageJson.name);
|
|
39
143
|
const databaseOptions = [
|
|
@@ -46,14 +150,18 @@ const databaseOptions = [
|
|
|
46
150
|
"dbssl",
|
|
47
151
|
"dbfile"
|
|
48
152
|
];
|
|
49
|
-
command.version(packageJson.version).arguments("[directory]").option("--no-run", "Do not start the application after it is created").option("--use-npm", "Force usage of npm instead of yarn to create the project").option("--debug", "Display database connection error").option("--quickstart", "Quickstart app creation").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("--dbforce", "Overwrite database content if any").option("--template <templateurl>", "Specify a Strapi template").option("--ts, --typescript", "Use TypeScript to generate the project").description("create a new application").action((directory, programArgs) => {
|
|
153
|
+
command.version(packageJson.version).arguments("[directory]").option("--no-run", "Do not start the application after it is created").option("--use-npm", "Force usage of npm instead of yarn to create the project").option("--debug", "Display database connection error").option("--quickstart", "Quickstart app creation").option("--skip-cloud", "Skip cloud login and project creation").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("--dbforce", "Overwrite database content if any").option("--template <templateurl>", "Specify a Strapi template").option("--ts, --typescript", "Use TypeScript to generate the project").description("create a new application").action((directory, programArgs) => {
|
|
50
154
|
initProject(directory, programArgs);
|
|
51
155
|
}).parse(process.argv);
|
|
52
|
-
function generateApp(projectName, options) {
|
|
156
|
+
async function generateApp(projectName, options) {
|
|
53
157
|
if (!projectName) {
|
|
54
158
|
console.error("Please specify the <directory> of your project when using --quickstart");
|
|
55
159
|
process.exit(1);
|
|
56
160
|
}
|
|
161
|
+
if (!options.skipCloud) {
|
|
162
|
+
generateNew.checkRequirements();
|
|
163
|
+
await handleCloudProject(projectName);
|
|
164
|
+
}
|
|
57
165
|
return generateNew.generateNewApp(projectName, options).then(() => {
|
|
58
166
|
if (process.platform === "win32") {
|
|
59
167
|
process.exit(0);
|
|
@@ -95,6 +203,6 @@ async function initProject(projectName, programArgs) {
|
|
|
95
203
|
...programArgs,
|
|
96
204
|
...options
|
|
97
205
|
};
|
|
98
|
-
|
|
206
|
+
await generateApp(directory, generateStrapiAppOptions);
|
|
99
207
|
}
|
|
100
208
|
//# sourceMappingURL=create-strapi-app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-strapi-app.js","sources":["../src/utils/prompt-user.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 { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\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('--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\nfunction generateApp(projectName: string, options: unknown) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\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 return generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":["inquirer","readFileSync","resolve","commander","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 { 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,8 +1,10 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import commander from "commander";
|
|
4
|
-
import { checkInstallPath, generateNewApp } from "@strapi/generate-new";
|
|
4
|
+
import { checkInstallPath, checkRequirements, generateNewApp } from "@strapi/generate-new";
|
|
5
5
|
import inquirer from "inquirer";
|
|
6
|
+
import { services, cli } from "@strapi/cloud-cli";
|
|
7
|
+
import chalk from "chalk";
|
|
6
8
|
async function promptUser(projectName, program, hasDatabaseOptions) {
|
|
7
9
|
return inquirer.prompt([
|
|
8
10
|
{
|
|
@@ -30,6 +32,107 @@ async function promptUser(projectName, program, hasDatabaseOptions) {
|
|
|
30
32
|
}
|
|
31
33
|
]);
|
|
32
34
|
}
|
|
35
|
+
const supportedStyles = {
|
|
36
|
+
magentaBright: chalk.magentaBright,
|
|
37
|
+
blueBright: chalk.blueBright,
|
|
38
|
+
yellowBright: chalk.yellowBright,
|
|
39
|
+
green: chalk.green,
|
|
40
|
+
red: chalk.red,
|
|
41
|
+
bold: chalk.bold,
|
|
42
|
+
italic: chalk.italic
|
|
43
|
+
};
|
|
44
|
+
function parseToChalk(template) {
|
|
45
|
+
let result = template;
|
|
46
|
+
for (const [color, chalkFunction] of Object.entries(supportedStyles)) {
|
|
47
|
+
const regex = new RegExp(`{${color}}(.*?){/${color}}`, "g");
|
|
48
|
+
result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
function assertCloudError(e) {
|
|
53
|
+
if (e.response === void 0) {
|
|
54
|
+
throw Error("Expected CloudError");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function handleCloudProject(projectName) {
|
|
58
|
+
const logger = services.createLogger({
|
|
59
|
+
silent: false,
|
|
60
|
+
debug: process.argv.includes("--debug"),
|
|
61
|
+
timestamp: false
|
|
62
|
+
});
|
|
63
|
+
let cloudApiService = await services.cloudApiFactory();
|
|
64
|
+
const defaultErrorMessage = "An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.";
|
|
65
|
+
try {
|
|
66
|
+
const { data: config } = await cloudApiService.config();
|
|
67
|
+
logger.log(parseToChalk(config.projectCreation.introText));
|
|
68
|
+
} catch (e) {
|
|
69
|
+
logger.debug(e);
|
|
70
|
+
logger.error(defaultErrorMessage);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const { userChoice } = await inquirer.prompt([
|
|
74
|
+
{
|
|
75
|
+
type: "list",
|
|
76
|
+
name: "userChoice",
|
|
77
|
+
message: `Please log in or sign up.`,
|
|
78
|
+
choices: ["Login/Sign up", "Skip"]
|
|
79
|
+
}
|
|
80
|
+
]);
|
|
81
|
+
if (userChoice !== "Skip") {
|
|
82
|
+
const cliContext = {
|
|
83
|
+
logger,
|
|
84
|
+
cwd: process.cwd()
|
|
85
|
+
};
|
|
86
|
+
const projectCreationSpinner = logger.spinner("Creating project on Strapi Cloud");
|
|
87
|
+
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 });
|
|
113
|
+
} catch (e) {
|
|
114
|
+
logger.debug(e);
|
|
115
|
+
try {
|
|
116
|
+
assertCloudError(e);
|
|
117
|
+
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
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
} catch (e2) {
|
|
127
|
+
}
|
|
128
|
+
if (projectCreationSpinner.isSpinning) {
|
|
129
|
+
projectCreationSpinner.fail(defaultErrorMessage);
|
|
130
|
+
} else {
|
|
131
|
+
logger.error(defaultErrorMessage);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
33
136
|
const packageJson = JSON.parse(readFileSync(resolve(__dirname, "../package.json"), "utf8"));
|
|
34
137
|
const command = new commander.Command(packageJson.name);
|
|
35
138
|
const databaseOptions = [
|
|
@@ -42,14 +145,18 @@ const databaseOptions = [
|
|
|
42
145
|
"dbssl",
|
|
43
146
|
"dbfile"
|
|
44
147
|
];
|
|
45
|
-
command.version(packageJson.version).arguments("[directory]").option("--no-run", "Do not start the application after it is created").option("--use-npm", "Force usage of npm instead of yarn to create the project").option("--debug", "Display database connection error").option("--quickstart", "Quickstart app creation").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("--dbforce", "Overwrite database content if any").option("--template <templateurl>", "Specify a Strapi template").option("--ts, --typescript", "Use TypeScript to generate the project").description("create a new application").action((directory, programArgs) => {
|
|
148
|
+
command.version(packageJson.version).arguments("[directory]").option("--no-run", "Do not start the application after it is created").option("--use-npm", "Force usage of npm instead of yarn to create the project").option("--debug", "Display database connection error").option("--quickstart", "Quickstart app creation").option("--skip-cloud", "Skip cloud login and project creation").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("--dbforce", "Overwrite database content if any").option("--template <templateurl>", "Specify a Strapi template").option("--ts, --typescript", "Use TypeScript to generate the project").description("create a new application").action((directory, programArgs) => {
|
|
46
149
|
initProject(directory, programArgs);
|
|
47
150
|
}).parse(process.argv);
|
|
48
|
-
function generateApp(projectName, options) {
|
|
151
|
+
async function generateApp(projectName, options) {
|
|
49
152
|
if (!projectName) {
|
|
50
153
|
console.error("Please specify the <directory> of your project when using --quickstart");
|
|
51
154
|
process.exit(1);
|
|
52
155
|
}
|
|
156
|
+
if (!options.skipCloud) {
|
|
157
|
+
checkRequirements();
|
|
158
|
+
await handleCloudProject(projectName);
|
|
159
|
+
}
|
|
53
160
|
return generateNewApp(projectName, options).then(() => {
|
|
54
161
|
if (process.platform === "win32") {
|
|
55
162
|
process.exit(0);
|
|
@@ -91,6 +198,6 @@ async function initProject(projectName, programArgs) {
|
|
|
91
198
|
...programArgs,
|
|
92
199
|
...options
|
|
93
200
|
};
|
|
94
|
-
|
|
201
|
+
await generateApp(directory, generateStrapiAppOptions);
|
|
95
202
|
}
|
|
96
203
|
//# sourceMappingURL=create-strapi-app.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-strapi-app.mjs","sources":["../src/utils/prompt-user.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 { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport commander from 'commander';\nimport { checkInstallPath, generateNewApp } from '@strapi/generate-new';\nimport promptUser from './utils/prompt-user';\nimport type { Program } from './types';\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('--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\nfunction generateApp(projectName: string, options: unknown) {\n if (!projectName) {\n console.error('Please specify the <directory> of your project when using --quickstart');\n process.exit(1);\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 return generateApp(directory, generateStrapiAppOptions);\n}\n"],"names":[],"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 { 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-strapi-app",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.25.1",
|
|
4
4
|
"description": "Generate a new Strapi application.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"create-strapi-app",
|
|
@@ -43,18 +43,20 @@
|
|
|
43
43
|
"watch": "pack-up watch"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@strapi/
|
|
46
|
+
"@strapi/cloud-cli": "4.25.1",
|
|
47
|
+
"@strapi/generate-new": "4.25.1",
|
|
48
|
+
"chalk": "4.1.2",
|
|
47
49
|
"commander": "8.3.0",
|
|
48
50
|
"inquirer": "8.2.5"
|
|
49
51
|
},
|
|
50
52
|
"devDependencies": {
|
|
51
53
|
"@strapi/pack-up": "4.23.0",
|
|
52
|
-
"eslint-config-custom": "4.
|
|
53
|
-
"tsconfig": "4.
|
|
54
|
+
"eslint-config-custom": "4.25.1",
|
|
55
|
+
"tsconfig": "4.25.1"
|
|
54
56
|
},
|
|
55
57
|
"engines": {
|
|
56
58
|
"node": ">=18.0.0 <=20.x.x",
|
|
57
59
|
"npm": ">=6.0.0"
|
|
58
60
|
},
|
|
59
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "67a0dd09704141e3f74efd95f57fadc8503a7644"
|
|
60
62
|
}
|