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,13 +1,10 @@
1
- // @ts-check
2
1
  const createDeferred = () => {
3
- let resolveDeferred
4
- let rejectDeferred
5
- const promise = new Promise((resolve, reject) => {
6
- resolveDeferred = resolve
7
- rejectDeferred = reject
8
- })
9
-
10
- return { promise, reject: rejectDeferred, resolve: resolveDeferred }
11
- }
12
-
13
- export default createDeferred
2
+ let resolveDeferred;
3
+ let rejectDeferred;
4
+ const promise = new Promise((resolve, reject) => {
5
+ resolveDeferred = resolve;
6
+ rejectDeferred = reject;
7
+ });
8
+ return { promise, reject: rejectDeferred, resolve: resolveDeferred };
9
+ };
10
+ export default createDeferred;
@@ -1,49 +1,56 @@
1
- import { Buffer } from 'buffer'
2
-
3
- const SEC_TO_MILLISEC = 1e3
4
-
1
+ import { Buffer } from 'buffer';
2
+ const SEC_TO_MILLISEC = 1e3;
5
3
  // 6 MiB
6
- const DEFAULT_BYTES_LIMIT = 6e6
7
-
4
+ const DEFAULT_BYTES_LIMIT = 6e6;
5
+ // @ts-expect-error TS(7006) FIXME: Parameter 'stream' implicitly has an 'any' type.
8
6
  const createStreamPromise = function (stream, timeoutSeconds, bytesLimit = DEFAULT_BYTES_LIMIT) {
9
- return new Promise(function streamPromiseFunc(resolve, reject) {
10
- let data = []
11
- let dataLength = 0
12
-
13
- let timeoutId = null
14
- if (timeoutSeconds != null && Number.isFinite(timeoutSeconds)) {
15
- timeoutId = setTimeout(() => {
16
- data = null
17
- reject(new Error('Request timed out waiting for body'))
18
- }, timeoutSeconds * SEC_TO_MILLISEC)
19
- }
20
-
21
- stream.on('data', function onData(chunk) {
22
- if (!Array.isArray(data)) {
23
- // Stream harvesting closed
24
- return
25
- }
26
- dataLength += chunk.length
27
- if (dataLength > bytesLimit) {
28
- data = null
29
- reject(new Error('Stream body too big'))
30
- } else {
31
- data.push(chunk)
32
- }
33
- })
34
-
35
- stream.on('error', function onError(error) {
36
- data = null
37
- reject(error)
38
- clearTimeout(timeoutId)
39
- })
40
- stream.on('end', function onEnd() {
41
- clearTimeout(timeoutId)
42
- if (data) {
43
- resolve(Buffer.concat(data))
44
- }
45
- })
46
- })
47
- }
48
-
49
- export default createStreamPromise
7
+ return new Promise(function streamPromiseFunc(resolve, reject) {
8
+ // @ts-expect-error TS(7034) FIXME: Variable 'data' implicitly has type 'any[]' in som... Remove this comment to see the full error message
9
+ let data = [];
10
+ let dataLength = 0;
11
+ // @ts-expect-error TS(7034) FIXME: Variable 'timeoutId' implicitly has type 'any' in ... Remove this comment to see the full error message
12
+ let timeoutId = null;
13
+ if (timeoutSeconds != null && Number.isFinite(timeoutSeconds)) {
14
+ timeoutId = setTimeout(() => {
15
+ // @ts-expect-error TS(2322) FIXME: Type 'null' is not assignable to type 'any[]'.
16
+ data = null;
17
+ reject(new Error('Request timed out waiting for body'));
18
+ }, timeoutSeconds * SEC_TO_MILLISEC);
19
+ }
20
+ // @ts-expect-error TS(7006) FIXME: Parameter 'chunk' implicitly has an 'any' type.
21
+ stream.on('data', function onData(chunk) {
22
+ // @ts-expect-error TS(7005) FIXME: Variable 'data' implicitly has an 'any[]' type.
23
+ if (!Array.isArray(data)) {
24
+ // Stream harvesting closed
25
+ return;
26
+ }
27
+ dataLength += chunk.length;
28
+ if (dataLength > bytesLimit) {
29
+ // @ts-expect-error TS(2322) FIXME: Type 'null' is not assignable to type 'any[]'.
30
+ data = null;
31
+ reject(new Error('Stream body too big'));
32
+ }
33
+ else {
34
+ data.push(chunk);
35
+ }
36
+ });
37
+ // @ts-expect-error TS(7006) FIXME: Parameter 'error' implicitly has an 'any' type.
38
+ stream.on('error', function onError(error) {
39
+ // @ts-expect-error TS(2322) FIXME: Type 'null' is not assignable to type 'any[]'.
40
+ data = null;
41
+ reject(error);
42
+ // @ts-expect-error TS(7005) FIXME: Variable 'timeoutId' implicitly has an 'any' type.
43
+ clearTimeout(timeoutId);
44
+ });
45
+ stream.on('end', function onEnd() {
46
+ // @ts-expect-error TS(7005) FIXME: Variable 'timeoutId' implicitly has an 'any' type.
47
+ clearTimeout(timeoutId);
48
+ // @ts-expect-error TS(7005) FIXME: Variable 'data' implicitly has an 'any[]' type.
49
+ if (data) {
50
+ // @ts-expect-error TS(7005) FIXME: Variable 'data' implicitly has an 'any[]' type.
51
+ resolve(Buffer.concat(data));
52
+ }
53
+ });
54
+ });
55
+ };
56
+ export default createStreamPromise;
@@ -1,19 +1,17 @@
1
1
  // Local deploy timeout in ms: 20 mins
