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.
Files changed (210) hide show
  1. package/README.md +2 -138
  2. package/npm-shrinkwrap.json +76 -76
  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 -99
  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
package/src/utils/dev.mjs CHANGED
@@ -1,92 +1,88 @@
1
- // @ts-check
2
- import process from 'process'
3
-
4
- import getPort from 'get-port'
5
- import isEmpty from 'lodash/isEmpty.js'
6
-
7
- import { supportsBackgroundFunctions } from '../lib/account.mjs'
8
-
9
- import { NETLIFYDEVLOG, chalk, error, log, warn } from './command-helpers.mjs'
10
- import { loadDotEnvFiles } from './dot-env.mjs'
11
-
1
+ import process from 'process';
2
+ import getPort from 'get-port';
3
+ import isEmpty from 'lodash/isEmpty.js';
4
+ import { supportsBackgroundFunctions } from '../lib/account.mjs';
5
+ import { NETLIFYDEVLOG, chalk, error, log, warn } from './command-helpers.mjs';
6
+ import { loadDotEnvFiles } from './dot-env.mjs';
12
7
  // Possible sources of environment variables. For the purpose of printing log messages only. Order does not matter.
13
8
  const ENV_VAR_SOURCES = {
14
- account: {
15
- name: 'shared',
16
- printFn: chalk.magenta,
17
- },
18
- addons: {
19
- name: 'addon',
20
- printFn: chalk.yellow,
21
- },
22
- configFile: {
23
- name: 'netlify.toml file',
24
- printFn: chalk.green,
25
- },
26
- general: {
27
- name: 'general context',
28
- printFn: chalk.italic,
29
- },
30
- process: {
31
- name: 'process',
32
- printFn: chalk.red,
33
- },
34
- ui: {
35
- name: 'site settings',
36
- printFn: chalk.blue,
37
- },
38
- }
39
-
40
- const ERROR_CALL_TO_ACTION =
41
- "Double-check your login status with 'netlify status' or contact support with details of your error."
42
-
9
+ account: {
10
+ name: 'shared',
11
+ printFn: chalk.magenta,
12
+ },
13
+ addons: {
14
+ name: 'addon',
15
+ printFn: chalk.yellow,
16
+ },
17
+ configFile: {
18
+ name: 'netlify.toml file',
19
+ printFn: chalk.green,
20
+ },
21
+ general: {
22
+ name: 'general context',
23
+ printFn: chalk.italic,
24
+ },
25
+ process: {
26
+ name: 'process',
27
+ printFn: chalk.red,
28
+ },
29
+ ui: {
30
+ name: 'site settings',
31
+ printFn: chalk.blue,
32
+ },
33
+ };
34
+ const ERROR_CALL_TO_ACTION = "Double-check your login status with 'netlify status' or contact support with details of your error.";
35
+ // @ts-expect-error TS(7031) FIXME: Binding element 'site' implicitly has an 'any' typ... Remove this comment to see the full error message
43
36
  const validateSiteInfo = ({ site, siteInfo }) => {
44
- if (isEmpty(siteInfo)) {
45
- error(`Failed retrieving site information for site ${chalk.yellow(site.id)}. ${ERROR_CALL_TO_ACTION}`)
46
- }
47
- }
48
-
37
+ if (isEmpty(siteInfo)) {
38
+ error(`Failed retrieving site information for site ${chalk.yellow(site.id)}. ${ERROR_CALL_TO_ACTION}`);
39
+ }
40
+ };
41
+ // @ts-expect-error TS(7031) FIXME: Binding element 'api' implicitly has an 'any' type... Remove this comment to see the full error message
49
42
  const getAccounts = async ({ api }) => {
50
- try {
51
- const accounts = await api.listAccountsForUser()
52
- return accounts
53
- } catch (error_) {
54
- error(`Failed retrieving user account: ${error_.message}. ${ERROR_CALL_TO_ACTION}`)
55
- }
56
- }
57
-
43
+ try {
44
+ const accounts = await api.listAccountsForUser();
45
+ return accounts;
46
+ }
47
+ catch (error_) {
48
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
49
+ error(`Failed retrieving user account: ${error_.message}. ${ERROR_CALL_TO_ACTION}`);
50
+ }
51
+ };
52
+ // @ts-expect-error TS(7031) FIXME: Binding element 'api' implicitly has an 'any' type... Remove this comment to see the full error message
58
53
  const getAddons = async ({ api, site }) => {
59
- try {
60
- const addons = await api.listServiceInstancesForSite({ siteId: site.id })
61
- return addons
62
- } catch (error_) {
63
- error(`Failed retrieving addons for site ${chalk.yellow(site.id)}: ${error_.message}. ${ERROR_CALL_TO_ACTION}`)
64
- }
65
- }
66
-
54
+ try {
55
+ const addons = await api.listServiceInstancesForSite({ siteId: site.id });
56
+ return addons;
57
+ }
58
+ catch (error_) {
59
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
60
+ error(`Failed retrieving addons for site ${chalk.yellow(site.id)}: ${error_.message}. ${ERROR_CALL_TO_ACTION}`);
61
+ }
62
+ };
63
+ // @ts-expect-error TS(7031) FIXME: Binding element 'addons' implicitly has an 'any' t... Remove this comment to see the full error message
67
64
  const getAddonsInformation = ({ addons, siteInfo }) => {
68
- const urls = Object.fromEntries(
69
- addons.map((addon) => [addon.service_slug, `${siteInfo.ssl_url}${addon.service_path}`]),
70
- )
71
- const env = Object.assign({}, ...addons.map((addon) => addon.env))
72
- return { urls, env }
73
- }
74
-
65
+ const urls = Object.fromEntries(
66
+ // @ts-expect-error TS(7006) FIXME: Parameter 'addon' implicitly has an 'any' type.
67
+ addons.map((addon) => [addon.service_slug, `${siteInfo.ssl_url}${addon.service_path}`]));
68
+ // @ts-expect-error TS(7006) FIXME: Parameter 'addon' implicitly has an 'any' type.
69
+ const env = Object.assign({}, ...addons.map((addon) => addon.env));
70
+ return { urls, env };
71
+ };
72
+ // @ts-expect-error TS(7031) FIXME: Binding element 'accounts' implicitly has an 'any'... Remove this comment to see the full error message
75
73
  const getSiteAccount = ({ accounts, siteInfo }) => {
76
- const siteAccount = accounts.find((account) => account.slug === siteInfo.account_slug)
77
- if (!siteAccount) {
78
- warn(`Could not find account for site '${siteInfo.name}' with account slug '${siteInfo.account_slug}'`)
79
- return {}
80
- }
81
- return siteAccount
82
- }
83
-
74
+ // @ts-expect-error TS(7006) FIXME: Parameter 'account' implicitly has an 'any' type.
75
+ const siteAccount = accounts.find((account) => account.slug === siteInfo.account_slug);
76
+ if (!siteAccount) {
77
+ warn(`Could not find account for site '${siteInfo.name}' with account slug '${siteInfo.account_slug}'`);
78
+ return {};
79
+ }
80
+ return siteAccount;
81
+ };
84
82
  // default 10 seconds for synchronous functions
