veryfront 0.1.82 → 0.1.84

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.
Files changed (93) hide show
  1. package/esm/cli/commands/knowledge/command.d.ts +10 -13
  2. package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
  3. package/esm/cli/commands/knowledge/command.js +294 -110
  4. package/esm/cli/commands/knowledge/parser-source.d.ts.map +1 -1
  5. package/esm/cli/commands/knowledge/parser-source.js +52 -0
  6. package/esm/cli/commands/knowledge/result.d.ts +54 -0
  7. package/esm/cli/commands/knowledge/result.d.ts.map +1 -0
  8. package/esm/cli/commands/knowledge/result.js +22 -0
  9. package/esm/cli/commands/knowledge/source-policy.d.ts +11 -0
  10. package/esm/cli/commands/knowledge/source-policy.d.ts.map +1 -0
  11. package/esm/cli/commands/knowledge/source-policy.js +135 -0
  12. package/esm/deno.js +1 -1
  13. package/esm/src/jobs/index.d.ts +1 -1
  14. package/esm/src/jobs/index.d.ts.map +1 -1
  15. package/esm/src/jobs/index.js +1 -1
  16. package/esm/src/jobs/schemas.d.ts +1104 -185
  17. package/esm/src/jobs/schemas.d.ts.map +1 -1
  18. package/esm/src/jobs/schemas.js +81 -8
  19. package/esm/src/platform/adapters/base.d.ts +4 -1
  20. package/esm/src/platform/adapters/base.d.ts.map +1 -1
  21. package/esm/src/platform/adapters/fs/github/adapter.d.ts +2 -1
  22. package/esm/src/platform/adapters/fs/github/adapter.d.ts.map +1 -1
  23. package/esm/src/platform/adapters/fs/github/adapter.js +2 -2
  24. package/esm/src/platform/adapters/fs/github/stat-operations.d.ts +2 -1
  25. package/esm/src/platform/adapters/fs/github/stat-operations.d.ts.map +1 -1
  26. package/esm/src/platform/adapters/fs/github/stat-operations.js +2 -2
  27. package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts +2 -2
  28. package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
  29. package/esm/src/platform/adapters/fs/veryfront/adapter.js +17 -2
  30. package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.d.ts +2 -2
  31. package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.d.ts.map +1 -1
  32. package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.js +2 -2
  33. package/esm/src/platform/adapters/fs/veryfront/read-operations.d.ts +1 -0
  34. package/esm/src/platform/adapters/fs/veryfront/read-operations.d.ts.map +1 -1
  35. package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts +6 -2
  36. package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
  37. package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +131 -21
  38. package/esm/src/platform/adapters/fs/veryfront/types.d.ts +2 -1
  39. package/esm/src/platform/adapters/fs/veryfront/types.d.ts.map +1 -1
  40. package/esm/src/platform/adapters/fs/wrapper.d.ts +2 -2
  41. package/esm/src/platform/adapters/fs/wrapper.d.ts.map +1 -1
  42. package/esm/src/platform/adapters/fs/wrapper.js +2 -2
  43. package/esm/src/proxy/error-response.d.ts +7 -0
  44. package/esm/src/proxy/error-response.d.ts.map +1 -0
  45. package/esm/src/proxy/error-response.js +26 -0
  46. package/esm/src/proxy/handler.d.ts.map +1 -1
  47. package/esm/src/proxy/handler.js +25 -0
  48. package/esm/src/proxy/main.js +2 -23
  49. package/esm/src/rendering/app-route-resolver.js +0 -9
  50. package/esm/src/rendering/orchestrator/file-resolver/index.d.ts.map +1 -1
  51. package/esm/src/rendering/orchestrator/file-resolver/index.js +17 -0
  52. package/esm/src/rendering/page-resolution/page-resolver.d.ts.map +1 -1
  53. package/esm/src/rendering/page-resolution/page-resolver.js +19 -6
  54. package/esm/src/rendering/router-detection.d.ts +1 -0
  55. package/esm/src/rendering/router-detection.d.ts.map +1 -1
  56. package/esm/src/rendering/router-detection.js +3 -0
  57. package/esm/src/transforms/esm/http-cache-helpers.d.ts.map +1 -1
  58. package/esm/src/transforms/esm/http-cache-helpers.js +7 -1
  59. package/esm/src/transforms/import-rewriter/strategies/bare-strategy.d.ts.map +1 -1
  60. package/esm/src/transforms/import-rewriter/strategies/bare-strategy.js +11 -8
  61. package/esm/src/transforms/shared/package-specifier.d.ts +7 -0
  62. package/esm/src/transforms/shared/package-specifier.d.ts.map +1 -0
  63. package/esm/src/transforms/shared/package-specifier.js +19 -0
  64. package/esm/src/types/entities/getEntityInfo.d.ts.map +1 -1
  65. package/esm/src/types/entities/getEntityInfo.js +59 -42
  66. package/package.json +1 -1
  67. package/src/cli/commands/knowledge/command.ts +375 -139
  68. package/src/cli/commands/knowledge/parser-source.ts +52 -0
  69. package/src/cli/commands/knowledge/result.ts +88 -0
  70. package/src/cli/commands/knowledge/source-policy.ts +164 -0
  71. package/src/deno.js +1 -1
  72. package/src/src/jobs/index.ts +16 -0
  73. package/src/src/jobs/schemas.ts +105 -8
  74. package/src/src/platform/adapters/base.ts +5 -1
  75. package/src/src/platform/adapters/fs/github/adapter.ts +3 -2
  76. package/src/src/platform/adapters/fs/github/stat-operations.ts +3 -2
  77. package/src/src/platform/adapters/fs/veryfront/adapter.ts +24 -3
  78. package/src/src/platform/adapters/fs/veryfront/multi-project-adapter.ts +6 -3
  79. package/src/src/platform/adapters/fs/veryfront/read-operations.ts +1 -0
  80. package/src/src/platform/adapters/fs/veryfront/stat-operations.ts +161 -25
  81. package/src/src/platform/adapters/fs/veryfront/types.ts +2 -1
  82. package/src/src/platform/adapters/fs/wrapper.ts +10 -3
  83. package/src/src/proxy/error-response.ts +33 -0
  84. package/src/src/proxy/handler.ts +43 -0
  85. package/src/src/proxy/main.ts +2 -27
  86. package/src/src/rendering/app-route-resolver.ts +0 -8
  87. package/src/src/rendering/orchestrator/file-resolver/index.ts +19 -0
  88. package/src/src/rendering/page-resolution/page-resolver.ts +26 -17
  89. package/src/src/rendering/router-detection.ts +7 -0
  90. package/src/src/transforms/esm/http-cache-helpers.ts +12 -1
  91. package/src/src/transforms/import-rewriter/strategies/bare-strategy.ts +11 -12
  92. package/src/src/transforms/shared/package-specifier.ts +29 -0
  93. package/src/src/types/entities/getEntityInfo.ts +78 -59
