Handle errors better
This commit is contained in:
parent
eb0721f94b
commit
f3b087a1f3
@ -1,4 +1,4 @@
|
|||||||
import type { Plugin } from "esbuild";
|
import { type Plugin } from "esbuild";
|
||||||
import type { PageFiles } from "../../../types";
|
import type { PageFiles } from "../../../types";
|
||||||
type Params = {
|
type Params = {
|
||||||
entryToPage: Map<string, PageFiles & {
|
entryToPage: Map<string, PageFiles & {
|
||||||
|
|||||||
@ -1,20 +1,24 @@
|
|||||||
|
import {} from "esbuild";
|
||||||
import { log } from "../../../utils/log";
|
import { log } from "../../../utils/log";
|
||||||
import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-result";
|
import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-result";
|
||||||
let buildStart = 0;
|
let buildStart = 0;
|
||||||
let build_starts = 0;
|
let build_starts = 0;
|
||||||
const MAX_BUILD_STARTS = 10;
|
const MAX_BUILD_STARTS = 2;
|
||||||
export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, }) {
|
export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, }) {
|
||||||
const artifactTracker = {
|
const artifactTracker = {
|
||||||
name: "artifact-tracker",
|
name: "artifact-tracker",
|
||||||
setup(build) {
|
setup(build) {
|
||||||
build.onStart(() => {
|
build.onStart(async () => {
|
||||||
build_starts++;
|
build_starts++;
|
||||||
buildStart = performance.now();
|
buildStart = performance.now();
|
||||||
if (build_starts == MAX_BUILD_STARTS) {
|
if (build_starts == MAX_BUILD_STARTS) {
|
||||||
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);
|
||||||
|
global.BUNDLER_CTX_DISPOSED = true;
|
||||||
global.RECOMPILING = false;
|
global.RECOMPILING = false;
|
||||||
global.IS_SERVER_COMPONENT = false;
|
global.IS_SERVER_COMPONENT = false;
|
||||||
|
await global.BUNDLER_CTX?.dispose();
|
||||||
|
global.BUNDLER_CTX = undefined;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
build.onEnd((result) => {
|
build.onEnd((result) => {
|
||||||
@ -28,6 +32,20 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn,
|
|||||||
// }
|
// }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// if (result.errors.length) {
|
||||||
|
// console.error(
|
||||||
|
// esbuild.formatMessagesSync(result.errors, {
|
||||||
|
// kind: "error",
|
||||||
|
// }),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// if (result.warnings.length) {
|
||||||
|
// console.warn(
|
||||||
|
// esbuild.formatMessagesSync(result.warnings, {
|
||||||
|
// kind: "warning",
|
||||||
|
// }),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
const artifacts = grabArtifactsFromBundledResults({
|
const artifacts = grabArtifactsFromBundledResults({
|
||||||
result,
|
result,
|
||||||
entryToPage,
|
entryToPage,
|
||||||
|
|||||||
1
dist/functions/bunext-init.d.ts
vendored
1
dist/functions/bunext-init.d.ts
vendored
@ -34,5 +34,6 @@ declare global {
|
|||||||
main: any;
|
main: any;
|
||||||
css: string;
|
css: string;
|
||||||
}>;
|
}>;
|
||||||
|
var BUNDLER_CTX_DISPOSED: boolean | undefined;
|
||||||
}
|
}
|
||||||
export default function bunextInit(): Promise<void>;
|
export default function bunextInit(): Promise<void>;
|
||||||
|
|||||||
8
dist/functions/server/watcher-esbuild-ctx.js
vendored
8
dist/functions/server/watcher-esbuild-ctx.js
vendored
@ -47,7 +47,13 @@ export default async function watcherEsbuildCTX() {
|
|||||||
if (filename.match(/.*\.server\.tsx?/)) {
|
if (filename.match(/.*\.server\.tsx?/)) {
|
||||||
global.IS_SERVER_COMPONENT = true;
|
global.IS_SERVER_COMPONENT = true;
|
||||||
}
|
}
|
||||||
await global.BUNDLER_CTX?.rebuild();
|
if (global.BUNDLER_CTX && !global.BUNDLER_CTX_DISPOSED) {
|
||||||
|
await global.BUNDLER_CTX.rebuild();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await fullRebuild({ msg: `Restarting Bundler ...` });
|
||||||
|
global.BUNDLER_CTX_DISPOSED = false;
|
||||||
|
}
|
||||||
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.HMR_CONTROLLERS.length - 1; i >= 0; i--) {
|
||||||
const controller = global.HMR_CONTROLLERS[i];
|
const controller = global.HMR_CONTROLLERS[i];
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import grabDirNames from "../../../utils/grab-dir-names";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import tailwindEsbuildPlugin from "./tailwind-esbuild-plugin";
|
import tailwindEsbuildPlugin from "./tailwind-esbuild-plugin";
|
||||||
import { existsSync, unlinkSync } from "fs";
|
import { existsSync, unlinkSync } from "fs";
|
||||||
import { log } from "../../../utils/log";
|
|
||||||
const { PAGES_DIR, BUNX_CWD_MODULE_CACHE_DIR } = grabDirNames();
|
const { PAGES_DIR, BUNX_CWD_MODULE_CACHE_DIR } = grabDirNames();
|
||||||
function toModPath(page_file_path) {
|
function toModPath(page_file_path) {
|
||||||
return path.join(BUNX_CWD_MODULE_CACHE_DIR, page_file_path.replace(PAGES_DIR, "").replace(/\.(t|j)sx?$/, ".js"));
|
return path.join(BUNX_CWD_MODULE_CACHE_DIR, page_file_path.replace(PAGES_DIR, "").replace(/\.(t|j)sx?$/, ".js"));
|
||||||
@ -74,6 +73,7 @@ async function buildEntries({ entries, clean_cache }) {
|
|||||||
jsx: "automatic",
|
jsx: "automatic",
|
||||||
outdir: BUNX_CWD_MODULE_CACHE_DIR,
|
outdir: BUNX_CWD_MODULE_CACHE_DIR,
|
||||||
plugins: [virtualPlugin, tailwindEsbuildPlugin],
|
plugins: [virtualPlugin, tailwindEsbuildPlugin],
|
||||||
|
logLevel: "silent",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
async function loadEntry(page_file_path) {
|
async function loadEntry(page_file_path) {
|
||||||
@ -92,10 +92,22 @@ async function loadEntry(page_file_path) {
|
|||||||
}
|
}
|
||||||
export default async function grabTsxStringModule(params) {
|
export default async function grabTsxStringModule(params) {
|
||||||
if (isBatch(params)) {
|
if (isBatch(params)) {
|
||||||
|
try {
|
||||||
await buildEntries({ entries: params.tsx_map });
|
await buildEntries({ entries: params.tsx_map });
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(`SSR Batch Build Error\n`);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
return Promise.all(params.tsx_map.map((entry) => loadEntry(entry.page_file_path)));
|
return Promise.all(params.tsx_map.map((entry) => loadEntry(entry.page_file_path)));
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
await buildEntries({ entries: [params], clean_cache: true });
|
await buildEntries({ entries: [params], clean_cache: true });
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(`SSR Single Build Error\n`);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
return loadEntry(params.page_file_path);
|
return loadEntry(params.page_file_path);
|
||||||
}
|
}
|
||||||
// export default async function grabTsxStringModule<T extends any = any>({
|
// export default async function grabTsxStringModule<T extends any = any>({
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@moduletrace/bunext",
|
"name": "@moduletrace/bunext",
|
||||||
"version": "1.0.60",
|
"version": "1.0.61",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import type { Plugin } from "esbuild";
|
import { type Plugin } from "esbuild";
|
||||||
import type { PageFiles } from "../../../types";
|
import type { PageFiles } from "../../../types";
|
||||||
import { log } from "../../../utils/log";
|
import { log } from "../../../utils/log";
|
||||||
import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-result";
|
import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-result";
|
||||||
|
|
||||||
let buildStart = 0;
|
let buildStart = 0;
|
||||||
let build_starts = 0;
|
let build_starts = 0;
|
||||||
const MAX_BUILD_STARTS = 10;
|
const MAX_BUILD_STARTS = 2;
|
||||||
|
|
||||||
type Params = {
|
type Params = {
|
||||||
entryToPage: Map<
|
entryToPage: Map<
|
||||||
@ -24,15 +24,21 @@ export default function esbuildCTXArtifactTracker({
|
|||||||
const artifactTracker: Plugin = {
|
const artifactTracker: Plugin = {
|
||||||
name: "artifact-tracker",
|
name: "artifact-tracker",
|
||||||
setup(build) {
|
setup(build) {
|
||||||
build.onStart(() => {
|
build.onStart(async () => {
|
||||||
build_starts++;
|
build_starts++;
|
||||||
buildStart = performance.now();
|
buildStart = performance.now();
|
||||||
|
|
||||||
if (build_starts == MAX_BUILD_STARTS) {
|
if (build_starts == MAX_BUILD_STARTS) {
|
||||||
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);
|
||||||
|
|
||||||
|
global.BUNDLER_CTX_DISPOSED = true;
|
||||||
|
|
||||||
global.RECOMPILING = false;
|
global.RECOMPILING = false;
|
||||||
global.IS_SERVER_COMPONENT = false;
|
global.IS_SERVER_COMPONENT = false;
|
||||||
|
|
||||||
|
await global.BUNDLER_CTX?.dispose();
|
||||||
|
global.BUNDLER_CTX = undefined;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -48,6 +54,22 @@ export default function esbuildCTXArtifactTracker({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (result.errors.length) {
|
||||||
|
// console.error(
|
||||||
|
// esbuild.formatMessagesSync(result.errors, {
|
||||||
|
// kind: "error",
|
||||||
|
// }),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (result.warnings.length) {
|
||||||
|
// console.warn(
|
||||||
|
// esbuild.formatMessagesSync(result.warnings, {
|
||||||
|
// kind: "warning",
|
||||||
|
// }),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
const artifacts = grabArtifactsFromBundledResults({
|
const artifacts = grabArtifactsFromBundledResults({
|
||||||
result,
|
result,
|
||||||
entryToPage,
|
entryToPage,
|
||||||
|
|||||||
@ -42,6 +42,7 @@ declare global {
|
|||||||
var REACT_IMPORTS_MAP: { imports: Record<string, string> };
|
var REACT_IMPORTS_MAP: { imports: Record<string, string> };
|
||||||
var REACT_DOM_SERVER: any;
|
var REACT_DOM_SERVER: any;
|
||||||
var REACT_DOM_MODULE_CACHE: Map<string, { main: any; css: string }>;
|
var REACT_DOM_MODULE_CACHE: Map<string, { main: any; css: string }>;
|
||||||
|
var BUNDLER_CTX_DISPOSED: boolean | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const dirNames = grabDirNames();
|
const dirNames = grabDirNames();
|
||||||
|
|||||||
@ -60,7 +60,12 @@ export default async function watcherEsbuildCTX() {
|
|||||||
global.IS_SERVER_COMPONENT = true;
|
global.IS_SERVER_COMPONENT = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
await global.BUNDLER_CTX?.rebuild();
|
if (global.BUNDLER_CTX && !global.BUNDLER_CTX_DISPOSED) {
|
||||||
|
await global.BUNDLER_CTX.rebuild();
|
||||||
|
} else {
|
||||||
|
await fullRebuild({ msg: `Restarting Bundler ...` });
|
||||||
|
global.BUNDLER_CTX_DISPOSED = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (filename.match(/(404|500)\.tsx?/)) {
|
if (filename.match(/(404|500)\.tsx?/)) {
|
||||||
for (
|
for (
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import type {
|
|||||||
GrabTSXModuleSingleParams,
|
GrabTSXModuleSingleParams,
|
||||||
} from "../../../types";
|
} from "../../../types";
|
||||||
import { existsSync, unlinkSync } from "fs";
|
import { existsSync, unlinkSync } from "fs";
|
||||||
import { log } from "../../../utils/log";
|
|
||||||
|
|
||||||
const { PAGES_DIR, BUNX_CWD_MODULE_CACHE_DIR } = grabDirNames();
|
const { PAGES_DIR, BUNX_CWD_MODULE_CACHE_DIR } = grabDirNames();
|
||||||
|
|
||||||
@ -102,6 +101,7 @@ async function buildEntries({ entries, clean_cache }: BuildEntriesParams) {
|
|||||||
jsx: "automatic",
|
jsx: "automatic",
|
||||||
outdir: BUNX_CWD_MODULE_CACHE_DIR,
|
outdir: BUNX_CWD_MODULE_CACHE_DIR,
|
||||||
plugins: [virtualPlugin, tailwindEsbuildPlugin],
|
plugins: [virtualPlugin, tailwindEsbuildPlugin],
|
||||||
|
logLevel: "silent",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,13 +128,24 @@ export default async function grabTsxStringModule<T>(
|
|||||||
params: Params,
|
params: Params,
|
||||||
): Promise<T | T[]> {
|
): Promise<T | T[]> {
|
||||||
if (isBatch(params)) {
|
if (isBatch(params)) {
|
||||||
|
try {
|
||||||
await buildEntries({ entries: params.tsx_map });
|
await buildEntries({ entries: params.tsx_map });
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`SSR Batch Build Error\n`);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
params.tsx_map.map((entry) => loadEntry<T>(entry.page_file_path)),
|
params.tsx_map.map((entry) => loadEntry<T>(entry.page_file_path)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
await buildEntries({ entries: [params], clean_cache: true });
|
await buildEntries({ entries: [params], clean_cache: true });
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`SSR Single Build Error\n`);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
|
||||||
return loadEntry<T>(params.page_file_path);
|
return loadEntry<T>(params.page_file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user