create-strapi-app 5.50.0 → 5.50.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -134,8 +134,7 @@ async function downloadGithubRepo(rootPath, { owner, repo, branch, subPath }) {
134
134
  if (!res.body) {
135
135
  throw new Error(`Failed to download ${url}`);
136
136
  }
137
- await promises.pipeline(// @ts-expect-error - Readable is not a valid source
138
- node_stream.Readable.fromWeb(res.body), tar__namespace.x({
137
+ await promises.pipeline(node_stream.Readable.fromWeb(res.body), tar__namespace.x({
139
138
  cwd: rootPath,
140
139
  strip: filePath ? filePath.split('/').length + 1 : 1,
141
140
  filter (path) {
@@ -1 +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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"}
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 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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"}
@@ -106,8 +106,7 @@ async function downloadGithubRepo(rootPath, { owner, repo, branch, subPath }) {
106
106
  if (!res.body) {
107
107
  throw new Error(`Failed to download ${url}`);
108
108
  }
109
- await pipeline(// @ts-expect-error - Readable is not a valid source
110
- Readable.fromWeb(res.body), tar.x({
109
+ await pipeline(Readable.fromWeb(res.body), tar.x({
111
110
  cwd: rootPath,
112
111
  strip: filePath ? filePath.split('/').length + 1 : 1,
113
112
  filter (path) {
@@ -1 +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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"}
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 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":";;;;;;;;AAUA,MAAMA,qBAAqB,CAACC,GAAAA,GAAAA;IAC1B,OAAOA,GAAAA,CAAIC,QAAQ,CAAC,GAAA,CAAA,GAAOD,IAAIE,KAAK,CAAC,CAAA,EAAG,EAAC,CAAA,GAAKF,GAAAA;AAChD,CAAA;AAEA;AACO,eAAeG,YAAAA,CAAaC,KAAY,EAAEC,QAAgB,EAAA;IAC/D,MAAM,EAAEC,QAAQ,EAAE,GAAGF,KAAAA;AAErB,IAAA,IAAI,CAACE,QAAAA,EAAU;AACb,QAAA,MAAM,IAAIC,KAAAA,CAAM,wCAAA,CAAA;AAClB,IAAA;AAEA,IAAA,IAAI,MAAMC,kBAAAA,CAAmBF,QAAAA,EAAUF,KAAAA,CAAMK,cAAc,CAAA,EAAG;QAC5D,MAAMC,KAAAA,CACJ,IACEC,kBAAAA,CAAmBN,QAAAA,EAAU;gBAC3BO,KAAAA,EAAO,QAAA;gBACPC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,MAAAA,EAAQV,MAAMK,cAAc;gBAC5BM,OAAAA,EAAS,CAAC,UAAU,EAAET,QAAAA,CAAAA;aACxB,CAAA,EACF;YACEU,OAAAA,EAAS,CAAA;YACTC,OAAAA,CAAAA,CAAQC,GAAG,EAAEC,OAAO,EAAA;gBAClBC,OAAAA,CAAQC,GAAG,CAAC,CAAC,2CAA2C,EAAEF,OAAAA,CAAQ,SAAS,EAAED,GAAAA,CAAAA,CAAK,CAAA;AACpF,YAAA;AACF,SAAA,CAAA;AAGF,QAAA;AACF,IAAA;AAEA,IAAA,IAAII,gBAAgBhB,QAAAA,CAAAA,EAAW;QAC7B,MAAMiB,QAAAA,GAAWjB,SAASkB,UAAU,CAAC,aAAaC,GAAAA,CAAIC,aAAa,CAACpB,QAAAA,CAAAA,GAAYA,QAAAA;QAEhF,MAAMqB,GAAAA,CAAIC,IAAI,CAACL,QAAAA,EAAUlB,QAAAA,CAAAA;AAC3B,IAAA;AAEA,IAAA,IAAIwB,kBAAkBvB,QAAAA,CAAAA,EAAW;QAC/B,MAAM,CAACM,OAAOC,IAAAA,EAAM,GAAGiB,aAAa,GAAGxB,QAAAA,CAASyB,KAAK,CAAC,GAAA,CAAA;QACtD,MAAMhB,OAAAA,GAAUe,aAAaE,MAAM,GAAGF,aAAaG,IAAI,CAAC,GAAA,CAAA,GAAO7B,KAAAA,CAAM8B,YAAY;QAEjF,MAAMxB,KAAAA,CACJ,IAAMC,kBAAAA,CAAmBN,QAAAA,EAAU;AAAEO,gBAAAA,KAAAA;AAAOC,gBAAAA,IAAAA;AAAMC,gBAAAA,MAAAA,EAAQV,MAAMK,cAAc;AAAEM,gBAAAA;aAAQ,CAAA,EACxF;YACEC,OAAAA,EAAS,CAAA;YACTC,OAAAA,CAAAA,CAAQC,GAAG,EAAEC,OAAO,EAAA;gBAClBC,OAAAA,CAAQC,GAAG,CAAC,CAAC,2CAA2C,EAAEF,OAAAA,CAAQ,SAAS,EAAED,GAAAA,CAAAA,CAAK,CAAA;AACpF,YAAA;AACF,SAAA,CAAA;AAGF,QAAA;AACF,IAAA;AAEA,IAAA,IAAIiB,aAAa7B,QAAAA,CAAAA,EAAW;QAC1B,MAAMmB,GAAAA,GAAM,IAAIW,GAAAA,CAAI9B,QAAAA,CAAAA;AAEpB,QAAA,MAAM,CAACM,KAAAA,EAAOC,IAAAA,EAAMwB,CAAAA,EAAGvB,MAAAA,EAAQ,GAAGgB,YAAAA,CAAa,GAAG/B,kBAAAA,CAChD0B,GAAAA,CAAIa,QAAQ,CAACpC,KAAK,CAAC,CAAA,CAAA,CAAA,CACnB6B,KAAK,CAAC,GAAA,CAAA;QAER,IAAIM,CAAAA,KAAME,SAAAA,IAAaF,CAAAA,KAAM,MAAA,EAAQ;AACnC,YAAA,MAAM,IAAI9B,KAAAA,CAAM,CAAC,6BAA6B,EAAED,QAAAA,CAAAA,CAAU,CAAA;AAC5D,QAAA;QAEA,IAAIF,KAAAA,CAAMK,cAAc,EAAE;YACxB,MAAMC,KAAAA,CACJ,IACEC,kBAAAA,CAAmBN,QAAAA,EAAU;AAC3BO,oBAAAA,KAAAA;AACAC,oBAAAA,IAAAA;AACAC,oBAAAA,MAAAA,EAAQV,MAAMK,cAAc;AAC5BM,oBAAAA,OAAAA,EAASX,MAAM8B;iBACjB,CAAA,EACF;gBACElB,OAAAA,EAAS,CAAA;gBACTC,OAAAA,CAAAA,CAAQC,GAAG,EAAEC,OAAO,EAAA;oBAClBC,OAAAA,CAAQC,GAAG,CAAC,CAAC,2CAA2C,EAAEF,OAAAA,CAAQ,SAAS,EAAED,GAAAA,CAAAA,CAAK,CAAA;AACpF,gBAAA;AACF,aAAA,CAAA;AAGF,YAAA;AACF,QAAA;QAEA,MAAMR,KAAAA,CACJ,IACEC,kBAAAA,CAAmBN,QAAAA,EAAU;AAC3BO,gBAAAA,KAAAA;AACAC,gBAAAA,IAAAA;gBACAC,MAAAA,EAAQ0B,kBAAAA,CAAmB1B,MAAAA,CAAAA,IAAWV,KAAAA,CAAMK,cAAc;gBAC1DM,OAAAA,EAASe,YAAAA,CAAaE,MAAM,GACxBQ,kBAAAA,CAAmBV,aAAaG,IAAI,CAAC,GAAA,CAAA,CAAA,GACrC7B,KAAAA,CAAM8B;aACZ,CAAA,EACF;YACElB,OAAAA,EAAS,CAAA;YACTC,OAAAA,CAAAA,CAAQC,GAAG,EAAEC,OAAO,EAAA;gBAClBC,OAAAA,CAAQC,GAAG,CAAC,CAAC,2CAA2C,EAAEF,OAAAA,CAAQ,SAAS,EAAED,GAAAA,CAAAA,CAAK,CAAA;AACpF,YAAA;AACF,SAAA,CAAA;AAGF,QAAA,MAAM,IAAIX,KAAAA,CAAM,CAAC,6BAA6B,EAAED,QAAAA,CAAAA,CAAU,CAAA;AAC5D,IAAA;AACF;AASA,eAAeK,kBAAAA,CAAmBN,QAAgB,EAAE,EAAEO,KAAK,EAAEC,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAY,EAAA;AAC5F,IAAA,MAAMQ,QAAAA,GAAWR,OAAAA,GAAUA,OAAAA,CAAQgB,KAAK,CAAC,GAAA,CAAA,CAAKE,IAAI,CAACQ,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,GAAI,IAAA;IAErE,IAAIC,eAAAA,GAAkB,CAAC,6BAA6B,EAAEhC,MAAM,CAAC,EAAEC,IAAAA,CAAK,SAAS,CAAC;AAC9E,IAAA,IAAIU,QAAAA,EAAU;AACZqB,QAAAA,eAAAA,GAAkB,CAAA,EAAGA,eAAAA,CAAgB,CAAC,EAAErB,QAAAA,CAAAA,CAAU;AACpD,IAAA;AAEA,IAAA,IAAIT,MAAAA,EAAQ;AACV8B,QAAAA,eAAAA,GAAkB,CAAA,EAAGA,eAAAA,CAAgB,KAAK,EAAE9B,MAAAA,CAAAA,CAAQ;AACtD,IAAA;IAEA,MAAM+B,QAAAA,GAAW,MAAMC,KAAAA,CAAMF,eAAAA,EAAiB;QAC5CG,MAAAA,EAAQ;AACV,KAAA,CAAA;IAEA,IAAIF,QAAAA,CAASG,MAAM,KAAK,GAAA,EAAK;QAC3B,MAAM,IAAIzC,MACR,CAAC,gDAAgD,EAAEK,KAAAA,CAAM,CAAC,EAAEC,IAAAA,CAAAA,EAAOC,MAAAA,GAAS,CAAC,WAAW,EAAEA,MAAAA,CAAAA,CAAQ,GAAG,EAAA,CAAA,EAAKS,QAAAA,GAAW,CAAC,SAAS,EAAEA,QAAAA,CAAAA,CAAU,GAAG,EAAA,CAAA,CAAI,CAAA;AAEtJ,IAAA;IAEA,IAAIE,GAAAA,GAAM,CAAC,6BAA6B,EAAEb,MAAM,CAAC,EAAEC,IAAAA,CAAK,QAAQ,CAAC;AAEjE,IAAA,IAAIC,MAAAA,EAAQ;AACVW,QAAAA,GAAAA,GAAM,CAAA,EAAGA,GAAAA,CAAI,CAAC,EAAEX,MAAAA,CAAAA,CAAQ;AAC1B,IAAA;IAEA,MAAMmC,GAAAA,GAAM,MAAMH,KAAAA,CAAMrB,GAAAA,CAAAA;IAExB,IAAI,CAACwB,GAAAA,CAAIC,IAAI,EAAE;AACb,QAAA,MAAM,IAAI3C,KAAAA,CAAM,CAAC,mBAAmB,EAAEkB,GAAAA,CAAAA,CAAK,CAAA;AAC7C,IAAA;IAEA,MAAM0B,QAAAA,CACJC,SAASC,OAAO,CAACJ,IAAIC,IAAI,CAAA,EACzBI,GAAAA,CAAIC,CAAC,CAAC;QACJC,GAAAA,EAAKnD,QAAAA;AACLoD,QAAAA,KAAAA,EAAOlC,WAAWA,QAAAA,CAASQ,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,GAAG,CAAA,GAAI,CAAA;AACnD0B,QAAAA,MAAAA,CAAAA,CAAOjB,IAAI,EAAA;AACT,YAAA,IAAIlB,QAAAA,EAAU;gBACZ,OAAOkB,IAAAA,CAAKV,KAAK,CAAC,GAAA,CAAA,CAAK7B,KAAK,CAAC,CAAA,CAAA,CAAG+B,IAAI,CAAC,GAAA,CAAA,CAAKT,UAAU,CAACD,QAAAA,CAAAA;AACvD,YAAA;YAEA,OAAO,IAAA;AACT,QAAA;AACF,KAAA,CAAA,CAAA;AAEJ;AAEA,SAASD,gBAAgBhB,QAAgB,EAAA;AACvC,IAAA,OACEA,SAASkB,UAAU,CAAC,SAAA,CAAA,IACpBG,GAAAA,CAAIgC,UAAU,CAAClB,IAAAA,CAAKmB,UAAU,CAACtD,YAAYA,QAAAA,GAAWmC,IAAAA,CAAKoB,OAAO,CAACC,OAAAA,CAAQN,GAAG,EAAA,EAAIlD,QAAAA,CAAAA,CAAAA;AAEtF;AAEA,SAASuB,kBAAkBkC,KAAa,EAAA;AACtC,IAAA,IAAIC,WAAWD,KAAAA,CAAAA,EAAQ;QACrB,OAAO,KAAA;AACT,IAAA;IAEA,OAAO,+BAAA,CAAgCE,IAAI,CAACF,KAAAA,CAAAA;AAC9C;AAEA,SAAS5B,aAAa4B,KAAa,EAAA;IACjC,IAAI;QACF,MAAMtC,GAAAA,GAAM,IAAIW,GAAAA,CAAI2B,KAAAA,CAAAA;QAEpB,OAAOtC,GAAAA,CAAIyC,MAAM,KAAK,oBAAA;AACxB,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,KAAA;AACT,IAAA;AACF;AAEA,SAASF,WAAWD,KAAa,EAAA;IAC/B,IAAI;;AAEF,QAAA,IAAI3B,GAAAA,CAAI2B,KAAAA,CAAAA;QACR,OAAO,IAAA;AACT,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,KAAA;AACT,IAAA;AACF;AAEA,MAAMI,mBAAAA,GAAsB,aAAA;AAE5B,eAAe3D,kBAAAA,CAAmBF,QAAgB,EAAEQ,MAA0B,EAAA;AAC5E,IAAA,IAAIkD,WAAW1D,QAAAA,CAAAA,IAAa,CAAC6D,mBAAAA,CAAoBF,IAAI,CAAC3D,QAAAA,CAAAA,EAAW;QAC/D,OAAO,KAAA;AACT,IAAA;AAEA,IAAA,MAAM2C,MAAM,MAAMH,KAAAA,CAChB,CAAC,8DAA8D,EAAExC,QAAAA,CAAS,CAAC,EAAEQ,MAAAA,GAAS,CAAC,IAAI,EAAEA,MAAAA,CAAAA,CAAQ,GAAG,IAAI,EAC5G;QAAEiC,MAAAA,EAAQ;AAAO,KAAA,CAAA;IAGnB,OAAOE,GAAAA,CAAID,MAAM,KAAK,GAAA;AACxB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-strapi-app",
3
- "version": "5.50.0",
3
+ "version": "5.50.2",
4
4
  "description": "Generate a new Strapi application.",
5
5
  "keywords": [
6
6
  "create-strapi-app",
@@ -46,12 +46,12 @@
46
46
  "build:code": "run -T rollup -c",
47
47
  "build:types": "run -T tsc -p tsconfig.build.json --emitDeclarationOnly",
48
48
  "clean": "run -T rimraf ./dist",
49
- "lint": "run -T eslint .",
50
- "test:ts": "run -T tsc --noEmit",
49
+ "lint": "run -T eslint . --max-warnings=0",
50
+ "test:ts": "run -T tsc -p tsconfig.json",
51
51
  "watch": "run -T rollup -c -w"
52
52
  },
53
53
  "dependencies": {
54
- "@strapi/cloud-cli": "5.50.0",
54
+ "@strapi/cloud-cli": "5.50.2",
55
55
  "async-retry": "1.3.3",
56
56
  "chalk": "4.1.2",
57
57
  "commander": "8.3.0",
@@ -64,14 +64,15 @@
64
64
  "rollup": "4.60.4",
65
65
  "semver": "7.7.4",
66
66
  "sort-package-json": "2.10.0",
67
- "tar": "7.5.16"
67
+ "tar": "7.5.18"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@types/async-retry": "^1",
71
71
  "@types/fs-extra": "11.0.4",
72
72
  "@types/inquirer": "9.0.9",
73
- "eslint-config-custom": "5.50.0",
74
- "tsconfig": "5.50.0"
73
+ "@types/node": "20.19.41",
74
+ "eslint-config-custom": "5.50.2",
75
+ "tsconfig": "5.50.2"
75
76
  },
76
77
  "engines": {
77
78
  "node": ">=20.0.0 <=26.x.x",