@lolyjs/core 0.3.0-alpha.1 → 0.3.0-alpha.3

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.mjs CHANGED
@@ -9991,11 +9991,18 @@ var getServerFile = async (projectRoot, fileName) => {
9991
9991
  // modules/server/init.ts
9992
9992
  var INIT_FILE_NAME = "init.server";
9993
9993
  async function runInitIfExists(projectRoot, serverData) {
9994
- let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
9995
- if (typeof mod?.init === "function") {
9996
- const serverContext = { ...serverData };
9997
- await mod.init({ serverContext });
9998
- return serverContext;
9994
+ try {
9995
+ let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
9996
+ if (!mod) {
9997
+ return {};
9998
+ }
9999
+ if (typeof mod?.init === "function") {
10000
+ const serverContext = { ...serverData };
10001
+ await mod.init({ serverContext });
10002
+ return serverContext;
10003
+ }
10004
+ } catch (error) {
10005
+ console.error(`[Init] Failed to load or execute ${INIT_FILE_NAME}.ts:`, error);
9999
10006
  }
10000
10007
  return {};
10001
10008
  }
@@ -10114,7 +10121,7 @@ var NAMING = {
10114
10121
  // Files
10115
10122
  SERVER_HOOK: "server.hook"
10116
10123
  };
10117
- async function loadServerHookForDir(currentDir) {
10124
+ async function loadServerHookForDir(currentDir, projectRoot) {
10118
10125
  const isDev = process.env.NODE_ENV === "development";
10119
10126
  const isBuild = process.env.LOLY_BUILD === "1";
10120
10127
  let file = null;
@@ -10140,10 +10147,24 @@ async function loadServerHookForDir(currentDir) {
10140
10147
  generateStaticParams: null
10141
10148
  };
10142
10149
  }
10150
+ let resolvedProjectRoot = projectRoot;
10151
+ if (!resolvedProjectRoot) {
10152
+ let current = path4.resolve(currentDir);
10153
+ while (current !== path4.dirname(current)) {
10154
+ if (fs4.existsSync(path4.join(current, "package.json"))) {
10155
+ resolvedProjectRoot = current;
10156
+ break;
10157
+ }
10158
+ current = path4.dirname(current);
10159
+ }
10160
+ if (!resolvedProjectRoot) {
10161
+ resolvedProjectRoot = currentDir;
10162
+ }
10163
+ }
10143
10164
  let mod;
10144
10165
  try {
10145
10166
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10146
- mod = await loadModule2(file, { projectRoot: currentDir });
10167
+ mod = await loadModule2(file, { projectRoot: resolvedProjectRoot });
10147
10168
  } catch (error) {
10148
10169
  console.error(
10149
10170
  `[framework][server-hook] Error loading server hook from ${file}:`,
@@ -10186,7 +10207,7 @@ async function loadServerHookForDir(currentDir) {
10186
10207
  generateStaticParams
10187
10208
  };
10188
10209
  }
10189
- async function loadLayoutServerHook(layoutFile) {
10210
+ async function loadLayoutServerHook(layoutFile, projectRoot) {
10190
10211
  const layoutDir = path4.dirname(layoutFile);
10191
10212
  const layoutExt = path4.extname(layoutFile);
10192
10213
  const layoutBasename = path4.basename(layoutFile, layoutExt);
@@ -10212,7 +10233,20 @@ async function loadLayoutServerHook(layoutFile) {
10212
10233
  }
10213
10234
  try {
10214
10235
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10215
- const mod = await loadModule2(file, { projectRoot: path4.dirname(file) });
10236
+ if (!projectRoot) {
10237
+ let current = path4.dirname(layoutFile);
10238
+ while (current !== path4.dirname(current)) {
10239
+ if (fs4.existsSync(path4.join(current, "package.json"))) {
10240
+ projectRoot = current;
10241
+ break;
10242
+ }
10243
+ current = path4.dirname(current);
10244
+ }
10245
+ if (!projectRoot) {
10246
+ projectRoot = path4.dirname(layoutFile);
10247
+ }
10248
+ }
10249
+ const mod = await loadModule2(file, { projectRoot });
10216
10250
  const serverHook = typeof mod?.getServerSideProps === "function" ? mod.getServerSideProps : null;
10217
10251
  let middlewares = [];
10218
10252
  const rawMiddlewares = mod?.[NAMING.BEFORE_MIDDLEWARES];
@@ -10300,6 +10334,15 @@ async function loadRoutes(appDir) {
10300
10334
  if (!fs5.existsSync(appDir)) {
10301
10335
  return [];
10302
10336
  }
10337
+ let projectRoot = appDir;
10338
+ let current = path5.resolve(appDir);
10339
+ while (current !== path5.dirname(current)) {
10340
+ if (fs5.existsSync(path5.join(current, "package.json"))) {
10341
+ projectRoot = current;
10342
+ break;
10343
+ }
10344
+ current = path5.dirname(current);
10345
+ }
10303
10346
  const routes = [];
10304
10347
  async function walk(currentDir) {
10305
10348
  const entries = fs5.readdirSync(currentDir, { withFileTypes: true });
@@ -10318,7 +10361,7 @@ async function loadRoutes(appDir) {
10318
10361
  const { regex, paramNames } = buildRegexFromRoutePath(routePath);
10319
10362
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10320
10363
  const component = await loadDefaultExport2(fullPath, {
10321
- projectRoot: appDir
10364
+ projectRoot
10322
10365
  });
10323
10366
  if (!component) {
10324
10367
  continue;
@@ -10330,7 +10373,7 @@ async function loadRoutes(appDir) {
10330
10373
  const layoutServerHooks = [];
10331
10374
  const layoutMiddlewares = [];
10332
10375
  for (const layoutFile of layoutFiles) {
10333
- const layoutHookData = await loadLayoutServerHook(layoutFile);
10376
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10334
10377
  if (layoutHookData) {
10335
10378
  layoutServerHooks.push(layoutHookData.serverHook);
10336
10379
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10339,7 +10382,7 @@ async function loadRoutes(appDir) {
10339
10382
  layoutMiddlewares.push([]);
10340
10383
  }
10341
10384
  }
10342
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir);
10385
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir, projectRoot);
10343
10386
  routes.push({
10344
10387
  pattern: routePath,
10345
10388
  regex,
@@ -10935,7 +10978,7 @@ async function loadRoutesFromManifest(projectRoot) {
10935
10978
  const layoutServerHooks = [];
10936
10979
  const layoutMiddlewares = [];
10937
10980
  for (const layoutFile of layoutFiles) {
10938
- const layoutHookData = await loadLayoutServerHook(layoutFile);
10981
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10939
10982
  if (layoutHookData) {
10940
10983
  layoutServerHooks.push(layoutHookData.serverHook);
10941
10984
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10944,7 +10987,7 @@ async function loadRoutesFromManifest(projectRoot) {
10944
10987
  layoutMiddlewares.push([]);
10945
10988
  }
10946
10989
  }
10947
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir);
10990
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir, projectRoot);
10948
10991
  pageRoutes.push({
10949
10992
  pattern: entry.pattern,
10950
10993
  regex,
@@ -11362,7 +11405,7 @@ var FilesystemRouteLoader = class {
11362
11405
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.notFoundRoute === void 0) {
11363
11406
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11364
11407
  const fileStats = buildFileStats(files);
11365
- this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir);
11408
+ this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir, this.projectRoot);
11366
11409
  this.cache.fileStats = fileStats;
11367
11410
  this.cache.timestamp = Date.now();
11368
11411
  }
@@ -11379,7 +11422,7 @@ var FilesystemRouteLoader = class {
11379
11422
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.errorRoute === void 0) {
11380
11423
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11381
11424
  const fileStats = buildFileStats(files);
11382
- this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir);
11425
+ this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir, this.projectRoot);
11383
11426
  this.cache.fileStats = fileStats;
11384
11427
  this.cache.timestamp = Date.now();
11385
11428
  }
@@ -11455,7 +11498,7 @@ var ManifestRouteLoader = class {
11455
11498
  return chunks;
11456
11499
  }
11457
11500
  };
11458
- async function loadNotFoundRouteFromFilesystem(appDir) {
11501
+ async function loadNotFoundRouteFromFilesystem(appDir, projectRoot) {
11459
11502
  const notFoundCandidates = [
11460
11503
  path11.join(appDir, `${NOT_FOUND_FILE_PREFIX}.tsx`),
11461
11504
  path11.join(appDir, `${NOT_FOUND_FILE_PREFIX}.ts`),
@@ -11479,7 +11522,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11479
11522
  }
11480
11523
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11481
11524
  const component = await loadDefaultExport2(notFoundFile, {
11482
- projectRoot: appDir
11525
+ projectRoot
11483
11526
  });
11484
11527
  if (!component) {
11485
11528
  return null;
@@ -11492,7 +11535,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11492
11535
  const layoutServerHooks = [];
11493
11536
  const layoutMiddlewares = [];
11494
11537
  for (const layoutFile of layoutFiles) {
11495
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11538
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11496
11539
  if (layoutHookData) {
11497
11540
  layoutServerHooks.push(layoutHookData.serverHook);
11498
11541
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11501,7 +11544,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11501
11544
  layoutMiddlewares.push([]);
11502
11545
  }
11503
11546
  }
11504
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir);
11547
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir, projectRoot);
11505
11548
  return {
11506
11549
  pattern: NOT_FOUND_PATTERN,
11507
11550
  regex: new RegExp(`^${NOT_FOUND_PATTERN}/?$`),
@@ -11521,7 +11564,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11521
11564
  generateStaticParams
11522
11565
  };
11523
11566
  }
11524
- async function loadErrorRouteFromFilesystem(appDir) {
11567
+ async function loadErrorRouteFromFilesystem(appDir, projectRoot) {
11525
11568
  const errorCandidates = [
11526
11569
  path11.join(appDir, `${ERROR_FILE_PREFIX}.tsx`),
11527
11570
  path11.join(appDir, `${ERROR_FILE_PREFIX}.ts`),
@@ -11540,7 +11583,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11540
11583
  }
11541
11584
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11542
11585
  const component = await loadDefaultExport2(errorFile, {
11543
- projectRoot: appDir
11586
+ projectRoot
11544
11587
  });
11545
11588
  if (!component) {
11546
11589
  return null;
@@ -11552,7 +11595,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11552
11595
  const layoutServerHooks = [];
11553
11596
  const layoutMiddlewares = [];
11554
11597
  for (const layoutFile of layoutFiles) {
11555
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11598
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11556
11599
  if (layoutHookData) {
11557
11600
  layoutServerHooks.push(layoutHookData.serverHook);
11558
11601
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11561,7 +11604,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11561
11604
  layoutMiddlewares.push([]);
11562
11605
  }
11563
11606
  }
11564
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir);
11607
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir, projectRoot);
11565
11608
  return {
11566
11609
  pattern: ERROR_PATTERN,
11567
11610
  regex: new RegExp(`^${ERROR_PATTERN}/?$`),
@@ -18863,8 +18906,8 @@ async function buildApp(options = {}) {
18863
18906
  const apiRoutes = await loadApiRoutes(appDir);
18864
18907
  const wssRoutes = await loadWssRoutes(appDir);
18865
18908
  const { outDir: serverOutDir } = await buildServerApp(projectRoot, appDir, config);
18866
- const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir);
18867
- const errorRoute = await loadErrorRouteFromFilesystem(appDir);
18909
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir, projectRoot);
18910
+ const errorRoute = await loadErrorRouteFromFilesystem(appDir, projectRoot);
18868
18911
  if (!notFoundRoute) {
18869
18912
  console.warn(
18870
18913
  `[framework][build] No not-found route found. Consider creating ${config.directories.app}/${config.conventions.notFound}.tsx`