@noego/forge 0.1.19 → 0.1.21

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.
@@ -5,12 +5,13 @@ import express from "express";
5
5
  import path__default from "path";
6
6
  import fs__default from "fs";
7
7
  import deepmerge from "deepmerge";
8
- import { p as parse_openapi_config, i as initialize_route_matchers, C as ComponentManager, V as ViteComponentLoader, P as ProdComponentLoader } from "./url_parser-CCrM2TRM.js";
8
+ import { g as getLogger, p as parse_openapi_config, i as initialize_route_matchers, C as ComponentManager, V as ViteComponentLoader, P as ProdComponentLoader } from "./url_parser-BY7Z0l_n.js";
9
9
  import Handlebars from "handlebars";
10
10
  import fs from "fs/promises";
11
11
  import { uneval } from "devalue";
12
12
  import { pathToFileURL } from "url";
13
13
  import { render } from "svelte/server";
14
+ const log$5 = getLogger("forge:render");
14
15
  const default_template = `
15
16
  <!DOCTYPE html>
16
17
  <html lang="en">
@@ -57,7 +58,7 @@ ${configScript}`);
57
58
  html = configScript + "\n" + html;
58
59
  }
59
60
  } catch (e) {
60
- console.error("Failed to parse NOEGO_CONFIGURATION:", e);
61
+ log$5.error("Failed to parse NOEGO_CONFIGURATION:", e);
61
62
  }
62
63
  }
