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,162 +1,157 @@
1
- import { readFile } from 'fs/promises'
2
- import path from 'path'
3
- import { promisify } from 'util'
4
-
5
- import { zipFunctions } from '@netlify/zip-it-and-ship-it'
6
- import fromArray from 'from2-array'
7
- import pumpModule from 'pump'
8
-
9
- import { getPathInProject } from '../../lib/settings.mjs'
10
- import { INTERNAL_FUNCTIONS_FOLDER } from '../functions/functions.mjs'
11
-
12
- import { hasherCtor, manifestCollectorCtor } from './hasher-segments.mjs'
13
-
14
- const pump = promisify(pumpModule)
15
-
1
+ import { readFile } from 'fs/promises';
2
+ import path from 'path';
3
+ import { promisify } from 'util';
4
+ import { zipFunctions } from '@netlify/zip-it-and-ship-it';
5
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'from... Remove this comment to see the full error message
6
+ import fromArray from 'from2-array';
7
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'pump... Remove this comment to see the full error message
8
+ import pumpModule from 'pump';
9
+ import { getPathInProject } from '../../lib/settings.mjs';
10
+ import { INTERNAL_FUNCTIONS_FOLDER } from '../functions/functions.mjs';
11
+ import { hasherCtor, manifestCollectorCtor } from './hasher-segments.mjs';
12
+ const pump = promisify(pumpModule);
16
13
  // Maximum age of functions manifest (2 minutes).