@@ -255,6 +255,102 @@ export class StatOperations extends VeryfrontOperationsBase {
255
255
  this.cache.set(cacheKey, files);
256
256
  return files;
257
257
  }
258
+ buildResolveSearchPatterns(normalizedPath, options) {
259
+ const patterns = new Set();
260
+ const pathWithoutExt = stripKnownExtension(normalizedPath, EXTENSION_PRIORITY);
261
+ const allowPagesPrefix = options?.allowPagesPrefix !== false;
262
+ const addPattern = (pattern) => {
263
+ if (pattern.length > 0)
264
+ patterns.add(pattern);
265
+ };
266
+ if (EXTENSION_PRIORITY.some((ext) => normalizedPath.endsWith(ext))) {
267
+ addPattern(normalizedPath);
268
+ return [...patterns];
269
+ }
270
+ addPattern(`${pathWithoutExt}.*`);
271
+ if (allowPagesPrefix && !pathWithoutExt.startsWith("pages/")) {
272
+ addPattern(`pages/${pathWithoutExt}.*`);
273
+ }
274
+ addPattern(`${pathWithoutExt}/index.*`);
275
+ if (allowPagesPrefix && !pathWithoutExt.startsWith("pages/")) {
276
+ addPattern(`pages/${pathWithoutExt}/index.*`);
277
+ }
278
+ return [...patterns];
279
+ }
280
+ normalizeMatchedPaths(matches) {
281
+ return matches.map((match) => ({
282
+ path: normalizeIndexedFilePath(match).normalizedPath,
283
+ }));
284
+ }
285
+ async tryResolveViaApiSearch(normalizedPath, options) {
286
+ if (isFrameworkSourcePath(normalizedPath)) {
287
+ logger.debug("Skipping API search for framework path", { normalizedPath });
288
+ return null;
289
+ }
290
+ if (!this.apiSearchCircuitBreaker.canSearch()) {
291
+ logger.warn("API search circuit breaker open, skipping", { normalizedPath });
292
+ return undefined;
293
+ }
294
+ const patterns = this.buildResolveSearchPatterns(normalizedPath, options);
295
+ let sawSuccessfulSearch = false;
296
+ for (const pattern of patterns) {
297
+ try {
298
+ const matches = await this.client.searchFiles(pattern);
299
+ sawSuccessfulSearch = true;
300
+ this.apiSearchCircuitBreaker.recordSuccess();
301
+ const normalizedMatches = this.normalizeMatchedPaths(matches);
302
+ if (pattern === normalizedPath) {
303
+ const exactMatch = normalizedMatches.find((match) => match.path === normalizedPath);
304
+ if (exactMatch) {
305
+ logger.debug("resolveFile found exact file via API search", {
306
+ normalizedPath,
307
+ pattern,
308
+ });
309
+ return exactMatch.path;
310
+ }
311
+ continue;
312
+ }
313
+ const sortedMatches = sortPathsByExtensionPriority(normalizedMatches, EXTENSION_PRIORITY);
314
+ const first = sortedMatches[0];
315
+ if (first) {
316
+ logger.debug("resolveFile found via API search", {
317
+ normalizedPath,
318
+ pattern,
319
+ resolvedPath: first.path,
320
+ });
321
+ return first.path;
322
+ }
323
+ }
324
+ catch (error) {
325
+ const result = this.apiSearchCircuitBreaker.recordFailure();
326
+ if (result.tripped) {
327
+ logger.warn("API search circuit breaker tripped", {
328
+ failures: result.failures,
329
+ });
330
+ return undefined;
331
+ }
332
+ logger.error("API pattern search failed", { pattern, error });
333
+ }
334
+ if (!this.apiSearchCircuitBreaker.canSearch()) {
335
+ logger.warn("API search circuit breaker open, aborting remaining patterns", {
336
+ normalizedPath,
337
+ });
338
+ return undefined;
339
+ }
340
+ }
341
+ if (sawSuccessfulSearch) {
342
+ logger.debug("resolveFile not found via API search", { normalizedPath, patterns });
343
+ return null;
344
+ }
345
+ return undefined;
346
+ }
347
+ async hasCachedFileList() {
348
+ if (this.contextProvider?.hasCachedFileList) {
349
+ return await this.contextProvider.hasCachedFileList();
350
+ }
351
+ const files = await this.contextProvider?.getFileList?.();
352
+ return Array.isArray(files) && files.length > 0;
353
+ }
258
354
  async exists(path) {
259
355
  const normalizedPath = this.normalizer.normalize(path);
260
356
  try {
@@ -266,7 +362,7 @@ export class StatOperations extends VeryfrontOperationsBase {
266
362
  return false;
267
363
  }
268
364
  }
269
- async resolveFile(basePath) {
365
+ async resolveFile(basePath, options) {
270
366
  const resolveStart = performance.now();
271
367
  const normalizedPath = this.normalizer.normalize(basePath);
272
368
  const ctx = this.contextProvider?.getContentContext();
@@ -276,6 +372,31 @@ export class StatOperations extends VeryfrontOperationsBase {
276
372
  normalizedPath,
277
373
  cacheKey,
278
374
  });
375
+ const cached = await this.cache.getAsync(cacheKey);
376
+ if (cached === NOT_FOUND_SENTINEL) {
377
+ logger.debug("resolveFile cached negative result", { normalizedPath });
378
+ return null;
379
+ }
380
+ if (cached !== undefined) {
381
+ logger.debug("resolveFile cache hit", {
382
+ normalizedPath,
383
+ cached,
384
+ });
385
+ return cached;
386
+ }
387
+ const hasCachedFileList = await this.hasCachedFileList();
388
+ const attemptedApiResolve = !hasCachedFileList;
389
+ if (!hasCachedFileList) {
390
+ const apiResolved = await this.tryResolveViaApiSearch(normalizedPath, options);
391
+ if (typeof apiResolved === "string") {
392
+ this.cache.set(cacheKey, apiResolved);
393
+ return apiResolved;
394
+ }
395
+ if (apiResolved === null) {
396
+ this.cache.set(cacheKey, NOT_FOUND_SENTINEL);
397
+ return null;
398
+ }
399
+ }
279
400
  const indexStart = performance.now();
280
401
  await this.ensureIndexBuilt();
281
402
  const indexMs = Math.round(performance.now() - indexStart);
@@ -304,7 +425,7 @@ export class StatOperations extends VeryfrontOperationsBase {
304
425
  });
305
426
  return resolvedDirect;
306
427
  }
