@lolyjs/core 0.3.0-alpha.2 → 0.3.0-alpha.4

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
@@ -10029,6 +10029,9 @@ var INIT_FILE_NAME = "init.server";
10029
10029
  async function runInitIfExists(projectRoot, serverData) {
10030
10030
  try {
10031
10031
  let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
10032
+ if (!mod) {
10033
+ return {};
10034
+ }
10032
10035
  if (typeof mod?.init === "function") {
10033
10036
  const serverContext = { ...serverData };
10034
10037
  await mod.init({ serverContext });
@@ -10154,7 +10157,7 @@ var NAMING = {
10154
10157
  // Files
10155
10158
  SERVER_HOOK: "server.hook"
10156
10159
  };
10157
- async function loadServerHookForDir(currentDir) {
10160
+ async function loadServerHookForDir(currentDir, projectRoot) {
10158
10161
  const isDev = process.env.NODE_ENV === "development";
10159
10162
  const isBuild = process.env.LOLY_BUILD === "1";
10160
10163
  let file = null;
@@ -10180,10 +10183,24 @@ async function loadServerHookForDir(currentDir) {
10180
10183
  generateStaticParams: null
10181
10184
  };
10182
10185
  }
10186
+ let resolvedProjectRoot = projectRoot;
10187
+ if (!resolvedProjectRoot) {
10188
+ let current = import_path4.default.resolve(currentDir);
10189
+ while (current !== import_path4.default.dirname(current)) {
10190
+ if (import_fs4.default.existsSync(import_path4.default.join(current, "package.json"))) {
10191
+ resolvedProjectRoot = current;
10192
+ break;
10193
+ }
10194
+ current = import_path4.default.dirname(current);
10195
+ }
10196
+ if (!resolvedProjectRoot) {
10197
+ resolvedProjectRoot = currentDir;
10198
+ }
10199
+ }
10183
10200
  let mod;
10184
10201
  try {
10185
10202
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10186
- mod = await loadModule2(file, { projectRoot: currentDir });
10203
+ mod = await loadModule2(file, { projectRoot: resolvedProjectRoot });
10187
10204
  } catch (error) {
10188
10205
  console.error(
10189
10206
  `[framework][server-hook] Error loading server hook from ${file}:`,
@@ -10226,7 +10243,7 @@ async function loadServerHookForDir(currentDir) {
10226
10243
  generateStaticParams
10227
10244
  };
10228
10245
  }
10229
- async function loadLayoutServerHook(layoutFile) {
10246
+ async function loadLayoutServerHook(layoutFile, projectRoot) {
10230
10247
  const layoutDir = import_path4.default.dirname(layoutFile);
10231
10248
  const layoutExt = import_path4.default.extname(layoutFile);
10232
10249
  const layoutBasename = import_path4.default.basename(layoutFile, layoutExt);
@@ -10252,7 +10269,20 @@ async function loadLayoutServerHook(layoutFile) {
10252
10269
  }
10253
10270
  try {
10254
10271
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10255
- const mod = await loadModule2(file, { projectRoot: import_path4.default.dirname(file) });
10272
+ if (!projectRoot) {
10273
+ let current = import_path4.default.dirname(layoutFile);
10274
+ while (current !== import_path4.default.dirname(current)) {
10275
+ if (import_fs4.default.existsSync(import_path4.default.join(current, "package.json"))) {
10276
+ projectRoot = current;
10277
+ break;
10278
+ }
10279
+ current = import_path4.default.dirname(current);
10280
+ }
10281
+ if (!projectRoot) {
10282
+ projectRoot = import_path4.default.dirname(layoutFile);
10283
+ }
10284
+ }
10285
+ const mod = await loadModule2(file, { projectRoot });
10256
10286
  const serverHook = typeof mod?.getServerSideProps === "function" ? mod.getServerSideProps : null;
10257
10287
  let middlewares = [];
10258
10288
  const rawMiddlewares = mod?.[NAMING.BEFORE_MIDDLEWARES];
@@ -10340,6 +10370,15 @@ async function loadRoutes(appDir) {
10340
10370
  if (!import_fs5.default.existsSync(appDir)) {
10341
10371
  return [];
10342
10372
  }
10373
+ let projectRoot = appDir;
10374
+ let current = import_path5.default.resolve(appDir);
10375
+ while (current !== import_path5.default.dirname(current)) {
10376
+ if (import_fs5.default.existsSync(import_path5.default.join(current, "package.json"))) {
10377
+ projectRoot = current;
10378
+ break;
10379
+ }
10380
+ current = import_path5.default.dirname(current);
10381
+ }
10343
10382
  const routes = [];
10344
10383
  async function walk(currentDir) {
10345
10384
  const entries = import_fs5.default.readdirSync(currentDir, { withFileTypes: true });
@@ -10358,7 +10397,7 @@ async function loadRoutes(appDir) {
10358
10397
  const { regex, paramNames } = buildRegexFromRoutePath(routePath);
10359
10398
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10360
10399
  const component = await loadDefaultExport2(fullPath, {
10361
- projectRoot: appDir
10400
+ projectRoot
10362
10401
  });
10363
10402
  if (!component) {
10364
10403
  continue;
@@ -10370,7 +10409,7 @@ async function loadRoutes(appDir) {
10370
10409
  const layoutServerHooks = [];
10371
10410
  const layoutMiddlewares = [];
10372
10411
  for (const layoutFile of layoutFiles) {
10373
- const layoutHookData = await loadLayoutServerHook(layoutFile);
10412
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10374
10413
  if (layoutHookData) {
10375
10414
  layoutServerHooks.push(layoutHookData.serverHook);
10376
10415
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10379,7 +10418,7 @@ async function loadRoutes(appDir) {
10379
10418
  layoutMiddlewares.push([]);
10380
10419
  }
10381
10420
  }
10382
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir);
10421
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir, projectRoot);
10383
10422
  routes.push({
10384
10423
  pattern: routePath,
10385
10424
  regex,
@@ -10975,7 +11014,7 @@ async function loadRoutesFromManifest(projectRoot) {
10975
11014
  const layoutServerHooks = [];
10976
11015
  const layoutMiddlewares = [];
10977
11016
  for (const layoutFile of layoutFiles) {
10978
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11017
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10979
11018
  if (layoutHookData) {
10980
11019
  layoutServerHooks.push(layoutHookData.serverHook);
10981
11020
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10984,7 +11023,7 @@ async function loadRoutesFromManifest(projectRoot) {
10984
11023
  layoutMiddlewares.push([]);
10985
11024
  }
10986
11025
  }
10987
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir);
11026
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir, projectRoot);
10988
11027
  pageRoutes.push({
10989
11028
  pattern: entry.pattern,
10990
11029
  regex,
@@ -11368,7 +11407,14 @@ var FilesystemRouteLoader = class {
11368
11407
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.apiRoutes.length === 0) {
11369
11408
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11370
11409
  const fileStats = buildFileStats(files);
11371
- this.cache.apiRoutes = await loadApiRoutes(this.appDir);
11410
+ const apiRoutes = await loadApiRoutes(this.appDir);
11411
+ if (!this.cache) {
11412
+ await this.loadRoutes();
11413
+ if (!this.cache) {
11414
+ throw new Error("Failed to initialize route cache");
11415
+ }
11416
+ }
11417
+ this.cache.apiRoutes = apiRoutes;
11372
11418
  this.cache.fileStats = fileStats;
11373
11419
  this.cache.timestamp = Date.now();
11374
11420
  }
@@ -11385,7 +11431,14 @@ var FilesystemRouteLoader = class {
11385
11431
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.wssRoutes.length === 0) {
11386
11432
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11387
11433
  const fileStats = buildFileStats(files);
11388
- this.cache.wssRoutes = await loadWssRoutes(this.appDir);
11434
+ const wssRoutes = await loadWssRoutes(this.appDir);
11435
+ if (!this.cache) {
11436
+ await this.loadRoutes();
11437
+ if (!this.cache) {
11438
+ throw new Error("Failed to initialize route cache");
11439
+ }
11440
+ }
11441
+ this.cache.wssRoutes = wssRoutes;
11389
11442
  this.cache.fileStats = fileStats;
11390
11443
  this.cache.timestamp = Date.now();
11391
11444
  }
@@ -11402,7 +11455,14 @@ var FilesystemRouteLoader = class {
11402
11455
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.notFoundRoute === void 0) {
11403
11456
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11404
11457
  const fileStats = buildFileStats(files);
11405
- this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir);
11458
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir, this.projectRoot);
11459
+ if (!this.cache) {
11460
+ await this.loadRoutes();
11461
+ if (!this.cache) {
11462
+ throw new Error("Failed to initialize route cache");
11463
+ }
11464
+ }
11465
+ this.cache.notFoundRoute = notFoundRoute;
11406
11466
  this.cache.fileStats = fileStats;
11407
11467
  this.cache.timestamp = Date.now();
11408
11468
  }
@@ -11419,7 +11479,14 @@ var FilesystemRouteLoader = class {
11419
11479
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.errorRoute === void 0) {
11420
11480
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11421
11481
  const fileStats = buildFileStats(files);
11422
- this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir);
11482
+ const errorRoute = await loadErrorRouteFromFilesystem(this.appDir, this.projectRoot);
11483
+ if (!this.cache) {
11484
+ await this.loadRoutes();
11485
+ if (!this.cache) {
11486
+ throw new Error("Failed to initialize route cache");
11487
+ }
11488
+ }
11489
+ this.cache.errorRoute = errorRoute;
11423
11490
  this.cache.fileStats = fileStats;
11424
11491
  this.cache.timestamp = Date.now();
11425
11492
  }
@@ -11495,7 +11562,7 @@ var ManifestRouteLoader = class {
11495
11562
  return chunks;
11496
11563
  }
11497
11564
  };
11498
- async function loadNotFoundRouteFromFilesystem(appDir) {
11565
+ async function loadNotFoundRouteFromFilesystem(appDir, projectRoot) {
11499
11566
  const notFoundCandidates = [
11500
11567
  import_path13.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.tsx`),
11501
11568
  import_path13.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.ts`),
@@ -11519,7 +11586,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11519
11586
  }
11520
11587
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11521
11588
  const component = await loadDefaultExport2(notFoundFile, {
11522
- projectRoot: appDir
11589
+ projectRoot
11523
11590
  });
11524
11591
  if (!component) {
11525
11592
  return null;
@@ -11532,7 +11599,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11532
11599
  const layoutServerHooks = [];
11533
11600
  const layoutMiddlewares = [];
11534
11601
  for (const layoutFile of layoutFiles) {
11535
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11602
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11536
11603
  if (layoutHookData) {
11537
11604
  layoutServerHooks.push(layoutHookData.serverHook);
11538
11605
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11541,7 +11608,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11541
11608
  layoutMiddlewares.push([]);
11542
11609
  }
11543
11610
  }
11544
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir);
11611
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir, projectRoot);
11545
11612
  return {
11546
11613
  pattern: NOT_FOUND_PATTERN,
11547
11614
  regex: new RegExp(`^${NOT_FOUND_PATTERN}/?$`),
@@ -11561,7 +11628,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11561
11628
  generateStaticParams
11562
11629
  };
11563
11630
  }
11564
- async function loadErrorRouteFromFilesystem(appDir) {
11631
+ async function loadErrorRouteFromFilesystem(appDir, projectRoot) {
11565
11632
  const errorCandidates = [
11566
11633
  import_path13.default.join(appDir, `${ERROR_FILE_PREFIX}.tsx`),
11567
11634
  import_path13.default.join(appDir, `${ERROR_FILE_PREFIX}.ts`),
@@ -11580,7 +11647,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11580
11647
  }
11581
11648
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11582
11649
  const component = await loadDefaultExport2(errorFile, {
11583
- projectRoot: appDir
11650
+ projectRoot
11584
11651
  });
11585
11652
  if (!component) {
11586
11653
  return null;
@@ -11592,7 +11659,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11592
11659
  const layoutServerHooks = [];
11593
11660
  const layoutMiddlewares = [];
11594
11661
  for (const layoutFile of layoutFiles) {
11595
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11662
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11596
11663
  if (layoutHookData) {
11597
11664
  layoutServerHooks.push(layoutHookData.serverHook);
11598
11665
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11601,7 +11668,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11601
11668
  layoutMiddlewares.push([]);
11602
11669
  }
11603
11670
  }
11604
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir);
11671
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir, projectRoot);
11605
11672
  return {
11606
11673
  pattern: ERROR_PATTERN,
11607
11674
  regex: new RegExp(`^${ERROR_PATTERN}/?$`),
@@ -18903,8 +18970,8 @@ async function buildApp(options = {}) {
18903
18970
  const apiRoutes = await loadApiRoutes(appDir);
18904
18971
  const wssRoutes = await loadWssRoutes(appDir);
18905
18972
  const { outDir: serverOutDir } = await buildServerApp(projectRoot, appDir, config);
18906
- const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir);
18907
- const errorRoute = await loadErrorRouteFromFilesystem(appDir);
18973
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir, projectRoot);
18974
+ const errorRoute = await loadErrorRouteFromFilesystem(appDir, projectRoot);
18908
18975
  if (!notFoundRoute) {
18909
18976
  console.warn(
18910
18977
  `[framework][build] No not-found route found. Consider creating ${config.directories.app}/${config.conventions.notFound}.tsx`