Rename global variables

This commit is contained in:
Benjamin Toby 2026-08-03 12:01:40 +01:00
parent 87948340b0
commit 78e86b3999
78 changed files with 431 additions and 408 deletions

View File

@ -13,7 +13,7 @@ export default function () {
rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true }); rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true });
} }
catch (error) { } catch (error) { }
global.SKIPPED_BROWSER_MODULES = new Set(); global.BUNEXT_SKIPPED_BROWSER_MODULES = new Set();
await bunextInit({ build_only: true }); await bunextInit({ build_only: true });
log.success("Modules Built Successfully!"); log.success("Modules Built Successfully!");
process.exit(); process.exit();

View File

@ -13,7 +13,7 @@ export default async function allPagesESBuildContextBundler(params) {
try { try {
const did_process_exit_because_of_bundler_error = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE); const did_process_exit_because_of_bundler_error = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE);
const pages = grabAllPages({ exclude_api: true }); const pages = grabAllPages({ exclude_api: true });
global.PAGE_FILES = pages; global.BUNEXT_PAGE_FILES = pages;
const dev = isDevelopment(); const dev = isDevelopment();
const entryToPage = new Map(); const entryToPage = new Map();
for (const page of pages) { for (const page of pages) {
@ -28,7 +28,7 @@ export default async function allPagesESBuildContextBundler(params) {
entryToPage.set(entryFile, { ...page, tsx }); entryToPage.set(entryFile, { ...page, tsx });
} }
const entryPoints = [...entryToPage.keys()].map((e) => `hydration-virtual:${e}`); const entryPoints = [...entryToPage.keys()].map((e) => `hydration-virtual:${e}`);
global.BUNDLER_CTX = await esbuild.context({ global.BUNEXT_BUNDLER_CTX = await esbuild.context({
entryPoints, entryPoints,
outdir: HYDRATION_DST_DIR, outdir: HYDRATION_DST_DIR,
bundle: true, bundle: true,
@ -62,13 +62,13 @@ export default async function allPagesESBuildContextBundler(params) {
"react-dom/client", "react-dom/client",
"react/jsx-runtime", "react/jsx-runtime",
"react/jsx-dev-runtime", "react/jsx-dev-runtime",
...(global.CONFIG.page_compiler_excludes || []), ...(global.BUNEXT_CONFIG.page_compiler_excludes || []),
], ],
logLevel: did_process_exit_because_of_bundler_error logLevel: did_process_exit_because_of_bundler_error
? "silent" ? "silent"
: undefined, : undefined,
}); });
await global.BUNDLER_CTX.rebuild(); await global.BUNEXT_BUNDLER_CTX.rebuild();
} }
catch (error) { catch (error) {
console.log(`ESBUILD Error =>`, error); console.log(`ESBUILD Error =>`, error);

View File

@ -1,18 +1,18 @@
export default async function buildOnstartErrorHandler(params) { export default async function buildOnstartErrorHandler(params) {
// const error_msg = `Build Failed. Please check all your components and imports.`; // const error_msg = `Build Failed. Please check all your components and imports.`;
// log.error(error_msg); // log.error(error_msg);
if (global.BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_BUNDLER_CTX_DISPOSED) {
return; return;
} }
// console.log(`Killing Bundler ...`); // console.log(`Killing Bundler ...`);
// console.log(`global.BUNDLER_CTX_DISPOSED`, global.BUNDLER_CTX_DISPOSED); // console.log(`global.BUNEXT_BUNDLER_CTX_DISPOSED`, global.BUNEXT_BUNDLER_CTX_DISPOSED);
global.BUNDLER_CTX_DISPOSED = true; global.BUNEXT_BUNDLER_CTX_DISPOSED = true;
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
await Promise.all([ await Promise.all([
global.SSR_BUNDLER_CTX?.dispose(), global.BUNEXT_SSR_BUNDLER_CTX?.dispose(),
global.BUNDLER_CTX?.dispose(), global.BUNEXT_BUNDLER_CTX?.dispose(),
]); ]);
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
global.BUNDLER_CTX = undefined; global.BUNEXT_BUNDLER_CTX = undefined;
} }

View File

@ -62,7 +62,7 @@ export default async function bunReactModulesBundler() {
}); });
rmSync(tmpDir, { force: true, recursive: true }); rmSync(tmpDir, { force: true, recursive: true });
const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext"); const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext");
global.REACT_IMPORTS_MAP = { global.BUNEXT_REACT_IMPORTS_MAP = {
imports: { imports: {
react: `${PUBLIC_ROOT}/react.js`, react: `${PUBLIC_ROOT}/react.js`,
"react-dom": `${PUBLIC_ROOT}/react-dom.js`, "react-dom": `${PUBLIC_ROOT}/react-dom.js`,

View File

@ -16,7 +16,7 @@ export default async function pagesSSRBundler(params) {
include_server: true, include_server: true,
}); });
const dev = isDevelopment(); const dev = isDevelopment();
const config = global.CONFIG; const config = global.BUNEXT_CONFIG;
try { try {
writeFileSync(path.join(BUNX_TMP_DIR, "ssr-pages.json"), JSON.stringify(pages, null, 4)); writeFileSync(path.join(BUNX_TMP_DIR, "ssr-pages.json"), JSON.stringify(pages, null, 4));
} }
@ -88,7 +88,7 @@ export default async function pagesSSRBundler(params) {
}); });
} }
catch (error) { catch (error) {
global.SSR_BUNDLER_CTX_DISPOSED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true;
log.error(`SSR Bundler Error: ${error}`); log.error(`SSR Bundler Error: ${error}`);
} }
} }

View File

@ -11,9 +11,9 @@ const { BUNX_CWD_MODULE_CACHE_DIR } = grabDirNames();
export default async function pagesSSRContextBundler(params) { export default async function pagesSSRContextBundler(params) {
const pages = grabAllPages(); const pages = grabAllPages();
const dev = isDevelopment(); const dev = isDevelopment();
if (global.SSR_BUNDLER_CTX) { if (global.BUNEXT_SSR_BUNDLER_CTX) {
await global.SSR_BUNDLER_CTX.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX.dispose();
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
} }
const entryToPage = new Map(); const entryToPage = new Map();
const { root_file_path } = grabRootFilePath(); const { root_file_path } = grabRootFilePath();
@ -32,7 +32,7 @@ export default async function pagesSSRContextBundler(params) {
entryToPage.set(page.local_path, { ...page, tsx }); entryToPage.set(page.local_path, { ...page, tsx });
} }
const entryPoints = [...entryToPage.keys()].map((e) => `ssr-virtual:${e}`); const entryPoints = [...entryToPage.keys()].map((e) => `ssr-virtual:${e}`);
global.SSR_BUNDLER_CTX = await esbuild.context({ global.BUNEXT_SSR_BUNDLER_CTX = await esbuild.context({
entryPoints, entryPoints,
outdir: BUNX_CWD_MODULE_CACHE_DIR, outdir: BUNX_CWD_MODULE_CACHE_DIR,
bundle: true, bundle: true,
@ -65,5 +65,5 @@ export default async function pagesSSRContextBundler(params) {
], ],
// logLevel: "silent", // logLevel: "silent",
}); });
await global.SSR_BUNDLER_CTX.rebuild(); await global.BUNEXT_SSR_BUNDLER_CTX.rebuild();
} }

View File

@ -5,7 +5,7 @@ const BunSkipNonBrowserPlugin = {
const skipFilter = /^(bun:|node:|fs$|path$|os$|crypto$|net$|events$|util$|tls$|url$|process$)/; const skipFilter = /^(bun:|node:|fs$|path$|os$|crypto$|net$|events$|util$|tls$|url$|process$)/;
// const skipped_modules = new Set<string>(); // const skipped_modules = new Set<string>();
build.onResolve({ filter: skipFilter }, (args) => { build.onResolve({ filter: skipFilter }, (args) => {
global.SKIPPED_BROWSER_MODULES.add(args.path); global.BUNEXT_SKIPPED_BROWSER_MODULES.add(args.path);
return { return {
path: args.path, path: args.path,
namespace: "skipped", namespace: "skipped",
@ -13,8 +13,8 @@ const BunSkipNonBrowserPlugin = {
}; };
}); });
// build.onEnd(() => { // build.onEnd(() => {
// log.warn(`global.SKIPPED_BROWSER_MODULES`, [ // log.warn(`global.BUNEXT_SKIPPED_BROWSER_MODULES`, [
// ...global.SKIPPED_BROWSER_MODULES, // ...global.BUNEXT_SKIPPED_BROWSER_MODULES,
// ]); // ]);
// }); // });
// build.onResolve({ filter: /^[^./]/ }, (args) => { // build.onResolve({ filter: /^[^./]/ }, (args) => {

View File

@ -17,29 +17,29 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn,
name: "artifact-tracker", name: "artifact-tracker",
setup(build) { setup(build) {
build.onStart(async () => { build.onStart(async () => {
global.MAIN_CTX_BUILD_STARTS++; global.BUNEXT_MAIN_CTX_BUILD_STARTS++;
build_start = performance.now(); build_start = performance.now();
const does_error_file_exist = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE); const does_error_file_exist = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE);
if (global.MAIN_CTX_BUILD_STARTS >= MAX_BUILD_STARTS && if (global.BUNEXT_MAIN_CTX_BUILD_STARTS >= MAX_BUILD_STARTS &&
!does_error_file_exist) { !does_error_file_exist) {
await buildOnstartErrorHandler(); await buildOnstartErrorHandler();
} }
}); });
build.onEnd(async (result) => { build.onEnd(async (result) => {
if (result.errors.length > 0) { if (result.errors.length > 0) {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
log.error(`Build errors:`); log.error(`Build errors:`);
for (const err of result.errors) { for (const err of result.errors) {
log.error(` ${err.text}${err.location ? ` (${err.location.file}:${err.location.line}:${err.location.column})` : ""}`); log.error(` ${err.text}${err.location ? ` (${err.location.file}:${err.location.line}:${err.location.column})` : ""}`);
} }
for (let i = global.HMR_CONTROLLERS.length - 1; i >= 0; i--) { for (let i = global.BUNEXT_HMR_CONTROLLERS.length - 1; i >= 0; i--) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
try { try {
controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`); controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`);
} }
catch { catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
return; return;
@ -51,16 +51,17 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn,
if (artifacts?.[0] && artifacts.length > 0) { if (artifacts?.[0] && artifacts.length > 0) {
for (let i = 0; i < artifacts.length; i++) { for (let i = 0; i < artifacts.length; i++) {
const artifact = artifacts[i]; const artifact = artifacts[i];
if (artifact?.local_path && global.BUNDLER_CTX_MAP) { if (artifact?.local_path &&
global.BUNDLER_CTX_MAP[artifact.local_path] = global.BUNEXT_BUNDLER_CTX_MAP) {
_.merge(global.BUNDLER_CTX_MAP[artifact.local_path], artifact); global.BUNEXT_BUNDLER_CTX_MAP[artifact.local_path] =
_.merge(global.BUNEXT_BUNDLER_CTX_MAP[artifact.local_path], artifact);
} }
} }
} }
const elapsed = (performance.now() - build_start).toFixed(0); const elapsed = (performance.now() - build_start).toFixed(0);
log.success(`[Built] in ${elapsed}ms`); log.success(`[Built] in ${elapsed}ms`);
global.MAIN_CTX_BUILD_STARTS = 0; global.BUNEXT_MAIN_CTX_BUILD_STARTS = 0;
global.BUNDLER_CTX_DISPOSED = false; global.BUNEXT_BUNDLER_CTX_DISPOSED = false;
const does_error_file_exist = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE); const does_error_file_exist = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE);
// SSR must finish before HMR so server props are fresh // SSR must finish before HMR so server props are fresh
if (build_only) { if (build_only) {
@ -94,8 +95,8 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn,
} }
} }
} }
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
}); });
}, },
}; };

View File

@ -15,19 +15,19 @@ export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) {
build_starts++; build_starts++;
build_start = performance.now(); build_start = performance.now();
if (build_starts == MAX_BUILD_STARTS) { if (build_starts == MAX_BUILD_STARTS) {
global.SSR_BUNDLER_CTX_DISPOSED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true;
await global.SSR_BUNDLER_CTX?.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX?.dispose();
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
} }
}); });
build.onEnd(async (result) => { build.onEnd(async (result) => {
if (result.errors.length > 0) { if (result.errors.length > 0) {
global.SSR_BUNDLER_CTX_DISPOSED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true;
try { try {
await global.SSR_BUNDLER_CTX?.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX?.dispose();
} }
catch { } catch { }
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
build_starts = 0; build_starts = 0;
for (const err of result.errors) { for (const err of result.errors) {
console.error(`SSR Build error: ${err.text}${err.location ? ` (${err.location.file}:${err.location.line}:${err.location.column})` : ""}`); console.error(`SSR Build error: ${err.text}${err.location ? ` (${err.location.file}:${err.location.line}:${err.location.column})` : ""}`);
@ -43,9 +43,8 @@ export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) {
for (let i = 0; i < artifacts.length; i++) { for (let i = 0; i < artifacts.length; i++) {
const artifact = artifacts[i]; const artifact = artifacts[i];
if (artifact?.local_path && if (artifact?.local_path &&
global.SSR_BUNDLER_CTX_MAP) { global.BUNEXT_SSR_BUNDLER_CTX_MAP) {
global.SSR_BUNDLER_CTX_MAP[artifact.local_path] = global.BUNEXT_SSR_BUNDLER_CTX_MAP[artifact.local_path] = artifact;
artifact;
} }
} }
// post_build_fn?.({ artifacts }); // post_build_fn?.({ artifacts });
@ -55,10 +54,10 @@ export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) {
// log.success(`SSR [Built] in ${elapsed}ms`); // log.success(`SSR [Built] in ${elapsed}ms`);
} }
try { try {
writeFileSync(path.join(BUNX_TMP_DIR, "ctx-map.json"), JSON.stringify(global.SSR_BUNDLER_CTX_MAP, null, 4)); writeFileSync(path.join(BUNX_TMP_DIR, "ctx-map.json"), JSON.stringify(global.BUNEXT_SSR_BUNDLER_CTX_MAP, null, 4));
} }
catch (error) { } catch (error) { }
global.SSR_BUNDLER_CTX_DISPOSED = false; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = false;
}); });
}, },
}; };

