@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/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,
@@ -11283,7 +11319,14 @@ var FilesystemRouteLoader = class {
11283
11319
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.apiRoutes.length === 0) {
11284
11320
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11285
11321
  const fileStats = buildFileStats(files);
11286
- this.cache.apiRoutes = await loadApiRoutes(this.appDir);
11322
+ const apiRoutes = await loadApiRoutes(this.appDir);
11323
+ if (!this.cache) {
11324
+ await this.loadRoutes();
11325
+ if (!this.cache) {
11326
+ throw new Error("Failed to initialize route cache");
11327
+ }
11328
+ }
11329
+ this.cache.apiRoutes = apiRoutes;
11287
11330
  this.cache.fileStats = fileStats;
11288
11331
  this.cache.timestamp = Date.now();
11289
11332
  }
@@ -11300,7 +11343,14 @@ var FilesystemRouteLoader = class {
11300
11343
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.wssRoutes.length === 0) {
11301
11344
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11302
11345
  const fileStats = buildFileStats(files);
11303
- this.cache.wssRoutes = await loadWssRoutes(this.appDir);
11346
+ const wssRoutes = await loadWssRoutes(this.appDir);
11347
+ if (!this.cache) {
11348
+ await this.loadRoutes();
11349
+ if (!this.cache) {
11350
+ throw new Error("Failed to initialize route cache");
11351
+ }
11352
+ }
11353
+ this.cache.wssRoutes = wssRoutes;
11304
11354
  this.cache.fileStats = fileStats;
11305
11355
  this.cache.timestamp = Date.now();
11306
11356
  }
@@ -11317,7 +11367,14 @@ var FilesystemRouteLoader = class {
11317
11367
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.notFoundRoute === void 0) {
11318
11368
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11319
11369
  const fileStats = buildFileStats(files);
11320
- this.cache.notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir);
11370
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(this.appDir, this.projectRoot);
11371
+ if (!this.cache) {
11372
+ await this.loadRoutes();
11373
+ if (!this.cache) {
11374
+ throw new Error("Failed to initialize route cache");
11375
+ }
11376
+ }
11377
+ this.cache.notFoundRoute = notFoundRoute;
11321
11378
  this.cache.fileStats = fileStats;
11322
11379
  this.cache.timestamp = Date.now();
11323
11380
  }
@@ -11334,7 +11391,14 @@ var FilesystemRouteLoader = class {
11334
11391
  if (hasFilesChanged(this.appDir, this.projectRoot, this.cache.fileStats) || this.cache.errorRoute === void 0) {
11335
11392
  const files = getRelevantFiles(this.appDir, this.projectRoot);
11336
11393
  const fileStats = buildFileStats(files);
11337
- this.cache.errorRoute = await loadErrorRouteFromFilesystem(this.appDir);
11394
+ const errorRoute = await loadErrorRouteFromFilesystem(this.appDir, this.projectRoot);
11395
+ if (!this.cache) {
11396
+ await this.loadRoutes();
11397
+ if (!this.cache) {
11398
+ throw new Error("Failed to initialize route cache");
11399
+ }
11400
+ }
11401
+ this.cache.errorRoute = errorRoute;
11338
11402
  this.cache.fileStats = fileStats;
11339
11403
  this.cache.timestamp = Date.now();
11340
11404
  }
@@ -11410,7 +11474,7 @@ var ManifestRouteLoader = class {
11410
11474
  return chunks;
11411
11475
  }
11412
11476
  };
