netlify-cli 17.3.2 → 17.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -138
- package/npm-shrinkwrap.json +76 -76
- package/package.json +16 -15
- package/src/commands/addons/addons-auth.mjs +27 -30
- package/src/commands/addons/addons-config.mjs +145 -154
- package/src/commands/addons/addons-create.mjs +94 -108
- package/src/commands/addons/addons-delete.mjs +36 -41
- package/src/commands/addons/addons-list.mjs +38 -42
- package/src/commands/addons/addons.mjs +26 -28
- package/src/commands/addons/index.mjs +1 -1
- package/src/commands/api/api.mjs +45 -53
- package/src/commands/api/index.mjs +1 -1
- package/src/commands/base-command.mjs +597 -684
- package/src/commands/blobs/blobs-delete.mjs +35 -0
- package/src/commands/blobs/blobs-get.mjs +44 -0
- package/src/commands/blobs/blobs-list.mjs +48 -0
- package/src/commands/blobs/blobs-set.mjs +54 -0
- package/src/commands/blobs/blobs.mjs +32 -0
- package/src/commands/blobs/index.mjs +1 -0
- package/src/commands/build/build.mjs +55 -67
- package/src/commands/build/index.mjs +1 -1
- package/src/commands/completion/completion.mjs +41 -46
- package/src/commands/completion/index.mjs +1 -1
- package/src/commands/deploy/deploy.mjs +675 -710
- package/src/commands/deploy/index.mjs +1 -1
- package/src/commands/dev/dev-exec.mjs +20 -32
- package/src/commands/dev/dev.mjs +217 -302
- package/src/commands/dev/index.mjs +1 -1
- package/src/commands/dev/types.d.ts +30 -0
- package/src/commands/env/env-clone.mjs +157 -184
- package/src/commands/env/env-get.mjs +49 -68
- package/src/commands/env/env-import.mjs +100 -119
- package/src/commands/env/env-list.mjs +104 -129
- package/src/commands/env/env-set.mjs +160 -185
- package/src/commands/env/env-unset.mjs +104 -122
- package/src/commands/env/env.mjs +28 -30
- package/src/commands/env/index.mjs +1 -1
- package/src/commands/functions/functions-build.mjs +29 -41
- package/src/commands/functions/functions-create.mjs +533 -601
- package/src/commands/functions/functions-invoke.mjs +193 -216
- package/src/commands/functions/functions-list.mjs +45 -55
- package/src/commands/functions/functions-serve.mjs +51 -61
- package/src/commands/functions/functions.mjs +26 -32
- package/src/commands/functions/index.mjs +1 -1
- package/src/commands/index.mjs +2 -2
- package/src/commands/init/index.mjs +1 -1
- package/src/commands/init/init.mjs +138 -167
- package/src/commands/integration/deploy.mjs +337 -399
- package/src/commands/integration/index.mjs +12 -13
- package/src/commands/link/index.mjs +1 -1
- package/src/commands/link/link.mjs +298 -317
- package/src/commands/lm/index.mjs +1 -1
- package/src/commands/lm/lm-info.mjs +23 -31
- package/src/commands/lm/lm-install.mjs +13 -17
- package/src/commands/lm/lm-setup.mjs +80 -84
- package/src/commands/lm/lm-uninstall.mjs +7 -12
- package/src/commands/lm/lm.mjs +18 -22
- package/src/commands/login/index.mjs +1 -1
- package/src/commands/login/login.mjs +35 -41
- package/src/commands/logout/index.mjs +1 -1
- package/src/commands/logout/logout.mjs +25 -31
- package/src/commands/main.mjs +166 -201
- package/src/commands/open/index.mjs +1 -1
- package/src/commands/open/open-admin.mjs +15 -18
- package/src/commands/open/open-site.mjs +16 -19
- package/src/commands/open/open.mjs +24 -27
- package/src/commands/recipes/common.mjs +23 -34
- package/src/commands/recipes/index.mjs +1 -1
- package/src/commands/recipes/recipes-list.mjs +13 -20
- package/src/commands/recipes/recipes.mjs +59 -72
- package/src/commands/serve/index.mjs +1 -1
- package/src/commands/serve/serve.mjs +142 -189
- package/src/commands/sites/index.mjs +2 -2
- package/src/commands/sites/sites-create-template.mjs +214 -236
- package/src/commands/sites/sites-create.mjs +145 -157
- package/src/commands/sites/sites-delete.mjs +75 -81
- package/src/commands/sites/sites-list.mjs +63 -66
- package/src/commands/sites/sites.mjs +18 -20
- package/src/commands/status/index.mjs +1 -1
- package/src/commands/status/status-hooks.mjs +32 -34
- package/src/commands/status/status.mjs +99 -106
- package/src/commands/switch/index.mjs +1 -1
- package/src/commands/switch/switch.mjs +32 -37
- package/src/commands/types.d.ts +31 -0
- package/src/commands/unlink/index.mjs +1 -1
- package/src/commands/unlink/unlink.mjs +23 -29
- package/src/commands/watch/index.mjs +1 -1
- package/src/commands/watch/watch.mjs +91 -105
- package/src/functions-templates/javascript/hello/{{name}}.js +2 -3
- package/src/lib/account.mjs +4 -5
- package/src/lib/api.mjs +22 -20
- package/src/lib/blobs/blobs.mjs +36 -45
- package/src/lib/build.mjs +82 -85
- package/src/lib/completion/constants.mjs +2 -4
- package/src/lib/completion/generate-autocompletion.mjs +33 -36
- package/src/lib/completion/get-autocompletion.mjs +31 -35
- package/src/lib/completion/index.mjs +1 -1
- package/src/lib/completion/script.mjs +12 -19
- package/src/lib/edge-functions/bootstrap.mjs +3 -5
- package/src/lib/edge-functions/consts.mjs +9 -10
- package/src/lib/edge-functions/deploy.mjs +28 -34
- package/src/lib/edge-functions/editor-helper.mjs +29 -42
- package/src/lib/edge-functions/headers.mjs +24 -26
- package/src/lib/edge-functions/internal.mjs +38 -44
- package/src/lib/edge-functions/proxy.mjs +229 -228
- package/src/lib/edge-functions/registry.mjs +473 -574
- package/src/lib/exec-fetcher.mjs +115 -122
- package/src/lib/fs.mjs +28 -27
- package/src/lib/functions/background.mjs +16 -20
- package/src/lib/functions/config.mjs +12 -9
- package/src/lib/functions/form-submissions-handler.mjs +143 -149
- package/src/lib/functions/local-proxy.mjs +40 -44
- package/src/lib/functions/memoized-build.mjs +19 -21
- package/src/lib/functions/netlify-function.mjs +269 -249
- package/src/lib/functions/registry.mjs +509 -568
- package/src/lib/functions/runtimes/go/index.mjs +62 -71
- package/src/lib/functions/runtimes/index.mjs +8 -15
- package/src/lib/functions/runtimes/js/builders/netlify-lambda.mjs +55 -64
- package/src/lib/functions/runtimes/js/builders/zisi.mjs +135 -154
- package/src/lib/functions/runtimes/js/constants.mjs +1 -1
- package/src/lib/functions/runtimes/js/index.mjs +92 -109
- package/src/lib/functions/runtimes/js/worker.mjs +43 -45
- package/src/lib/functions/runtimes/rust/index.mjs +64 -73
- package/src/lib/functions/scheduled.mjs +70 -88
- package/src/lib/functions/server.mjs +269 -327
- package/src/lib/functions/synchronous.mjs +118 -147
- package/src/lib/functions/utils.mjs +38 -46
- package/src/lib/geo-location.mjs +69 -81
- package/src/lib/http-agent.mjs +87 -90
- package/src/lib/images/proxy.mjs +97 -99
- package/src/lib/log.mjs +6 -9
- package/src/lib/path.mjs +2 -1
- package/src/lib/render-error-template.mjs +19 -20
- package/src/lib/settings.mjs +17 -19
- package/src/lib/spinner.mjs +21 -23
- package/src/lib/string.mjs +4 -2
- package/src/recipes/vscode/index.mjs +69 -85
- package/src/recipes/vscode/settings.mjs +53 -58
- package/src/utils/addons/compare.mjs +31 -32
- package/src/utils/addons/diffs/index.mjs +16 -17
- package/src/utils/addons/diffs/options.mjs +99 -101
- package/src/utils/addons/prepare.mjs +100 -97
- package/src/utils/addons/prompts.mjs +73 -76
- package/src/utils/addons/render.mjs +33 -36
- package/src/utils/addons/validation.mjs +19 -15
- package/src/utils/banner.mjs +11 -16
- package/src/utils/build-info.mjs +65 -66
- package/src/utils/command-helpers.mjs +185 -199
- package/src/utils/create-deferred.mjs +9 -12
- package/src/utils/create-stream-promise.mjs +54 -47
- package/src/utils/deploy/constants.mjs +9 -11
- package/src/utils/deploy/deploy-site.mjs +162 -182
- package/src/utils/deploy/hash-config.mjs +21 -21
- package/src/utils/deploy/hash-files.mjs +34 -38
- package/src/utils/deploy/hash-fns.mjs +149 -154
- package/src/utils/deploy/hasher-segments.mjs +58 -52
- package/src/utils/deploy/upload-files.mjs +99 -113
- package/src/utils/deploy/util.mjs +85 -91
- package/src/utils/detect-server-settings.mjs +236 -268
- package/src/utils/dev.mjs +163 -178
- package/src/utils/dot-env.mjs +37 -42
- package/src/utils/env/index.mjs +148 -148
- package/src/utils/execa.mjs +9 -13
- package/src/utils/feature-flags.mjs +6 -5
- package/src/utils/framework-server.mjs +43 -52
- package/src/utils/functions/constants.mjs +1 -1
- package/src/utils/functions/functions.mjs +30 -40
- package/src/utils/functions/get-functions.mjs +28 -29
- package/src/utils/functions/index.mjs +3 -3
- package/src/utils/get-global-config.mjs +33 -36
- package/src/utils/get-package-json.mjs +14 -15
- package/src/utils/get-repo-data.mjs +54 -64
- package/src/utils/get-site.mjs +14 -14
- package/src/utils/gh-auth.mjs +79 -100
- package/src/utils/gitignore.mjs +37 -40
- package/src/utils/headers.mjs +33 -35
- package/src/utils/hooks/requires-site-info.mjs +26 -22
- package/src/utils/init/config-github.mjs +207 -219
- package/src/utils/init/config-manual.mjs +83 -100
- package/src/utils/init/config.mjs +25 -26
- package/src/utils/init/node-version.mjs +23 -30
- package/src/utils/init/plugins.mjs +12 -8
- package/src/utils/init/utils.mjs +152 -172
- package/src/utils/live-tunnel.mjs +118 -141
- package/src/utils/lm/install.mjs +220 -259
- package/src/utils/lm/requirements.mjs +54 -63
- package/src/utils/lm/steps.mjs +31 -31
- package/src/utils/lm/ui.mjs +13 -20
- package/src/utils/open-browser.mjs +31 -32
- package/src/utils/parse-raw-flags.mjs +39 -35
- package/src/utils/proxy-server.mjs +84 -71
- package/src/utils/proxy.mjs +696 -750
- package/src/utils/read-repo-url.mjs +48 -47
- package/src/utils/redirects.mjs +49 -49
- package/src/utils/request-id.mjs +2 -4
- package/src/utils/rules-proxy.mjs +96 -100
- package/src/utils/run-build.mjs +109 -132
- package/src/utils/shell.mjs +99 -106
- package/src/utils/sign-redirect.mjs +14 -14
- package/src/utils/sites/utils.mjs +48 -55
- package/src/utils/state-config.mjs +101 -101
- package/src/utils/static-server.mjs +28 -34
- package/src/utils/telemetry/index.mjs +2 -2
- package/src/utils/telemetry/report-error.mjs +45 -49
- package/src/utils/telemetry/request.mjs +36 -43
- package/src/utils/telemetry/telemetry.mjs +90 -105
- package/src/utils/telemetry/utils.mjs +5 -6
- package/src/utils/telemetry/validation.mjs +55 -53
- package/src/utils/types.d.ts +46 -0
- 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
|
-
|
|
6
|
-
import fromArray from 'from2-array'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import { getPathInProject } from '../../lib/settings.mjs'
|
|
10
|
-
import { INTERNAL_FUNCTIONS_FOLDER } from '../functions/functions.mjs'
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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: '
|
|
55
|
-
phase: '
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
display_name: curr.displayName,
|
|
134
|
+
generator: curr.generator,
|
|
135
|
+
routes: curr.routes,
|
|
136
|
+
build_data: curr.buildData,
|
|
136
137
|
},
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
.filter(
|
|
143
|
-
|
|
144
|
-
({ nativeNodeModules }) => nativeNodeModules !== undefined && Object.keys(nativeNodeModules).length !== 0
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
import {
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
38
|
+
return normalizeFunction(normalizedFile);
|
|
33
39
|
}
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
68
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'fileObj' implicitly has an 'any' type.
|
|
69
|
+
export const fileFilterCtor = objFilterCtor((fileObj) => fileObj.type === 'file');
|