85
- const SYNCHRONOUS_FUNCTION_TIMEOUT = 10
86
-
83
+ const SYNCHRONOUS_FUNCTION_TIMEOUT = 10;
87
84
  // default 15 minutes for background functions
88
- const BACKGROUND_FUNCTION_TIMEOUT = 900
89
-
85
+ const BACKGROUND_FUNCTION_TIMEOUT = 900;
90
86
  /**
91
87
  *
92
88
  * @param {object} config
@@ -96,118 +92,107 @@ const BACKGROUND_FUNCTION_TIMEOUT = 900
96
92
  * @param {*} config.siteInfo
97
93
  * @returns
98
94
  */
95
+ // @ts-expect-error TS(7031) FIXME: Binding element 'api' implicitly has an 'any' type... Remove this comment to see the full error message
99
96
  export const getSiteInformation = async ({ api, offline, site, siteInfo }) => {
100
- if (site.id && !offline) {
101
- validateSiteInfo({ site, siteInfo })
102
- const [accounts, addons] = await Promise.all([getAccounts({ api }), getAddons({ api, site })])
103
-
104
- const { urls: addonsUrls } = getAddonsInformation({ siteInfo, addons })
105
- const account = getSiteAccount({ siteInfo, accounts })
106
-
107
- return {
108
- addonsUrls,
109
- siteUrl: siteInfo.ssl_url,
110
- accountId: account.id,
111
- capabilities: {
112
- backgroundFunctions: supportsBackgroundFunctions(account),
113
- },
114
- timeouts: {
115
- syncFunctions: siteInfo.functions_config?.timeout ?? SYNCHRONOUS_FUNCTION_TIMEOUT,
116
- backgroundFunctions: BACKGROUND_FUNCTION_TIMEOUT,
117
- },
97
+ if (site.id && !offline) {
98
+ validateSiteInfo({ site, siteInfo });
99
+ const [accounts, addons] = await Promise.all([getAccounts({ api }), getAddons({ api, site })]);
100
+ const { urls: addonsUrls } = getAddonsInformation({ siteInfo, addons });
101
+ const account = getSiteAccount({ siteInfo, accounts });
102
+ return {
103
+ addonsUrls,
104
+ siteUrl: siteInfo.ssl_url,
105
+ accountId: account.id,
106
+ capabilities: {
107
+ backgroundFunctions: supportsBackgroundFunctions(account),
108
+ },
109
+ timeouts: {
110
+ syncFunctions: siteInfo.functions_config?.timeout ?? SYNCHRONOUS_FUNCTION_TIMEOUT,
111
+ backgroundFunctions: BACKGROUND_FUNCTION_TIMEOUT,
112
+ },
113
+ };
118
114
  }
119
- }
120
-
121
- // best defaults we can have without retrieving site information
122
- return {
123
- addonsUrls: {},
124
- siteUrl: '',
125
- capabilities: {},
126
- timeouts: {
127
- syncFunctions: SYNCHRONOUS_FUNCTION_TIMEOUT,
128
- backgroundFunctions: BACKGROUND_FUNCTION_TIMEOUT,
129
- },
130
- }
131
- }
132
-
115
+ // best defaults we can have without retrieving site information
116
+ return {
117
+ addonsUrls: {},
118
+ siteUrl: '',
119
+ capabilities: {},
120
+ timeouts: {
121
+ syncFunctions: SYNCHRONOUS_FUNCTION_TIMEOUT,
122
+ backgroundFunctions: BACKGROUND_FUNCTION_TIMEOUT,
123
+ },
124
+ };
125
+ };
126
+ // @ts-expect-error TS(7006) FIXME: Parameter 'source' implicitly has an 'any' type.
133
127
  const getEnvSourceName = (source) => {
134
- const { name = source, printFn = chalk.green } = ENV_VAR_SOURCES[source] || {}
135
-
136
- return printFn(name)
137
- }
138
-
128
+ // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message
129
+ const { name = source, printFn = chalk.green } = ENV_VAR_SOURCES[source] || {};
130
+ return printFn(name);
131
+ };
139
132
  /**
140
133
  * @param {{devConfig: any, env: Record<string, { sources: string[], value: string}>, site: any}} param0
141
134
  * @returns {Promise<Record<string, { sources: string[], value: string}>>}
142
135
  */
