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.
- package/README.md +3 -139
- package/npm-shrinkwrap.json +82 -82
- 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 -89
- 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,79 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const isWindows = platform === 'win32'
|
|
11
|
-
|
|
12
|
-
export const name = 'go'
|
|
13
|
-
|
|
1
|
+
import { dirname, extname } from 'path';
|
|
2
|
+
import { platform } from 'process';
|
|
3
|
+
import { temporaryFile } from 'tempy';
|
|
4
|
+
// @ts-expect-error TS(7034) FIXME: Variable 'execa' implicitly has type 'any' in some... Remove this comment to see the full error message
|
|
5
|
+
import execa from '../../../../utils/execa.mjs';
|
|
6
|
+
import { runFunctionsProxy } from '../../local-proxy.mjs';
|
|
7
|
+
const isWindows = platform === 'win32';
|
|
8
|
+
export const name = 'go';
|
|
9
|
+
// @ts-expect-error TS(7031) FIXME: Binding element 'binaryPath' implicitly has an 'an... Remove this comment to see the full error message
|
|
14
10
|
const build = async ({ binaryPath, functionDirectory }) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} catch (error) {
|
|
20
|
-
const isGoInstalled = await checkGoInstallation({ cwd: functionDirectory })
|
|
21
|
-
|
|
22
|
-
if (!isGoInstalled) {
|
|
23
|
-
throw new Error(
|
|
24
|
-
"You don't seem to have Go installed. Go to https://golang.org/doc/install for installation instructions.",
|
|
25
|
-
)
|
|
11
|
+
try {
|
|
12
|
+
// @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
|
|
13
|
+
await execa('go', ['build', '-o', binaryPath], { cwd: functionDirectory });
|
|
14
|
+
return { binaryPath, srcFiles: [functionDirectory] };
|
|
26
15
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
16
|
+
catch (error) {
|
|
17
|
+
const isGoInstalled = await checkGoInstallation({ cwd: functionDirectory });
|
|
18
|
+
if (!isGoInstalled) {
|
|
19
|
+
throw new Error("You don't seem to have Go installed. Go to https://golang.org/doc/install for installation instructions.");
|
|
20
|
+
}
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
// @ts-expect-error TS(7031) FIXME: Binding element 'cwd' implicitly has an 'any' type... Remove this comment to see the full error message
|
|
32
25
|
const checkGoInstallation = async ({ cwd }) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
26
|
+
try {
|
|
27
|
+
// @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
|
|
28
|
+
await execa('go', ['version'], { cwd });
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
// @ts-expect-error TS(7031) FIXME: Binding element 'func' implicitly has an 'any' typ... Remove this comment to see the full error message
|
|
42
36
|
export const getBuildFunction = ({ func }) => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
const functionDirectory = dirname(func.mainFile);
|
|
38
|
+
const binaryPath = temporaryFile(isWindows ? { extension: 'exe' } : undefined);
|
|
39
|
+
return () => build({ binaryPath, functionDirectory });
|
|
40
|
+
};
|
|
41
|
+
// @ts-expect-error TS(7031) FIXME: Binding element 'context' implicitly has an 'any' ... Remove this comment to see the full error message
|
|
49
42
|
export const invokeFunction = async ({ context, event, func, timeout }) => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
statusCode,
|
|
43
|
+
const { stdout } = await runFunctionsProxy({
|
|
44
|
+
binaryPath: func.buildData.binaryPath,
|
|
45
|
+
context,
|
|
46
|
+
directory: dirname(func.mainFile),
|
|
47
|
+
event,
|
|
48
|
+
name: func.name,
|
|
49
|
+
timeout,
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
const { body, headers, multiValueHeaders, statusCode } = JSON.parse(stdout);
|
|
53
|
+
return {
|
|
54
|
+
body,
|
|
55
|
+
headers,
|
|
56
|
+
multiValueHeaders,
|
|
57
|
+
statusCode,
|
|
58
|
+
};
|
|
67
59
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
catch {
|
|
61
|
+
return {
|
|
62
|
+
statusCode: 500,
|
|
63
|
+
};
|
|
71
64
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
65
|
+
};
|
|
66
|
+
// @ts-expect-error TS(7006) FIXME: Parameter 'func' implicitly has an 'any' type.
|
|
75
67
|
export const onRegister = (func) => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
68
|
+
const isSource = extname(func.mainFile) === '.go';
|
|
69
|
+
return isSource ? func : null;
|
|
70
|
+
};
|
|
@@ -1,38 +1,33 @@
|
|
|
1
1
|
/* eslint-disable import/no-namespace */
|
|
2
|
-
import * as go from './go/index.mjs'
|
|
3
|
-
import * as js from './js/index.mjs'
|
|
4
|
-
import * as rust from './rust/index.mjs'
|
|
2
|
+
import * as go from './go/index.mjs';
|
|
3
|
+
import * as js from './js/index.mjs';
|
|
4
|
+
import * as rust from './rust/index.mjs';
|
|
5
5
|
/* eslint-enable import/no-namespace */
|
|
6
6
|
/**
|
|
7
7
|
* @callback BuildFunction
|
|
8
8
|
* @param {object} func
|
|
9
9
|
* @returns {Promise<{srcFiles: string[], buildPath?: string}>}
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
11
|
/**
|
|
13
12
|
* @callback GetBuildFunction
|
|
14
13
|
* @param {{ config: object, context: object, errorExit: function, func: object, functionsDirectory: string, projectRoot: string }} params
|
|
15
14
|
* @returns {Promise<BuildFunction>}
|
|
16
15
|
*/
|
|
17
|
-
|
|
18
16
|
/**
|
|
19
17
|
* @callback InvokeFunction
|
|
20
18
|
* @param {{ context: object, event: object, func: object, timeout: number }} params
|
|
21
19
|
* @returns {Promise<{ body: object, statusCode: number }>}
|
|
22
20
|
*/
|
|
23
|
-
|
|
24
21
|
/**
|
|
25
22
|
* @callback OnDirectoryScanFunction
|
|
26
23
|
* @param {{ directory: string }} params
|
|
27
24
|
* @returns {Promise<undefined>}
|
|
28
25
|
*/
|
|
29
|
-
|
|
30
26
|
/**
|
|
31
27
|
* @callback OnRegisterFunction
|
|
32
28
|
* @param {object} func
|
|
33
29
|
* @returns {object|null}
|
|
34
30
|
*/
|
|
35
|
-
|
|
36
31
|
/**
|
|
37
32
|
* @typedef {object} Runtime
|
|
38
33
|
* @property {GetBuildFunction} getBuildFunction
|
|
@@ -41,11 +36,9 @@ import * as rust from './rust/index.mjs'
|
|
|
41
36
|
* @property {OnRegisterFunction} [onRegister]
|
|
42
37
|
* @property {string} name
|
|
43
38
|
*/
|
|
44
|
-
|
|
45
39
|
const runtimes = {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export default runtimes
|
|
40
|
+
[go.name]: go,
|
|
41
|
+
[js.name]: js,
|
|
42
|
+
[rust.name]: rust,
|
|
43
|
+
};
|
|
44
|
+
export default runtimes;
|
|
@@ -1,69 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
import { memoizedBuild } from '../../../memoized-build.mjs'
|
|
10
|
-
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
import minimist from 'minimist';
|
|
4
|
+
// @ts-expect-error TS(7034) FIXME: Variable 'execa' implicitly has type 'any' in some... Remove this comment to see the full error message
|
|
5
|
+
import execa from '../../../../../utils/execa.mjs';
|
|
6
|
+
import { fileExistsAsync } from '../../../../fs.mjs';
|
|
7
|
+
import { memoizedBuild } from '../../../memoized-build.mjs';
|
|
8
|
+
// @ts-expect-error TS(2525) FIXME: Initializer provides no value for this binding ele... Remove this comment to see the full error message
|
|
11
9
|
export const detectNetlifyLambda = async function ({ packageJson } = {}) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const matchingScripts = Object.entries(scripts).filter(([, script]) => script.match(/netlify-lambda\s+build/))
|
|
18
|
-
|
|
19
|
-
for (const [key, script] of matchingScripts) {
|
|
20
|
-
// E.g. ["netlify-lambda", "build", "functions/folder"]
|
|
21
|
-
const match = minimist(script.split(' '), {
|
|
22
|
-
// these are all valid options for netlify-lambda
|
|
23
|
-
boolean: ['s', 'static'],
|
|
24
|
-
string: ['c', 'config', 'p', 'port', 'b', 'babelrc', 't', 'timeout'],
|
|
25
|
-
})
|
|
26
|
-
// We are not interested in 'netlify-lambda' and 'build' commands
|
|
27
|
-
const functionDirectories = match._.slice(2)
|
|
28
|
-
if (functionDirectories.length === 1) {
|
|
29
|
-
const srcFiles = [resolve(functionDirectories[0])]
|
|
30
|
-
|
|
31
|
-
const yarnExists = await fileExistsAsync('yarn.lock')
|
|
32
|
-
const buildCommand = () => execa(yarnExists ? 'yarn' : 'npm', ['run', key])
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
build: async ({ cache = {} } = {}) => {
|
|
36
|
-
await memoizedBuild({ cache, cacheKey: `netlify-lambda-${key}`, command: buildCommand })
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
srcFiles,
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
builderName: 'netlify-lambda',
|
|
43
|
-
|
|
44
|
-
// Currently used for tests only.
|
|
45
|
-
npmScript: key,
|
|
46
|
-
}
|
|
10
|
+
const { dependencies, devDependencies, scripts } = packageJson || {};
|
|
11
|
+
if (!((dependencies && dependencies['netlify-lambda']) || (devDependencies && devDependencies['netlify-lambda']))) {
|
|
12
|
+
return false;
|
|
47
13
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
14
|
+
// @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
|
|
15
|
+
const matchingScripts = Object.entries(scripts).filter(([, script]) => script.match(/netlify-lambda\s+build/));
|
|
16
|
+
for (const [key, script] of matchingScripts) {
|
|
17
|
+
// E.g. ["netlify-lambda", "build", "functions/folder"]
|
|
18
|
+
// @ts-expect-error TS(2571) FIXME: Object is of type 'unknown'.
|
|
19
|
+
const match = minimist(script.split(' '), {
|
|
20
|
+
// these are all valid options for netlify-lambda
|
|
21
|
+
boolean: ['s', 'static'],
|
|
22
|
+
string: ['c', 'config', 'p', 'port', 'b', 'babelrc', 't', 'timeout'],
|
|
23
|
+
});
|
|
24
|
+
// We are not interested in 'netlify-lambda' and 'build' commands
|
|
25
|
+
const functionDirectories = match._.slice(2);
|
|
26
|
+
if (functionDirectories.length === 1) {
|
|
27
|
+
const srcFiles = [resolve(functionDirectories[0])];
|
|
28
|
+
const yarnExists = await fileExistsAsync('yarn.lock');
|
|
29
|
+
// @ts-expect-error TS(7005) FIXME: Variable 'execa' implicitly has an 'any' type.
|
|
30
|
+
const buildCommand = () => execa(yarnExists ? 'yarn' : 'npm', ['run', key]);
|
|
31
|
+
return {
|
|
32
|
+
build: async ({ cache = {} } = {}) => {
|
|
33
|
+
await memoizedBuild({ cache, cacheKey: `netlify-lambda-${key}`, command: buildCommand });
|
|
34
|
+
return {
|
|
35
|
+
srcFiles,
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
builderName: 'netlify-lambda',
|
|
39
|
+
// Currently used for tests only.
|
|
40
|
+
npmScript: key,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (functionDirectories.length === 0) {
|
|
44
|
+
console.warn(`Command 'netlify-lambda build' was detected in script '${key}', but contained no functions folder`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.warn(`Command 'netlify-lambda build' was detected in script '${key}', but contained 2 or more function folders`);
|
|
48
|
+
}
|
|
54
49
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return false
|
|
58
|
-
}
|
|
59
|
-
|
|
50
|
+
return false;
|
|
51
|
+
};
|
|
60
52
|
export default async function handler() {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return detectNetlifyLambda({ packageJson })
|
|
53
|
+
const exists = await fileExistsAsync('package.json');
|
|
54
|
+
if (!exists) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const content = await readFile('package.json', 'utf-8');
|
|
58
|
+
const packageJson = JSON.parse(content);
|
|
59
|
+
return detectNetlifyLambda({ packageJson });
|
|
69
60
|
}
|