netlify-cli 17.3.1 → 17.4.0

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 (210) hide show
  1. package/README.md +3 -139
  2. package/npm-shrinkwrap.json +82 -82
  3. package/package.json +16 -15
  4. package/src/commands/addons/addons-auth.mjs +27 -30
  5. package/src/commands/addons/addons-config.mjs +145 -154
  6. package/src/commands/addons/addons-create.mjs +94 -108
  7. package/src/commands/addons/addons-delete.mjs +36 -41
  8. package/src/commands/addons/addons-list.mjs +38 -42
  9. package/src/commands/addons/addons.mjs +26 -28
  10. package/src/commands/addons/index.mjs +1 -1
  11. package/src/commands/api/api.mjs +45 -53
  12. package/src/commands/api/index.mjs +1 -1
  13. package/src/commands/base-command.mjs +597 -684
  14. package/src/commands/blobs/blobs-delete.mjs +35 -0
  15. package/src/commands/blobs/blobs-get.mjs +44 -0
  16. package/src/commands/blobs/blobs-list.mjs +48 -0
  17. package/src/commands/blobs/blobs-set.mjs +54 -0
  18. package/src/commands/blobs/blobs.mjs +32 -0
  19. package/src/commands/blobs/index.mjs +1 -0
  20. package/src/commands/build/build.mjs +55 -67
  21. package/src/commands/build/index.mjs +1 -1
  22. package/src/commands/completion/completion.mjs +41 -46
  23. package/src/commands/completion/index.mjs +1 -1
  24. package/src/commands/deploy/deploy.mjs +675 -710
  25. package/src/commands/deploy/index.mjs +1 -1
  26. package/src/commands/dev/dev-exec.mjs +20 -32
  27. package/src/commands/dev/dev.mjs +217 -302
  28. package/src/commands/dev/index.mjs +1 -1
  29. package/src/commands/dev/types.d.ts +30 -0
  30. package/src/commands/env/env-clone.mjs +157 -184
  31. package/src/commands/env/env-get.mjs +49 -68
  32. package/src/commands/env/env-import.mjs +100 -119
  33. package/src/commands/env/env-list.mjs +104 -129
  34. package/src/commands/env/env-set.mjs +160 -185
  35. package/src/commands/env/env-unset.mjs +104 -122
  36. package/src/commands/env/env.mjs +28 -30
  37. package/src/commands/env/index.mjs +1 -1
  38. package/src/commands/functions/functions-build.mjs +29 -41
  39. package/src/commands/functions/functions-create.mjs +533 -601
  40. package/src/commands/functions/functions-invoke.mjs +193 -216
  41. package/src/commands/functions/functions-list.mjs +45 -55
  42. package/src/commands/functions/functions-serve.mjs +51 -61
  43. package/src/commands/functions/functions.mjs +26 -32
  44. package/src/commands/functions/index.mjs +1 -1
  45. package/src/commands/index.mjs +2 -2
  46. package/src/commands/init/index.mjs +1 -1
  47. package/src/commands/init/init.mjs +138 -167
  48. package/src/commands/integration/deploy.mjs +337 -399
  49. package/src/commands/integration/index.mjs +12 -13
  50. package/src/commands/link/index.mjs +1 -1
  51. package/src/commands/link/link.mjs +298 -317
  52. package/src/commands/lm/index.mjs +1 -1
  53. package/src/commands/lm/lm-info.mjs +23 -31
  54. package/src/commands/lm/lm-install.mjs +13 -17
  55. package/src/commands/lm/lm-setup.mjs +80 -84
  56. package/src/commands/lm/lm-uninstall.mjs +7 -12
  57. package/src/commands/lm/lm.mjs +18 -22
  58. package/src/commands/login/index.mjs +1 -1
  59. package/src/commands/login/login.mjs +35 -41
  60. package/src/commands/logout/index.mjs +1 -1
  61. package/src/commands/logout/logout.mjs +25 -31
  62. package/src/commands/main.mjs +166 -201
  63. package/src/commands/open/index.mjs +1 -1
  64. package/src/commands/open/open-admin.mjs +15 -18
  65. package/src/commands/open/open-site.mjs +16 -19
  66. package/src/commands/open/open.mjs +24 -27
  67. package/src/commands/recipes/common.mjs +23 -34
  68. package/src/commands/recipes/index.mjs +1 -1
  69. package/src/commands/recipes/recipes-list.mjs +13 -20
  70. package/src/commands/recipes/recipes.mjs +59 -72
  71. package/src/commands/serve/index.mjs +1 -1
  72. package/src/commands/serve/serve.mjs +142 -189
  73. package/src/commands/sites/index.mjs +2 -2
  74. package/src/commands/sites/sites-create-template.mjs +214 -236
  75. package/src/commands/sites/sites-create.mjs +145 -157
  76. package/src/commands/sites/sites-delete.mjs +75 -81
  77. package/src/commands/sites/sites-list.mjs +63 -66
  78. package/src/commands/sites/sites.mjs +18 -20
  79. package/src/commands/status/index.mjs +1 -1
  80. package/src/commands/status/status-hooks.mjs +32 -34
  81. package/src/commands/status/status.mjs +99 -106
  82. package/src/commands/switch/index.mjs +1 -1
  83. package/src/commands/switch/switch.mjs +32 -37
  84. package/src/commands/types.d.ts +31 -0
  85. package/src/commands/unlink/index.mjs +1 -1
  86. package/src/commands/unlink/unlink.mjs +23 -29
  87. package/src/commands/watch/index.mjs +1 -1
  88. package/src/commands/watch/watch.mjs +91 -105
  89. package/src/functions-templates/javascript/hello/{{name}}.js +2 -3
  90. package/src/lib/account.mjs +4 -5
  91. package/src/lib/api.mjs +22 -20
  92. package/src/lib/blobs/blobs.mjs +36 -45
  93. package/src/lib/build.mjs +82 -85
  94. package/src/lib/completion/constants.mjs +2 -4
  95. package/src/lib/completion/generate-autocompletion.mjs +33 -36
  96. package/src/lib/completion/get-autocompletion.mjs +31 -35
  97. package/src/lib/completion/index.mjs +1 -1
  98. package/src/lib/completion/script.mjs +12 -19
  99. package/src/lib/edge-functions/bootstrap.mjs +3 -5
  100. package/src/lib/edge-functions/consts.mjs +9 -10
  101. package/src/lib/edge-functions/deploy.mjs +28 -34
  102. package/src/lib/edge-functions/editor-helper.mjs +29 -42
  103. package/src/lib/edge-functions/headers.mjs +24 -26
  104. package/src/lib/edge-functions/internal.mjs +38 -44
  105. package/src/lib/edge-functions/proxy.mjs +229 -228
  106. package/src/lib/edge-functions/registry.mjs +473 -574
  107. package/src/lib/exec-fetcher.mjs +115 -122
  108. package/src/lib/fs.mjs +28 -27
  109. package/src/lib/functions/background.mjs +16 -20
  110. package/src/lib/functions/config.mjs +12 -9
  111. package/src/lib/functions/form-submissions-handler.mjs +143 -149
  112. package/src/lib/functions/local-proxy.mjs +40 -44
  113. package/src/lib/functions/memoized-build.mjs +19 -21
  114. package/src/lib/functions/netlify-function.mjs +269 -249
  115. package/src/lib/functions/registry.mjs +509 -568
  116. package/src/lib/functions/runtimes/go/index.mjs +62 -71
  117. package/src/lib/functions/runtimes/index.mjs +8 -15
  118. package/src/lib/functions/runtimes/js/builders/netlify-lambda.mjs +55 -64
  119. package/src/lib/functions/runtimes/js/builders/zisi.mjs +135 -154
  120. package/src/lib/functions/runtimes/js/constants.mjs +1 -1
  121. package/src/lib/functions/runtimes/js/index.mjs +92 -109
  122. package/src/lib/functions/runtimes/js/worker.mjs +43 -45
  123. package/src/lib/functions/runtimes/rust/index.mjs +64 -73
  124. package/src/lib/functions/scheduled.mjs +70 -88
  125. package/src/lib/functions/server.mjs +269 -327
  126. package/src/lib/functions/synchronous.mjs +118 -147
  127. package/src/lib/functions/utils.mjs +38 -46
  128. package/src/lib/geo-location.mjs +69 -81
  129. package/src/lib/http-agent.mjs +87 -90
  130. package/src/lib/images/proxy.mjs +97 -89
  131. package/src/lib/log.mjs +6 -9
  132. package/src/lib/path.mjs +2 -1
  133. package/src/lib/render-error-template.mjs +19 -20
  134. package/src/lib/settings.mjs +17 -19
  135. package/src/lib/spinner.mjs +21 -23
  136. package/src/lib/string.mjs +4 -2
  137. package/src/recipes/vscode/index.mjs +69 -85
  138. package/src/recipes/vscode/settings.mjs +53 -58
  139. package/src/utils/addons/compare.mjs +31 -32
  140. package/src/utils/addons/diffs/index.mjs +16 -17
  141. package/src/utils/addons/diffs/options.mjs +99 -101
  142. package/src/utils/addons/prepare.mjs +100 -97
  143. package/src/utils/addons/prompts.mjs +73 -76
  144. package/src/utils/addons/render.mjs +33 -36
  145. package/src/utils/addons/validation.mjs +19 -15
  146. package/src/utils/banner.mjs +11 -16
  147. package/src/utils/build-info.mjs +65 -66
  148. package/src/utils/command-helpers.mjs +185 -199
  149. package/src/utils/create-deferred.mjs +9 -12
  150. package/src/utils/create-stream-promise.mjs +54 -47
  151. package/src/utils/deploy/constants.mjs +9 -11
  152. package/src/utils/deploy/deploy-site.mjs +162 -182
  153. package/src/utils/deploy/hash-config.mjs +21 -21
  154. package/src/utils/deploy/hash-files.mjs +34 -38
  155. package/src/utils/deploy/hash-fns.mjs +149 -154
  156. package/src/utils/deploy/hasher-segments.mjs +58 -52
  157. package/src/utils/deploy/upload-files.mjs +99 -113
  158. package/src/utils/deploy/util.mjs +85 -91
  159. package/src/utils/detect-server-settings.mjs +236 -268
  160. package/src/utils/dev.mjs +163 -178
  161. package/src/utils/dot-env.mjs +37 -42
  162. package/src/utils/env/index.mjs +148 -148
  163. package/src/utils/execa.mjs +9 -13
  164. package/src/utils/feature-flags.mjs +6 -5
  165. package/src/utils/framework-server.mjs +43 -52
  166. package/src/utils/functions/constants.mjs +1 -1
  167. package/src/utils/functions/functions.mjs +30 -40
  168. package/src/utils/functions/get-functions.mjs +28 -29
  169. package/src/utils/functions/index.mjs +3 -3
  170. package/src/utils/get-global-config.mjs +33 -36
  171. package/src/utils/get-package-json.mjs +14 -15
  172. package/src/utils/get-repo-data.mjs +54 -64
  173. package/src/utils/get-site.mjs +14 -14
  174. package/src/utils/gh-auth.mjs +79 -100
  175. package/src/utils/gitignore.mjs +37 -40
  176. package/src/utils/headers.mjs +33 -35
  177. package/src/utils/hooks/requires-site-info.mjs +26 -22
  178. package/src/utils/init/config-github.mjs +207 -219
  179. package/src/utils/init/config-manual.mjs +83 -100
  180. package/src/utils/init/config.mjs +25 -26
  181. package/src/utils/init/node-version.mjs +23 -30
  182. package/src/utils/init/plugins.mjs +12 -8
  183. package/src/utils/init/utils.mjs +152 -172
  184. package/src/utils/live-tunnel.mjs +118 -141
  185. package/src/utils/lm/install.mjs +220 -259
  186. package/src/utils/lm/requirements.mjs +54 -63
  187. package/src/utils/lm/steps.mjs +31 -31
  188. package/src/utils/lm/ui.mjs +13 -20
  189. package/src/utils/open-browser.mjs +31 -32
  190. package/src/utils/parse-raw-flags.mjs +39 -35
  191. package/src/utils/proxy-server.mjs +84 -71
  192. package/src/utils/proxy.mjs +696 -750
  193. package/src/utils/read-repo-url.mjs +48 -47
  194. package/src/utils/redirects.mjs +49 -49
  195. package/src/utils/request-id.mjs +2 -4
  196. package/src/utils/rules-proxy.mjs +96 -100
  197. package/src/utils/run-build.mjs +109 -132
  198. package/src/utils/shell.mjs +99 -106
  199. package/src/utils/sign-redirect.mjs +14 -14
  200. package/src/utils/sites/utils.mjs +48 -55
  201. package/src/utils/state-config.mjs +101 -101
  202. package/src/utils/static-server.mjs +28 -34
  203. package/src/utils/telemetry/index.mjs +2 -2
  204. package/src/utils/telemetry/report-error.mjs +45 -49
  205. package/src/utils/telemetry/request.mjs +36 -43
  206. package/src/utils/telemetry/telemetry.mjs +90 -105
  207. package/src/utils/telemetry/utils.mjs +5 -6
  208. package/src/utils/telemetry/validation.mjs +55 -53
  209. package/src/utils/types.d.ts +46 -0
  210. package/src/utils/validation.mjs +10 -13