136
+ // @ts-expect-error TS(7031) FIXME: Binding element 'devConfig' implicitly has an 'any... Remove this comment to see the full error message
143
137
  export const getDotEnvVariables = async ({ devConfig, env, site }) => {
144
- const dotEnvFiles = await loadDotEnvFiles({ envFiles: devConfig.envFiles, projectDir: site.root })
145
- dotEnvFiles.forEach(({ env: fileEnv, file }) => {
146
- const newSourceName = `${file} file`
147
-
148
- Object.keys(fileEnv).forEach((key) => {
149
- const sources = key in env ? [newSourceName, ...env[key].sources] : [newSourceName]
150
-
151
- if (sources.includes('internal')) {
152
- return
153
- }
154
-
155
- env[key] = {
156
- sources,
157
- value: fileEnv[key],
158
- }
159
- })
160
- })
161
-
162
- return env
163
- }
164
-
138
+ const dotEnvFiles = await loadDotEnvFiles({ envFiles: devConfig.envFiles, projectDir: site.root });
139
+ // @ts-expect-error TS(2339) FIXME: Property 'env' does not exist on type '{ warning: ... Remove this comment to see the full error message
140
+ dotEnvFiles.forEach(({ env: fileEnv, file }) => {
141
+ const newSourceName = `${file} file`;
142
+ Object.keys(fileEnv).forEach((key) => {
143
+ const sources = key in env ? [newSourceName, ...env[key].sources] : [newSourceName];
144
+ if (sources.includes('internal')) {
145
+ return;
146
+ }
147
+ env[key] = {
148
+ sources,
149
+ value: fileEnv[key],
150
+ };
151
+ });
152
+ });
153
+ return env;
154
+ };
165
155
  /**
166
156
  * Takes a set of environment variables in the format provided by @netlify/config and injects them into `process.env`
167
157
  * @param {Record<string, { sources: string[], value: string}>} env
168
158
  * @return {void}
169
159
  */