2
- export const DEFAULT_DEPLOY_TIMEOUT = 1_200_000
2
+ export const DEFAULT_DEPLOY_TIMEOUT = 1200000;
3
3
  // Concurrent file hash calls
4
- export const DEFAULT_CONCURRENT_HASH = 100
4
+ export const DEFAULT_CONCURRENT_HASH = 100;
5
5
  // Number of concurrent uploads
6
- export const DEFAULT_CONCURRENT_UPLOAD = 5
6
+ export const DEFAULT_CONCURRENT_UPLOAD = 5;
7
7
  // Number of files
8
- export const DEFAULT_SYNC_LIMIT = 100
8
+ export const DEFAULT_SYNC_LIMIT = 100;
9
9
  // Number of times to retry an upload
10
- export const DEFAULT_MAX_RETRY = 5
11
-
12
- export const UPLOAD_RANDOM_FACTOR = 0.5
10
+ export const DEFAULT_MAX_RETRY = 5;
11
+ export const UPLOAD_RANDOM_FACTOR = 0.5;
13
12
  // 5 seconds
14
- export const UPLOAD_INITIAL_DELAY = 5000
13
+ export const UPLOAD_INITIAL_DELAY = 5000;
15
14
  // 1.5 minute (90s)
16
- export const UPLOAD_MAX_DELAY = 90_000
17
-
15
+ export const UPLOAD_MAX_DELAY = 90000;
18
16
  // 1 second