63
64
  html = html.replace(
@@ -117,7 +118,7 @@ ${configScript}`);
117
118
  html = configScript + "\n" + html;
118
119
  }
119
120
  } catch (e) {
120
- console.error("Failed to parse NOEGO_CONFIGURATION:", e);
121
+ log$5.error("Failed to parse NOEGO_CONFIGURATION:", e);
121
122
  }
122
123
  }
123
124
  html = html.replace(
@@ -171,6 +172,7 @@ const defaultOptions = {
171
172
  manifest_endpoint: "/manifest.json",
172
173
  middleware_path: void 0
173
174
  };
175
+ const log$4 = getLogger("forge:manifest");
174
176
  class ManifestBuilder {
175
177
  constructor(openapi_path, loader, options) {
176
178
  __publicField(this, "full_options");
@@ -201,7 +203,7 @@ async function requires_server(route, loader) {
201
203
  const has_middleware = route.middleware && route.middleware.length > 0;
202
204
  const has_loaders = await layout_requires_server(route, loader) || await view_requires_server(route, loader);
203
205
  const requires_server2 = has_middleware || has_loaders;
204
- console.log("[MANIFEST]", route.path, {
206
+ log$4.debug(route.path, {
205
207
  has_middleware,
206
208
  middleware: route.middleware,
207
209
  has_loaders,
@@ -266,6 +268,7 @@ async function view_requires_server(route, loader) {
266
268
  return false;
267
269
  }
268
270
  }
271
+ const log$3 = getLogger("forge:routing");
269
272
  class ApiAdapter {
270
273
  constructor(manager) {
271
274
  this.manager = manager;
@@ -278,7 +281,7 @@ class ApiAdapter {
278
281
  let view_data = {};
279
282
  const validLayoutLoaders = layout_loaders.filter((loader2) => typeof loader2 === "function");
280
283
  if (validLayoutLoaders.length > 0) {
281
- console.log("Layout API Calls");
284
+ log$3.debug("Layout API Calls");
282
285
  layout_data = await Promise.all(validLayoutLoaders.map(async (layout_loader) => {
283
286
  const data = await layout_loader(request_data);
284
287
  return data;
@@ -301,7 +304,7 @@ class ApiAdapter {
301
304
  let view_data = {};
302
305
  const validLayoutLoaders = layout_loaders.filter((loader2) => typeof loader2 === "function");
303
306
  if (validLayoutLoaders.length > 0) {
304
- console.log("Layout API Calls");
307
+ log$3.debug("Layout API Calls");
305
308
  layout_data = await Promise.all(validLayoutLoaders.map(async (layout_loader) => {
306
309
  const data = await layout_loader(request_data);
307
310
  return data;
@@ -356,6 +359,7 @@ class ApiAdapter {
356
359
  };
357
360
  }
358
361
  }
362
+ const log$2 = getLogger("forge:routing");
359
363
  const EXTENSION_CANDIDATES = [".js", ".mjs", ".cjs", ".ts", ".tsx"];
360
364
  class MiddlewareAdapter {
361
365
  constructor(middlewarePath, fallbackPath) {
@@ -371,7 +375,7 @@ class MiddlewareAdapter {
371
375
  return;
372
376
  }
373
377
  const resolution = await this.resolveMiddlewareFunctions(middlewareConfig);
374
- console.log(resolution);
378
+ log$2.debug("Middleware resolution:", resolution);
375
379
  if (resolution.errors.length > 0) {
376
380
  throw new Error(`Middleware resolution failed: ${resolution.errors.join(", ")}`);
377
381
  }
@@ -540,6 +544,7 @@ class MiddlewareAdapter {
540
544
  }
541
545
  class ServerAdapter {
542
546
  }
547
+ const log$1 = getLogger("forge:routing");
543
548
  class ExpressServerAdapter extends ServerAdapter {
544
549
  constructor(server, manager, htmlRender, api_adapter, middleware_adapter, context_builder, isProd = false, isBuiltEnvironment = false, componentDir) {
545
550
  super();
@@ -584,7 +589,7 @@ class ExpressServerAdapter extends ServerAdapter {
584
589
  transformRoutesForClient(routes) {
585
590
  var _a, _b;
586
591
  if (!this.isProd) return routes;
587
- console.log(`[transformRoutesForClient] Transforming ${routes.length} routes for production`);
592
+ log$1.debug(`Transforming ${routes.length} routes for production`);
588
593
  const transformed = routes.map((route) => {
589
594
  var _a2, _b2;
590
595
  return {
@@ -593,7 +598,7 @@ class ExpressServerAdapter extends ServerAdapter {
593
598
  view: (_b2 = route.view) == null ? void 0 : _b2.replace(/\.svelte$/, ".js")
594
599
  };
595
600
  });
596
- console.log(`[transformRoutesForClient] First route view transformed: ${(_a = routes[0]) == null ? void 0 : _a.view} → ${(_b = transformed[0]) == null ? void 0 : _b.view}`);
601
+ log$1.debug(`First route view transformed: ${(_a = routes[0]) == null ? void 0 : _a.view} → ${(_b = transformed[0]) == null ? void 0 : _b.view}`);
597
602
  return transformed;
598
603
  }
599
604
  async handleRoutes(routes, manifest) {
@@ -666,7 +671,7 @@ class ExpressServerAdapter extends ServerAdapter {
666
671
  body: req.body,
667
672
  context
668
673
  };
669
- console.log("[SERVER] Handling request", req.url, {
674
+ log$1.debug("Handling request", req.url, {
670
675
  middleware: route.middleware,
671
676
  accept: req.headers.accept,
672
677
  route_path: route.path,
@@ -674,12 +679,12 @@ class ExpressServerAdapter extends ServerAdapter {
674
679
  });
675
680
  try {
676
681
  await this.middleware_adapter.handleMiddleware(req, res, route.middleware || []);
677
- console.log("[SERVER] Middleware complete", {
682
+ log$1.debug("Middleware complete", {
678
683
  headersSent: res.headersSent,
679
684
  statusCode: res.statusCode
680
685
  });
681
686
  } catch (e) {
682
- console.log("Error in middleware", e);
687
+ log$1.error("Error in middleware", e);
683
688
  res.status(500).send(`
684
689
  <h1>500 Internal Server Error</h1>
685
690
  <pre>${e}</pre>
@@ -689,7 +694,7 @@ ${e.stack}</pre>
689
694
  return;
690
695
  }
691
696
  if (res.headersSent) {
692
- console.log("[SERVER] Headers already sent by middleware, returning early");
697
+ log$1.debug("Headers already sent by middleware, returning early");
693
698
  return;
694
699
  }
695
700
  let server_data;
