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,58 +1,51 @@
1
- import fetch from 'node-fetch'
2
-
1
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'node... Remove this comment to see the full error message
2
+ import fetch from 'node-fetch';
3
+ // @ts-expect-error TS(7006) FIXME: Parameter 'token' implicitly has an 'any' type.
3
4
  export const getTemplatesFromGitHub = async (token) => {
4
- const getPublicGitHubReposFromOrg = new URL(`https://api.github.com/orgs/netlify-templates/repos`)
5
- // GitHub returns 30 by default and we want to avoid our limit
6
- // due to our archived repositories at any given time
7
- const REPOS_PER_PAGE = 70
8
-
9
- getPublicGitHubReposFromOrg.searchParams.set('type', 'public')
10
- getPublicGitHubReposFromOrg.searchParams.set('sort', 'full_name')
11
- getPublicGitHubReposFromOrg.searchParams.set('per_page', REPOS_PER_PAGE)
12
-
13
- const templates = await fetch(getPublicGitHubReposFromOrg, {
14
- method: 'GET',
15
- headers: {
16
- Authorization: `token ${token}`,
17
- },
18
- })
19
- const allTemplates = await templates.json()
20
-
21
- return allTemplates
22
- }
23
-
5
+ const getPublicGitHubReposFromOrg = new URL(`https://api.github.com/orgs/netlify-templates/repos`);
6
+ // GitHub returns 30 by default and we want to avoid our limit
7
+ // due to our archived repositories at any given time
8
+ const REPOS_PER_PAGE = 70;
9
+ getPublicGitHubReposFromOrg.searchParams.set('type', 'public');
10
+ getPublicGitHubReposFromOrg.searchParams.set('sort', 'full_name');
11
+ // @ts-expect-error TS(2345) FIXME: Argument of type 'number' is not assignable to par... Remove this comment to see the full error message
12
+ getPublicGitHubReposFromOrg.searchParams.set('per_page', REPOS_PER_PAGE);
13
+ const templates = await fetch(getPublicGitHubReposFromOrg, {
14
+ method: 'GET',
15
+ headers: {
16
+ Authorization: `token ${token}`,
17
+ },
18
+ });
19
+ const allTemplates = await templates.json();
20
+ return allTemplates;
21
+ };
22
+ // @ts-expect-error TS(7031) FIXME: Binding element 'ghToken' implicitly has an 'any' ... Remove this comment to see the full error message
24
23
  export const validateTemplate = async ({ ghToken, templateName }) => {
25
- const response = await fetch(`https://api.github.com/repos/${templateName}`, {
26
- headers: {
27
- Authorization: `token ${ghToken}`,
28
- },
29
- })
30
-
31
- if (response.status === 404) {
32
- return { exists: false }
33
- }
34
-
35
- if (!response.ok) {
36
- throw new Error(`Error fetching template ${templateName}: ${await response.text()}`)
37
- }
38
-
39
- const data = await response.json()
40
-
41
- return { exists: true, isTemplate: data.is_template }
42
- }
43
-
24
+ const response = await fetch(`https://api.github.com/repos/${templateName}`, {
25
+ headers: {
26
+ Authorization: `token ${ghToken}`,
27
+ },
28
+ });
29
+ if (response.status === 404) {
30
+ return { exists: false };
31
+ }
32
+ if (!response.ok) {
33
+ throw new Error(`Error fetching template ${templateName}: ${await response.text()}`);
34
+ }
35
+ const data = await response.json();
36
+ return { exists: true, isTemplate: data.is_template };
37
+ };
38
+ // @ts-expect-error TS(7006) FIXME: Parameter 'templateName' implicitly has an 'any' t... Remove this comment to see the full error message
44
39
  export const createRepo = async (templateName, ghToken, siteName) => {
45
- const resp = await fetch(`https://api.github.com/repos/${templateName}/generate`, {
46
- method: 'POST',
47
- headers: {
48
- Authorization: `token ${ghToken}`,
49
- },
50
- body: JSON.stringify({
51
- name: siteName,
52
- }),
53
- })
54
-
55
- const data = await resp.json()
56
-
57
- return data
58
- }
40
+ const resp = await fetch(`https://api.github.com/repos/${templateName}/generate`, {
41
+ method: 'POST',
42
+ headers: {
43
+ Authorization: `token ${ghToken}`,
44
+ },
45
+ body: JSON.stringify({
46
+ name: siteName,
47
+ }),
48
+ });
49
+ const data = await resp.json();
50
+ return data;
51
+ };
@@ -1,113 +1,113 @@
1
- import fs from 'fs'
2
- import path from 'path'
3
- import process from 'process'
4
-
5
- import { deleteProperty, getProperty, hasProperty, setProperty } from 'dot-prop'
6
- import { findUpSync } from 'find-up'
7
- import writeFileAtomic from 'write-file-atomic'
8
-
9
- import { getPathInProject } from '../lib/settings.mjs'
10
-
11
- const STATE_PATH = getPathInProject(['state.json'])
12
- const permissionError = "You don't have access to this file."
13
-
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import process from 'process';
4
+ import { deleteProperty, getProperty, hasProperty, setProperty } from 'dot-prop';
5
+ import { findUpSync } from 'find-up';
6
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'writ... Remove this comment to see the full error message
7
+ import writeFileAtomic from 'write-file-atomic';
8
+ import { getPathInProject } from '../lib/settings.mjs';
9
+ const STATE_PATH = getPathInProject(['state.json']);
10
+ const permissionError = "You don't have access to this file.";
14
11
  /**
15
12
  * Finds location of `.netlify/state.json`
16
13
  * @param {string} cwd
17
14
  * @returns {string}
18
15
  */
