@netlify/build 26.5.0-rc → 26.5.2
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/package.json +39 -39
- package/src/core/config.js +2 -0
- package/src/core/constants.js +10 -1
- package/src/core/feature_flags.js +0 -1
- package/src/core/flags.js +6 -0
- package/src/core/main.js +2 -0
- package/src/core/missing_side_file.js +1 -1
- package/src/core/normalize_flags.js +2 -0
- package/src/core/user_node_version.js +1 -1
- package/src/error/handle.js +1 -1
- package/src/error/monitor/report.js +4 -1
- package/src/install/local.js +2 -2
- package/src/install/main.js +2 -2
- package/src/install/missing.js +1 -1
- package/src/log/messages/config.js +1 -0
- package/src/log/messages/mutations.js +1 -1
- package/src/plugins/child/error.js +1 -1
- package/src/plugins/error.js +4 -1
- package/src/plugins/ipc.js +1 -1
- package/src/plugins/manifest/path.js +1 -1
- package/src/plugins/spawn.js +2 -2
- package/src/plugins_core/build_command.js +1 -1
- package/src/plugins_core/deploy/buildbot_client.js +1 -1
- package/src/plugins_core/deploy/index.js +2 -0
- package/src/plugins_core/functions/index.js +7 -46
- package/src/plugins_core/functions/zisi.js +53 -0
- package/src/plugins_core/functions_install/index.js +1 -1
- package/src/steps/update_config.js +1 -1
- package/src/utils/package.js +2 -2
- package/types/netlify_plugin_constants.d.ts +9 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netlify/build",
|
|
3
|
-
"version": "26.5.
|
|
3
|
+
"version": "26.5.2",
|
|
4
4
|
"description": "Netlify build module",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": "./src/core/main.js",
|
|
@@ -60,50 +60,50 @@
|
|
|
60
60
|
"@netlify/config": "^17.0.0",
|
|
61
61
|
"@netlify/functions-utils": "^4.0.0",
|
|
62
62
|
"@netlify/git-utils": "^4.0.0",
|
|
63
|
-
"@netlify/plugin-edge-handlers": "^3.0.
|
|
64
|
-
"@netlify/plugins-list": "^6.
|
|
63
|
+
"@netlify/plugin-edge-handlers": "^3.0.7",
|
|
64
|
+
"@netlify/plugins-list": "^6.18.1",
|
|
65
65
|
"@netlify/run-utils": "^4.0.0",
|
|
66
|
-
"@netlify/zip-it-and-ship-it": "5.
|
|
67
|
-
"@sindresorhus/slugify": "^
|
|
66
|
+
"@netlify/zip-it-and-ship-it": "5.9.0",
|
|
67
|
+
"@sindresorhus/slugify": "^2.0.0",
|
|
68
68
|
"@types/node": "^16.0.0",
|
|
69
|
-
"ansi-escapes": "^
|
|
70
|
-
"chalk": "^
|
|
71
|
-
"clean-stack": "^
|
|
72
|
-
"execa": "^
|
|
73
|
-
"figures": "^
|
|
74
|
-
"filter-obj": "^
|
|
69
|
+
"ansi-escapes": "^5.0.0",
|
|
70
|
+
"chalk": "^5.0.0",
|
|
71
|
+
"clean-stack": "^4.0.0",
|
|
72
|
+
"execa": "^6.0.0",
|
|
73
|
+
"figures": "^4.0.0",
|
|
74
|
+
"filter-obj": "^3.0.0",
|
|
75
75
|
"got": "^10.0.0",
|
|
76
|
-
"indent-string": "^
|
|
77
|
-
"is-plain-obj": "^
|
|
76
|
+
"indent-string": "^5.0.0",
|
|
77
|
+
"is-plain-obj": "^4.0.0",
|
|
78
78
|
"js-yaml": "^4.0.0",
|
|
79
|
-
"keep-func-props": "^
|
|
80
|
-
"locate-path": "^
|
|
81
|
-
"log-process-errors": "^
|
|
82
|
-
"map-obj": "^
|
|
79
|
+
"keep-func-props": "^4.0.0",
|
|
80
|
+
"locate-path": "^7.0.0",
|
|
81
|
+
"log-process-errors": "^8.0.0",
|
|
82
|
+
"map-obj": "^5.0.0",
|
|
83
83
|
"memoize-one": "^6.0.0",
|
|
84
|
-
"os-name": "^
|
|
85
|
-
"p-event": "^
|
|
84
|
+
"os-name": "^5.0.0",
|
|
85
|
+
"p-event": "^5.0.0",
|
|
86
86
|
"p-every": "^2.0.0",
|
|
87
|
-
"p-filter": "^
|
|
88
|
-
"p-locate": "^
|
|
89
|
-
"p-reduce": "^
|
|
90
|
-
"path-exists": "^
|
|
91
|
-
"path-type": "^
|
|
92
|
-
"pkg-dir": "^
|
|
87
|
+
"p-filter": "^3.0.0",
|
|
88
|
+
"p-locate": "^6.0.0",
|
|
89
|
+
"p-reduce": "^3.0.0",
|
|
90
|
+
"path-exists": "^5.0.0",
|
|
91
|
+
"path-type": "^5.0.0",
|
|
92
|
+
"pkg-dir": "^6.0.0",
|
|
93
93
|
"pretty-ms": "^7.0.0",
|
|
94
|
-
"ps-list": "^
|
|
95
|
-
"read-pkg-up": "^
|
|
94
|
+
"ps-list": "^8.0.0",
|
|
95
|
+
"read-pkg-up": "^9.0.0",
|
|
96
96
|
"readdirp": "^3.4.0",
|
|
97
97
|
"resolve": "^2.0.0-next.1",
|
|
98
98
|
"rfdc": "^1.3.0",
|
|
99
99
|
"safe-json-stringify": "^1.2.0",
|
|
100
100
|
"semver": "^7.0.0",
|
|
101
101
|
"statsd-client": "0.4.7",
|
|
102
|
-
"string-width": "^
|
|
103
|
-
"strip-ansi": "^
|
|
104
|
-
"supports-color": "^
|
|
102
|
+
"string-width": "^5.0.0",
|
|
103
|
+
"strip-ansi": "^7.0.0",
|
|
104
|
+
"supports-color": "^9.0.0",
|
|
105
105
|
"tmp-promise": "^3.0.2",
|
|
106
|
-
"ts-node": "
|
|
106
|
+
"ts-node": "10.4.0",
|
|
107
107
|
"typescript": "^4.5.4",
|
|
108
108
|
"update-notifier": "^5.0.0",
|
|
109
109
|
"uuid": "^8.0.0",
|
|
@@ -112,20 +112,20 @@
|
|
|
112
112
|
"devDependencies": {
|
|
113
113
|
"@netlify/nock-udp": "^1.0.0",
|
|
114
114
|
"atob": "^2.1.2",
|
|
115
|
-
"ava": "^
|
|
115
|
+
"ava": "^4.0.0",
|
|
116
116
|
"cpy": "^8.1.0",
|
|
117
117
|
"del": "^6.0.0",
|
|
118
118
|
"fast-safe-stringify": "^2.0.7",
|
|
119
|
-
"get-bin-path": "^
|
|
120
|
-
"get-node": "^
|
|
121
|
-
"get-port": "^
|
|
119
|
+
"get-bin-path": "^6.0.0",
|
|
120
|
+
"get-node": "^12.0.0",
|
|
121
|
+
"get-port": "^6.0.0",
|
|
122
122
|
"get-stream": "^6.0.0",
|
|
123
|
-
"has-ansi": "^
|
|
123
|
+
"has-ansi": "^5.0.0",
|
|
124
124
|
"is-ci": "^3.0.0",
|
|
125
125
|
"moize": "^6.0.0",
|
|
126
|
-
"path-key": "^
|
|
127
|
-
"process-exists": "^
|
|
128
|
-
"sinon": "^
|
|
126
|
+
"path-key": "^4.0.0",
|
|
127
|
+
"process-exists": "^5.0.0",
|
|
128
|
+
"sinon": "^13.0.0",
|
|
129
129
|
"yarn": "^1.22.4"
|
|
130
130
|
},
|
|
131
131
|
"engines": {
|
package/src/core/config.js
CHANGED
|
@@ -143,6 +143,7 @@ export const saveUpdatedConfig = async function ({
|
|
|
143
143
|
headersPath,
|
|
144
144
|
redirectsPath,
|
|
145
145
|
logs,
|
|
146
|
+
featureFlags,
|
|
146
147
|
context,
|
|
147
148
|
branch,
|
|
148
149
|
debug,
|
|
@@ -160,6 +161,7 @@ export const saveUpdatedConfig = async function ({
|
|
|
160
161
|
context,
|
|
161
162
|
branch,
|
|
162
163
|
logs,
|
|
164
|
+
featureFlags,
|
|
163
165
|
})
|
|
164
166
|
|
|
165
167
|
await logConfigOnUpload({ logs, configPath, debug })
|
package/src/core/constants.js
CHANGED
|
@@ -2,7 +2,7 @@ import { relative, normalize } from 'path'
|
|
|
2
2
|
|
|
3
3
|
import { getCacheDir } from '@netlify/cache-utils'
|
|
4
4
|
import mapObj from 'map-obj'
|
|
5
|
-
import pathExists from 'path-exists'
|
|
5
|
+
import { pathExists } from 'path-exists'
|
|
6
6
|
|
|
7
7
|
import { ROOT_PACKAGE_JSON } from '../utils/json.js'
|
|
8
8
|
|
|
@@ -11,6 +11,7 @@ export const getConstants = async function ({
|
|
|
11
11
|
configPath,
|
|
12
12
|
buildDir,
|
|
13
13
|
functionsDistDir,
|
|
14
|
+
edgeHandlersDistDir,
|
|
14
15
|
cacheDir,
|
|
15
16
|
netlifyConfig,
|
|
16
17
|
siteInfo: { id: siteId },
|
|
@@ -26,6 +27,8 @@ export const getConstants = async function ({
|
|
|
26
27
|
CONFIG_PATH: configPath,
|
|
27
28
|
// The directory where built serverless functions are placed before deployment
|
|
28
29
|
FUNCTIONS_DIST: functionsDistDir,
|
|
30
|
+
// The directory where built Edge Handlers are placed before deployment
|
|
31
|
+
EDGE_HANDLERS_DIST: edgeHandlersDistDir,
|
|
29
32
|
// Path to the Netlify build cache folder
|
|
30
33
|
CACHE_DIR: normalizedCacheDir,
|
|
31
34
|
// Boolean indicating whether the build was run locally (Netlify CLI) or in the production CI
|
|
@@ -41,11 +44,15 @@ export const getConstants = async function ({
|
|
|
41
44
|
// The directory where internal functions (i.e. generated programmatically
|
|
42
45
|
// via plugins or others) live
|
|
43
46
|
INTERNAL_FUNCTIONS_SRC: `${buildDir}/${INTERNAL_FUNCTIONS_SRC}`,
|
|
47
|
+
// The directory where internal Edge Handlers (i.e. generated programmatically
|
|
48
|
+
// via plugins or others) live
|
|
49
|
+
INTERNAL_EDGE_HANDLERS_SRC: `${buildDir}/${INTERNAL_EDGE_HANDLERS_SRC}`,
|
|
44
50
|
}
|
|
45
51
|
const constantsA = await addMutableConstants({ constants, buildDir, netlifyConfig })
|
|
46
52
|
return constantsA
|
|
47
53
|
}
|
|
48
54
|
|
|
55
|
+
const INTERNAL_EDGE_HANDLERS_SRC = '.netlify/edge-handlers'
|
|
49
56
|
const INTERNAL_FUNCTIONS_SRC = '.netlify/functions-internal'
|
|
50
57
|
|
|
51
58
|
// Retrieve constants which might change during the build if a plugin modifies
|
|
@@ -141,7 +148,9 @@ const CONSTANT_PATHS = new Set([
|
|
|
141
148
|
'PUBLISH_DIR',
|
|
142
149
|
'FUNCTIONS_SRC',
|
|
143
150
|
'FUNCTIONS_DIST',
|
|
151
|
+
'INTERNAL_EDGE_HANDLERS_SRC',
|
|
144
152
|
'INTERNAL_FUNCTIONS_SRC',
|
|
153
|
+
'EDGE_HANDLERS_DIST',
|
|
145
154
|
'EDGE_HANDLERS_SRC',
|
|
146
155
|
'CACHE_DIR',
|
|
147
156
|
])
|
|
@@ -14,7 +14,6 @@ const getFeatureFlag = function (name) {
|
|
|
14
14
|
// Default values for feature flags
|
|
15
15
|
export const DEFAULT_FEATURE_FLAGS = {
|
|
16
16
|
buildbot_build_go_functions: false,
|
|
17
|
-
buildbot_create_functions_manifest: false,
|
|
18
17
|
buildbot_es_modules_esbuild: false,
|
|
19
18
|
buildbot_zisi_trace_nft: false,
|
|
20
19
|
buildbot_zisi_esbuild_parser: false,
|
package/src/core/flags.js
CHANGED
|
@@ -107,6 +107,12 @@ Default: Current Node.js binary`,
|
|
|
107
107
|
functionsDistDir: {
|
|
108
108
|
string: true,
|
|
109
109
|
describe: `Path to the directory where packaged functions are kept.
|
|
110
|
+
Default: automatically guessed`,
|
|
111
|
+
hidden: true,
|
|
112
|
+
},
|
|
113
|
+
edgeHandlersDistDir: {
|
|
114
|
+
string: true,
|
|
115
|
+
describe: `Path to the directory where packaged Edge Handlers are kept.
|
|
110
116
|
Default: automatically guessed`,
|
|
111
117
|
hidden: true,
|
|
112
118
|
},
|
package/src/core/main.js
CHANGED
|
@@ -164,6 +164,7 @@ const tExecBuild = async function ({
|
|
|
164
164
|
verbose,
|
|
165
165
|
nodePath,
|
|
166
166
|
functionsDistDir,
|
|
167
|
+
edgeHandlersDistDir,
|
|
167
168
|
cacheDir,
|
|
168
169
|
dry,
|
|
169
170
|
mode,
|
|
@@ -229,6 +230,7 @@ const tExecBuild = async function ({
|
|
|
229
230
|
configPath,
|
|
230
231
|
buildDir,
|
|
231
232
|
functionsDistDir,
|
|
233
|
+
edgeHandlersDistDir,
|
|
232
234
|
cacheDir,
|
|
233
235
|
netlifyConfig,
|
|
234
236
|
siteInfo,
|
|
@@ -41,6 +41,7 @@ const getDefaultFlags = function ({ env: envOpt = {} }, combinedEnv) {
|
|
|
41
41
|
telemetry: false,
|
|
42
42
|
verbose: Boolean(combinedEnv.NETLIFY_BUILD_DEBUG),
|
|
43
43
|
functionsDistDir: DEFAULT_FUNCTIONS_DIST,
|
|
44
|
+
edgeHandlersDistDir: DEFAULT_EDGE_HANDLERS_DIST,
|
|
44
45
|
cacheDir: DEFAULT_CACHE_DIR,
|
|
45
46
|
deployId: combinedEnv.DEPLOY_ID,
|
|
46
47
|
buildId: combinedEnv.BUILD_ID,
|
|
@@ -62,6 +63,7 @@ const computeTelemetry = function (flags, envOpts) {
|
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
const REQUIRE_MODE = 'require'
|
|
66
|
+
const DEFAULT_EDGE_HANDLERS_DIST = '.netlify/edge-handlers-dist/'
|
|
65
67
|
const DEFAULT_FUNCTIONS_DIST = '.netlify/functions/'
|
|
66
68
|
const DEFAULT_CACHE_DIR = '.netlify/cache/'
|
|
67
69
|
const DEFAULT_STATSD_PORT = 8125
|
package/src/error/handle.js
CHANGED
|
@@ -89,7 +89,10 @@ const getApp = function () {
|
|
|
89
89
|
// But we change it back after Bugsnag is done reporting.
|
|
90
90
|
const updateErrorName = function (error, type) {
|
|
91
91
|
const { name } = error
|
|
92
|
-
|
|
92
|
+
// This might fail if `name` is a getter or is non-writable.
|
|
93
|
+
try {
|
|
94
|
+
error.name = type
|
|
95
|
+
} catch {}
|
|
93
96
|
return name
|
|
94
97
|
}
|
|
95
98
|
|
package/src/install/local.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { packageDirectory } from 'pkg-dir'
|
|
2
2
|
|
|
3
3
|
import { logInstallLocalPluginsDeps } from '../log/messages/install.js'
|
|
4
4
|
|
|
@@ -57,6 +57,6 @@ const hasPackageDir = function ({ packageDir }) {
|
|
|
57
57
|
|
|
58
58
|
// We only install dependencies of local plugins that have their own `package.json`
|
|
59
59
|
const removeMainRoot = async function (localPluginsOptions, buildDir) {
|
|
60
|
-
const mainPackageDir = await
|
|
60
|
+
const mainPackageDir = await packageDirectory({ cwd: buildDir })
|
|
61
61
|
return localPluginsOptions.filter(({ packageDir }) => packageDir !== mainPackageDir)
|
|
62
62
|
}
|
package/src/install/main.js
CHANGED
package/src/install/missing.js
CHANGED
|
@@ -16,7 +16,7 @@ export const handleError = async function (error, verbose) {
|
|
|
16
16
|
// On uncaught exceptions and unhandled rejections, print the stack trace.
|
|
17
17
|
// Also, prevent child processes from crashing on uncaught exceptions.
|
|
18
18
|
export const handleProcessErrors = function () {
|
|
19
|
-
logProcessErrors({ log: handleProcessError, exitOn: []
|
|
19
|
+
logProcessErrors({ log: handleProcessError, exitOn: [] })
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
const handleProcessError = async function (error, level, originalError) {
|
package/src/plugins/error.js
CHANGED
|
@@ -36,7 +36,10 @@ const normalizeError = function (type, func, message, { error } = {}) {
|
|
|
36
36
|
|
|
37
37
|
const getError = function (error, message, func) {
|
|
38
38
|
if (error instanceof Error) {
|
|
39
|
-
|
|
39
|
+
// This might fail if `name` is a getter or is non-writable.
|
|
40
|
+
try {
|
|
41
|
+
error.message = `${message}\n${error.message}`
|
|
42
|
+
} catch {}
|
|
40
43
|
return error
|
|
41
44
|
}
|
|
42
45
|
|
package/src/plugins/ipc.js
CHANGED
package/src/plugins/spawn.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fileURLToPath } from 'url'
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { execaNode } from 'execa'
|
|
4
4
|
|
|
5
5
|
import { addErrorInfo } from '../error/info.js'
|
|
6
6
|
import { logLoadingPlugins, logOutdatedPlugins, logIncompatiblePlugins } from '../log/messages/compatibility.js'
|
|
@@ -31,7 +31,7 @@ const tStartPlugins = async function ({ pluginsOptions, buildDir, childEnv, logs
|
|
|
31
31
|
export const startPlugins = measureDuration(tStartPlugins, 'start_plugins')
|
|
32
32
|
|
|
33
33
|
const startPlugin = async function ({ pluginDir, nodePath, buildDir, childEnv }) {
|
|
34
|
-
const childProcess =
|
|
34
|
+
const childProcess = execaNode(CHILD_MAIN_FILE, {
|
|
35
35
|
cwd: buildDir,
|
|
36
36
|
preferLocal: true,
|
|
37
37
|
localDir: pluginDir,
|
|
@@ -2,7 +2,7 @@ import net from 'net'
|
|
|
2
2
|
import { normalize, resolve, relative } from 'path'
|
|
3
3
|
import { promisify } from 'util'
|
|
4
4
|
|
|
5
|
-
import pEvent from 'p-event'
|
|
5
|
+
import { pEvent } from 'p-event'
|
|
6
6
|
|
|
7
7
|
import { addErrorInfo } from '../../error/info.js'
|
|
8
8
|
import { runsAfterDeploy } from '../../plugins/events.js'
|
|
@@ -16,6 +16,7 @@ const coreStep = async function ({
|
|
|
16
16
|
buildbotServerSocket,
|
|
17
17
|
events,
|
|
18
18
|
logs,
|
|
19
|
+
featureFlags,
|
|
19
20
|
context,
|
|
20
21
|
branch,
|
|
21
22
|
configMutations,
|
|
@@ -35,6 +36,7 @@ const coreStep = async function ({
|
|
|
35
36
|
headersPath,
|
|
36
37
|
redirectsPath,
|
|
37
38
|
logs,
|
|
39
|
+
featureFlags,
|
|
38
40
|
context,
|
|
39
41
|
branch,
|
|
40
42
|
debug,
|
|
@@ -1,65 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolve } from 'path'
|
|
2
2
|
|
|
3
3
|
import { zipFunctions } from '@netlify/zip-it-and-ship-it'
|
|
4
|
-
import
|
|
5
|
-
import pathExists from 'path-exists'
|
|
4
|
+
import { pathExists } from 'path-exists'
|
|
6
5
|
|
|
7
6
|
import { log } from '../../log/logger.js'
|
|
8
7
|
import { logBundleResults, logFunctionsNonExistingDir, logFunctionsToBundle } from '../../log/messages/core_steps.js'
|
|
9
8
|
|
|
10
9
|
import { getZipError } from './error.js'
|
|
11
|
-
import { getZisiFeatureFlags } from './feature_flags.js'
|
|
12
10
|
import { getUserAndInternalFunctions, validateFunctionsSrc } from './utils.js'
|
|
11
|
+
import { getZisiParameters } from './zisi.js'
|
|
13
12
|
|
|
14
13
|
// Returns `true` if at least one of the functions has been configured to use
|
|
15
14
|
// esbuild.
|
|
16
15
|
const isUsingEsbuild = (functionsConfig = {}) =>
|
|
17
16
|
Object.values(functionsConfig).some((configObject) => configObject.node_bundler === 'esbuild')
|
|
18
17
|
|
|
19
|
-
// The function configuration keys returned by @netlify/config are not an exact
|
|
20
|
-
// match to the properties that @netlify/zip-it-and-ship-it expects. We do that
|
|
21
|
-
// translation here.
|
|
22
|
-
const normalizeFunctionConfig = ({ buildDir, functionConfig = {}, isRunningLocally }) => ({
|
|
23
|
-
externalNodeModules: functionConfig.external_node_modules,
|
|
24
|
-
includedFiles: functionConfig.included_files,
|
|
25
|
-
includedFilesBasePath: buildDir,
|
|
26
|
-
ignoredNodeModules: functionConfig.ignored_node_modules,
|
|
27
|
-
schedule: functionConfig.schedule,
|
|
28
|
-
|
|
29
|
-
// When the user selects esbuild as the Node bundler, we still want to use
|
|
30
|
-
// the legacy ZISI bundler as a fallback. Rather than asking the user to
|
|
31
|
-
// make this decision, we abstract that complexity away by injecting the
|
|
32
|
-
// fallback behavior ourselves. We do this by transforming the value
|
|
33
|
-
// `esbuild` into `esbuild_zisi`, which zip-it-and-ship-it understands.
|
|
34
|
-
nodeBundler: functionConfig.node_bundler === 'esbuild' ? 'esbuild_zisi' : functionConfig.node_bundler,
|
|
35
|
-
|
|
36
|
-
// If the build is running in buildbot, we set the Rust target directory to a
|
|
37
|
-
// path that will get cached in between builds, allowing us to speed up the
|
|
38
|
-
// build process.
|
|
39
|
-
rustTargetDirectory: isRunningLocally ? undefined : resolve(buildDir, '.netlify', 'rust-functions-cache', '[name]'),
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
const getZisiParameters = ({
|
|
43
|
-
buildDir,
|
|
44
|
-
featureFlags,
|
|
45
|
-
functionsConfig,
|
|
46
|
-
functionsDist,
|
|
47
|
-
isRunningLocally,
|
|
48
|
-
repositoryRoot,
|
|
49
|
-
}) => {
|
|
50
|
-
const isManifestEnabled = isRunningLocally || featureFlags.buildbot_create_functions_manifest === true
|
|
51
|
-
const manifest = isManifestEnabled ? join(functionsDist, 'manifest.json') : undefined
|
|
52
|
-
const config = mapObject(functionsConfig, (expression, object) => [
|
|
53
|
-
expression,
|
|
54
|
-
normalizeFunctionConfig({ buildDir, featureFlags, functionConfig: object, isRunningLocally }),
|
|
55
|
-
])
|
|
56
|
-
const zisiFeatureFlags = getZisiFeatureFlags(featureFlags)
|
|
57
|
-
|
|
58
|
-
return { basePath: buildDir, config, manifest, featureFlags: zisiFeatureFlags, repositoryRoot }
|
|
59
|
-
}
|
|
60
|
-
|
|
61
18
|
const zipFunctionsAndLogResults = async ({
|
|
62
19
|
buildDir,
|
|
20
|
+
childEnv,
|
|
63
21
|
featureFlags,
|
|
64
22
|
functionsConfig,
|
|
65
23
|
functionsDist,
|
|
@@ -71,6 +29,7 @@ const zipFunctionsAndLogResults = async ({
|
|
|
71
29
|
}) => {
|
|
72
30
|
const zisiParameters = getZisiParameters({
|
|
73
31
|
buildDir,
|
|
32
|
+
childEnv,
|
|
74
33
|
featureFlags,
|
|
75
34
|
functionsConfig,
|
|
76
35
|
functionsDist,
|
|
@@ -97,6 +56,7 @@ const zipFunctionsAndLogResults = async ({
|
|
|
97
56
|
// Plugin to package Netlify functions with @netlify/zip-it-and-ship-it
|
|
98
57
|
// eslint-disable-next-line complexity
|
|
99
58
|
const coreStep = async function ({
|
|
59
|
+
childEnv,
|
|
100
60
|
constants: {
|
|
101
61
|
INTERNAL_FUNCTIONS_SRC: relativeInternalFunctionsSrc,
|
|
102
62
|
IS_LOCAL: isRunningLocally,
|
|
@@ -145,6 +105,7 @@ const coreStep = async function ({
|
|
|
145
105
|
|
|
146
106
|
const { bundler } = await zipFunctionsAndLogResults({
|
|
147
107
|
buildDir,
|
|
108
|
+
childEnv,
|
|
148
109
|
featureFlags,
|
|
149
110
|
functionsConfig: netlifyConfig.functions,
|
|
150
111
|
functionsDist,
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { join, resolve } from 'path'
|
|
2
|
+
|
|
3
|
+
import mapObject from 'map-obj'
|
|
4
|
+
|
|
5
|
+
import { getZisiFeatureFlags } from './feature_flags.js'
|
|
6
|
+
|
|
7
|
+
export const getZisiParameters = ({
|
|
8
|
+
buildDir,
|
|
9
|
+
childEnv,
|
|
10
|
+
featureFlags,
|
|
11
|
+
functionsConfig,
|
|
12
|
+
functionsDist,
|
|
13
|
+
isRunningLocally,
|
|
14
|
+
repositoryRoot,
|
|
15
|
+
}) => {
|
|
16
|
+
const nodeVersion = childEnv.AWS_LAMBDA_JS_RUNTIME
|
|
17
|
+
const manifest = join(functionsDist, 'manifest.json')
|
|
18
|
+
const config = mapObject(functionsConfig, (expression, object) => [
|
|
19
|
+
expression,
|
|
20
|
+
normalizeFunctionConfig({ buildDir, featureFlags, functionConfig: object, isRunningLocally, nodeVersion }),
|
|
21
|
+
])
|
|
22
|
+
const zisiFeatureFlags = getZisiFeatureFlags(featureFlags)
|
|
23
|
+
|
|
24
|
+
return { basePath: buildDir, config, manifest, featureFlags: zisiFeatureFlags, repositoryRoot }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// The function configuration keys returned by @netlify/config are not an exact
|
|
28
|
+
// match to the properties that @netlify/zip-it-and-ship-it expects. We do that
|
|
29
|
+
// translation here.
|
|
30
|
+
export const normalizeFunctionConfig = ({ buildDir, functionConfig = {}, isRunningLocally, nodeVersion }) => ({
|
|
31
|
+
externalNodeModules: functionConfig.external_node_modules,
|
|
32
|
+
includedFiles: functionConfig.included_files,
|
|
33
|
+
includedFilesBasePath: buildDir,
|
|
34
|
+
ignoredNodeModules: functionConfig.ignored_node_modules,
|
|
35
|
+
nodeVersion,
|
|
36
|
+
schedule: functionConfig.schedule,
|
|
37
|
+
|
|
38
|
+
// When the user selects esbuild as the Node bundler, we still want to use
|
|
39
|
+
// the legacy ZISI bundler as a fallback. Rather than asking the user to
|
|
40
|
+
// make this decision, we abstract that complexity away by injecting the
|
|
41
|
+
// fallback behavior ourselves. We do this by transforming the value
|
|
42
|
+
// `esbuild` into `esbuild_zisi`, which zip-it-and-ship-it understands.
|
|
43
|
+
nodeBundler: functionConfig.node_bundler === 'esbuild' ? 'esbuild_zisi' : functionConfig.node_bundler,
|
|
44
|
+
|
|
45
|
+
// If the build is running in buildbot, we set the Rust target directory to a
|
|
46
|
+
// path that will get cached in between builds, allowing us to speed up the
|
|
47
|
+
// build process.
|
|
48
|
+
rustTargetDirectory: isRunningLocally ? undefined : resolve(buildDir, '.netlify', 'rust-functions-cache', '[name]'),
|
|
49
|
+
|
|
50
|
+
// Go functions should be zipped only when building locally. When running in
|
|
51
|
+
// buildbot, the Go API client will handle the zipping.
|
|
52
|
+
zipGo: isRunningLocally ? true : undefined,
|
|
53
|
+
})
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isDeepStrictEqual } from 'util'
|
|
2
2
|
|
|
3
3
|
import pFilter from 'p-filter'
|
|
4
|
-
import pathExists from 'path-exists'
|
|
4
|
+
import { pathExists } from 'path-exists'
|
|
5
5
|
|
|
6
6
|
import { resolveUpdatedConfig } from '../core/config.js'
|
|
7
7
|
import { addErrorInfo } from '../error/info.js'
|
package/src/utils/package.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { dirname } from 'path'
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { readPackageUp } from 'read-pkg-up'
|
|
4
4
|
|
|
5
5
|
// Retrieve `package.json` from a specific directory
|
|
6
6
|
export const getPackageJson = async function (cwd, { normalize } = {}) {
|
|
@@ -16,7 +16,7 @@ export const getPackageJson = async function (cwd, { normalize } = {}) {
|
|
|
16
16
|
|
|
17
17
|
const getPackageObj = async function ({ cwd, normalize = true }) {
|
|
18
18
|
try {
|
|
19
|
-
return await
|
|
19
|
+
return await readPackageUp({ cwd, normalize })
|
|
20
20
|
// If the `package.json` is invalid and `normalize` is `true`, an error is
|
|
21
21
|
// thrown. We return `undefined` then.
|
|
22
22
|
} catch {}
|
|
@@ -13,6 +13,11 @@ export interface NetlifyPluginConstants {
|
|
|
13
13
|
* `undefined` if no `netlify/functions` directory exists in the base directory and if not specified by the user.
|
|
14
14
|
*/
|
|
15
15
|
FUNCTIONS_SRC?: string
|
|
16
|
+
/**
|
|
17
|
+
* the directory where internal Edge Handlers source code lives. This is where build plugins should place auto-generated handlers.
|
|
18
|
+
* `undefined` if the version of @netlify/build does not support internal Edge Handlers
|
|
19
|
+
*/
|
|
20
|
+
INTERNAL_EDGE_HANDLERS_SRC?: string
|
|
16
21
|
/**
|
|
17
22
|
* the directory where internal function source code lives. This is where build plugins should place auto-generated functions.
|
|
18
23
|
* `undefined` if the version of @netlify/build does not support internal functions
|
|
@@ -22,6 +27,10 @@ export interface NetlifyPluginConstants {
|
|
|
22
27
|
* the directory where built serverless functions are placed before deployment. Its value is always defined, but the target might not have been created yet.
|
|
23
28
|
*/
|
|
24
29
|
FUNCTIONS_DIST: string
|
|
30
|
+
/**
|
|
31
|
+
* the directory where built Edge Handlers are placed before deployment. Its value is always defined, but the target might not have been created yet.
|
|
32
|
+
*/
|
|
33
|
+
EDGE_HANDLERS_DIST: string
|
|
25
34
|
/**
|
|
26
35
|
* the directory where Edge Handlers source code lives.
|
|
27
36
|
* `undefined` if no `netlify/edge-handlers` directory exists in the base directory and if not specified in `netlify.toml`.
|