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.
- package/esm/cli/commands/knowledge/command.d.ts +10 -13
- package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
- package/esm/cli/commands/knowledge/command.js +294 -110
- package/esm/cli/commands/knowledge/parser-source.d.ts.map +1 -1
- package/esm/cli/commands/knowledge/parser-source.js +52 -0
- package/esm/cli/commands/knowledge/result.d.ts +54 -0
- package/esm/cli/commands/knowledge/result.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/result.js +22 -0
- package/esm/cli/commands/knowledge/source-policy.d.ts +11 -0
- package/esm/cli/commands/knowledge/source-policy.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/source-policy.js +135 -0
- package/esm/deno.js +1 -1
- package/esm/src/jobs/index.d.ts +1 -1
- package/esm/src/jobs/index.d.ts.map +1 -1
- package/esm/src/jobs/index.js +1 -1
- package/esm/src/jobs/schemas.d.ts +1104 -185
- package/esm/src/jobs/schemas.d.ts.map +1 -1
- package/esm/src/jobs/schemas.js +81 -8
- package/esm/src/platform/adapters/base.d.ts +4 -1
- package/esm/src/platform/adapters/base.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/adapter.d.ts +2 -1
- package/esm/src/platform/adapters/fs/github/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/adapter.js +2 -2
- package/esm/src/platform/adapters/fs/github/stat-operations.d.ts +2 -1
- package/esm/src/platform/adapters/fs/github/stat-operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/stat-operations.js +2 -2
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts +2 -2
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/adapter.js +17 -2
- package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.d.ts +2 -2
- package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.js +2 -2
- package/esm/src/platform/adapters/fs/veryfront/read-operations.d.ts +1 -0
- package/esm/src/platform/adapters/fs/veryfront/read-operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts +6 -2
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +131 -21
- package/esm/src/platform/adapters/fs/veryfront/types.d.ts +2 -1
- package/esm/src/platform/adapters/fs/veryfront/types.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/wrapper.d.ts +2 -2
- package/esm/src/platform/adapters/fs/wrapper.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/wrapper.js +2 -2
- package/esm/src/proxy/error-response.d.ts +7 -0
- package/esm/src/proxy/error-response.d.ts.map +1 -0
- package/esm/src/proxy/error-response.js +26 -0
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +25 -0
- package/esm/src/proxy/main.js +2 -23
- package/esm/src/rendering/app-route-resolver.js +0 -9
- package/esm/src/rendering/orchestrator/file-resolver/index.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/file-resolver/index.js +17 -0
- package/esm/src/rendering/page-resolution/page-resolver.d.ts.map +1 -1
- package/esm/src/rendering/page-resolution/page-resolver.js +19 -6
- package/esm/src/rendering/router-detection.d.ts +1 -0
- package/esm/src/rendering/router-detection.d.ts.map +1 -1
- package/esm/src/rendering/router-detection.js +3 -0
- package/esm/src/transforms/esm/http-cache-helpers.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache-helpers.js +7 -1
- package/esm/src/transforms/import-rewriter/strategies/bare-strategy.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/strategies/bare-strategy.js +11 -8
- package/esm/src/transforms/shared/package-specifier.d.ts +7 -0
- package/esm/src/transforms/shared/package-specifier.d.ts.map +1 -0
- package/esm/src/transforms/shared/package-specifier.js +19 -0
- package/esm/src/types/entities/getEntityInfo.d.ts.map +1 -1
- package/esm/src/types/entities/getEntityInfo.js +59 -42
- package/package.json +1 -1
- package/src/cli/commands/knowledge/command.ts +375 -139
- package/src/cli/commands/knowledge/parser-source.ts +52 -0
- package/src/cli/commands/knowledge/result.ts +88 -0
- package/src/cli/commands/knowledge/source-policy.ts +164 -0
- package/src/deno.js +1 -1
- package/src/src/jobs/index.ts +16 -0
- package/src/src/jobs/schemas.ts +105 -8
- package/src/src/platform/adapters/base.ts +5 -1
- package/src/src/platform/adapters/fs/github/adapter.ts +3 -2
- package/src/src/platform/adapters/fs/github/stat-operations.ts +3 -2
- package/src/src/platform/adapters/fs/veryfront/adapter.ts +24 -3
- package/src/src/platform/adapters/fs/veryfront/multi-project-adapter.ts +6 -3
- package/src/src/platform/adapters/fs/veryfront/read-operations.ts +1 -0
- package/src/src/platform/adapters/fs/veryfront/stat-operations.ts +161 -25
- package/src/src/platform/adapters/fs/veryfront/types.ts +2 -1
- package/src/src/platform/adapters/fs/wrapper.ts +10 -3
- package/src/src/proxy/error-response.ts +33 -0
- package/src/src/proxy/handler.ts +43 -0
- package/src/src/proxy/main.ts +2 -27
- package/src/src/rendering/app-route-resolver.ts +0 -8
- package/src/src/rendering/orchestrator/file-resolver/index.ts +19 -0
- package/src/src/rendering/page-resolution/page-resolver.ts +26 -17
- package/src/src/rendering/router-detection.ts +7 -0
- package/src/src/transforms/esm/http-cache-helpers.ts +12 -1
- package/src/src/transforms/import-rewriter/strategies/bare-strategy.ts +11 -12
- package/src/src/transforms/shared/package-specifier.ts +29 -0
- 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":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;IACrD,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;KACpB,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAElF,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,WAAW,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;
|
|
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":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/fs/wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|
package/esm/src/proxy/handler.js
CHANGED
|
@@ -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) {
|
package/esm/src/proxy/main.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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;
|
|
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 (
|
|
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
|
-
|
|
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,
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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"}
|