@@ -81,24 +81,23 @@ const redirects = {
81
81
} ;
82
82
83
83
/** @type {import('.') } **/
84
- export default function ( { external = [ ] , edge, split, nodeVersion } = { } ) {
84
+ export default function ( { external = [ ] , edge, split } = { } ) {
85
85
return {
86
86
name : '@sveltejs/adapter-vercel' ,
87
87
88
88
async adapt ( builder ) {
89
- if ( process . env . ENABLE_VC_BUILD ) {
90
- if ( edge && nodeVersion ) {
91
- throw new Error (
92
- '` nodeVersion` option can only be used with serverless functions, not edge functions'
93
- ) ;
94
- }
89
+ const nodeVersion = getNodeVersion ( ) ;
90
+ if ( nodeVersion . major < 14 ) {
91
+ throw new Error (
92
+ `SvelteKit only support Node.js version 14 or greater (v ${ nodeVersion . full } was detected). Learn how to change the Node.js version of your Functiones here: https://vercel.com/docs/runtimes#official-runtimes/node-js/node-js-version`
93
+ ) ;
94
+ }
95
95
96
- await v3 ( builder , external , edge , split , nodeVersion || '16.x' ) ;
96
+ if ( process . env . ENABLE_VC_BUILD ) {
97
+ await v3 ( builder , external , edge , split ) ;
97
98
} else {
98
- if ( edge || split || nodeVersion ) {
99
- throw new Error (
100
- '`edge`, `split` and `nodeVersion` options can only be used with ENABLE_VC_BUILD'
101
- ) ;
99
+ if ( edge || split ) {
100
+ throw new Error ( '`edge` and `split` options can only be used with ENABLE_VC_BUILD' ) ;
102
101
}
103
102
104
103
await v1 ( builder , external ) ;
@@ -206,9 +205,8 @@ async function v1(builder, external) {
206
205
* @param {string[] } external
207
206
* @param {boolean } edge
208
207
* @param {boolean } split
209
- * @param {'16.x' | '14.x' | '12.x' } nodeVersion
210
208
*/
211
- async function v3 ( builder , external , edge , split , nodeVersion ) {
209
+ async function v3 ( builder , external , edge , split ) {
212
210
const dir = '.vercel/output' ;
213
211
214
212
const tmp = builder . getBuildDirectory ( 'vercel-tmp' ) ;
@@ -256,6 +254,7 @@ async function v3(builder, external, edge, split, nodeVersion) {
256
254
async function generate_serverless_function ( name , pattern , generate_manifest ) {
257
255
const tmp = builder . getBuildDirectory ( `vercel-tmp/${ name } ` ) ;
258
256
const relativePath = posix . relative ( tmp , builder . getServerDirectory ( ) ) ;
257
+ const nodeVersion = getNodeVersion ( ) ;
259
258
260
259
builder . copy ( `${ files } /serverless.js` , `${ tmp } /serverless.js` , {
261
260
replace : {
@@ -272,8 +271,7 @@ async function v3(builder, external, edge, split, nodeVersion) {
272
271
await esbuild . build ( {
273
272
entryPoints : [ `${ tmp } /serverless.js` ] ,
274
273
outfile : `${ dirs . functions } /${ name } .func/index.js` ,
275
- target :
276
- nodeVersion === '12.x' ? 'node12.22' : nodeVersion === '14.x' ? 'node14.19' : 'node16.15' ,
274
+ target : `node${ nodeVersion . full } ` ,
277
275
bundle : true ,
278
276
platform : 'node' ,
279
277
format : 'esm' ,
@@ -283,7 +281,7 @@ async function v3(builder, external, edge, split, nodeVersion) {
283
281
write (
284
282
`${ dirs . functions } /${ name } .func/.vc-config.json` ,
285
283
JSON . stringify ( {
286
- runtime : `nodejs${ nodeVersion } ` ,
284
+ runtime : `nodejs${ nodeVersion . major } .x ` ,
287
285
handler : 'index.js' ,
288
286
launcherType : 'Nodejs'
289
287
} )
@@ -395,3 +393,14 @@ function write(file, data) {
395
393
396
394
writeFileSync ( file , data ) ;
397
395
}
396
+
397
+ function getNodeVersion ( ) {
398
+ const full = process . version . slice ( 1 ) ; // 'v16.5.0' --> '16.5.0'
399
+ const major = parseInt ( full . split ( '.' ) [ 0 ] ) ; // '16.5.0' --> 16
400
+
401
+ if ( ! Number . isFinite ( major ) ) {
402
+ throw new Error ( 'There was an error getting the current Node version' ) ;
403
+ }
404
+
405
+ return { major, full } ;
406
+ }
0 commit comments