17
- const MANIFEST_FILE_TTL = 12e4
18
-
19
- const getFunctionZips = async ({
20
- directories,
21
- functionsConfig,
22
- manifestPath,
23
- rootDir,
24
- skipFunctionsCache,
25
- statusCb,
26
- tmpDir,
27
- }) => {
28
- statusCb({
29
- type: 'functions-manifest',
30
- msg: 'Looking for a functions cache...',
31
- phase: 'start',
32
- })
33
-
34
- if (manifestPath) {
35
- try {
36
- // read manifest.json file
37
- const { functions, timestamp } = JSON.parse(await readFile(manifestPath))
38
- const manifestAge = Date.now() - timestamp
39
-
40
- if (manifestAge > MANIFEST_FILE_TTL) {
41
- throw new Error('Manifest expired')
42
- }
43
-
44
- statusCb({
45
- type: 'functions-manifest',
46
- msg: 'Deploying functions from cache (use --skip-functions-cache to override)',
47
- phase: 'stop',
48
- })
49
-
50
- return functions
51
- } catch {
52
- statusCb({
14
+ const MANIFEST_FILE_TTL = 12e4;
15
+ const getFunctionZips = async ({
16
+ // @ts-expect-error TS(7031) FIXME: Binding element 'directories' implicitly has an 'a... Remove this comment to see the full error message
17
+ directories,
18
+ // @ts-expect-error TS(7031) FIXME: Binding element 'functionsConfig' implicitly has a... Remove this comment to see the full error message
19
+ functionsConfig,
20
+ // @ts-expect-error TS(7031) FIXME: Binding element 'manifestPath' implicitly has an '... Remove this comment to see the full error message
21
+ manifestPath,
22
+ // @ts-expect-error TS(7031) FIXME: Binding element 'rootDir' implicitly has an 'any' ... Remove this comment to see the full error message
23
+ rootDir,
24
+ // @ts-expect-error TS(7031) FIXME: Binding element 'skipFunctionsCache' implicitly ha... Remove this comment to see the full error message
25
+ skipFunctionsCache,
26
+ // @ts-expect-error TS(7031) FIXME: Binding element 'statusCb' implicitly has an 'any'... Remove this comment to see the full error message
27
+ statusCb,
28
+ // @ts-expect-error TS(7031) FIXME: Binding element 'tmpDir' implicitly has an 'any' t... Remove this comment to see the full error message
29
+ tmpDir, }) => {
30
+ statusCb({
53
31
  type: 'functions-manifest',
54
- msg: 'Ignored invalid or expired functions cache',
55
- phase: 'stop',
56
- })
32
+ msg: 'Looking for a functions cache...',
33
+ phase: 'start',
34
+ });
35
+ if (manifestPath) {
36
+ try {
37
+ // read manifest.json file
38
+ // @ts-expect-error TS(2345) FIXME: Argument of type 'Buffer' is not assignable to par... Remove this comment to see the full error message
39
+ const { functions, timestamp } = JSON.parse(await readFile(manifestPath));
40
+ const manifestAge = Date.now() - timestamp;
41
+ if (manifestAge > MANIFEST_FILE_TTL) {
42
+ throw new Error('Manifest expired');
43
+ }
44
+ statusCb({
45
+ type: 'functions-manifest',
46
+ msg: 'Deploying functions from cache (use --skip-functions-cache to override)',
47
+ phase: 'stop',
48
+ });
49
+ return functions;
50
+ }
51
+ catch {
52
+ statusCb({
53
+ type: 'functions-manifest',
54
+ msg: 'Ignored invalid or expired functions cache',
55
+ phase: 'stop',
56
+ });
57
+ }
57
58
  }
58
- } else {
59
- const msg = skipFunctionsCache
60
- ? 'Ignoring functions cache (use without --skip-functions-cache to change)'
61
- : 'No cached functions were found'
62
-
63
- statusCb({
64
- type: 'functions-manifest',
65
- msg,
66
- phase: 'stop',
67
- })
68
- }
69
-
70
- return await zipFunctions(directories, tmpDir, {
71
- basePath: rootDir,
72
- configFileDirectories: [getPathInProject([INTERNAL_FUNCTIONS_FOLDER])],
73
- config: functionsConfig,
74
- })
75
- }
76
-
59
+ else {
60
+ const msg = skipFunctionsCache
61
+ ? 'Ignoring functions cache (use without --skip-functions-cache to change)'
62
+ : 'No cached functions were found';
63
+ statusCb({
64
+ type: 'functions-manifest',
65
+ msg,
66
+ phase: 'stop',
67
+ });
68
+ }
69
+ return await zipFunctions(directories, tmpDir, {
70
+ basePath: rootDir,
71
+ configFileDirectories: [getPathInProject([INTERNAL_FUNCTIONS_FOLDER])],
72
+ config: functionsConfig,
73
+ });
74
+ };
77
75
  const hashFns = async (
78
- directories,
79
- {
80
- assetType = 'function',
81
- concurrentHash,
82
- functionsConfig,
83
- hashAlgorithm = 'sha256',
84
- manifestPath,
85
- rootDir,
86
- skipFunctionsCache,
87
- statusCb,
88
- tmpDir,
89
- },
90
- ) => {
91
- // Early out if no functions directories are configured.
92
- if (directories.length === 0) {
93
- return { functions: {}, functionsWithNativeModules: [], shaMap: {} }
94
- }
95
-
96
- if (!tmpDir) {
97
- throw new Error('Missing tmpDir directory for zipping files')
98
- }
99
-
100
- const functionZips = await getFunctionZips({
101
- directories,
102
- functionsConfig,
103
- manifestPath,
104
- rootDir,
105
- skipFunctionsCache,
106
- statusCb,
107
- tmpDir,
108
- })
109
- const fileObjs = functionZips.map(
76
+ // @ts-expect-error TS(7006) FIXME: Parameter 'directories' implicitly has an 'any' ty... Remove this comment to see the full error message
77
+ directories, { assetType = 'function',
78
+ // @ts-expect-error TS(7031) FIXME: Binding element 'concurrentHash' implicitly has an... Remove this comment to see the full error message
79
+ concurrentHash,
80
+ // @ts-expect-error TS(7031) FIXME: Binding element 'functionsConfig' implicitly has a... Remove this comment to see the full error message
81
+ functionsConfig, hashAlgorithm = 'sha256',
82
+ // @ts-expect-error TS(7031) FIXME: Binding element 'manifestPath' implicitly has an '... Remove this comment to see the full error message
83
+ manifestPath,
84
+ // @ts-expect-error TS(7031) FIXME: Binding element 'rootDir' implicitly has an 'any' ... Remove this comment to see the full error message
85
+ rootDir,
86
+ // @ts-expect-error TS(7031) FIXME: Binding element 'skipFunctionsCache' implicitly ha... Remove this comment to see the full error message
87
+ skipFunctionsCache,
88
+ // @ts-expect-error TS(7031) FIXME: Binding element 'statusCb' implicitly has an 'any'... Remove this comment to see the full error message
89
+ statusCb,
90
+ // @ts-expect-error TS(7031) FIXME: Binding element 'tmpDir' implicitly has an 'any' t... Remove this comment to see the full error message
91
+ tmpDir, }) => {
92
+ // Early out if no functions directories are configured.
93
+ if (directories.length === 0) {
94
+ return { functions: {}, functionsWithNativeModules: [], shaMap: {} };
95
+ }
96
+ if (!tmpDir) {
97
+ throw new Error('Missing tmpDir directory for zipping files');
98
+ }
99
+ const functionZips = await getFunctionZips({
100
+ directories,
101
+ functionsConfig,
102
+ manifestPath,
103
+ rootDir,
104
+ skipFunctionsCache,
105
+ statusCb,
106
+ tmpDir,
107
+ });
108
+ const fileObjs = functionZips.map(
109
+ // @ts-expect-error TS(7031) FIXME: Binding element 'buildData' implicitly has an 'any... Remove this comment to see the full error message
110
110
  ({ buildData, displayName, generator, invocationMode, path: functionPath, runtime, runtimeVersion }) => ({
111
- filepath: functionPath,
112
- root: tmpDir,
113
- relname: path.relative(tmpDir, functionPath),
114
- basename: path.basename(functionPath),
115
- extname: path.extname(functionPath),
116
- type: 'file',
117
- assetType: 'function',
118
- normalizedPath: path.basename(functionPath, path.extname(functionPath)),
119
- runtime: runtimeVersion ?? runtime,
120
- displayName,
121
- generator,
122
- invocationMode,
123
- buildData,
124
- }),
125
- )
126
- const fnConfig = functionZips
127
- .filter((func) => Boolean(func.displayName || func.generator || func.routes || func.buildData))
128
- .reduce(
129
- (funcs, curr) => ({
111
+ filepath: functionPath,
112
+ root: tmpDir,
113
+ relname: path.relative(tmpDir, functionPath),
114
+ basename: path.basename(functionPath),
115
+ extname: path.extname(functionPath),
116
+ type: 'file',
117
+ assetType: 'function',
118
+ normalizedPath: path.basename(functionPath, path.extname(functionPath)),
119
+ runtime: runtimeVersion ?? runtime,
120
+ displayName,
121
+ generator,
122
+ invocationMode,
123
+ buildData,
124
+ }));
125
+ const fnConfig = functionZips
126
+ // @ts-expect-error TS(7006) FIXME: Parameter 'func' implicitly has an 'any' type.
127
+ .filter((func) => Boolean(func.displayName || func.generator || func.routes || func.buildData))
128
+ .reduce(
129
+ // @ts-expect-error TS(7006) FIXME: Parameter 'funcs' implicitly has an 'any' type.
130
+ (funcs, curr) => ({
130
131
  ...funcs,
131
132
  [curr.name]: {
132
- display_name: curr.displayName,
133
- generator: curr.generator,
134
- routes: curr.routes,
135
- build_data: curr.buildData,
133
+ display_name: curr.displayName,
134
+ generator: curr.generator,
135
+ routes: curr.routes,
136
+ build_data: curr.buildData,
136
137
  },
137
- }),
138
- {},
139
- )
140
- const functionSchedules = functionZips
141
- .map(({ name, schedule }) => schedule && { name, cron: schedule })
142
- .filter(Boolean)
143
- const functionsWithNativeModules = functionZips.filter(
144
- ({ nativeNodeModules }) => nativeNodeModules !== undefined && Object.keys(nativeNodeModules).length !== 0,
145
- )
146
-
147
- const functionStream = fromArray.obj(fileObjs)
148
-
149
- const hasher = hasherCtor({ concurrentHash, hashAlgorithm })
150
-
151
- // Written to by manifestCollector
152
- // normalizedPath: hash (wanted by deploy API)
153
- const functions = {}
154
- // hash: [fileObj, fileObj, fileObj]
155
- const fnShaMap = {}
156
- const manifestCollector = manifestCollectorCtor(functions, fnShaMap, { statusCb, assetType })
157
-
158
- await pump(functionStream, hasher, manifestCollector)
159
- return { functionSchedules, functions, functionsWithNativeModules, fnShaMap, fnConfig }
160
- }
161
-
162
- export default hashFns
138
+ }), {});
139
+ const functionSchedules = functionZips
140
+ // @ts-expect-error TS(7031) FIXME: Binding element 'name' implicitly has an 'any' typ... Remove this comment to see the full error message
141
+ .map(({ name, schedule }) => schedule && { name, cron: schedule })
142
+ .filter(Boolean);
143
+ const functionsWithNativeModules = functionZips.filter(
144
+ // @ts-expect-error TS(7031) FIXME: Binding element 'nativeNodeModules' implicitly has... Remove this comment to see the full error message
145
+ ({ nativeNodeModules }) => nativeNodeModules !== undefined && Object.keys(nativeNodeModules).length !== 0);
146
+ const functionStream = fromArray.obj(fileObjs);
147
+ const hasher = hasherCtor({ concurrentHash, hashAlgorithm });
148
+ // Written to by manifestCollector
149
+ // normalizedPath: hash (wanted by deploy API)
150
+ const functions = {};
151
+ // hash: [fileObj, fileObj, fileObj]
152
+ const fnShaMap = {};
153
+ const manifestCollector = manifestCollectorCtor(functions, fnShaMap, { statusCb, assetType });
154
+ await pump(functionStream, hasher, manifestCollector);
155
+ return { functionSchedules, functions, functionsWithNativeModules, fnShaMap, fnConfig };
156
+ };
157
+ export default hashFns;
@@ -1,63 +1,69 @@
1
- import flushWriteStream from 'flush-write-stream'
2
- import hasha from 'hasha'
3
- import transform from 'parallel-transform'
4
- import { objCtor as objFilterCtor } from 'through2-filter'
5
- import { obj as map } from 'through2-map'
6
-
7
- import { normalizePath } from './util.mjs'
8
-
1
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'flus... Remove this comment to see the full error message
2
+ import flushWriteStream from 'flush-write-stream';
3
+ import hasha from 'hasha';
4
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'para... Remove this comment to see the full error message
5
+ import transform from 'parallel-transform';
6
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'thro... Remove this comment to see the full error message
7
+ import { objCtor as objFilterCtor } from 'through2-filter';
8
+ // @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'thro... Remove this comment to see the full error message
9
+ import { obj as map } from 'through2-map';
10
+ import { normalizePath } from './util.mjs';
9
11
  // a parallel transform stream segment ctor that hashes fileObj's created by folder-walker