11413
- async function loadNotFoundRouteFromFilesystem(appDir) {
11477
+ async function loadNotFoundRouteFromFilesystem(appDir, projectRoot) {
11414
11478
  const notFoundCandidates = [
11415
11479
  import_path12.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.tsx`),
11416
11480
  import_path12.default.join(appDir, `${NOT_FOUND_FILE_PREFIX}.ts`),
@@ -11434,7 +11498,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11434
11498
  }
11435
11499
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11436
11500
  const component = await loadDefaultExport2(notFoundFile, {
11437
- projectRoot: appDir
11501
+ projectRoot
11438
11502
  });
11439
11503
  if (!component) {
11440
11504
  return null;
@@ -11447,7 +11511,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11447
11511
  const layoutServerHooks = [];
11448
11512
  const layoutMiddlewares = [];
11449
11513
  for (const layoutFile of layoutFiles) {
11450
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11514
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11451
11515
  if (layoutHookData) {
11452
11516
  layoutServerHooks.push(layoutHookData.serverHook);
11453
11517
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11456,7 +11520,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11456
11520
  layoutMiddlewares.push([]);
11457
11521
  }
11458
11522
  }
11459
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir);
11523
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(notFoundDir, projectRoot);
11460
11524
  return {
11461
11525
  pattern: NOT_FOUND_PATTERN,
11462
11526
  regex: new RegExp(`^${NOT_FOUND_PATTERN}/?$`),
@@ -11476,7 +11540,7 @@ async function loadNotFoundRouteFromFilesystem(appDir) {
11476
11540
  generateStaticParams
11477
11541
  };
11478
11542
  }
11479
- async function loadErrorRouteFromFilesystem(appDir) {
11543
+ async function loadErrorRouteFromFilesystem(appDir, projectRoot) {
11480
11544
  const errorCandidates = [
11481
11545
  import_path12.default.join(appDir, `${ERROR_FILE_PREFIX}.tsx`),
11482
11546
  import_path12.default.join(appDir, `${ERROR_FILE_PREFIX}.ts`),
@@ -11495,7 +11559,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11495
11559
  }
11496
11560
  const { loadDefaultExport: loadDefaultExport2 } = await Promise.resolve().then(() => (init_module_loader(), module_loader_exports));
11497
11561
  const component = await loadDefaultExport2(errorFile, {
11498
- projectRoot: appDir
11562
+ projectRoot
11499
11563
  });
11500
11564
  if (!component) {
11501
11565
  return null;
@@ -11507,7 +11571,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11507
11571
  const layoutServerHooks = [];
11508
11572
  const layoutMiddlewares = [];
11509
11573
  for (const layoutFile of layoutFiles) {
11510
- const layoutHookData = await loadLayoutServerHook(layoutFile);
11574
+ const layoutHookData = await loadLayoutServerHook(layoutFile, projectRoot);
11511
11575
  if (layoutHookData) {
11512
11576
  layoutServerHooks.push(layoutHookData.serverHook);
11513
11577
  layoutMiddlewares.push(layoutHookData.middlewares);
@@ -11516,7 +11580,7 @@ async function loadErrorRouteFromFilesystem(appDir) {
11516
11580
  layoutMiddlewares.push([]);
11517
11581
  }
11518
11582
  }
11519
- const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir);
11583
+ const { middlewares, serverHook, dynamic, generateStaticParams } = await loadServerHookForDir(appDir, projectRoot);
11520
11584
  return {
11521
11585
  pattern: ERROR_PATTERN,
11522
11586
  regex: new RegExp(`^${ERROR_PATTERN}/?$`),
@@ -14532,6 +14596,9 @@ var INIT_FILE_NAME = "init.server";
14532
14596
  async function runInitIfExists(projectRoot, serverData) {
14533
14597
  try {
14534
14598
  let mod = await getServerFile(projectRoot, INIT_FILE_NAME);
14599
+ if (!mod) {
14600
+ return {};
14601
+ }
14535
14602
  if (typeof mod?.init === "function") {
14536
14603
  const serverContext = { ...serverData };
14537
14604
  await mod.init({ serverContext });
@@ -15279,8 +15346,8 @@ async function buildApp(options = {}) {
15279
15346
  const apiRoutes = await loadApiRoutes(appDir);
15280
15347
  const wssRoutes = await loadWssRoutes(appDir);
15281
15348
  const { outDir: serverOutDir } = await buildServerApp(projectRoot, appDir, config);
15282
- const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir);
15283
- const errorRoute = await loadErrorRouteFromFilesystem(appDir);
15349
+ const notFoundRoute = await loadNotFoundRouteFromFilesystem(appDir, projectRoot);
15350
+ const errorRoute = await loadErrorRouteFromFilesystem(appDir, projectRoot);
15284
15351
  if (!notFoundRoute) {
15285
15352
  console.warn(
15286
15353
  `[framework][build] No not-found route found. Consider creating ${config.directories.app}/${config.conventions.notFound}.tsx`