diff --git a/dist/commands/build/index.js b/dist/commands/build/index.js index f240f34..bdf1d15 100644 --- a/dist/commands/build/index.js +++ b/dist/commands/build/index.js @@ -1,9 +1,10 @@ import { Command } from "commander"; import { log } from "../../utils/log"; import grabDirNames from "../../utils/grab-dir-names"; -import { rmSync } from "fs"; +import { rmSync, writeFileSync } from "fs"; import bunextInit from "../../functions/bunext-init"; -const { HYDRATION_DST_DIR, BUNX_CWD_PAGES_REWRITE_DIR } = grabDirNames(); +import pagesSSRBundler from "../../functions/bundler/pages-ssr-bundler"; +const { HYDRATION_DST_DIR, BUNX_CWD_PAGES_REWRITE_DIR, BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON, BUNX_CWD_MODULE_CACHE_DIR, } = grabDirNames(); export default function () { return new Command("build") .description("Build Project") @@ -11,10 +12,21 @@ export default function () { try { rmSync(HYDRATION_DST_DIR, { recursive: true }); rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true }); + rmSync(BUNX_CWD_MODULE_CACHE_DIR, { + recursive: true, + force: true, + }); } catch (error) { } global.BUNEXT_SKIPPED_BROWSER_MODULES = new Set(); await bunextInit({ build_only: true }); + // await pagesSSRBundler(); + if (global.BUNEXT_BUNDLER_CTX_MAP) { + writeFileSync(BUNDLER_CTX_MAP_JSON, JSON.stringify(global.BUNEXT_BUNDLER_CTX_MAP), "utf-8"); + } + if (global.BUNEXT_SSR_BUNDLER_CTX_MAP) { + writeFileSync(SSR_BUNDLER_CTX_MAP_JSON, JSON.stringify(global.BUNEXT_SSR_BUNDLER_CTX_MAP), "utf-8"); + } log.success("Modules Built Successfully!"); process.exit(); }); diff --git a/dist/commands/dev/index.js b/dist/commands/dev/index.js index ca8d197..7eed3ec 100644 --- a/dist/commands/dev/index.js +++ b/dist/commands/dev/index.js @@ -2,7 +2,8 @@ import { Command } from "commander"; import path from "path"; import grabDirNames from "../../utils/grab-dir-names"; import writeErrorFile from "../../functions/write-error-file"; -import { existsSync } from "fs"; +import { existsSync, rmSync } from "fs"; +const { BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON } = grabDirNames(); let retries = 0; let timeout; const MAX_RETRIES = 5; @@ -10,6 +11,11 @@ export default function () { return new Command("dev") .description("Run development server") .action(async () => { + try { + rmSync(SSR_BUNDLER_CTX_MAP_JSON, { recursive: true }); + rmSync(BUNDLER_CTX_MAP_JSON, { recursive: true }); + } + catch (error) { } await dev(); }); } diff --git a/dist/commands/start/prod-spawn.js b/dist/commands/start/prod-spawn.js index aa49658..afef0d1 100644 --- a/dist/commands/start/prod-spawn.js +++ b/dist/commands/start/prod-spawn.js @@ -1,6 +1,25 @@ +import { readFileSync } from "fs"; import bunextInit from "../../functions/bunext-init"; import startServer from "../../functions/server/start-server"; +import grabDirNames from "../../utils/grab-dir-names"; import { log } from "../../utils/log"; +const { BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON } = grabDirNames(); log.info("Starting production server ..."); +try { + const bundler_ctx_json = JSON.parse(readFileSync(BUNDLER_CTX_MAP_JSON, "utf-8")); + if (bundler_ctx_json) { + global.BUNEXT_BUNDLER_CTX_MAP = bundler_ctx_json; + } +} +catch (error) { + // log.error(`Couldn't set global bundler CTX map: ${error.message}`); +} +try { + const ssr_bundler_ctx_json = JSON.parse(readFileSync(SSR_BUNDLER_CTX_MAP_JSON, "utf-8")); + if (ssr_bundler_ctx_json) { + global.BUNEXT_SSR_BUNDLER_CTX_MAP = ssr_bundler_ctx_json; + } +} +catch (error) { } await bunextInit(); await startServer(); diff --git a/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js b/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js index 3711699..30a7d45 100644 --- a/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js +++ b/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js @@ -5,11 +5,11 @@ import buildOnstartErrorHandler from "../build-on-start-error-handler"; import _ from "lodash"; import pagesSSRBundler from "../pages-ssr-bundler"; import grabDirNames from "../../../utils/grab-dir-names"; -import { cpSync, existsSync, mkdirSync, rmSync } from "fs"; +import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync } from "fs"; import fullRebuild from "../../server/full-rebuild"; import path from "path"; import cleanupLogsDirs from "../../cleanup-logs-dir"; -const { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR } = grabDirNames(); +const { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR, BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON, } = grabDirNames(); let build_start = 0; const MAX_BUILD_STARTS = 2; export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, build_only, }) { diff --git a/dist/functions/bunext-init.js b/dist/functions/bunext-init.js index 67401ae..29b9286 100644 --- a/dist/functions/bunext-init.js +++ b/dist/functions/bunext-init.js @@ -11,9 +11,14 @@ import watcherEsbuildCTX from "./server/watcher-esbuild-ctx"; const dirNames = grabDirNames(); const { PAGES_DIR } = dirNames; export default async function bunextInit(params) { + const are_modules_aready_built = global.BUNEXT_BUNDLER_CTX_MAP && global.BUNEXT_SSR_BUNDLER_CTX_MAP; global.BUNEXT_HMR_CONTROLLERS = []; - global.BUNEXT_BUNDLER_CTX_MAP = {}; - global.BUNEXT_SSR_BUNDLER_CTX_MAP = {}; + if (!global.BUNEXT_BUNDLER_CTX_MAP) { + global.BUNEXT_BUNDLER_CTX_MAP = {}; + } + if (!global.BUNEXT_SSR_BUNDLER_CTX_MAP) { + global.BUNEXT_SSR_BUNDLER_CTX_MAP = {}; + } // global.BUNEXT_API_ROUTES_BUNDLER_CTX_MAP = {}; global.BUNEXT_BUNDLER_REBUILDS = 0; global.BUNEXT_REBUILD_RETRIES = 0; @@ -35,7 +40,7 @@ export default async function bunextInit(params) { const is_dev = isDevelopment(); if (params?.build_only) { log.build(`Building Modules ...`); - await allPagesESBuildContextBundler(); + await allPagesESBuildContextBundler({ build_only: params.build_only }); } else if (is_dev) { log.build(`Building Modules ...`); @@ -47,14 +52,13 @@ export default async function bunextInit(params) { watcherEsbuildCTX(); } else { - log.build(`Building Modules ...`); - await allPagesESBuildContextBundler({ start: true }); + if (are_modules_aready_built) { + log.success(`All modules already built.`); + } + else { + log.build(`Building Modules ...`); + await allPagesESBuildContextBundler({ start: true }); + } cron(); } } -// process.on("exit", (code) => { -// Bun.spawn([process.execPath, ...process.argv.slice(1)], { -// stdio: ["inherit", "inherit", "inherit"], -// env: process.env, -// }); -// }); diff --git a/dist/functions/init.js b/dist/functions/init.js index ae977aa..e803f8f 100644 --- a/dist/functions/init.js +++ b/dist/functions/init.js @@ -10,10 +10,6 @@ export default async function () { recursive: true, force: true, }); - rmSync(dirNames.BUNX_CWD_MODULE_CACHE_DIR, { - recursive: true, - force: true, - }); if (dirNames.ROOT_DIR.startsWith(dirNames.BUNX_ROOT_DIR) && !dirNames.ROOT_DIR.includes(`${dirNames.BUNX_ROOT_DIR}/test/`)) { log.error(`Can't Run From this Directory => ${dirNames.ROOT_DIR}`); diff --git a/dist/utils/grab-dir-names.d.ts b/dist/utils/grab-dir-names.d.ts index 37b0172..19124a5 100644 --- a/dist/utils/grab-dir-names.d.ts +++ b/dist/utils/grab-dir-names.d.ts @@ -26,5 +26,7 @@ export type DirNames = { BUNX_BUNDLER_ERROR_EXIT_FILE: string; BUNX_ERROR_LOGS_DIR: string; BUNX_LOGS_DIR: string; + BUNDLER_CTX_MAP_JSON: string; + SSR_BUNDLER_CTX_MAP_JSON: string; }; export default function grabDirNames(): DirNames; diff --git a/dist/utils/grab-dir-names.js b/dist/utils/grab-dir-names.js index f59c5f0..572a9e6 100644 --- a/dist/utils/grab-dir-names.js +++ b/dist/utils/grab-dir-names.js @@ -29,6 +29,8 @@ export default function grabDirNames() { const BUNX_ROOT_500_PRESET_COMPONENT = path.join(BUNX_ROOT_PRESETS_DIR, `${BUNX_ROOT_500_FILE_NAME}.tsx`); const BUNX_ROOT_404_FILE_NAME = `not-found`; const BUNX_ROOT_404_PRESET_COMPONENT = path.join(BUNX_ROOT_PRESETS_DIR, `${BUNX_ROOT_404_FILE_NAME}.tsx`); + const BUNDLER_CTX_MAP_JSON = path.join(BUNX_CWD_DIR, "bundler-ctx-map.json"); + const SSR_BUNDLER_CTX_MAP_JSON = path.join(BUNX_CWD_DIR, "ssr-bundler-ctx-map.json"); return { ROOT_DIR, SRC_DIR, @@ -57,6 +59,8 @@ export default function grabDirNames() { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR, BUNX_LOGS_DIR, + BUNDLER_CTX_MAP_JSON, + SSR_BUNDLER_CTX_MAP_JSON, }; } // const NODE_MODULES_DIR = path.resolve( diff --git a/package.json b/package.json index 38fcc6a..4ec64cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/bunext", - "version": "1.1.7", + "version": "1.1.8", "main": "dist/index.js", "module": "index.ts", "dependencies": { diff --git a/src/commands/build/index.ts b/src/commands/build/index.ts index 07bd00a..6483af7 100644 --- a/src/commands/build/index.ts +++ b/src/commands/build/index.ts @@ -1,10 +1,17 @@ import { Command } from "commander"; import { log } from "../../utils/log"; import grabDirNames from "../../utils/grab-dir-names"; -import { rmSync } from "fs"; +import { rmSync, writeFileSync } from "fs"; import bunextInit from "../../functions/bunext-init"; +import pagesSSRBundler from "../../functions/bundler/pages-ssr-bundler"; -const { HYDRATION_DST_DIR, BUNX_CWD_PAGES_REWRITE_DIR } = grabDirNames(); +const { + HYDRATION_DST_DIR, + BUNX_CWD_PAGES_REWRITE_DIR, + BUNDLER_CTX_MAP_JSON, + SSR_BUNDLER_CTX_MAP_JSON, + BUNX_CWD_MODULE_CACHE_DIR, +} = grabDirNames(); export default function () { return new Command("build") @@ -13,11 +20,32 @@ export default function () { try { rmSync(HYDRATION_DST_DIR, { recursive: true }); rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true }); + rmSync(BUNX_CWD_MODULE_CACHE_DIR, { + recursive: true, + force: true, + }); } catch (error) {} global.BUNEXT_SKIPPED_BROWSER_MODULES = new Set(); await bunextInit({ build_only: true }); + // await pagesSSRBundler(); + + if (global.BUNEXT_BUNDLER_CTX_MAP) { + writeFileSync( + BUNDLER_CTX_MAP_JSON, + JSON.stringify(global.BUNEXT_BUNDLER_CTX_MAP), + "utf-8", + ); + } + + if (global.BUNEXT_SSR_BUNDLER_CTX_MAP) { + writeFileSync( + SSR_BUNDLER_CTX_MAP_JSON, + JSON.stringify(global.BUNEXT_SSR_BUNDLER_CTX_MAP), + "utf-8", + ); + } log.success("Modules Built Successfully!"); diff --git a/src/commands/dev/index.ts b/src/commands/dev/index.ts index 3cc2b4b..480a355 100644 --- a/src/commands/dev/index.ts +++ b/src/commands/dev/index.ts @@ -3,7 +3,9 @@ import path from "path"; import type { BunSpawnOptions } from "../../types"; import grabDirNames from "../../utils/grab-dir-names"; import writeErrorFile from "../../functions/write-error-file"; -import { existsSync } from "fs"; +import { existsSync, rmSync } from "fs"; + +const { BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON } = grabDirNames(); let retries = 0; let timeout: any; @@ -13,6 +15,11 @@ export default function () { return new Command("dev") .description("Run development server") .action(async () => { + try { + rmSync(SSR_BUNDLER_CTX_MAP_JSON, { recursive: true }); + rmSync(BUNDLER_CTX_MAP_JSON, { recursive: true }); + } catch (error) {} + await dev(); }); } diff --git a/src/commands/start/prod-spawn.ts b/src/commands/start/prod-spawn.ts index fa9dd35..3649fae 100644 --- a/src/commands/start/prod-spawn.ts +++ b/src/commands/start/prod-spawn.ts @@ -1,9 +1,36 @@ +import { readFileSync } from "fs"; import bunextInit from "../../functions/bunext-init"; import startServer from "../../functions/server/start-server"; +import grabDirNames from "../../utils/grab-dir-names"; import { log } from "../../utils/log"; +import type { BundlerCTXMap } from "../../types"; + +const { BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON } = grabDirNames(); log.info("Starting production server ..."); +try { + const bundler_ctx_json = JSON.parse( + readFileSync(BUNDLER_CTX_MAP_JSON, "utf-8"), + ) as { [k: string]: BundlerCTXMap } | undefined; + + if (bundler_ctx_json) { + global.BUNEXT_BUNDLER_CTX_MAP = bundler_ctx_json; + } +} catch (error: any) { + // log.error(`Couldn't set global bundler CTX map: ${error.message}`); +} + +try { + const ssr_bundler_ctx_json = JSON.parse( + readFileSync(SSR_BUNDLER_CTX_MAP_JSON, "utf-8"), + ) as { [k: string]: BundlerCTXMap } | undefined; + + if (ssr_bundler_ctx_json) { + global.BUNEXT_SSR_BUNDLER_CTX_MAP = ssr_bundler_ctx_json; + } +} catch (error) {} + await bunextInit(); await startServer(); diff --git a/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts b/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts index 263b206..143636a 100644 --- a/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts +++ b/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts @@ -6,12 +6,17 @@ import buildOnstartErrorHandler from "../build-on-start-error-handler"; import _ from "lodash"; import pagesSSRBundler from "../pages-ssr-bundler"; import grabDirNames from "../../../utils/grab-dir-names"; -import { cpSync, existsSync, mkdirSync, rmSync } from "fs"; +import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync } from "fs"; import fullRebuild from "../../server/full-rebuild"; import path from "path"; import cleanupLogsDirs from "../../cleanup-logs-dir"; -const { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR } = grabDirNames(); +const { + BUNX_BUNDLER_ERROR_EXIT_FILE, + BUNX_ERROR_LOGS_DIR, + BUNDLER_CTX_MAP_JSON, + SSR_BUNDLER_CTX_MAP_JSON, +} = grabDirNames(); let build_start = 0; const MAX_BUILD_STARTS = 2; diff --git a/src/functions/bunext-init.ts b/src/functions/bunext-init.ts index be37f73..8052b96 100644 --- a/src/functions/bunext-init.ts +++ b/src/functions/bunext-init.ts @@ -63,9 +63,16 @@ type Params = { }; export default async function bunextInit(params?: Params) { + const are_modules_aready_built = + global.BUNEXT_BUNDLER_CTX_MAP && global.BUNEXT_SSR_BUNDLER_CTX_MAP; + global.BUNEXT_HMR_CONTROLLERS = []; - global.BUNEXT_BUNDLER_CTX_MAP = {}; - global.BUNEXT_SSR_BUNDLER_CTX_MAP = {}; + if (!global.BUNEXT_BUNDLER_CTX_MAP) { + global.BUNEXT_BUNDLER_CTX_MAP = {}; + } + if (!global.BUNEXT_SSR_BUNDLER_CTX_MAP) { + global.BUNEXT_SSR_BUNDLER_CTX_MAP = {}; + } // global.BUNEXT_API_ROUTES_BUNDLER_CTX_MAP = {}; global.BUNEXT_BUNDLER_REBUILDS = 0; global.BUNEXT_REBUILD_RETRIES = 0; @@ -94,7 +101,7 @@ export default async function bunextInit(params?: Params) { if (params?.build_only) { log.build(`Building Modules ...`); - await allPagesESBuildContextBundler(); + await allPagesESBuildContextBundler({ build_only: params.build_only }); } else if (is_dev) { log.build(`Building Modules ...`); await allPagesESBuildContextBundler({ @@ -104,15 +111,13 @@ export default async function bunextInit(params?: Params) { }); watcherEsbuildCTX(); } else { - log.build(`Building Modules ...`); - await allPagesESBuildContextBundler({ start: true }); + if (are_modules_aready_built) { + log.success(`All modules already built.`); + } else { + log.build(`Building Modules ...`); + await allPagesESBuildContextBundler({ start: true }); + } + cron(); } } - -// process.on("exit", (code) => { -// Bun.spawn([process.execPath, ...process.argv.slice(1)], { -// stdio: ["inherit", "inherit", "inherit"], -// env: process.env, -// }); -// }); diff --git a/src/functions/init.ts b/src/functions/init.ts index af98cf5..892ef50 100644 --- a/src/functions/init.ts +++ b/src/functions/init.ts @@ -14,11 +14,6 @@ export default async function () { force: true, }); - rmSync(dirNames.BUNX_CWD_MODULE_CACHE_DIR, { - recursive: true, - force: true, - }); - if ( dirNames.ROOT_DIR.startsWith(dirNames.BUNX_ROOT_DIR) && !dirNames.ROOT_DIR.includes(`${dirNames.BUNX_ROOT_DIR}/test/`) diff --git a/src/utils/grab-dir-names.ts b/src/utils/grab-dir-names.ts index 316061f..98cddc2 100644 --- a/src/utils/grab-dir-names.ts +++ b/src/utils/grab-dir-names.ts @@ -28,6 +28,8 @@ export type DirNames = { BUNX_BUNDLER_ERROR_EXIT_FILE: string; BUNX_ERROR_LOGS_DIR: string; BUNX_LOGS_DIR: string; + BUNDLER_CTX_MAP_JSON: string; + SSR_BUNDLER_CTX_MAP_JSON: string; }; export default function grabDirNames(): DirNames { @@ -84,6 +86,15 @@ export default function grabDirNames(): DirNames { `${BUNX_ROOT_404_FILE_NAME}.tsx`, ); + const BUNDLER_CTX_MAP_JSON = path.join( + BUNX_CWD_DIR, + "bundler-ctx-map.json", + ); + const SSR_BUNDLER_CTX_MAP_JSON = path.join( + BUNX_CWD_DIR, + "ssr-bundler-ctx-map.json", + ); + return { ROOT_DIR, SRC_DIR, @@ -112,6 +123,8 @@ export default function grabDirNames(): DirNames { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR, BUNX_LOGS_DIR, + BUNDLER_CTX_MAP_JSON, + SSR_BUNDLER_CTX_MAP_JSON, }; }