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,97 +1,86 @@
1
- // @ts-check
2
- import { dirname, join } from 'path'
3
- import process, { version as nodejsVersion } from 'process'
4
- import { fileURLToPath } from 'url'
5
-
6
- import { isCI } from 'ci-info'
7
-
8
- import execa from '../execa.mjs'
9
- import getGlobalConfig from '../get-global-config.mjs'
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
- const requestFile = join(dirPath, 'request.mjs')
22
- const options = JSON.stringify({
23
- data: payload,
24
- type,
25
- })
26
-
27
- const args = /** @type {const} */ ([process.execPath, [requestFile, options]])
28
- if (process.env.NETLIFY_TEST_TELEMETRY_WAIT === 'true') {
29
- return execa(...args, {
30
- stdio: 'inherit',
31
- })
32
- }
33
-
34
- // spawn detached child process to handle send
35
- execa(...args, {
36
- detached: true,
37
- stdio: 'ignore',
38
- }).unref()
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
- // Namespace of current application
43
- projectName: 'cli',
44
- // Allowed objects
45
- objects: [
46
- // example cli:sites_created
47
- 'sites',
48
- // example cli:user_signup
49
- 'user',
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
- if (isCI) {
60
- return
61
- }
62
-
63
- const globalConfig = await getGlobalConfig()
64
- if (isTelemetryDisabled(globalConfig)) {
65
- return
66
- }
67
-
68
- const [userId, cliId] = [globalConfig.get('userId'), globalConfig.get('cliId')]
69
-
70
- // automatically add `cli:` prefix if missing
71
- if (!eventName.includes('cli:')) {
72
- eventName = `cli:${eventName}`
73
- }
74
-
75
- // event 'cli:command' bypasses validation
76
- const isValid = eventName === 'cli:command' ? () => true : isValidEventName
77
- // to ensure clean data, validate event name
78
- if (!isValid(eventName, eventConfig)) {
79
- return false
80
- }
81
-
82
- const { duration, status, ...properties } = payload
83
- const defaultData = {
84
- event: eventName,
85
- userId,
86
- anonymousId: cliId,
87
- duration,
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
- if (isCI) {
104
- return
105
- }
106
-
107
- const globalConfig = await getGlobalConfig()
108
- if (isTelemetryDisabled(globalConfig)) {
109
- return
110
- }
111
-
112
- const cliId = globalConfig.get('cliId')
113
- const { email, name, userId } = payload
114
-
115
- const defaultTraits = {
116
- name,
117
- email,
118
- cliId,
119
- }
120
-
121
- const identifyData = {
122
- anonymousId: cliId,
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
- export const { version: cliVersion } = await getPackageJson()
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
- return config.get('telemetryDisabled')
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
- 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
- return formattingWarning(eventName)
12
- }
13
- const [, project, object, action] = matches
14
- let error
15
- // if missing any parts of event, exit
16
- if (!project || !object || !action) {
17
- return formattingWarning(eventName)
18
- }
19
- // validate project name
20
- if (!validProject.includes(project)) {
21
- error = `> "${project}" is invalid tracking project. Must be one of ${JSON.stringify(validProject)}`
22
- return formattingWarning(eventName, error)
23
- }
24
- // validate object name
25
- if (!validObjects.includes(object)) {
26
- error = `> "${object}" is invalid tracking object. Must be one of ${JSON.stringify(validObjects)}`
27
- return formattingWarning(eventName, error)
28
- }
29
- return true
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
- const underscores = (eventName.match(/_/g) || []).length
34
- if (underscores !== 1) {
35
- log(`Event name must have single underscore. "${eventName}" contains ${underscores}`)
36
- return false
37
- }
38
- const colons = (eventName.match(/:/g) || []).length
39
- if (colons !== 1) {
40
- log(`Event name must have single colon. "${eventName}" contains ${colons}`)
41
- return false
42
- }
43
- return true
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
- log('-----------------------------')
48
- log('Tracking Error:')
49
- log(`Incorrect tracking event format: "${eventName}"`)
50
- if (errorMsg) {
51
- log(errorMsg)
52
- }
53
- log('-----------------------------')
54
- log(`Formatting information: `)
55
- log(`eventName must match 'cli:objectName_actionName'`)
56
- log(`eventName must be camelCased: 'camelCase:camelCase_camelCase'`)
57
- log(`Example: cli:sites_deploySucceeded`)
58
- log('-----------------------------')
59
- return false
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
+ }
@@ -1,19 +1,16 @@
1
- // @ts-check
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
- // Validate that the arg passed is two letters only for country
10
- // See https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
11
- if (!/^[a-z]{2}$/i.test(arg)) {
12
- throw new Error(
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
- return arg.toUpperCase()
19
- }
13
+ ${exampleCommand}`);
14
+ }
15
+ return arg.toUpperCase();
16
+ };