@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.cjs CHANGED
@@ -10027,11 +10027,18 @@ var getServerFile = async (projectRoot, fileName) => {
10027
10027
  // modules/server/init.ts
10028
10028
  var INIT_FILE_NAME = "init.server";
10029
10029
  async function runInitIfExists(projectRoot, serverData) {
10030
- let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
10031
- if (typeof mod?.init === "function") {
10032
- const serverContext = { ...serverData };
10033
- await mod.init({ serverContext });
10034
- return serverContext;
10030
+ try {
10031
+ let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
10032
+ if (!mod) {
10033
+ return {};
10034
+ }
10035
+ if (typeof mod?.init === "function") {
10036
+ const serverContext = { ...serverData };
10037
+ await mod.init({ serverContext });
10038
+ return serverContext;
10039
+ }
10040
+ } catch (error) {
10041
+ console.error(`[Init] Failed to load or execute ${INIT_FILE_NAME}.ts:`, error);
10035
10042
  }
10036
10043
  return {};
10037
10044
  }
@@ -10150,7 +10157,7 @@ var NAMING = {
10150
10157
  // Files
10151
10158
  SERVER_HOOK: "server.hook"
10152
10159
  };
10153
- async function loadServerHookForDir(currentDir) {
10160
+ async function loadServerHookForDir(currentDir, projectRoot) {
10154
10161
  const isDev = process.env.NODE_ENV === "development";
10155
10162
  const isBuild = process.env.LOLY_BUILD === "1";
10156
10163
  let file = null;
@@ -10176,10 +10183,24 @@ async function loadServerHookForDir(currentDir) {
10176
10183
  generateStaticParams: null
10177
10184
  };
10178
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
+ }
10179
10200
  let mod;
10180
10201
  try {
10181
10202
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10182
- mod = await loadModule2(file, { projectRoot: currentDir });
10203
+ mod = await loadModule2(file, { projectRoot: resolvedProjectRoot });
10183
10204
  } catch (error) {
10184
10205
  console.error(
10185
10206
  `[framework][server-hook] Error loading server hook from ${file}:`,
@@ -10222,7 +10243,7 @@ async function loadServerHookForDir(currentDir) {
10222
10243
  generateStaticParams
10223
10244
  };
10224
10245
  }
10225
- async function loadLayoutServerHook(layoutFile) {
10246
+ async function loadLayoutServerHook(layoutFile, projectRoot) {
10226
10247
  const layoutDir = import_path4.default.dirname(layoutFile);
10227
10248
  const layoutExt = import_path4.default.extname(layoutFile);
10228
10249
  const layoutBasename = import_path4.default.basename(layoutFile, layoutExt);
@@ -10248,7 +10269,20 @@ async function loadLayoutServerHook(layoutFile) {
10248
10269
  }
10249
10270
  try {
10250
10271
  const { loadModule: loadModule2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10251
- 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 });
10252
10286
  const serverHook = typeof mod?.getServerSideProps === "function" ? mod.getServerSideProps : null;
10253
10287
  let middlewares = [];
10254
10288
  const rawMiddlewares = mod?.[NAMING.BEFORE_MIDDLEWARES];
@@ -10336,6 +10370,15 @@ async function loadRoutes(appDir) {
10336
10370
  if (!import_fs5.default.existsSync(appDir)) {
10337
10371
  return [];
10338
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
+ }
10339
10382
  const routes = [];
10340
10383
  async function walk(currentDir) {
10341
10384
  const entries = import_fs5.default.readdirSync(currentDir, { withFileTypes: true });
@@ -10354,7 +10397,7 @@ async function loadRoutes(appDir) {
10354
10397
  const { regex, paramNames } = buildRegexFromRoutePath(routePath);
10355
10398
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
10356
10399
  const component = await loadDefaultExport2(fullPath, {
10357
- projectRoot: appDir
10400
+ projectRoot
10358
10401
  });
10359
10402
  if (!component) {
10360
10403
  continue;
@@ -10366,7 +10409,7 @@ async function loadRoutes(appDir) {
10366
10409
  const layoutServerHooks = [];
10367
10410
  const layoutMiddlewares = [];
10368
10411
  for (const layoutFile of layoutFiles) {
10369
- const layoutHookData = await loadLayoutServerHook(layoutFile);
10412
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10370
10413
  if (layoutHookData) {
10371
10414
  layoutServerHooks.push(layoutHookData.serverHook);
10372
10415
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10375,7 +10418,7 @@ async function loadRoutes(appDir) {
10375
10418
  layoutMiddlewares.push([]);
10376
10419
  }
10377
10420
  }
10378
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir);
10421
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(currentDir, projectRoot);
10379
10422
  routes.push({
10380
10423
  pattern: routePath,
10381
10424
  regex,
@@ -10971,7 +11014,7 @@ async function loadRoutesFromManifest(projectRoot) {
10971
11014
  const layoutServerHooks = [];
10972
11015
  const layoutMiddlewares = [];
10973
11016
  for (const layoutFile of layoutFiles) {
10974
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11017
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
10975
11018
  if (layoutHookData) {
10976
11019
  layoutServerHooks.push(layoutHookData.serverHook);
10977
11020
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -10980,7 +11023,7 @@ async function loadRoutesFromManifest(projectRoot) {
10980
11023
  layoutMiddlewares.push([]);
10981
11024
  }
10982
11025
  }
10983
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir);
11026
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(pageDir, projectRoot);
10984
11027
  pageRoutes.push({
10985
11028
  pattern: entry.pattern,
10986
11029
  regex,
@@ -11398,7 +11441,7 @@ var FilesystemRouteLoader = class {
11398
11441
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.notFoundRoute === void 0) {
11399
11442
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11400
11443
  const fileStats = buildFileStats(files);
11401
- this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir);
11444
+ this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir, this.projectRoot);
11402
11445
  this.cache.fileStats = fileStats;
11403
11446
  this.cache.timestamp = Date.now();
11404
11447
  }
@@ -11415,7 +11458,7 @@ var FilesystemRouteLoader = class {
11415
11458
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.errorRoute === void 0) {
11416
11459
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11417
11460
  const fileStats = buildFileStats(files);
11418
- this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir);
11461
+ this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir, this.projectRoot);
11419
11462
  this.cache.fileStats = fileStats;
11420
11463
  this.cache.timestamp = Date.now();
11421
11464
  }
@@ -11491,7 +11534,7 @@ var ManifestRouteLoader = class {
11491
11534
  return chunks;
11492
11535
  }
11493
11536
  };
11494
- async function loadNotFoundRouteFromFilesystem(appDir) {
11537
+ async function loadNotFoundRouteFromFilesystem(appDir, projectRoot) {
11495
11538
  const notFoundCandidates = [
11496
11539
  import_path13.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.tsx`),
11497
11540
  import_path13.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.ts`),
@@ -11515,7 +11558,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11515
11558
  }
11516
11559
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11517
11560
  const component = await loadDefaultExport2(notFoundFile, {
11518
- projectRoot: appDir
11561
+ projectRoot
11519
11562
  });
11520
11563
  if (!component) {
11521
11564
  return null;
@@ -11528,7 +11571,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11528
11571
  const layoutServerHooks = [];
11529
11572
  const layoutMiddlewares = [];
11530
11573
  for (const layoutFile of layoutFiles) {
11531
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11574
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11532
11575
  if (layoutHookData) {
11533
11576
  layoutServerHooks.push(layoutHookData.serverHook);
11534
11577
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11537,7 +11580,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11537
11580
  layoutMiddlewares.push([]);
11538
11581
  }
11539
11582
  }
11540
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir);
11583
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir, projectRoot);
11541
11584
  return {
11542
11585
  pattern: NOT_FOUND_PATTERN,
11543
11586
  regex: new RegExp(`^${NOT_FOUND_PATTERN}/?$`),
@@ -11557,7 +11600,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11557
11600
  generateStaticParams
11558
11601
  };
11559
11602
  }
11560
- async function loadErrorRouteFromFilesystem(appDir) {
11603
+ async function loadErrorRouteFromFilesystem(appDir, projectRoot) {
11561
11604
  const errorCandidates = [
11562
11605
  import_path13.default.join(appDir, `${ERROR_FILE_PREFIX}.tsx`),
11563
11606
  import_path13.default.join(appDir, `${ERROR_FILE_PREFIX}.ts`),
@@ -11576,7 +11619,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11576
11619
  }
11577
11620
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11578
11621
  const component = await loadDefaultExport2(errorFile, {
11579
- projectRoot: appDir
11622
+ projectRoot
11580
11623
  });
11581
11624
  if (!component) {
11582
11625
  return null;
@@ -11588,7 +11631,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11588
11631
  const layoutServerHooks = [];
11589
11632
  const layoutMiddlewares = [];
11590
11633
  for (const layoutFile of layoutFiles) {
11591
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11634
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11592
11635
  if (layoutHookData) {
11593
11636
  layoutServerHooks.push(layoutHookData.serverHook);
11594
11637
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11597,7 +11640,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11597
11640
  layoutMiddlewares.push([]);
11598
11641
  }
11599
11642
  }
11600
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir);
11643
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir, projectRoot);
11601
11644
  return {
11602
11645
  pattern: ERROR_PATTERN,
11603
11646
  regex: new RegExp(`^${ERROR_PATTERN}/?$`),
@@ -18899,8 +18942,8 @@ async function buildApp(options = {}) {
18899
18942
  const apiRoutes = await loadApiRoutes(appDir);
18900
18943
  const wssRoutes = await loadWssRoutes(appDir);
18901
18944
  const { outDir: serverOutDir } = await buildServerApp(projectRoot, appDir, config);
18902
- const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir);
18903
- const errorRoute = await loadErrorRouteFromFilesystem(appDir);
18945
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir, projectRoot);
18946
+ const errorRoute = await loadErrorRouteFromFilesystem(appDir, projectRoot);
18904
18947
  if (!notFoundRoute) {
18905
18948
  console.warn(
18906
18949
  `[framework][build] No not-found route found. Consider creating ${config.directories.app}/${config.conventions.notFound}.tsx`