@@ -1,251 +1,229 @@
1
- // @ts-check
2
-
3
- import inquirer from 'inquirer'
4
- import pick from 'lodash/pick.js'
5
- import parseGitHubUrl from 'parse-github-url'
6
- import { render } from 'prettyjson'
7
-
8
- import { chalk, error, getTerminalLink, log, logJson, warn } from '../../utils/command-helpers.mjs'
9
- import execa from '../../utils/execa.mjs'
10
- import getRepoData from '../../utils/get-repo-data.mjs'
11
- import { getGitHubToken } from '../../utils/init/config-github.mjs'
12
- import { configureRepo } from '../../utils/init/config.mjs'
13
- import { createRepo, getTemplatesFromGitHub, validateTemplate } from '../../utils/sites/utils.mjs'
14
- import { track } from '../../utils/telemetry/index.mjs'
15
-
16
- import { getSiteNameInput } from './sites-create.mjs'
17
-
1
+ import inquirer from 'inquirer';
2
+ import pick from 'lodash/pick.js';
3
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'pars... Remove this comment to see the full error message
4
+ import parseGitHubUrl from 'parse-github-url';
5
+ import { render } from 'prettyjson';
6
+ import { chalk, error, getTerminalLink, log, logJson, warn } from '../../utils/command-helpers.mjs';
7
+ // @ts-expect-error TS(7034) FIXME: Variable 'execa' implicitly has type 'any' in some... Remove this comment to see the full error message
8
+ import execa from '../../utils/execa.mjs';
9
+ import getRepoData from '../../utils/get-repo-data.mjs';
10
+ import { getGitHubToken } from '../../utils/init/config-github.mjs';
11
+ import { configureRepo } from '../../utils/init/config.mjs';
12
+ import { createRepo, getTemplatesFromGitHub, validateTemplate } from '../../utils/sites/utils.mjs';
13
+ import { track } from '../../utils/telemetry/index.mjs';
14
+ import { getSiteNameInput } from './sites-create.mjs';
15
+ // @ts-expect-error TS(7006) FIXME: Parameter 'token' implicitly has an 'any' type.
18
16
  export const fetchTemplates = async (token) => {
19
- const templatesFromGithubOrg = await getTemplatesFromGitHub(token)
20
-
21
- return templatesFromGithubOrg
22
- .filter((repo) => !repo.archived && !repo.disabled)
23
- .map((template) => ({
24
- name: template.name,
25
- sourceCodeUrl: template.html_url,
26
- slug: template.full_name,
27
- }))
28
- }
29
-
30
- const getTemplateName = async ({ ghToken, options, repository }) => {
31
- if (repository) {
32
- const { repo } = parseGitHubUrl(repository)
33
- return repo || `netlify-templates/${repository}`
34
- }
35
-
36
- if (options.url) {
37
- const urlFromOptions = new URL(options.url)
38
- return urlFromOptions.pathname.slice(1)
39
- }
40
-
41
- const templates = await fetchTemplates(ghToken)
42
-
43
- log(`Choose one of our starter templates. Netlify will create a new repo for this template in your GitHub account.`)
44
-
45
- const { templateName } = await inquirer.prompt([
46
- {
47
- type: 'list',
48
- name: 'templateName',
49
- message: 'Template:',
50
- choices: templates.map((template) => ({
51
- value: template.slug,
17
+ const templatesFromGithubOrg = await getTemplatesFromGitHub(token);
18
+ return templatesFromGithubOrg
19
+ // @ts-expect-error TS(7006) FIXME: Parameter 'repo' implicitly has an 'any' type.
20
+ .filter((repo) => !repo.archived && !repo.disabled)
21
+ // @ts-expect-error TS(7006) FIXME: Parameter 'template' implicitly has an 'any' type.
22
+ .map((template) => ({
52
23
  name: template.name,
53
- })),
54
- },
55
- ])
56
-
57
- return templateName
58
- }
59
-
60
- const getGitHubLink = ({ options, templateName }) => options.url || `https://github.com/${templateName}`
61
-
24
+ sourceCodeUrl: template.html_url,
25
+ slug: template.full_name,
26
+ }));
27
+ };
28
+ // @ts-expect-error TS(7031) FIXME: Binding element 'ghToken' implicitly has an 'any' ... Remove this comment to see the full error message
29
+ const getTemplateName = async ({ ghToken, options, repository }) => {
30
+ if (repository) {
31
+ const { repo } = parseGitHubUrl(repository);
32
+ return repo || `netlify-templates/${repository}`;
33
+ }
34
+ if (options.url) {
35
+ const urlFromOptions = new URL(options.url);
36
+ return urlFromOptions.pathname.slice(1);
37
+ }
38
+ const templates = await fetchTemplates(ghToken);
39
+ log(`Choose one of our starter templates. Netlify will create a new repo for this template in your GitHub account.`);
40
+ const { templateName } = await inquirer.prompt([
41
+ {
42
+ type: 'list',
43
+ name: 'templateName',
44
+ message: 'Template:',
45
+ // @ts-expect-error TS(7006) FIXME: Parameter 'template' implicitly has an 'any' type.
46
+ choices: templates.map((template) => ({
47
+ value: template.slug,
48
+ name: template.name,
49
+ })),
50
+ },
51
+ ]);
52
+ return templateName;
53
+ };
54
+ // @ts-expect-error TS(7031) FIXME: Binding element 'options' implicitly has an 'any' ... Remove this comment to see the full error message
55
+ const getGitHubLink = ({ options, templateName }) => options.url || `https://github.com/${templateName}`;
62
56
  /**
63
57
  * The sites:create-template command
64
58
  * @param repository {string}
65
59
  * @param {import('commander').OptionValues} options
66
60
  * @param {import('../base-command.mjs').default} command
67
61
  */
