@lolyjs/core 0.3.0-alpha.2 → 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.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,
@@ -11402,7 +11441,7 @@ var FilesystemRouteLoader = class {
11402
11441
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.notFoundRoute === void 0) {
11403
11442
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11404
11443
  const fileStats = buildFileStats(files);
11405
- this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir);
11444
+ this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir, this.projectRoot);
11406
11445
  this.cache.fileStats = fileStats;
11407
11446
  this.cache.timestamp = Date.now();
11408
11447
  }
@@ -11419,7 +11458,7 @@ var FilesystemRouteLoader = class {
11419
11458
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.errorRoute === void 0) {
11420
11459
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11421
11460
  const fileStats = buildFileStats(files);
11422
- this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir);
11461
+ this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir, this.projectRoot);
11423
11462
  this.cache.fileStats = fileStats;
11424
11463
  this.cache.timestamp = Date.now();
11425
11464
  }
@@ -11495,7 +11534,7 @@ var ManifestRouteLoader = class {
11495
11534
  return chunks;
11496
11535
  }
11497
11536
  };
11498
- async function loadNotFoundRouteFromFilesystem(appDir) {
11537
+ async function loadNotFoundRouteFromFilesystem(appDir, projectRoot) {
11499
11538
  const notFoundCandidates = [
11500
11539
  import_path13.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.tsx`),
11501
11540
  import_path13.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.ts`),
@@ -11519,7 +11558,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11519
11558
  }
11520
11559
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11521
11560
  const component = await loadDefaultExport2(notFoundFile, {
11522
- projectRoot: appDir
11561
+ projectRoot
11523
11562
  });
11524
11563
  if (!component) {
11525
11564
  return null;
@@ -11532,7 +11571,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11532
11571
  const layoutServerHooks = [];
11533
11572
  const layoutMiddlewares = [];
11534
11573
  for (const layoutFile of layoutFiles) {
11535
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11574
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11536
11575
  if (layoutHookData) {
11537
11576
  layoutServerHooks.push(layoutHookData.serverHook);
11538
11577
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11541,7 +11580,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11541
11580
  layoutMiddlewares.push([]);
11542
11581
  }
11543
11582
  }
11544
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir);
11583
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir, projectRoot);
11545
11584
  return {
11546
11585
  pattern: NOT_FOUND_PATTERN,
11547
11586
  regex: new RegExp(`^${NOT_FOUND_PATTERN}/?$`),
@@ -11561,7 +11600,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11561
11600
  generateStaticParams
11562
11601
  };
11563
11602
  }
11564
- async function loadErrorRouteFromFilesystem(appDir) {
11603
+ async function loadErrorRouteFromFilesystem(appDir, projectRoot) {
11565
11604
  const errorCandidates = [
11566
11605
  import_path13.default.join(appDir, `${ERROR_FILE_PREFIX}.tsx`),
11567
11606
  import_path13.default.join(appDir, `${ERROR_FILE_PREFIX}.ts`),
@@ -11580,7 +11619,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11580
11619
  }
11581
11620
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11582
11621
  const component = await loadDefaultExport2(errorFile, {
11583
- projectRoot: appDir
11622
+ projectRoot
11584
11623
  });
11585
11624
  if (!component) {
11586
11625
  return null;
@@ -11592,7 +11631,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11592
11631
  const layoutServerHooks = [];
11593
11632
  const layoutMiddlewares = [];
11594
11633
  for (const layoutFile of layoutFiles) {
11595
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11634
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11596
11635
  if (layoutHookData) {
11597
11636
  layoutServerHooks.push(layoutHookData.serverHook);
11598
11637
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11601,7 +11640,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11601
11640
  layoutMiddlewares.push([]);
11602
11641
  }
11603
11642
  }
11604
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir);
11643
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir, projectRoot);
11605
11644
  return {
11606
11645
  pattern: ERROR_PATTERN,
11607
11646
  regex: new RegExp(`^${ERROR_PATTERN}/?$`),
@@ -18903,8 +18942,8 @@ async function buildApp(options = {}) {
18903
18942
  const apiRoutes = await loadApiRoutes(appDir);
18904
18943
  const wssRoutes = await loadWssRoutes(appDir);
18905
18944
  const { outDir: serverOutDir } = await buildServerApp(projectRoot, appDir, config);
18906
- const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir);
18907
- const errorRoute = await loadErrorRouteFromFilesystem(appDir);
18945
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir, projectRoot);
18946
+ const errorRoute = await loadErrorRouteFromFilesystem(appDir, projectRoot);
18908
18947
  if (!notFoundRoute) {
18909
18948
  console.warn(
18910
18949
  `[framework][build] No not-found route found. Consider creating ${config.directories.app}/${config.conventions.notFound}.tsx`