create-strapi-app 5.12.1 → 5.12.3

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.
Files changed (77) hide show
  1. package/dist/cloud.js +65 -0
  2. package/dist/cloud.js.map +1 -0
  3. package/dist/cloud.mjs +63 -0
  4. package/dist/cloud.mjs.map +1 -0
  5. package/dist/create-strapi.js +251 -0
  6. package/dist/create-strapi.js.map +1 -0
  7. package/dist/create-strapi.mjs +249 -0
  8. package/dist/create-strapi.mjs.map +1 -0
  9. package/dist/index.js +35 -1330
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.mjs +15 -1291
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/prompts.js +66 -0
  14. package/dist/prompts.js.map +1 -0
  15. package/dist/prompts.mjs +60 -0
  16. package/dist/prompts.mjs.map +1 -0
  17. package/dist/types.js +8 -0
  18. package/dist/types.js.map +1 -0
  19. package/dist/types.mjs +6 -0
  20. package/dist/types.mjs.map +1 -0
  21. package/dist/utils/check-install-path.js +28 -0
  22. package/dist/utils/check-install-path.js.map +1 -0
  23. package/dist/utils/check-install-path.mjs +26 -0
  24. package/dist/utils/check-install-path.mjs.map +1 -0
  25. package/dist/utils/check-requirements.js +26 -0
  26. package/dist/utils/check-requirements.js.map +1 -0
  27. package/dist/utils/check-requirements.mjs +24 -0
  28. package/dist/utils/check-requirements.mjs.map +1 -0
  29. package/dist/utils/database.js +190 -0
  30. package/dist/utils/database.js.map +1 -0
  31. package/dist/utils/database.mjs +187 -0
  32. package/dist/utils/database.mjs.map +1 -0
  33. package/dist/utils/dot-env.js +46 -0
  34. package/dist/utils/dot-env.js.map +1 -0
  35. package/dist/utils/dot-env.mjs +44 -0
  36. package/dist/utils/dot-env.mjs.map +1 -0
  37. package/dist/utils/engines.js +9 -0
  38. package/dist/utils/engines.js.map +1 -0
  39. package/dist/utils/engines.mjs +7 -0
  40. package/dist/utils/engines.mjs.map +1 -0
  41. package/dist/utils/get-package-manager-args.js +135 -0
  42. package/dist/utils/get-package-manager-args.js.map +1 -0
  43. package/dist/utils/get-package-manager-args.mjs +132 -0
  44. package/dist/utils/get-package-manager-args.mjs.map +1 -0
  45. package/dist/utils/git.js +73 -0
  46. package/dist/utils/git.js.map +1 -0
  47. package/dist/utils/git.mjs +71 -0
  48. package/dist/utils/git.mjs.map +1 -0
  49. package/dist/utils/gitignore.js +139 -0
  50. package/dist/utils/gitignore.js.map +1 -0
  51. package/dist/utils/gitignore.mjs +137 -0
  52. package/dist/utils/gitignore.mjs.map +1 -0
  53. package/dist/utils/logger.js +54 -0
  54. package/dist/utils/logger.js.map +1 -0
  55. package/dist/utils/logger.mjs +52 -0
  56. package/dist/utils/logger.mjs.map +1 -0
  57. package/dist/utils/machine-id.js +17 -0
  58. package/dist/utils/machine-id.js.map +1 -0
  59. package/dist/utils/machine-id.mjs +15 -0
  60. package/dist/utils/machine-id.mjs.map +1 -0
  61. package/dist/utils/package-json.js +32 -0
  62. package/dist/utils/package-json.js.map +1 -0
  63. package/dist/utils/package-json.mjs +30 -0
  64. package/dist/utils/package-json.mjs.map +1 -0
  65. package/dist/utils/parse-to-chalk.js +25 -0
  66. package/dist/utils/parse-to-chalk.js.map +1 -0
  67. package/dist/utils/parse-to-chalk.mjs +23 -0
  68. package/dist/utils/parse-to-chalk.mjs.map +1 -0
  69. package/dist/utils/template.js +180 -0
  70. package/dist/utils/template.js.map +1 -0
  71. package/dist/utils/template.mjs +159 -0
  72. package/dist/utils/template.mjs.map +1 -0
  73. package/dist/utils/usage.js +90 -0
  74. package/dist/utils/usage.js.map +1 -0
  75. package/dist/utils/usage.mjs +87 -0
  76. package/dist/utils/usage.mjs.map +1 -0
  77. package/package.json +4 -4