View File

@ -65,7 +65,7 @@ export default async function reactModulesBundler() {
}); });
rmSync(tmpDir, { force: true, recursive: true }); rmSync(tmpDir, { force: true, recursive: true });
const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext"); const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext");
global.REACT_IMPORTS_MAP = { global.BUNEXT_REACT_IMPORTS_MAP = {
imports: { imports: {
react: `${PUBLIC_ROOT}/react.js`, react: `${PUBLIC_ROOT}/react.js`,
"react-dom": `${PUBLIC_ROOT}/react-dom.js`, "react-dom": `${PUBLIC_ROOT}/react-dom.js`,

View File

@ -8,8 +8,8 @@ export default async function recordArtifacts({ artifacts, page_file_paths, }) {
artifacts_map[artifact.local_path] = artifact; artifacts_map[artifact.local_path] = artifact;
} }
} }
if (global.BUNDLER_CTX_MAP) { if (global.BUNEXT_BUNDLER_CTX_MAP) {
global.BUNDLER_CTX_MAP = _.merge(global.BUNDLER_CTX_MAP, artifacts_map); global.BUNEXT_BUNDLER_CTX_MAP = _.merge(global.BUNEXT_BUNDLER_CTX_MAP, artifacts_map);
} }
// await Bun.write( // await Bun.write(
// HYDRATION_DST_DIR_MAP_JSON_FILE, // HYDRATION_DST_DIR_MAP_JSON_FILE,

View File

@ -8,44 +8,44 @@ import type { FSWatcher } from "fs";
* # Declare Global Variables * # Declare Global Variables
*/ */
declare global { declare global {
var CONFIG: BunextConfig; var BUNEXT_CONFIG: BunextConfig;
var SERVER: Server<any> | undefined; var BUNEXT_SERVER: Server<any> | undefined;
var RECOMPILING: boolean; var BUNEXT_RECOMPILING: boolean;
var BUILDING_SSR: boolean; var BUNEXT_BUILDING_SSR: boolean;
var IS_SERVER_COMPONENT: boolean; var BUNEXT_IS_SERVER_COMPONENT: boolean;
var WATCHER_TIMEOUT: any; var BUNEXT_WATCHER_TIMEOUT: any;
var ROUTER: FileSystemRouter; var BUNEXT_ROUTER: FileSystemRouter;
var HMR_CONTROLLERS: GlobalHMRControllerObject[]; var BUNEXT_HMR_CONTROLLERS: GlobalHMRControllerObject[];
var LAST_BUILD_TIME: number; var BUNEXT_LAST_BUILD_TIME: number;
var BUNDLER_CTX_MAP: { var BUNEXT_BUNDLER_CTX_MAP: {
[k: string]: BundlerCTXMap; [k: string]: BundlerCTXMap;
}; };
var SSR_BUNDLER_CTX_MAP: { var BUNEXT_SSR_BUNDLER_CTX_MAP: {
[k: string]: BundlerCTXMap; [k: string]: BundlerCTXMap;
}; };
var BUNDLER_REBUILDS: 0; var BUNEXT_BUNDLER_REBUILDS: 0;
var PAGES_SRC_WATCHER: FSWatcher | undefined; var BUNEXT_PAGES_SRC_WATCHER: FSWatcher | undefined;
var CURRENT_VERSION: string | undefined; var BUNEXT_CURRENT_VERSION: string | undefined;
var PAGE_FILES: PageFiles[]; var BUNEXT_PAGE_FILES: PageFiles[];
var ROOT_FILE_UPDATED: boolean; var BUNEXT_ROOT_FILE_UPDATED: boolean;
var SKIPPED_BROWSER_MODULES: Set<string>; var BUNEXT_SKIPPED_BROWSER_MODULES: Set<string>;
var BUNDLER_CTX: BuildContext | undefined; var BUNEXT_BUNDLER_CTX: BuildContext | undefined;
var SSR_BUNDLER_CTX: BuildContext | undefined; var BUNEXT_SSR_BUNDLER_CTX: BuildContext | undefined;
var DIR_NAMES: DirNames; var BUNEXT_DIR_NAMES: DirNames;
var REACT_IMPORTS_MAP: { var BUNEXT_REACT_IMPORTS_MAP: {
imports: Record<string, string>; imports: Record<string, string>;
}; };
var REACT_DOM_SERVER: any; var BUNEXT_REACT_DOM_SERVER: any;
var REACT_DOM_MODULE_CACHE: Map<string, { var BUNEXT_REACT_DOM_MODULE_CACHE: Map<string, {
main: any; main: any;
css: string; css: string;
}>; }>;
var BUNDLER_CTX_DISPOSED: boolean | undefined; var BUNEXT_BUNDLER_CTX_DISPOSED: boolean | undefined;
var SSR_BUNDLER_CTX_DISPOSED: boolean | undefined; var BUNEXT_SSR_BUNDLER_CTX_DISPOSED: boolean | undefined;
var REBUILD_RETRIES: number; var BUNEXT_REBUILD_RETRIES: number;
var IS_404_PAGE: boolean; var BUNEXT_IS_404_PAGE: boolean;
var CONSTANTS: ReturnType<typeof grabConstants>; var BUNEXT_CONSTANTS: ReturnType<typeof grabConstants>;
var MAIN_CTX_BUILD_STARTS: number; var BUNEXT_MAIN_CTX_BUILD_STARTS: number;
} }
type Params = { type Params = {
build_only?: boolean; build_only?: boolean;

View File

@ -11,27 +11,27 @@ import watcherEsbuildCTX from "./server/watcher-esbuild-ctx";
const dirNames = grabDirNames(); const dirNames = grabDirNames();
const { PAGES_DIR } = dirNames; const { PAGES_DIR } = dirNames;
export default async function bunextInit(params) { export default async function bunextInit(params) {
global.HMR_CONTROLLERS = []; global.BUNEXT_HMR_CONTROLLERS = [];
global.BUNDLER_CTX_MAP = {}; global.BUNEXT_BUNDLER_CTX_MAP = {};
global.SSR_BUNDLER_CTX_MAP = {}; global.BUNEXT_SSR_BUNDLER_CTX_MAP = {};
// global.API_ROUTES_BUNDLER_CTX_MAP = {}; // global.BUNEXT_API_ROUTES_BUNDLER_CTX_MAP = {};
global.BUNDLER_REBUILDS = 0; global.BUNEXT_BUNDLER_REBUILDS = 0;
global.REBUILD_RETRIES = 0; global.BUNEXT_REBUILD_RETRIES = 0;
global.PAGE_FILES = []; global.BUNEXT_PAGE_FILES = [];
global.SKIPPED_BROWSER_MODULES = new Set(); global.BUNEXT_SKIPPED_BROWSER_MODULES = new Set();
global.DIR_NAMES = dirNames; global.BUNEXT_DIR_NAMES = dirNames;
global.REACT_IMPORTS_MAP = { imports: {} }; global.BUNEXT_REACT_IMPORTS_MAP = { imports: {} };
global.REACT_DOM_MODULE_CACHE = new Map(); global.BUNEXT_REACT_DOM_MODULE_CACHE = new Map();
global.MAIN_CTX_BUILD_STARTS = 0; global.BUNEXT_MAIN_CTX_BUILD_STARTS = 0;
await init(); await init();
log.banner(); log.banner();
global.CONSTANTS = grabConstants(); global.BUNEXT_CONSTANTS = grabConstants();
await reactModulesBundler(); await reactModulesBundler();
const router = new Bun.FileSystemRouter({ const router = new Bun.FileSystemRouter({
style: "nextjs", style: "nextjs",
dir: PAGES_DIR, dir: PAGES_DIR,
}); });
global.ROUTER = router; global.BUNEXT_ROUTER = router;
const is_dev = isDevelopment(); const is_dev = isDevelopment();
if (params?.build_only) { if (params?.build_only) {
log.build(`Building Modules ...`); log.build(`Building Modules ...`);

View File

@ -9,7 +9,7 @@ export default async function trimCacheKey({ key, }) {
const { cache_name, cache_meta_name } = grabCacheNames({ const { cache_name, cache_meta_name } = grabCacheNames({
key, key,
}); });
const config = global.CONFIG; const config = global.BUNEXT_CONFIG;
const default_expiry_time_seconds = config.default_cache_expiry || const default_expiry_time_seconds = config.default_cache_expiry ||
AppData["DefaultCacheExpiryTimeSeconds"]; AppData["DefaultCacheExpiryTimeSeconds"];
const default_expiry_time_milliseconds = default_expiry_time_seconds * 1000; const default_expiry_time_milliseconds = default_expiry_time_seconds * 1000;

View File

@ -24,7 +24,7 @@ export default async function () {
try { try {
const package_json = await Bun.file(path.resolve(__dirname, "../../package.json")).json(); const package_json = await Bun.file(path.resolve(__dirname, "../../package.json")).json();
const current_version = package_json.version; const current_version = package_json.version;
global.CURRENT_VERSION = current_version; global.BUNEXT_CURRENT_VERSION = current_version;
} }
catch (error) { } catch (error) { }
const keys = Object.keys(dirNames); const keys = Object.keys(dirNames);
@ -45,7 +45,7 @@ export default async function () {
} }
} }
const config = (await grabConfig()) || {}; const config = (await grabConfig()) || {};
global.CONFIG = { global.BUNEXT_CONFIG = {
...config, ...config,
development: is_dev, development: is_dev,
}; };

View File

@ -19,8 +19,8 @@ export default async function bunextRequestHandler({ req: initial_req, server, }
return Response.json({ success: false, msg: `Invalid Path` }); return Response.json({ success: false, msg: `Invalid Path` });
} }
let response = undefined; let response = undefined;
if (global.CONSTANTS.config?.middleware) { if (global.BUNEXT_CONSTANTS.config?.middleware) {
const middleware_res = await global.CONSTANTS.config.middleware({ const middleware_res = await global.BUNEXT_CONSTANTS.config.middleware({
req: initial_req, req: initial_req,
url, url,
}); });

View File

@ -32,17 +32,17 @@ export default async function chokadirWatcherEsbuildCTX() {
await fullRebuild(); await fullRebuild();
return; return;
} }
if (global.BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_BUNDLER_CTX_DISPOSED) {
await fullRebuild({ msg: `Restarting Bundler ...` }); await fullRebuild({ msg: `Restarting Bundler ...` });
} }
if (global.SSR_BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED) {
await pagesSSRBundler().catch((error) => { await pagesSSRBundler().catch((error) => {
log.error(`SSR Bundler Error: ${error}`); log.error(`SSR Bundler Error: ${error}`);
}); });
} }
if (filename.match(/\/styles$/) || filename === "styles") { if (filename.match(/\/styles$/) || filename === "styles") {
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
await Bun.sleep(1000); await Bun.sleep(1000);
await fullRebuild({ await fullRebuild({
msg: `Detected new \`styles\` directory. Rebuilding ...`, msg: `Detected new \`styles\` directory. Rebuilding ...`,
@ -58,24 +58,24 @@ export default async function chokadirWatcherEsbuildCTX() {
const target_files_match = /\.(tsx?|jsx?|css)$/; const target_files_match = /\.(tsx?|jsx?|css)$/;
if (event === "change") { if (event === "change") {
if (filename.match(target_files_match)) { if (filename.match(target_files_match)) {
if (global.RECOMPILING) if (global.BUNEXT_RECOMPILING)
return; return;
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
if (filename.match(/.*\.server\.tsx?/)) { if (filename.match(/.*\.server\.tsx?/)) {
global.IS_SERVER_COMPONENT = true; global.BUNEXT_IS_SERVER_COMPONENT = true;
} }
if (global.BUNDLER_CTX) { if (global.BUNEXT_BUNDLER_CTX) {
await global.BUNDLER_CTX.rebuild(); await global.BUNEXT_BUNDLER_CTX.rebuild();
} }
if (filename.match(/(404|500)\.tsx?/)) { if (filename.match(/(404|500)\.tsx?/)) {
for (let i = global.HMR_CONTROLLERS.length - 1; i >= 0; i--) { for (let i = global.BUNEXT_HMR_CONTROLLERS.length - 1; i >= 0; i--) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
try { try {
controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`); controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`);
} }
catch { catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
} }
@ -92,7 +92,7 @@ export default async function chokadirWatcherEsbuildCTX() {
filename.includes(" ")) { filename.includes(" ")) {
return reloadWatcher(); return reloadWatcher();
} }
if (global.RECOMPILING) if (global.BUNEXT_RECOMPILING)
return; return;
owns_recompile = true; owns_recompile = true;
const action = event.startsWith("add") ? "created" : "deleted"; const action = event.startsWith("add") ? "created" : "deleted";
@ -113,8 +113,8 @@ export default async function chokadirWatcherEsbuildCTX() {
} }
finally { finally {
if (owns_recompile) { if (owns_recompile) {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
} }
} }
}; };
@ -126,8 +126,8 @@ export default async function chokadirWatcherEsbuildCTX() {
.on("unlinkDir", (path) => handleEvent("unlinkDir", path)); .on("unlinkDir", (path) => handleEvent("unlinkDir", path));
} }
function reloadWatcher() { function reloadWatcher() {
if (global.PAGES_SRC_WATCHER) { if (global.BUNEXT_PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close(); global.BUNEXT_PAGES_SRC_WATCHER.close();
chokadirWatcherEsbuildCTX(); chokadirWatcherEsbuildCTX();
} }
} }

View File

@ -5,16 +5,16 @@ import watcherEsbuildCTX from "./watcher-esbuild-ctx";
export default async function fullRebuild(params) { export default async function fullRebuild(params) {
try { try {
const { msg } = params || {}; const { msg } = params || {};
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
if (msg) { if (msg) {
log.watch(msg); log.watch(msg);
} }
global.ROUTER.reload(); global.BUNEXT_ROUTER.reload();
try { try {
await global.BUNDLER_CTX?.dispose(); await global.BUNEXT_BUNDLER_CTX?.dispose();
global.BUNDLER_CTX = undefined; global.BUNEXT_BUNDLER_CTX = undefined;
await global.SSR_BUNDLER_CTX?.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX?.dispose();
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
} }
catch (error) { } catch (error) { }
await allPagesESBuildContextBundler({ await allPagesESBuildContextBundler({
@ -27,11 +27,11 @@ export default async function fullRebuild(params) {
log.error(error); log.error(error);
} }
finally { finally {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
} }
if (global.PAGES_SRC_WATCHER) { if (global.BUNEXT_PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close(); global.BUNEXT_PAGES_SRC_WATCHER.close();
watcherEsbuildCTX(); watcherEsbuildCTX();
} }
} }

View File

@ -1,7 +1,7 @@
function removeController(controller) { function removeController(controller) {
const idx = global.HMR_CONTROLLERS.findIndex((c) => c.controller == controller); const idx = global.BUNEXT_HMR_CONTROLLERS.findIndex((c) => c.controller == controller);
if (typeof idx == "number" && idx >= 0) { if (typeof idx == "number" && idx >= 0) {
global.HMR_CONTROLLERS.splice(idx, 1); global.BUNEXT_HMR_CONTROLLERS.splice(idx, 1);
} }
} }
export default async function ({ req }) { export default async function ({ req }) {
@ -17,16 +17,16 @@ export default async function ({ req }) {
catch { catch {
return new Response("Invalid Referer Header", { status: 400 }); return new Response("Invalid Referer Header", { status: 400 });
} }
const match = global.ROUTER.match(referer_url.pathname); const match = global.BUNEXT_ROUTER.match(referer_url.pathname);
const target_map = match?.filePath const target_map = match?.filePath
? global.BUNDLER_CTX_MAP?.[match.filePath] ? global.BUNEXT_BUNDLER_CTX_MAP?.[match.filePath]
: undefined; : undefined;
let controller; let controller;
let heartbeat; let heartbeat;
const stream = new ReadableStream({ const stream = new ReadableStream({
start(c) { start(c) {
controller = c; controller = c;
global.HMR_CONTROLLERS.push({ global.BUNEXT_HMR_CONTROLLERS.push({
controller: c, controller: c,
page_url: referer_url.href, page_url: referer_url.href,
target_map, target_map,

View File

@ -30,8 +30,8 @@ export default async function ({ req }) {
}); });
let module; let module;
const now = Date.now(); const now = Date.now();
if (is_dev && global.SSR_BUNDLER_CTX_MAP?.[match.filePath]?.path) { if (is_dev && global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[match.filePath]?.path) {
const target_import = path.join(ROOT_DIR, global.SSR_BUNDLER_CTX_MAP[match.filePath].path); const target_import = path.join(ROOT_DIR, global.BUNEXT_SSR_BUNDLER_CTX_MAP[match.filePath].path);
module = await import(`${target_import}?t=${now}`); module = await import(`${target_import}?t=${now}`);
} }
else { else {

View File

@ -1,13 +1,13 @@
import _ from "lodash"; import _ from "lodash";
import grabPageComponent from "./web-pages/grab-page-component"; import grabPageComponent from "./web-pages/grab-page-component";
export default async function serverPostBuildFn(params) { export default async function serverPostBuildFn(params) {
if (!global.HMR_CONTROLLERS?.[0] || !global.BUNDLER_CTX_MAP) { if (!global.BUNEXT_HMR_CONTROLLERS?.[0] || !global.BUNEXT_BUNDLER_CTX_MAP) {
return; return;
} }
const reload_payload = { reload: true }; const reload_payload = { reload: true };
const reload_enqueue = `event: update\ndata: ${JSON.stringify(reload_payload)}\n\n`; const reload_enqueue = `event: update\ndata: ${JSON.stringify(reload_payload)}\n\n`;
for (let i = global.HMR_CONTROLLERS.length - 1; i >= 0; i--) { for (let i = global.BUNEXT_HMR_CONTROLLERS.length - 1; i >= 0; i--) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
if (!controller) { if (!controller) {
continue; continue;
} }
@ -19,17 +19,17 @@ export default async function serverPostBuildFn(params) {
controller.controller.enqueue(reload_enqueue); controller.controller.enqueue(reload_enqueue);
} }
catch { catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
continue; continue;
} }
const target_artifact = global.BUNDLER_CTX_MAP[controller.target_map.local_path]; const target_artifact = global.BUNEXT_BUNDLER_CTX_MAP[controller.target_map.local_path];
if (!target_artifact?.local_path) { if (!target_artifact?.local_path) {
try { try {
controller.controller.enqueue(reload_enqueue); controller.controller.enqueue(reload_enqueue);
} }
catch { catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
continue; continue;
} }
@ -59,17 +59,17 @@ export default async function serverPostBuildFn(params) {
final_artifact.page_props = serverRes || {}; final_artifact.page_props = serverRes || {};
try { try {
let final_data = {}; let final_data = {};
if (global.ROOT_FILE_UPDATED) { if (global.BUNEXT_ROOT_FILE_UPDATED) {
final_data = reload_payload; final_data = reload_payload;
} }
else { else {
final_data = final_artifact; final_data = final_artifact;
} }
controller.controller.enqueue(`event: update\ndata: ${JSON.stringify(final_data)}\n\n`); controller.controller.enqueue(`event: update\ndata: ${JSON.stringify(final_data)}\n\n`);
global.ROOT_FILE_UPDATED = false; global.BUNEXT_ROOT_FILE_UPDATED = false;
} }
catch { catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
} }

View File

@ -4,7 +4,7 @@ import serverParamsGen from "./server-params-gen";
export default async function startServer() { export default async function startServer() {
const serverParams = await serverParamsGen(); const serverParams = await serverParamsGen();
const server = Bun.serve(serverParams); const server = Bun.serve(serverParams);
global.SERVER = server; global.BUNEXT_SERVER = server;
log.server(`http://${server.hostname}:${server.port}`); log.server(`http://${server.hostname}:${server.port}`);
return server; return server;
} }

View File

@ -17,9 +17,9 @@ export default async function watcherEsbuildCTX() {
if (!filename) if (!filename)
return; return;
const full_file_path = path.join(ROOT_DIR, filename); const full_file_path = path.join(ROOT_DIR, filename);
if (global.CONFIG.exclude_watch_patterns) { if (global.BUNEXT_CONFIG.exclude_watch_patterns) {
for (let i = 0; i < global.CONFIG.exclude_watch_patterns.length; i++) { for (let i = 0; i < global.BUNEXT_CONFIG.exclude_watch_patterns.length; i++) {
const watch_pattern = global.CONFIG.exclude_watch_patterns[i]; const watch_pattern = global.BUNEXT_CONFIG.exclude_watch_patterns[i];
if (watch_pattern instanceof RegExp) { if (watch_pattern instanceof RegExp) {
const is_path_excluded = watch_pattern.test(filename); const is_path_excluded = watch_pattern.test(filename);
if (is_path_excluded) { if (is_path_excluded) {
@ -41,11 +41,11 @@ export default async function watcherEsbuildCTX() {
if (filename.match(/^\.\w+/)) { if (filename.match(/^\.\w+/)) {
return; return;
} }
if (global.BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_BUNDLER_CTX_DISPOSED) {
await fullRebuild({ msg: `Restarting Bundler ...` }); await fullRebuild({ msg: `Restarting Bundler ...` });
return; return;
} }
if (global.SSR_BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED) {
await pagesSSRBundler().catch((error) => { await pagesSSRBundler().catch((error) => {
log.error(`SSR Bundler Error: ${error}`); log.error(`SSR Bundler Error: ${error}`);
}); });
@ -59,7 +59,7 @@ export default async function watcherEsbuildCTX() {
: undefined; : undefined;
if (full_file_path.match(/\/styles$/)) { if (full_file_path.match(/\/styles$/)) {
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
await Bun.sleep(1000); await Bun.sleep(1000);
await fullRebuild({ await fullRebuild({
msg: `Detected new \`styles\` directory. Rebuilding ...`, msg: `Detected new \`styles\` directory. Rebuilding ...`,
@ -78,24 +78,24 @@ export default async function watcherEsbuildCTX() {
const target_files_match = /\.(tsx?|jsx?|css)$/; const target_files_match = /\.(tsx?|jsx?|css)$/;
if (event !== "rename") { if (event !== "rename") {
if (filename.match(target_files_match)) { if (filename.match(target_files_match)) {
if (global.RECOMPILING) if (global.BUNEXT_RECOMPILING)
return; return;
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
if (filename.match(/.*\.server\.tsx?/)) { if (filename.match(/.*\.server\.tsx?/)) {
global.IS_SERVER_COMPONENT = true; global.BUNEXT_IS_SERVER_COMPONENT = true;
} }
if (global.BUNDLER_CTX) { if (global.BUNEXT_BUNDLER_CTX) {
await global.BUNDLER_CTX.rebuild(); await global.BUNEXT_BUNDLER_CTX.rebuild();
} }
if (filename.match(/(404|500)\.tsx?/)) { if (filename.match(/(404|500)\.tsx?/)) {
for (let i = global.HMR_CONTROLLERS.length - 1; i >= 0; i--) { for (let i = global.BUNEXT_HMR_CONTROLLERS.length - 1; i >= 0; i--) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
try { try {
controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`); controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`);
} }
catch { catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
} }
@ -113,7 +113,7 @@ export default async function watcherEsbuildCTX() {
return reloadWatcher(); return reloadWatcher();
if (filename.match(/ /)) if (filename.match(/ /))
return reloadWatcher(); return reloadWatcher();
if (global.RECOMPILING) if (global.BUNEXT_RECOMPILING)
return; return;
owns_recompile = true; owns_recompile = true;
const action = does_file_exist ? "created" : "deleted"; const action = does_file_exist ? "created" : "deleted";
@ -133,16 +133,16 @@ export default async function watcherEsbuildCTX() {
} }
finally { finally {
if (owns_recompile) { if (owns_recompile) {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
} }
} }
}); });
global.PAGES_SRC_WATCHER = pages_src_watcher; global.BUNEXT_PAGES_SRC_WATCHER = pages_src_watcher;
} }
function reloadWatcher() { function reloadWatcher() {
if (global.PAGES_SRC_WATCHER) { if (global.BUNEXT_PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close(); global.BUNEXT_PAGES_SRC_WATCHER.close();
watcherEsbuildCTX(); watcherEsbuildCTX();
} }
} }

View File

@ -48,13 +48,13 @@ export default async function genWebHTML({ component: Main, pageProps, bundledMa
env: { env: {
NODE_ENV: dev ? "development" : "production", NODE_ENV: dev ? "development" : "production",
...public_envs, ...public_envs,
...global.CONFIG.public_envs, ...global.BUNEXT_CONFIG.public_envs,
}, },
}; };
let final_component = (_jsxs("html", { ...html_props, children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8", "data-bunext-head": true }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0", "data-bunext-head": true }), final_meta ? grabWebMetaHTML({ meta: final_meta }) : null, bundledMap?.css_path ? (_jsx("link", { rel: "stylesheet", href: `/${bundledMap.css_path}`, "data-bunext-head": true })) : null, _jsx("script", { dangerouslySetInnerHTML: { let final_component = (_jsxs("html", { ...html_props, children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8", "data-bunext-head": true }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0", "data-bunext-head": true }), final_meta ? grabWebMetaHTML({ meta: final_meta }) : null, bundledMap?.css_path ? (_jsx("link", { rel: "stylesheet", href: `/${bundledMap.css_path}`, "data-bunext-head": true })) : null, _jsx("script", { dangerouslySetInnerHTML: {
__html: `window.${ClientWindowPagePropsName} = ${serializedProps};\nwindow.process = ${JSON.stringify(client_process)}`, __html: `window.${ClientWindowPagePropsName} = ${serializedProps};\nwindow.process = ${JSON.stringify(client_process)}`,
}, "data-bunext-head": true }), RootHead ? (_jsx(RootHead, { serverRes: pageProps, ctx: routeParams })) : null, Head ? _jsx(Head, { serverRes: pageProps, ctx: routeParams }) : null, bundledMap?.path ? (_jsxs(_Fragment, { children: [_jsx("script", { type: "importmap", dangerouslySetInnerHTML: { }, "data-bunext-head": true }), RootHead ? (_jsx(RootHead, { serverRes: pageProps, ctx: routeParams })) : null, Head ? _jsx(Head, { serverRes: pageProps, ctx: routeParams }) : null, bundledMap?.path ? (_jsxs(_Fragment, { children: [_jsx("script", { type: "importmap", dangerouslySetInnerHTML: {
__html: JSON.stringify(global.REACT_IMPORTS_MAP), __html: JSON.stringify(global.BUNEXT_REACT_IMPORTS_MAP),
}, defer: true, "data-bunext-head": true }), _jsx("script", { src: `/${bundledMap.path}`, type: "module", id: AppData["BunextClientHydrationScriptID"], defer: true, "data-bunext-head": true })] })) : null, is_dev ? (_jsx("script", { defer: true, dangerouslySetInnerHTML: { }, defer: true, "data-bunext-head": true }), _jsx("script", { src: `/${bundledMap.path}`, type: "module", id: AppData["BunextClientHydrationScriptID"], defer: true, "data-bunext-head": true })] })) : null, is_dev ? (_jsx("script", { defer: true, dangerouslySetInnerHTML: {
__html: page_hydration_script, __html: page_hydration_script,
}, "data-bunext-head": true })) : null] }), _jsx("body", { children: _jsx("div", { id: ClientRootElementIDName, suppressHydrationWarning: !dev, children: _jsx(Main, { ...pageProps }) }) })] })); }, "data-bunext-head": true })) : null] }), _jsx("body", { children: _jsx("div", { id: ClientRootElementIDName, suppressHydrationWarning: !dev, children: _jsx(Main, { ...pageProps }) }) })] }));

View File

@ -7,8 +7,8 @@ import grabDirNames from "../../../utils/grab-dir-names";
const { ROOT_DIR } = grabDirNames(); const { ROOT_DIR } = grabDirNames();
export default async function grabPageBundledReactComponent({ file_path, return_tsx_only, }) { export default async function grabPageBundledReactComponent({ file_path, return_tsx_only, }) {
try { try {
if (global.SSR_BUNDLER_CTX_MAP?.[file_path]) { if (global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[file_path]) {
const abs = path.join(ROOT_DIR, global.SSR_BUNDLER_CTX_MAP[file_path].path); const abs = path.join(ROOT_DIR, global.BUNEXT_SSR_BUNDLER_CTX_MAP[file_path].path);
// Loader.registry.delete(abs); // Loader.registry.delete(abs);
const mod = await import(`${abs}?t=${Date.now()}`); const mod = await import(`${abs}?t=${Date.now()}`);
const Main = mod.default; const Main = mod.default;

View File

@ -12,7 +12,7 @@ export default async function grabPageCombinedServerRes({ file_path, debug, url,
const { server_file_path: root_server_file_path } = root_file_path const { server_file_path: root_server_file_path } = root_file_path
? grabPageServerPath({ file_path: root_file_path }) ? grabPageServerPath({ file_path: root_file_path })
: {}; : {};
const root_server_ctx_map = global.SSR_BUNDLER_CTX_MAP[root_server_file_path || ""]; const root_server_ctx_map = global.BUNEXT_SSR_BUNDLER_CTX_MAP[root_server_file_path || ""];
const final_root_server_path = root_server_ctx_map?.local_path const final_root_server_path = root_server_ctx_map?.local_path
? path.join(ROOT_DIR, root_server_ctx_map.path) ? path.join(ROOT_DIR, root_server_ctx_map.path)
: root_server_file_path; : root_server_file_path;
@ -33,7 +33,7 @@ export default async function grabPageCombinedServerRes({ file_path, debug, url,
log.info(`rootServerRes:`, rootServerRes); log.info(`rootServerRes:`, rootServerRes);
} }
const { server_file_path } = grabPageServerPath({ file_path }); const { server_file_path } = grabPageServerPath({ file_path });
const page_server_ctx = global.SSR_BUNDLER_CTX_MAP[server_file_path || ""]; const page_server_ctx = global.BUNEXT_SSR_BUNDLER_CTX_MAP[server_file_path || ""];
const final_page_server_path = page_server_ctx?.local_path const final_page_server_path = page_server_ctx?.local_path
? path.join(ROOT_DIR, page_server_ctx.path) ? path.join(ROOT_DIR, page_server_ctx.path)
: server_file_path; : server_file_path;

View File

@ -20,7 +20,7 @@ class NotFoundError extends Error {
export default async function grabPageComponent(params) { export default async function grabPageComponent(params) {
const { req, file_path: passed_file_path, debug, return_server_res_only, skip_server_res, is_hydration, } = params; const { req, file_path: passed_file_path, debug, return_server_res_only, skip_server_res, is_hydration, } = params;
const url = req?.url ? new URL(req.url) : undefined; const url = req?.url ? new URL(req.url) : undefined;
const router = global.ROUTER; const router = global.BUNEXT_ROUTER;
const is_dev = isDevelopment(); const is_dev = isDevelopment();
const forwarded_proto = req?.headers.get("x-forwarded-proto"); const forwarded_proto = req?.headers.get("x-forwarded-proto");
if (url && forwarded_proto) { if (url && forwarded_proto) {
@ -50,7 +50,7 @@ export default async function grabPageComponent(params) {
// log.error(errMsg); // log.error(errMsg);
throw new Error(errMsg); throw new Error(errMsg);
} }
let bundledMap = global.BUNDLER_CTX_MAP[file_path]; let bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
if (!bundledMap?.path) { if (!bundledMap?.path) {
if (does_error_file_exist) { if (does_error_file_exist) {
throw new Error(`Application Error. Please Check your components. ${match?.filePath} likely exists but has no exported module.`); throw new Error(`Application Error. Please Check your components. ${match?.filePath} likely exists but has no exported module.`);
@ -62,7 +62,7 @@ export default async function grabPageComponent(params) {
msg: `Retrying Bundle map for file \`${file_path}\``, msg: `Retrying Bundle map for file \`${file_path}\``,
}); });
await Bun.sleep(1000); await Bun.sleep(1000);
bundledMap = global.BUNDLER_CTX_MAP[file_path]; bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
if (bundledMap?.path) if (bundledMap?.path)
break; break;
} }
@ -73,7 +73,7 @@ export default async function grabPageComponent(params) {
} }
} }
if (req && !is_hydration) { if (req && !is_hydration) {
global.BUNDLER_CTX_MAP[file_path].req_url = req.url; global.BUNEXT_BUNDLER_CTX_MAP[file_path].req_url = req.url;
} }
if (debug) { if (debug) {
log.info(`bundledMap:`, bundledMap); log.info(`bundledMap:`, bundledMap);
@ -115,8 +115,9 @@ export default async function grabPageComponent(params) {
error?.name === "NotFoundError" || error?.name === "NotFoundError" ||
error?.status === 404; error?.status === 404;
if (!params.retry && is_dev) { if (!params.retry && is_dev) {
while (global.REBUILD_RETRIES < 2) { while (global.BUNEXT_REBUILD_RETRIES < 2) {
global.REBUILD_RETRIES = global.REBUILD_RETRIES + 1; global.BUNEXT_REBUILD_RETRIES =
global.BUNEXT_REBUILD_RETRIES + 1;
await fullRebuild(); await fullRebuild();
await Bun.sleep(200); await Bun.sleep(200);
const component_retried = await grabPageComponent({ const component_retried = await grabPageComponent({
@ -125,15 +126,15 @@ export default async function grabPageComponent(params) {
}); });
if (component_retried instanceof Response || if (component_retried instanceof Response ||
component_retried.success) { component_retried.success) {
global.REBUILD_RETRIES = 0; global.BUNEXT_REBUILD_RETRIES = 0;
await serverPostBuildFn(); await serverPostBuildFn();
return component_retried; return component_retried;
} }
} }
global.REBUILD_RETRIES = 0; global.BUNEXT_REBUILD_RETRIES = 0;
} }
if (is404) { if (is404) {
global.IS_404_PAGE = true; global.BUNEXT_IS_404_PAGE = true;
} }
else { else {
log.error(`Error Grabbing Page Component: ${error.message}`); log.error(`Error Grabbing Page Component: ${error.message}`);

View File

@ -3,7 +3,7 @@ import grabDirNames from "../../../utils/grab-dir-names";
import grabPageModules from "./grab-page-modules"; import grabPageModules from "./grab-page-modules";
import _ from "lodash"; import _ from "lodash";
export default async function grabPageErrorComponent({ error, routeParams, is404, url, }) { export default async function grabPageErrorComponent({ error, routeParams, is404, url, }) {
const router = global.ROUTER; const router = global.BUNEXT_ROUTER;
const { BUNX_ROOT_500_PRESET_COMPONENT, BUNX_ROOT_404_PRESET_COMPONENT } = grabDirNames(); const { BUNX_ROOT_500_PRESET_COMPONENT, BUNX_ROOT_404_PRESET_COMPONENT } = grabDirNames();
const errorRoute = is404 ? "/404" : "/500"; const errorRoute = is404 ? "/404" : "/500";
const presetComponent = is404 const presetComponent = is404
@ -30,7 +30,7 @@ export default async function grabPageErrorComponent({ error, routeParams, is404
}; };
} }
const file_path = match.filePath; const file_path = match.filePath;
const bundledMap = global.BUNDLER_CTX_MAP?.[file_path]; const bundledMap = global.BUNEXT_BUNDLER_CTX_MAP?.[file_path];
const page_component = await grabPageModules({ const page_component = await grabPageModules({
file_path: file_path, file_path: file_path,
query: match?.query, query: match?.query,

View File

@ -108,11 +108,12 @@ async function loadEntry(page_file_path) {
const now = Date.now(); const now = Date.now();
const mod_file_path = toModPath(page_file_path); const mod_file_path = toModPath(page_file_path);
const mod_css_path = mod_file_path.replace(/\.js$/, ".css"); const mod_css_path = mod_file_path.replace(/\.js$/, ".css");
if (global.REACT_DOM_MODULE_CACHE.has(page_file_path)) { if (global.BUNEXT_REACT_DOM_MODULE_CACHE.has(page_file_path)) {
return global.REACT_DOM_MODULE_CACHE.get(page_file_path)?.main; return global.BUNEXT_REACT_DOM_MODULE_CACHE.get(page_file_path)
?.main;
} }
const mod = await import(`${mod_file_path}?t=${now}`); const mod = await import(`${mod_file_path}?t=${now}`);
global.REACT_DOM_MODULE_CACHE.set(page_file_path, { global.BUNEXT_REACT_DOM_MODULE_CACHE.set(page_file_path, {
main: mod, main: mod,
css: mod_css_path, css: mod_css_path,
}); });

View File

@ -1,6 +1,6 @@
export default function ({ path }) { export default function ({ path }) {
for (let i = 0; i < global.CONSTANTS.RouteIgnorePatterns.length; i++) { for (let i = 0; i < global.BUNEXT_CONSTANTS.RouteIgnorePatterns.length; i++) {
const regex = global.CONSTANTS.RouteIgnorePatterns[i]; const regex = global.BUNEXT_CONSTANTS.RouteIgnorePatterns[i];
if (path.match(regex)) if (path.match(regex))
return true; return true;
} }

View File

@ -6,8 +6,8 @@ export default function grabAppPort() {
if (process.env.PORT) { if (process.env.PORT) {
return numberfy(process.env.PORT); return numberfy(process.env.PORT);
} }
if (global.CONFIG.port) { if (global.BUNEXT_CONFIG.port) {
return global.CONFIG.port; return global.BUNEXT_CONFIG.port;
} }
return numberfy(defaultPort); return numberfy(defaultPort);
} }

View File

@ -1,7 +1,7 @@
import AppNames from "./grab-app-names"; import AppNames from "./grab-app-names";
export default function grabAssetsPrefix() { export default function grabAssetsPrefix() {
if (global.CONFIG.assets_prefix) { if (global.BUNEXT_CONFIG.assets_prefix) {
return global.CONFIG.assets_prefix; return global.BUNEXT_CONFIG.assets_prefix;
} }
const { defaultAssetPrefix } = AppNames; const { defaultAssetPrefix } = AppNames;
return defaultAssetPrefix; return defaultAssetPrefix;

View File

@ -1,5 +1,5 @@
export default function grabConstants() { export default function grabConstants() {
const config = global.CONFIG; const config = global.BUNEXT_CONFIG;
const MB_IN_BYTES = 1024 * 1024; const MB_IN_BYTES = 1024 * 1024;
const ClientWindowPagePropsName = "__PAGE_PROPS__"; const ClientWindowPagePropsName = "__PAGE_PROPS__";
const ClientRootElementIDName = "__bunext"; const ClientRootElementIDName = "__bunext";

View File

@ -1,7 +1,7 @@
import path from "path"; import path from "path";
export default function grabDirNames() { export default function grabDirNames() {
if (global.DIR_NAMES) if (global.BUNEXT_DIR_NAMES)
return global.DIR_NAMES; return global.BUNEXT_DIR_NAMES;
const ROOT_DIR = process.cwd(); const ROOT_DIR = process.cwd();
const SRC_DIR = path.join(ROOT_DIR, "src"); const SRC_DIR = path.join(ROOT_DIR, "src");
const PAGES_DIR = path.join(SRC_DIR, "pages"); const PAGES_DIR = path.join(SRC_DIR, "pages");

View File

@ -1,7 +1,7 @@
import grabAppPort from "./grab-app-port"; import grabAppPort from "./grab-app-port";
export default function grabOrigin() { export default function grabOrigin() {
if (global.CONFIG.origin) { if (global.BUNEXT_CONFIG.origin) {
return global.CONFIG.origin; return global.BUNEXT_CONFIG.origin;
} }
const port = grabAppPort(); const port = grabAppPort();
return `http://localhost:${port}`; return `http://localhost:${port}`;

View File

@ -16,7 +16,7 @@ export default async function grabRouteParams({ req, query: passed_query, }) {
url, url,
query: _.merge(query, passed_query), query: _.merge(query, passed_query),
body, body,
server: global.SERVER, server: global.BUNEXT_SERVER,
}; };
return routeParams; return routeParams;
} }

View File

@ -1,6 +1,6 @@
export default function grabRouter() { export default function grabRouter() {
// if (process.env.NODE_ENV !== "production") { // if (process.env.NODE_ENV !== "production") {
// global.ROUTER.reload(); // global.BUNEXT_ROUTER.reload();
// } // }
return global.ROUTER; return global.BUNEXT_ROUTER;
} }

2
dist/utils/log.js vendored
View File

@ -21,5 +21,5 @@ export const log = {
build: (msg) => console.log(`${prefix.build} ${chalk.magenta(msg)}`), build: (msg) => console.log(`${prefix.build} ${chalk.magenta(msg)}`),
watch: (msg) => console.log(`${prefix.watch} ${chalk.blue(msg)}`), watch: (msg) => console.log(`${prefix.watch} ${chalk.blue(msg)}`),
server: (url) => console.log(`${prefix.success} ${chalk.white("Server running on")} ${chalk.cyan.underline(url)}`), server: (url) => console.log(`${prefix.success} ${chalk.white("Server running on")} ${chalk.cyan.underline(url)}`),
banner: () => console.log(`\n ${chalk.cyan.bold(AppNames.name)} ${chalk.gray(`v${global.CURRENT_VERSION || AppNames["version"]}`)}\n`), banner: () => console.log(`\n ${chalk.cyan.bold(AppNames.name)} ${chalk.gray(`v${global.BUNEXT_CURRENT_VERSION || AppNames["version"]}`)}\n`),
}; };

View File

@ -5,5 +5,5 @@ export default function refreshRouter() {
style: "nextjs", style: "nextjs",
dir: PAGES_DIR, dir: PAGES_DIR,
}); });
global.ROUTER = router; global.BUNEXT_ROUTER = router;
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@moduletrace/bunext", "name": "@moduletrace/bunext",
"version": "1.0.104", "version": "1.1.0",
"main": "dist/index.js", "main": "dist/index.js",
"module": "index.ts", "module": "index.ts",
"dependencies": { "dependencies": {

View File

@ -15,7 +15,7 @@ export default function () {
rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true }); rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true });
} catch (error) {} } catch (error) {}
global.SKIPPED_BROWSER_MODULES = new Set<string>(); global.BUNEXT_SKIPPED_BROWSER_MODULES = new Set<string>();
await bunextInit({ build_only: true }); await bunextInit({ build_only: true });

View File

@ -32,7 +32,7 @@ export default async function allPagesESBuildContextBundler(params?: Params) {
const pages = grabAllPages({ exclude_api: true }); const pages = grabAllPages({ exclude_api: true });
global.PAGE_FILES = pages; global.BUNEXT_PAGE_FILES = pages;
const dev = isDevelopment(); const dev = isDevelopment();
@ -60,7 +60,7 @@ export default async function allPagesESBuildContextBundler(params?: Params) {
(e) => `hydration-virtual:${e}`, (e) => `hydration-virtual:${e}`,
); );
global.BUNDLER_CTX = await esbuild.context({ global.BUNEXT_BUNDLER_CTX = await esbuild.context({
entryPoints, entryPoints,
outdir: HYDRATION_DST_DIR, outdir: HYDRATION_DST_DIR,
bundle: true, bundle: true,
@ -96,14 +96,14 @@ export default async function allPagesESBuildContextBundler(params?: Params) {
"react-dom/client", "react-dom/client",
"react/jsx-runtime", "react/jsx-runtime",
"react/jsx-dev-runtime", "react/jsx-dev-runtime",
...(global.CONFIG.page_compiler_excludes || []), ...(global.BUNEXT_CONFIG.page_compiler_excludes || []),
], ],
logLevel: did_process_exit_because_of_bundler_error logLevel: did_process_exit_because_of_bundler_error
? "silent" ? "silent"
: undefined, : undefined,
}); });
await global.BUNDLER_CTX.rebuild(); await global.BUNEXT_BUNDLER_CTX.rebuild();
} catch (error) { } catch (error) {
console.log(`ESBUILD Error =>`, error); console.log(`ESBUILD Error =>`, error);
} }

View File

@ -4,23 +4,23 @@ export default async function buildOnstartErrorHandler(params?: Params) {
// const error_msg = `Build Failed. Please check all your components and imports.`; // const error_msg = `Build Failed. Please check all your components and imports.`;
// log.error(error_msg); // log.error(error_msg);
if (global.BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_BUNDLER_CTX_DISPOSED) {
return; return;
} }
// console.log(`Killing Bundler ...`); // console.log(`Killing Bundler ...`);
// console.log(`global.BUNDLER_CTX_DISPOSED`, global.BUNDLER_CTX_DISPOSED); // console.log(`global.BUNEXT_BUNDLER_CTX_DISPOSED`, global.BUNEXT_BUNDLER_CTX_DISPOSED);
global.BUNDLER_CTX_DISPOSED = true; global.BUNEXT_BUNDLER_CTX_DISPOSED = true;
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
await Promise.all([ await Promise.all([
global.SSR_BUNDLER_CTX?.dispose(), global.BUNEXT_SSR_BUNDLER_CTX?.dispose(),
global.BUNDLER_CTX?.dispose(), global.BUNEXT_BUNDLER_CTX?.dispose(),
]); ]);
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
global.BUNDLER_CTX = undefined; global.BUNEXT_BUNDLER_CTX = undefined;
} }

View File

@ -74,7 +74,7 @@ export default async function bunReactModulesBundler() {
const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext"); const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext");
global.REACT_IMPORTS_MAP = { global.BUNEXT_REACT_IMPORTS_MAP = {
imports: { imports: {
react: `${PUBLIC_ROOT}/react.js`, react: `${PUBLIC_ROOT}/react.js`,
"react-dom": `${PUBLIC_ROOT}/react-dom.js`, "react-dom": `${PUBLIC_ROOT}/react-dom.js`,

View File

@ -23,7 +23,7 @@ export default async function pagesSSRBundler(params?: Params) {
include_server: true, include_server: true,
}); });
const dev = isDevelopment(); const dev = isDevelopment();
const config = global.CONFIG; const config = global.BUNEXT_CONFIG;
try { try {
writeFileSync( writeFileSync(
@ -116,7 +116,7 @@ export default async function pagesSSRBundler(params?: Params) {
splitting: true, splitting: true,
}); });
} catch (error) { } catch (error) {
global.SSR_BUNDLER_CTX_DISPOSED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true;
log.error(`SSR Bundler Error: ${error}`); log.error(`SSR Bundler Error: ${error}`);
} }
} }

View File

@ -19,9 +19,9 @@ export default async function pagesSSRContextBundler(params?: Params) {
const pages = grabAllPages(); const pages = grabAllPages();
const dev = isDevelopment(); const dev = isDevelopment();
if (global.SSR_BUNDLER_CTX) { if (global.BUNEXT_SSR_BUNDLER_CTX) {
await global.SSR_BUNDLER_CTX.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX.dispose();
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
} }
const entryToPage = new Map<string, PageFiles & { tsx: string }>(); const entryToPage = new Map<string, PageFiles & { tsx: string }>();
@ -46,7 +46,7 @@ export default async function pagesSSRContextBundler(params?: Params) {
const entryPoints = [...entryToPage.keys()].map((e) => `ssr-virtual:${e}`); const entryPoints = [...entryToPage.keys()].map((e) => `ssr-virtual:${e}`);
global.SSR_BUNDLER_CTX = await esbuild.context({ global.BUNEXT_SSR_BUNDLER_CTX = await esbuild.context({
entryPoints, entryPoints,
outdir: BUNX_CWD_MODULE_CACHE_DIR, outdir: BUNX_CWD_MODULE_CACHE_DIR,
bundle: true, bundle: true,
@ -82,5 +82,5 @@ export default async function pagesSSRContextBundler(params?: Params) {
// logLevel: "silent", // logLevel: "silent",
}); });
await global.SSR_BUNDLER_CTX.rebuild(); await global.BUNEXT_SSR_BUNDLER_CTX.rebuild();
} }

View File

@ -9,7 +9,7 @@ const BunSkipNonBrowserPlugin: Bun.BunPlugin = {
// const skipped_modules = new Set<string>(); // const skipped_modules = new Set<string>();
build.onResolve({ filter: skipFilter }, (args) => { build.onResolve({ filter: skipFilter }, (args) => {
global.SKIPPED_BROWSER_MODULES.add(args.path); global.BUNEXT_SKIPPED_BROWSER_MODULES.add(args.path);
return { return {
path: args.path, path: args.path,
namespace: "skipped", namespace: "skipped",
@ -18,8 +18,8 @@ const BunSkipNonBrowserPlugin: Bun.BunPlugin = {
}); });
// build.onEnd(() => { // build.onEnd(() => {
// log.warn(`global.SKIPPED_BROWSER_MODULES`, [ // log.warn(`global.BUNEXT_SKIPPED_BROWSER_MODULES`, [
// ...global.SKIPPED_BROWSER_MODULES, // ...global.BUNEXT_SKIPPED_BROWSER_MODULES,
// ]); // ]);
// }); // });

View File

@ -36,7 +36,7 @@ export default function esbuildCTXArtifactTracker({
name: "artifact-tracker", name: "artifact-tracker",
setup(build) { setup(build) {
build.onStart(async () => { build.onStart(async () => {
global.MAIN_CTX_BUILD_STARTS++; global.BUNEXT_MAIN_CTX_BUILD_STARTS++;
build_start = performance.now(); build_start = performance.now();
const does_error_file_exist = existsSync( const does_error_file_exist = existsSync(
@ -44,7 +44,7 @@ export default function esbuildCTXArtifactTracker({
); );
if ( if (
global.MAIN_CTX_BUILD_STARTS >= MAX_BUILD_STARTS && global.BUNEXT_MAIN_CTX_BUILD_STARTS >= MAX_BUILD_STARTS &&
!does_error_file_exist !does_error_file_exist
) { ) {
await buildOnstartErrorHandler(); await buildOnstartErrorHandler();
@ -53,8 +53,8 @@ export default function esbuildCTXArtifactTracker({
build.onEnd(async (result) => { build.onEnd(async (result) => {
if (result.errors.length > 0) { if (result.errors.length > 0) {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
log.error(`Build errors:`); log.error(`Build errors:`);
for (const err of result.errors) { for (const err of result.errors) {
@ -64,17 +64,17 @@ export default function esbuildCTXArtifactTracker({
} }
for ( for (
let i = global.HMR_CONTROLLERS.length - 1; let i = global.BUNEXT_HMR_CONTROLLERS.length - 1;
i >= 0; i >= 0;
i-- i--
) { ) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
try { try {
controller?.controller?.enqueue( controller?.controller?.enqueue(
`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`, `event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`,
); );
} catch { } catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
@ -89,10 +89,15 @@ export default function esbuildCTXArtifactTracker({
if (artifacts?.[0] && artifacts.length > 0) { if (artifacts?.[0] && artifacts.length > 0) {
for (let i = 0; i < artifacts.length; i++) { for (let i = 0; i < artifacts.length; i++) {
const artifact = artifacts[i]; const artifact = artifacts[i];
if (artifact?.local_path && global.BUNDLER_CTX_MAP) { if (
global.BUNDLER_CTX_MAP[artifact.local_path] = artifact?.local_path &&
global.BUNEXT_BUNDLER_CTX_MAP
) {
global.BUNEXT_BUNDLER_CTX_MAP[artifact.local_path] =
_.merge( _.merge(
global.BUNDLER_CTX_MAP[artifact.local_path], global.BUNEXT_BUNDLER_CTX_MAP[
artifact.local_path
],
artifact, artifact,
); );
} }
@ -102,8 +107,8 @@ export default function esbuildCTXArtifactTracker({
const elapsed = (performance.now() - build_start).toFixed(0); const elapsed = (performance.now() - build_start).toFixed(0);
log.success(`[Built] in ${elapsed}ms`); log.success(`[Built] in ${elapsed}ms`);
global.MAIN_CTX_BUILD_STARTS = 0; global.BUNEXT_MAIN_CTX_BUILD_STARTS = 0;
global.BUNDLER_CTX_DISPOSED = false; global.BUNEXT_BUNDLER_CTX_DISPOSED = false;
const does_error_file_exist = existsSync( const does_error_file_exist = existsSync(
BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_BUNDLER_ERROR_EXIT_FILE,
@ -141,8 +146,8 @@ export default function esbuildCTXArtifactTracker({
} }
} }
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
}); });
}, },
}; };

View File

@ -32,19 +32,19 @@ export default function ssrCTXArtifactTracker({
build_starts++; build_starts++;
build_start = performance.now(); build_start = performance.now();
if (build_starts == MAX_BUILD_STARTS) { if (build_starts == MAX_BUILD_STARTS) {
global.SSR_BUNDLER_CTX_DISPOSED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true;
await global.SSR_BUNDLER_CTX?.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX?.dispose();
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
} }
}); });
build.onEnd(async (result) => { build.onEnd(async (result) => {
if (result.errors.length > 0) { if (result.errors.length > 0) {
global.SSR_BUNDLER_CTX_DISPOSED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true;
try { try {
await global.SSR_BUNDLER_CTX?.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX?.dispose();
} catch {} } catch {}
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
build_starts = 0; build_starts = 0;
for (const err of result.errors) { for (const err of result.errors) {
console.error( console.error(
@ -65,10 +65,11 @@ export default function ssrCTXArtifactTracker({
const artifact = artifacts[i]; const artifact = artifacts[i];
if ( if (
artifact?.local_path && artifact?.local_path &&
global.SSR_BUNDLER_CTX_MAP global.BUNEXT_SSR_BUNDLER_CTX_MAP
) { ) {
global.SSR_BUNDLER_CTX_MAP[artifact.local_path] = global.BUNEXT_SSR_BUNDLER_CTX_MAP[
artifact; artifact.local_path
] = artifact;
} }
} }
@ -83,11 +84,15 @@ export default function ssrCTXArtifactTracker({
try { try {
writeFileSync( writeFileSync(
path.join(BUNX_TMP_DIR, "ctx-map.json"), path.join(BUNX_TMP_DIR, "ctx-map.json"),
JSON.stringify(global.SSR_BUNDLER_CTX_MAP, null, 4), JSON.stringify(
global.BUNEXT_SSR_BUNDLER_CTX_MAP,
null,
4,
),
); );
} catch (error) {} } catch (error) {}
global.SSR_BUNDLER_CTX_DISPOSED = false; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = false;
}); });
}, },
}; };

View File

@ -77,7 +77,7 @@ export default async function reactModulesBundler() {
const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext"); const PUBLIC_ROOT = BUNEXT_VENDOR_DIR.replace(BUNX_CWD_DIR, "/.bunext");
global.REACT_IMPORTS_MAP = { global.BUNEXT_REACT_IMPORTS_MAP = {
imports: { imports: {
react: `${PUBLIC_ROOT}/react.js`, react: `${PUBLIC_ROOT}/react.js`,
"react-dom": `${PUBLIC_ROOT}/react-dom.js`, "react-dom": `${PUBLIC_ROOT}/react-dom.js`,

View File

@ -21,8 +21,11 @@ export default async function recordArtifacts({
} }
} }
if (global.BUNDLER_CTX_MAP) { if (global.BUNEXT_BUNDLER_CTX_MAP) {
global.BUNDLER_CTX_MAP = _.merge(global.BUNDLER_CTX_MAP, artifacts_map); global.BUNEXT_BUNDLER_CTX_MAP = _.merge(
global.BUNEXT_BUNDLER_CTX_MAP,
artifacts_map,
);
} }
// await Bun.write( // await Bun.write(

View File

@ -22,37 +22,37 @@ import type { FSWatcher } from "fs";
* # Declare Global Variables * # Declare Global Variables
*/ */
declare global { declare global {
var CONFIG: BunextConfig; var BUNEXT_CONFIG: BunextConfig;
var SERVER: Server<any> | undefined; var BUNEXT_SERVER: Server<any> | undefined;
var RECOMPILING: boolean; var BUNEXT_RECOMPILING: boolean;
var BUILDING_SSR: boolean; var BUNEXT_BUILDING_SSR: boolean;
var IS_SERVER_COMPONENT: boolean; var BUNEXT_IS_SERVER_COMPONENT: boolean;
var WATCHER_TIMEOUT: any; var BUNEXT_WATCHER_TIMEOUT: any;
var ROUTER: FileSystemRouter; var BUNEXT_ROUTER: FileSystemRouter;
var HMR_CONTROLLERS: GlobalHMRControllerObject[]; var BUNEXT_HMR_CONTROLLERS: GlobalHMRControllerObject[];
var LAST_BUILD_TIME: number; var BUNEXT_LAST_BUILD_TIME: number;
var BUNDLER_CTX_MAP: { [k: string]: BundlerCTXMap }; var BUNEXT_BUNDLER_CTX_MAP: { [k: string]: BundlerCTXMap };
var SSR_BUNDLER_CTX_MAP: { [k: string]: BundlerCTXMap }; var BUNEXT_SSR_BUNDLER_CTX_MAP: { [k: string]: BundlerCTXMap };
// var API_ROUTES_BUNDLER_CTX_MAP: { [k: string]: BundlerCTXMap }; // var BUNEXT_API_ROUTES_BUNDLER_CTX_MAP: { [k: string]: BundlerCTXMap };
var BUNDLER_REBUILDS: 0; var BUNEXT_BUNDLER_REBUILDS: 0;
var PAGES_SRC_WATCHER: FSWatcher | undefined; var BUNEXT_PAGES_SRC_WATCHER: FSWatcher | undefined;
var CURRENT_VERSION: string | undefined; var BUNEXT_CURRENT_VERSION: string | undefined;
var PAGE_FILES: PageFiles[]; var BUNEXT_PAGE_FILES: PageFiles[];
var ROOT_FILE_UPDATED: boolean; var BUNEXT_ROOT_FILE_UPDATED: boolean;
var SKIPPED_BROWSER_MODULES: Set<string>; var BUNEXT_SKIPPED_BROWSER_MODULES: Set<string>;
var BUNDLER_CTX: BuildContext | undefined; var BUNEXT_BUNDLER_CTX: BuildContext | undefined;
var SSR_BUNDLER_CTX: BuildContext | undefined; var BUNEXT_SSR_BUNDLER_CTX: BuildContext | undefined;
// var API_ROUTES_BUNDLER_CTX: BuildContext | undefined; // var BUNEXT_API_ROUTES_BUNDLER_CTX: BuildContext | undefined;
var DIR_NAMES: DirNames; var BUNEXT_DIR_NAMES: DirNames;
var REACT_IMPORTS_MAP: { imports: Record<string, string> }; var BUNEXT_REACT_IMPORTS_MAP: { imports: Record<string, string> };
var REACT_DOM_SERVER: any; var BUNEXT_REACT_DOM_SERVER: any;
var REACT_DOM_MODULE_CACHE: Map<string, { main: any; css: string }>; var BUNEXT_REACT_DOM_MODULE_CACHE: Map<string, { main: any; css: string }>;
var BUNDLER_CTX_DISPOSED: boolean | undefined; var BUNEXT_BUNDLER_CTX_DISPOSED: boolean | undefined;
var SSR_BUNDLER_CTX_DISPOSED: boolean | undefined; var BUNEXT_SSR_BUNDLER_CTX_DISPOSED: boolean | undefined;
var REBUILD_RETRIES: number; var BUNEXT_REBUILD_RETRIES: number;
var IS_404_PAGE: boolean; var BUNEXT_IS_404_PAGE: boolean;
var CONSTANTS: ReturnType<typeof grabConstants>; var BUNEXT_CONSTANTS: ReturnType<typeof grabConstants>;
var MAIN_CTX_BUILD_STARTS: number; var BUNEXT_MAIN_CTX_BUILD_STARTS: number;
} }
const dirNames = grabDirNames(); const dirNames = grabDirNames();
@ -63,23 +63,23 @@ type Params = {
}; };
export default async function bunextInit(params?: Params) { export default async function bunextInit(params?: Params) {
global.HMR_CONTROLLERS = []; global.BUNEXT_HMR_CONTROLLERS = [];
global.BUNDLER_CTX_MAP = {}; global.BUNEXT_BUNDLER_CTX_MAP = {};
global.SSR_BUNDLER_CTX_MAP = {}; global.BUNEXT_SSR_BUNDLER_CTX_MAP = {};
// global.API_ROUTES_BUNDLER_CTX_MAP = {}; // global.BUNEXT_API_ROUTES_BUNDLER_CTX_MAP = {};
global.BUNDLER_REBUILDS = 0; global.BUNEXT_BUNDLER_REBUILDS = 0;
global.REBUILD_RETRIES = 0; global.BUNEXT_REBUILD_RETRIES = 0;
global.PAGE_FILES = []; global.BUNEXT_PAGE_FILES = [];
global.SKIPPED_BROWSER_MODULES = new Set<string>(); global.BUNEXT_SKIPPED_BROWSER_MODULES = new Set<string>();
global.DIR_NAMES = dirNames; global.BUNEXT_DIR_NAMES = dirNames;
global.REACT_IMPORTS_MAP = { imports: {} }; global.BUNEXT_REACT_IMPORTS_MAP = { imports: {} };
global.REACT_DOM_MODULE_CACHE = new Map<string, any>(); global.BUNEXT_REACT_DOM_MODULE_CACHE = new Map<string, any>();
global.MAIN_CTX_BUILD_STARTS = 0; global.BUNEXT_MAIN_CTX_BUILD_STARTS = 0;
await init(); await init();
log.banner(); log.banner();
global.CONSTANTS = grabConstants(); global.BUNEXT_CONSTANTS = grabConstants();
await reactModulesBundler(); await reactModulesBundler();
@ -88,7 +88,7 @@ export default async function bunextInit(params?: Params) {
dir: PAGES_DIR, dir: PAGES_DIR,
}); });
global.ROUTER = router; global.BUNEXT_ROUTER = router;
const is_dev = isDevelopment(); const is_dev = isDevelopment();

View File

@ -18,7 +18,7 @@ export default async function trimCacheKey({
key, key,
}); });
const config = global.CONFIG; const config = global.BUNEXT_CONFIG;
const default_expiry_time_seconds = const default_expiry_time_seconds =
config.default_cache_expiry || config.default_cache_expiry ||

View File

@ -35,7 +35,7 @@ export default async function () {
const current_version = package_json.version; const current_version = package_json.version;
global.CURRENT_VERSION = current_version; global.BUNEXT_CURRENT_VERSION = current_version;
} catch (error) {} } catch (error) {}
const keys = Object.keys(dirNames) as (keyof ReturnType< const keys = Object.keys(dirNames) as (keyof ReturnType<
@ -65,7 +65,7 @@ export default async function () {
const config: BunextConfig = (await grabConfig()) || {}; const config: BunextConfig = (await grabConfig()) || {};
global.CONFIG = { global.BUNEXT_CONFIG = {
...config, ...config,
development: is_dev, development: is_dev,
}; };

View File

@ -33,8 +33,9 @@ export default async function bunextRequestHandler({
let response: Response | undefined = undefined; let response: Response | undefined = undefined;
if (global.CONSTANTS.config?.middleware) { if (global.BUNEXT_CONSTANTS.config?.middleware) {
const middleware_res = await global.CONSTANTS.config.middleware({ const middleware_res =
await global.BUNEXT_CONSTANTS.config.middleware({
req: initial_req, req: initial_req,
url, url,
}); });

View File

@ -41,11 +41,11 @@ export default async function chokadirWatcherEsbuildCTX() {
return; return;
} }
if (global.BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_BUNDLER_CTX_DISPOSED) {
await fullRebuild({ msg: `Restarting Bundler ...` }); await fullRebuild({ msg: `Restarting Bundler ...` });
} }
if (global.SSR_BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED) {
await pagesSSRBundler().catch((error) => { await pagesSSRBundler().catch((error) => {
log.error(`SSR Bundler Error: ${error}`); log.error(`SSR Bundler Error: ${error}`);
}); });
@ -53,7 +53,7 @@ export default async function chokadirWatcherEsbuildCTX() {
if (filename.match(/\/styles$/) || filename === "styles") { if (filename.match(/\/styles$/) || filename === "styles") {
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
await Bun.sleep(1000); await Bun.sleep(1000);
await fullRebuild({ await fullRebuild({
msg: `Detected new \`styles\` directory. Rebuilding ...`, msg: `Detected new \`styles\` directory. Rebuilding ...`,
@ -72,31 +72,31 @@ export default async function chokadirWatcherEsbuildCTX() {
if (event === "change") { if (event === "change") {
if (filename.match(target_files_match)) { if (filename.match(target_files_match)) {
if (global.RECOMPILING) return; if (global.BUNEXT_RECOMPILING) return;
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
if (filename.match(/.*\.server\.tsx?/)) { if (filename.match(/.*\.server\.tsx?/)) {
global.IS_SERVER_COMPONENT = true; global.BUNEXT_IS_SERVER_COMPONENT = true;
} }
if (global.BUNDLER_CTX) { if (global.BUNEXT_BUNDLER_CTX) {
await global.BUNDLER_CTX.rebuild(); await global.BUNEXT_BUNDLER_CTX.rebuild();
} }
if (filename.match(/(404|500)\.tsx?/)) { if (filename.match(/(404|500)\.tsx?/)) {
for ( for (
let i = global.HMR_CONTROLLERS.length - 1; let i = global.BUNEXT_HMR_CONTROLLERS.length - 1;
i >= 0; i >= 0;
i-- i--
) { ) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
try { try {
controller?.controller?.enqueue( controller?.controller?.enqueue(
`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`, `event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`,
); );
} catch { } catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
} }
@ -119,7 +119,7 @@ export default async function chokadirWatcherEsbuildCTX() {
return reloadWatcher(); return reloadWatcher();
} }
if (global.RECOMPILING) return; if (global.BUNEXT_RECOMPILING) return;
owns_recompile = true; owns_recompile = true;
const action = event.startsWith("add") ? "created" : "deleted"; const action = event.startsWith("add") ? "created" : "deleted";
@ -139,8 +139,8 @@ export default async function chokadirWatcherEsbuildCTX() {
log.error(`Watcher rebuild failed: ${error}`); log.error(`Watcher rebuild failed: ${error}`);
} finally { } finally {
if (owns_recompile) { if (owns_recompile) {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
} }
} }
}; };
@ -154,8 +154,8 @@ export default async function chokadirWatcherEsbuildCTX() {
} }
function reloadWatcher() { function reloadWatcher() {
if (global.PAGES_SRC_WATCHER) { if (global.BUNEXT_PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close(); global.BUNEXT_PAGES_SRC_WATCHER.close();
chokadirWatcherEsbuildCTX(); chokadirWatcherEsbuildCTX();
} }
} }

View File

@ -7,20 +7,20 @@ export default async function fullRebuild(params?: { msg?: string }) {
try { try {
const { msg } = params || {}; const { msg } = params || {};
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
if (msg) { if (msg) {
log.watch(msg); log.watch(msg);
} }
global.ROUTER.reload(); global.BUNEXT_ROUTER.reload();
try { try {
await global.BUNDLER_CTX?.dispose(); await global.BUNEXT_BUNDLER_CTX?.dispose();
global.BUNDLER_CTX = undefined; global.BUNEXT_BUNDLER_CTX = undefined;
await global.SSR_BUNDLER_CTX?.dispose(); await global.BUNEXT_SSR_BUNDLER_CTX?.dispose();
global.SSR_BUNDLER_CTX = undefined; global.BUNEXT_SSR_BUNDLER_CTX = undefined;
} catch (error) {} } catch (error) {}
await allPagesESBuildContextBundler({ await allPagesESBuildContextBundler({
@ -31,12 +31,12 @@ export default async function fullRebuild(params?: { msg?: string }) {
} catch (error: any) { } catch (error: any) {
log.error(error); log.error(error);
} finally { } finally {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
} }
if (global.PAGES_SRC_WATCHER) { if (global.BUNEXT_PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close(); global.BUNEXT_PAGES_SRC_WATCHER.close();
watcherEsbuildCTX(); watcherEsbuildCTX();
} }
} }

View File

@ -3,11 +3,11 @@ type Params = {
}; };
function removeController(controller: ReadableStreamDefaultController<string>) { function removeController(controller: ReadableStreamDefaultController<string>) {
const idx = global.HMR_CONTROLLERS.findIndex( const idx = global.BUNEXT_HMR_CONTROLLERS.findIndex(
(c) => c.controller == controller, (c) => c.controller == controller,
); );
if (typeof idx == "number" && idx >= 0) { if (typeof idx == "number" && idx >= 0) {
global.HMR_CONTROLLERS.splice(idx, 1); global.BUNEXT_HMR_CONTROLLERS.splice(idx, 1);
} }
} }
@ -26,10 +26,10 @@ export default async function ({ req }: Params): Promise<Response> {
return new Response("Invalid Referer Header", { status: 400 }); return new Response("Invalid Referer Header", { status: 400 });
} }
const match = global.ROUTER.match(referer_url.pathname); const match = global.BUNEXT_ROUTER.match(referer_url.pathname);
const target_map = match?.filePath const target_map = match?.filePath
? global.BUNDLER_CTX_MAP?.[match.filePath] ? global.BUNEXT_BUNDLER_CTX_MAP?.[match.filePath]
: undefined; : undefined;
let controller: ReadableStreamDefaultController<string>; let controller: ReadableStreamDefaultController<string>;
@ -37,7 +37,7 @@ export default async function ({ req }: Params): Promise<Response> {
const stream = new ReadableStream<string>({ const stream = new ReadableStream<string>({
start(c) { start(c) {
controller = c; controller = c;
global.HMR_CONTROLLERS.push({ global.BUNEXT_HMR_CONTROLLERS.push({
controller: c, controller: c,
page_url: referer_url.href, page_url: referer_url.href,
target_map, target_map,

View File

@ -52,10 +52,10 @@ export default async function ({ req }: Params): Promise<Response> {
let module: any; let module: any;
const now = Date.now(); const now = Date.now();
if (is_dev && global.SSR_BUNDLER_CTX_MAP?.[match.filePath]?.path) { if (is_dev && global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[match.filePath]?.path) {
const target_import = path.join( const target_import = path.join(
ROOT_DIR, ROOT_DIR,
global.SSR_BUNDLER_CTX_MAP[match.filePath].path, global.BUNEXT_SSR_BUNDLER_CTX_MAP[match.filePath].path,
); );
module = await import(`${target_import}?t=${now}`); module = await import(`${target_import}?t=${now}`);
@ -108,9 +108,7 @@ export default async function ({ req }: Params): Promise<Response> {
); );
} }
routeParams.body = JSON.parse( routeParams.body = JSON.parse(new TextDecoder().decode(body) || "{}");
new TextDecoder().decode(body) || "{}",
);
} }
const target_module = (module["default"] || const target_module = (module["default"] ||

View File

@ -7,15 +7,15 @@ type Params = {
}; };
export default async function serverPostBuildFn(params?: Params) { export default async function serverPostBuildFn(params?: Params) {
if (!global.HMR_CONTROLLERS?.[0] || !global.BUNDLER_CTX_MAP) { if (!global.BUNEXT_HMR_CONTROLLERS?.[0] || !global.BUNEXT_BUNDLER_CTX_MAP) {
return; return;
} }
const reload_payload = { reload: true }; const reload_payload = { reload: true };
const reload_enqueue = `event: update\ndata: ${JSON.stringify(reload_payload)}\n\n`; const reload_enqueue = `event: update\ndata: ${JSON.stringify(reload_payload)}\n\n`;
for (let i = global.HMR_CONTROLLERS.length - 1; i >= 0; i--) { for (let i = global.BUNEXT_HMR_CONTROLLERS.length - 1; i >= 0; i--) {
const controller = global.HMR_CONTROLLERS[i]; const controller = global.BUNEXT_HMR_CONTROLLERS[i];
if (!controller) { if (!controller) {
continue; continue;
@ -29,19 +29,19 @@ export default async function serverPostBuildFn(params?: Params) {
try { try {
controller.controller.enqueue(reload_enqueue); controller.controller.enqueue(reload_enqueue);
} catch { } catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
continue; continue;
} }
const target_artifact = const target_artifact =
global.BUNDLER_CTX_MAP[controller.target_map.local_path]; global.BUNEXT_BUNDLER_CTX_MAP[controller.target_map.local_path];
if (!target_artifact?.local_path) { if (!target_artifact?.local_path) {
try { try {
controller.controller.enqueue(reload_enqueue); controller.controller.enqueue(reload_enqueue);
} catch { } catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
continue; continue;
} }
@ -81,7 +81,7 @@ export default async function serverPostBuildFn(params?: Params) {
try { try {
let final_data: { [k: string]: any } = {}; let final_data: { [k: string]: any } = {};
if (global.ROOT_FILE_UPDATED) { if (global.BUNEXT_ROOT_FILE_UPDATED) {
final_data = reload_payload; final_data = reload_payload;
} else { } else {
final_data = final_artifact; final_data = final_artifact;
@ -91,9 +91,9 @@ export default async function serverPostBuildFn(params?: Params) {
`event: update\ndata: ${JSON.stringify(final_data)}\n\n`, `event: update\ndata: ${JSON.stringify(final_data)}\n\n`,
); );
global.ROOT_FILE_UPDATED = false; global.BUNEXT_ROOT_FILE_UPDATED = false;
} catch { } catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
} }

View File

@ -7,7 +7,7 @@ export default async function startServer() {
const server = Bun.serve(serverParams); const server = Bun.serve(serverParams);
global.SERVER = server; global.BUNEXT_SERVER = server;
log.server(`http://${server.hostname}:${server.port}`); log.server(`http://${server.hostname}:${server.port}`);

View File

@ -23,14 +23,14 @@ export default async function watcherEsbuildCTX() {
if (!filename) return; if (!filename) return;
const full_file_path = path.join(ROOT_DIR, filename); const full_file_path = path.join(ROOT_DIR, filename);
if (global.CONFIG.exclude_watch_patterns) { if (global.BUNEXT_CONFIG.exclude_watch_patterns) {
for ( for (
let i = 0; let i = 0;
i < global.CONFIG.exclude_watch_patterns.length; i < global.BUNEXT_CONFIG.exclude_watch_patterns.length;
i++ i++
) { ) {
const watch_pattern = const watch_pattern =
global.CONFIG.exclude_watch_patterns[i]; global.BUNEXT_CONFIG.exclude_watch_patterns[i];
if (watch_pattern instanceof RegExp) { if (watch_pattern instanceof RegExp) {
const is_path_excluded = const is_path_excluded =
@ -60,12 +60,12 @@ export default async function watcherEsbuildCTX() {
return; return;
} }
if (global.BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_BUNDLER_CTX_DISPOSED) {
await fullRebuild({ msg: `Restarting Bundler ...` }); await fullRebuild({ msg: `Restarting Bundler ...` });
return; return;
} }
if (global.SSR_BUNDLER_CTX_DISPOSED) { if (global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED) {
await pagesSSRBundler().catch((error) => { await pagesSSRBundler().catch((error) => {
log.error(`SSR Bundler Error: ${error}`); log.error(`SSR Bundler Error: ${error}`);
}); });
@ -82,7 +82,7 @@ export default async function watcherEsbuildCTX() {
if (full_file_path.match(/\/styles$/)) { if (full_file_path.match(/\/styles$/)) {
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
await Bun.sleep(1000); await Bun.sleep(1000);
await fullRebuild({ await fullRebuild({
msg: `Detected new \`styles\` directory. Rebuilding ...`, msg: `Detected new \`styles\` directory. Rebuilding ...`,
@ -106,31 +106,33 @@ export default async function watcherEsbuildCTX() {
if (event !== "rename") { if (event !== "rename") {
if (filename.match(target_files_match)) { if (filename.match(target_files_match)) {
if (global.RECOMPILING) return; if (global.BUNEXT_RECOMPILING) return;
owns_recompile = true; owns_recompile = true;
global.RECOMPILING = true; global.BUNEXT_RECOMPILING = true;
if (filename.match(/.*\.server\.tsx?/)) { if (filename.match(/.*\.server\.tsx?/)) {
global.IS_SERVER_COMPONENT = true; global.BUNEXT_IS_SERVER_COMPONENT = true;
} }
if (global.BUNDLER_CTX) { if (global.BUNEXT_BUNDLER_CTX) {
await global.BUNDLER_CTX.rebuild(); await global.BUNEXT_BUNDLER_CTX.rebuild();
} }
if (filename.match(/(404|500)\.tsx?/)) { if (filename.match(/(404|500)\.tsx?/)) {
for ( for (
let i = global.HMR_CONTROLLERS.length - 1; let i =
global.BUNEXT_HMR_CONTROLLERS.length - 1;
i >= 0; i >= 0;
i-- i--
) { ) {
const controller = global.HMR_CONTROLLERS[i]; const controller =
global.BUNEXT_HMR_CONTROLLERS[i];
try { try {
controller?.controller?.enqueue( controller?.controller?.enqueue(
`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`, `event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`,
); );
} catch { } catch {
global.HMR_CONTROLLERS.splice(i, 1); global.BUNEXT_HMR_CONTROLLERS.splice(i, 1);
} }
} }
} }
@ -152,7 +154,7 @@ export default async function watcherEsbuildCTX() {
return reloadWatcher(); return reloadWatcher();
if (filename.match(/ /)) return reloadWatcher(); if (filename.match(/ /)) return reloadWatcher();
if (global.RECOMPILING) return; if (global.BUNEXT_RECOMPILING) return;
owns_recompile = true; owns_recompile = true;
const action = does_file_exist ? "created" : "deleted"; const action = does_file_exist ? "created" : "deleted";
@ -171,19 +173,19 @@ export default async function watcherEsbuildCTX() {
log.error(`Watcher rebuild failed: ${error}`); log.error(`Watcher rebuild failed: ${error}`);
} finally { } finally {
if (owns_recompile) { if (owns_recompile) {
global.RECOMPILING = false; global.BUNEXT_RECOMPILING = false;
global.IS_SERVER_COMPONENT = false; global.BUNEXT_IS_SERVER_COMPONENT = false;
} }
} }
}, },
); );
global.PAGES_SRC_WATCHER = pages_src_watcher; global.BUNEXT_PAGES_SRC_WATCHER = pages_src_watcher;
} }
function reloadWatcher() { function reloadWatcher() {
if (global.PAGES_SRC_WATCHER) { if (global.BUNEXT_PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close(); global.BUNEXT_PAGES_SRC_WATCHER.close();
watcherEsbuildCTX(); watcherEsbuildCTX();
} }
} }

View File

@ -80,7 +80,7 @@ export default async function genWebHTML({
env: { env: {
NODE_ENV: dev ? "development" : "production", NODE_ENV: dev ? "development" : "production",
...public_envs, ...public_envs,
...global.CONFIG.public_envs, ...global.BUNEXT_CONFIG.public_envs,
}, },
}; };
@ -122,7 +122,7 @@ export default async function genWebHTML({
type="importmap" type="importmap"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: JSON.stringify( __html: JSON.stringify(
global.REACT_IMPORTS_MAP, global.BUNEXT_REACT_IMPORTS_MAP,
), ),
}} }}
defer defer

View File

@ -19,10 +19,10 @@ export default async function grabPageBundledReactComponent({
return_tsx_only, return_tsx_only,
}: Params): Promise<GrabPageReactBundledComponentRes | undefined> { }: Params): Promise<GrabPageReactBundledComponentRes | undefined> {
try { try {
if (global.SSR_BUNDLER_CTX_MAP?.[file_path]) { if (global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[file_path]) {
const abs = path.join( const abs = path.join(
ROOT_DIR, ROOT_DIR,
global.SSR_BUNDLER_CTX_MAP[file_path].path, global.BUNEXT_SSR_BUNDLER_CTX_MAP[file_path].path,
); );
// Loader.registry.delete(abs); // Loader.registry.delete(abs);
const mod = await import(`${abs}?t=${Date.now()}`); const mod = await import(`${abs}?t=${Date.now()}`);

View File

@ -35,7 +35,7 @@ export default async function grabPageCombinedServerRes({
? grabPageServerPath({ file_path: root_file_path }) ? grabPageServerPath({ file_path: root_file_path })
: {}; : {};
const root_server_ctx_map = const root_server_ctx_map =
global.SSR_BUNDLER_CTX_MAP[root_server_file_path || ""]; global.BUNEXT_SSR_BUNDLER_CTX_MAP[root_server_file_path || ""];
const final_root_server_path = root_server_ctx_map?.local_path const final_root_server_path = root_server_ctx_map?.local_path
? path.join(ROOT_DIR, root_server_ctx_map.path) ? path.join(ROOT_DIR, root_server_ctx_map.path)
: root_server_file_path; : root_server_file_path;
@ -63,7 +63,8 @@ export default async function grabPageCombinedServerRes({
} }
const { server_file_path } = grabPageServerPath({ file_path }); const { server_file_path } = grabPageServerPath({ file_path });
const page_server_ctx = global.SSR_BUNDLER_CTX_MAP[server_file_path || ""]; const page_server_ctx =
global.BUNEXT_SSR_BUNDLER_CTX_MAP[server_file_path || ""];
const final_page_server_path = page_server_ctx?.local_path const final_page_server_path = page_server_ctx?.local_path
? path.join(ROOT_DIR, page_server_ctx.path) ? path.join(ROOT_DIR, page_server_ctx.path)
: server_file_path; : server_file_path;

View File

@ -45,7 +45,7 @@ export default async function grabPageComponent(
} = params; } = params;
const url = req?.url ? new URL(req.url) : undefined; const url = req?.url ? new URL(req.url) : undefined;
const router = global.ROUTER; const router = global.BUNEXT_ROUTER;
const is_dev = isDevelopment(); const is_dev = isDevelopment();
const forwarded_proto = req?.headers.get("x-forwarded-proto"); const forwarded_proto = req?.headers.get("x-forwarded-proto");
@ -89,7 +89,7 @@ export default async function grabPageComponent(
throw new Error(errMsg); throw new Error(errMsg);
} }
let bundledMap = global.BUNDLER_CTX_MAP[file_path]; let bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
if (!bundledMap?.path) { if (!bundledMap?.path) {
if (does_error_file_exist) { if (does_error_file_exist) {
@ -106,7 +106,7 @@ export default async function grabPageComponent(
msg: `Retrying Bundle map for file \`${file_path}\``, msg: `Retrying Bundle map for file \`${file_path}\``,
}); });
await Bun.sleep(1000); await Bun.sleep(1000);
bundledMap = global.BUNDLER_CTX_MAP[file_path]; bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
if (bundledMap?.path) break; if (bundledMap?.path) break;
} }
@ -118,7 +118,7 @@ export default async function grabPageComponent(
} }
if (req && !is_hydration) { if (req && !is_hydration) {
global.BUNDLER_CTX_MAP[file_path].req_url = req.url; global.BUNEXT_BUNDLER_CTX_MAP[file_path].req_url = req.url;
} }
if (debug) { if (debug) {
@ -168,8 +168,9 @@ export default async function grabPageComponent(
error?.status === 404; error?.status === 404;
if (!params.retry && is_dev) { if (!params.retry && is_dev) {
while (global.REBUILD_RETRIES < 2) { while (global.BUNEXT_REBUILD_RETRIES < 2) {
global.REBUILD_RETRIES = global.REBUILD_RETRIES + 1; global.BUNEXT_REBUILD_RETRIES =
global.BUNEXT_REBUILD_RETRIES + 1;
await fullRebuild(); await fullRebuild();
await Bun.sleep(200); await Bun.sleep(200);
@ -182,17 +183,17 @@ export default async function grabPageComponent(
component_retried instanceof Response || component_retried instanceof Response ||
component_retried.success component_retried.success
) { ) {
global.REBUILD_RETRIES = 0; global.BUNEXT_REBUILD_RETRIES = 0;
await serverPostBuildFn(); await serverPostBuildFn();
return component_retried; return component_retried;
} }
} }
global.REBUILD_RETRIES = 0; global.BUNEXT_REBUILD_RETRIES = 0;
} }
if (is404) { if (is404) {
global.IS_404_PAGE = true; global.BUNEXT_IS_404_PAGE = true;
} else { } else {
log.error(`Error Grabbing Page Component: ${error.message}`); log.error(`Error Grabbing Page Component: ${error.message}`);
log.error(`Page: ${passed_file_path || url?.pathname}`); log.error(`Page: ${passed_file_path || url?.pathname}`);

View File

@ -21,7 +21,7 @@ export default async function grabPageErrorComponent({
is404, is404,
url, url,
}: Params): Promise<GrabPageComponentRes | Response> { }: Params): Promise<GrabPageComponentRes | Response> {
const router = global.ROUTER; const router = global.BUNEXT_ROUTER;
const { BUNX_ROOT_500_PRESET_COMPONENT, BUNX_ROOT_404_PRESET_COMPONENT } = const { BUNX_ROOT_500_PRESET_COMPONENT, BUNX_ROOT_404_PRESET_COMPONENT } =
grabDirNames(); grabDirNames();
@ -59,7 +59,7 @@ export default async function grabPageErrorComponent({
const file_path = match.filePath; const file_path = match.filePath;
const bundledMap = global.BUNDLER_CTX_MAP?.[file_path]; const bundledMap = global.BUNEXT_BUNDLER_CTX_MAP?.[file_path];
const page_component = await grabPageModules({ const page_component = await grabPageModules({
file_path: file_path, file_path: file_path,

View File

@ -148,13 +148,14 @@ async function loadEntry<T>(page_file_path: string): Promise<T> {
const mod_file_path = toModPath(page_file_path); const mod_file_path = toModPath(page_file_path);
const mod_css_path = mod_file_path.replace(/\.js$/, ".css"); const mod_css_path = mod_file_path.replace(/\.js$/, ".css");
if (global.REACT_DOM_MODULE_CACHE.has(page_file_path)) { if (global.BUNEXT_REACT_DOM_MODULE_CACHE.has(page_file_path)) {
return global.REACT_DOM_MODULE_CACHE.get(page_file_path)?.main as T; return global.BUNEXT_REACT_DOM_MODULE_CACHE.get(page_file_path)
?.main as T;
} }
const mod = await import(`${mod_file_path}?t=${now}`); const mod = await import(`${mod_file_path}?t=${now}`);
global.REACT_DOM_MODULE_CACHE.set(page_file_path, { global.BUNEXT_REACT_DOM_MODULE_CACHE.set(page_file_path, {
main: mod, main: mod,
css: mod_css_path, css: mod_css_path,
}); });

View File

@ -3,8 +3,12 @@ type Params = {
}; };
export default function ({ path }: Params): boolean { export default function ({ path }: Params): boolean {
for (let i = 0; i < global.CONSTANTS.RouteIgnorePatterns.length; i++) { for (
const regex = global.CONSTANTS.RouteIgnorePatterns[i]; let i = 0;
i < global.BUNEXT_CONSTANTS.RouteIgnorePatterns.length;
i++
) {
const regex = global.BUNEXT_CONSTANTS.RouteIgnorePatterns[i];
if (path.match(regex)) return true; if (path.match(regex)) return true;
} }

View File

@ -9,8 +9,8 @@ export default function grabAppPort() {
return numberfy(process.env.PORT); return numberfy(process.env.PORT);
} }
if (global.CONFIG.port) { if (global.BUNEXT_CONFIG.port) {
return global.CONFIG.port; return global.BUNEXT_CONFIG.port;
} }
return numberfy(defaultPort); return numberfy(defaultPort);

View File

@ -1,8 +1,8 @@
import AppNames from "./grab-app-names"; import AppNames from "./grab-app-names";
export default function grabAssetsPrefix() { export default function grabAssetsPrefix() {
if (global.CONFIG.assets_prefix) { if (global.BUNEXT_CONFIG.assets_prefix) {
return global.CONFIG.assets_prefix; return global.BUNEXT_CONFIG.assets_prefix;
} }
const { defaultAssetPrefix } = AppNames; const { defaultAssetPrefix } = AppNames;

View File

@ -1,5 +1,5 @@
export default function grabConstants() { export default function grabConstants() {
const config = global.CONFIG; const config = global.BUNEXT_CONFIG;
const MB_IN_BYTES = 1024 * 1024; const MB_IN_BYTES = 1024 * 1024;
const ClientWindowPagePropsName = "__PAGE_PROPS__"; const ClientWindowPagePropsName = "__PAGE_PROPS__";

View File

@ -31,7 +31,7 @@ export type DirNames = {
}; };
export default function grabDirNames(): DirNames { export default function grabDirNames(): DirNames {
if (global.DIR_NAMES) return global.DIR_NAMES; if (global.BUNEXT_DIR_NAMES) return global.BUNEXT_DIR_NAMES;
const ROOT_DIR = process.cwd(); const ROOT_DIR = process.cwd();
const SRC_DIR = path.join(ROOT_DIR, "src"); const SRC_DIR = path.join(ROOT_DIR, "src");

View File

@ -1,8 +1,8 @@
import grabAppPort from "./grab-app-port"; import grabAppPort from "./grab-app-port";
export default function grabOrigin() { export default function grabOrigin() {
if (global.CONFIG.origin) { if (global.BUNEXT_CONFIG.origin) {
return global.CONFIG.origin; return global.BUNEXT_CONFIG.origin;
} }
const port = grabAppPort(); const port = grabAppPort();

View File

@ -28,7 +28,7 @@ export default async function grabRouteParams({
url, url,
query: _.merge(query, passed_query), query: _.merge(query, passed_query),
body, body,
server: global.SERVER, server: global.BUNEXT_SERVER,
}; };
return routeParams; return routeParams;

View File

@ -1,7 +1,7 @@
export default function grabRouter() { export default function grabRouter() {
// if (process.env.NODE_ENV !== "production") { // if (process.env.NODE_ENV !== "production") {
// global.ROUTER.reload(); // global.BUNEXT_ROUTER.reload();
// } // }
return global.ROUTER; return global.BUNEXT_ROUTER;
} }

View File

@ -31,6 +31,6 @@ export const log = {
), ),
banner: () => banner: () =>
console.log( console.log(
`\n ${chalk.cyan.bold(AppNames.name)} ${chalk.gray(`v${global.CURRENT_VERSION || AppNames["version"]}`)}\n`, `\n ${chalk.cyan.bold(AppNames.name)} ${chalk.gray(`v${global.BUNEXT_CURRENT_VERSION || AppNames["version"]}`)}\n`,
), ),
}; };

View File

@ -8,5 +8,5 @@ export default function refreshRouter() {
dir: PAGES_DIR, dir: PAGES_DIR,
}); });
global.ROUTER = router; global.BUNEXT_ROUTER = router;
} }