From f948a4e33adc5b7f3d43a52d670b8d3a42fcd830 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 8 Feb 2023 14:57:31 -0500 Subject: [PATCH 1/4] revert #8899 --- packages/adapter-netlify/index.js | 45 ++----------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 987d55ca0dee..d2033d7a47ef 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -1,16 +1,8 @@ -import { - appendFileSync, - existsSync, - readFileSync, - writeFileSync, - unlinkSync, - createReadStream -} from 'fs'; +import { appendFileSync, existsSync, readFileSync, writeFileSync } from 'fs'; import { dirname, join, resolve, posix } from 'path'; import { fileURLToPath } from 'url'; import esbuild from 'esbuild'; import toml from '@iarna/toml'; -import { createInterface } from 'readline'; /** * @typedef {{ @@ -59,43 +51,10 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { // "build" is the default publish directory when Netlify detects SvelteKit const publish = get_publish_directory(netlify_config, builder) || 'build'; - const redirects_file_path = join(publish, '_redirects'); - - // If redirects file exists - empty any netlify generated files in functions-internal - // Without removing other files that may have been auto generated by integrations - if (existsSync(redirects_file_path)) { - // Read each line of the file - const fileStream = createReadStream(redirects_file_path); - const rl = createInterface({ - input: fileStream, - crlfDelay: Infinity - }); - - // Create an array of lines - const lines = []; - for await (const line of rl) { - lines.push(line); - } - - const functions_internal = join('.netlify', 'functions-internal'); - - // Loop through redirects, and delete corresponding functions-internal files - lines.forEach((line) => { - if (line) { - // example line /.netlify/functions/{function_name} 200 - const path = line.split(' ')[1]; - const function_name = path.split('/').pop(); - const mjsFile = join(functions_internal, `${function_name}.mjs`); - const jsonFile = join(functions_internal, `${function_name}.json`); - if (existsSync(mjsFile)) unlinkSync(mjsFile); - if (existsSync(jsonFile)) unlinkSync(jsonFile); - } - }); - } - // empty out existing build directories builder.rimraf(publish); builder.rimraf('.netlify/edge-functions'); + builder.rimraf('.netlify/functions-internal'); builder.rimraf('.netlify/server'); builder.rimraf('.netlify/package.json'); builder.rimraf('.netlify/serverless.js'); From d624966dde8d65808b4e72ee7b68b50b44e36181 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 8 Feb 2023 14:58:51 -0500 Subject: [PATCH 2/4] namespace sveltekit functions --- packages/adapter-netlify/index.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index d2033d7a47ef..4581db642f6c 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -54,7 +54,7 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { // empty out existing build directories builder.rimraf(publish); builder.rimraf('.netlify/edge-functions'); - builder.rimraf('.netlify/functions-internal'); + builder.rimraf('.netlify/functions-internal/.svelte-kit'); builder.rimraf('.netlify/server'); builder.rimraf('.netlify/package.json'); builder.rimraf('.netlify/serverless.js'); @@ -154,7 +154,7 @@ async function generate_edge_functions({ builder }) { * @param { boolean } params.split */ async function generate_lambda_functions({ builder, publish, split }) { - builder.mkdirp('.netlify/functions-internal'); + builder.mkdirp('.netlify/functions-internal/.svelte-kit'); /** @type {string[]} */ const redirects = []; @@ -217,8 +217,8 @@ async function generate_lambda_functions({ builder, publish, split }) { const fn = `import { init } from '../serverless.js';\n\nexport const handler = init(${manifest});\n`; - writeFileSync(`.netlify/functions-internal/${name}.mjs`, fn); - writeFileSync(`.netlify/functions-internal/${name}.json`, fn_config); + writeFileSync(`.netlify/functions-internal/.svelte-kit/${name}.mjs`, fn); + writeFileSync(`.netlify/functions-internal/.svelte-kit/${name}.json`, fn_config); redirects.push(`${pattern} /.netlify/functions/${name} 200`); redirects.push(`${pattern}/__data.json /.netlify/functions/${name} 200`); @@ -230,9 +230,9 @@ async function generate_lambda_functions({ builder, publish, split }) { const fn = `import { init } from '../serverless.js';\n\nexport const handler = init(${manifest});\n`; - writeFileSync(`.netlify/functions-internal/render.json`, fn_config); - writeFileSync('.netlify/functions-internal/render.mjs', fn); - redirects.push('* /.netlify/functions/render 200'); + writeFileSync(`.netlify/functions-internal/.svelte-kit/render.json`, fn_config); + writeFileSync('.netlify/functions-internal/.svelte-kit/render.mjs', fn); + redirects.push('* /.netlify/functions/.svelte-kit/render 200'); } // this should happen at the end, after builder.writeClient(...), From 6a07bd836339ce367d277d0108897a2b44e43f3b Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 8 Feb 2023 14:59:41 -0500 Subject: [PATCH 3/4] changeset --- .changeset/perfect-snails-crash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/perfect-snails-crash.md diff --git a/.changeset/perfect-snails-crash.md b/.changeset/perfect-snails-crash.md new file mode 100644 index 000000000000..a7456faf70c2 --- /dev/null +++ b/.changeset/perfect-snails-crash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-netlify': patch +--- + +chore: simplify functions-internal cleanup From 3556134f039a30bfeffe565abbec2b5f8e841662 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 8 Feb 2023 15:26:32 -0500 Subject: [PATCH 4/4] looks like netlify barfs on subdirectories inside functions-internal --- packages/adapter-netlify/index.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 4581db642f6c..2d2f91a98cb4 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -1,4 +1,4 @@ -import { appendFileSync, existsSync, readFileSync, writeFileSync } from 'fs'; +import { appendFileSync, existsSync, readdirSync, readFileSync, writeFileSync } from 'fs'; import { dirname, join, resolve, posix } from 'path'; import { fileURLToPath } from 'url'; import esbuild from 'esbuild'; @@ -33,6 +33,8 @@ const edge_set_in_env_var = process.env.NETLIFY_SVELTEKIT_USE_EDGE === 'true' || process.env.NETLIFY_SVELTEKIT_USE_EDGE === '1'; +const FUNCTION_PREFIX = 'sveltekit-'; + /** @type {import('.').default} */ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { return { @@ -54,11 +56,18 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { // empty out existing build directories builder.rimraf(publish); builder.rimraf('.netlify/edge-functions'); - builder.rimraf('.netlify/functions-internal/.svelte-kit'); builder.rimraf('.netlify/server'); builder.rimraf('.netlify/package.json'); builder.rimraf('.netlify/serverless.js'); + if (existsSync('.netlify/functions-internal')) { + for (const file of readdirSync('.netlify/functions-internal')) { + if (file.startsWith(FUNCTION_PREFIX)) { + builder.rimraf(join('.netlify/functions-internal', file)); + } + } + } + builder.log.minor(`Publishing to "${publish}"`); builder.log.minor('Copying assets...'); @@ -195,7 +204,8 @@ async function generate_lambda_functions({ builder, publish, split }) { } const pattern = `/${parts.join('/')}`; - const name = parts.join('-').replace(/[:.]/g, '_').replace('*', '__rest') || 'index'; + const name = + FUNCTION_PREFIX + parts.join('-').replace(/[:.]/g, '_').replace('*', '__rest') || 'index'; // skip routes with identical patterns, they were already folded into another function if (seen.has(pattern)) continue; @@ -217,8 +227,8 @@ async function generate_lambda_functions({ builder, publish, split }) { const fn = `import { init } from '../serverless.js';\n\nexport const handler = init(${manifest});\n`; - writeFileSync(`.netlify/functions-internal/.svelte-kit/${name}.mjs`, fn); - writeFileSync(`.netlify/functions-internal/.svelte-kit/${name}.json`, fn_config); + writeFileSync(`.netlify/functions-internal/${name}.mjs`, fn); + writeFileSync(`.netlify/functions-internal/${name}.json`, fn_config); redirects.push(`${pattern} /.netlify/functions/${name} 200`); redirects.push(`${pattern}/__data.json /.netlify/functions/${name} 200`); @@ -230,9 +240,9 @@ async function generate_lambda_functions({ builder, publish, split }) { const fn = `import { init } from '../serverless.js';\n\nexport const handler = init(${manifest});\n`; - writeFileSync(`.netlify/functions-internal/.svelte-kit/render.json`, fn_config); - writeFileSync('.netlify/functions-internal/.svelte-kit/render.mjs', fn); - redirects.push('* /.netlify/functions/.svelte-kit/render 200'); + writeFileSync(`.netlify/functions-internal/${FUNCTION_PREFIX}render.json`, fn_config); + writeFileSync(`.netlify/functions-internal/${FUNCTION_PREFIX}render.mjs`, fn); + redirects.push(`* /.netlify/functions/${FUNCTION_PREFIX}render 200`); } // this should happen at the end, after builder.writeClient(...),