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.
- package/README.md +3 -139
- package/npm-shrinkwrap.json +82 -82
- package/package.json +16 -15
- package/src/commands/addons/addons-auth.mjs +27 -30
- package/src/commands/addons/addons-config.mjs +145 -154
- package/src/commands/addons/addons-create.mjs +94 -108
- package/src/commands/addons/addons-delete.mjs +36 -41
- package/src/commands/addons/addons-list.mjs +38 -42
- package/src/commands/addons/addons.mjs +26 -28
- package/src/commands/addons/index.mjs +1 -1
- package/src/commands/api/api.mjs +45 -53
- package/src/commands/api/index.mjs +1 -1
- package/src/commands/base-command.mjs +597 -684
- package/src/commands/blobs/blobs-delete.mjs +35 -0
- package/src/commands/blobs/blobs-get.mjs +44 -0
- package/src/commands/blobs/blobs-list.mjs +48 -0
- package/src/commands/blobs/blobs-set.mjs +54 -0
- package/src/commands/blobs/blobs.mjs +32 -0
- package/src/commands/blobs/index.mjs +1 -0
- package/src/commands/build/build.mjs +55 -67
- package/src/commands/build/index.mjs +1 -1
- package/src/commands/completion/completion.mjs +41 -46
- package/src/commands/completion/index.mjs +1 -1
- package/src/commands/deploy/deploy.mjs +675 -710
- package/src/commands/deploy/index.mjs +1 -1
- package/src/commands/dev/dev-exec.mjs +20 -32
- package/src/commands/dev/dev.mjs +217 -302
- package/src/commands/dev/index.mjs +1 -1
- package/src/commands/dev/types.d.ts +30 -0
- package/src/commands/env/env-clone.mjs +157 -184
- package/src/commands/env/env-get.mjs +49 -68
- package/src/commands/env/env-import.mjs +100 -119
- package/src/commands/env/env-list.mjs +104 -129
- package/src/commands/env/env-set.mjs +160 -185
- package/src/commands/env/env-unset.mjs +104 -122
- package/src/commands/env/env.mjs +28 -30
- package/src/commands/env/index.mjs +1 -1
- package/src/commands/functions/functions-build.mjs +29 -41
- package/src/commands/functions/functions-create.mjs +533 -601
- package/src/commands/functions/functions-invoke.mjs +193 -216
- package/src/commands/functions/functions-list.mjs +45 -55
- package/src/commands/functions/functions-serve.mjs +51 -61
- package/src/commands/functions/functions.mjs +26 -32
- package/src/commands/functions/index.mjs +1 -1
- package/src/commands/index.mjs +2 -2
- package/src/commands/init/index.mjs +1 -1
- package/src/commands/init/init.mjs +138 -167
- package/src/commands/integration/deploy.mjs +337 -399
- package/src/commands/integration/index.mjs +12 -13
- package/src/commands/link/index.mjs +1 -1
- package/src/commands/link/link.mjs +298 -317
- package/src/commands/lm/index.mjs +1 -1
- package/src/commands/lm/lm-info.mjs +23 -31
- package/src/commands/lm/lm-install.mjs +13 -17
- package/src/commands/lm/lm-setup.mjs +80 -84
- package/src/commands/lm/lm-uninstall.mjs +7 -12
- package/src/commands/lm/lm.mjs +18 -22
- package/src/commands/login/index.mjs +1 -1
- package/src/commands/login/login.mjs +35 -41
- package/src/commands/logout/index.mjs +1 -1
- package/src/commands/logout/logout.mjs +25 -31
- package/src/commands/main.mjs +166 -201
- package/src/commands/open/index.mjs +1 -1
- package/src/commands/open/open-admin.mjs +15 -18
- package/src/commands/open/open-site.mjs +16 -19
- package/src/commands/open/open.mjs +24 -27
- package/src/commands/recipes/common.mjs +23 -34
- package/src/commands/recipes/index.mjs +1 -1
- package/src/commands/recipes/recipes-list.mjs +13 -20
- package/src/commands/recipes/recipes.mjs +59 -72
- package/src/commands/serve/index.mjs +1 -1
- package/src/commands/serve/serve.mjs +142 -189
- package/src/commands/sites/index.mjs +2 -2
- package/src/commands/sites/sites-create-template.mjs +214 -236
- package/src/commands/sites/sites-create.mjs +145 -157
- package/src/commands/sites/sites-delete.mjs +75 -81
- package/src/commands/sites/sites-list.mjs +63 -66
- package/src/commands/sites/sites.mjs +18 -20
- package/src/commands/status/index.mjs +1 -1
- package/src/commands/status/status-hooks.mjs +32 -34
- package/src/commands/status/status.mjs +99 -106
- package/src/commands/switch/index.mjs +1 -1
- package/src/commands/switch/switch.mjs +32 -37
- package/src/commands/types.d.ts +31 -0
- package/src/commands/unlink/index.mjs +1 -1
- package/src/commands/unlink/unlink.mjs +23 -29
- package/src/commands/watch/index.mjs +1 -1
- package/src/commands/watch/watch.mjs +91 -105
- package/src/functions-templates/javascript/hello/{{name}}.js +2 -3
- package/src/lib/account.mjs +4 -5
- package/src/lib/api.mjs +22 -20
- package/src/lib/blobs/blobs.mjs +36 -45
- package/src/lib/build.mjs +82 -85
- package/src/lib/completion/constants.mjs +2 -4
- package/src/lib/completion/generate-autocompletion.mjs +33 -36
- package/src/lib/completion/get-autocompletion.mjs +31 -35
- package/src/lib/completion/index.mjs +1 -1
- package/src/lib/completion/script.mjs +12 -19
- package/src/lib/edge-functions/bootstrap.mjs +3 -5
- package/src/lib/edge-functions/consts.mjs +9 -10
- package/src/lib/edge-functions/deploy.mjs +28 -34
- package/src/lib/edge-functions/editor-helper.mjs +29 -42
- package/src/lib/edge-functions/headers.mjs +24 -26
- package/src/lib/edge-functions/internal.mjs +38 -44
- package/src/lib/edge-functions/proxy.mjs +229 -228
- package/src/lib/edge-functions/registry.mjs +473 -574
- package/src/lib/exec-fetcher.mjs +115 -122
- package/src/lib/fs.mjs +28 -27
- package/src/lib/functions/background.mjs +16 -20
- package/src/lib/functions/config.mjs +12 -9
- package/src/lib/functions/form-submissions-handler.mjs +143 -149
- package/src/lib/functions/local-proxy.mjs +40 -44
- package/src/lib/functions/memoized-build.mjs +19 -21
- package/src/lib/functions/netlify-function.mjs +269 -249
- package/src/lib/functions/registry.mjs +509 -568
- package/src/lib/functions/runtimes/go/index.mjs +62 -71
- package/src/lib/functions/runtimes/index.mjs +8 -15
- package/src/lib/functions/runtimes/js/builders/netlify-lambda.mjs +55 -64
- package/src/lib/functions/runtimes/js/builders/zisi.mjs +135 -154
- package/src/lib/functions/runtimes/js/constants.mjs +1 -1
- package/src/lib/functions/runtimes/js/index.mjs +92 -109
- package/src/lib/functions/runtimes/js/worker.mjs +43 -45
- package/src/lib/functions/runtimes/rust/index.mjs +64 -73
- package/src/lib/functions/scheduled.mjs +70 -88
- package/src/lib/functions/server.mjs +269 -327
- package/src/lib/functions/synchronous.mjs +118 -147
- package/src/lib/functions/utils.mjs +38 -46
- package/src/lib/geo-location.mjs +69 -81
- package/src/lib/http-agent.mjs +87 -90
- package/src/lib/images/proxy.mjs +97 -89
- package/src/lib/log.mjs +6 -9
- package/src/lib/path.mjs +2 -1
- package/src/lib/render-error-template.mjs +19 -20
- package/src/lib/settings.mjs +17 -19
- package/src/lib/spinner.mjs +21 -23
- package/src/lib/string.mjs +4 -2
- package/src/recipes/vscode/index.mjs +69 -85
- package/src/recipes/vscode/settings.mjs +53 -58
- package/src/utils/addons/compare.mjs +31 -32
- package/src/utils/addons/diffs/index.mjs +16 -17
- package/src/utils/addons/diffs/options.mjs +99 -101
- package/src/utils/addons/prepare.mjs +100 -97
- package/src/utils/addons/prompts.mjs +73 -76
- package/src/utils/addons/render.mjs +33 -36
- package/src/utils/addons/validation.mjs +19 -15
- package/src/utils/banner.mjs +11 -16
- package/src/utils/build-info.mjs +65 -66
- package/src/utils/command-helpers.mjs +185 -199
- package/src/utils/create-deferred.mjs +9 -12
- package/src/utils/create-stream-promise.mjs +54 -47
- package/src/utils/deploy/constants.mjs +9 -11
- package/src/utils/deploy/deploy-site.mjs +162 -182
- package/src/utils/deploy/hash-config.mjs +21 -21
- package/src/utils/deploy/hash-files.mjs +34 -38
- package/src/utils/deploy/hash-fns.mjs +149 -154
- package/src/utils/deploy/hasher-segments.mjs +58 -52
- package/src/utils/deploy/upload-files.mjs +99 -113
- package/src/utils/deploy/util.mjs +85 -91
- package/src/utils/detect-server-settings.mjs +236 -268
- package/src/utils/dev.mjs +163 -178
- package/src/utils/dot-env.mjs +37 -42
- package/src/utils/env/index.mjs +148 -148
- package/src/utils/execa.mjs +9 -13
- package/src/utils/feature-flags.mjs +6 -5
- package/src/utils/framework-server.mjs +43 -52
- package/src/utils/functions/constants.mjs +1 -1
- package/src/utils/functions/functions.mjs +30 -40
- package/src/utils/functions/get-functions.mjs +28 -29
- package/src/utils/functions/index.mjs +3 -3
- package/src/utils/get-global-config.mjs +33 -36
- package/src/utils/get-package-json.mjs +14 -15
- package/src/utils/get-repo-data.mjs +54 -64
- package/src/utils/get-site.mjs +14 -14
- package/src/utils/gh-auth.mjs +79 -100
- package/src/utils/gitignore.mjs +37 -40
- package/src/utils/headers.mjs +33 -35
- package/src/utils/hooks/requires-site-info.mjs +26 -22
- package/src/utils/init/config-github.mjs +207 -219
- package/src/utils/init/config-manual.mjs +83 -100
- package/src/utils/init/config.mjs +25 -26
- package/src/utils/init/node-version.mjs +23 -30
- package/src/utils/init/plugins.mjs +12 -8
- package/src/utils/init/utils.mjs +152 -172
- package/src/utils/live-tunnel.mjs +118 -141
- package/src/utils/lm/install.mjs +220 -259
- package/src/utils/lm/requirements.mjs +54 -63
- package/src/utils/lm/steps.mjs +31 -31
- package/src/utils/lm/ui.mjs +13 -20
- package/src/utils/open-browser.mjs +31 -32
- package/src/utils/parse-raw-flags.mjs +39 -35
- package/src/utils/proxy-server.mjs +84 -71
- package/src/utils/proxy.mjs +696 -750
- package/src/utils/read-repo-url.mjs +48 -47
- package/src/utils/redirects.mjs +49 -49
- package/src/utils/request-id.mjs +2 -4
- package/src/utils/rules-proxy.mjs +96 -100
- package/src/utils/run-build.mjs +109 -132
- package/src/utils/shell.mjs +99 -106
- package/src/utils/sign-redirect.mjs +14 -14
- package/src/utils/sites/utils.mjs +48 -55
- package/src/utils/state-config.mjs +101 -101
- package/src/utils/static-server.mjs +28 -34
- package/src/utils/telemetry/index.mjs +2 -2
- package/src/utils/telemetry/report-error.mjs +45 -49
- package/src/utils/telemetry/request.mjs +36 -43
- package/src/utils/telemetry/telemetry.mjs +90 -105
- package/src/utils/telemetry/utils.mjs +5 -6
- package/src/utils/telemetry/validation.mjs +55 -53
- package/src/utils/types.d.ts +46 -0
- package/src/utils/validation.mjs +10 -13
|
@@ -1,251 +1,229 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
await
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
243
|
-
|
|
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
|
-
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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);
|