19
- export const DEPLOY_POLL = 1000
17
+ export const DEPLOY_POLL = 1000;
@@ -1,116 +1,104 @@
1
- import { rm } from 'fs/promises'
2
-
3
- import cleanDeep from 'clean-deep'
4
- import { temporaryDirectory } from 'tempy'
5
-
6
- import { deployFileNormalizer, getDistPathIfExists, isEdgeFunctionFile } from '../../lib/edge-functions/deploy.mjs'
7
- import { warn } from '../command-helpers.mjs'
8
-
9
- import {
10
- DEFAULT_CONCURRENT_HASH,
11
- DEFAULT_CONCURRENT_UPLOAD,
12
- DEFAULT_DEPLOY_TIMEOUT,
13
- DEFAULT_MAX_RETRY,
14
- DEFAULT_SYNC_LIMIT,
15
- } from './constants.mjs'
16
- import { hashConfig } from './hash-config.mjs'
17
- import hashFiles from './hash-files.mjs'
18
- import hashFns from './hash-fns.mjs'
19
- import uploadFiles from './upload-files.mjs'
20
- import { getUploadList, waitForDeploy, waitForDiff } from './util.mjs'
21
-
1
+ import { rm } from 'fs/promises';
2
+ import cleanDeep from 'clean-deep';
3
+ import { temporaryDirectory } from 'tempy';
4
+ import { deployFileNormalizer, getDistPathIfExists, isEdgeFunctionFile } from '../../lib/edge-functions/deploy.mjs';
5
+ import { warn } from '../command-helpers.mjs';
6
+ import { DEFAULT_CONCURRENT_HASH, DEFAULT_CONCURRENT_UPLOAD, DEFAULT_DEPLOY_TIMEOUT, DEFAULT_MAX_RETRY, DEFAULT_SYNC_LIMIT, } from './constants.mjs';
7
+ import { hashConfig } from './hash-config.mjs';
8
+ import hashFiles from './hash-files.mjs';
9
+ import hashFns from './hash-fns.mjs';
10
+ import uploadFiles from './upload-files.mjs';
11
+ import { getUploadList, waitForDeploy, waitForDiff } from './util.mjs';
22
12
  export const deploySite = async (
23
- api,
24
- siteId,
25
- dir,
26
- {
27
- assetType,
28
- branch,
29
- concurrentHash = DEFAULT_CONCURRENT_HASH,
30
- concurrentUpload = DEFAULT_CONCURRENT_UPLOAD,
31
- config,
32
- deployId,
33
- deployTimeout = DEFAULT_DEPLOY_TIMEOUT,
34
- draft = false,
35
- filter,
36
- fnDir = [],
37
- functionsConfig,
38
- hashAlgorithm,
39
- manifestPath,
40
- maxRetry = DEFAULT_MAX_RETRY,
41
- siteEnv,
42
- siteRoot,
43
- skipFunctionsCache,
44
- statusCb = () => {
45
- /* default to noop */
46
- },
47
- syncFileLimit = DEFAULT_SYNC_LIMIT,
48
- tmpDir = temporaryDirectory(),
49
- workingDir,
50
- } = {},
51
- ) => {
52
- statusCb({
53
- type: 'hashing',
54
- msg: `Hashing files...`,
55
- phase: 'start',
56
- })
57
-
58
- const edgeFunctionsDistPath = await getDistPathIfExists(workingDir)
59
- const [
60
- { files: staticFiles, filesShaMap: staticShaMap },
61
- { fnConfig, fnShaMap, functionSchedules, functions, functionsWithNativeModules },
62
- configFile,
63
- ] = await Promise.all([
64
- hashFiles({
65
- assetType,
66
- concurrentHash,
67
- directories: [dir, edgeFunctionsDistPath].filter(Boolean),
68
- filter,
69
- hashAlgorithm,
70
- normalizer: deployFileNormalizer.bind(null, workingDir),
71
- statusCb,
72
- }),
73
- hashFns(fnDir, {
74
- functionsConfig,
75
- tmpDir,
76
- concurrentHash,
77
- hashAlgorithm,
78
- statusCb,
79
- assetType,
80
- workingDir,
81
- manifestPath,
82
- skipFunctionsCache,
83
- siteEnv,
84
- rootDir: siteRoot,
85
- }),
86
- hashConfig({ config }),
87
- ])
88
-
89
- const files = { ...staticFiles, [configFile.normalizedPath]: configFile.hash }
90
- const filesShaMap = { ...staticShaMap, [configFile.hash]: [configFile] }
91
-
92
- const edgeFunctionsCount = Object.keys(files).filter(isEdgeFunctionFile).length
93
- const filesCount = Object.keys(files).length - edgeFunctionsCount
94
- const functionsCount = Object.keys(functions).length
95
- const stats = buildStatsString([
96
- filesCount > 0 && `${filesCount} files`,
97
- functionsCount > 0 && `${functionsCount} functions`,
98
- edgeFunctionsCount > 0 && 'edge functions',
99
- ])
100
-
101
- statusCb({
102
- type: 'hashing',
103
- msg: `Finished hashing ${stats}`,
104
- phase: 'stop',
105
- })
106
-
107
- if (filesCount === 0 && functionsCount === 0) {
108
- throw new Error('No files or functions to deploy')
109
- }
110
-
111
- if (functionsWithNativeModules.length !== 0) {
112
- warn(`Modules with native dependencies\n
113
- ${functionsWithNativeModules.map(({ name }) => `- ${name}`).join('\n')}
13
+ // @ts-expect-error TS(7006) FIXME: Parameter 'api' implicitly has an 'any' type.
14
+ api,
15
+ // @ts-expect-error TS(7006) FIXME: Parameter 'siteId' implicitly has an 'any' type.
16
+ siteId,
17
+ // @ts-expect-error TS(7006) FIXME: Parameter 'dir' implicitly has an 'any' type.
18
+ dir, {
19
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
20
+ assetType,
21
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
22
+ branch, concurrentHash = DEFAULT_CONCURRENT_HASH, concurrentUpload = DEFAULT_CONCURRENT_UPLOAD,
23
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
24
+ config,
25
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
26
+ deployId, deployTimeout = DEFAULT_DEPLOY_TIMEOUT, draft = false,
27
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
28
+ filter, fnDir = [],
29
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
30
+ functionsConfig,
31
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
32
+ hashAlgorithm,
33
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
34
+ manifestPath, maxRetry = DEFAULT_MAX_RETRY,
35
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
36
+ siteEnv,
37
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
38
+ siteRoot,
39
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
40
+ skipFunctionsCache, statusCb = () => {
41
+ /* default to noop */
42
+ }, syncFileLimit = DEFAULT_SYNC_LIMIT, tmpDir = temporaryDirectory(),
43
+ // @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
44
+ workingDir, } = {}) => {
45
+ // @ts-expect-error TS(2554) FIXME: Expected 0 arguments, but got 1.
46
+ statusCb({
47
+ type: 'hashing',
48
+ msg: `Hashing files...`,
49
+ phase: 'start',
50
+ });
51
+ const edgeFunctionsDistPath = await getDistPathIfExists(workingDir);
52
+ const [{ files: staticFiles, filesShaMap: staticShaMap }, { fnConfig, fnShaMap, functionSchedules, functions, functionsWithNativeModules }, configFile,] = await Promise.all([
53
+ hashFiles({
54
+ assetType,
55
+ concurrentHash,
56
+ directories: [dir, edgeFunctionsDistPath].filter(Boolean),
57
+ filter,
58
+ hashAlgorithm,
59
+ normalizer: deployFileNormalizer.bind(null, workingDir),
60
+ statusCb,
61
+ }),
62
+ hashFns(fnDir, {
63
+ functionsConfig,
64
+ tmpDir,
65
+ concurrentHash,
66
+ hashAlgorithm,
67
+ statusCb,
68
+ assetType,
69
+ // @ts-expect-error TS(2345) FIXME: Argument of type '{ functionsConfig: any; tmpDir: ... Remove this comment to see the full error message
70
+ workingDir,
71
+ manifestPath,
72
+ skipFunctionsCache,
73
+ siteEnv,
74
+ rootDir: siteRoot,
75
+ }),
76
+ hashConfig({ config }),
77
+ ]);
78
+ const files = { ...staticFiles, [configFile.normalizedPath]: configFile.hash };
79
+ const filesShaMap = { ...staticShaMap, [configFile.hash]: [configFile] };
80
+ const edgeFunctionsCount = Object.keys(files).filter(isEdgeFunctionFile).length;
81
+ const filesCount = Object.keys(files).length - edgeFunctionsCount;
82
+ const functionsCount = Object.keys(functions).length;
83
+ const stats = buildStatsString([
84
+ filesCount > 0 && `${filesCount} files`,
85
+ functionsCount > 0 && `${functionsCount} functions`,
86
+ edgeFunctionsCount > 0 && 'edge functions',
87
+ ]);
88
+ // @ts-expect-error TS(2554) FIXME: Expected 0 arguments, but got 1.
89
+ statusCb({
90
+ type: 'hashing',
91
+ msg: `Finished hashing ${stats}`,
92
+ phase: 'stop',
93
+ });
94
+ if (filesCount === 0 && functionsCount === 0) {
95
+ throw new Error('No files or functions to deploy');
96
+ }
97
+ if (functionsWithNativeModules.length !== 0) {
98
+ // @ts-expect-error TS(7031) FIXME: Binding element 'name' implicitly has an 'any' typ... Remove this comment to see the full error message
99
+ const functionsWithNativeModulesMessage = functionsWithNativeModules.map(({ name }) => `- ${name}`).join('\n');
100
+ warn(`Modules with native dependencies\n
101
+ ${functionsWithNativeModulesMessage}
114
102
 
115
103
  The serverless functions above use Node.js modules with native dependencies, which
116
104
  must be installed on a system with the same architecture as the function runtime. A
@@ -118,74 +106,66 @@ mismatch in the system and runtime may lead to errors when invoking your functio
118
106
  To ensure your functions work as expected, we recommend using continuous deployment
119
107
  instead of manual deployment.
120
108
 
121
- For more information, visit https://ntl.fyi/cli-native-modules.`)
122
- }
123
-
124
- statusCb({
125
- type: 'create-deploy',
126
- msg: 'CDN diffing files...',
127
- phase: 'start',
128
- })
129
-
130
- const deployParams = cleanDeep({
131
- siteId,
132
- deploy_id: deployId,
133
- body: {
134
- files,
135
- functions,
136
- function_schedules: functionSchedules,
137
- functions_config: fnConfig,
138
- async: Object.keys(files).length > syncFileLimit,
139
- branch,
140
- draft,
141
- },
142
- })
143
- let deploy = await api.updateSiteDeploy(deployParams)
144
-
145
- if (deployParams.body.async) deploy = await waitForDiff(api, deploy.id, siteId, deployTimeout)
146
-
147
- const { required: requiredFiles, required_functions: requiredFns } = deploy
148
-
149
- statusCb({
150
- type: 'create-deploy',
151
- msg: `CDN requesting ${requiredFiles.length} files${
152
- Array.isArray(requiredFns) ? ` and ${requiredFns.length} functions` : ''
153
- }`,
154
- phase: 'stop',
155
- })
156
-
157
- const filesUploadList = getUploadList(requiredFiles, filesShaMap)
158
- const functionsUploadList = getUploadList(requiredFns, fnShaMap)
159
- const uploadList = [...filesUploadList, ...functionsUploadList]
160
-
161
- await uploadFiles(api, deployId, uploadList, { concurrentUpload, statusCb, maxRetry })
162
-
163
- statusCb({
164
- type: 'wait-for-deploy',
165
- msg: 'Waiting for deploy to go live...',
166
- phase: 'start',
167
- })
168
- deploy = await waitForDeploy(api, deployId, siteId, deployTimeout)
169
-
170
- statusCb({
171
- type: 'wait-for-deploy',
172
- msg: draft ? 'Draft deploy is live!' : 'Deploy is live!',
173
- phase: 'stop',
174
- })
175
-
176
- await rm(tmpDir, { force: true, recursive: true })
177
-
178
- const deployManifest = {
179
- deployId,
180
- deploy,
181
- uploadList,
182
- }
183
- return deployManifest
184
- }
185
-
109
+ For more information, visit https://ntl.fyi/cli-native-modules.`);
110
+ }
111
+ // @ts-expect-error TS(2554) FIXME: Expected 0 arguments, but got 1.
112
+ statusCb({
113
+ type: 'create-deploy',
114
+ msg: 'CDN diffing files...',
115
+ phase: 'start',
116
+ });
117
+ // @ts-expect-error TS(2349) This expression is not callable
118
+ const deployParams = cleanDeep({
119
+ siteId,
120
+ deploy_id: deployId,
121
+ body: {
122
+ files,
123
+ functions,
124
+ function_schedules: functionSchedules,
125
+ functions_config: fnConfig,
126
+ async: Object.keys(files).length > syncFileLimit,
127
+ branch,
128
+ draft,
129
+ },
130
+ });
131
+ let deploy = await api.updateSiteDeploy(deployParams);
132
+ if (deployParams.body.async)
133
+ deploy = await waitForDiff(api, deploy.id, siteId, deployTimeout);
134
+ const { required: requiredFiles, required_functions: requiredFns } = deploy;
135
+ // @ts-expect-error TS(2554) FIXME: Expected 0 arguments, but got 1.
136
+ statusCb({
137
+ type: 'create-deploy',
138
+ msg: `CDN requesting ${requiredFiles.length} files${Array.isArray(requiredFns) ? ` and ${requiredFns.length} functions` : ''}`,
139
+ phase: 'stop',
140
+ });
141
+ const filesUploadList = getUploadList(requiredFiles, filesShaMap);
142
+ const functionsUploadList = getUploadList(requiredFns, fnShaMap);
143
+ const uploadList = [...filesUploadList, ...functionsUploadList];
144
+ await uploadFiles(api, deployId, uploadList, { concurrentUpload, statusCb, maxRetry });
145
+ // @ts-expect-error TS(2554) FIXME: Expected 0 arguments, but got 1.
146
+ statusCb({
147
+ type: 'wait-for-deploy',
148
+ msg: 'Waiting for deploy to go live...',
149
+ phase: 'start',
150
+ });
151
+ deploy = await waitForDeploy(api, deployId, siteId, deployTimeout);
152
+ // @ts-expect-error TS(2554) FIXME: Expected 0 arguments, but got 1.
153
+ statusCb({
154
+ type: 'wait-for-deploy',
155
+ msg: draft ? 'Draft deploy is live!' : 'Deploy is live!',
156
+ phase: 'stop',
157
+ });
158
+ await rm(tmpDir, { force: true, recursive: true });
159
+ const deployManifest = {
160
+ deployId,
161
+ deploy,
162
+ uploadList,
163
+ };
164
+ return deployManifest;
165
+ };
166
+ // @ts-expect-error TS(7006) FIXME: Parameter 'possibleParts' implicitly has an 'any' ... Remove this comment to see the full error message
186
167
  const buildStatsString = (possibleParts) => {
187
- const parts = possibleParts.filter(Boolean)
188
- const message = parts.slice(0, -1).join(', ')
189
-
190
- return parts.length > 1 ? `${message} and ${parts[parts.length - 1]}` : message
191
- }
168
+ const parts = possibleParts.filter(Boolean);
169
+ const message = parts.slice(0, -1).join(', ');
170
+ return parts.length > 1 ? `${message} and ${parts[parts.length - 1]}` : message;
171
+ };
@@ -1,26 +1,26 @@
1
- import hasha from 'hasha'
2
- import tomlify from 'tomlify-j0.4'
3
-
1
+ import hasha from 'hasha';
2
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'toml... Remove this comment to see the full error message
3
+ import tomlify from 'tomlify-j0.4';
4
+ // @ts-expect-error TS(7031) FIXME: Binding element 'config' implicitly has an 'any' t... Remove this comment to see the full error message
4
5
  export const hashConfig = ({ config }) => {
5
- if (!config) throw new Error('Missing config option')
6
- const configString = serializeToml(config)
7
-
8
- const hash = hasha(configString, { algorithm: 'sha1' })
9
-
10
- return {
11
- assetType: 'file',
12
- body: configString,
13
- hash,
14
- normalizedPath: 'netlify.toml',
15
- }
16
- }
17
-
6
+ if (!config)
7
+ throw new Error('Missing config option');
8
+ const configString = serializeToml(config);
9
+ const hash = hasha(configString, { algorithm: 'sha1' });
10
+ return {
11
+ assetType: 'file',
12
+ body: configString,
13
+ hash,
14
+ normalizedPath: 'netlify.toml',
15
+ };
16
+ };
17
+ // @ts-expect-error TS(7006) FIXME: Parameter 'object' implicitly has an 'any' type.
18
18
  export const serializeToml = function (object) {
19
- return tomlify.toToml(object, { space: 2, replace: replaceTomlValue })
20
- }
21
-
19
+ return tomlify.toToml(object, { space: 2, replace: replaceTomlValue });
20
+ };
22
21
  // `tomlify-j0.4` serializes integers as floats, e.g. `200.0`.
