diff --git a/dist/commands/dev/index.js b/dist/commands/dev/index.js index 6c545ea..a10be7b 100644 --- a/dist/commands/dev/index.js +++ b/dist/commands/dev/index.js @@ -4,6 +4,7 @@ import grabDirNames from "../../utils/grab-dir-names"; import writeErrorFile from "../../functions/write-error-file"; let retries = 0; let timeout; +const MAX_RETRIES = 5; export default function () { return new Command("dev") .description("Run development server") @@ -13,7 +14,8 @@ export default function () { } async function dev() { clearTimeout(timeout); - if (retries == 1) { + if (retries >= MAX_RETRIES) { + console.error(`Dev server crashed ${MAX_RETRIES} times. Exiting.`); process.exit(1); } const dev_spawn_file = path.resolve(__dirname, "dev-spawn.ts"); @@ -32,7 +34,7 @@ async function dev() { retries++; timeout = setTimeout(() => { retries = 0; - }, 5000); + }, 10000); const exited = await dev_process.exited; if (exited) { return await dev(); diff --git a/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js b/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js index 87f41ab..426d63a 100644 --- a/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js +++ b/dist/functions/bundler/plugins/esbuild-ctx-artifact-tracker.js @@ -21,14 +21,29 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, build_starts++; build_start = performance.now(); const does_error_file_exist = existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE); - if (build_starts == MAX_BUILD_STARTS && + if (build_starts >= MAX_BUILD_STARTS && !does_error_file_exist) { await buildOnstartErrorHandler(); - process.exit(1); } }); build.onEnd((result) => { if (result.errors.length > 0) { + global.RECOMPILING = false; + global.IS_SERVER_COMPONENT = false; + build_starts = 0; + log.error(`Build errors:`); + for (const err of result.errors) { + 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--) { + const controller = global.HMR_CONTROLLERS[i]; + try { + controller?.controller?.enqueue(`event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`); + } + catch { + global.HMR_CONTROLLERS.splice(i, 1); + } + } return; } const artifacts = grabArtifactsFromBundledResults({ @@ -59,7 +74,12 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, fullRebuild(); } else { - pagesSSRBundler(); + try { + pagesSSRBundler(); + } + catch (error) { + log.error(`SSR Bundler Error: ${error}`); + } } // if (global.SSR_BUNDLER_CTX) { // global.SSR_BUNDLER_CTX.rebuild(); diff --git a/dist/functions/bundler/plugins/ssr-ctx-artifact-tracker.js b/dist/functions/bundler/plugins/ssr-ctx-artifact-tracker.js index 2556ee0..844b216 100644 --- a/dist/functions/bundler/plugins/ssr-ctx-artifact-tracker.js +++ b/dist/functions/bundler/plugins/ssr-ctx-artifact-tracker.js @@ -22,7 +22,9 @@ export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) { }); build.onEnd((result) => { if (result.errors.length > 0) { - console.log("result.errors", result.errors); + global.SSR_BUNDLER_CTX_DISPOSED = false; + build_starts = 0; + console.log("SSR Build errors:", result.errors); return; } const artifacts = grabArtifactsFromBundledResults({ diff --git a/dist/functions/server/full-rebuild.js b/dist/functions/server/full-rebuild.js index 191199a..0ace751 100644 --- a/dist/functions/server/full-rebuild.js +++ b/dist/functions/server/full-rebuild.js @@ -23,6 +23,8 @@ export default async function fullRebuild(params) { }); } catch (error) { + global.RECOMPILING = false; + global.IS_SERVER_COMPONENT = false; log.error(error); } if (global.PAGES_SRC_WATCHER) { diff --git a/package.json b/package.json index ba6447c..6447db3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/bunext", - "version": "1.0.85", + "version": "1.0.86", "main": "dist/index.js", "module": "index.ts", "dependencies": { diff --git a/src/commands/dev/index.ts b/src/commands/dev/index.ts index 97cff74..debb0c8 100644 --- a/src/commands/dev/index.ts +++ b/src/commands/dev/index.ts @@ -6,6 +6,7 @@ import writeErrorFile from "../../functions/write-error-file"; let retries = 0; let timeout: any; +const MAX_RETRIES = 5; export default function () { return new Command("dev") @@ -18,7 +19,8 @@ export default function () { async function dev() { clearTimeout(timeout); - if (retries == 1) { + if (retries >= MAX_RETRIES) { + console.error(`Dev server crashed ${MAX_RETRIES} times. Exiting.`); process.exit(1); } @@ -42,7 +44,7 @@ async function dev() { timeout = setTimeout(() => { retries = 0; - }, 5000); + }, 10000); const exited = await dev_process.exited; if (exited) { diff --git a/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts b/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts index e0b2f5d..8a083b3 100644 --- a/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts +++ b/src/functions/bundler/plugins/esbuild-ctx-artifact-tracker.ts @@ -43,16 +43,35 @@ export default function esbuildCTXArtifactTracker({ ); if ( - build_starts == MAX_BUILD_STARTS && + build_starts >= MAX_BUILD_STARTS && !does_error_file_exist ) { await buildOnstartErrorHandler(); - process.exit(1); } }); build.onEnd((result) => { if (result.errors.length > 0) { + global.RECOMPILING = false; + global.IS_SERVER_COMPONENT = false; + build_starts = 0; + + log.error(`Build errors:`); + for (const err of result.errors) { + 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--) { + const controller = global.HMR_CONTROLLERS[i]; + try { + controller?.controller?.enqueue( + `event: update\ndata: ${JSON.stringify({ reload: true })}\n\n`, + ); + } catch { + global.HMR_CONTROLLERS.splice(i, 1); + } + } + return; } @@ -98,7 +117,11 @@ export default function esbuildCTXArtifactTracker({ cleanupLogsDirs(); fullRebuild(); } else { - pagesSSRBundler(); + try { + pagesSSRBundler(); + } catch (error) { + log.error(`SSR Bundler Error: ${error}`); + } } // if (global.SSR_BUNDLER_CTX) { diff --git a/src/functions/bundler/plugins/ssr-ctx-artifact-tracker.ts b/src/functions/bundler/plugins/ssr-ctx-artifact-tracker.ts index 2ea618b..c0d892f 100644 --- a/src/functions/bundler/plugins/ssr-ctx-artifact-tracker.ts +++ b/src/functions/bundler/plugins/ssr-ctx-artifact-tracker.ts @@ -40,7 +40,9 @@ export default function ssrCTXArtifactTracker({ build.onEnd((result) => { if (result.errors.length > 0) { - console.log("result.errors", result.errors); + global.SSR_BUNDLER_CTX_DISPOSED = false; + build_starts = 0; + console.log("SSR Build errors:", result.errors); return; } diff --git a/src/functions/server/full-rebuild.ts b/src/functions/server/full-rebuild.ts index 902b64f..1d68578 100644 --- a/src/functions/server/full-rebuild.ts +++ b/src/functions/server/full-rebuild.ts @@ -30,6 +30,8 @@ export default async function fullRebuild(params?: { msg?: string }) { }, }); } catch (error: any) { + global.RECOMPILING = false; + global.IS_SERVER_COMPONENT = false; log.error(error); }