@base44-preview/vite-plugin 1.0.39-pr.123.3a14a93 → 1.0.40-pr.124.62cc52a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -113,6 +113,16 @@ read `ok: true`. That window is already covered server-side by the existing
113
113
  `dev_server_error_classifier` (install / start failures surface as `409`). This
114
114
  endpoint's job is **post-load HMR / compile errors**, not cold-start failures.
115
115
 
116
+ ### Route request logs (full-stack apps)
117
+
118
+ Dev-only. While a Nitro server route serves a request that carries
119
+ `X-B44-Request-Id`, every `console.*` line it prints goes to stdout prefixed
120
+ `[b44-req <id> <level>] `, followed by one summary line per request
121
+ (`GET /api/orders handled in 12ms`, or `threw <Error> after 12ms`). Requests
122
+ without the header are untouched. It ships as a Nitro module (the `nitro`
123
+ property on `base44-route-request-log`) because Nitro runs dev routes in a
124
+ separate runtime whose `console` a Vite middleware never sees.
125
+
116
126
  ### Sandbox Injections
117
127
 
118
128
  In **dev mode**, individual `<script type="module" src="...">` tags are injected for each feature, loaded directly from `node_modules`. Under bundled dev mode the tags are injected with `order: "pre"` instead, so they become part of the HTML entry and are folded into the bundle (with `import.meta.hot` available). Their `src` is then a `virtual:base44-vite-plugin/...` id that the plugin resolves onto its own `dist/` directory, so the bundle does not depend on where npm placed the package.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AA0B/C,eAAO,MAAM,uBAAuB,UAWnC,CAAC;AAeF,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,iBA6OP"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AA2B/C,eAAO,MAAM,uBAAuB,UAWnC,CAAC;AAeF,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,iBAkPP"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import { filterPackagesInProject } from "./utils.js";
6
6
  import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
7
7
  import { buildStatusPlugin } from "./build-status-plugin.js";
8
8
  import { base44RuntimePlugin } from "./base44-runtime-plugin.js";
9
+ import { routeRequestLogPlugin } from "./route-request-log/vite-plugin.js";
9
10
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
10
11
  // Vite 8 pre-bundles deps with Rolldown instead of esbuild and deprecates
11
12
  // `optimizeDeps.esbuildOptions`. Both spellings mean the same thing here:
@@ -221,6 +222,11 @@ export default function vitePlugin(opts = {}) {
221
222
  // notices it. Ordering comes from its own `enforce: "pre"`, not from its
222
223
  // position here — several tests index this array from the front.
223
224
  base44RuntimePlugin(),
225
+ // Dev-only: tags a full-stack route's console output with the request's
226
+ // X-B44-Request-Id. Registered as a Nitro module (the `nitro` property)
227
+ // because Nitro runs dev routes in a worker whose console the Vite process
228
+ // never sees. Inert for apps without Nitro and for requests without the id.
229
+ routeRequestLogPlugin(),
224
230
  ];
225
231
  }