23
22
  // This is a problem with `redirects[*].status`.
23
+ // @ts-expect-error TS(7006) FIXME: Parameter 'key' implicitly has an 'any' type.
24
24
  const replaceTomlValue = function (key, value) {
25
- return Number.isInteger(value) ? String(value) : false
26
- }
25
+ return Number.isInteger(value) ? String(value) : false;
26
+ };
@@ -1,38 +1,34 @@
1
- import { promisify } from 'util'
2
-
3
- import walker from 'folder-walker'
4
- import pumpModule from 'pump'
5
-
6
- import { fileFilterCtor, fileNormalizerCtor, hasherCtor, manifestCollectorCtor } from './hasher-segments.mjs'
7
-
8
- const pump = promisify(pumpModule)
9
-
10
- const hashFiles = async ({
11
- assetType = 'file',
12
- concurrentHash,
13
- directories,
14
- filter,
15
- hashAlgorithm = 'sha1',
16
- normalizer,
17
- statusCb,
18
- }) => {
19
- if (!filter) throw new Error('Missing filter function option')
20
-
21
- const fileStream = walker(directories, { filter })
22
- const fileFilter = fileFilterCtor()
23
- const hasher = hasherCtor({ concurrentHash, hashAlgorithm })
24
- const fileNormalizer = fileNormalizerCtor({ assetType, normalizer })
25
-
26
- // Written to by manifestCollector
27
- // normalizedPath: hash (wanted by deploy API)
28
- const files = {}
29
- // hash: [fileObj, fileObj, fileObj]
30
- const filesShaMap = {}
31
- const manifestCollector = manifestCollectorCtor(files, filesShaMap, { statusCb, assetType })
32
-
33
- await pump(fileStream, fileFilter, hasher, fileNormalizer, manifestCollector)
34
-
35
- return { files, filesShaMap }
36
- }
37
-
38
- export default hashFiles
1
+ import { promisify } from 'util';
2
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'fold... Remove this comment to see the full error message
3
+ import walker from 'folder-walker';
4
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'pump... Remove this comment to see the full error message
5
+ import pumpModule from 'pump';
6
+ import { fileFilterCtor, fileNormalizerCtor, hasherCtor, manifestCollectorCtor } from './hasher-segments.mjs';
7
+ const pump = promisify(pumpModule);
8
+ const hashFiles = async ({ assetType = 'file',
9
+ // @ts-expect-error TS(7031) FIXME: Binding element 'concurrentHash' implicitly has an... Remove this comment to see the full error message
10
+ concurrentHash,
11
+ // @ts-expect-error TS(7031) FIXME: Binding element 'directories' implicitly has an 'a... Remove this comment to see the full error message
12
+ directories,
13
+ // @ts-expect-error TS(7031) FIXME: Binding element 'filter' implicitly has an 'any' t... Remove this comment to see the full error message
14
+ filter, hashAlgorithm = 'sha1',
15
+ // @ts-expect-error TS(7031) FIXME: Binding element 'normalizer' implicitly has an 'an... Remove this comment to see the full error message
16
+ normalizer,
17
+ // @ts-expect-error TS(7031) FIXME: Binding element 'statusCb' implicitly has an 'any'... Remove this comment to see the full error message
18
+ statusCb, }) => {
19
+ if (!filter)
20
+ throw new Error('Missing filter function option');
21
+ const fileStream = walker(directories, { filter });
22
+ const fileFilter = fileFilterCtor();
23
+ const hasher = hasherCtor({ concurrentHash, hashAlgorithm });
24
+ const fileNormalizer = fileNormalizerCtor({ assetType, normalizer });
25
+ // Written to by manifestCollector
26
+ // normalizedPath: hash (wanted by deploy API)
27
+ const files = {};
28
+ // hash: [fileObj, fileObj, fileObj]
29
+ const filesShaMap = {};
30
+ const manifestCollector = manifestCollectorCtor(files, filesShaMap, { statusCb, assetType });
31
+ await pump(fileStream, fileFilter, hasher, fileNormalizer, manifestCollector);
32
+ return { files, filesShaMap };
33
+ };
34
+ export default hashFiles;