Refactor artifacts to use relative directory for build step and retrieval
This commit is contained in:
@@ -153,7 +153,7 @@ bun run dev
|
|||||||
| Command | Description |
|
| Command | Description |
|
||||||
| -------------- | ------------------------------------------------------------------------------ |
|
| -------------- | ------------------------------------------------------------------------------ |
|
||||||
| `bunext dev` | Start the development server with HMR and file watching. |
|
| `bunext dev` | Start the development server with HMR and file watching. |
|
||||||
| `bunext build` | Bundle all pages for production. Outputs artifacts to `.bunext/public/pages/`. Resolves absolute paths in the artifact maps at the configured build root — see [BUNEXT_BUILD_ROOT_DIR](#environment-variables). |
|
| `bunext build` | Bundle all pages for production. Outputs artifacts to `.bunext/public/pages/` using paths relative to the project root. |
|
||||||
| `bunext start` | Start the production server using pre-built artifacts. |
|
| `bunext start` | Start the production server using pre-built artifacts. |
|
||||||
|
|
||||||
### Running the CLI
|
### Running the CLI
|
||||||
@@ -917,17 +917,6 @@ bun run server.ts
|
|||||||
| ---------------------- | ------------------------------------------------------------------------------------------------ |
|
| ---------------------- | ------------------------------------------------------------------------------------------------ |
|
||||||
| `PORT` | Override the server port (takes precedence over config) |
|
| `PORT` | Override the server port (takes precedence over config) |
|
||||||
| `BUNEXT_PUBLIC_*` | Any env var prefixed with `BUNEXT_PUBLIC_` is exposed to the client via `window.process.env` |
|
| `BUNEXT_PUBLIC_*` | Any env var prefixed with `BUNEXT_PUBLIC_` is exposed to the client via `window.process.env` |
|
||||||
| `BUNEXT_BUILD_ROOT_DIR` | Read by `bunext build` only. When set, the project root's absolute path is replaced with this value inside the artifact maps (`map.json` and `ssr-bundler-ctx-map.json`) before they are written. Use it when the project will be served from a different path than the one it was built at (e.g. building in CI at `/build/app` and running in a container mounted at `/app`). |
|
|
||||||
|
|
||||||
### Build Root Directory
|
|
||||||
|
|
||||||
Artifact maps store absolute filesystem paths. By default, `bunext build` records the build machine's current working directory as the root. If the project will be deployed or served from a different location, point the maps at the runtime root instead:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
BUNEXT_BUILD_ROOT_DIR=/app bun run build
|
|
||||||
```
|
|
||||||
|
|
||||||
Run `bunext start` from the directory matching `BUNEXT_BUILD_ROOT_DIR` so all recorded artifact paths resolve at request time. If unset, the path is left as-is and the runtime working directory must match the build directory.
|
|
||||||
|
|
||||||
### Public Environment Variables
|
### Public Environment Variables
|
||||||
|
|
||||||
@@ -977,7 +966,7 @@ Running `bunext build`:
|
|||||||
1. Sets `NODE_ENV=production`.
|
1. Sets `NODE_ENV=production`.
|
||||||
2. Runs ESBuild once with minification enabled.
|
2. Runs ESBuild once with minification enabled.
|
||||||
3. Writes all bundled artifacts to `.bunext/public/pages/` plus the artifact maps `.bunext/public/pages/map.json` and `.bunext/public/pages/ssr-bundler-ctx-map.json`.
|
3. Writes all bundled artifacts to `.bunext/public/pages/` plus the artifact maps `.bunext/public/pages/map.json` and `.bunext/public/pages/ssr-bundler-ctx-map.json`.
|
||||||
4. Artifact maps store absolute paths anchored at the project root. If `BUNEXT_BUILD_ROOT_DIR` is set, every occurrence of the build directory is replaced with that value so the maps point at the deploy-time location (see [Build Root Directory](#build-root-directory)).
|
4. Artifact maps record paths relative to the project root so they resolve at request time regardless of where the build ran.
|
||||||
5. Exits.
|
5. Exits.
|
||||||
|
|
||||||
### Production Server
|
### Production Server
|
||||||
|
|||||||
Vendored
-7
@@ -23,17 +23,10 @@ export default function () {
|
|||||||
// await pagesSSRBundler();
|
// await pagesSSRBundler();
|
||||||
if (global.BUNEXT_BUNDLER_CTX_MAP) {
|
if (global.BUNEXT_BUNDLER_CTX_MAP) {
|
||||||
let bundler_ctx_json_str = JSON.stringify(global.BUNEXT_BUNDLER_CTX_MAP);
|
let bundler_ctx_json_str = JSON.stringify(global.BUNEXT_BUNDLER_CTX_MAP);
|
||||||
if (process.env.BUNEXT_BUILD_ROOT_DIR) {
|
|
||||||
bundler_ctx_json_str = bundler_ctx_json_str.replaceAll(ROOT_DIR, process.env.BUNEXT_BUILD_ROOT_DIR);
|
|
||||||
}
|
|
||||||
writeFileSync(BUNDLER_CTX_MAP_JSON, bundler_ctx_json_str, "utf-8");
|
writeFileSync(BUNDLER_CTX_MAP_JSON, bundler_ctx_json_str, "utf-8");
|
||||||
}
|
}
|
||||||
if (global.BUNEXT_SSR_BUNDLER_CTX_MAP) {
|
if (global.BUNEXT_SSR_BUNDLER_CTX_MAP) {
|
||||||
let ssr_bundler_ctx_json_str = JSON.stringify(global.BUNEXT_SSR_BUNDLER_CTX_MAP);
|
let ssr_bundler_ctx_json_str = JSON.stringify(global.BUNEXT_SSR_BUNDLER_CTX_MAP);
|
||||||
if (process.env.BUNEXT_BUILD_ROOT_DIR) {
|
|
||||||
ssr_bundler_ctx_json_str =
|
|
||||||
ssr_bundler_ctx_json_str.replaceAll(ROOT_DIR, process.env.BUNEXT_BUILD_ROOT_DIR);
|
|
||||||
}
|
|
||||||
writeFileSync(SSR_BUNDLER_CTX_MAP_JSON, ssr_bundler_ctx_json_str, "utf-8");
|
writeFileSync(SSR_BUNDLER_CTX_MAP_JSON, ssr_bundler_ctx_json_str, "utf-8");
|
||||||
}
|
}
|
||||||
log.success("Modules Built Successfully!");
|
log.success("Modules Built Successfully!");
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
|
|||||||
import fullRebuild from "../../server/full-rebuild";
|
import fullRebuild from "../../server/full-rebuild";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import cleanupLogsDirs from "../../cleanup-logs-dir";
|
import cleanupLogsDirs from "../../cleanup-logs-dir";
|
||||||
const { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR, BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON, } = grabDirNames();
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
const { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR, ROOT_DIR } = grabDirNames();
|
||||||
let build_start = 0;
|
let build_start = 0;
|
||||||
const MAX_BUILD_STARTS = 2;
|
const MAX_BUILD_STARTS = 2;
|
||||||
export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, build_only, }) {
|
export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn, build_only, }) {
|
||||||
@@ -53,8 +54,9 @@ export default function esbuildCTXArtifactTracker({ entryToPage, post_build_fn,
|
|||||||
const artifact = artifacts[i];
|
const artifact = artifacts[i];
|
||||||
if (artifact?.local_path &&
|
if (artifact?.local_path &&
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP) {
|
global.BUNEXT_BUNDLER_CTX_MAP) {
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP[artifact.local_path] =
|
const relative_path = grabRelativePath(artifact.local_path);
|
||||||
_.merge(global.BUNEXT_BUNDLER_CTX_MAP[artifact.local_path], artifact);
|
global.BUNEXT_BUNDLER_CTX_MAP[relative_path] =
|
||||||
|
_.merge(global.BUNEXT_BUNDLER_CTX_MAP[relative_path], { ...artifact, local_path: relative_path });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,11 @@ import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-resu
|
|||||||
import { writeFileSync } from "fs";
|
import { writeFileSync } from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
let build_start = 0;
|
let build_start = 0;
|
||||||
let build_starts = 0;
|
let build_starts = 0;
|
||||||
const MAX_BUILD_STARTS = 2;
|
const MAX_BUILD_STARTS = 2;
|
||||||
const { BUNX_TMP_DIR } = grabDirNames();
|
const { BUNX_TMP_DIR, ROOT_DIR } = grabDirNames();
|
||||||
export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) {
|
export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) {
|
||||||
const artifactTracker = {
|
const artifactTracker = {
|
||||||
name: "ssr-artifact-tracker",
|
name: "ssr-artifact-tracker",
|
||||||
@@ -44,7 +45,11 @@ export default function ssrCTXArtifactTracker({ entryToPage, post_build_fn, }) {
|
|||||||
const artifact = artifacts[i];
|
const artifact = artifacts[i];
|
||||||
if (artifact?.local_path &&
|
if (artifact?.local_path &&
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP) {
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP) {
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP[artifact.local_path] = artifact;
|
const relative_path = grabRelativePath(artifact.local_path);
|
||||||
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_path] = {
|
||||||
|
...artifact,
|
||||||
|
local_path: relative_path,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// post_build_fn?.({ artifacts });
|
// post_build_fn?.({ artifacts });
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
import type { BundlerCTXMap } from "../../types";
|
|
||||||
type Params = {
|
|
||||||
artifacts: BundlerCTXMap[];
|
|
||||||
page_file_paths?: string[];
|
|
||||||
};
|
|
||||||
export default function recordArtifacts({ artifacts, page_file_paths, }: Params): Promise<void>;
|
|
||||||
export {};
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
import grabDirNames from "../../utils/grab-dir-names";
|
|
||||||
import _ from "lodash";
|
|
||||||
const { HYDRATION_DST_DIR_MAP_JSON_FILE } = grabDirNames();
|
|
||||||
export default async function recordArtifacts({ artifacts, page_file_paths, }) {
|
|
||||||
const artifacts_map = {};
|
|
||||||
for (const artifact of artifacts) {
|
|
||||||
if (artifact?.local_path) {
|
|
||||||
artifacts_map[artifact.local_path] = artifact;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (global.BUNEXT_BUNDLER_CTX_MAP) {
|
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP = _.merge(global.BUNEXT_BUNDLER_CTX_MAP, artifacts_map);
|
|
||||||
}
|
|
||||||
// await Bun.write(
|
|
||||||
// HYDRATION_DST_DIR_MAP_JSON_FILE,
|
|
||||||
// JSON.stringify(artifacts_map, null, 4),
|
|
||||||
// );
|
|
||||||
}
|
|
||||||
Vendored
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
|
import grabRelativePath from "../../utils/grab-relative-path";
|
||||||
function removeController(controller) {
|
function removeController(controller) {
|
||||||
const idx = global.BUNEXT_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) {
|
||||||
@@ -19,7 +20,7 @@ export default async function ({ req }) {
|
|||||||
}
|
}
|
||||||
const match = global.BUNEXT_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.BUNEXT_BUNDLER_CTX_MAP?.[match.filePath]
|
? global.BUNEXT_BUNDLER_CTX_MAP?.[grabRelativePath(match.filePath)]
|
||||||
: undefined;
|
: undefined;
|
||||||
let controller;
|
let controller;
|
||||||
let heartbeat;
|
let heartbeat;
|
||||||
|
|||||||
+5
-30
@@ -5,6 +5,7 @@ import isDevelopment from "../../utils/is-development";
|
|||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../utils/grab-dir-names";
|
import grabDirNames from "../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../utils/grab-relative-path";
|
||||||
const { ROOT_DIR } = grabDirNames();
|
const { ROOT_DIR } = grabDirNames();
|
||||||
export default async function ({ req }) {
|
export default async function ({ req }) {
|
||||||
const url = new URL(req.url);
|
const url = new URL(req.url);
|
||||||
@@ -30,8 +31,10 @@ export default async function ({ req }) {
|
|||||||
});
|
});
|
||||||
let module;
|
let module;
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
if (is_dev && global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[match.filePath]?.path) {
|
const relative_match_path = grabRelativePath(match.filePath);
|
||||||
const target_import = path.join(ROOT_DIR, global.BUNEXT_SSR_BUNDLER_CTX_MAP[match.filePath].path);
|
if (is_dev &&
|
||||||
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[relative_match_path]?.path) {
|
||||||
|
const target_import = path.join(ROOT_DIR, global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_match_path].path);
|
||||||
module = await import(`${target_import}?t=${now}`);
|
module = await import(`${target_import}?t=${now}`);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -99,31 +102,3 @@ export default async function ({ req }) {
|
|||||||
}
|
}
|
||||||
return Response.json({ err: `Route handler error` });
|
return Response.json({ err: `Route handler error` });
|
||||||
}
|
}
|
||||||
// const relative_path = match.filePath.replace(API_DIR, "");
|
|
||||||
// const relative_module_js_file = relative_path.replace(/\.tsx?$/, ".js");
|
|
||||||
// const bun_module_file = path.join(
|
|
||||||
// BUNX_CWD_MODULE_CACHE_DIR,
|
|
||||||
// "api",
|
|
||||||
// relative_module_js_file,
|
|
||||||
// );
|
|
||||||
// if (existsSync(bun_module_file)) {
|
|
||||||
// module = await import(`${bun_module_file}?t=${now}`);
|
|
||||||
// } else {
|
|
||||||
// const import_path = is_dev
|
|
||||||
// ? `${match.filePath}?t=${now}`
|
|
||||||
// : match.filePath;
|
|
||||||
// module = await import(import_path);
|
|
||||||
// }
|
|
||||||
// if (is_dev) {
|
|
||||||
// const tmp_path = `${match.filePath}.${now}${AppData["BunextTmpFileExt"]}`;
|
|
||||||
// cpSync(match.filePath, tmp_path);
|
|
||||||
// module = await import(`${tmp_path}?t=${now}`);
|
|
||||||
// try {
|
|
||||||
// unlinkSync(tmp_path);
|
|
||||||
// } catch (error) {}
|
|
||||||
// } else {
|
|
||||||
// // const import_path = is_dev ? `${match.filePath}?t=${now}` : match.filePath;
|
|
||||||
// module = await import(match.filePath);
|
|
||||||
// }
|
|
||||||
// const import_path = is_dev ? `${match.filePath}?t=${now}` : match.filePath;
|
|
||||||
// module = await import(import_path);
|
|
||||||
|
|||||||
@@ -4,11 +4,13 @@ import { log } from "../../../utils/log";
|
|||||||
import grabRootFilePath from "./grab-root-file-path";
|
import grabRootFilePath from "./grab-root-file-path";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
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.BUNEXT_SSR_BUNDLER_CTX_MAP?.[file_path]) {
|
const relative_path = grabRelativePath(file_path);
|
||||||
const abs = path.join(ROOT_DIR, global.BUNEXT_SSR_BUNDLER_CTX_MAP[file_path].path);
|
if (global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[relative_path]) {
|
||||||
|
const abs = path.join(ROOT_DIR, global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_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;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import grabPageServerRes from "./grab-page-server-res";
|
|||||||
import grabPageServerPath from "./grab-page-server-path";
|
import grabPageServerPath from "./grab-page-server-path";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
const { ROOT_DIR } = grabDirNames();
|
const { ROOT_DIR } = grabDirNames();
|
||||||
export default async function grabPageCombinedServerRes({ file_path, debug, url, query, routeParams, }) {
|
export default async function grabPageCombinedServerRes({ file_path, debug, url, query, routeParams, }) {
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
@@ -12,7 +13,9 @@ 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.BUNEXT_SSR_BUNDLER_CTX_MAP[root_server_file_path || ""];
|
const root_server_ctx_map = root_server_file_path
|
||||||
|
? global.BUNEXT_SSR_BUNDLER_CTX_MAP[grabRelativePath(root_server_file_path)]
|
||||||
|
: undefined;
|
||||||
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 +36,9 @@ 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.BUNEXT_SSR_BUNDLER_CTX_MAP[server_file_path || ""];
|
const page_server_ctx = server_file_path
|
||||||
|
? global.BUNEXT_SSR_BUNDLER_CTX_MAP[grabRelativePath(server_file_path)]
|
||||||
|
: undefined;
|
||||||
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;
|
||||||
|
|||||||
+7
-6
@@ -9,8 +9,8 @@ import serverPostBuildFn from "../server-post-build-fn";
|
|||||||
import isDevelopment from "../../../utils/is-development";
|
import isDevelopment from "../../../utils/is-development";
|
||||||
import { existsSync } from "fs";
|
import { existsSync } from "fs";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
import watcherEsbuildCTX from "../watcher-esbuild-ctx";
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
const { BUNX_BUNDLER_ERROR_EXIT_FILE } = grabDirNames();
|
const { BUNX_BUNDLER_ERROR_EXIT_FILE, ROOT_DIR } = grabDirNames();
|
||||||
class NotFoundError extends Error {
|
class NotFoundError extends Error {
|
||||||
status = 404;
|
status = 404;
|
||||||
constructor(message) {
|
constructor(message) {
|
||||||
@@ -51,7 +51,8 @@ export default async function grabPageComponent(params) {
|
|||||||
// log.error(errMsg);
|
// log.error(errMsg);
|
||||||
throw new Error(errMsg);
|
throw new Error(errMsg);
|
||||||
}
|
}
|
||||||
let bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
|
const relative_file_path = grabRelativePath(file_path);
|
||||||
|
let bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[relative_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.`);
|
||||||
@@ -60,10 +61,10 @@ export default async function grabPageComponent(params) {
|
|||||||
const MAX_RETRIES = 2;
|
const MAX_RETRIES = 2;
|
||||||
while (retries < MAX_RETRIES) {
|
while (retries < MAX_RETRIES) {
|
||||||
await fullRebuild({
|
await fullRebuild({
|
||||||
msg: `Retrying Bundle map for file \`${file_path}\``,
|
msg: `Retrying Bundle map for file \`${relative_file_path}\``,
|
||||||
});
|
});
|
||||||
await Bun.sleep(1000);
|
await Bun.sleep(1000);
|
||||||
bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
|
bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[relative_file_path];
|
||||||
if (bundledMap?.path)
|
if (bundledMap?.path)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -74,7 +75,7 @@ export default async function grabPageComponent(params) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (req && !is_hydration) {
|
if (req && !is_hydration) {
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP[file_path].req_url = req.url;
|
global.BUNEXT_BUNDLER_CTX_MAP[relative_file_path].req_url = req.url;
|
||||||
}
|
}
|
||||||
if (debug) {
|
if (debug) {
|
||||||
log.info(`bundledMap:`, bundledMap);
|
log.info(`bundledMap:`, bundledMap);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import grabPageModules from "./grab-page-modules";
|
|||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import fullRebuild from "../full-rebuild";
|
import fullRebuild from "../full-rebuild";
|
||||||
import isDevelopment from "../../../utils/is-development";
|
import isDevelopment from "../../../utils/is-development";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
export default async function grabPageErrorComponent({ error, routeParams, is404, url, }) {
|
export default async function grabPageErrorComponent({ error, routeParams, is404, url, }) {
|
||||||
const router = global.BUNEXT_ROUTER;
|
const router = global.BUNEXT_ROUTER;
|
||||||
const is_dev = isDevelopment();
|
const is_dev = isDevelopment();
|
||||||
@@ -33,7 +34,7 @@ export default async function grabPageErrorComponent({ error, routeParams, is404
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
const file_path = match.filePath;
|
const file_path = match.filePath;
|
||||||
const bundledMap = global.BUNEXT_BUNDLER_CTX_MAP?.[file_path];
|
const bundledMap = global.BUNEXT_BUNDLER_CTX_MAP?.[grabRelativePath(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,
|
||||||
|
|||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
export default function grabRelativePath(path: string): string;
|
||||||
Vendored
+6
@@ -0,0 +1,6 @@
|
|||||||
|
import grabDirNames from "./grab-dir-names";
|
||||||
|
const { ROOT_DIR } = grabDirNames();
|
||||||
|
export default function grabRelativePath(path) {
|
||||||
|
const relative_path = path.replace(ROOT_DIR, "").replace(/^\//, "");
|
||||||
|
return relative_path;
|
||||||
|
}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@moduletrace/bunext",
|
"name": "@moduletrace/bunext",
|
||||||
"version": "1.1.11",
|
"version": "1.1.12",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -37,13 +37,6 @@ export default function () {
|
|||||||
global.BUNEXT_BUNDLER_CTX_MAP,
|
global.BUNEXT_BUNDLER_CTX_MAP,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (process.env.BUNEXT_BUILD_ROOT_DIR) {
|
|
||||||
bundler_ctx_json_str = bundler_ctx_json_str.replaceAll(
|
|
||||||
ROOT_DIR,
|
|
||||||
process.env.BUNEXT_BUILD_ROOT_DIR,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
writeFileSync(
|
writeFileSync(
|
||||||
BUNDLER_CTX_MAP_JSON,
|
BUNDLER_CTX_MAP_JSON,
|
||||||
bundler_ctx_json_str,
|
bundler_ctx_json_str,
|
||||||
@@ -56,14 +49,6 @@ export default function () {
|
|||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP,
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (process.env.BUNEXT_BUILD_ROOT_DIR) {
|
|
||||||
ssr_bundler_ctx_json_str =
|
|
||||||
ssr_bundler_ctx_json_str.replaceAll(
|
|
||||||
ROOT_DIR,
|
|
||||||
process.env.BUNEXT_BUILD_ROOT_DIR,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
writeFileSync(
|
writeFileSync(
|
||||||
SSR_BUNDLER_CTX_MAP_JSON,
|
SSR_BUNDLER_CTX_MAP_JSON,
|
||||||
ssr_bundler_ctx_json_str,
|
ssr_bundler_ctx_json_str,
|
||||||
|
|||||||
@@ -10,13 +10,10 @@ import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
|
|||||||
import fullRebuild from "../../server/full-rebuild";
|
import fullRebuild from "../../server/full-rebuild";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import cleanupLogsDirs from "../../cleanup-logs-dir";
|
import cleanupLogsDirs from "../../cleanup-logs-dir";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
|
||||||
const {
|
const { BUNX_BUNDLER_ERROR_EXIT_FILE, BUNX_ERROR_LOGS_DIR, ROOT_DIR } =
|
||||||
BUNX_BUNDLER_ERROR_EXIT_FILE,
|
grabDirNames();
|
||||||
BUNX_ERROR_LOGS_DIR,
|
|
||||||
BUNDLER_CTX_MAP_JSON,
|
|
||||||
SSR_BUNDLER_CTX_MAP_JSON,
|
|
||||||
} = grabDirNames();
|
|
||||||
|
|
||||||
let build_start = 0;
|
let build_start = 0;
|
||||||
const MAX_BUILD_STARTS = 2;
|
const MAX_BUILD_STARTS = 2;
|
||||||
@@ -94,16 +91,21 @@ 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 (
|
if (
|
||||||
artifact?.local_path &&
|
artifact?.local_path &&
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP
|
global.BUNEXT_BUNDLER_CTX_MAP
|
||||||
) {
|
) {
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP[artifact.local_path] =
|
const relative_path = grabRelativePath(
|
||||||
|
artifact.local_path,
|
||||||
|
);
|
||||||
|
|
||||||
|
global.BUNEXT_BUNDLER_CTX_MAP[relative_path] =
|
||||||
_.merge(
|
_.merge(
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP[
|
global.BUNEXT_BUNDLER_CTX_MAP[
|
||||||
artifact.local_path
|
relative_path
|
||||||
],
|
],
|
||||||
artifact,
|
{ ...artifact, local_path: relative_path },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-resu
|
|||||||
import { writeFileSync } from "fs";
|
import { writeFileSync } from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
|
||||||
let build_start = 0;
|
let build_start = 0;
|
||||||
let build_starts = 0;
|
let build_starts = 0;
|
||||||
const MAX_BUILD_STARTS = 2;
|
const MAX_BUILD_STARTS = 2;
|
||||||
|
|
||||||
const { BUNX_TMP_DIR } = grabDirNames();
|
const { BUNX_TMP_DIR, ROOT_DIR } = grabDirNames();
|
||||||
|
|
||||||
type Params = {
|
type Params = {
|
||||||
entryToPage: Map<
|
entryToPage: Map<
|
||||||
@@ -63,13 +64,19 @@ export default function ssrCTXArtifactTracker({
|
|||||||
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 (
|
if (
|
||||||
artifact?.local_path &&
|
artifact?.local_path &&
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP
|
||||||
) {
|
) {
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP[
|
const relative_path = grabRelativePath(
|
||||||
artifact.local_path
|
artifact.local_path,
|
||||||
] = artifact;
|
);
|
||||||
|
|
||||||
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_path] = {
|
||||||
|
...artifact,
|
||||||
|
local_path: relative_path,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
import grabDirNames from "../../utils/grab-dir-names";
|
|
||||||
import type { BundlerCTXMap } from "../../types";
|
|
||||||
import _ from "lodash";
|
|
||||||
|
|
||||||
const { HYDRATION_DST_DIR_MAP_JSON_FILE } = grabDirNames();
|
|
||||||
|
|
||||||
type Params = {
|
|
||||||
artifacts: BundlerCTXMap[];
|
|
||||||
page_file_paths?: string[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function recordArtifacts({
|
|
||||||
artifacts,
|
|
||||||
page_file_paths,
|
|
||||||
}: Params) {
|
|
||||||
const artifacts_map: { [k: string]: BundlerCTXMap } = {};
|
|
||||||
|
|
||||||
for (const artifact of artifacts) {
|
|
||||||
if (artifact?.local_path) {
|
|
||||||
artifacts_map[artifact.local_path] = artifact;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (global.BUNEXT_BUNDLER_CTX_MAP) {
|
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP = _.merge(
|
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP,
|
|
||||||
artifacts_map,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// await Bun.write(
|
|
||||||
// HYDRATION_DST_DIR_MAP_JSON_FILE,
|
|
||||||
// JSON.stringify(artifacts_map, null, 4),
|
|
||||||
// );
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import grabRelativePath from "../../utils/grab-relative-path";
|
||||||
|
|
||||||
type Params = {
|
type Params = {
|
||||||
req: Request;
|
req: Request;
|
||||||
};
|
};
|
||||||
@@ -29,7 +31,7 @@ export default async function ({ req }: Params): Promise<Response> {
|
|||||||
const match = global.BUNEXT_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.BUNEXT_BUNDLER_CTX_MAP?.[match.filePath]
|
? global.BUNEXT_BUNDLER_CTX_MAP?.[grabRelativePath(match.filePath)]
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
let controller: ReadableStreamDefaultController<string>;
|
let controller: ReadableStreamDefaultController<string>;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import isDevelopment from "../../utils/is-development";
|
|||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../utils/grab-dir-names";
|
import grabDirNames from "../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../utils/grab-relative-path";
|
||||||
|
|
||||||
const { ROOT_DIR } = grabDirNames();
|
const { ROOT_DIR } = grabDirNames();
|
||||||
|
|
||||||
@@ -52,10 +53,15 @@ 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.BUNEXT_SSR_BUNDLER_CTX_MAP?.[match.filePath]?.path) {
|
const relative_match_path = grabRelativePath(match.filePath);
|
||||||
|
|
||||||
|
if (
|
||||||
|
is_dev &&
|
||||||
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[relative_match_path]?.path
|
||||||
|
) {
|
||||||
const target_import = path.join(
|
const target_import = path.join(
|
||||||
ROOT_DIR,
|
ROOT_DIR,
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP[match.filePath].path,
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_match_path].path,
|
||||||
);
|
);
|
||||||
|
|
||||||
module = await import(`${target_import}?t=${now}`);
|
module = await import(`${target_import}?t=${now}`);
|
||||||
@@ -148,35 +154,3 @@ export default async function ({ req }: Params): Promise<Response> {
|
|||||||
|
|
||||||
return Response.json({ err: `Route handler error` });
|
return Response.json({ err: `Route handler error` });
|
||||||
}
|
}
|
||||||
|
|
||||||
// const relative_path = match.filePath.replace(API_DIR, "");
|
|
||||||
// const relative_module_js_file = relative_path.replace(/\.tsx?$/, ".js");
|
|
||||||
// const bun_module_file = path.join(
|
|
||||||
// BUNX_CWD_MODULE_CACHE_DIR,
|
|
||||||
// "api",
|
|
||||||
// relative_module_js_file,
|
|
||||||
// );
|
|
||||||
|
|
||||||
// if (existsSync(bun_module_file)) {
|
|
||||||
// module = await import(`${bun_module_file}?t=${now}`);
|
|
||||||
// } else {
|
|
||||||
// const import_path = is_dev
|
|
||||||
// ? `${match.filePath}?t=${now}`
|
|
||||||
// : match.filePath;
|
|
||||||
// module = await import(import_path);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (is_dev) {
|
|
||||||
// const tmp_path = `${match.filePath}.${now}${AppData["BunextTmpFileExt"]}`;
|
|
||||||
// cpSync(match.filePath, tmp_path);
|
|
||||||
// module = await import(`${tmp_path}?t=${now}`);
|
|
||||||
// try {
|
|
||||||
// unlinkSync(tmp_path);
|
|
||||||
// } catch (error) {}
|
|
||||||
// } else {
|
|
||||||
// // const import_path = is_dev ? `${match.filePath}?t=${now}` : match.filePath;
|
|
||||||
// module = await import(match.filePath);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const import_path = is_dev ? `${match.filePath}?t=${now}` : match.filePath;
|
|
||||||
// module = await import(import_path);
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import type { FC } from "react";
|
|||||||
import grabRootFilePath from "./grab-root-file-path";
|
import grabRootFilePath from "./grab-root-file-path";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
|
||||||
const { ROOT_DIR } = grabDirNames();
|
const { ROOT_DIR } = grabDirNames();
|
||||||
|
|
||||||
@@ -19,10 +20,12 @@ export default async function grabPageBundledReactComponent({
|
|||||||
return_tsx_only,
|
return_tsx_only,
|
||||||
}: Params): Promise<GrabPageReactBundledComponentRes | undefined> {
|
}: Params): Promise<GrabPageReactBundledComponentRes | undefined> {
|
||||||
try {
|
try {
|
||||||
if (global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[file_path]) {
|
const relative_path = grabRelativePath(file_path);
|
||||||
|
|
||||||
|
if (global.BUNEXT_SSR_BUNDLER_CTX_MAP?.[relative_path]) {
|
||||||
const abs = path.join(
|
const abs = path.join(
|
||||||
ROOT_DIR,
|
ROOT_DIR,
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP[file_path].path,
|
global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_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()}`);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import grabPageServerRes from "./grab-page-server-res";
|
|||||||
import grabPageServerPath from "./grab-page-server-path";
|
import grabPageServerPath from "./grab-page-server-path";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
|
||||||
const { ROOT_DIR } = grabDirNames();
|
const { ROOT_DIR } = grabDirNames();
|
||||||
|
|
||||||
@@ -34,8 +35,12 @@ export default async function grabPageCombinedServerRes({
|
|||||||
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.BUNEXT_SSR_BUNDLER_CTX_MAP[root_server_file_path || ""];
|
const root_server_ctx_map = root_server_file_path
|
||||||
|
? global.BUNEXT_SSR_BUNDLER_CTX_MAP[
|
||||||
|
grabRelativePath(root_server_file_path)
|
||||||
|
]
|
||||||
|
: undefined;
|
||||||
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,8 +68,9 @@ export default async function grabPageCombinedServerRes({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { server_file_path } = grabPageServerPath({ file_path });
|
const { server_file_path } = grabPageServerPath({ file_path });
|
||||||
const page_server_ctx =
|
const page_server_ctx = server_file_path
|
||||||
global.BUNEXT_SSR_BUNDLER_CTX_MAP[server_file_path || ""];
|
? global.BUNEXT_SSR_BUNDLER_CTX_MAP[grabRelativePath(server_file_path)]
|
||||||
|
: undefined;
|
||||||
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;
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import serverPostBuildFn from "../server-post-build-fn";
|
|||||||
import isDevelopment from "../../../utils/is-development";
|
import isDevelopment from "../../../utils/is-development";
|
||||||
import { existsSync } from "fs";
|
import { existsSync } from "fs";
|
||||||
import grabDirNames from "../../../utils/grab-dir-names";
|
import grabDirNames from "../../../utils/grab-dir-names";
|
||||||
import watcherEsbuildCTX from "../watcher-esbuild-ctx";
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
|
||||||
const { BUNX_BUNDLER_ERROR_EXIT_FILE } = grabDirNames();
|
const { BUNX_BUNDLER_ERROR_EXIT_FILE, ROOT_DIR } = grabDirNames();
|
||||||
|
|
||||||
class NotFoundError extends Error {
|
class NotFoundError extends Error {
|
||||||
status = 404;
|
status = 404;
|
||||||
@@ -90,7 +90,9 @@ export default async function grabPageComponent(
|
|||||||
throw new Error(errMsg);
|
throw new Error(errMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
let bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
|
const relative_file_path = grabRelativePath(file_path);
|
||||||
|
|
||||||
|
let bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[relative_file_path];
|
||||||
|
|
||||||
if (!bundledMap?.path) {
|
if (!bundledMap?.path) {
|
||||||
if (does_error_file_exist) {
|
if (does_error_file_exist) {
|
||||||
@@ -104,10 +106,10 @@ export default async function grabPageComponent(
|
|||||||
|
|
||||||
while (retries < MAX_RETRIES) {
|
while (retries < MAX_RETRIES) {
|
||||||
await fullRebuild({
|
await fullRebuild({
|
||||||
msg: `Retrying Bundle map for file \`${file_path}\``,
|
msg: `Retrying Bundle map for file \`${relative_file_path}\``,
|
||||||
});
|
});
|
||||||
await Bun.sleep(1000);
|
await Bun.sleep(1000);
|
||||||
bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[file_path];
|
bundledMap = global.BUNEXT_BUNDLER_CTX_MAP[relative_file_path];
|
||||||
if (bundledMap?.path) break;
|
if (bundledMap?.path) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +121,7 @@ export default async function grabPageComponent(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (req && !is_hydration) {
|
if (req && !is_hydration) {
|
||||||
global.BUNEXT_BUNDLER_CTX_MAP[file_path].req_url = req.url;
|
global.BUNEXT_BUNDLER_CTX_MAP[relative_file_path].req_url = req.url;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug) {
|
if (debug) {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import grabPageModules from "./grab-page-modules";
|
|||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import fullRebuild from "../full-rebuild";
|
import fullRebuild from "../full-rebuild";
|
||||||
import isDevelopment from "../../../utils/is-development";
|
import isDevelopment from "../../../utils/is-development";
|
||||||
|
import grabRelativePath from "../../../utils/grab-relative-path";
|
||||||
|
|
||||||
type Params = {
|
type Params = {
|
||||||
error?: any;
|
error?: any;
|
||||||
@@ -62,7 +63,8 @@ export default async function grabPageErrorComponent({
|
|||||||
|
|
||||||
const file_path = match.filePath;
|
const file_path = match.filePath;
|
||||||
|
|
||||||
const bundledMap = global.BUNEXT_BUNDLER_CTX_MAP?.[file_path];
|
const bundledMap =
|
||||||
|
global.BUNEXT_BUNDLER_CTX_MAP?.[grabRelativePath(file_path)];
|
||||||
|
|
||||||
const page_component = await grabPageModules({
|
const page_component = await grabPageModules({
|
||||||
file_path: file_path,
|
file_path: file_path,
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import grabDirNames from "./grab-dir-names";
|
||||||
|
|
||||||
|
const { ROOT_DIR } = grabDirNames();
|
||||||
|
|
||||||
|
export default function grabRelativePath(path: string): string {
|
||||||
|
const relative_path = path.replace(ROOT_DIR, "").replace(/^\//, "");
|
||||||
|
|
||||||
|
return relative_path;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user