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.
- package/dist/cloud.js +65 -0
- package/dist/cloud.js.map +1 -0
- package/dist/cloud.mjs +63 -0
- package/dist/cloud.mjs.map +1 -0
- package/dist/create-strapi.js +251 -0
- package/dist/create-strapi.js.map +1 -0
- package/dist/create-strapi.mjs +249 -0
- package/dist/create-strapi.mjs.map +1 -0
- package/dist/index.js +35 -1330
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -1291
- package/dist/index.mjs.map +1 -1
- package/dist/prompts.js +66 -0
- package/dist/prompts.js.map +1 -0
- package/dist/prompts.mjs +60 -0
- package/dist/prompts.mjs.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +6 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/check-install-path.js +28 -0
- package/dist/utils/check-install-path.js.map +1 -0
- package/dist/utils/check-install-path.mjs +26 -0
- package/dist/utils/check-install-path.mjs.map +1 -0
- package/dist/utils/check-requirements.js +26 -0
- package/dist/utils/check-requirements.js.map +1 -0
- package/dist/utils/check-requirements.mjs +24 -0
- package/dist/utils/check-requirements.mjs.map +1 -0
- package/dist/utils/database.js +190 -0
- package/dist/utils/database.js.map +1 -0
- package/dist/utils/database.mjs +187 -0
- package/dist/utils/database.mjs.map +1 -0
- package/dist/utils/dot-env.js +46 -0
- package/dist/utils/dot-env.js.map +1 -0
- package/dist/utils/dot-env.mjs +44 -0
- package/dist/utils/dot-env.mjs.map +1 -0
- package/dist/utils/engines.js +9 -0
- package/dist/utils/engines.js.map +1 -0
- package/dist/utils/engines.mjs +7 -0
- package/dist/utils/engines.mjs.map +1 -0
- package/dist/utils/get-package-manager-args.js +135 -0
- package/dist/utils/get-package-manager-args.js.map +1 -0
- package/dist/utils/get-package-manager-args.mjs +132 -0
- package/dist/utils/get-package-manager-args.mjs.map +1 -0
- package/dist/utils/git.js +73 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/git.mjs +71 -0
- package/dist/utils/git.mjs.map +1 -0
- package/dist/utils/gitignore.js +139 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/gitignore.mjs +137 -0
- package/dist/utils/gitignore.mjs.map +1 -0
- package/dist/utils/logger.js +54 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logger.mjs +52 -0
- package/dist/utils/logger.mjs.map +1 -0
- package/dist/utils/machine-id.js +17 -0
- package/dist/utils/machine-id.js.map +1 -0
- package/dist/utils/machine-id.mjs +15 -0
- package/dist/utils/machine-id.mjs.map +1 -0
- package/dist/utils/package-json.js +32 -0
- package/dist/utils/package-json.js.map +1 -0
- package/dist/utils/package-json.mjs +30 -0
- package/dist/utils/package-json.mjs.map +1 -0
- package/dist/utils/parse-to-chalk.js +25 -0
- package/dist/utils/parse-to-chalk.js.map +1 -0
- package/dist/utils/parse-to-chalk.mjs +23 -0
- package/dist/utils/parse-to-chalk.mjs.map +1 -0
- package/dist/utils/template.js +180 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/template.mjs +159 -0
- package/dist/utils/template.mjs.map +1 -0
- package/dist/utils/usage.js +90 -0
- package/dist/utils/usage.js.map +1 -0
- package/dist/utils/usage.mjs +87 -0
- package/dist/utils/usage.mjs.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sources":["../../src/utils/template.ts"],"sourcesContent":["import path from 'node:path';\nimport url from 'node:url';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport * as tar from 'tar';\nimport retry from 'async-retry';\n\nimport fse from 'fs-extra';\nimport type { Scope } from '../types';\n\nconst stripTrailingSlash = (str: string) => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\n// Merge template with new project being created\nexport async function copyTemplate(scope: Scope, rootPath: string) {\n const { template } = scope;\n\n if (!template) {\n throw new Error('Missing template or example app option');\n }\n\n if (await isOfficialTemplate(template, scope.templateBranch)) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner: 'strapi',\n repo: 'strapi',\n branch: scope.templateBranch,\n subPath: `templates/${template}`,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isLocalTemplate(template)) {\n const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;\n\n await fse.copy(filePath, rootPath);\n }\n\n if (isGithubShorthand(template)) {\n const [owner, repo, ...pathSegments] = template.split('/');\n const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;\n\n await retry(\n () => downloadGithubRepo(rootPath, { owner, repo, branch: scope.templateBranch, subPath }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isGithubRepo(template)) {\n const url = new URL(template);\n\n const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(\n url.pathname.slice(1)\n ).split('/');\n\n if (t !== undefined && t !== 'tree') {\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n\n if (scope.templateBranch) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: scope.templateBranch,\n subPath: scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: decodeURIComponent(branch) ?? scope.templateBranch,\n subPath: pathSegments.length\n ? decodeURIComponent(pathSegments.join('/'))\n : scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n}\n\ntype RepoInfo = {\n owner: string;\n repo: string;\n branch?: string;\n subPath?: string | null;\n};\n\nasync function downloadGithubRepo(rootPath: string, { owner, repo, branch, subPath }: RepoInfo) {\n const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;\n\n let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;\n if (filePath) {\n checkContentUrl = `${checkContentUrl}/${filePath}`;\n }\n\n if (branch) {\n checkContentUrl = `${checkContentUrl}?ref=${branch}`;\n }\n\n const checkRes = await fetch(checkContentUrl, {\n method: 'HEAD',\n });\n\n if (checkRes.status !== 200) {\n throw new Error(\n `Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`\n );\n }\n\n let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;\n\n if (branch) {\n url = `${url}/${branch}`;\n }\n\n const res = await fetch(url);\n\n if (!res.body) {\n throw new Error(`Failed to download ${url}`);\n }\n\n await pipeline(\n // @ts-expect-error - Readable is not a valid source\n Readable.fromWeb(res.body),\n tar.x({\n cwd: rootPath,\n strip: filePath ? filePath.split('/').length + 1 : 1,\n filter(path) {\n if (filePath) {\n return path.split('/').slice(1).join('/').startsWith(filePath);\n }\n\n return true;\n },\n })\n );\n}\n\nfunction isLocalTemplate(template: string) {\n return (\n template.startsWith('file://') ||\n fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template))\n );\n}\n\nfunction isGithubShorthand(value: string) {\n if (isValidUrl(value)) {\n return false;\n }\n\n return /^[\\w-]+\\/[\\w-.]+(\\/[\\w-.]+)*$/.test(value);\n}\n\nfunction isGithubRepo(value: string) {\n try {\n const url = new URL(value);\n\n return url.origin === 'https://github.com';\n } catch {\n return false;\n }\n}\n\nfunction isValidUrl(value: string) {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nconst OFFICIAL_NAME_REGEX = /^[a-zA-Z]*$/;\n\nasync function isOfficialTemplate(template: string, branch: string | undefined) {\n if (isValidUrl(template) || !OFFICIAL_NAME_REGEX.test(template)) {\n return false;\n }\n\n const res = await fetch(\n `https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`,\n { method: 'HEAD' }\n );\n\n return res.status === 200;\n}\n"],"names":["stripTrailingSlash","str","endsWith","slice","copyTemplate","scope","rootPath","template","Error","isOfficialTemplate","templateBranch","retry","downloadGithubRepo","owner","repo","branch","subPath","retries","onRetry","err","attempt","console","log","isLocalTemplate","filePath","startsWith","url","fileURLToPath","fse","copy","isGithubShorthand","pathSegments","split","length","join","templatePath","isGithubRepo","URL","t","pathname","undefined","decodeURIComponent","path","posix","sep","checkContentUrl","checkRes","fetch","method","status","res","body","pipeline","Readable","fromWeb","tar","x","cwd","strip","filter","existsSync","isAbsolute","resolve","process","value","isValidUrl","test","origin","OFFICIAL_NAME_REGEX"],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import url from 'node:url';
|
|
3
|
+
import { Readable } from 'node:stream';
|
|
4
|
+
import { pipeline } from 'node:stream/promises';
|
|
5
|
+
import * as tar from 'tar';
|
|
6
|
+
import retry from 'async-retry';
|
|
7
|
+
import fse from 'fs-extra';
|
|
8
|
+
|
|
9
|
+
const stripTrailingSlash = (str)=>{
|
|
10
|
+
return str.endsWith('/') ? str.slice(0, -1) : str;
|
|
11
|
+
};
|
|
12
|
+
// Merge template with new project being created
|
|
13
|
+
async function copyTemplate(scope, rootPath) {
|
|
14
|
+
const { template } = scope;
|
|
15
|
+
if (!template) {
|
|
16
|
+
throw new Error('Missing template or example app option');
|
|
17
|
+
}
|
|
18
|
+
if (await isOfficialTemplate(template, scope.templateBranch)) {
|
|
19
|
+
await retry(()=>downloadGithubRepo(rootPath, {
|
|
20
|
+
owner: 'strapi',
|
|
21
|
+
repo: 'strapi',
|
|
22
|
+
branch: scope.templateBranch,
|
|
23
|
+
subPath: `templates/${template}`
|
|
24
|
+
}), {
|
|
25
|
+
retries: 3,
|
|
26
|
+
onRetry (err, attempt) {
|
|
27
|
+
console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (isLocalTemplate(template)) {
|
|
33
|
+
const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;
|
|
34
|
+
await fse.copy(filePath, rootPath);
|
|
35
|
+
}
|
|
36
|
+
if (isGithubShorthand(template)) {
|
|
37
|
+
const [owner, repo, ...pathSegments] = template.split('/');
|
|
38
|
+
const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;
|
|
39
|
+
await retry(()=>downloadGithubRepo(rootPath, {
|
|
40
|
+
owner,
|
|
41
|
+
repo,
|
|
42
|
+
branch: scope.templateBranch,
|
|
43
|
+
subPath
|
|
44
|
+
}), {
|
|
45
|
+
retries: 3,
|
|
46
|
+
onRetry (err, attempt) {
|
|
47
|
+
console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (isGithubRepo(template)) {
|
|
53
|
+
const url = new URL(template);
|
|
54
|
+
const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(url.pathname.slice(1)).split('/');
|
|
55
|
+
if (t !== undefined && t !== 'tree') {
|
|
56
|
+
throw new Error(`Invalid GitHub template URL: ${template}`);
|
|
57
|
+
}
|
|
58
|
+
if (scope.templateBranch) {
|
|
59
|
+
await retry(()=>downloadGithubRepo(rootPath, {
|
|
60
|
+
owner,
|
|
61
|
+
repo,
|
|
62
|
+
branch: scope.templateBranch,
|
|
63
|
+
subPath: scope.templatePath
|
|
64
|
+
}), {
|
|
65
|
+
retries: 3,
|
|
66
|
+
onRetry (err, attempt) {
|
|
67
|
+
console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
await retry(()=>downloadGithubRepo(rootPath, {
|
|
73
|
+
owner,
|
|
74
|
+
repo,
|
|
75
|
+
branch: decodeURIComponent(branch) ?? scope.templateBranch,
|
|
76
|
+
subPath: pathSegments.length ? decodeURIComponent(pathSegments.join('/')) : scope.templatePath
|
|
77
|
+
}), {
|
|
78
|
+
retries: 3,
|
|
79
|
+
onRetry (err, attempt) {
|
|
80
|
+
console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
throw new Error(`Invalid GitHub template URL: ${template}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function downloadGithubRepo(rootPath, { owner, repo, branch, subPath }) {
|
|
87
|
+
const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;
|
|
88
|
+
let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;
|
|
89
|
+
if (filePath) {
|
|
90
|
+
checkContentUrl = `${checkContentUrl}/${filePath}`;
|
|
91
|
+
}
|
|
92
|
+
if (branch) {
|
|
93
|
+
checkContentUrl = `${checkContentUrl}?ref=${branch}`;
|
|
94
|
+
}
|
|
95
|
+
const checkRes = await fetch(checkContentUrl, {
|
|
96
|
+
method: 'HEAD'
|
|
97
|
+
});
|
|
98
|
+
if (checkRes.status !== 200) {
|
|
99
|
+
throw new Error(`Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`);
|
|
100
|
+
}
|
|
101
|
+
let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;
|
|
102
|
+
if (branch) {
|
|
103
|
+
url = `${url}/${branch}`;
|
|
104
|
+
}
|
|
105
|
+
const res = await fetch(url);
|
|
106
|
+
if (!res.body) {
|
|
107
|
+
throw new Error(`Failed to download ${url}`);
|
|
108
|
+
}
|
|
109
|
+
await pipeline(// @ts-expect-error - Readable is not a valid source
|
|
110
|
+
Readable.fromWeb(res.body), tar.x({
|
|
111
|
+
cwd: rootPath,
|
|
112
|
+
strip: filePath ? filePath.split('/').length + 1 : 1,
|
|
113
|
+
filter (path) {
|
|
114
|
+
if (filePath) {
|
|
115
|
+
return path.split('/').slice(1).join('/').startsWith(filePath);
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
function isLocalTemplate(template) {
|
|
122
|
+
return template.startsWith('file://') || fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template));
|
|
123
|
+
}
|
|
124
|
+
function isGithubShorthand(value) {
|
|
125
|
+
if (isValidUrl(value)) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
return /^[\w-]+\/[\w-.]+(\/[\w-.]+)*$/.test(value);
|
|
129
|
+
}
|
|
130
|
+
function isGithubRepo(value) {
|
|
131
|
+
try {
|
|
132
|
+
const url = new URL(value);
|
|
133
|
+
return url.origin === 'https://github.com';
|
|
134
|
+
} catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function isValidUrl(value) {
|
|
139
|
+
try {
|
|
140
|
+
// eslint-disable-next-line no-new
|
|
141
|
+
new URL(value);
|
|
142
|
+
return true;
|
|
143
|
+
} catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const OFFICIAL_NAME_REGEX = /^[a-zA-Z]*$/;
|
|
148
|
+
async function isOfficialTemplate(template, branch) {
|
|
149
|
+
if (isValidUrl(template) || !OFFICIAL_NAME_REGEX.test(template)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const res = await fetch(`https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`, {
|
|
153
|
+
method: 'HEAD'
|
|
154
|
+
});
|
|
155
|
+
return res.status === 200;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export { copyTemplate };
|
|
159
|
+
//# sourceMappingURL=template.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.mjs","sources":["../../src/utils/template.ts"],"sourcesContent":["import path from 'node:path';\nimport url from 'node:url';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport * as tar from 'tar';\nimport retry from 'async-retry';\n\nimport fse from 'fs-extra';\nimport type { Scope } from '../types';\n\nconst stripTrailingSlash = (str: string) => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\n// Merge template with new project being created\nexport async function copyTemplate(scope: Scope, rootPath: string) {\n const { template } = scope;\n\n if (!template) {\n throw new Error('Missing template or example app option');\n }\n\n if (await isOfficialTemplate(template, scope.templateBranch)) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner: 'strapi',\n repo: 'strapi',\n branch: scope.templateBranch,\n subPath: `templates/${template}`,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isLocalTemplate(template)) {\n const filePath = template.startsWith('file://') ? url.fileURLToPath(template) : template;\n\n await fse.copy(filePath, rootPath);\n }\n\n if (isGithubShorthand(template)) {\n const [owner, repo, ...pathSegments] = template.split('/');\n const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;\n\n await retry(\n () => downloadGithubRepo(rootPath, { owner, repo, branch: scope.templateBranch, subPath }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n if (isGithubRepo(template)) {\n const url = new URL(template);\n\n const [owner, repo, t, branch, ...pathSegments] = stripTrailingSlash(\n url.pathname.slice(1)\n ).split('/');\n\n if (t !== undefined && t !== 'tree') {\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n\n if (scope.templateBranch) {\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: scope.templateBranch,\n subPath: scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n return;\n }\n\n await retry(\n () =>\n downloadGithubRepo(rootPath, {\n owner,\n repo,\n branch: decodeURIComponent(branch) ?? scope.templateBranch,\n subPath: pathSegments.length\n ? decodeURIComponent(pathSegments.join('/'))\n : scope.templatePath,\n }),\n {\n retries: 3,\n onRetry(err, attempt) {\n console.log(`Retrying to download the template. Attempt ${attempt}. Error: ${err}`);\n },\n }\n );\n\n throw new Error(`Invalid GitHub template URL: ${template}`);\n }\n}\n\ntype RepoInfo = {\n owner: string;\n repo: string;\n branch?: string;\n subPath?: string | null;\n};\n\nasync function downloadGithubRepo(rootPath: string, { owner, repo, branch, subPath }: RepoInfo) {\n const filePath = subPath ? subPath.split('/').join(path.posix.sep) : null;\n\n let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;\n if (filePath) {\n checkContentUrl = `${checkContentUrl}/${filePath}`;\n }\n\n if (branch) {\n checkContentUrl = `${checkContentUrl}?ref=${branch}`;\n }\n\n const checkRes = await fetch(checkContentUrl, {\n method: 'HEAD',\n });\n\n if (checkRes.status !== 200) {\n throw new Error(\n `Could not find a template at https://github.com/${owner}/${repo}${branch ? ` on branch ${branch}` : ''}${filePath ? ` at path ${filePath}` : ''}`\n );\n }\n\n let url = `https://api.github.com/repos/${owner}/${repo}/tarball`;\n\n if (branch) {\n url = `${url}/${branch}`;\n }\n\n const res = await fetch(url);\n\n if (!res.body) {\n throw new Error(`Failed to download ${url}`);\n }\n\n await pipeline(\n // @ts-expect-error - Readable is not a valid source\n Readable.fromWeb(res.body),\n tar.x({\n cwd: rootPath,\n strip: filePath ? filePath.split('/').length + 1 : 1,\n filter(path) {\n if (filePath) {\n return path.split('/').slice(1).join('/').startsWith(filePath);\n }\n\n return true;\n },\n })\n );\n}\n\nfunction isLocalTemplate(template: string) {\n return (\n template.startsWith('file://') ||\n fse.existsSync(path.isAbsolute(template) ? template : path.resolve(process.cwd(), template))\n );\n}\n\nfunction isGithubShorthand(value: string) {\n if (isValidUrl(value)) {\n return false;\n }\n\n return /^[\\w-]+\\/[\\w-.]+(\\/[\\w-.]+)*$/.test(value);\n}\n\nfunction isGithubRepo(value: string) {\n try {\n const url = new URL(value);\n\n return url.origin === 'https://github.com';\n } catch {\n return false;\n }\n}\n\nfunction isValidUrl(value: string) {\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nconst OFFICIAL_NAME_REGEX = /^[a-zA-Z]*$/;\n\nasync function isOfficialTemplate(template: string, branch: string | undefined) {\n if (isValidUrl(template) || !OFFICIAL_NAME_REGEX.test(template)) {\n return false;\n }\n\n const res = await fetch(\n `https://api.github.com/repos/strapi/strapi/contents/templates/${template}?${branch ? `ref=${branch}` : ''}`,\n { method: 'HEAD' }\n );\n\n return res.status === 200;\n}\n"],"names":["stripTrailingSlash","str","endsWith","slice","copyTemplate","scope","rootPath","template","Error","isOfficialTemplate","templateBranch","retry","downloadGithubRepo","owner","repo","branch","subPath","retries","onRetry","err","attempt","console","log","isLocalTemplate","filePath","startsWith","url","fileURLToPath","fse","copy","isGithubShorthand","pathSegments","split","length","join","templatePath","isGithubRepo","URL","t","pathname","undefined","decodeURIComponent","path","posix","sep","checkContentUrl","checkRes","fetch","method","status","res","body","pipeline","Readable","fromWeb","tar","x","cwd","strip","filter","existsSync","isAbsolute","resolve","process","value","isValidUrl","test","origin","OFFICIAL_NAME_REGEX"],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var os = require('os');
|
|
4
|
+
var _ = require('lodash');
|
|
5
|
+
|
|
6
|
+
// Add properties from the package.json strapi key in the metadata
|
|
7
|
+
function addPackageJsonStrapiMetadata(metadata, scope) {
|
|
8
|
+
const { packageJsonStrapi = {} } = scope;
|
|
9
|
+
return _.defaults(metadata, packageJsonStrapi);
|
|
10
|
+
}
|
|
11
|
+
const boolToString = (value)=>(value === true).toString();
|
|
12
|
+
const getProperties = (scope, error)=>{
|
|
13
|
+
const eventProperties = {
|
|
14
|
+
error: typeof error === 'string' ? error : error && error.message
|
|
15
|
+
};
|
|
16
|
+
const userProperties = {
|
|
17
|
+
os: os.type(),
|
|
18
|
+
osPlatform: os.platform(),
|
|
19
|
+
osArch: os.arch(),
|
|
20
|
+
osRelease: os.release(),
|
|
21
|
+
nodeVersion: process.versions.node
|
|
22
|
+
};
|
|
23
|
+
const groupProperties = {
|
|
24
|
+
version: scope.strapiVersion,
|
|
25
|
+
docker: scope.docker,
|
|
26
|
+
useYarn: scope.packageManager === 'yarn',
|
|
27
|
+
packageManager: scope.packageManager,
|
|
28
|
+
/** @deprecated */ useTypescriptOnServer: boolToString(scope.useTypescript),
|
|
29
|
+
/** @deprecated */ useTypescriptOnAdmin: boolToString(scope.useTypescript),
|
|
30
|
+
useTypescript: boolToString(scope.useTypescript),
|
|
31
|
+
isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',
|
|
32
|
+
noRun: boolToString(scope.runApp),
|
|
33
|
+
projectId: scope.uuid,
|
|
34
|
+
useExample: boolToString(scope.useExample),
|
|
35
|
+
gitInit: boolToString(scope.gitInit),
|
|
36
|
+
installDependencies: boolToString(scope.installDependencies)
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
eventProperties,
|
|
40
|
+
userProperties,
|
|
41
|
+
groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope)
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
function trackEvent(event, payload) {
|
|
45
|
+
if (process.env.NODE_ENV === 'test') {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
return fetch('https://analytics.strapi.io/api/v2/track', {
|
|
50
|
+
method: 'POST',
|
|
51
|
+
body: JSON.stringify({
|
|
52
|
+
event,
|
|
53
|
+
...payload
|
|
54
|
+
}),
|
|
55
|
+
signal: AbortSignal.timeout(1000),
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
'X-Strapi-Event': event
|
|
59
|
+
}
|
|
60
|
+
}).catch(()=>{});
|
|
61
|
+
} catch (err) {
|
|
62
|
+
/** ignore errors */ return Promise.resolve();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async function trackError({ scope, error }) {
|
|
66
|
+
const properties = getProperties(scope, error);
|
|
67
|
+
try {
|
|
68
|
+
return await trackEvent('didNotCreateProject', {
|
|
69
|
+
deviceId: scope.deviceId,
|
|
70
|
+
...properties
|
|
71
|
+
});
|
|
72
|
+
} catch (err) {
|
|
73
|
+
/** ignore errors */ return Promise.resolve();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function trackUsage({ event, scope, error }) {
|
|
77
|
+
const properties = getProperties(scope, error);
|
|
78
|
+
try {
|
|
79
|
+
return await trackEvent(event, {
|
|
80
|
+
deviceId: scope.deviceId,
|
|
81
|
+
...properties
|
|
82
|
+
});
|
|
83
|
+
} catch (err) {
|
|
84
|
+
/** ignore errors */ return Promise.resolve();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
exports.trackError = trackError;
|
|
89
|
+
exports.trackUsage = trackUsage;
|
|
90
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sources":["../../src/utils/usage.ts"],"sourcesContent":["import os from 'os';\nimport _ from 'lodash';\n\nimport { Scope, StderrError } from '../types';\n\ntype TrackError = Error | string | StderrError;\n\n// Add properties from the package.json strapi key in the metadata\nfunction addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) {\n const { packageJsonStrapi = {} } = scope;\n\n return _.defaults(metadata, packageJsonStrapi);\n}\n\nconst boolToString = (value: boolean | undefined) => (value === true).toString();\n\nconst getProperties = (scope: Scope, error?: TrackError) => {\n const eventProperties = {\n error: typeof error === 'string' ? error : error && error.message,\n };\n\n const userProperties = {\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const groupProperties = {\n version: scope.strapiVersion,\n docker: scope.docker,\n useYarn: scope.packageManager === 'yarn',\n packageManager: scope.packageManager,\n /** @deprecated */\n useTypescriptOnServer: boolToString(scope.useTypescript),\n /** @deprecated */\n useTypescriptOnAdmin: boolToString(scope.useTypescript),\n useTypescript: boolToString(scope.useTypescript),\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n noRun: boolToString(scope.runApp),\n projectId: scope.uuid,\n useExample: boolToString(scope.useExample),\n gitInit: boolToString(scope.gitInit),\n installDependencies: boolToString(scope.installDependencies),\n };\n\n return {\n eventProperties,\n userProperties,\n groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope),\n };\n};\n\nfunction trackEvent(event: string, payload: Record<string, unknown>) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n try {\n return fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n ...payload,\n }),\n signal: AbortSignal.timeout(1000),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }).catch(() => {});\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackError({ scope, error }: { scope: Scope; error?: TrackError }) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent('didNotCreateProject', {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackUsage({\n event,\n scope,\n error,\n}: {\n event: string;\n scope: Scope;\n error?: TrackError;\n}) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent(event, {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n"],"names":["addPackageJsonStrapiMetadata","metadata","scope","packageJsonStrapi","_","defaults","boolToString","value","toString","getProperties","error","eventProperties","message","userProperties","os","type","osPlatform","platform","osArch","arch","osRelease","release","nodeVersion","process","versions","node","groupProperties","version","strapiVersion","docker","useYarn","packageManager","useTypescriptOnServer","useTypescript","useTypescriptOnAdmin","isHostedOnStrapiCloud","env","STRAPI_HOSTING","noRun","runApp","projectId","uuid","useExample","gitInit","installDependencies","trackEvent","event","payload","NODE_ENV","fetch","method","body","JSON","stringify","signal","AbortSignal","timeout","headers","catch","err","Promise","resolve","trackError","properties","deviceId","trackUsage"],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
|
|
4
|
+
// Add properties from the package.json strapi key in the metadata
|
|
5
|
+
function addPackageJsonStrapiMetadata(metadata, scope) {
|
|
6
|
+
const { packageJsonStrapi = {} } = scope;
|
|
7
|
+
return _.defaults(metadata, packageJsonStrapi);
|
|
8
|
+
}
|
|
9
|
+
const boolToString = (value)=>(value === true).toString();
|
|
10
|
+
const getProperties = (scope, error)=>{
|
|
11
|
+
const eventProperties = {
|
|
12
|
+
error: typeof error === 'string' ? error : error && error.message
|
|
13
|
+
};
|
|
14
|
+
const userProperties = {
|
|
15
|
+
os: os.type(),
|
|
16
|
+
osPlatform: os.platform(),
|
|
17
|
+
osArch: os.arch(),
|
|
18
|
+
osRelease: os.release(),
|
|
19
|
+
nodeVersion: process.versions.node
|
|
20
|
+
};
|
|
21
|
+
const groupProperties = {
|
|
22
|
+
version: scope.strapiVersion,
|
|
23
|
+
docker: scope.docker,
|
|
24
|
+
useYarn: scope.packageManager === 'yarn',
|
|
25
|
+
packageManager: scope.packageManager,
|
|
26
|
+
/** @deprecated */ useTypescriptOnServer: boolToString(scope.useTypescript),
|
|
27
|
+
/** @deprecated */ useTypescriptOnAdmin: boolToString(scope.useTypescript),
|
|
28
|
+
useTypescript: boolToString(scope.useTypescript),
|
|
29
|
+
isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',
|
|
30
|
+
noRun: boolToString(scope.runApp),
|
|
31
|
+
projectId: scope.uuid,
|
|
32
|
+
useExample: boolToString(scope.useExample),
|
|
33
|
+
gitInit: boolToString(scope.gitInit),
|
|
34
|
+
installDependencies: boolToString(scope.installDependencies)
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
eventProperties,
|
|
38
|
+
userProperties,
|
|
39
|
+
groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope)
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
function trackEvent(event, payload) {
|
|
43
|
+
if (process.env.NODE_ENV === 'test') {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
return fetch('https://analytics.strapi.io/api/v2/track', {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
event,
|
|
51
|
+
...payload
|
|
52
|
+
}),
|
|
53
|
+
signal: AbortSignal.timeout(1000),
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json',
|
|
56
|
+
'X-Strapi-Event': event
|
|
57
|
+
}
|
|
58
|
+
}).catch(()=>{});
|
|
59
|
+
} catch (err) {
|
|
60
|
+
/** ignore errors */ return Promise.resolve();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function trackError({ scope, error }) {
|
|
64
|
+
const properties = getProperties(scope, error);
|
|
65
|
+
try {
|
|
66
|
+
return await trackEvent('didNotCreateProject', {
|
|
67
|
+
deviceId: scope.deviceId,
|
|
68
|
+
...properties
|
|
69
|
+
});
|
|
70
|
+
} catch (err) {
|
|
71
|
+
/** ignore errors */ return Promise.resolve();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function trackUsage({ event, scope, error }) {
|
|
75
|
+
const properties = getProperties(scope, error);
|
|
76
|
+
try {
|
|
77
|
+
return await trackEvent(event, {
|
|
78
|
+
deviceId: scope.deviceId,
|
|
79
|
+
...properties
|
|
80
|
+
});
|
|
81
|
+
} catch (err) {
|
|
82
|
+
/** ignore errors */ return Promise.resolve();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { trackError, trackUsage };
|
|
87
|
+
//# sourceMappingURL=usage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.mjs","sources":["../../src/utils/usage.ts"],"sourcesContent":["import os from 'os';\nimport _ from 'lodash';\n\nimport { Scope, StderrError } from '../types';\n\ntype TrackError = Error | string | StderrError;\n\n// Add properties from the package.json strapi key in the metadata\nfunction addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) {\n const { packageJsonStrapi = {} } = scope;\n\n return _.defaults(metadata, packageJsonStrapi);\n}\n\nconst boolToString = (value: boolean | undefined) => (value === true).toString();\n\nconst getProperties = (scope: Scope, error?: TrackError) => {\n const eventProperties = {\n error: typeof error === 'string' ? error : error && error.message,\n };\n\n const userProperties = {\n os: os.type(),\n osPlatform: os.platform(),\n osArch: os.arch(),\n osRelease: os.release(),\n nodeVersion: process.versions.node,\n };\n\n const groupProperties = {\n version: scope.strapiVersion,\n docker: scope.docker,\n useYarn: scope.packageManager === 'yarn',\n packageManager: scope.packageManager,\n /** @deprecated */\n useTypescriptOnServer: boolToString(scope.useTypescript),\n /** @deprecated */\n useTypescriptOnAdmin: boolToString(scope.useTypescript),\n useTypescript: boolToString(scope.useTypescript),\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n noRun: boolToString(scope.runApp),\n projectId: scope.uuid,\n useExample: boolToString(scope.useExample),\n gitInit: boolToString(scope.gitInit),\n installDependencies: boolToString(scope.installDependencies),\n };\n\n return {\n eventProperties,\n userProperties,\n groupProperties: addPackageJsonStrapiMetadata(groupProperties, scope),\n };\n};\n\nfunction trackEvent(event: string, payload: Record<string, unknown>) {\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n\n try {\n return fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n ...payload,\n }),\n signal: AbortSignal.timeout(1000),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }).catch(() => {});\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackError({ scope, error }: { scope: Scope; error?: TrackError }) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent('didNotCreateProject', {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n\nexport async function trackUsage({\n event,\n scope,\n error,\n}: {\n event: string;\n scope: Scope;\n error?: TrackError;\n}) {\n const properties = getProperties(scope, error);\n\n try {\n return await trackEvent(event, {\n deviceId: scope.deviceId,\n ...properties,\n });\n } catch (err) {\n /** ignore errors */\n return Promise.resolve();\n }\n}\n"],"names":["addPackageJsonStrapiMetadata","metadata","scope","packageJsonStrapi","_","defaults","boolToString","value","toString","getProperties","error","eventProperties","message","userProperties","os","type","osPlatform","platform","osArch","arch","osRelease","release","nodeVersion","process","versions","node","groupProperties","version","strapiVersion","docker","useYarn","packageManager","useTypescriptOnServer","useTypescript","useTypescriptOnAdmin","isHostedOnStrapiCloud","env","STRAPI_HOSTING","noRun","runApp","projectId","uuid","useExample","gitInit","installDependencies","trackEvent","event","payload","NODE_ENV","fetch","method","body","JSON","stringify","signal","AbortSignal","timeout","headers","catch","err","Promise","resolve","trackError","properties","deviceId","trackUsage"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-strapi-app",
|
|
3
|
-
"version": "5.12.
|
|
3
|
+
"version": "5.12.3",
|
|
4
4
|
"description": "Generate a new Strapi application.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"create-strapi-app",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"watch": "run -T rollup -c -w"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@strapi/cloud-cli": "5.12.
|
|
53
|
+
"@strapi/cloud-cli": "5.12.3",
|
|
54
54
|
"async-retry": "1.3.3",
|
|
55
55
|
"chalk": "4.1.2",
|
|
56
56
|
"commander": "8.3.0",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"@types/async-retry": "^1",
|
|
70
70
|
"@types/fs-extra": "11.0.4",
|
|
71
71
|
"@types/inquirer": "8.2.5",
|
|
72
|
-
"eslint-config-custom": "5.12.
|
|
73
|
-
"tsconfig": "5.12.
|
|
72
|
+
"eslint-config-custom": "5.12.3",
|
|
73
|
+
"tsconfig": "5.12.3"
|
|
74
74
|
},
|
|
75
75
|
"engines": {
|
|
76
76
|
"node": ">=18.0.0 <=22.x.x",
|