10
12
  // TODO: use promises instead of callbacks
11
13
  /* eslint-disable promise/prefer-await-to-callbacks */
14
+ // @ts-expect-error TS(7031) FIXME: Binding element 'concurrentHash' implicitly has an... Remove this comment to see the full error message
12
15
  export const hasherCtor = ({ concurrentHash, hashAlgorithm }) => {
13
- const hashaOpts = { algorithm: hashAlgorithm }
14
- if (!concurrentHash) throw new Error('Missing required opts')
15
- return transform(concurrentHash, { objectMode: true }, async (fileObj, cb) => {
16
- try {
17
- const hash = await hasha.fromFile(fileObj.filepath, hashaOpts)
18
- // insert hash and asset type to file obj
19
- return cb(null, { ...fileObj, hash })
20
- } catch (error) {
21
- return cb(error)
22
- }
23
- })
24
- }
25
-
16
+ const hashaOpts = { algorithm: hashAlgorithm };
17
+ if (!concurrentHash)
18
+ throw new Error('Missing required opts');
19
+ // @ts-expect-error TS(7006) FIXME: Parameter 'fileObj' implicitly has an 'any' type.
20
+ return transform(concurrentHash, { objectMode: true }, async (fileObj, cb) => {
21
+ try {
22
+ const hash = await hasha.fromFile(fileObj.filepath, hashaOpts);
23
+ // insert hash and asset type to file obj
24
+ return cb(null, { ...fileObj, hash });
25
+ }
26
+ catch (error) {
27
+ return cb(error);
28
+ }
29
+ });
30
+ };
26
31
  // Inject normalized file names into normalizedPath and assetType
