From b24d0084f7094d7718594eb93a60d706377488a9 Mon Sep 17 00:00:00 2001 From: Christian Svensson Date: Fri, 1 Aug 2025 19:04:18 +0200 Subject: [PATCH] fix!: rename the _fresh build folder to .fresh (BREAKING) --- .github/workflows/deploy.yml | 2 +- .gitignore | 2 +- deno.json | 2 +- docs/latest/advanced/builder.md | 2 +- docs/latest/deployment/deno-compile.md | 2 +- docs/latest/deployment/docker.md | 4 ++-- docs/latest/deployment/index.md | 10 +++++----- docs/latest/examples/migration-guide.md | 4 ++-- docs/latest/testing/index.md | 2 +- packages/fresh/src/app.ts | 2 +- packages/fresh/src/dev/builder.ts | 4 ++-- packages/fresh/src/dev/builder_test.ts | 8 ++++---- packages/init/src/init.ts | 10 +++++----- packages/plugin-vite/deno.json | 2 +- packages/plugin-vite/src/mod.ts | 4 ++-- packages/plugin-vite/tests/build_test.ts | 2 +- packages/plugin-vite/tests/test_utils.ts | 10 ++++++---- packages/update/src/update.ts | 7 +++++-- packages/update/src/update_test.ts | 2 +- www/deno.json | 2 +- www/main_test.ts | 4 ++-- 21 files changed, 46 insertions(+), 41 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 44243176b58..4eaa375e933 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -34,4 +34,4 @@ jobs: with: project: "fresh" entrypoint: "server.js" - root: "./www/_fresh/" + root: "./www/.fresh/" diff --git a/.gitignore b/.gitignore index 2665681372f..7ac22668b98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -_fresh/ +.fresh/ .vite/ vendor/ node_modules/ diff --git a/deno.json b/deno.json index 317aed69e50..bbbece1ec05 100644 --- a/deno.json +++ b/deno.json @@ -19,7 +19,7 @@ "release": "deno run -A tools/release.ts" }, "exclude": [ - "**/_fresh/*", + "**/.fresh/*", "**/tmp/*", "*/tests_OLD/**", "**/vite.config.ts.*", diff --git a/docs/latest/advanced/builder.md b/docs/latest/advanced/builder.md index 459b008a489..9d4811d31ed 100644 --- a/docs/latest/advanced/builder.md +++ b/docs/latest/advanced/builder.md @@ -38,7 +38,7 @@ const builder = new Builder({ // The path to your server entry point. (Default: `/main.ts`) serverEntry?: string; // Where to write generated files when doing a production build. - // (default: `/_fresh/`) + // (default: `/.fresh/`) outDir?: string; // Path to static file directory. (Default: `/static/`) staticDir?: string; diff --git a/docs/latest/deployment/deno-compile.md b/docs/latest/deployment/deno-compile.md index 9396bce5bad..38381a31691 100644 --- a/docs/latest/deployment/deno-compile.md +++ b/docs/latest/deployment/deno-compile.md @@ -11,7 +11,7 @@ platform without requiring Deno to be installed. # Build your app first $ deno task build # Generate self-contained executable -deno compile --include static --include _fresh --include deno.json -A my-app _fresh/compiled-entry.js +deno compile --include static --include .fresh --include deno.json -A my-app .fresh/compiled-entry.js ``` The compiled entry supports two environment variables out of the box: diff --git a/docs/latest/deployment/docker.md b/docs/latest/deployment/docker.md index 2054701119f..dd15f03740c 100644 --- a/docs/latest/deployment/docker.md +++ b/docs/latest/deployment/docker.md @@ -25,11 +25,11 @@ WORKDIR /app COPY . . RUN deno task build -RUN deno cache _fresh/server.js +RUN deno cache .fresh/server.js EXPOSE 8000 -CMD ["serve", "-A", "_fresh/server.js"] +CMD ["serve", "-A", ".fresh/server.js"] ``` To build your Docker image inside of a Git repository: diff --git a/docs/latest/deployment/index.md b/docs/latest/deployment/index.md index 37955455f50..59458952ee0 100644 --- a/docs/latest/deployment/index.md +++ b/docs/latest/deployment/index.md @@ -11,15 +11,15 @@ deno task build deno run -A dev.ts build ``` -Once completed, it will have created a `_fresh` folder in the project directory +Once completed, it will have created a `.fresh` folder in the project directory which contains the optimized assets. -> [info]: The `_fresh` folder should not be committed to git. Exclude it via +> [info]: The `.fresh` folder should not be committed to git. Exclude it via > `.gitignore`. > > ```gitignore .gitignore > # Ignore fresh build directory -> _fresh/ +> .fresh/ > ``` ## Running a production build @@ -29,7 +29,7 @@ To run Fresh in production mode, run the `start` task: ```sh Terminal deno task start # or -deno serve -A _fresh/server.js +deno serve -A .fresh/server.js ``` -Fresh will automatically pick up the optimized assets in the `_fresh` directory. +Fresh will automatically pick up the optimized assets in the `.fresh` directory. diff --git a/docs/latest/examples/migration-guide.md b/docs/latest/examples/migration-guide.md index 6c9f3f969d8..c59d885416f 100644 --- a/docs/latest/examples/migration-guide.md +++ b/docs/latest/examples/migration-guide.md @@ -136,7 +136,7 @@ To launch Fresh in production mode: ```diff - deno run -A main.ts -+ deno serve -A _fresh/server.js ++ deno serve -A .fresh/server.js ``` You'll likely have that command inside your `deno.json` as a task. Update it @@ -150,7 +150,7 @@ accordingly. - "preview": "deno run -A main.ts" + "dev": "vite", + "build": "vite build", -+ "preview": "deno serve -A _fresh/server.js" ++ "preview": "deno serve -A .fresh/server.js" } } ``` diff --git a/docs/latest/testing/index.md b/docs/latest/testing/index.md index d4e8588ce78..8ea75226e54 100644 --- a/docs/latest/testing/index.md +++ b/docs/latest/testing/index.md @@ -123,7 +123,7 @@ const builder = await createBuilder({ }); await builder.build(); -const { app } = await import("./path/to/app/_fresh/server.js"); +const { app } = await import("./path/to/app/.fresh/server.js"); Deno.test("My Test", async () => { const handler = app.handler(); diff --git a/packages/fresh/src/app.ts b/packages/fresh/src/app.ts index 08f90dbd32e..b46e245524b 100644 --- a/packages/fresh/src/app.ts +++ b/packages/fresh/src/app.ts @@ -362,7 +362,7 @@ export class App { DENO_DEPLOYMENT_ID !== undefined ) { throw new Error( - `Could not find _fresh directory. Maybe you forgot to run "deno task build"?`, + `Could not find .fresh directory. Maybe you forgot to run "deno task build"?`, ); } else { buildCache = new MockBuildCache([], this.config.mode); diff --git a/packages/fresh/src/dev/builder.ts b/packages/fresh/src/dev/builder.ts index d833176d9a1..bbdba0eb189 100644 --- a/packages/fresh/src/dev/builder.ts +++ b/packages/fresh/src/dev/builder.ts @@ -48,7 +48,7 @@ export interface BuildOptions { * * This can be an absolute path, a file URL or a relative path. * Relative paths are resolved against the `root` option. - * @default "_fresh" + * @default ".fresh" */ outDir?: string; /** @@ -118,7 +118,7 @@ export class Builder { constructor(options?: BuildOptions) { const root = parseDirPath(options?.root ?? ".", Deno.cwd()); const serverEntry = parseDirPath(options?.serverEntry ?? "main.ts", root); - const outDir = parseDirPath(options?.outDir ?? "_fresh", root); + const outDir = parseDirPath(options?.outDir ?? ".fresh", root); const staticDir = parseDirPath(options?.staticDir ?? "static", root); const islandDir = parseDirPath(options?.islandDir ?? "islands", root); const routeDir = parseDirPath(options?.routeDir ?? "routes", root); diff --git a/packages/fresh/src/dev/builder_test.ts b/packages/fresh/src/dev/builder_test.ts index cd973646fc0..7af7b82304b 100644 --- a/packages/fresh/src/dev/builder_test.ts +++ b/packages/fresh/src/dev/builder_test.ts @@ -489,7 +489,7 @@ export const app = new App() await new Builder({ root: tmp }).build(); await withChildProcessServer( - { cwd: tmp, args: ["serve", "-A", "_fresh/server.js"] }, + { cwd: tmp, args: ["serve", "-A", ".fresh/server.js"] }, async (address) => { let res = await fetch(`${address}/foo.txt`); expect(await res.text()).toEqual("ok"); @@ -519,7 +519,7 @@ export const app = new App() await new Builder({ root: tmp, serverEntry: "other.ts" }).build(); await withChildProcessServer( - { cwd: tmp, args: ["serve", "-A", "--port=0", "_fresh/server.js"] }, + { cwd: tmp, args: ["serve", "-A", "--port=0", ".fresh/server.js"] }, async (address) => { const res = await fetch(`${address}`); expect(await res.text()).toEqual("ok"); @@ -714,10 +714,10 @@ export const app = new App() "--include", "static/", "--include", - "_fresh", + ".fresh", "--output", outBin, - path.join("_fresh", "compiled-entry.js"), + path.join(".fresh", "compiled-entry.js"), ], cwd: tmp, }).output(); diff --git a/packages/init/src/init.ts b/packages/init/src/init.ts index fdd9cca640c..97503ce4285 100644 --- a/packages/init/src/init.ts +++ b/packages/init/src/init.ts @@ -148,7 +148,7 @@ export async function initProject( .env.local # Fresh build directory -_fresh/ +.fresh/ # npm + other dependencies node_modules/ vendor/ @@ -167,11 +167,11 @@ ENV DENO_DEPLOYMENT_ID=\${GIT_REVISION} WORKDIR /app COPY . . -RUN deno cache _fresh/server.js +RUN deno cache .fresh/server.js EXPOSE 8000 -CMD ["serve", "-A", "_fresh/server.js"] +CMD ["serve", "-A", ".fresh/server.js"] `; await writeFile("Dockerfile", DOCKERFILE_TEXT); @@ -543,7 +543,7 @@ if (Deno.args.includes("build")) { check: "deno fmt --check . && deno lint . && deno check", dev: "deno run -A --watch=static/,routes/ dev.ts", build: "deno run -A dev.ts build", - start: "deno serve -A _fresh/server.js", + start: "deno serve -A .fresh/server.js", update: "deno run -A -r jsr:@fresh/update .", }, lint: { @@ -551,7 +551,7 @@ if (Deno.args.includes("build")) { tags: ["fresh", "recommended"], }, }, - exclude: ["**/_fresh/*"], + exclude: ["**/.fresh/*"], imports: { "fresh": `jsr:@fresh/core@^${freshVersion}`, "preact": `npm:preact@^${PREACT_VERSION}`, diff --git a/packages/plugin-vite/deno.json b/packages/plugin-vite/deno.json index 1eb70c4e696..a4b388f3539 100644 --- a/packages/plugin-vite/deno.json +++ b/packages/plugin-vite/deno.json @@ -17,7 +17,7 @@ "demo": "vite demo", "debug": "deno run -A --inspect-brk npm:vite demo", "demo:build": "vite build demo", - "demo:start": "cd demo && deno serve -A _fresh/server.js" + "demo:start": "cd demo && deno serve -A .fresh/server.js" }, "imports": { "@babel/core": "npm:@babel/core@^7.28.0", diff --git a/packages/plugin-vite/src/mod.ts b/packages/plugin-vite/src/mod.ts index 89fd189eff5..22fd02e1b2b 100644 --- a/packages/plugin-vite/src/mod.ts +++ b/packages/plugin-vite/src/mod.ts @@ -99,7 +99,7 @@ export function fresh(config?: FreshViteConfig): Plugin[] { manifest: true, outDir: config.environments?.client?.build?.outDir ?? - "_fresh/client", + ".fresh/client", rollupOptions: { preserveEntrySignatures: "strict", input: { @@ -116,7 +116,7 @@ export function fresh(config?: FreshViteConfig): Plugin[] { copyPublicDir: false, outDir: config.environments?.ssr?.build?.outDir ?? - "_fresh/server", + ".fresh/server", rollupOptions: { onwarn(warning, handler) { // Ignore "use client"; warnings diff --git a/packages/plugin-vite/tests/build_test.ts b/packages/plugin-vite/tests/build_test.ts index c9f8fbdac53..27331c26a6e 100644 --- a/packages/plugin-vite/tests/build_test.ts +++ b/packages/plugin-vite/tests/build_test.ts @@ -455,7 +455,7 @@ Deno.test({ // Read the generated server.js to check asset paths const serverJs = await Deno.readTextFile( - path.join(res.tmp, "_fresh", "server.js"), + path.join(res.tmp, ".fresh", "server.js"), ); // Asset paths should include the base path /my-app/ diff --git a/packages/plugin-vite/tests/test_utils.ts b/packages/plugin-vite/tests/test_utils.ts index 912367dca12..5118b6b7ce1 100644 --- a/packages/plugin-vite/tests/test_utils.ts +++ b/packages/plugin-vite/tests/test_utils.ts @@ -26,7 +26,9 @@ async function copyDir(from: string, to: string) { const entries = walk(from, { includeFiles: true, includeDirs: false, - skip: [/([\\/]+(_fresh|node_modules|vendor)[\\/]+|[\\/]+vite\.config\.ts)/], + skip: [ + /([\\/]+(\.fresh|node_modules|vendor)[\\/]+|[\\/]+vite\.config\.ts)/, + ], }); for await (const entry of entries) { @@ -150,12 +152,12 @@ export async function buildVite( environments: { ssr: { build: { - outDir: path.join(tmp.dir, "_fresh", "server"), + outDir: path.join(tmp.dir, ".fresh", "server"), }, }, client: { build: { - outDir: path.join(tmp.dir, "_fresh", "client"), + outDir: path.join(tmp.dir, ".fresh", "client"), }, }, }, @@ -199,7 +201,7 @@ export async function launchProd( { cwd: options.cwd, args: options.args ?? - ["serve", "-A", "--cached-only", "--port", "0", "_fresh/server.js"], + ["serve", "-A", "--cached-only", "--port", "0", ".fresh/server.js"], }, fn, ); diff --git a/packages/update/src/update.ts b/packages/update/src/update.ts index 82b9211c981..9d536c4420a 100644 --- a/packages/update/src/update.ts +++ b/packages/update/src/update.ts @@ -137,8 +137,11 @@ export async function updateProject(dir: string) { tasks.check = "deno fmt --check && deno lint && deno check"; } - if (tasks.preview === "deno run -A main.ts") { - tasks.preview = "deno serve -A _fresh/server.js"; + if ( + tasks.preview === "deno run -A main.ts" || + tasks.preview === "deno serve -A _fresh/server.js" + ) { + tasks.preview = "deno serve -A .fresh/server.js"; } } }); diff --git a/packages/update/src/update_test.ts b/packages/update/src/update_test.ts index e2abdac761e..f92b99b949f 100644 --- a/packages/update/src/update_test.ts +++ b/packages/update/src/update_test.ts @@ -116,7 +116,7 @@ Deno.test("update - 1.x project deno.json tasks + lock", async () => { .toEqual({ build: "deno run -A dev.ts build", check: "deno fmt --check && deno lint && deno check", - preview: "deno serve -A _fresh/server.js", + preview: "deno serve -A .fresh/server.js", start: "deno run -A --watch=static/,routes/ dev.ts", update: "deno run -A -r jsr:@fresh/update .", }); diff --git a/www/deno.json b/www/deno.json index 5353381bb4d..d73c0687de5 100644 --- a/www/deno.json +++ b/www/deno.json @@ -1,6 +1,6 @@ { "tasks": { - "start": "deno serve -A _fresh/server.js", + "start": "deno serve -A .fresh/server.js", "dev": "vite", "build": "vite build" }, diff --git a/www/main_test.ts b/www/main_test.ts index 36e7e7297be..0299eeb9773 100644 --- a/www/main_test.ts +++ b/www/main_test.ts @@ -12,7 +12,7 @@ Deno.test("CORS should not set on GET /fresh-badge.svg", async () => { await withChildProcessServer( { cwd: result.tmp, - args: ["serve", "-A", "--port", "0", "_fresh/server.js"], + args: ["serve", "-A", "--port", "0", ".fresh/server.js"], }, async (address) => { const resp = await fetch(`${address}/fresh-badge.svg`); @@ -29,7 +29,7 @@ Deno.test({ await withChildProcessServer( { cwd: result.tmp, - args: ["serve", "-A", "--port", "0", "_fresh/server.js"], + args: ["serve", "-A", "--port", "0", ".fresh/server.js"], }, async (address) => { await withBrowser(async (page) => {