16
+ // @ts-expect-error TS(7006) FIXME: Parameter 'cwd' implicitly has an 'any' type.
19
17
  const findStatePath = (cwd) => {
20
- const statePath = findUpSync([STATE_PATH], { cwd })
21
-
22
- if (!statePath) {
23
- return path.join(cwd, STATE_PATH)
24
- }
25
-
26
- return statePath
27
- }
28
-
18
+ const statePath = findUpSync([STATE_PATH], { cwd });
19
+ if (!statePath) {
20
+ return path.join(cwd, STATE_PATH);
21
+ }
22
+ return statePath;
23
+ };
29
24
  export default class StateConfig {
30
- constructor(cwd) {
31
- this.path = findStatePath(cwd)
32
- }
33
-
34
- get all() {
35
- try {
36
- return JSON.parse(fs.readFileSync(this.path))
37
- } catch (error) {
38
- // Don't create if it doesn't exist
39
- if (error.code === 'ENOENT' || error.code === 'ENOTDIR') {
40
- return {}
41
- }
42
-
43
- // Improve the message of permission errors
44
- if (error.code === 'EACCES') {
45
- error.message = `${error.message}\n${permissionError}\n`
46
- }
47
-
48
- // Empty the file if it encounters invalid JSON
49
- if (error.name === 'SyntaxError') {
50
- writeFileAtomic.sync(this.path, '')
51
- return {}
52
- }
53
-
54
- throw error
25
+ // @ts-expect-error TS(7006) FIXME: Parameter 'cwd' implicitly has an 'any' type.
26
+ constructor(cwd) {
27
+ // @ts-expect-error TS(2339) FIXME: Property 'path' does not exist on type 'StateConfi... Remove this comment to see the full error message
28
+ this.path = findStatePath(cwd);
29
+ }
30
+ get all() {
31
+ try {
32
+ // @ts-expect-error TS(2345) FIXME: Argument of type 'Buffer' is not assignable to par... Remove this comment to see the full error message
33
+ return JSON.parse(fs.readFileSync(this.path));
34
+ }
35
+ catch (error) {
36
+ // Don't create if it doesn't exist
37
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
38
+ if (error.code === 'ENOENT' || error.code === 'ENOTDIR') {
39
+ return {};
40
+ }
41
+ // Improve the message of permission errors
42
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
43
+ if (error.code === 'EACCES') {
44
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
45
+ error.message = `${error.message}\n${permissionError}\n`;
46
+ }
47
+ // Empty the file if it encounters invalid JSON
48
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
49
+ if (error.name === 'SyntaxError') {
50
+ // @ts-expect-error TS(2339) FIXME: Property 'path' does not exist on type 'StateConfi... Remove this comment to see the full error message
51
+ writeFileAtomic.sync(this.path, '');
52
+ return {};
53
+ }
54
+ throw error;
55
+ }
56
+ }
57
+ set all(val) {
58
+ try {
59
+ // Make sure the folder exists as it could have been deleted in the meantime
60
+ // @ts-expect-error TS(2339) FIXME: Property 'path' does not exist on type 'StateConfi... Remove this comment to see the full error message
61
+ fs.mkdirSync(path.dirname(this.path), { recursive: true });
62
+ // @ts-expect-error TS(2339) FIXME: Property 'path' does not exist on type 'StateConfi... Remove this comment to see the full error message
63
+ writeFileAtomic.sync(this.path, JSON.stringify(val, null, '\t'));
64
+ }
65
+ catch (error) {
66
+ // Improve the message of permission errors
67
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
68
+ if (error.code === 'EACCES') {
69
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
70
+ error.message = `${error.message}\n${permissionError}\n`;
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+ get size() {
76
+ return Object.keys(this.all || {}).length;
77
+ }
78
+ // @ts-expect-error TS(7006) FIXME: Parameter 'key' implicitly has an 'any' type.
79
+ get(key) {
80
+ if (key === 'siteId' && process.env.NETLIFY_SITE_ID) {
81
+ // TODO figure out cleaner way of grabbing ENV vars
82
+ return process.env.NETLIFY_SITE_ID;
83
+ }
84
+ return getProperty(this.all, key);
85
+ }
86
+ // @ts-expect-error TS(7019) FIXME: Rest parameter 'args' implicitly has an 'any[]' ty... Remove this comment to see the full error message
87
+ set(...args) {
88
+ const [key, val] = args;
89
+ const config = this.all;
90
+ if (args.length === 1) {
91
+ Object.entries(key).forEach(([keyPart, value]) => {
92
+ setProperty(config, keyPart, value);
93
+ });
94
+ }
95
+ else {
96
+ setProperty(config, key, val);
97
+ }
98
+ this.all = config;
55
99
  }
56
- }
57
-
58
- set all(val) {
59
- try {
60
- // Make sure the folder exists as it could have been deleted in the meantime
61
- fs.mkdirSync(path.dirname(this.path), { recursive: true })
62
- writeFileAtomic.sync(this.path, JSON.stringify(val, null, '\t'))
63
- } catch (error) {
64
- // Improve the message of permission errors
65
- if (error.code === 'EACCES') {
66
- error.message = `${error.message}\n${permissionError}\n`
67
- }
68
-
69
- throw error
100
+ // @ts-expect-error TS(7006) FIXME: Parameter 'key' implicitly has an 'any' type.
101
+ has(key) {
102
+ return hasProperty(this.all, key);
70
103
  }
71
- }
72
-
73
- get size() {
74
- return Object.keys(this.all || {}).length
75
- }
76
-
77
- get(key) {
78
- if (key === 'siteId' && process.env.NETLIFY_SITE_ID) {
79
- // TODO figure out cleaner way of grabbing ENV vars
80
- return process.env.NETLIFY_SITE_ID
104
+ // @ts-expect-error TS(7006) FIXME: Parameter 'key' implicitly has an 'any' type.
105
+ delete(key) {
106
+ const config = this.all;
107
+ deleteProperty(config, key);
108
+ this.all = config;
81
109
  }
82
- return getProperty(this.all, key)
83
- }
84
-
85
- set(...args) {
86
- const [key, val] = args
87
- const config = this.all
88
-
89
- if (args.length === 1) {
90
- Object.entries(key).forEach(([keyPart, value]) => {
91
- setProperty(config, keyPart, value)
92
- })
93
- } else {
94
- setProperty(config, key, val)
110
+ clear() {
111
+ this.all = {};
95
112
  }
96
-
97
- this.all = config
98
- }
99
-
100
- has(key) {
101
- return hasProperty(this.all, key)
102
- }
103
-
104
- delete(key) {
105
- const config = this.all
106
- deleteProperty(config, key)
107
- this.all = config
108
- }
109
-
110
- clear() {
111
- this.all = {}
112
- }
113
113
  }
@@ -1,39 +1,33 @@
1
- // @ts-check
2
- import path from 'path'
3
-
4
- import fastifyStatic from '@fastify/static'
5
- import Fastify from 'fastify'
6
-
7
- import { log, NETLIFYDEVLOG } from './command-helpers.mjs'
8
-
1
+ import path from 'path';
2
+ import fastifyStatic from '@fastify/static';
3
+ import Fastify from 'fastify';
4
+ import { log, NETLIFYDEVLOG } from './command-helpers.mjs';
9
5
  /**
10
6
  * @param {object} config
11
7
  * @param {import('./types.js').ServerSettings} config.settings
12
8
  */
9
+ // @ts-expect-error TS(7031) FIXME: Binding element 'settings' implicitly has an 'any'... Remove this comment to see the full error message
13
10
  export const startStaticServer = async ({ settings }) => {
14
- const server = Fastify()
15
- const rootPath = path.resolve(settings.dist)
16
- server.register(fastifyStatic, {
17
- root: rootPath,
18
- etag: false,
19
- acceptRanges: false,
20
- lastModified: false,
21
- })
22
-
23
- server.setNotFoundHandler((_req, res) => {
24
- res.code(404).sendFile('404.html', rootPath)
25
- })
26
-
27
- server.addHook('onRequest', (req, reply, done) => {
28
- reply.header('age', '0')
29
- reply.header('cache-control', 'public, max-age=0, must-revalidate')
30
- const validMethods = ['GET', 'HEAD']
31
- if (!validMethods.includes(req.method)) {
32
- reply.code(405).send('Method Not Allowed')
33
- }
34
- done()
35
- })
36
-
37
- await server.listen({ port: settings.frameworkPort })
38
- log(`\n${NETLIFYDEVLOG} Static server listening to`, settings.frameworkPort)
39
- }
11
+ const server = Fastify();
12
+ const rootPath = path.resolve(settings.dist);
13
+ server.register(fastifyStatic, {
14
+ root: rootPath,
15
+ etag: false,
16
+ acceptRanges: false,
17
+ lastModified: false,
18
+ });
19
+ server.setNotFoundHandler((_req, res) => {
20
+ res.code(404).sendFile('404.html', rootPath);
21
+ });
22
+ server.addHook('onRequest', (req, reply, done) => {
23
+ reply.header('age', '0');
24
+ reply.header('cache-control', 'public, max-age=0, must-revalidate');
25
+ const validMethods = ['GET', 'HEAD'];
26
+ if (!validMethods.includes(req.method)) {
27
+ reply.code(405).send('Method Not Allowed');
28
+ }
29
+ done();
30
+ });
31
+ await server.listen({ port: settings.frameworkPort });
32
+ log(`\n${NETLIFYDEVLOG} Static server listening to`, settings.frameworkPort);
33
+ };
@@ -1,2 +1,2 @@
1
- export { track, identify } from './telemetry.mjs'
2
- export { reportError } from './report-error.mjs'
1
+ export { track, identify } from './telemetry.mjs';
2
+ export { reportError } from './report-error.mjs';
@@ -1,17 +1,13 @@
1
- import os from 'os'
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 { cliVersion } from './utils.mjs'
12
-
13
- const dirPath = dirname(fileURLToPath(import.meta.url))
14
-
1
+ import os from 'os';
2
+ import { dirname, join } from 'path';
3
+ import process, { version as nodejsVersion } from 'process';
4
+ import { fileURLToPath } from 'url';
5
+ import { isCI } from 'ci-info';
6
+ // @ts-expect-error TS(7034) FIXME: Variable 'execa' implicitly has type 'any' in some... Remove this comment to see the full error message
7
+ import execa from '../execa.mjs';
8
+ import getGlobalConfig from '../get-global-config.mjs';
9
+ import { cliVersion } from './utils.mjs';
10
+ const dirPath = dirname(fileURLToPath(import.meta.url));
15
11
  /**
16
12
  *
17
13
  * @param {import('@bugsnag/js').NotifiableError} error
@@ -20,39 +16,39 @@ const dirPath = dirname(fileURLToPath(import.meta.url))
20
16
  * @param {Record<string, Record<string, any>>} [config.metadata]
21
17
  * @returns {Promise<void>}
22
18
  */
19
+ // @ts-expect-error TS(7006) FIXME: Parameter 'error' implicitly has an 'any' type.
23
20
  export const reportError = async function (error, config = {}) {
24
- if (isCI) {
25
- return
26
- }
27
-
28
- // convert a NotifiableError to an error class
29
- // eslint-disable-next-line unicorn/no-nested-ternary
30
- const err = error instanceof Error ? error : typeof error === 'string' ? new Error(error) : error
31
-
32
- const globalConfig = await getGlobalConfig()
33
-
34
- const options = JSON.stringify({
35
- type: 'error',
36
- data: {
37
- message: err.message,
38
- name: err.name,
39
- stack: err.stack,
40
- cause: err.cause,
41
- severity: config.severity,
42
- user: {
43
- id: globalConfig.get('userId'),
44
- },
45
- metadata: config.metadata,
46
- osName: `${os.platform()}-${os.arch()}`,
47
- cliVersion,
48
- nodejsVersion,
49
- },
50
- })
51
-
52
- // spawn detached child process to handle send and wait for the http request to finish
53
- // otherwise it can get canceled
54
- await execa(process.execPath, [join(dirPath, 'request.mjs'), options], {
55
- detached: true,
56
- stdio: 'ignore',
57
- })
58
- }
21
+ if (isCI) {
22
+ return;
23
+ }
24
+ // convert a NotifiableError to an error class
25
+ // eslint-disable-next-line unicorn/no-nested-ternary
26
+ const err = error instanceof Error ? error : typeof error === 'string' ? new Error(error) : error;
27
+ const globalConfig = await getGlobalConfig();
28
+ const options = JSON.stringify({
29
+ type: 'error',
30
+ data: {
31
+ message: err.message,
32
+ name: err.name,
33
+ stack: err.stack,
34
+ cause: err.cause,
35
+ // @ts-expect-error TS(2339) FIXME: Property 'severity' does not exist on type '{}'.
36
+ severity: config.severity,
37
+ user: {
38
+ id: globalConfig.get('userId'),
39
+ },
40
+ // @ts-expect-error TS(2339) FIXME: Property 'metadata' does not exist on type '{}'.
41
+ metadata: config.metadata,
42
+ osName: `${os.platform()}-${os.arch()}`,
43
+ cliVersion,
44
+ nodejsVersion,
45
+ },
46
+ });
47
+ // spawn detached child process to handle send and wait for the http request to finish
48
+ // otherwise it can get canceled
49
+ // @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
50
+ await execa(process.execPath, [join(dirPath, 'request.mjs'), options], {
51
+ detached: true,
52
+ stdio: 'ignore',
53
+ });
54
+ };
@@ -1,48 +1,41 @@
1
- // @ts-check
2
1
  // This file is being called by `src/utils/telemetry/telemetry.js` as a child process
3
2
  // to run a s a detached process
4
- import process from 'process'
5
-
6
- import fetch from 'node-fetch'
7
-
8
- import getPackageJson from '../get-package-json.mjs'
9
-
10
- const { name, version } = await getPackageJson()
11
-
12
- const options = JSON.parse(process.argv[2])
13
-
14
- const CLIENT_ID = 'NETLIFY_CLI'
15
- const TRACK_URL = process.env.NETLIFY_TEST_TRACK_URL || 'https://cli.netlify.com/telemetry/track'
16
- const IDENTIFY_URL = process.env.NETLIFY_TEST_IDENTIFY_URL || 'https://cli.netlify.com/telemetry/identify'
17
- const REPORT_ERROR_URL = process.env.NETLIFY_TEST_ERROR_REPORT_URL || 'https://cli.netlify.com/report-error'
18
-
3
+ import process from 'process';
4
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'node... Remove this comment to see the full error message
5
+ import fetch from 'node-fetch';
6
+ import getPackageJson from '../get-package-json.mjs';
7
+ const { name, version } = await getPackageJson();
8
+ const options = JSON.parse(process.argv[2]);
9
+ const CLIENT_ID = 'NETLIFY_CLI';
10
+ const TRACK_URL = process.env.NETLIFY_TEST_TRACK_URL || 'https://cli.netlify.com/telemetry/track';
11
+ const IDENTIFY_URL = process.env.NETLIFY_TEST_IDENTIFY_URL || 'https://cli.netlify.com/telemetry/identify';
12
+ const REPORT_ERROR_URL = process.env.NETLIFY_TEST_ERROR_REPORT_URL || 'https://cli.netlify.com/report-error';
19
13
  const getApiUrl = () => {
20
- switch (options.type) {
21
- case 'track':
22
- return TRACK_URL
23
- case 'error':
24
- return REPORT_ERROR_URL
25
- default:
26
- return IDENTIFY_URL
27
- }
28
- }
29
-
14
+ switch (options.type) {
15
+ case 'track':
16
+ return TRACK_URL;
17
+ case 'error':
18
+ return REPORT_ERROR_URL;
19
+ default:
20
+ return IDENTIFY_URL;
21
+ }
22
+ };
30
23
  // Make telemetry call
31
24
  const makeRequest = async function () {
32
- try {
33
- await fetch(getApiUrl(), {
34
- method: 'POST',
35
- headers: {
36
- 'Content-Type': 'application/json',
37
- 'X-Netlify-Client': CLIENT_ID,
38
- 'User-Agent': `${name}/${version}`,
39
- },
40
- body: JSON.stringify(options.data),
41
- })
42
- process.exit()
43
- } catch {
44
- process.exit(1)
45
- }
46
- }
47
-
48
- makeRequest()
25
+ try {
26
+ await fetch(getApiUrl(), {
27
+ method: 'POST',
28
+ headers: {
29
+ 'Content-Type': 'application/json',
30
+ 'X-Netlify-Client': CLIENT_ID,
31
+ 'User-Agent': `${name}/${version}`,
32
+ },
33
+ body: JSON.stringify(options.data),
34
+ });
35
+ process.exit();
36
+ }
37
+ catch {
38
+ process.exit(1);
39
+ }
40
+ };
41
+ makeRequest();