160
+ // @ts-expect-error TS(7006) FIXME: Parameter 'env' implicitly has an 'any' type.
170
161
  export const injectEnvVariables = (env) => {
171
- for (const [key, variable] of Object.entries(env)) {
172
- const existsInProcess = process.env[key] !== undefined
173
- const [usedSource, ...overriddenSources] = existsInProcess ? ['process', ...variable.sources] : variable.sources
174
- const usedSourceName = getEnvSourceName(usedSource)
175
- const isInternal = variable.sources.includes('internal')
176
-
177
- overriddenSources.forEach((source) => {
178
- const sourceName = getEnvSourceName(source)
179
-
180
- log(
181
- chalk.dim(
182
- `${NETLIFYDEVLOG} Ignored ${chalk.bold(sourceName)} env var: ${chalk.yellow(
183
- key,
184
- )} (defined in ${usedSourceName})`,
185
- ),
186
- )
187
- })
188
-
189
- if (!existsInProcess || isInternal) {
190
- // Omitting `general` and `internal` env vars to reduce noise in the logs.
191
- if (usedSource !== 'general' && !isInternal) {
192
- log(`${NETLIFYDEVLOG} Injected ${usedSourceName} env var: ${chalk.yellow(key)}`)
193
- }
194
-
195
- process.env[key] = variable.value
162
+ for (const [key, variable] of Object.entries(env)) {
163
+ const existsInProcess = process.env[key] !== undefined;
164
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
165
+ const [usedSource, ...overriddenSources] = existsInProcess ? ['process', ...variable.sources] : variable.sources;
166
+ const usedSourceName = getEnvSourceName(usedSource);
167
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
168
+ const isInternal = variable.sources.includes('internal');
169
+ // @ts-expect-error TS(7006) FIXME: Parameter 'source' implicitly has an 'any' type.
170
+ overriddenSources.forEach((source) => {
171
+ const sourceName = getEnvSourceName(source);
172
+ log(chalk.dim(`${NETLIFYDEVLOG} Ignored ${chalk.bold(sourceName)} env var: ${chalk.yellow(key)} (defined in ${usedSourceName})`));
173
+ });
174
+ if (!existsInProcess || isInternal) {
175
+ // Omitting `general` and `internal` env vars to reduce noise in the logs.
176
+ if (usedSource !== 'general' && !isInternal) {
177
+ log(`${NETLIFYDEVLOG} Injected ${usedSourceName} env var: ${chalk.yellow(key)}`);
178
+ }
179
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
180
+ process.env[key] = variable.value;
181
+ }
196
182
  }
197
- }
198
- }
199
-
183
+ };
184
+ // @ts-expect-error TS(7031) FIXME: Binding element 'configuredPort' implicitly has an... Remove this comment to see the full error message
200
185
  export const acquirePort = async ({ configuredPort, defaultPort, errorMessage }) => {
201
- const acquiredPort = await getPort({ port: configuredPort || defaultPort })
202
- if (configuredPort && acquiredPort !== configuredPort) {
203
- throw new Error(`${errorMessage}: '${configuredPort}'`)
204
- }
205
- return acquiredPort
206
- }
207
-
186
+ const acquiredPort = await getPort({ port: configuredPort || defaultPort });
187
+ if (configuredPort && acquiredPort !== configuredPort) {
188
+ throw new Error(`${errorMessage}: '${configuredPort}'`);
189
+ }
190
+ return acquiredPort;
191
+ };
192
+ // @ts-expect-error TS(7006) FIXME: Parameter 'fn' implicitly has an 'any' type.
208
193
  export const processOnExit = (fn) => {
209
- const signals = ['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit']
210
- signals.forEach((signal) => {
211
- process.on(signal, fn)
212
- })
213
- }
194
+ const signals = ['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'];
195
+ signals.forEach((signal) => {
196
+ process.on(signal, fn);
197
+ });
198
+ };
@@ -1,47 +1,42 @@
1
- // @ts-check
2
- import { readFile } from 'fs/promises'
3
- import path from 'path'
4
-
5
- import dotenv from 'dotenv'
6
-
7
- import { isFileAsync } from '../lib/fs.mjs'
8
-
9
- import { warn } from './command-helpers.mjs'
10
-
1
+ import { readFile } from 'fs/promises';
2
+ import path from 'path';
3
+ import dotenv from 'dotenv';
4
+ import { isFileAsync } from '../lib/fs.mjs';
5
+ import { warn } from './command-helpers.mjs';
6
+ // @ts-expect-error TS(7031) FIXME: Binding element 'envFiles' implicitly has an 'any'... Remove this comment to see the full error message
11
7
  export const loadDotEnvFiles = async function ({ envFiles, projectDir }) {
12
- const response = await tryLoadDotEnvFiles({ projectDir, dotenvFiles: envFiles })
13
-
14
- const filesWithWarning = response.filter((el) => el.warning)
15
- filesWithWarning.forEach((el) => {
16
- warn(el.warning)
17
- })
18
-
19
- return response.filter((el) => el.file && el.env)
20
- }
21
-
8
+ const response = await tryLoadDotEnvFiles({ projectDir, dotenvFiles: envFiles });
9
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
10
+ const filesWithWarning = response.filter((el) => el.warning);
11
+ filesWithWarning.forEach((el) => {
12
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
13
+ warn(el.warning);
14
+ });
15
+ // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'.
16
+ return response.filter((el) => el.file && el.env);
17
+ };
22
18
  // in the user configuration, the order is highest to lowest
