netlify-cli 17.3.2 → 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 +2 -138
- package/npm-shrinkwrap.json +76 -76
- 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 -99
- 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,97 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
import { isTelemetryDisabled, cliVersion } from './utils.mjs'
|
|
12
|
-
import isValidEventName from './validation.mjs'
|
|
13
|
-
|
|
14
|
-
const dirPath = dirname(fileURLToPath(import.meta.url))
|
|
15
|
-
|
|
1
|
+
import { dirname, join } from 'path';
|
|
2
|
+
import process, { version as nodejsVersion } from 'process';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { isCI } from 'ci-info';
|
|
5
|
+
// @ts-expect-error TS(7034) FIXME: Variable 'execa' implicitly has type 'any' in some... Remove this comment to see the full error message
|
|
6
|
+
import execa from '../execa.mjs';
|
|
7
|
+
import getGlobalConfig from '../get-global-config.mjs';
|
|
8
|
+
import { isTelemetryDisabled, cliVersion } from './utils.mjs';
|
|
9
|
+
import isValidEventName from './validation.mjs';
|
|
10
|
+
const dirPath = dirname(fileURLToPath(import.meta.url));
|
|
16
11
|
/**
|
|
17
12
|
* @param {'track' | 'identify'} type
|
|
18
13
|
* @param {object} payload
|
|
19
14
|
*/
|
|
15
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'type' implicitly has an 'any' type.
|
|
20
16
|
function send(type, payload) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
17
|
+
const requestFile = join(dirPath, 'request.mjs');
|
|
18
|
+
const options = JSON.stringify({
|
|
19
|
+
data: payload,
|
|
20
|
+
type,
|
|
21
|
+
});
|
|
22
|
+
const args = /** @type {const} */ ([process.execPath, [requestFile, options]]);
|
|
23
|
+
if (process.env.NETLIFY_TEST_TELEMETRY_WAIT === 'true') {
|
|
24
|
+
// @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
|
|
25
|
+
return execa(...args, {
|
|
26
|
+
stdio: 'inherit',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// spawn detached child process to handle send
|
|
30
|
+
// @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
|
|
31
|
+
execa(...args, {
|
|
32
|
+
detached: true,
|
|
33
|
+
stdio: 'ignore',
|
|
34
|
+
}).unref();
|
|
39
35
|
}
|
|
40
|
-
|
|
41
36
|
const eventConfig = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
37
|
+
// Namespace of current application
|
|
38
|
+
projectName: 'cli',
|
|
39
|
+
// Allowed objects
|
|
40
|
+
objects: [
|
|
41
|
+
// example cli:sites_created
|
|
42
|
+
'sites',
|
|
43
|
+
// example cli:user_signup
|
|
44
|
+
'user',
|
|
45
|
+
],
|
|
46
|
+
};
|
|
53
47
|
/**
|
|
54
48
|
* Tracks a custom event with the provided payload
|
|
55
49
|
* @param {string} eventName
|
|
56
50
|
* @param {{status?: string, duration?: number, [key: string]: unknown}} [payload]
|
|
57
51
|
*/
|
|
52
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'eventName' implicitly has an 'any' type... Remove this comment to see the full error message
|
|
58
53
|
export async function track(eventName, payload = {}) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
status,
|
|
89
|
-
properties: { ...properties, nodejsVersion, cliVersion },
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return send('track', defaultData)
|
|
54
|
+
if (isCI) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const globalConfig = await getGlobalConfig();
|
|
58
|
+
if (isTelemetryDisabled(globalConfig)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const [userId, cliId] = [globalConfig.get('userId'), globalConfig.get('cliId')];
|
|
62
|
+
// automatically add `cli:` prefix if missing
|
|
63
|
+
if (!eventName.includes('cli:')) {
|
|
64
|
+
eventName = `cli:${eventName}`;
|
|
65
|
+
}
|
|
66
|
+
// event 'cli:command' bypasses validation
|
|
67
|
+
const isValid = eventName === 'cli:command' ? () => true : isValidEventName;
|
|
68
|
+
// to ensure clean data, validate event name
|
|
69
|
+
if (!isValid(eventName, eventConfig)) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
// @ts-expect-error TS(2339) FIXME: Property 'duration' does not exist on type '{}'.
|
|
73
|
+
const { duration, status, ...properties } = payload;
|
|
74
|
+
const defaultData = {
|
|
75
|
+
event: eventName,
|
|
76
|
+
userId,
|
|
77
|
+
anonymousId: cliId,
|
|
78
|
+
duration,
|
|
79
|
+
status,
|
|
80
|
+
properties: { ...properties, nodejsVersion, cliVersion },
|
|
81
|
+
};
|
|
82
|
+
return send('track', defaultData);
|
|
93
83
|
}
|
|
94
|
-
|
|
95
84
|
/**
|
|
96
85
|
* @param {object} payload
|
|
97
86
|
* @param {string} payload.name
|
|
@@ -99,30 +88,26 @@ export async function track(eventName, payload = {}) {
|
|
|
99
88
|
* @param {string} payload.userId
|
|
100
89
|
* @returns
|
|
101
90
|
*/
|
|
91
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'payload' implicitly has an 'any' type.
|
|
102
92
|
export async function identify(payload) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
userId,
|
|
124
|
-
traits: { ...defaultTraits, ...payload },
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return send('identify', identifyData)
|
|
93
|
+
if (isCI) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const globalConfig = await getGlobalConfig();
|
|
97
|
+
if (isTelemetryDisabled(globalConfig)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const cliId = globalConfig.get('cliId');
|
|
101
|
+
const { email, name, userId } = payload;
|
|
102
|
+
const defaultTraits = {
|
|
103
|
+
name,
|
|
104
|
+
email,
|
|
105
|
+
cliId,
|
|
106
|
+
};
|
|
107
|
+
const identifyData = {
|
|
108
|
+
anonymousId: cliId,
|
|
109
|
+
userId,
|
|
110
|
+
traits: { ...defaultTraits, ...payload },
|
|
111
|
+
};
|
|
112
|
+
return send('identify', identifyData);
|
|
128
113
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import getPackageJson from '../get-package-json.mjs'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import getPackageJson from '../get-package-json.mjs';
|
|
2
|
+
export const { version: cliVersion } = await getPackageJson();
|
|
3
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'config' implicitly has an 'any' type.
|
|
5
4
|
export const isTelemetryDisabled = function (config) {
|
|
6
|
-
|
|
7
|
-
}
|
|
5
|
+
return config.get('telemetryDisabled');
|
|
6
|
+
};
|
|
@@ -1,60 +1,62 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility to validating analytic event names for clean data
|
|
3
3
|
*/
|
|
4
|
-
import { log } from '../command-helpers.mjs'
|
|
5
|
-
|
|
4
|
+
import { log } from '../command-helpers.mjs';
|
|
5
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'eventName' implicitly has an 'any' type... Remove this comment to see the full error message
|
|
6
6
|
export default function isValidEventName(eventName, config) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
7
|
+
const validProject = [config.projectName];
|
|
8
|
+
const validObjects = config.objects || [];
|
|
9
|
+
const matches = eventName.match(/([a-zA-Z]*):([a-zA-Z]*)_([a-zA-Z]*$)/);
|
|
10
|
+
if (!containsSeparators(eventName) || !matches) {
|
|
11
|
+
// @ts-expect-error TS(2554) FIXME: Expected 2 arguments, but got 1.
|
|
12
|
+
return formattingWarning(eventName);
|
|
13
|
+
}
|
|
14
|
+
const [, project, object, action] = matches;
|
|
15
|
+
let error;
|
|
16
|
+
// if missing any parts of event, exit
|
|
17
|
+
if (!project || !object || !action) {
|
|
18
|
+
// @ts-expect-error TS(2554) FIXME: Expected 2 arguments, but got 1.
|
|
19
|
+
return formattingWarning(eventName);
|
|
20
|
+
}
|
|
21
|
+
// validate project name
|
|
22
|
+
if (!validProject.includes(project)) {
|
|
23
|
+
error = `> "${project}" is invalid tracking project. Must be one of ${JSON.stringify(validProject)}`;
|
|
24
|
+
return formattingWarning(eventName, error);
|
|
25
|
+
}
|
|
26
|
+
// validate object name
|
|
27
|
+
if (!validObjects.includes(object)) {
|
|
28
|
+
error = `> "${object}" is invalid tracking object. Must be one of ${JSON.stringify(validObjects)}`;
|
|
29
|
+
return formattingWarning(eventName, error);
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
30
32
|
}
|
|
31
|
-
|
|
33
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'eventName' implicitly has an 'any' type... Remove this comment to see the full error message
|
|
32
34
|
const containsSeparators = function (eventName) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
35
|
+
const underscores = (eventName.match(/_/g) || []).length;
|
|
36
|
+
if (underscores !== 1) {
|
|
37
|
+
log(`Event name must have single underscore. "${eventName}" contains ${underscores}`);
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const colons = (eventName.match(/:/g) || []).length;
|
|
41
|
+
if (colons !== 1) {
|
|
42
|
+
log(`Event name must have single colon. "${eventName}" contains ${colons}`);
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
};
|
|
47
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'eventName' implicitly has an 'any' type... Remove this comment to see the full error message
|
|
46
48
|
const formattingWarning = function (eventName, errorMsg) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
49
|
+
log('-----------------------------');
|
|
50
|
+
log('Tracking Error:');
|
|
51
|
+
log(`Incorrect tracking event format: "${eventName}"`);
|
|
52
|
+
if (errorMsg) {
|
|
53
|
+
log(errorMsg);
|
|
54
|
+
}
|
|
55
|
+
log('-----------------------------');
|
|
56
|
+
log(`Formatting information: `);
|
|
57
|
+
log(`eventName must match 'cli:objectName_actionName'`);
|
|
58
|
+
log(`eventName must be camelCased: 'camelCase:camelCase_camelCase'`);
|
|
59
|
+
log(`Example: cli:sites_deploySucceeded`);
|
|
60
|
+
log('-----------------------------');
|
|
61
|
+
return false;
|
|
62
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type FrameworkNames = '#static' | '#auto' | '#custom' | string
|
|
2
|
+
|
|
3
|
+
export type FrameworkInfo = {
|
|
4
|
+
build: {
|
|
5
|
+
directory: string
|
|
6
|
+
}
|
|
7
|
+
dev: {
|
|
8
|
+
commands: string[]
|
|
9
|
+
port: number
|
|
10
|
+
pollingStrategies: { name: string }[]
|
|
11
|
+
}
|
|
12
|
+
name: FrameworkNames
|
|
13
|
+
staticAssetsDirectory: string
|
|
14
|
+
env: NodeJS.ProcessEnv
|
|
15
|
+
plugins?: string[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type BaseServerSettings = {
|
|
19
|
+
baseDirectory?: string
|
|
20
|
+
dist?: string
|
|
21
|
+
/** The command that was provided for the dev config */
|
|
22
|
+
command?: string
|
|
23
|
+
/** If it should be served like static files */
|
|
24
|
+
useStaticServer?: boolean
|
|
25
|
+
|
|
26
|
+
/** A port where a proxy can listen to it */
|
|
27
|
+
frameworkPort?: number
|
|
28
|
+
/** The host where a proxy can listen to it */
|
|
29
|
+
frameworkHost?: '127.0.0.1' | '::1'
|
|
30
|
+
functions?: string
|
|
31
|
+
/** The framework name ('Create React App') */
|
|
32
|
+
framework?: string
|
|
33
|
+
env?: NodeJS.ProcessEnv
|
|
34
|
+
pollingStrategies?: string[]
|
|
35
|
+
plugins?: string[]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type ServerSettings = BaseServerSettings & {
|
|
39
|
+
/** default 'secret' */
|
|
40
|
+
jwtSecret: string
|
|
41
|
+
/** default 'app_metadata.authorization.roles' */
|
|
42
|
+
jwtRolePath: string
|
|
43
|
+
/** The port where the functions are running on */
|
|
44
|
+
port: number
|
|
45
|
+
https?: { key: string; cert: string; keyFilePath: string; certFilePath: string }
|
|
46
|
+
}
|
package/src/utils/validation.mjs
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
import { BANG, chalk } from './command-helpers.mjs'
|
|
3
|
-
|
|
1
|
+
import { BANG, chalk } from './command-helpers.mjs';
|
|
4
2
|
/**
|
|
5
3
|
* @param {string} exampleCommand
|
|
6
4
|
* @returns {(value:string, previous: unknown) => unknown}
|
|
7
5
|
*/
|
|
6
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'exampleCommand' implicitly has an 'any'... Remove this comment to see the full error message
|
|
8
7
|
export const getGeoCountryArgParser = (exampleCommand) => (arg) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
`The geo country code must use a two letter abbreviation.
|
|
8
|
+
// Validate that the arg passed is two letters only for country
|
|
9
|
+
// See https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
|
|
10
|
+
if (!/^[a-z]{2}$/i.test(arg)) {
|
|
11
|
+
throw new Error(`The geo country code must use a two letter abbreviation.
|
|
14
12
|
${chalk.red(BANG)} Example:
|
|
15
|
-
${exampleCommand}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
13
|
+
${exampleCommand}`);
|
|
14
|
+
}
|
|
15
|
+
return arg.toUpperCase();
|
|
16
|
+
};
|