@lolyjs/core 0.2.0-alpha.19 → 0.2.0-alpha.20

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/dist/index.cjs CHANGED
@@ -10130,7 +10130,30 @@ function loadLayoutServerHook(layoutFile) {
10130
10130
  try {
10131
10131
  const mod = require(file);
10132
10132
  const serverHook = typeof mod?.getServerSideProps === "function" ? mod.getServerSideProps : null;
10133
- return serverHook;
10133
+ let middlewares = [];
10134
+ const rawMiddlewares = mod?.[NAMING.BEFORE_MIDDLEWARES];
10135
+ if (rawMiddlewares !== void 0) {
10136
+ if (!Array.isArray(rawMiddlewares)) {
10137
+ console.warn(
10138
+ `[framework][server-hook] ${NAMING.BEFORE_MIDDLEWARES} must be an array in ${file}, ignoring invalid value`
10139
+ );
10140
+ } else {
10141
+ for (let i = 0; i < rawMiddlewares.length; i++) {
10142
+ const mw = rawMiddlewares[i];
10143
+ if (typeof mw !== "function") {
10144
+ console.warn(
10145
+ `[framework][server-hook] Middleware at index ${i} in ${NAMING.BEFORE_MIDDLEWARES} is not a function in ${file}, skipping`
10146
+ );
10147
+ continue;
10148
+ }
10149
+ middlewares.push(mw);
10150
+ }
10151
+ }
10152
+ }
10153
+ return {
10154
+ serverHook,
10155
+ middlewares
10156
+ };
10134
10157
  } catch (error) {
10135
10158
  console.error(
10136
10159
  `[framework][server-hook] Error loading layout server hook from ${file}:`,
@@ -10215,9 +10238,16 @@ function loadRoutes(appDir) {
10215
10238
  appDir
10216
10239
  );
10217
10240
  const layoutServerHooks = [];
10241
+ const layoutMiddlewares = [];
10218
10242
  for (const layoutFile of layoutFiles) {
10219
- const layoutServerHook = loadLayoutServerHook(layoutFile);
10220
- layoutServerHooks.push(layoutServerHook);
10243
+ const layoutHookData = loadLayoutServerHook(layoutFile);
10244
+ if (layoutHookData) {
10245
+ layoutServerHooks.push(layoutHookData.serverHook);
10246
+ layoutMiddlewares.push(layoutHookData.middlewares);
10247
+ } else {
10248
+ layoutServerHooks.push(null);
10249
+ layoutMiddlewares.push([]);
10250
+ }
10221
10251
  }
10222
10252
  const { middlewares, serverHook, dynamic, generateStaticParams } = loadServerHookForDir(currentDir);
10223
10253
  routes.push({
@@ -10233,6 +10263,8 @@ function loadRoutes(appDir) {
10233
10263
  // Keep 'loader' field name for backward compatibility
10234
10264
  layoutServerHooks,
10235
10265
  // Server hooks for each layout (same order as layouts)
10266
+ layoutMiddlewares,
10267
+ // Middlewares for each layout (same order as layouts)
10236
10268
  dynamic,
10237
10269
  generateStaticParams
10238
10270
  });
@@ -10796,9 +10828,16 @@ function loadRoutesFromManifest(projectRoot) {
10796
10828
  );
10797
10829
  const pageDir = import_path10.default.dirname(pageFile);
10798
10830
  const layoutServerHooks = [];
10831
+ const layoutMiddlewares = [];
10799
10832
  for (const layoutFile of layoutFiles) {
10800
- const layoutServerHook = loadLayoutServerHook(layoutFile);
10801
- layoutServerHooks.push(layoutServerHook);
10833
+ const layoutHookData = loadLayoutServerHook(layoutFile);
10834
+ if (layoutHookData) {
10835
+ layoutServerHooks.push(layoutHookData.serverHook);
10836
+ layoutMiddlewares.push(layoutHookData.middlewares);
10837
+ } else {
10838
+ layoutServerHooks.push(null);
10839
+ layoutMiddlewares.push([]);
10840
+ }
10802
10841
  }
10803
10842
  const { middlewares, serverHook, dynamic, generateStaticParams } = loadServerHookForDir(pageDir);
10804
10843
  pageRoutes.push({
@@ -10814,6 +10853,8 @@ function loadRoutesFromManifest(projectRoot) {
10814
10853
  // Keep 'loader' field name for backward compatibility
10815
10854
  layoutServerHooks,
10816
10855
  // Server hooks for each layout (same order as layouts)
10856
+ layoutMiddlewares,
10857
+ // Middlewares for each layout (same order as layouts)
10817
10858
  dynamic: entry.dynamic ?? dynamic,
10818
10859
  generateStaticParams
10819
10860
  });
@@ -11342,9 +11383,16 @@ function loadNotFoundRouteFromFilesystem(appDir) {
11342
11383
  appDir
11343
11384
  );
11344
11385
  const layoutServerHooks = [];
11386
+ const layoutMiddlewares = [];
11345
11387
  for (const layoutFile of layoutFiles) {
11346
- const layoutServerHook = loadLayoutServerHook(layoutFile);
11347
- layoutServerHooks.push(layoutServerHook);
11388
+ const layoutHookData = loadLayoutServerHook(layoutFile);
11389
+ if (layoutHookData) {
11390
+ layoutServerHooks.push(layoutHookData.serverHook);
11391
+ layoutMiddlewares.push(layoutHookData.middlewares);
11392
+ } else {
11393
+ layoutServerHooks.push(null);
11394
+ layoutMiddlewares.push([]);
11395
+ }
11348
11396
  }
11349
11397
  const { middlewares, serverHook, dynamic, generateStaticParams } = loadServerHookForDir(notFoundDir);
11350
11398
  return {
@@ -11360,6 +11408,8 @@ function loadNotFoundRouteFromFilesystem(appDir) {
11360
11408
  // Keep 'loader' field name for backward compatibility
11361
11409
  layoutServerHooks,
11362
11410
  // Server hooks for each layout (same order as layouts)
11411
+ layoutMiddlewares,
11412
+ // Middlewares for each layout (same order as layouts)
11363
11413
  dynamic,
11364
11414
  generateStaticParams
11365
11415
  };
@@ -11391,9 +11441,16 @@ function loadErrorRouteFromFilesystem(appDir) {
11391
11441
  appDir
11392
11442
  );
11393
11443
  const layoutServerHooks = [];
11444
+ const layoutMiddlewares = [];
11394
11445
  for (const layoutFile of layoutFiles) {
11395
- const layoutServerHook = loadLayoutServerHook(layoutFile);
11396
- layoutServerHooks.push(layoutServerHook);
11446
+ const layoutHookData = loadLayoutServerHook(layoutFile);
11447
+ if (layoutHookData) {
11448
+ layoutServerHooks.push(layoutHookData.serverHook);
11449
+ layoutMiddlewares.push(layoutHookData.middlewares);
11450
+ } else {
11451
+ layoutServerHooks.push(null);
11452
+ layoutMiddlewares.push([]);
11453
+ }
11397
11454
  }
11398
11455
  const { middlewares, serverHook, dynamic, generateStaticParams } = loadServerHookForDir(appDir);
11399
11456
  return {
@@ -11409,6 +11466,8 @@ function loadErrorRouteFromFilesystem(appDir) {
11409
11466
  // Keep 'loader' field name for backward compatibility
11410
11467
  layoutServerHooks,
11411
11468
  // Server hooks for each layout (same order as layouts)
11469
+ layoutMiddlewares,
11470
+ // Middlewares for each layout (same order as layouts)
11412
11471
  dynamic,
11413
11472
  generateStaticParams
11414
11473
  };
@@ -15230,6 +15289,29 @@ async function handlePageRequestInternal(options) {
15230
15289
  if (!skipLayoutHooks && notFoundPage.layoutServerHooks && notFoundPage.layoutServerHooks.length > 0) {
15231
15290
  for (let i = 0; i < notFoundPage.layoutServerHooks.length; i++) {
15232
15291
  const layoutServerHook = notFoundPage.layoutServerHooks[i];
15292
+ const layoutMiddlewares = notFoundPage.layoutMiddlewares?.[i] || [];
15293
+ if (layoutMiddlewares.length > 0) {
15294
+ for (const mw of layoutMiddlewares) {
15295
+ try {
15296
+ await Promise.resolve(
15297
+ mw(ctx2, async () => {
15298
+ })
15299
+ );
15300
+ } catch (error) {
15301
+ const reqLogger2 = getRequestLogger(req);
15302
+ const layoutFile = notFoundPage.layoutFiles[i];
15303
+ const relativeLayoutPath = layoutFile ? import_path23.default.relative(projectRoot || process.cwd(), layoutFile) : "unknown";
15304
+ reqLogger2.error("Layout middleware failed for not-found page", error instanceof Error ? error : new Error(String(error)), {
15305
+ layoutIndex: i,
15306
+ layoutFile: relativeLayoutPath
15307
+ });
15308
+ throw error;
15309
+ }
15310
+ if (ctx2.res.headersSent) {
15311
+ return;
15312
+ }
15313
+ }
15314
+ }
15233
15315
  if (layoutServerHook) {
15234
15316
  try {
15235
15317
  const layoutResult = await layoutServerHook(ctx2);
@@ -15347,6 +15429,29 @@ async function handlePageRequestInternal(options) {
15347
15429
  if (!skipLayoutHooks && route.layoutServerHooks && route.layoutServerHooks.length > 0) {
15348
15430
  for (let i = 0; i < route.layoutServerHooks.length; i++) {
15349
15431
  const layoutServerHook = route.layoutServerHooks[i];
15432
+ const layoutMiddlewares = route.layoutMiddlewares?.[i] || [];
15433
+ if (layoutMiddlewares.length > 0) {
15434
+ for (const mw of layoutMiddlewares) {
15435
+ try {
15436
+ await Promise.resolve(
15437
+ mw(ctx, async () => {
15438
+ })
15439
+ );
15440
+ } catch (error) {
15441
+ const layoutFile = route.layoutFiles[i];
15442
+ const relativeLayoutPath = layoutFile ? import_path23.default.relative(projectRoot || process.cwd(), layoutFile) : "unknown";
15443
+ reqLogger.error("Layout middleware failed", error instanceof Error ? error : new Error(String(error)), {
15444
+ route: route.pattern,
15445
+ layoutIndex: i,
15446
+ layoutFile: relativeLayoutPath
15447
+ });
15448
+ throw error;
15449
+ }
15450
+ if (ctx.res.headersSent) {
15451
+ return;
15452
+ }
15453
+ }
15454
+ }
15350
15455
  if (layoutServerHook) {
15351
15456
  try {
15352
15457
  const layoutResult = await layoutServerHook(ctx);
@@ -15542,6 +15647,28 @@ async function renderErrorPageWithStream(errorPage, req, res, error, routeChunks
15542
15647
  if (!skipLayoutHooks && errorPage.layoutServerHooks && errorPage.layoutServerHooks.length > 0) {
15543
15648
  for (let i = 0; i < errorPage.layoutServerHooks.length; i++) {
15544
15649
  const layoutServerHook = errorPage.layoutServerHooks[i];
15650
+ const layoutMiddlewares = errorPage.layoutMiddlewares?.[i] || [];
15651
+ if (layoutMiddlewares.length > 0) {
15652
+ for (const mw of layoutMiddlewares) {
15653
+ try {
15654
+ await Promise.resolve(
15655
+ mw(ctx, async () => {
15656
+ })
15657
+ );
15658
+ } catch (error2) {
15659
+ const layoutFile = errorPage.layoutFiles[i];
15660
+ const relativeLayoutPath = layoutFile ? import_path23.default.relative(projectRoot || process.cwd(), layoutFile) : "unknown";
15661
+ reqLogger.error("Layout middleware failed for error page", error2 instanceof Error ? error2 : new Error(String(error2)), {
15662
+ layoutIndex: i,
15663
+ layoutFile: relativeLayoutPath
15664
+ });
15665
+ throw error2;
15666
+ }
15667
+ if (ctx.res.headersSent) {
15668
+ return;
15669
+ }
15670
+ }
15671
+ }
15545
15672
  if (layoutServerHook) {
15546
15673
  try {
15547
15674
  const layoutResult = await layoutServerHook(ctx);