23
- const defaultEnvFiles = ['.env.development.local', '.env.local', '.env.development', '.env']
24
-
19
+ const defaultEnvFiles = ['.env.development.local', '.env.local', '.env.development', '.env'];
20
+ // @ts-expect-error TS(7031) FIXME: Binding element 'projectDir' implicitly has an 'an... Remove this comment to see the full error message
25
21
  export const tryLoadDotEnvFiles = async ({ dotenvFiles = defaultEnvFiles, projectDir }) => {
26
- const results = await Promise.all(
27
- dotenvFiles.map(async (file) => {
28
- const filepath = path.resolve(projectDir, file)
29
- try {
30
- const isFile = await isFileAsync(filepath)
31
- if (!isFile) {
32
- return
22
+ const results = await Promise.all(dotenvFiles.map(async (file) => {
23
+ const filepath = path.resolve(projectDir, file);
24
+ try {
25
+ const isFile = await isFileAsync(filepath);
26
+ if (!isFile) {
27
+ return;
28
+ }
33
29
  }
34
- } catch (error) {
35
- return {
36
- warning: `Failed reading env variables from file: ${filepath}: ${error.message}`,
30
+ catch (error) {
31
+ return {
32
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
33
+ warning: `Failed reading env variables from file: ${filepath}: ${error.message}`,
34
+ };
37
35
  }
38
- }
39
- const content = await readFile(filepath, 'utf-8')
40
- const env = dotenv.parse(content)
41
- return { file, env }
42
- }),
43
- )
44
-
45
- // we return in order of lowest to highest priority
46
- return results.filter(Boolean).reverse()
47
- }
36
+ const content = await readFile(filepath, 'utf-8');
37
+ const env = dotenv.parse(content);
38
+ return { file, env };
39
+ }));
40
+ // we return in order of lowest to highest priority
41
+ return results.filter(Boolean).reverse();
42
+ };