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,67 +1,59 @@
1
- // @ts-check
2
- import { Buffer } from 'buffer'
3
- import { rm } from 'fs/promises'
4
- import { join, resolve } from 'path'
5
-
1
+ import { Buffer } from 'buffer';
2
+ import { rm } from 'fs/promises';
3
+ import { join, resolve } from 'path';
6
4
  // eslint-disable-next-line import/no-namespace
7
- import * as bundler from '@netlify/edge-bundler'
8
- import getAvailablePort from 'get-port'
9
-
10
- import { NETLIFYDEVERR, chalk, error as printError } from '../../utils/command-helpers.mjs'
11
- import { getGeoLocation } from '../geo-location.mjs'
12
- import { getPathInProject } from '../settings.mjs'
13
- import { startSpinner, stopSpinner } from '../spinner.mjs'
14
-
15
- import { getBootstrapURL } from './bootstrap.mjs'
16
- import { DIST_IMPORT_MAP_PATH, EDGE_FUNCTIONS_SERVE_FOLDER } from './consts.mjs'
17
- import { headers, getFeatureFlagsHeader, getInvocationMetadataHeader } from './headers.mjs'
18
- import { getInternalFunctions } from './internal.mjs'
19
- import { EdgeFunctionsRegistry } from './registry.mjs'
20
-
21
- const headersSymbol = Symbol('Edge Functions Headers')
22
-
23
- const LOCAL_HOST = '127.0.0.1'
24
-
5
+ import * as bundler from '@netlify/edge-bundler';
6
+ import getAvailablePort from 'get-port';
7
+ import { NETLIFYDEVERR, chalk, error as printError } from '../../utils/command-helpers.mjs';
8
+ import { getGeoLocation } from '../geo-location.mjs';
9
+ import { getPathInProject } from '../settings.mjs';
10
+ import { startSpinner, stopSpinner } from '../spinner.mjs';
11
+ import { getBootstrapURL } from './bootstrap.mjs';
12
+ import { DIST_IMPORT_MAP_PATH, EDGE_FUNCTIONS_SERVE_FOLDER } from './consts.mjs';
13
+ import { headers, getFeatureFlagsHeader, getInvocationMetadataHeader } from './headers.mjs';
14
+ import { getInternalFunctions } from './internal.mjs';
15
+ import { EdgeFunctionsRegistry } from './registry.mjs';
16
+ const headersSymbol = Symbol('Edge Functions Headers');
17
+ const LOCAL_HOST = '127.0.0.1';
25
18
  const getDownloadUpdateFunctions = () => {
26
- let spinner
27
-
28
- /**
29
- * @param {Error=} error_
30
- */
31
- const onAfterDownload = (error_) => {
32
- stopSpinner({ error: Boolean(error_), spinner })
33
- }
34
-
35
- const onBeforeDownload = () => {
36
- spinner = startSpinner({ text: 'Setting up the Edge Functions environment. This may take a couple of minutes.' })
37
- }
38
-
39
- return {
40
- onAfterDownload,
41
- onBeforeDownload,
42
- }
43
- }
44
-
19
+ // @ts-expect-error TS(7034) FIXME: Variable 'spinner' implicitly has type 'any' in so... Remove this comment to see the full error message
20
+ let spinner;
21
+ /**
22
+ * @param {Error=} error_
23
+ */
24
+ // @ts-expect-error TS(7006) FIXME: Parameter 'error_' implicitly has an 'any' type.
25
+ const onAfterDownload = (error_) => {
26
+ // @ts-expect-error TS(2345) FIXME: Argument of type '{ error: boolean; spinner: any; ... Remove this comment to see the full error message
27
+ stopSpinner({ error: Boolean(error_), spinner });
28
+ };
29
+ const onBeforeDownload = () => {
30
+ spinner = startSpinner({ text: 'Setting up the Edge Functions environment. This may take a couple of minutes.' });
31
+ };
32
+ return {
33
+ onAfterDownload,
34
+ onBeforeDownload,
35
+ };
36
+ };
37
+ // @ts-expect-error TS(7006) FIXME: Parameter 'req' implicitly has an 'any' type.
45
38
  export const handleProxyRequest = (req, proxyReq) => {
46
- Object.entries(req[headersSymbol]).forEach(([header, value]) => {
47
- proxyReq.setHeader(header, value)
48
- })
49
- }
50
-
39
+ Object.entries(req[headersSymbol]).forEach(([header, value]) => {
40
+ proxyReq.setHeader(header, value);
41
+ });
42
+ };
51
43
  export const createSiteInfoHeader = (siteInfo = {}) => {
52
- const { id, name, url } = siteInfo
53
- const site = { id, name, url }
54
- const siteString = JSON.stringify(site)
55
- return Buffer.from(siteString).toString('base64')
56
- }
57
-
44
+ // @ts-expect-error TS(2339) FIXME: Property 'id' does not exist on type '{}'.
45
+ const { id, name, url } = siteInfo;
46
+ const site = { id, name, url };
47
+ const siteString = JSON.stringify(site);
48
+ return Buffer.from(siteString).toString('base64');
49
+ };
58
50
  export const createAccountInfoHeader = (accountInfo = {}) => {
59
- const { id } = accountInfo
60
- const account = { id }
61
- const accountString = JSON.stringify(account)
62
- return Buffer.from(accountString).toString('base64')
63
- }
64
-
51
+ // @ts-expect-error TS(2339) FIXME: Property 'id' does not exist on type '{}'.
52
+ const { id } = accountInfo;
53
+ const account = { id };
54
+ const accountString = JSON.stringify(account);
55
+ return Buffer.from(accountString).toString('base64');
56
+ };
65
57
  /**
66
58
  *
67
59
  * @param {object} config
@@ -84,174 +76,183 @@ export const createAccountInfoHeader = (accountInfo = {}) => {
84
76
  * @param {*} config.state
85
77
  * @returns
86
78
  */