62
+ // @ts-expect-error TS(7006) FIXME: Parameter 'repository' implicitly has an 'any' typ... Remove this comment to see the full error message
68
63
  const sitesCreateTemplate = async (repository, options, command) => {
69
- const { api } = command.netlify
70
-
71
- await command.authenticate()
72
-
73
- const { globalConfig } = command.netlify
74
- const ghToken = await getGitHubToken({ globalConfig })
75
-
76
- const templateName = await getTemplateName({ ghToken, options, repository })
77
- const { exists, isTemplate } = await validateTemplate({ templateName, ghToken })
78
- if (!exists) {
79
- const githubLink = getGitHubLink({ options, templateName })
80
- error(
81
- `Could not find template ${chalk.bold(templateName)}. Please verify it exists and you can ${getTerminalLink(
82
- 'access to it on GitHub',
83
- githubLink,
84
- )}`,
85
- )
86
- return
87
- }
88
- if (!isTemplate) {
89
- const githubLink = getGitHubLink({ options, templateName })
90
- error(`${getTerminalLink(chalk.bold(templateName), githubLink)} is not a valid GitHub template`)
91
- return
92
- }
93
-
94
- const accounts = await api.listAccountsForUser()
95
-
96
- let { accountSlug } = options
97
-
98
- if (!accountSlug) {
99
- const { accountSlug: accountSlugInput } = await inquirer.prompt([
100
- {
101
- type: 'list',
102
- name: 'accountSlug',
103
- message: 'Team:',
104
- choices: accounts.map((account) => ({
105
- value: account.slug,
106
- name: account.name,
107
- })),
108
- },
109
- ])
110
- accountSlug = accountSlugInput
111
- }
112
-
113
- const { name: nameFlag } = options
114
- let site
115
- let repoResp
116
-
117
- // Allow the user to reenter site name if selected one isn't available
118
- const inputSiteName = async (name) => {
119
- const { name: inputName } = await getSiteNameInput(name)
120
-
121
- try {
122
- const siteName = inputName.trim()
123
-
124
- // Create new repo from template
125
- repoResp = await createRepo(templateName, ghToken, siteName || templateName)
126
-
127
- if (repoResp.errors) {
128
- if (repoResp.errors[0].includes('Name already exists on this account')) {
129
- warn(
130
- `Oh no! We found already a repository with this name. It seems you have already created a template with the name ${templateName}. Please try to run the command again and provide a different name.`,
131
- )
132
- await inputSiteName()
133
- } else {
134
- throw new Error(
135
- `Oops! Seems like something went wrong trying to create the repository. We're getting the following error: '${repoResp.errors[0]}'. You can try to re-run this command again or open an issue in our repository: https://github.com/netlify/cli/issues`,
136
- )
137
- }
138
- } else {
139
- site = await api.createSiteInTeam({
140
- accountSlug,
141
- body: {
142
- repo: {
143
- provider: 'github',
144
- repo: repoResp.full_name,
145
- private: repoResp.private,
146
- branch: repoResp.default_branch,
64
+ const { api } = command.netlify;
65
+ await command.authenticate();
66
+ const { globalConfig } = command.netlify;
67
+ const ghToken = await getGitHubToken({ globalConfig });
68
+ const templateName = await getTemplateName({ ghToken, options, repository });
69
+ const { exists, isTemplate } = await validateTemplate({ templateName, ghToken });
70
+ if (!exists) {
71
+ const githubLink = getGitHubLink({ options, templateName });
72
+ error(`Could not find template ${chalk.bold(templateName)}. Please verify it exists and you can ${getTerminalLink('access to it on GitHub', githubLink)}`);
73
+ return;
74
+ }
75
+ if (!isTemplate) {
76
+ const githubLink = getGitHubLink({ options, templateName });
77
+ error(`${getTerminalLink(chalk.bold(templateName), githubLink)} is not a valid GitHub template`);
78
+ return;
79
+ }
80
+ const accounts = await api.listAccountsForUser();
81
+ let { accountSlug } = options;
82
+ if (!accountSlug) {
83
+ const { accountSlug: accountSlugInput } = await inquirer.prompt([
84
+ {
85
+ type: 'list',
86
+ name: 'accountSlug',
87
+ message: 'Team:',
88
+ // @ts-expect-error TS(7006) FIXME: Parameter 'account' implicitly has an 'any' type.
89
+ choices: accounts.map((account) => ({
90
+ value: account.slug,
91
+ name: account.name,
92
+ })),
147
93
  },
148
- name: siteName,
149
- },
150
- })
151
- }
152
- } catch (error_) {
153
- if (error_.status === 422 || error_.message === 'Duplicate repo') {
154
- warn(
155
- `${name}.netlify.app already exists or a repository named ${name} already exists on this account. Please try a different slug.`,
156
- )
157
- await inputSiteName()
158
- } else {
159
- error(`createSiteInTeam error: ${error_.status}: ${error_.message}`)
160
- }
94
+ ]);
95
+ accountSlug = accountSlugInput;
96
+ }
97
+ const { name: nameFlag } = options;
98
+ let site;
99
+ let repoResp;
100
+ // Allow the user to reenter site name if selected one isn't available
101
+ // @ts-expect-error TS(7006) FIXME: Parameter 'name' implicitly has an 'any' type.
102
+ const inputSiteName = async (name) => {
103
+ const { name: inputName } = await getSiteNameInput(name);
104
+ try {
105
+ const siteName = inputName.trim();
106
+ // Create new repo from template
107
+ repoResp = await createRepo(templateName, ghToken, siteName || templateName);
108
+ if (repoResp.errors) {
109
+ if (repoResp.errors[0].includes('Name already exists on this account')) {
110
+ warn(`Oh no! We found already a repository with this name. It seems you have already created a template with the name ${templateName}. Please try to run the command again and provide a different name.`);
111
+ // @ts-expect-error TS(2554) FIXME: Expected 1 arguments, but got 0.
112
+ await inputSiteName();
113
+ }
114
+ else {
115
+ throw new Error(`Oops! Seems like something went wrong trying to create the repository. We're getting the following error: '${repoResp.errors[0]}'. You can try to re-run this command again or open an issue in our repository: https://github.com/netlify/cli/issues`);
116
+ }
117
+ }
118
+ else {
119
+ site = await api.createSiteInTeam({
120
+ accountSlug,
121
+ body: {
122
+ repo: {
123
+ provider: 'github',
124
+ repo: repoResp.full_name,
125
+ private: repoResp.private,
126
+ branch: repoResp.default_branch,
127
+ },
128
+ name: siteName,
129
+ },
130
+ });
131
+ }
132
+ }
133
+ catch (error_) {
134
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
135
+ if (error_.status === 422 || error_.message === 'Duplicate repo') {
136
+ warn(`${name}.netlify.app already exists or a repository named ${name} already exists on this account. Please try a different slug.`);
137
+ // @ts-expect-error TS(2554) FIXME: Expected 1 arguments, but got 0.
138
+ await inputSiteName();
139
+ }
140
+ else {
141
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
142
+ error(`createSiteInTeam error: ${error_.status}: ${error_.message}`);
143
+ }
144
+ }
145
+ };
146
+ await inputSiteName(nameFlag);
147
+ log();
148
+ log(chalk.greenBright.bold.underline(`Site Created`));
149
+ log();
150
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
151
+ const siteUrl = site.ssl_url || site.url;
152
+ log(render({
153
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
154
+ 'Admin URL': site.admin_url,
155
+ URL: siteUrl,
156
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
157
+ 'Site ID': site.id,
158
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
159
+ 'Repo URL': site.build_settings.repo_url,
160
+ }));
161
+ track('sites_createdFromTemplate', {
162
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
163
+ siteId: site.id,
164
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
165
+ adminUrl: site.admin_url,
166
+ siteUrl,
167
+ });
168
+ const { cloneConfirm } = await inquirer.prompt({
169
+ type: 'confirm',
170
+ name: 'cloneConfirm',
171
+ message: `Do you want to clone the repository?`,
172
+ default: true,
173
+ });
174
+ if (cloneConfirm) {
175
+ log();
176
+ // @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
177
+ await execa('git', ['clone', repoResp.clone_url, `${repoResp.name}`]);
178
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
179
+ log(`🚀 Repository cloned successfully. You can find it under the ${chalk.magenta(repoResp.name)} folder`);
180
+ }
181
+ if (options.withCi) {
182
+ log('Configuring CI');
183
+ // @ts-expect-error TS(2345) FIXME: Argument of type '{ workingDir: any; }' is not ass... Remove this comment to see the full error message
184
+ const repoData = await getRepoData({ workingDir: command.workingDir });
185
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
186
+ await configureRepo({ command, siteId: site.id, repoData, manual: options.manual });
187
+ }
188
+ if (options.json) {
189
+ logJson(pick(site, [
190
+ 'id',
191
+ 'state',
192
+ 'plan',
193
+ 'name',
194
+ 'custom_domain',
195
+ 'domain_aliases',
196
+ 'url',
197
+ 'ssl_url',
198
+ 'admin_url',
199
+ 'screenshot_url',
200
+ 'created_at',
201
+ 'updated_at',
202
+ 'user_id',
203
+ 'ssl',
204
+ 'force_ssl',
205
+ 'managed_dns',
206
+ 'deploy_url',
207
+ 'account_name',
208
+ 'account_slug',
209
+ 'git_provider',
210
+ 'deploy_hook',
211
+ 'capabilities',
212
+ 'id_domain',
213
+ ]));
161
214
  }
162
- }
163
-
164
- await inputSiteName(nameFlag)
165
-
166
- log()
167
- log(chalk.greenBright.bold.underline(`Site Created`))
168
- log()
169
-
170
- const siteUrl = site.ssl_url || site.url
171
- log(
172
- render({
173
- 'Admin URL': site.admin_url,
174
- URL: siteUrl,
175
- 'Site ID': site.id,
176
- 'Repo URL': site.build_settings.repo_url,
177
- }),
178
- )
179
-
180
- track('sites_createdFromTemplate', {
181
- siteId: site.id,
182
- adminUrl: site.admin_url,
183
- siteUrl,
184
- })
185
-
186
- const { cloneConfirm } = await inquirer.prompt({
187
- type: 'confirm',
188
- name: 'cloneConfirm',
189
- message: `Do you want to clone the repository?`,
190
- default: true,
191
- })
192
- if (cloneConfirm) {
193
- log()
194
- await execa('git', ['clone', repoResp.clone_url, `${repoResp.name}`])
195
- log(`🚀 Repository cloned successfully. You can find it under the ${chalk.magenta(repoResp.name)} folder`)
196
- }
197
-
198
- if (options.withCi) {
199
- log('Configuring CI')
200
- const repoData = await getRepoData({ workingDir: command.workingDir })
201
- await configureRepo({ command, siteId: site.id, repoData, manual: options.manual })
202
- }
203
-
204
- if (options.json) {
205
- logJson(
206
- pick(site, [
207
- 'id',
208
- 'state',
209
- 'plan',
210
- 'name',
211
- 'custom_domain',
212
- 'domain_aliases',
213
- 'url',
214
- 'ssl_url',
215
- 'admin_url',
216
- 'screenshot_url',
217
- 'created_at',
218
- 'updated_at',
219
- 'user_id',
220
- 'ssl',
221
- 'force_ssl',
222
- 'managed_dns',
223
- 'deploy_url',
224
- 'account_name',
225
- 'account_slug',
226
- 'git_provider',
227
- 'deploy_hook',
228
- 'capabilities',
229
- 'id_domain',
230
- ]),
231
- )
232
- }
233
-
234
- return site
235
- }
236
-
215
+ return site;
216
+ };
237
217
  /**
238
218
  * Creates the `netlify sites:create-template` command
239
219
  * @param {import('../base-command.mjs').default} program
240
220
  * @returns
241
221
  */
242
- export const createSitesFromTemplateCommand = (program) =>
243
- program
222
+ // @ts-expect-error TS(7006) FIXME: Parameter 'program' implicitly has an 'any' type.
223
+ export const createSitesFromTemplateCommand = (program) => program
244
224
  .command('sites:create-template')
245
- .description(
246
- `(Beta) Create a site from a starter template
247
- Create a site from a starter template.`,
248
- )
225
+ .description(`(Beta) Create a site from a starter template
226
+ Create a site from a starter template.`)
249
227
  .option('-n, --name [name]', 'name of site')
250
228
  .option('-u, --url [url]', 'template url')
251
229
  .option('-a, --account-slug [slug]', 'account slug to create the site under')
@@ -253,8 +231,8 @@ Create a site from a starter template.`,
253
231
  .argument('[repository]', 'repository to use as starter template')
254
232
  .addHelpText('after', `(Beta) Create a site from starter template.`)
255
233
  .addExamples([
256
- 'netlify sites:create-template',
257
- 'netlify sites:create-template nextjs-blog-theme',
258
- 'netlify sites:create-template my-github-profile/my-template',
259
- ])
260
- .action(sitesCreateTemplate)
234
+ 'netlify sites:create-template',
235
+ 'netlify sites:create-template nextjs-blog-theme',
236
+ 'netlify sites:create-template my-github-profile/my-template',
237
+ ])
238
+ .action(sitesCreateTemplate);