226
232
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ type RouteHandlerRegistration = {
2
+ route: string;
3
+ middleware?: boolean;
4
+ handler: string;
5
+ };
6
+ export type NitroDevServer = {
7
+ options: {
8
+ dev: boolean;
9
+ handlers: RouteHandlerRegistration[];
10
+ };
11
+ };
12
+ export declare function registerRouteRequestLogHandler(nitro: NitroDevServer): void;
13
+ export {};
14
+ //# sourceMappingURL=nitro-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nitro-module.d.ts","sourceRoot":"","sources":["../../src/route-request-log/nitro-module.ts"],"names":[],"mappings":"AAEA,KAAK,wBAAwB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACzF,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,wBAAwB,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAMjG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,cAAc,QAOnE"}
@@ -0,0 +1,12 @@
1
+ import { fileURLToPath } from "node:url";
2
+ const ROUTE_REQUEST_LOG_HANDLER = fileURLToPath(new URL("./route-request-log-handler.js", import.meta.url));
3
+ export function registerRouteRequestLogHandler(nitro) {
4
+ if (!nitro.options.dev)
5
+ return;
6
+ nitro.options.handlers.push({
7
+ route: "/**",
8
+ middleware: true,
9
+ handler: ROUTE_REQUEST_LOG_HANDLER,
10
+ });
11
+ }
12
+ //# sourceMappingURL=nitro-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nitro-module.js","sourceRoot":"","sources":["../../src/route-request-log/nitro-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,MAAM,yBAAyB,GAAG,aAAa,CAC7C,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3D,CAAC;AAEF,MAAM,UAAU,8BAA8B,CAAC,KAAqB;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;QAAE,OAAO;IAC/B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1B,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,yBAAyB;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: (event: {
2
+ req: Request;
3
+ }, next: () => unknown) => unknown;
4
+ export default _default;
5
+ //# sourceMappingURL=route-request-log-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-request-log-handler.d.ts","sourceRoot":"","sources":["../../src/route-request-log/route-request-log-handler.ts"],"names":[],"mappings":";;;AAEA,wBAAyC"}
@@ -0,0 +1,3 @@
1
+ import { tagRouteRequests } from "./route-request-tagger.js";
2
+ export default tagRouteRequests(console);
3
+ //# sourceMappingURL=route-request-log-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-request-log-handler.js","sourceRoot":"","sources":["../../src/route-request-log/route-request-log-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAe,gBAAgB,CAAC,OAAO,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const REQUEST_ID_HEADER = "x-b44-request-id";
2
+ declare const CONSOLE_PATCHED: unique symbol;
3
+ declare const TAGGED_CONSOLE_METHODS: readonly ["log", "info", "warn", "error", "debug"];
4
+ type TaggedConsoleMethod = (typeof TAGGED_CONSOLE_METHODS)[number];
5
+ type TaggableConsole = Pick<Console, TaggedConsoleMethod> & {
6
+ [CONSOLE_PATCHED]?: boolean;
7
+ };
8
+ type RouteEvent = {
9
+ req: Request;
10
+ };
11
+ type CallNextHandler = () => unknown;
12
+ export declare const requestLogPrefix: (requestId: string, level: TaggedConsoleMethod) => string;
13
+ export declare function tagRouteRequests(target: TaggableConsole): (event: RouteEvent, next: CallNextHandler) => unknown;
14
+ export {};
15
+ //# sourceMappingURL=route-request-tagger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-request-tagger.d.ts","sourceRoot":"","sources":["../../src/route-request-log/route-request-tagger.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AAEpD,QAAA,MAAM,eAAe,eAAsD,CAAC;AAC5E,QAAA,MAAM,sBAAsB,oDAAqD,CAAC;AAElF,KAAK,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AACnE,KAAK,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,GAAG;IAAE,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAC5F,KAAK,UAAU,GAAG;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AACnC,KAAK,eAAe,GAAG,MAAM,OAAO,CAAC;AAIrC,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,EAAE,OAAO,mBAAmB,WAC1C,CAAC;AA6CrC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,IAE9C,OAAO,UAAU,EAAE,MAAM,eAAe,aAKjD"}
@@ -0,0 +1,52 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { format } from "node:util";
3
+ export const REQUEST_ID_HEADER = "x-b44-request-id";
4
+ const CONSOLE_PATCHED = Symbol.for("base44.routeRequestLog.consolePatched");
5
+ const TAGGED_CONSOLE_METHODS = ["log", "info", "warn", "error", "debug"];
6
+ const currentRequestId = new AsyncLocalStorage();
7
+ export const requestLogPrefix = (requestId, level) => `[b44-req ${requestId} ${level}] `;
8
+ const prefixEveryLine = (text, prefix) => text
9
+ .split("\n")
10
+ .map((line) => prefix + line)
11
+ .join("\n");
12
+ function prefixWhileInsideRequest(level, originalMethod) {
13
+ return (...args) => {
14
+ const requestId = currentRequestId.getStore();
15
+ if (requestId === undefined)
16
+ return originalMethod(...args);
17
+ return originalMethod(prefixEveryLine(format(...args), requestLogPrefix(requestId, level)));
18
+ };
19
+ }
20
+ function tagConsoleWithRequestId(target) {
21
+ if (target[CONSOLE_PATCHED])
22
+ return;
23
+ for (const method of TAGGED_CONSOLE_METHODS) {
24
+ target[method] = prefixWhileInsideRequest(method, target[method].bind(target));
25
+ }
26
+ target[CONSOLE_PATCHED] = true;
27
+ }
28
+ const routeLabel = (req) => `${req.method} ${new URL(req.url).pathname}`;
29
+ const describeError = (error) => error instanceof Error ? `${error.name}: ${error.message}` : String(error);
30
+ async function runRouteAndSummarize(event, next, target) {
31
+ const startedAt = Date.now();
32
+ const elapsed = () => `${Date.now() - startedAt}ms`;
33
+ try {
34
+ const result = await next();
35
+ target.info(`${routeLabel(event.req)} handled in ${elapsed()}`);
36
+ return result;
37
+ }
38
+ catch (error) {
39
+ target.error(`${routeLabel(event.req)} threw ${describeError(error)} after ${elapsed()}`);
40
+ throw error;
41
+ }
42
+ }
43
+ export function tagRouteRequests(target) {
44
+ tagConsoleWithRequestId(target);
45
+ return (event, next) => {
46
+ const requestId = event.req.headers.get(REQUEST_ID_HEADER);
47
+ if (requestId === null)
48
+ return next();
49
+ return currentRequestId.run(requestId, () => runRouteAndSummarize(event, next, target));
50
+ };
51
+ }
52
+ //# sourceMappingURL=route-request-tagger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-request-tagger.js","sourceRoot":"","sources":["../../src/route-request-log/route-request-tagger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;AAC5E,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAOlF,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,KAA0B,EAAE,EAAE,CAChF,YAAY,SAAS,IAAI,KAAK,IAAI,CAAC;AAErC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CACvD,IAAI;KACD,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;KAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,SAAS,wBAAwB,CAC/B,KAA0B,EAC1B,cAA4C;IAE5C,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAuB;IACtD,IAAI,MAAM,CAAC,eAAe,CAAC;QAAE,OAAO;IACpC,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAElF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,EAAE,CACvC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE7E,KAAK,UAAU,oBAAoB,CAAC,KAAiB,EAAE,IAAqB,EAAE,MAAuB;IACnG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,EAAE,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,aAAa,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,KAAiB,EAAE,IAAqB,EAAE,EAAE;QAClD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,EAAE,CAAC;QACtC,OAAO,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1F,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Plugin } from "vite";
2
+ import { registerRouteRequestLogHandler } from "./nitro-module.js";
3
+ type PluginWithNitroModule = Plugin & {
4
+ nitro: typeof registerRouteRequestLogHandler;
5
+ };
6
+ export declare const routeRequestLogPlugin: () => PluginWithNitroModule;
7
+ export {};
8
+ //# sourceMappingURL=vite-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../../src/route-request-log/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAEnE,KAAK,qBAAqB,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,8BAA8B,CAAA;CAAE,CAAC;AAEvF,eAAO,MAAM,qBAAqB,QAAO,qBAGvC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { registerRouteRequestLogHandler } from "./nitro-module.js";
2
+ export const routeRequestLogPlugin = () => ({
3
+ name: "base44-route-request-log",
4
+ nitro: registerRouteRequestLogHandler,
5
+ });
6
+ //# sourceMappingURL=vite-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../../src/route-request-log/vite-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAInE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAA0B,EAAE,CAAC,CAAC;IACjE,IAAI,EAAE,0BAA0B;IAChC,KAAK,EAAE,8BAA8B;CACtC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/vite-plugin",
3
- "version": "1.0.39-pr.123.3a14a93",
3
+ "version": "1.0.40-pr.124.62cc52a",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/index.ts CHANGED
@@ -7,6 +7,7 @@ import { filterPackagesInProject } from "./utils.js";
7
7
  import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