307
- if (!pathWithoutExt.startsWith("pages/")) {
428
+ if (options?.allowPagesPrefix !== false && !pathWithoutExt.startsWith("pages/")) {
308
429
  const resolvedPages = resolveByExtensionPriority(fileIdx, `pages/${pathWithoutExt}`, EXTENSION_PRIORITY);
309
430
  if (resolvedPages) {
310
431
  const totalMs = Math.round(performance.now() - resolveStart);
@@ -326,6 +447,14 @@ export class StatOperations extends VeryfrontOperationsBase {
326
447
  });
327
448
  return indexPath;
328
449
  }
450
+ if (attemptedApiResolve) {
451
+ logger.debug("resolveFile not found after pre-index API search", {
452
+ normalizedPath,
453
+ indexMs,
454
+ });
455
+ this.cache.set(cacheKey, NOT_FOUND_SENTINEL);
456
+ return null;
457
+ }
329
458
  if (isFrameworkSourcePath(normalizedPath)) {
330
459
  logger.debug("Skipping API search for framework path", { normalizedPath });
331
460
  return null;
@@ -338,29 +467,10 @@ export class StatOperations extends VeryfrontOperationsBase {
338
467
  logger.warn("API search circuit breaker open, skipping", { normalizedPath });
339
468
  return null;
340
469
  }
341
- const cacheCheckStart = performance.now();
342
- const cached = await this.cache.getAsync(cacheKey);
343
- const cacheCheckMs = Math.round(performance.now() - cacheCheckStart);
344
- if (cached === NOT_FOUND_SENTINEL) {
345
- logger.debug("resolveFile cached negative result", {
346
- normalizedPath,
347
- cacheCheckMs,
348
- });
349
- return null;
350
- }
351
- if (cached !== undefined) {
352
- logger.debug("resolveFile cache hit (unexpected)", {
353
- normalizedPath,
354
- cached,
355
- cacheCheckMs,
356
- });
357
- return cached;
358
- }
359
470
  const searchPattern = `${pathWithoutExt}.*`;
360
471
  logger.debug("Searching for file via API", {
361
472
  pattern: searchPattern,
362
473
  normalizedPath,
363
- cacheCheckMs,
364
474
  });
365
475
  try {
366
476
  const matches = await this.client.searchFiles(searchPattern);
@@ -1,3 +1,4 @@
1
+ import type { ResolveFileOptions } from "../../base.js";
1
2
  import type { Project } from "../../veryfront-api-client/index.js";
2
3
  import type { GitHubConfig } from "../github/types.js";
3
4
  import type { DirectoryEntry } from "../shared-types.js";
@@ -24,7 +25,7 @@ export interface FSAdapter {
24
25
  }): Promise<void>;
25
26
  initialize?(): Promise<void>;
26
27
  shutdown?(): Promise<void>;
27
- resolveFile?(basePath: string): Promise<string | null>;
28
+ resolveFile?(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
28
29
  }
29
30
  export interface ContextualFSAdapter extends FSAdapter {
30
31
  setRequestToken?(token: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { DirEntry, FileInfo, FileSystemAdapter, FileWatcher, WatchOptions } from "../base.js";
1
+ import type { DirEntry, FileInfo, FileSystemAdapter, FileWatcher, ResolveFileOptions, WatchOptions } from "../base.js";
2
2
  import type { DirectoryEntry, FSAdapter } from "./veryfront/types.js";
3
3
  export interface ExtendedFileSystemAdapter extends FileSystemAdapter {
4
4
  getUnderlyingAdapter(): FSAdapter;
@@ -62,7 +62,7 @@ export declare class FSAdapterWrapper implements ExtendedFileSystemAdapter {
62
62
  readDir(path: string): AsyncIterable<DirEntry>;
63
63
  readdir(path: string): Promise<DirectoryEntry[]>;
64
64
  stat(path: string): Promise<FileInfo>;
65
- resolveFile(basePath: string): Promise<string | null>;
65
+ resolveFile(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
66
66
  mkdir(path: string, options?: {
67
67
  recursive?: boolean;
68
68
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/fs/wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/fs/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAuB,cAAc,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE3F,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,oBAAoB,IAAI,SAAS,CAAC;IAClC,cAAc,IAAI,MAAM,CAAC;IACzB,kBAAkB,IAAI,OAAO,CAAC;IAC9B,kBAAkB,IAAI,OAAO,CAAC;IAC9B,gBAAgB,IAAI,OAAO,CAAC;IAC5B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACrE,cAAc,CAAC,CAAC,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,GACA,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,EAAE,IAAI,yBAAyB,CAE1F;AAYD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAKlE;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAQpD;AAMD,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE3B,SAAS,EAAE,SAAS;IAIhC,oBAAoB,IAAI,SAAS;IAIjC,cAAc,IAAI,MAAM;IAIxB,kBAAkB,IAAI,OAAO;IAK7B,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAKrB;IAED,OAAO,CAAC,uBAAuB;IAU/B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI7C,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,kBAAkB,IAAI,IAAI;IAI1B,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIpE,cAAc,CAAC,CAAC,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,GACA,OAAO,CAAC,CAAC,CAAC;IAUb,kBAAkB,IAAI,OAAO;IAK7B,gBAAgB,IAAI,OAAO;IAIrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAIxB,aAAa;IAWpB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAYrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI1C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAW3C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK7E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW;IAIhE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,yBAAyB,CAE7E"}
@@ -144,10 +144,10 @@ export class FSAdapterWrapper {
144
144
  mtime: info.mtime,
145
145
  };
146
146
  }
147
- resolveFile(basePath) {
147
+ resolveFile(basePath, options) {
148
148
  if (!this._fsAdapter.resolveFile)
149
149
  throw new NotSupportedError("resolveFile", this.adapterType);
150
- return this._fsAdapter.resolveFile(basePath);
150
+ return this._fsAdapter.resolveFile(basePath, options);
151
151
  }
152
152
  async mkdir(path, options) {
153
153
  if (!this._fsAdapter.mkdir)
@@ -0,0 +1,7 @@
1
+ import * as dntShim from "../../_dnt.shims.js";
2
+ import type { ProxyContext } from "./handler.js";
3
+ type ProxyError = NonNullable<ProxyContext["error"]>;
4
+ export declare function jsonErrorResponse(status: number, body: Record<string, unknown>): dntShim.Response;
5
+ export declare function createProxyErrorResponse(error: ProxyError): dntShim.Response;
6
+ export {};
7
+ //# sourceMappingURL=error-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-response.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/error-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAKjG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAmB5E"}
@@ -0,0 +1,26 @@
1
+ import * as dntShim from "../../_dnt.shims.js";
2
+ import { ErrorPages } from "../server/utils/error-html.js";
3
+ export function jsonErrorResponse(status, body) {
4
+ return new dntShim.Response(JSON.stringify(body), {
5
+ status,
6
+ headers: { "Content-Type": "application/json" },
7
+ });
8
+ }
9
+ export function createProxyErrorResponse(error) {
10
+ if (error.redirectUrl) {
11
+ return new dntShim.Response(null, {
12
+ status: 302,
13
+ headers: { Location: error.redirectUrl },
14
+ });
15
+ }
16
+ if (error.slug === "release-not-found" || error.slug === "project-not-found") {
17
+ return new dntShim.Response(ErrorPages.notFound(), {
18
+ status: 404,
19
+ headers: { "Content-Type": "text/html; charset=utf-8" },
20
+ });
21
+ }
22
+ return jsonErrorResponse(error.status, {
23
+ error: error.message,
24
+ status: error.status,
25
+ });
26
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAoGX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA8ED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BAiL1B,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BA+NvC,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BArVrD,MAAM,EAAE;;EAmYpC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAwB7F"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAoGX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAoFD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BAiL1B,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BAoQvC,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BA1XrD,MAAM,EAAE;;EAwapC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAwB7F"}
@@ -90,6 +90,11 @@ function extractUserToken(cookieHeader) {
90
90
  const match = cookieHeader.match(/(?:^|;\s*)authToken=([^;]+)/);
91
91
  return match?.[1] ? decodeURIComponent(match[1]) : undefined;
92
92
  }
93
+ function getStatusFromError(error) {
94
+ const message = error instanceof Error ? error.message : String(error);
95
+ const match = message.match(/failed: (\d+)/);
96
+ return match ? Number(match[1]) : null;
97
+ }
93
98
  async function extractUserIdFromToken(token, apiBaseUrl, log) {
94
99
  let algorithm;
95
100
  try {
@@ -304,6 +309,7 @@ export function createProxyHandler(options) {
304
309
  const cookieHeader = req.headers.get("cookie") ?? "";
305
310
  const userToken = extractUserToken(cookieHeader);
306
311
  let token;
312
+ let tokenFetchError;
307
313
  if (isLocalProject) {
308
314
  logger?.debug("Local project, skipping token fetch", { localPath });
309
315
  }
@@ -319,6 +325,7 @@ export function createProxyHandler(options) {
319
325
  token = await tokenManager.getToken(scope, projectSlug, customDomain);
320
326
  }
321
327
  catch (error) {
328
+ tokenFetchError = error;
322
329
  logger?.error("Token fetch failed", error, { projectSlug, customDomain });
323
330
  }
324
331
  }
@@ -328,6 +335,20 @@ export function createProxyHandler(options) {
328
335
  logger?.debug("Using static API token fallback");
329
336
  }
330
337
  const base = { scope, host, parsedDomain };
338
+ if (projectSlug && scope === "preview" && !token) {
339
+ const status = getStatusFromError(tokenFetchError);
340
+ if (status === 404) {
341
+ logger?.info("Preview project not found", { projectSlug, host });
342
+ return makeErrorContext(base, 404, "Preview project not found", undefined, undefined, "project-not-found");
343
+ }
344
+ logger?.warn("Preview request has no usable token", {
345
+ projectSlug,
346
+ host,
347
+ hadUserToken: !!userToken,
348
+ hadTokenFetchError: !!tokenFetchError,
349
+ });
350
+ return makeErrorContext(base, 502, "Failed to authenticate preview request");
351
+ }
331
352
  if (isCustomDomain && !projectSlug) {
332
353
  if (!token) {
333
354
  logger?.error("Cannot process custom domain without token", undefined, { domain: host });
@@ -380,6 +401,10 @@ export function createProxyHandler(options) {
380
401
  if ("error" in resolved) {
381
402
  return makeErrorContext(base, resolved.error.status, resolved.error.message, token, resolved.error.redirectUrl);
382
403
  }
404
+ if (!resolved.projectId) {
405
+ logger?.info("Preview project not found after lookup", { projectSlug, host });
406
+ return makeErrorContext(base, 404, "Preview project not found", token, undefined, "project-not-found");
407
+ }
383
408
  projectId = resolved.projectId;
384
409
  environmentId = resolved.environmentId;
385
410
  if (projectId) {
@@ -25,12 +25,12 @@ import { createCacheFromEnv } from "./cache/index.js";
25
25
  import { isRetryableConnectionError } from "./retry.js";
26
26
  import { endSpan, extractContext, initializeOTLPWithApis, injectContext, ProxySpanNames, shutdownOTLP, startServerSpan, withContext, withSpan, } from "./tracing.js";
27
27
  import { proxyLogger, runWithProxyRequestContext } from "./logger.js";
28
- import { ErrorPages } from "../server/utils/error-html.js";
29
28
  import { RendererRouter } from "./renderer-router.js";
30
29
  import { ServerResolver } from "./server-resolver.js";
31
30
  import { parseProjectDomain } from "../server/utils/domain-parser.js";
32
31
  import { exit, getEnv, onSignal } from "../platform/compat/process.js";
33
32
  import { createHttpServer, upgradeWebSocket } from "../platform/compat/http/index.js";
33
+ import { createProxyErrorResponse, jsonErrorResponse } from "./error-response.js";
34
34
  function getLocalProjects() {
35
35
  const raw = getEnv("LOCAL_PROJECTS");
36
36
  return raw ? JSON.parse(raw) : {};
@@ -223,12 +223,6 @@ function handleWebSocketUpgrade(req) {
223
223
  };
224
224
  return response;
225
225
  }
226
- function jsonErrorResponse(status, body) {
227
- return new dntShim.Response(JSON.stringify(body), {
228
- status,
229
- headers: { "Content-Type": "application/json" },
230
- });
231
- }
232
226
  function forwardToServer(req) {
233
227
  const startTime = performance.now();
234
228
  const url = new URL(req.url);
@@ -254,22 +248,7 @@ function forwardToServer(req) {
254
248
  const logLevel = ctx.error.status < 500 ? "warn" : "error";
255
249
  proxyLogger[logLevel](`${ctx.error.status} ${req.method} ${url.pathname}`, { ms });
256
250
  endSpan(spanInfo?.span, ctx.error.status);
257
- if (ctx.error.redirectUrl) {
258
- return new dntShim.Response(null, {
259
- status: 302,
260
- headers: { Location: ctx.error.redirectUrl },
261
- });
262
- }
263
- if (ctx.error.slug === "release-not-found") {
264
- return new dntShim.Response(ErrorPages.notFound(), {
265
- status: 404,
266
- headers: { "Content-Type": "text/html; charset=utf-8" },
267
- });
268
- }
269
- return jsonErrorResponse(ctx.error.status, {
270
- error: ctx.error.message,
271
- status: ctx.error.status,
272
- });
251
+ return createProxyErrorResponse(ctx.error);
273
252
  }
274
253
  const reqLogger = proxyLogger.child({
275
254
  ...(ctx.projectSlug && { project: ctx.projectSlug }),
@@ -94,15 +94,6 @@ async function findDynamicDir(dir, adapter) {
94
94
  return null;
95
95
  }
96
96
  async function tryLoadPageFile(file, slug, adapter) {
97
- try {
98
- const info = await adapter.fs.stat(file);
99
- if (!info.isFile)
100
- return null;
101
- }
102
- catch (_) {
103
- /* expected: file may not exist */
104
- return null;
105
- }
106
97
  let raw;
107
98
  try {
108
99
  raw = await adapter.fs.readFile(file);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/rendering/orchestrator/file-resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzE,wBAAgB,cAAc,IAAI,MAAM,CASvC;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/rendering/orchestrator/file-resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzE,wBAAgB,cAAc,IAAI,MAAM,CASvC;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCxB"}
@@ -5,6 +5,7 @@
5
5
  *
6
6
  * @module rendering/orchestrator/file-resolver
7
7
  */
8
+ import { join } from "../../../platform/compat/path/index.js";
8
9
  import { rendererLogger as logger } from "../../../utils/index.js";
9
10
  import { buildCandidatePaths, findFirstExisting } from "./candidates.js";
10
11
  export { buildCandidatePaths, findFirstExisting } from "./candidates.js";
@@ -26,6 +27,22 @@ export async function findLocalLibFile(relativePath, localAdapter) {
26
27
  return result;
27
28
  }
28
29
  export async function findSourceFile(basePath, projectDir, adapter) {
30
+ if (adapter.fs.resolveFile) {
31
+ const directBases = [join(projectDir, basePath)];
32
+ const withoutComponents = basePath.replace(/^components\//, "");
33
+ if (withoutComponents !== basePath) {
34
+ directBases.push(join(projectDir, withoutComponents));
35
+ }
36
+ for (const candidateBase of directBases) {
37
+ const resolved = await adapter.fs.resolveFile(candidateBase, {
38
+ allowPagesPrefix: false,
39
+ });
40
+ if (resolved) {
41
+ logger.debug("[FileResolver] Found file via resolveFile:", resolved);
42
+ return resolved;
43
+ }
44
+ }
45
+ }
29
46
  const candidates = buildCandidatePaths(projectDir, basePath, SOURCE_EXTENSIONS);
30
47
  const withoutComponents = basePath.replace(/^components\//, "");
31
48
  if (withoutComponents !== basePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"page-resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/page-resolution/page-resolver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAgCvD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,mBAAmB;IAOxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDxC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAoCxB,sBAAsB;IAoD9B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY1C,aAAa,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;CAShD"}
1
+ {"version":3,"file":"page-resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/page-resolution/page-resolver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAoCvD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,mBAAmB;IAOxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsDxC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAoCxB,sBAAsB;IAoD9B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY1C,aAAa,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;CAShD"}
@@ -4,7 +4,7 @@ import { VeryfrontError } from "../../errors/index.js";
4
4
  import { FILE_NOT_FOUND } from "../../errors/error-registry.js";
5
5
  import { withSpan } from "../../observability/tracing/otlp-setup.js";
6
6
  import { getEntityBySlug } from "../../types/entities/getEntityInfo.js";
7
- import { detectAppRouter, getAppRouteEntity } from "../router-detection.js";
7
+ import { detectAppRouter, getAppRouteEntity, primeRouterDetectionCache, } from "../router-detection.js";
8
8
  const PAGE_EXTENSIONS = /\.(mdx|md|tsx|jsx|ts|js)$/;
9
9
  const APP_ROUTER_PAGE_PATTERN = /^page\.(mdx|md|tsx|jsx|ts|js)$/;
10
10
  function isPageFile(name) {
@@ -40,20 +40,33 @@ export class PageResolver {
40
40
  }
41
41
  resolvePage(slug) {
42
42
  return withSpan("routing.resolve_page", async () => {
43
- const useAppRouter = await detectAppRouter(this.projectDir, this.config, this.adapter, { projectId: this.projectId });
44
43
  const appDirName = this.config.directories?.app ?? "app";
44
+ const cacheKey = this.projectId ?? this.projectDir;
45
45
  let pageInfo;
46
- if (useAppRouter) {
46
+ if (this.config.router === "app") {
47
+ pageInfo = await getAppRouteEntity(this.projectDir, slug, this.adapter, appDirName);
48
+ if (pageInfo) {
49
+ primeRouterDetectionCache(cacheKey, "app");
50
+ }
51
+ }
52
+ else if (this.config.router === "pages") {
53
+ pageInfo = await getEntityBySlug(this.projectDir, slug, this.adapter);
54
+ if (pageInfo) {
55
+ primeRouterDetectionCache(cacheKey, "pages");
56
+ }
57
+ }
58
+ else {
59
+ // Auto mode stays structural: a single resolved route must not pin router mode
60
+ // for projects that are still transitioning between app/ and pages/.
47
61
  pageInfo = await getAppRouteEntity(this.projectDir, slug, this.adapter, appDirName);
48
62
  if (!pageInfo) {
49
- logger.debug("App Router resolution failed, falling back to Pages Router", { slug });
63
+ pageInfo = await getEntityBySlug(this.projectDir, slug, this.adapter);
50
64
  }
51
65
  }
52
- pageInfo ??= await getEntityBySlug(this.projectDir, slug, this.adapter);
53
66
  if (!pageInfo) {
54
67
  throw FILE_NOT_FOUND.create({
55
68
  detail: `Page not found: ${slug}`,
56
- context: { slug, useAppRouter },
69
+ context: { slug, router: this.config.router ?? "auto" },
57
70
  });
58
71
  }
59
72
  return pageInfo;
@@ -21,6 +21,7 @@ export declare function clearRouterDetectionCache(): void;
21
21
  * @param projectId - The project ID used as cache key. Falls back to projectDir for local dev.
22
22
  */
23
23
  export declare function clearRouterDetectionCacheForProject(projectId: string): void;
24
+ export declare function primeRouterDetectionCache(projectKey: string, mode: "app" | "pages"): void;
24
25
  export interface DetectAppRouterOptions {
25
26
  /** Project ID for cache isolation in multi-tenant deployments */
26
27
  projectId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"router-detection.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/router-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;4BAO4B;AAK5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAY5D;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
1
+ {"version":3,"file":"router-detection.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/router-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;4BAO4B;AAK5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAY5D;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,KAAK,GAAG,OAAO,GACpB,IAAI,CAEN;AAED,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
@@ -38,6 +38,9 @@ export function clearRouterDetectionCache() {
38
38
  export function clearRouterDetectionCacheForProject(projectId) {
39
39
  routerDetectionCache.delete(projectId);
40
40
  }
41
+ export function primeRouterDetectionCache(projectKey, mode) {
42
+ routerDetectionCache.set(projectKey, mode === "app");
43
+ }
41
44
  /**
42
45
  * Detect if app router should be used based on config and directory structure.
43
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"http-cache-helpers.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/http-cache-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAKzE;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACvB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAqBhD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BpD;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,eAAe,EAC1B,YAAY,GAAE,MAA8B,GAC3C,MAAM,CAmBR;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAkBrF"}
1
+ {"version":3,"file":"http-cache-helpers.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/http-cache-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAOzE;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACvB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAqBhD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BpD;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,eAAe,EAC1B,YAAY,GAAE,MAA8B,GAC3C,MAAM,CA4BR;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAkBrF"}
@@ -7,6 +7,8 @@ import { isAbsolute, join } from "../../platform/compat/path/index.js";
7
7
  import { cwd } from "../../platform/compat/process.js";
8
8
  import { rendererLogger } from "../../utils/index.js";
9
9
  import { resolveImport } from "../../modules/import-map/resolver.js";
10
+ import { buildEsmShUrl } from "../import-rewriter/url-builder.js";
11
+ import { parseBarePackageSpecifier } from "../shared/package-specifier.js";
10
12
  import { DEFAULT_REACT_VERSION, getReactImportMap } from "./package-registry.js";
11
13
  const logger = rendererLogger.component("http-cache");
12
14
  export function ensureAbsoluteDir(path) {
@@ -100,7 +102,11 @@ export function resolveBareSpecifier(specifier, importMap, reactVersion = DEFAUL
100
102
  const mapped = resolveImport(specifier, importMap);
101
103
  if (mapped !== specifier)
102
104
  return mapped;
103
- return `https://esm.sh/${specifier}?target=es2022`;
105
+ const parsed = parseBarePackageSpecifier(specifier);
106
+ if (parsed == null) {
107
+ return `https://esm.sh/${specifier}?target=es2022`;
108
+ }
109
+ return buildEsmShUrl(parsed.packageName, parsed.version ?? undefined, parsed.subpath ?? undefined);
104
110
  }
105
111
  /**
106
112
  * Check if cached HTTP bundle code has file:// paths from a different environment.
@@ -1 +1 @@
1
- {"version":3,"file":"bare-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/import-rewriter/strategies/bare-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAiCrB,qBAAa,YAAa,YAAW,qBAAqB;IACxD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,KAAK;IAEtB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO;IAsBzD,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa;CAsBvE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"bare-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/import-rewriter/strategies/bare-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AA8BrB,qBAAa,YAAa,YAAW,qBAAqB;IACxD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,KAAK;IAEtB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO;IAsBzD,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa;CAwBvE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}