87
- export const initializeProxy = async ({
88
- accountId,
89
- blobsContext,
90
- config,
91
- configPath,
92
- debug,
93
- env: configEnv,
94
- geoCountry,
95
- geolocationMode,
96
- getUpdatedConfig,
97
- inspectSettings,
98
- mainPort,
99
- offline,
100
- passthroughPort,
101
- projectDir,
102
- repositoryRoot,
103
- settings,
104
- siteInfo,
105
- state,
106
- }) => {
107
- const {
108
- functions: internalFunctions,
109
- importMap,
110
- path: internalFunctionsPath,
111
- } = await getInternalFunctions(projectDir)
112
- const userFunctionsPath = config.build.edge_functions
113
- const isolatePort = await getAvailablePort()
114
- const buildFeatureFlags = {
115
- edge_functions_npm_modules: true,
116
- }
117
- const runtimeFeatureFlags = ['edge_functions_bootstrap_failure_mode']
118
-
119
- // Initializes the server, bootstrapping the Deno CLI and downloading it from
120
- // the network if needed. We don't want to wait for that to be completed, or
121
- // the command will be left hanging.
122
- const server = prepareServer({
123
- config,
124
- configPath,
125
- debug,
126
- directory: userFunctionsPath,
127
- env: configEnv,
128
- featureFlags: buildFeatureFlags,
129
- getUpdatedConfig,
130
- importMaps: [importMap].filter(Boolean),
131
- inspectSettings,
132
- internalDirectory: internalFunctionsPath,
133
- internalFunctions,
134
- port: isolatePort,
135
- projectDir,
136
- repositoryRoot,
137
- })
138
- const hasEdgeFunctions = userFunctionsPath !== undefined || internalFunctionsPath
139
-
140
- return async (req) => {
141
- if (req.headers[headers.Passthrough] !== undefined || !hasEdgeFunctions) {
142
- return
79
+ export const initializeProxy = async ({
80
+ // @ts-expect-error TS(7031) FIXME: Binding element 'accountId' implicitly has an 'any... Remove this comment to see the full error message
81
+ accountId,
82
+ // @ts-expect-error TS(7031) FIXME: Binding element 'blobsContext' implicitly has an '... Remove this comment to see the full error message
83
+ blobsContext,
84
+ // @ts-expect-error TS(7031) FIXME: Binding element 'config' implicitly has an 'any' t... Remove this comment to see the full error message
85
+ config,
86
+ // @ts-expect-error TS(7031) FIXME: Binding element 'configPath' implicitly has an 'an... Remove this comment to see the full error message
87
+ configPath,
88
+ // @ts-expect-error TS(7031) FIXME: Binding element 'debug' implicitly has an 'any' ty... Remove this comment to see the full error message
89
+ debug,
90
+ // @ts-expect-error TS(7031) FIXME: Binding element 'configEnv' implicitly has an 'any... Remove this comment to see the full error message
91
+ env: configEnv,
92
+ // @ts-expect-error TS(7031) FIXME: Binding element 'geoCountry' implicitly has an 'an... Remove this comment to see the full error message
93
+ geoCountry,
94
+ // @ts-expect-error TS(7031) FIXME: Binding element 'geolocationMode' implicitly has a... Remove this comment to see the full error message
95
+ geolocationMode,
96
+ // @ts-expect-error TS(7031) FIXME: Binding element 'getUpdatedConfig' implicitly has ... Remove this comment to see the full error message
97
+ getUpdatedConfig,
98
+ // @ts-expect-error TS(7031) FIXME: Binding element 'inspectSettings' implicitly has a... Remove this comment to see the full error message
99
+ inspectSettings,
100
+ // @ts-expect-error TS(7031) FIXME: Binding element 'mainPort' implicitly has an 'any'... Remove this comment to see the full error message
101
+ mainPort,
102
+ // @ts-expect-error TS(7031) FIXME: Binding element 'offline' implicitly has an 'any' ... Remove this comment to see the full error message
103
+ offline,
104
+ // @ts-expect-error TS(7031) FIXME: Binding element 'passthroughPort' implicitly has a... Remove this comment to see the full error message
105
+ passthroughPort,
106
+ // @ts-expect-error TS(7031) FIXME: Binding element 'projectDir' implicitly has an 'an... Remove this comment to see the full error message
107
+ projectDir,
108
+ // @ts-expect-error TS(7031) FIXME: Binding element 'repositoryRoot' implicitly has an... Remove this comment to see the full error message
109
+ repositoryRoot,
110
+ // @ts-expect-error TS(7031) FIXME: Binding element 'settings' implicitly has an 'any'... Remove this comment to see the full error message
111
+ settings,
112
+ // @ts-expect-error TS(7031) FIXME: Binding element 'siteInfo' implicitly has an 'any'... Remove this comment to see the full error message
113
+ siteInfo,
114
+ // @ts-expect-error TS(7031) FIXME: Binding element 'state' implicitly has an 'any' ty... Remove this comment to see the full error message
115
+ state, }) => {
116
+ const { functions: internalFunctions,
117
+ // @ts-expect-error TS(2339) FIXME: Property 'importMap' does not exist on type '{ fun... Remove this comment to see the full error message
118
+ importMap, path: internalFunctionsPath, } = await getInternalFunctions(projectDir);
119
+ const userFunctionsPath = config.build.edge_functions;
120
+ const isolatePort = await getAvailablePort();
121
+ const buildFeatureFlags = {
122
+ edge_functions_npm_modules: true,
123
+ };
124
+ const runtimeFeatureFlags = ['edge_functions_bootstrap_failure_mode'];
125
+ // Initializes the server, bootstrapping the Deno CLI and downloading it from
126
+ // the network if needed. We don't want to wait for that to be completed, or
127
+ // the command will be left hanging.
128
+ const server = prepareServer({
129
+ config,
130
+ configPath,
131
+ debug,
132
+ directory: userFunctionsPath,
133
+ env: configEnv,
134
+ featureFlags: buildFeatureFlags,
135
+ getUpdatedConfig,
136
+ importMaps: [importMap].filter(Boolean),
137
+ inspectSettings,
138
+ internalDirectory: internalFunctionsPath,
139
+ internalFunctions,
140
+ port: isolatePort,
141
+ projectDir,
142
+ repositoryRoot,
143
+ });
144
+ const hasEdgeFunctions = userFunctionsPath !== undefined || internalFunctionsPath;
145
+ // @ts-expect-error TS(7006) FIXME: Parameter 'req' implicitly has an 'any' type.
146
+ return async (req) => {
147
+ if (req.headers[headers.Passthrough] !== undefined || !hasEdgeFunctions) {
148
+ return;
149
+ }
150
+ const [geoLocation, registry] = await Promise.all([
151
+ getGeoLocation({ mode: geolocationMode, geoCountry, offline, state }),
152
+ server,
153
+ ]);
154
+ if (!registry)
155
+ return;
156
+ // Setting header with geolocation and site info.
157
+ req.headers[headers.Geo] = Buffer.from(JSON.stringify(geoLocation)).toString('base64');
158
+ req.headers[headers.DeployID] = '0';
159
+ req.headers[headers.Site] = createSiteInfoHeader(siteInfo);
160
+ req.headers[headers.Account] = createAccountInfoHeader({ id: accountId });
161
+ if (blobsContext?.edgeURL && blobsContext?.token) {
162
+ req.headers[headers.BlobsInfo] = Buffer.from(JSON.stringify({ url: blobsContext.edgeURL, token: blobsContext.token })).toString('base64');
163
+ }
164
+ await registry.initialize();
165
+ const url = new URL(req.url, `http://${LOCAL_HOST}:${mainPort}`);
166
+ const { functionNames, invocationMetadata } = registry.matchURLPath(url.pathname, req.method);
167
+ if (functionNames.length === 0) {
168
+ return;
169
+ }
170
+ req[headersSymbol] = {
171
+ [headers.FeatureFlags]: getFeatureFlagsHeader(runtimeFeatureFlags),
172
+ [headers.ForwardedProtocol]: settings.https ? 'https:' : 'http:',
173
+ [headers.Functions]: functionNames.join(','),
174
+ [headers.InvocationMetadata]: getInvocationMetadataHeader(invocationMetadata),
175
+ [headers.IP]: LOCAL_HOST,
176
+ [headers.Passthrough]: 'passthrough',
177
+ [headers.PassthroughHost]: `localhost:${passthroughPort}`,
178
+ [headers.PassthroughProtocol]: 'http:',
179
+ };
180
+ if (debug) {
181
+ req[headersSymbol][headers.DebugLogging] = '1';
182
+ }
183
+ return `http://${LOCAL_HOST}:${isolatePort}`;
184
+ };
185
+ };
186
+ // @ts-expect-error TS(7006) FIXME: Parameter 'req' implicitly has an 'any' type.
187
+ export const isEdgeFunctionsRequest = (req) => req[headersSymbol] !== undefined;
188
+ const prepareServer = async ({
189
+ // @ts-expect-error TS(7031) FIXME: Binding element 'config' implicitly has an 'any' t... Remove this comment to see the full error message
190
+ config,
191
+ // @ts-expect-error TS(7031) FIXME: Binding element 'configPath' implicitly has an 'an... Remove this comment to see the full error message
192
+ configPath,
193
+ // @ts-expect-error TS(7031) FIXME: Binding element 'debug' implicitly has an 'any' ty... Remove this comment to see the full error message
194
+ debug,
195
+ // @ts-expect-error TS(7031) FIXME: Binding element 'directory' implicitly has an 'any... Remove this comment to see the full error message
196
+ directory,
197
+ // @ts-expect-error TS(7031) FIXME: Binding element 'configEnv' implicitly has an 'any... Remove this comment to see the full error message
198
+ env: configEnv,
199
+ // @ts-expect-error TS(7031) FIXME: Binding element 'featureFlags' implicitly has an '... Remove this comment to see the full error message
200
+ featureFlags,
201
+ // @ts-expect-error TS(7031) FIXME: Binding element 'getUpdatedConfig' implicitly has ... Remove this comment to see the full error message
202
+ getUpdatedConfig,
203
+ // @ts-expect-error TS(7031) FIXME: Binding element 'importMaps' implicitly has an 'an... Remove this comment to see the full error message
204
+ importMaps,
205
+ // @ts-expect-error TS(7031) FIXME: Binding element 'inspectSettings' implicitly has a... Remove this comment to see the full error message
206
+ inspectSettings,
207
+ // @ts-expect-error TS(7031) FIXME: Binding element 'internalDirectory' implicitly has... Remove this comment to see the full error message
208
+ internalDirectory,
209
+ // @ts-expect-error TS(7031) FIXME: Binding element 'internalFunctions' implicitly has... Remove this comment to see the full error message
210
+ internalFunctions,
211
+ // @ts-expect-error TS(7031) FIXME: Binding element 'port' implicitly has an 'any' typ... Remove this comment to see the full error message
212
+ port,
213
+ // @ts-expect-error TS(7031) FIXME: Binding element 'projectDir' implicitly has an 'an... Remove this comment to see the full error message
214
+ projectDir,
215
+ // @ts-expect-error TS(7031) FIXME: Binding element 'repositoryRoot' implicitly has an... Remove this comment to see the full error message
216
+ repositoryRoot, }) => {
217
+ // Merging internal with user-defined import maps.
218
+ const importMapPaths = [...importMaps, config.functions['*'].deno_import_map];
219
+ try {
220
+ const distImportMapPath = getPathInProject([DIST_IMPORT_MAP_PATH]);
221
+ const servePath = resolve(projectDir, getPathInProject([EDGE_FUNCTIONS_SERVE_FOLDER]));
222
+ await rm(servePath, { force: true, recursive: true });
223
+ const runIsolate = await bundler.serve({
224
+ ...getDownloadUpdateFunctions(),
225
+ basePath: projectDir,
226
+ bootstrapURL: getBootstrapURL(),
227
+ debug,
228
+ distImportMapPath: join(projectDir, distImportMapPath),
229
+ featureFlags,
230
+ formatExportTypeError: (name) => `${NETLIFYDEVERR} ${chalk.red('Failed')} to load Edge Function ${chalk.yellow(name)}. The file does not seem to have a function as the default export.`,
231
+ formatImportError: (name) => `${NETLIFYDEVERR} ${chalk.red('Failed')} to run Edge Function ${chalk.yellow(name)}:`,
232
+ importMapPaths,
233
+ inspectSettings,
234
+ port,
235
+ rootPath: repositoryRoot,
236
+ servePath,
237
+ });
238
+ const registry = new EdgeFunctionsRegistry({
239
+ bundler,
240
+ config,
241
+ configPath,
242
+ debug,
243
+ directories: [directory].filter(Boolean),
244
+ env: configEnv,
245
+ getUpdatedConfig,
246
+ internalDirectories: [internalDirectory].filter(Boolean),
247
+ internalFunctions,
248
+ projectDir,
249
+ runIsolate,
250
+ servePath,
251
+ });
252
+ return registry;
143
253
  }
144
-
145
- const [geoLocation, registry] = await Promise.all([
146
- getGeoLocation({ mode: geolocationMode, geoCountry, offline, state }),
147
- server,
148
- ])
149
-
150
- if (!registry) return
151
-
152
- // Setting header with geolocation and site info.
153
- req.headers[headers.Geo] = Buffer.from(JSON.stringify(geoLocation)).toString('base64')
154
- req.headers[headers.DeployID] = '0'
155
- req.headers[headers.Site] = createSiteInfoHeader(siteInfo)
156
- req.headers[headers.Account] = createAccountInfoHeader({ id: accountId })
157
-
158
- if (blobsContext?.edgeURL && blobsContext?.token) {
159
- req.headers[headers.BlobsInfo] = Buffer.from(
160
- JSON.stringify({ url: blobsContext.edgeURL, token: blobsContext.token }),
161
- ).toString('base64')
254
+ catch (error) {
255
+ // @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
256
+ printError(error.message, { exit: false });
162
257
  }
163
-
164
- await registry.initialize()
165
-
166
- const url = new URL(req.url, `http://${LOCAL_HOST}:${mainPort}`)
167
- const { functionNames, invocationMetadata } = registry.matchURLPath(url.pathname, req.method)
168
-
169
- if (functionNames.length === 0) {
170
- return
171
- }
172
-
173
- req[headersSymbol] = {
174
- [headers.FeatureFlags]: getFeatureFlagsHeader(runtimeFeatureFlags),
175
- [headers.ForwardedProtocol]: settings.https ? 'https:' : 'http:',
176
- [headers.Functions]: functionNames.join(','),
177
- [headers.InvocationMetadata]: getInvocationMetadataHeader(invocationMetadata),
178
- [headers.IP]: LOCAL_HOST,
179
- [headers.Passthrough]: 'passthrough',
180
- [headers.PassthroughHost]: `localhost:${passthroughPort}`,
181
- [headers.PassthroughProtocol]: 'http:',
182
- }
183
-
184
- if (debug) {
185
- req[headersSymbol][headers.DebugLogging] = '1'
186
- }
187
-
188
- return `http://${LOCAL_HOST}:${isolatePort}`
189
- }
190
- }
191
-
192
- export const isEdgeFunctionsRequest = (req) => req[headersSymbol] !== undefined
193
-
194
- const prepareServer = async ({
195
- config,
196
- configPath,
197
- debug,
198
- directory,
199
- env: configEnv,
200
- featureFlags,
201
- getUpdatedConfig,
202
- importMaps,
203
- inspectSettings,
204
- internalDirectory,
205
- internalFunctions,
206
- port,
207
- projectDir,
208
- repositoryRoot,
209
- }) => {
210
- // Merging internal with user-defined import maps.
211
- const importMapPaths = [...importMaps, config.functions['*'].deno_import_map]
212
-
213
- try {
214
- const distImportMapPath = getPathInProject([DIST_IMPORT_MAP_PATH])
215
- const servePath = resolve(projectDir, getPathInProject([EDGE_FUNCTIONS_SERVE_FOLDER]))
216
-
217
- await rm(servePath, { force: true, recursive: true })
218
-
219
- const runIsolate = await bundler.serve({
220
- ...getDownloadUpdateFunctions(),
221
- basePath: projectDir,
222
- bootstrapURL: getBootstrapURL(),
223
- debug,
224
- distImportMapPath: join(projectDir, distImportMapPath),
225
- featureFlags,
226
- formatExportTypeError: (name) =>
227
- `${NETLIFYDEVERR} ${chalk.red('Failed')} to load Edge Function ${chalk.yellow(
228
- name,
229
- )}. The file does not seem to have a function as the default export.`,
230
- formatImportError: (name) =>
231
- `${NETLIFYDEVERR} ${chalk.red('Failed')} to run Edge Function ${chalk.yellow(name)}:`,
232
- importMapPaths,
233
- inspectSettings,
234
- port,
235
- rootPath: repositoryRoot,
236
- servePath,
237
- })
238
- const registry = new EdgeFunctionsRegistry({
239
- bundler,
240
- config,
241
- configPath,
242
- debug,
243
- directories: [directory].filter(Boolean),
244
- env: configEnv,
245
- getUpdatedConfig,
246
- internalDirectories: [internalDirectory].filter(Boolean),
247
- internalFunctions,
248
- projectDir,
249
- runIsolate,
250
- servePath,
251
- })
252
-
253
- return registry
254
- } catch (error) {
255
- printError(error.message, { exit: false })
256
- }
257
- }
258
+ };