8
8
  import { buildStatusPlugin } from "./build-status-plugin.js";
9
9
  import { base44RuntimePlugin } from "./base44-runtime-plugin.js";
10
+ import { routeRequestLogPlugin } from "./route-request-log/vite-plugin.js";
10
11
 
11
12
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
12
13
 
@@ -294,5 +295,10 @@ export default function vitePlugin(
294
295
  // notices it. Ordering comes from its own `enforce: "pre"`, not from its
295
296
  // position here — several tests index this array from the front.
296
297
  base44RuntimePlugin(),
298
+ // Dev-only: tags a full-stack route's console output with the request's
299
+ // X-B44-Request-Id. Registered as a Nitro module (the `nitro` property)
300
+ // because Nitro runs dev routes in a worker whose console the Vite process
301
+ // never sees. Inert for apps without Nitro and for requests without the id.
302
+ routeRequestLogPlugin(),
297
303
  ];
298
304
  }
@@ -0,0 +1,17 @@
1
+ import { fileURLToPath } from "node:url";
2
+
3
+ type RouteHandlerRegistration = { route: string; middleware?: boolean; handler: string };
4
+ export type NitroDevServer = { options: { dev: boolean; handlers: RouteHandlerRegistration[] } };
5
+
6
+ const ROUTE_REQUEST_LOG_HANDLER = fileURLToPath(
7
+ new URL("./route-request-log-handler.js", import.meta.url)
8
+ );
9
+
10
+ export function registerRouteRequestLogHandler(nitro: NitroDevServer) {
11
+ if (!nitro.options.dev) return;
12
+ nitro.options.handlers.push({
13
+ route: "/**",
14
+ middleware: true,
15
+ handler: ROUTE_REQUEST_LOG_HANDLER,
16
+ });
17
+ }
@@ -0,0 +1,3 @@
1
+ import { tagRouteRequests } from "./route-request-tagger.js";
2
+
3
+ export default tagRouteRequests(console);
@@ -0,0 +1,69 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { format } from "node:util";
3
+
4
+ export const REQUEST_ID_HEADER = "x-b44-request-id";
5
+
6
+ const CONSOLE_PATCHED = Symbol.for("base44.routeRequestLog.consolePatched");
7
+ const TAGGED_CONSOLE_METHODS = ["log", "info", "warn", "error", "debug"] as const;
8
+
9
+ type TaggedConsoleMethod = (typeof TAGGED_CONSOLE_METHODS)[number];
10
+ type TaggableConsole = Pick<Console, TaggedConsoleMethod> & { [CONSOLE_PATCHED]?: boolean };
11
+ type RouteEvent = { req: Request };
12
+ type CallNextHandler = () => unknown;
13
+
14
+ const currentRequestId = new AsyncLocalStorage<string>();
15
+
16
+ export const requestLogPrefix = (requestId: string, level: TaggedConsoleMethod) =>
17
+ `[b44-req ${requestId} ${level}] `;
18
+
19
+ const prefixEveryLine = (text: string, prefix: string) =>
20
+ text
21
+ .split("\n")
22
+ .map((line) => prefix + line)
23
+ .join("\n");
24
+
25
+ function prefixWhileInsideRequest(
26
+ level: TaggedConsoleMethod,
27
+ originalMethod: (...args: unknown[]) => void
28
+ ) {
29
+ return (...args: unknown[]) => {
30
+ const requestId = currentRequestId.getStore();
31
+ if (requestId === undefined) return originalMethod(...args);
32
+ return originalMethod(prefixEveryLine(format(...args), requestLogPrefix(requestId, level)));
33
+ };
34
+ }
35
+
36
+ function tagConsoleWithRequestId(target: TaggableConsole) {
37
+ if (target[CONSOLE_PATCHED]) return;
38
+ for (const method of TAGGED_CONSOLE_METHODS) {
39
+ target[method] = prefixWhileInsideRequest(method, target[method].bind(target));
40
+ }
41
+ target[CONSOLE_PATCHED] = true;
42
+ }
43
+
44
+ const routeLabel = (req: Request) => `${req.method} ${new URL(req.url).pathname}`;
45
+
46
+ const describeError = (error: unknown) =>
47
+ error instanceof Error ? `${error.name}: ${error.message}` : String(error);
48
+
49
+ async function runRouteAndSummarize(event: RouteEvent, next: CallNextHandler, target: TaggableConsole) {
50
+ const startedAt = Date.now();
51
+ const elapsed = () => `${Date.now() - startedAt}ms`;
52
+ try {
53
+ const result = await next();
54
+ target.info(`${routeLabel(event.req)} handled in ${elapsed()}`);
55
+ return result;
56
+ } catch (error) {
57
+ target.error(`${routeLabel(event.req)} threw ${describeError(error)} after ${elapsed()}`);
58
+ throw error;
59
+ }
60
+ }
61
+
62
+ export function tagRouteRequests(target: TaggableConsole) {
63
+ tagConsoleWithRequestId(target);
64
+ return (event: RouteEvent, next: CallNextHandler) => {
65
+ const requestId = event.req.headers.get(REQUEST_ID_HEADER);
66
+ if (requestId === null) return next();
67
+ return currentRequestId.run(requestId, () => runRouteAndSummarize(event, next, target));
68
+ };
69
+ }
@@ -0,0 +1,9 @@
1
+ import type { Plugin } from "vite";
2
+ import { registerRouteRequestLogHandler } from "./nitro-module.js";
3
+
4
+ type PluginWithNitroModule = Plugin & { nitro: typeof registerRouteRequestLogHandler };
5
+
6
+ export const routeRequestLogPlugin = (): PluginWithNitroModule => ({
7
+ name: "base44-route-request-log",
8
+ nitro: registerRouteRequestLogHandler,
9
+ });