27
- export const fileNormalizerCtor = ({ assetType, normalizer: normalizeFunction }) =>
28
- map((fileObj) => {
29
- const normalizedFile = { ...fileObj, assetType, normalizedPath: normalizePath(fileObj.relname) }
30
-
32
+ // @ts-expect-error TS(7031) FIXME: Binding element 'assetType' implicitly has an 'any... Remove this comment to see the full error message
33
+ export const fileNormalizerCtor = ({ assetType, normalizer: normalizeFunction }) =>
34
+ // @ts-expect-error TS(7006) FIXME: Parameter 'fileObj' implicitly has an 'any' type.
35
+ map((fileObj) => {
36
+ const normalizedFile = { ...fileObj, assetType, normalizedPath: normalizePath(fileObj.relname) };
31
37
  if (normalizeFunction !== undefined) {
32
- return normalizeFunction(normalizedFile)
38
+ return normalizeFunction(normalizedFile);
33
39
  }
34
-
35
- return normalizedFile
36
- })
37
-
40
+ return normalizedFile;
41
+ });
38
42
  // A writable stream segment ctor that normalizes file paths, and writes shaMap's
43
+ // @ts-expect-error TS(7006) FIXME: Parameter 'filesObj' implicitly has an 'any' type.
39
44
  export const manifestCollectorCtor = (filesObj, shaMap, { assetType, statusCb }) => {
40
- if (!statusCb || !assetType) throw new Error('Missing required options')
41
- return flushWriteStream.obj((fileObj, _, cb) => {
42
- filesObj[fileObj.normalizedPath] = fileObj.hash
43
-
44
- // We map a hash to multiple fileObj's because the same file
45
- // might live in two different locations
46
-
47
- if (Array.isArray(shaMap[fileObj.hash])) {
48
- shaMap[fileObj.hash].push(fileObj)
49
- } else {
50
- shaMap[fileObj.hash] = [fileObj]
51
- }
52
- statusCb({
53
- type: 'hashing',
54
- msg: `Hashing ${fileObj.relname}`,
55
- phase: 'progress',
56
- })
57
- cb(null)
58
- })
59
- }
45
+ if (!statusCb || !assetType)
46
+ throw new Error('Missing required options');
47
+ // @ts-expect-error TS(7006) FIXME: Parameter 'fileObj' implicitly has an 'any' type.
48
+ return flushWriteStream.obj((fileObj, _, cb) => {
49
+ filesObj[fileObj.normalizedPath] = fileObj.hash;
50
+ // We map a hash to multiple fileObj's because the same file
51
+ // might live in two different locations
52
+ if (Array.isArray(shaMap[fileObj.hash])) {
53
+ shaMap[fileObj.hash].push(fileObj);
54
+ }
55
+ else {
56
+ shaMap[fileObj.hash] = [fileObj];
57
+ }
58
+ statusCb({
59
+ type: 'hashing',
60
+ msg: `Hashing ${fileObj.relname}`,
61
+ phase: 'progress',
62
+ });
63
+ cb(null);
64
+ });
65
+ };
60
66
  /* eslint-enable promise/prefer-await-to-callbacks */
61
-
62
67
  // transform stream ctor that filters folder-walker results for only files
63
- export const fileFilterCtor = objFilterCtor((fileObj) => fileObj.type === 'file')
68
+ // @ts-expect-error TS(7006) FIXME: Parameter 'fileObj' implicitly has an 'any' type.
69
+ export const fileFilterCtor = objFilterCtor((fileObj) => fileObj.type === 'file');