@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/cli.cjs CHANGED
@@ -10069,7 +10069,7 @@ var NAMING = {
10069
10069
  // Files
10070
10070
  SERVER_HOOK: "server.hook"
10071
10071
  };
10072
- async function loadServerHookForDir(currentDir) {
10072
+ async function loadServerHookForDir(currentDir, projectRoot) {
10073
10073
  const isDev = process.env.NODE_ENV === "development";
10074
10074
  const isBuild = process.env.LOLY_BUILD === "1";
10075
10075
  let file = null;
@@ -10095,10 +10095,24 @@ async function loadServerHookForDir(currentDir) {
10095
10095
  generateStaticParams: null
10096
10096
  };
10097
10097
  }
10098
+ let resolvedProjectRoot = projectRoot;
10099
+ if (!resolvedProjectRoot) {
10100
+ let current = import_path3.default.resolve(currentDir);
10101
+ while (current !== import_path3.default.dirname(current)) {
10102
+ if (import_fs3.default.existsSync(import_path3.default.join(current, "package.json"))) {
10103
+ resolvedProjectRoot = current;
10104
+ break;
10105
+ }
10106
+ current = import_path3.default.dirname(current);
10107
+ }
10108
+ if (!resolvedProjectRoot) {
10109
+ resolvedProjectRoot = currentDir;
10110
+ }
10111
+ }
10098
10112
  let mod;
10099
10113
  try {
10100
10114
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10101
- mod = await loadModule2(file, { projectRoot: currentDir });
10115
+ mod = await loadModule2(file, { projectRoot: resolvedProjectRoot });
10102
10116
  } catch (error) {
10103
10117
  console.error(
10104
10118
  `[framework][server-hook] Error loading server hook from ${file}:`,
@@ -10141,7 +10155,7 @@ async function loadServerHookForDir(currentDir) {
10141
10155
  generateStaticParams
10142
10156
  };
10143
10157
  }
10144
- async function loadLayoutServerHook(layoutFile) {
10158
+ async function loadLayoutServerHook(layoutFile, projectRoot) {
10145
10159
  const layoutDir = import_path3.default.dirname(layoutFile);
10146
10160
  const layoutExt = import_path3.default.extname(layoutFile);
10147
10161
  const layoutBasename = import_path3.default.basename(layoutFile, layoutExt);
@@ -10167,7 +10181,20 @@ async function loadLayoutServerHook(layoutFile) {
10167
10181
  }
10168
10182
  try {
10169
10183
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10170
- const mod = await loadModule2(file, { projectRoot: import_path3.default.dirname(file) });
10184
+ if (!projectRoot) {
10185
+ let current = import_path3.default.dirname(layoutFile);
10186
+ while (current !== import_path3.default.dirname(current)) {
10187
+ if (import_fs3.default.existsSync(import_path3.default.join(current, "package.json"))) {
10188
+ projectRoot = current;
10189
+ break;
10190
+ }
10191
+ current = import_path3.default.dirname(current);
10192
+ }
10193
+ if (!projectRoot) {
10194
+ projectRoot = import_path3.default.dirname(layoutFile);
10195
+ }
10196
+ }
10197
+ const mod = await loadModule2(file, { projectRoot });
10171
10198
  const serverHook = typeof mod?.getServerSideProps === "function" ? mod.getServerSideProps : null;
10172
10199
  let middlewares = [];
10173
10200
  const rawMiddlewares = mod?.[NAMING.BEFORE_MIDDLEWARES];
@@ -10255,6 +10282,15 @@ async function loadRoutes(appDir) {
10255
10282
  if (!import_fs4.default.existsSync(appDir)) {
10256
10283
  return [];
10257
10284
  }
10285
+ let projectRoot = appDir;
10286
+ let current = import_path4.default.resolve(appDir);
10287
+ while (current !== import_path4.default.dirname(current)) {
10288
+ if (import_fs4.default.existsSync(import_path4.default.join(current, "package.json"))) {
10289
+ projectRoot = current;
10290
+ break;
10291
+ }
10292
+ current = import_path4.default.dirname(current);
10293
+ }
10258
10294
  const routes = [];
10259
10295
  async function walk(currentDir) {
10260
10296
  const entries = import_fs4.default.readdirSync(currentDir, { withFileTypes: true });
@@ -10273,7 +10309,7 @@ async function loadRoutes(appDir) {
10273
10309
  const { regex, paramNames } = buildRegexFromRoutePath(routePath);
10274
10310
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10275
10311
  const component = await loadDefaultExport2(fullPath, {
10276
- projectRoot: appDir
10312
+ projectRoot
10277
10313
  });
10278
10314
  if (!component) {
10279
10315
  continue;
@@ -10285,7 +10321,7 @@ async function loadRoutes(appDir) {
10285
10321
  const layoutServerHooks = [];
10286
10322
  const layoutMiddlewares = [];
10287
10323
  for (const layoutFile of layoutFiles) {
10288
- const layoutHookData = await loadLayoutServerHook(layoutFile);
10324
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10289
10325
  if (layoutHookData) {
10290
10326
  layoutServerHooks.push(layoutHookData.serverHook);
10291
10327
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10294,7 +10330,7 @@ async function loadRoutes(appDir) {
10294
10330
  layoutMiddlewares.push([]);
10295
10331
  }
10296
10332
  }
10297
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir);
10333
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir, projectRoot);
10298
10334
  routes.push({
10299
10335
  pattern: routePath,
10300
10336
  regex,
@@ -10890,7 +10926,7 @@ async function loadRoutesFromManifest(projectRoot) {
10890
10926
  const layoutServerHooks = [];
10891
10927
  const layoutMiddlewares = [];
10892
10928
  for (const layoutFile of layoutFiles) {
10893
- const layoutHookData = await loadLayoutServerHook(layoutFile);
10929
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10894
10930
  if (layoutHookData) {
10895
10931
  layoutServerHooks.push(layoutHookData.serverHook);
10896
10932
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10899,7 +10935,7 @@ async function loadRoutesFromManifest(projectRoot) {
10899
10935
  layoutMiddlewares.push([]);
10900
10936
  }
10901
10937
  }
10902
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir);
10938
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir, projectRoot);
10903
10939
  pageRoutes.push({
10904
10940
  pattern: entry.pattern,
10905
10941
  regex,
@@ -11317,7 +11353,7 @@ var FilesystemRouteLoader = class {
11317
11353
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.notFoundRoute === void 0) {
11318
11354
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11319
11355
  const fileStats = buildFileStats(files);
11320
- this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir);
11356
+ this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir, this.projectRoot);
11321
11357
  this.cache.fileStats = fileStats;
11322
11358
  this.cache.timestamp = Date.now();
11323
11359
  }
@@ -11334,7 +11370,7 @@ var FilesystemRouteLoader = class {
11334
11370
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.errorRoute === void 0) {
11335
11371
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11336
11372
  const fileStats = buildFileStats(files);
11337
- this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir);
11373
+ this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir, this.projectRoot);
11338
11374
  this.cache.fileStats = fileStats;
11339
11375
  this.cache.timestamp = Date.now();
11340
11376
  }
@@ -11410,7 +11446,7 @@ var ManifestRouteLoader = class {
11410
11446
  return chunks;
11411
11447
  }
11412
11448
  };
11413
- async function loadNotFoundRouteFromFilesystem(appDir) {
11449
+ async function loadNotFoundRouteFromFilesystem(appDir, projectRoot) {
11414
11450
  const notFoundCandidates = [
11415
11451
  import_path12.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.tsx`),
11416
11452
  import_path12.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.ts`),
@@ -11434,7 +11470,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11434
11470
  }
11435
11471
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11436
11472
  const component = await loadDefaultExport2(notFoundFile, {
11437
- projectRoot: appDir
11473
+ projectRoot
11438
11474
  });
11439
11475
  if (!component) {
11440
11476
  return null;
@@ -11447,7 +11483,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11447
11483
  const layoutServerHooks = [];
11448
11484
  const layoutMiddlewares = [];
11449
11485
  for (const layoutFile of layoutFiles) {
11450
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11486
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11451
11487
  if (layoutHookData) {
11452
11488
  layoutServerHooks.push(layoutHookData.serverHook);
11453
11489
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11456,7 +11492,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11456
11492
  layoutMiddlewares.push([]);
11457
11493
  }
11458
11494
  }
11459
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir);
11495
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir, projectRoot);
11460
11496
  return {
11461
11497
  pattern: NOT_FOUND_PATTERN,
11462
11498
  regex: new RegExp(`^${NOT_FOUND_PATTERN}/?$`),
@@ -11476,7 +11512,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11476
11512
  generateStaticParams
11477
11513
  };
11478
11514
  }
11479
- async function loadErrorRouteFromFilesystem(appDir) {
11515
+ async function loadErrorRouteFromFilesystem(appDir, projectRoot) {
11480
11516
  const errorCandidates = [
11481
11517
  import_path12.default.join(appDir, `${ERROR_FILE_PREFIX}.tsx`),
11482
11518
  import_path12.default.join(appDir, `${ERROR_FILE_PREFIX}.ts`),
@@ -11495,7 +11531,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11495
11531
  }
11496
11532
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11497
11533
  const component = await loadDefaultExport2(errorFile, {
11498
- projectRoot: appDir
11534
+ projectRoot
11499
11535
  });
11500
11536
  if (!component) {
11501
11537
  return null;
@@ -11507,7 +11543,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11507
11543
  const layoutServerHooks = [];
11508
11544
  const layoutMiddlewares = [];
11509
11545
  for (const layoutFile of layoutFiles) {
11510
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11546
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11511
11547
  if (layoutHookData) {
11512
11548
  layoutServerHooks.push(layoutHookData.serverHook);
11513
11549
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11516,7 +11552,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11516
11552
  layoutMiddlewares.push([]);
11517
11553
  }
11518
11554
  }
11519
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir);
11555
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir, projectRoot);
11520
11556
  return {
11521
11557
  pattern: ERROR_PATTERN,
11522
11558
  regex: new RegExp(`^${ERROR_PATTERN}/?$`),
@@ -14530,11 +14566,18 @@ var getServerFile = async (projectRoot, fileName) => {
14530
14566
  // modules/server/init.ts
14531
14567
  var INIT_FILE_NAME = "init.server";
14532
14568
  async function runInitIfExists(projectRoot, serverData) {
14533
- let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
14534
- if (typeof mod?.init === "function") {
14535
- const serverContext = { ...serverData };
14536
- await mod.init({ serverContext });
14537
- return serverContext;
14569
+ try {
14570
+ let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
14571
+ if (!mod) {
14572
+ return {};
14573
+ }
14574
+ if (typeof mod?.init === "function") {
14575
+ const serverContext = { ...serverData };
14576
+ await mod.init({ serverContext });
14577
+ return serverContext;
14578
+ }
14579
+ } catch (error) {
14580
+ console.error(`[Init] Failed to load or execute ${INIT_FILE_NAME}.ts:`, error);
14538
14581
  }
14539
14582
  return {};
14540
14583
  }
@@ -15275,8 +15318,8 @@ async function buildApp(options = {}) {
15275
15318
  const apiRoutes = await loadApiRoutes(appDir);
15276
15319
  const wssRoutes = await loadWssRoutes(appDir);
15277
15320
  const { outDir: serverOutDir } = await buildServerApp(projectRoot, appDir, config);
15278
- const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir);
15279
- const errorRoute = await loadErrorRouteFromFilesystem(appDir);
15321
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir, projectRoot);
15322
+ const errorRoute = await loadErrorRouteFromFilesystem(appDir, projectRoot);
15280
15323
  if (!notFoundRoute) {
15281
15324
  console.warn(
15282
15325
  `[framework][build] No not-found route found. Consider creating ${config.directories.app}/${config.conventions.notFound}.tsx`