package/dist/cloud.js ADDED
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var inquirer = require('inquirer');
4
+ var cloudCli = require('@strapi/cloud-cli');
5
+ var parseToChalk = require('./utils/parse-to-chalk.js');
6
+
7
+ function assertCloudError(e) {
8
+ if (e.response === undefined) {
9
+ throw Error('Expected CloudError');
10
+ }
11
+ }
12
+ async function handleCloudLogin() {
13
+ const logger = cloudCli.services.createLogger({
14
+ silent: false,
15
+ debug: process.argv.includes('--debug'),
16
+ timestamp: false
17
+ });
18
+ const cloudApiService = await cloudCli.services.cloudApiFactory({
19
+ logger
20
+ });
21
+ const defaultErrorMessage = 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';
22
+ try {
23
+ const { data: config } = await cloudApiService.config();
24
+ logger.log(parseToChalk(config.projectCreation.introText));
25
+ } catch (e) {
26
+ logger.debug(e);
27
+ logger.error(defaultErrorMessage);
28
+ return;
29
+ }
30
+ const { userChoice } = await inquirer.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'userChoice',
34
+ message: `Please log in or sign up.`,
35
+ choices: [
36
+ 'Login/Sign up',
37
+ 'Skip'
38
+ ]
39
+ }
40
+ ]);
41
+ if (userChoice !== 'Skip') {
42
+ const cliContext = {
43
+ logger,
44
+ cwd: process.cwd()
45
+ };
46
+ try {
47
+ await cloudCli.cli.login.action(cliContext);
48
+ } catch (e) {
49
+ logger.debug(e);
50
+ try {
51
+ assertCloudError(e);
52
+ if (e.response.status === 403) {
53
+ 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.';
54
+ logger.warn(message);
55
+ return;
56
+ }
57
+ } catch (e) {
58
+ /* empty */ }
59
+ logger.error(defaultErrorMessage);
60
+ }
61
+ }
62
+ }
63
+
64
+ exports.handleCloudLogin = handleCloudLogin;
65
+ //# sourceMappingURL=cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.js","sources":["../src/cloud.ts"],"sourcesContent":["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"],"names":["assertCloudError","e","response","undefined","Error","handleCloudLogin","logger","cloudServices","createLogger","silent","debug","process","argv","includes","timestamp","cloudApiService","cloudApiFactory","defaultErrorMessage","data","config","log","parseToChalk","projectCreation","introText","error","userChoice","inquirer","prompt","type","name","message","choices","cliContext","cwd","cloudCli","login","action","status","warn"],"mappings":";;;;;;AAWA,SAASA,iBAAiBC,CAAU,EAAA;AAClC,IAAA,IAAI,CAACA,CAAiBC,QAAQ,KAAKC,SAAW,EAAA;AAC5C,QAAA,MAAMC,KAAM,CAAA,qBAAA,CAAA;AACd;AACF;AAEO,eAAeC,gBAAAA,GAAAA;IACpB,MAAMC,MAAAA,GAASC,iBAAcC,CAAAA,YAAY,CAAC;QACxCC,MAAQ,EAAA,KAAA;AACRC,QAAAA,KAAAA,EAAOC,OAAQC,CAAAA,IAAI,CAACC,QAAQ,CAAC,SAAA,CAAA;QAC7BC,SAAW,EAAA;AACb,KAAA,CAAA;AACA,IAAA,MAAMC,eAAkB,GAAA,MAAMR,iBAAcS,CAAAA,eAAe,CAAC;AAAEV,QAAAA;AAAO,KAAA,CAAA;AACrE,IAAA,MAAMW,mBACJ,GAAA,wHAAA;IAEF,IAAI;AACF,QAAA,MAAM,EAAEC,IAAMC,EAAAA,MAAM,EAAE,GAAG,MAAMJ,gBAAgBI,MAAM,EAAA;AACrDb,QAAAA,MAAAA,CAAOc,GAAG,CAACC,YAAAA,CAAaF,MAAOG,CAAAA,eAAe,CAACC,SAAS,CAAA,CAAA;AAC1D,KAAA,CAAE,OAAOtB,CAAY,EAAA;AACnBK,QAAAA,MAAAA,CAAOI,KAAK,CAACT,CAAAA,CAAAA;AACbK,QAAAA,MAAAA,CAAOkB,KAAK,CAACP,mBAAAA,CAAAA;AACb,QAAA;AACF;AACA,IAAA,MAAM,EAAEQ,UAAU,EAAE,GAAG,MAAMC,QAAAA,CAASC,MAAM,CAAyB;AACnE,QAAA;YACEC,IAAM,EAAA,MAAA;YACNC,IAAM,EAAA,YAAA;YACNC,OAAS,EAAA,CAAC,yBAAyB,CAAC;YACpCC,OAAS,EAAA;AAAC,gBAAA,eAAA;AAAiB,gBAAA;AAAO;AACpC;AACD,KAAA,CAAA;AAED,IAAA,IAAIN,eAAe,MAAQ,EAAA;AACzB,QAAA,MAAMO,UAAa,GAAA;AACjB1B,YAAAA,MAAAA;AACA2B,YAAAA,GAAAA,EAAKtB,QAAQsB,GAAG;AAClB,SAAA;QAEA,IAAI;AACF,YAAA,MAAMC,YAASC,CAAAA,KAAK,CAACC,MAAM,CAACJ,UAAAA,CAAAA;AAC9B,SAAA,CAAE,OAAO/B,CAAiC,EAAA;AACxCK,YAAAA,MAAAA,CAAOI,KAAK,CAACT,CAAAA,CAAAA;YACb,IAAI;gBACFD,gBAAiBC,CAAAA,CAAAA,CAAAA;AACjB,gBAAA,IAAIA,CAAEC,CAAAA,QAAQ,CAACmC,MAAM,KAAK,GAAK,EAAA;AAC7B,oBAAA,MAAMP,OACJ,GAAA,OAAO7B,CAAEC,CAAAA,QAAQ,CAACgB,IAAI,KAAK,QAAA,GACvBjB,CAAEC,CAAAA,QAAQ,CAACgB,IAAI,GACf,+EAAA;AACNZ,oBAAAA,MAAAA,CAAOgC,IAAI,CAACR,OAAAA,CAAAA;AACZ,oBAAA;AACF;AACF,aAAA,CAAE,OAAO7B,CAAG,EAAA;AACV;AAEFK,YAAAA,MAAAA,CAAOkB,KAAK,CAACP,mBAAAA,CAAAA;AACf;AACF;AACF;;;;"}
package/dist/cloud.mjs ADDED
@@ -0,0 +1,63 @@
1
+ import inquirer from 'inquirer';
2
+ import { services, cli } from '@strapi/cloud-cli';
3
+ import parseToChalk from './utils/parse-to-chalk.mjs';
4
+
5
+ function assertCloudError(e) {
6
+ if (e.response === undefined) {
7
+ throw Error('Expected CloudError');
8
+ }
9
+ }
10
+ async function handleCloudLogin() {
11
+ const logger = services.createLogger({
12
+ silent: false,
13
+ debug: process.argv.includes('--debug'),
14
+ timestamp: false
15
+ });
16
+ const cloudApiService = await services.cloudApiFactory({
17
+ logger
18
+ });
19
+ const defaultErrorMessage = 'An error occurred while trying to interact with Strapi Cloud. Use strapi deploy command once the project is generated.';
20
+ try {
21
+ const { data: config } = await cloudApiService.config();
22
+ logger.log(parseToChalk(config.projectCreation.introText));
23
+ } catch (e) {
24
+ logger.debug(e);
25
+ logger.error(defaultErrorMessage);
26
+ return;
27
+ }
28
+ const { userChoice } = await inquirer.prompt([
29
+ {
30
+ type: 'list',
31
+ name: 'userChoice',
32
+ message: `Please log in or sign up.`,
33
+ choices: [
34
+ 'Login/Sign up',
35
+ 'Skip'
36
+ ]
37
+ }
38
+ ]);
39
+ if (userChoice !== 'Skip') {
40
+ const cliContext = {
41
+ logger,
42
+ cwd: process.cwd()
43
+ };
44
+ try {
45
+ await cli.login.action(cliContext);
46
+ } catch (e) {
47
+ logger.debug(e);
48
+ try {
49
+ assertCloudError(e);
50
+ if (e.response.status === 403) {
51
+ 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.';
52
+ logger.warn(message);
53
+ return;
54
+ }
55
+ } catch (e) {
56
+ /* empty */ }
57
+ logger.error(defaultErrorMessage);
58
+ }
59
+ }
60
+ }
61
+
62
+ export { handleCloudLogin };
63
+ //# sourceMappingURL=cloud.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.mjs","sources":["../src/cloud.ts"],"sourcesContent":["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"],"names":["assertCloudError","e","response","undefined","Error","handleCloudLogin","logger","cloudServices","createLogger","silent","debug","process","argv","includes","timestamp","cloudApiService","cloudApiFactory","defaultErrorMessage","data","config","log","parseToChalk","projectCreation","introText","error","userChoice","inquirer","prompt","type","name","message","choices","cliContext","cwd","cloudCli","login","action","status","warn"],"mappings":";;;;AAWA,SAASA,iBAAiBC,CAAU,EAAA;AAClC,IAAA,IAAI,CAACA,CAAiBC,QAAQ,KAAKC,SAAW,EAAA;AAC5C,QAAA,MAAMC,KAAM,CAAA,qBAAA,CAAA;AACd;AACF;AAEO,eAAeC,gBAAAA,GAAAA;IACpB,MAAMC,MAAAA,GAASC,QAAcC,CAAAA,YAAY,CAAC;QACxCC,MAAQ,EAAA,KAAA;AACRC,QAAAA,KAAAA,EAAOC,OAAQC,CAAAA,IAAI,CAACC,QAAQ,CAAC,SAAA,CAAA;QAC7BC,SAAW,EAAA;AACb,KAAA,CAAA;AACA,IAAA,MAAMC,eAAkB,GAAA,MAAMR,QAAcS,CAAAA,eAAe,CAAC;AAAEV,QAAAA;AAAO,KAAA,CAAA;AACrE,IAAA,MAAMW,mBACJ,GAAA,wHAAA;IAEF,IAAI;AACF,QAAA,MAAM,EAAEC,IAAMC,EAAAA,MAAM,EAAE,GAAG,MAAMJ,gBAAgBI,MAAM,EAAA;AACrDb,QAAAA,MAAAA,CAAOc,GAAG,CAACC,YAAAA,CAAaF,MAAOG,CAAAA,eAAe,CAACC,SAAS,CAAA,CAAA;AAC1D,KAAA,CAAE,OAAOtB,CAAY,EAAA;AACnBK,QAAAA,MAAAA,CAAOI,KAAK,CAACT,CAAAA,CAAAA;AACbK,QAAAA,MAAAA,CAAOkB,KAAK,CAACP,mBAAAA,CAAAA;AACb,QAAA;AACF;AACA,IAAA,MAAM,EAAEQ,UAAU,EAAE,GAAG,MAAMC,QAAAA,CAASC,MAAM,CAAyB;AACnE,QAAA;YACEC,IAAM,EAAA,MAAA;YACNC,IAAM,EAAA,YAAA;YACNC,OAAS,EAAA,CAAC,yBAAyB,CAAC;YACpCC,OAAS,EAAA;AAAC,gBAAA,eAAA;AAAiB,gBAAA;AAAO;AACpC;AACD,KAAA,CAAA;AAED,IAAA,IAAIN,eAAe,MAAQ,EAAA;AACzB,QAAA,MAAMO,UAAa,GAAA;AACjB1B,YAAAA,MAAAA;AACA2B,YAAAA,GAAAA,EAAKtB,QAAQsB,GAAG;AAClB,SAAA;QAEA,IAAI;AACF,YAAA,MAAMC,GAASC,CAAAA,KAAK,CAACC,MAAM,CAACJ,UAAAA,CAAAA;AAC9B,SAAA,CAAE,OAAO/B,CAAiC,EAAA;AACxCK,YAAAA,MAAAA,CAAOI,KAAK,CAACT,CAAAA,CAAAA;YACb,IAAI;gBACFD,gBAAiBC,CAAAA,CAAAA,CAAAA;AACjB,gBAAA,IAAIA,CAAEC,CAAAA,QAAQ,CAACmC,MAAM,KAAK,GAAK,EAAA;AAC7B,oBAAA,MAAMP,OACJ,GAAA,OAAO7B,CAAEC,CAAAA,QAAQ,CAACgB,IAAI,KAAK,QAAA,GACvBjB,CAAEC,CAAAA,QAAQ,CAACgB,IAAI,GACf,+EAAA;AACNZ,oBAAAA,MAAAA,CAAOgC,IAAI,CAACR,OAAAA,CAAAA;AACZ,oBAAA;AACF;AACF,aAAA,CAAE,OAAO7B,CAAG,EAAA;AACV;AAEFK,YAAAA,MAAAA,CAAOkB,KAAK,CAACP,mBAAAA,CAAAA;AACf;AACF;AACF;;;;"}
@@ -0,0 +1,251 @@
1
+ 'use strict';
2
+
3
+ var path = require('node:path');
4
+ var chalk = require('chalk');
5
+ var execa = require('execa');
6
+ var fse = require('fs-extra');
7
+ var template = require('./utils/template.js');
8
+ var git = require('./utils/git.js');
9
+ var usage = require('./utils/usage.js');
10
+ var packageJson = require('./utils/package-json.js');
11
+ var dotEnv = require('./utils/dot-env.js');
12
+ var types = require('./types.js');
13
+ var logger = require('./utils/logger.js');
14
+ var gitignore = require('./utils/gitignore.js');
15
+ var getPackageManagerArgs = require('./utils/get-package-manager-args.js');
16
+
17
+ async function createStrapi(scope) {
18
+ const { rootPath } = scope;
19
+ try {
20
+ await fse.ensureDir(rootPath);
21
+ await createApp(scope);
22
+ } catch (error) {
23
+ await fse.remove(rootPath);
24
+ throw error;
25
+ }
26
+ }
27
+ async function createApp(scope) {
28
+ const { rootPath, useTypescript, useExample, installDependencies, isQuickstart, template: template$1, packageManager, gitInit, runApp } = scope;
29
+ const shouldRunSeed = useExample && installDependencies;
30
+ await usage.trackUsage({
31
+ event: 'willCreateProject',
32
+ scope
33
+ });
34
+ logger.logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);
35
+ if (!isQuickstart) {
36
+ await usage.trackUsage({
37
+ event: 'didChooseCustomDatabase',
38
+ scope
39
+ });
40
+ } else {
41
+ await usage.trackUsage({
42
+ event: 'didChooseQuickstart',
43
+ scope
44
+ });
45
+ }
46
+ if (!template$1) {
47
+ let templateName = useExample ? 'example' : 'vanilla';
48
+ if (!useTypescript) {
49
+ templateName = `${templateName}-js`;
50
+ }
51
+ const internalTemplatePath = path.join(__dirname, '../templates', templateName);
52
+ if (await fse.exists(internalTemplatePath)) {
53
+ await fse.copy(internalTemplatePath, rootPath);
54
+ }
55
+ } else {
56
+ try {
57
+ logger.logger.info(`${chalk.cyan('Installing template')} ${template$1}`);
58
+ await template.copyTemplate(scope, rootPath);
59
+ logger.logger.success('Template copied successfully.');
60
+ } catch (error) {
61
+ if (error instanceof Error) {
62
+ logger.logger.fatal(`Template installation failed: ${error.message}`);
63
+ }
64
+ throw error;
65
+ }
66
+ if (!fse.existsSync(path.join(rootPath, 'package.json'))) {
67
+ logger.logger.fatal(`Missing ${chalk.bold('package.json')} in template`);
68
+ }
69
+ }
70
+ await usage.trackUsage({
71
+ event: 'didCopyProjectFiles',
72
+ scope
73
+ });
74
+ try {
75
+ await packageJson.createPackageJSON(scope);
76
+ await usage.trackUsage({
77
+ event: 'didWritePackageJSON',
78
+ scope
79
+ });
80
+ // ensure node_modules is created
81
+ await fse.ensureDir(path.join(rootPath, 'node_modules'));
82
+ // create config/database
83
+ await fse.writeFile(path.join(rootPath, '.env'), dotEnv.generateDotEnv(scope));
84
+ await usage.trackUsage({
85
+ event: 'didCopyConfigurationFiles',
86
+ scope
87
+ });
88
+ } catch (err) {
89
+ await fse.remove(rootPath);
90
+ throw err;
91
+ }
92
+ if (installDependencies) {
93
+ try {
94
+ logger.logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);
95
+ await usage.trackUsage({
96
+ event: 'willInstallProjectDependencies',
97
+ scope
98
+ });
99
+ await runInstall(scope);
100
+ await usage.trackUsage({
101
+ event: 'didInstallProjectDependencies',
102
+ scope
103
+ });
104
+ logger.logger.success(`Dependencies installed`);
105
+ } catch (error) {
106
+ const stderr = types.isStderrError(error) ? error.stderr : '';
107
+ await usage.trackUsage({
108
+ event: 'didNotInstallProjectDependencies',
109
+ scope,
110
+ error: stderr.slice(-1024)
111
+ });
112
+ logger.logger.fatal([
113
+ chalk.bold('Oh, it seems that you encountered an error while installing dependencies in your project'),
114
+ '',
115
+ `Don't give up, your project was created correctly`,
116
+ '',
117
+ `Fix the issues mentioned in the installation errors and try to run the following command:`,
118
+ '',
119
+ `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`
120
+ ]);
121
+ }
122
+ }
123
+ await usage.trackUsage({
124
+ event: 'didCreateProject',
125
+ scope
126
+ });
127
+ // make sure a gitignore file is created regardless of the user using git or not
128
+ if (!await fse.exists(path.join(rootPath, '.gitignore'))) {
129
+ await fse.writeFile(path.join(rootPath, '.gitignore'), gitignore.gitIgnore);
130
+ }
131
+ // Init git
132
+ if (gitInit) {
133
+ logger.logger.title('git', 'Initializing git repository.');
134
+ await git.tryGitInit(rootPath);
135
+ logger.logger.success('Initialized a git repository.');
136
+ }
137
+ if (shouldRunSeed) {
138
+ if (await fse.exists(path.join(rootPath, 'scripts/seed.js'))) {
139
+ logger.logger.title('Seed', 'Seeding your database with sample data');
140
+ try {
141
+ await execa(packageManager, [
142
+ 'run',
143
+ 'seed:example'
144
+ ], {
145
+ stdio: 'inherit',
146
+ cwd: rootPath
147
+ });
148
+ logger.logger.success('Sample data added to your database');
149
+ } catch (error) {
150
+ logger.logger.error('Failed to seed your database. Skipping');
151
+ }
152
+ }
153
+ }
154
+ const cmd = chalk.cyan(`${packageManager} run`);
155
+ logger.logger.title('Strapi', `Your application was created!`);
156
+ logger.logger.log([
157
+ 'Available commands in your project:',
158
+ '',
159
+ 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',
160
+ `${cmd} develop`,
161
+ '',
162
+ 'Start Strapi without watch mode.',
163
+ `${cmd} start`,
164
+ '',
165
+ 'Build Strapi admin panel.',
166
+ `${cmd} build`,
167
+ '',
168
+ 'Deploy Strapi project.',
169
+ `${cmd} deploy`,
170
+ ''
171
+ ]);
172
+ if (useExample) {
173
+ logger.logger.log([
174
+ 'Seed your database with sample data.',
175
+ `${cmd} seed:example`,
176
+ ''
177
+ ]);
178
+ }
179
+ logger.logger.log([
180
+ 'Display all available commands.',
181
+ `${cmd} strapi\n`
182
+ ]);
183
+ if (installDependencies) {
184
+ logger.logger.log([
185
+ 'To get started run',
186
+ '',
187
+ `${chalk.cyan('cd')} ${rootPath}`,
188
+ !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`
189
+ ]);
190
+ } else {
191
+ logger.logger.log([
192
+ 'To get started run',
193
+ '',
194
+ `${chalk.cyan('cd')} ${rootPath}`,
195
+ `${chalk.cyan(packageManager)} install`,
196
+ !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`
197
+ ]);
198
+ }
199
+ if (runApp && installDependencies) {
200
+ logger.logger.title('Run', 'Running your Strapi application');
201
+ try {
202
+ await usage.trackUsage({
203
+ event: 'willStartServer',
204
+ scope
205
+ });
206
+ await execa(packageManager, [
207
+ 'run',
208
+ 'develop'
209
+ ], {
210
+ stdio: 'inherit',
211
+ cwd: rootPath,
212
+ env: {
213
+ FORCE_COLOR: '1'
214
+ }
215
+ });
216
+ } catch (error) {
217
+ if (typeof error === 'string' || error instanceof Error) {
218
+ await usage.trackUsage({
219
+ event: 'didNotStartServer',
220
+ scope,
221
+ error
222
+ });
223
+ }
224
+ logger.logger.fatal('Failed to start your Strapi application');
225
+ }
226
+ }
227
+ }
228
+ async function runInstall({ rootPath, packageManager }) {
229
+ // include same cwd and env to ensure version check returns same version we use below
230
+ const { envArgs, cmdArgs } = await getPackageManagerArgs.getInstallArgs(packageManager, {
231
+ cwd: rootPath,
232
+ env: {
233
+ ...process.env,
234
+ NODE_ENV: 'development'
235
+ }
236
+ });
237
+ const options = {
238
+ cwd: rootPath,
239
+ stdio: 'inherit',
240
+ env: {
241
+ ...process.env,
242
+ ...envArgs,
243
+ NODE_ENV: 'development'
244
+ }
245
+ };
246
+ const proc = execa(packageManager, cmdArgs, options);
247
+ return proc;
248
+ }
249
+
250
+ exports.createStrapi = createStrapi;
251
+ //# sourceMappingURL=create-strapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-strapi.js","sources":["../src/create-strapi.ts"],"sourcesContent":["import { join } from 'node:path';\n\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport fse from 'fs-extra';\n\nimport { copyTemplate } from './utils/template';\nimport { tryGitInit } from './utils/git';\nimport { trackUsage } from './utils/usage';\nimport { createPackageJSON } from './utils/package-json';\nimport { generateDotEnv } from './utils/dot-env';\nimport { isStderrError } from './types';\n\nimport type { Scope } from './types';\nimport { logger } from './utils/logger';\nimport { gitIgnore } from './utils/gitignore';\nimport { getInstallArgs } from './utils/get-package-manager-args';\n\nasync function createStrapi(scope: Scope) {\n const { rootPath } = scope;\n try {\n await fse.ensureDir(rootPath);\n await createApp(scope);\n } catch (error) {\n await fse.remove(rootPath);\n\n throw error;\n }\n}\n\nasync function createApp(scope: Scope) {\n const {\n rootPath,\n useTypescript,\n useExample,\n installDependencies,\n isQuickstart,\n template,\n packageManager,\n gitInit,\n runApp,\n } = scope;\n\n const shouldRunSeed = useExample && installDependencies;\n\n await trackUsage({ event: 'willCreateProject', scope });\n\n logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);\n\n if (!isQuickstart) {\n await trackUsage({ event: 'didChooseCustomDatabase', scope });\n } else {\n await trackUsage({ event: 'didChooseQuickstart', scope });\n }\n\n if (!template) {\n let templateName = useExample ? 'example' : 'vanilla';\n\n if (!useTypescript) {\n templateName = `${templateName}-js`;\n }\n\n const internalTemplatePath = join(__dirname, '../templates', templateName);\n if (await fse.exists(internalTemplatePath)) {\n await fse.copy(internalTemplatePath, rootPath);\n }\n } else {\n try {\n logger.info(`${chalk.cyan('Installing template')} ${template}`);\n\n await copyTemplate(scope, rootPath);\n\n logger.success('Template copied successfully.');\n } catch (error) {\n if (error instanceof Error) {\n logger.fatal(`Template installation failed: ${error.message}`);\n }\n\n throw error;\n }\n\n if (!fse.existsSync(join(rootPath, 'package.json'))) {\n logger.fatal(`Missing ${chalk.bold('package.json')} in template`);\n }\n }\n\n await trackUsage({ event: 'didCopyProjectFiles', scope });\n\n try {\n await createPackageJSON(scope);\n\n await trackUsage({ event: 'didWritePackageJSON', scope });\n\n // ensure node_modules is created\n await fse.ensureDir(join(rootPath, 'node_modules'));\n\n // create config/database\n await fse.writeFile(join(rootPath, '.env'), generateDotEnv(scope));\n\n await trackUsage({ event: 'didCopyConfigurationFiles', scope });\n } catch (err) {\n await fse.remove(rootPath);\n throw err;\n }\n\n if (installDependencies) {\n try {\n logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);\n\n await trackUsage({ event: 'willInstallProjectDependencies', scope });\n\n await runInstall(scope);\n\n await trackUsage({ event: 'didInstallProjectDependencies', scope });\n\n logger.success(`Dependencies installed`);\n } catch (error) {\n const stderr = isStderrError(error) ? error.stderr : '';\n\n await trackUsage({\n event: 'didNotInstallProjectDependencies',\n scope,\n error: stderr.slice(-1024),\n });\n\n logger.fatal([\n chalk.bold(\n 'Oh, it seems that you encountered an error while installing dependencies in your project'\n ),\n '',\n `Don't give up, your project was created correctly`,\n '',\n `Fix the issues mentioned in the installation errors and try to run the following command:`,\n '',\n `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`,\n ]);\n }\n }\n\n await trackUsage({ event: 'didCreateProject', scope });\n\n // make sure a gitignore file is created regardless of the user using git or not\n if (!(await fse.exists(join(rootPath, '.gitignore')))) {\n await fse.writeFile(join(rootPath, '.gitignore'), gitIgnore);\n }\n\n // Init git\n if (gitInit) {\n logger.title('git', 'Initializing git repository.');\n\n await tryGitInit(rootPath);\n\n logger.success('Initialized a git repository.');\n }\n\n if (shouldRunSeed) {\n if (await fse.exists(join(rootPath, 'scripts/seed.js'))) {\n logger.title('Seed', 'Seeding your database with sample data');\n\n try {\n await execa(packageManager, ['run', 'seed:example'], {\n stdio: 'inherit',\n cwd: rootPath,\n });\n logger.success('Sample data added to your database');\n } catch (error) {\n logger.error('Failed to seed your database. Skipping');\n }\n }\n }\n\n const cmd = chalk.cyan(`${packageManager} run`);\n\n logger.title('Strapi', `Your application was created!`);\n\n logger.log([\n 'Available commands in your project:',\n '',\n 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',\n `${cmd} develop`,\n '',\n 'Start Strapi without watch mode.',\n `${cmd} start`,\n '',\n 'Build Strapi admin panel.',\n `${cmd} build`,\n '',\n 'Deploy Strapi project.',\n `${cmd} deploy`,\n '',\n ]);\n\n if (useExample) {\n logger.log(['Seed your database with sample data.', `${cmd} seed:example`, '']);\n }\n\n logger.log(['Display all available commands.', `${cmd} strapi\\n`]);\n\n if (installDependencies) {\n logger.log([\n 'To get started run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`,\n ]);\n } else {\n logger.log([\n 'To get started run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n `${chalk.cyan(packageManager)} install`,\n !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`,\n ]);\n }\n\n if (runApp && installDependencies) {\n logger.title('Run', 'Running your Strapi application');\n\n try {\n await trackUsage({ event: 'willStartServer', scope });\n\n await execa(packageManager, ['run', 'develop'], {\n stdio: 'inherit',\n cwd: rootPath,\n env: {\n FORCE_COLOR: '1',\n },\n });\n } catch (error) {\n if (typeof error === 'string' || error instanceof Error) {\n await trackUsage({\n event: 'didNotStartServer',\n scope,\n error,\n });\n }\n\n logger.fatal('Failed to start your Strapi application');\n }\n }\n}\n\nasync function runInstall({ rootPath, packageManager }: Scope) {\n // include same cwd and env to ensure version check returns same version we use below\n const { envArgs, cmdArgs } = await getInstallArgs(packageManager, {\n cwd: rootPath,\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n });\n\n const options: execa.Options = {\n cwd: rootPath,\n stdio: 'inherit',\n env: {\n ...process.env,\n ...envArgs,\n NODE_ENV: 'development',\n },\n };\n\n const proc = execa(packageManager, cmdArgs, options);\n\n return proc;\n}\n\nexport { createStrapi };\n"],"names":["createStrapi","scope","rootPath","fse","ensureDir","createApp","error","remove","useTypescript","useExample","installDependencies","isQuickstart","template","packageManager","gitInit","runApp","shouldRunSeed","trackUsage","event","logger","title","chalk","green","templateName","internalTemplatePath","join","__dirname","exists","copy","info","cyan","copyTemplate","success","Error","fatal","message","existsSync","bold","createPackageJSON","writeFile","generateDotEnv","err","runInstall","stderr","isStderrError","slice","gitIgnore","tryGitInit","execa","stdio","cwd","cmd","log","env","FORCE_COLOR","envArgs","cmdArgs","getInstallArgs","process","NODE_ENV","options","proc"],"mappings":"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"}