@@ -698,7 +703,7 @@ ${e.stack}</pre>
698
703
  } catch (e) {
699
704
  const errorMessage = (e == null ? void 0 : e.message) || String(e);
700
705
  const errorStack = (e == null ? void 0 : e.stack) || "";
701
- console.error(`[SERVER] Data loader error for route ${route.path} (${route.method}):`, {
706
+ log$1.error(`Data loader error for route ${route.path} (${route.method}):`, {
702
707
  error: errorMessage,
703
708
  route: route.path,
704
709
  method: route.method,
@@ -706,7 +711,7 @@ ${e.stack}</pre>
706
711
  view: route.view,
707
712
  layouts: route.layout
708
713
  });
709
- console.error("[SERVER] Data loader stack trace:", errorStack);
714
+ log$1.error("Data loader stack trace:", errorStack);
710
715
  if (server_api_call) {
711
716
  res.status(500).header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate").header("Pragma", "no-cache").header("Expires", "0").type("application/json").send({
712
717
  error: "Data loader failed",
@@ -737,7 +742,7 @@ ${errorStack}</pre>
737
742
  layouts = await this.manager.getLayouts(route);
738
743
  view = await this.manager.getView(route);
739
744
  } catch (e) {
740
- console.log("Error getting view", e);
745
+ log$1.error("Error getting view", e);
741
746
  res.status(500).send(`
742
747
  <h1>500 Internal Server Error</h1>
743
748
  <pre>${e}</pre>
@@ -756,11 +761,11 @@ ${e.stack}</pre>
756
761
  params: request_data.params || {},
757
762
  query: request_data.query
758
763
  };
759
- console.log("[SSR DEBUG] layouts:", layouts.map((l) => typeof l), "view:", typeof view);
764
+ log$1.debug("layouts:", layouts.map((l) => typeof l), "view:", typeof view);
760
765
  const loader = ((_b = this.manager) == null ? void 0 : _b["componentLoader"]) || {};
761
766
  const componentRoot = loader["base_path"] || loader["basePath"] || "";
762
767
  const applicationRenderer = await this.loadApplicationRenderer(componentRoot);
763
- console.log("[SSR DEBUG] applicationRenderer:", typeof applicationRenderer);
768
+ log$1.debug("applicationRenderer:", typeof applicationRenderer);
764
769
  const { head: head_render, html: renderedHtml, css } = render(applicationRenderer, {
765
770
  props: {
766
771
  layouts,
@@ -773,7 +778,7 @@ ${e.stack}</pre>
773
778
  }
774
779
  });
775
780
  const body_render = renderedHtml;
776
- console.log("[SSR DEBUG] render result - body length:", (body_render == null ? void 0 : body_render.length) || 0);
781
+ log$1.debug("render result - body length:", (body_render == null ? void 0 : body_render.length) || 0);
777
782
  const deriveClientBase = (dir) => {
778
783
  try {
779
784
  const norm = String(dir || "").replace(/\\/g, "/");
@@ -802,7 +807,6 @@ ${e.stack}</pre>
802
807
 
803
808
  <script type='text/javascript'>
804
809
  window.__MANIFEST__ = ${uneval(manifest)}
805
- console.log('[MANIFEST INJECTED]', window.__MANIFEST__);
806
810
  <\/script>
807
811
 
808
812
  <script type='text/javascript'>
@@ -813,13 +817,13 @@ ${e.stack}</pre>
813
817
  window.__COMPONENT_DIR__ = ${uneval(clientComponentDir)}
814
818
  <\/script>
815
819
  `;
816
- console.log("[SSR DEBUG] About to render HTML with APP length:", (body_render == null ? void 0 : body_render.length) || 0);
820
+ log$1.debug("About to render HTML with APP length:", (body_render == null ? void 0 : body_render.length) || 0);
817
821
  html_render = await this.htmlRender.renderHTML({
818
822
  HEAD: devClientScript + head_routing + (head_render || ""),
819
823
  CSS: css,
820
824
  APP: body_render
821
825
  });
822
- console.log("[SSR DEBUG] Final HTML length:", (html_render == null ? void 0 : html_render.length) || 0, "contains APP div:", html_render == null ? void 0 : html_render.includes('<div id="app">'));
826
+ log$1.debug("Final HTML length:", (html_render == null ? void 0 : html_render.length) || 0, "contains APP div:", html_render == null ? void 0 : html_render.includes('<div id="app">'));
823
827
  } catch (e) {
824
828
  response_code = 500;
825
829
  const new_body = `<pre>Error rendering HTML:
@@ -838,7 +842,7 @@ view: ${route.view}</pre>`;
838
842
  async handleFallback(req, res, server_config) {
839
843
  var _a, _b;
840
844
  if (res.headersSent) {
841
- console.log("Reply already sent");
845
+ log$1.debug("Reply already sent");
842
846
  return;
843
847
  }
844
848
  let route = server_config.fallback;
@@ -858,27 +862,27 @@ view: ${route.view}</pre>`;
858
862
  try {
859
863
  await this.middleware_adapter.handleMiddleware(req, res, route.middleware || []);
860
864
  } catch (e) {
861
- console.log("Error in fallback middleware", e);
865
+ log$1.error("Error in fallback middleware", e);
862
866
  res.status(500).send(`
863
867
  <h1>500 Internal Server Error</h1>
864
868
  <pre>${e}</pre>
865
869
  `);
866
870
  return;
867
871
  }
868
- console.log("Completed fallback middleware");
872
+ log$1.debug("Completed fallback middleware");
869
873
  let server_data;
870
874
  try {
871
875
  server_data = await this.api_adapter.getApiData(route, request_data);
872
876
  } catch (e) {
873
877
  const errorMessage = (e == null ? void 0 : e.message) || String(e);
874
878
  const errorStack = (e == null ? void 0 : e.stack) || "";
875
- console.error(`[SERVER] Fallback data loader error:`, {
879
+ log$1.error(`Fallback data loader error:`, {
876
880
  error: errorMessage,
877
881
  url,
878
882
  view: route.view,
879
883
  layouts: route.layout
880
884
  });
881
- console.error("[SERVER] Fallback data loader stack trace:", errorStack);
885
+ log$1.error("Fallback data loader stack trace:", errorStack);
882
886
  if (server_api_call) {
883
887
  res.status(500).header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate").header("Pragma", "no-cache").header("Expires", "0").type("application/json").send({
884
888
  error: "Fallback data loader failed",
@@ -897,16 +901,16 @@ ${errorStack}</pre>
897
901
  `);
898
902
  return;
899
903
  }
900
- console.log("Completed fallback API call");
904
+ log$1.debug("Completed fallback API call");
901
905
  if (server_api_call) {
902
- console.log("Fallback API call");
906
+ log$1.debug("Fallback API call");
903
907
  res.header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate").header("Pragma", "no-cache").header("Expires", "0").type("application/json").status(404).send(server_data);
904
908
  return;
905
909
  }
906
910
  const layouts = await this.manager.getLayouts(route);
907
911
  const view = await this.manager.getView(route);
908
- console.log("Fallback view", view);
909
- console.log("Fallback layouts", layouts);
912
+ log$1.debug("Fallback view", view);
913
+ log$1.debug("Fallback layouts", layouts);
910
914
  const loader = ((_b = this.manager) == null ? void 0 : _b["componentLoader"]) || {};
911
915
  const componentRoot = loader["base_path"] || loader["basePath"] || "";
912
916
  const applicationRenderer = await this.loadApplicationRenderer(componentRoot);
@@ -928,6 +932,7 @@ ${errorStack}</pre>
928
932
  res.type("text/html").status(404).send(html_render);
929
933
  }
930
934
  }
935
+ const log = getLogger("forge");
931
936
  function pathExistsSync(p) {
932
937
  try {
933
938
  return fs__default.existsSync(p);
@@ -961,10 +966,10 @@ async function createServer(app, options) {
961
966
  const COMPONENT_DIR = !full_options.component_dir ? root : path__default.join(root, full_options.component_dir);
962
967
  const isBuiltEnvironment = process.env.FORGE_BUILT === "true";
963
968
  const isProd = isBuiltEnvironment || full_options.development === false;
964
- console.log(`Running in ${isProd ? "production" : "development"} mode (built environment: ${isBuiltEnvironment}, development flag: ${full_options.development}, NODE_ENV: ${process.env.NODE_ENV})`);
969
+ log.info(`Running in ${isProd ? "production" : "development"} mode (built environment: ${isBuiltEnvironment}, development flag: ${full_options.development}, NODE_ENV: ${process.env.NODE_ENV})`);
965
970
  let componentLoader;
966
971
  let vite;
967
- console.log(`Serving components from ${COMPONENT_DIR}`);
972
+ log.info(`Serving components from ${COMPONENT_DIR}`);
968
973
  const resolveAssetRoot = (entry) => {
969
974
  if (typeof entry === "function") {
970
975
  return entry;
@@ -979,37 +984,37 @@ async function createServer(app, options) {
979
984
  const asset_root = resolveAssetRoot(asset);
980
985
  if (typeof asset_root === "string") {
981
986
  app.use(asset_path, express.static(asset_root));
982
- console.log(`Serving assets from ${asset_root} at ${asset_path}`);
987
+ log.debug(`Serving assets from ${asset_root} at ${asset_path}`);
983
988
  } else if (typeof asset_root === "function") {
984
989
  app.use(asset_path, asset_root);
985
- console.log(`Serving assets from function at ${asset_path}`);
990
+ log.debug(`Serving assets from function at ${asset_path}`);
986
991
  } else {
987
- console.warn(`Invalid asset root type: ${typeof asset_root}`);
992
+ log.warn(`Invalid asset root type: ${typeof asset_root}`);
988
993
  }
989
994
  }
990
995
  }
991
996
  } else {
992
- console.log(`No assets to serve`);
997
+ log.debug(`No assets to serve`);
993
998
  }
994
999
  if (!isProd) {
995
- console.log("Starting Vite in development mode...");
1000
+ log.info("Starting Vite in development mode...");
996
1001
  const { createServer: createViteServer } = await import("vite");
997
1002
  vite = await createViteServer(options.viteOptions || full_options.viteOptions);
998
- console.log(`Vite server created options
1003
+ log.debug(`Vite server created options
999
1004
  ${JSON.stringify(options, null, 2)}`);
1000
1005
  componentLoader = new ViteComponentLoader(COMPONENT_DIR, vite);
1001
1006
  } else {
1002
- console.log("Starting Vite in production mode...");
1007
+ log.info("Starting Vite in production mode...");
1003
1008
  const staticDir = path__default.join(full_options.viteOptions.root, full_options.build_dir);
1004
1009
  if (pathExistsSync(staticDir)) {
1005
1010
  app.use("/", express.static(staticDir));
1006
- console.log(`Serving static files from ${staticDir} at /`);
1011
+ log.info(`Serving static files from ${staticDir} at /`);
1007
1012
  } else {
1008
- console.log(`Skipping static file serving (build_dir ${staticDir} not found - using asset configuration)`);
1013
+ log.debug(`Skipping static file serving (build_dir ${staticDir} not found - using asset configuration)`);
1009
1014
  }
1010
1015
  const componentPath = `/${full_options.component_dir}`;
1011
1016
  app.use(componentPath, express.static(COMPONENT_DIR));
1012
- console.log(`Serving components at ${componentPath} from ${COMPONENT_DIR}`);
1017
+ log.info(`Serving components at ${componentPath} from ${COMPONENT_DIR}`);
1013
1018
  componentLoader = new ProdComponentLoader(COMPONENT_DIR);
1014
1019
  }
1015
1020
  const manifest = await new ManifestBuilder(
@@ -1039,7 +1044,7 @@ ${JSON.stringify(options, null, 2)}`);
1039
1044
  full_options.component_dir
1040
1045
  );
1041
1046
  await adapter.handleRoutes(routeDefs, manifest);
1042
- console.log("Routes registered");
1047
+ log.info("Routes registered");
1043
1048
  if (!isProd) {
1044
1049
  app.use(vite.middlewares);
1045
1050
  }
@@ -1062,10 +1067,10 @@ function getRenderer(root, renderer, isProd) {
1062
1067
  }
1063
1068
  function ensureFullPath(root, renderer) {
1064
1069
  if (path__default.isAbsolute(renderer)) {
1065
- console.log(`Renderer path is absolute: ${renderer}`);
1070
+ log.debug(`Renderer path is absolute: ${renderer}`);
1066
1071
  return urlJoin(root, renderer);
1067
1072
  } else {
1068
- console.log(`Renderer path is relative: ${renderer}`);
1073
+ log.debug(`Renderer path is relative: ${renderer}`);
1069
1074
  return path__default.resolve(root, renderer);
1070
1075
  }
1071
1076
  }