- Server functions can return not_found: true to render the 404 page with status 404. - Page components and window.__PAGE_PROPS__ (and HMR updates) only get props, query, url and error. response_options, redirect, cache settings and res_transform stay on the server, so cookies and private headers no longer end up in the HTML. BunextPageProps is narrowed to match (breaking for code that read server-only fields from component props). - response_options headers go through a Headers object, so repeated headers such as several Set-Cookie survive. - Redirects: status_code wins over permanent; response_options headers and res_transform apply to redirects too. - Gzip for compressible text responses; compress: false to turn it off. - Files the router matches but never bundles (.server.ts, __root, excluded paths and directories) return 404 instead of looping through dev rebuild retries. - Missing public files return 404 rather than 403, so dotted page paths like /users/john.doe fall through to pages again. - importFresh detects rewrites within the filesystem's mtime granularity. - README: self-hosted React (not esm.sh), snake_case option names, static file serving, cache headers, the new options. Co-Authored-By: Claude Opus 5.5 <[email protected]>
49 lines
1.9 KiB
JavaScript
49 lines
1.9 KiB
JavaScript
import path from "path";
|
|
import { mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "fs";
|
|
import grabDirNames from "../utils/grab-dir-names";
|
|
import grabConstants from "../utils/grab-constants";
|
|
import { AppData } from "../data/app-data";
|
|
export default function cleanupLogsDirs() {
|
|
const { BUNX_LOGS_DIR } = grabDirNames();
|
|
const logs_dirs = readdirSync(BUNX_LOGS_DIR);
|
|
const { config } = grabConstants();
|
|
const MAX_LOGS = config.max_logs || AppData["DefaultMaxLogs"];
|
|
for (let i = 0; i < logs_dirs.length; i++) {
|
|
const dir = logs_dirs[i];
|
|
const full_path = path.join(BUNX_LOGS_DIR, dir);
|
|
const path_stats = statSync(full_path);
|
|
if (!path_stats.isDirectory()) {
|
|
continue;
|
|
}
|
|
const sub_dir_files = readdirSync(full_path).sort((a, b) => {
|
|
const timestamp_a = Number(a.split(".")[0]);
|
|
const timestamp_b = Number(b.split(".")[0]);
|
|
if (timestamp_a > timestamp_b)
|
|
return 1;
|
|
return -1;
|
|
});
|
|
for (let j = 0; j < sub_dir_files.length; j++) {
|
|
const sub_dir_file = sub_dir_files[j];
|
|
const sub_dir_file_full_path = path.join(full_path, sub_dir_file);
|
|
const sub_dir_file_Stats = statSync(sub_dir_file_full_path);
|
|
if (!sub_dir_file_Stats.isFile()) {
|
|
rmSync(sub_dir_file_full_path, {
|
|
force: true,
|
|
recursive: true,
|
|
});
|
|
continue;
|
|
}
|
|
if (j > MAX_LOGS - 1) {
|
|
rmSync(sub_dir_file_full_path, { force: true });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// log.info("Running development server ...");
|
|
// try {
|
|
// rmSync(HYDRATION_DST_DIR, { recursive: true });
|
|
// rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true });
|
|
// } catch (error) {}
|
|
// await bunextInit();
|
|
// await startServer();
|