From df320116528e00ab082396531b4deffbb0707b78 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Mon, 30 Jan 2023 14:50:44 -0500 Subject: [PATCH] Fix Cloudflare directory mode regression (#6046) * Fix Cloudflare directory mode regression * Adding a changeset --- .changeset/long-boats-perform.md | 5 +++++ packages/integrations/cloudflare/src/index.ts | 14 +++++++------ .../cloudflare/test/directory.test.js | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 .changeset/long-boats-perform.md create mode 100644 packages/integrations/cloudflare/test/directory.test.js diff --git a/.changeset/long-boats-perform.md b/.changeset/long-boats-perform.md new file mode 100644 index 000000000..3eb471bb8 --- /dev/null +++ b/.changeset/long-boats-perform.md @@ -0,0 +1,5 @@ +--- +'@astrojs/cloudflare': patch +--- + +Cloudflare fix for building to directory mode diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index a859e3009..3433cf46d 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -3,7 +3,7 @@ import esbuild from 'esbuild'; import * as fs from 'fs'; import * as os from 'os'; import glob from 'tiny-glob'; -import { fileURLToPath } from 'url'; +import { fileURLToPath, pathToFileURL } from 'url'; type Options = { mode: 'directory' | 'advanced'; @@ -89,9 +89,11 @@ export default function createIntegration(args?: Options): AstroIntegration { } }, 'astro:build:done': async ({ pages }) => { - const entryPath = fileURLToPath(new URL(_buildConfig.serverEntry, _buildConfig.server)), - entryUrl = new URL(_buildConfig.serverEntry, _config.outDir), - buildPath = fileURLToPath(entryUrl); + const entryPath = fileURLToPath(new URL(_buildConfig.serverEntry, _buildConfig.server)); + const entryUrl = new URL(_buildConfig.serverEntry, _config.outDir); + const buildPath = fileURLToPath(entryUrl); + // A URL for the final build path after renaming + const finalBuildUrl = pathToFileURL(buildPath.replace(/\.mjs$/, '.js')); await esbuild.build({ target: 'es2020', @@ -108,7 +110,7 @@ export default function createIntegration(args?: Options): AstroIntegration { }); // Rename to worker.js - await fs.promises.rename(buildPath, buildPath.replace(/\.mjs$/, '.js')); + await fs.promises.rename(buildPath, finalBuildUrl); // throw the server folder in the bin const serverUrl = new URL(_buildConfig.server); @@ -204,7 +206,7 @@ export default function createIntegration(args?: Options): AstroIntegration { const functionsUrl = new URL(`file://${process.cwd()}/functions/`); await fs.promises.mkdir(functionsUrl, { recursive: true }); const directoryUrl = new URL('[[path]].js', functionsUrl); - await fs.promises.rename(entryUrl, directoryUrl); + await fs.promises.rename(finalBuildUrl, directoryUrl); } }, }, diff --git a/packages/integrations/cloudflare/test/directory.test.js b/packages/integrations/cloudflare/test/directory.test.js new file mode 100644 index 000000000..771f8a347 --- /dev/null +++ b/packages/integrations/cloudflare/test/directory.test.js @@ -0,0 +1,20 @@ +import { loadFixture, runCLI } from './test-utils.js'; +import { expect } from 'chai'; +import * as cheerio from 'cheerio'; +import cloudflare from '../dist/index.js'; + +describe('mode: "directory"', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/basics/', + adapter: cloudflare({ mode: 'directory' }) + }); + }); + + it('Builds', async () => { + await fixture.build(); + }); +});