veryfront 0.1.817 → 0.1.819
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/deno.js +1 -1
- package/esm/src/platform/adapters/base.d.ts +2 -0
- package/esm/src/platform/adapters/base.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/cache/file-cache.d.ts +1 -0
- package/esm/src/platform/adapters/fs/cache/file-cache.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/cache/file-cache.js +10 -0
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts +1 -0
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/adapter.js +37 -0
- package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.d.ts +1 -0
- 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 +4 -0
- package/esm/src/platform/adapters/fs/veryfront/types.d.ts +1 -0
- package/esm/src/platform/adapters/fs/veryfront/types.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/wrapper.d.ts +1 -0
- package/esm/src/platform/adapters/fs/wrapper.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/wrapper.js +4 -0
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +220 -30
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/pipeline.js +28 -1
- package/esm/src/rendering/page-rendering.d.ts +10 -0
- package/esm/src/rendering/page-rendering.d.ts.map +1 -1
- package/esm/src/rendering/page-rendering.js +64 -2
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts +1 -0
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +35 -0
- package/esm/src/transforms/mdx/esm-module-loader/index.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/index.js +1 -1
- package/esm/src/utils/memory/profiler.d.ts +22 -0
- package/esm/src/utils/memory/profiler.d.ts.map +1 -1
- package/esm/src/utils/memory/profiler.js +48 -3
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
package/esm/deno.js
CHANGED
|
@@ -117,6 +117,8 @@ export interface FileSystemAdapter {
|
|
|
117
117
|
watch(paths: string | string[], options?: WatchOptions): FileWatcher;
|
|
118
118
|
/** Resolve a file path with extension fallback (e.g., pages/test → pages/test.mdx) */
|
|
119
119
|
resolveFile?(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
|
|
120
|
+
/** Refresh remote source snapshots when a preview render detects stale cached content. */
|
|
121
|
+
refreshSourceSnapshot?(reason?: string): Promise<void>;
|
|
120
122
|
}
|
|
121
123
|
export interface ResolveFileOptions {
|
|
122
124
|
allowPagesPrefix?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/adapters/base.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/adapters/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,7 @@ export declare class FileCache {
|
|
|
60
60
|
private setToFallback;
|
|
61
61
|
has(key: string): boolean;
|
|
62
62
|
delete(key: string): boolean;
|
|
63
|
+
deleteAsync(key: string): Promise<boolean>;
|
|
63
64
|
deleteByPrefix(prefix: string): number;
|
|
64
65
|
deleteByPrefixAsync(prefix: string): Promise<number>;
|
|
65
66
|
deleteByPrefixAndSuffix(prefix: string, suffix: string): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/cache/file-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAc,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkC3E;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CAwBnE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,OAAO,GAAE,gBAAqB;IAc1C,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IA4BlC;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAmChD;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAsBnC;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD,mEAAmE;IACnE,OAAO,CAAC,aAAa;IAWrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAezB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAqBtC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAsB/D,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB7E,KAAK,IAAI,IAAI;IAOb,KAAK,IAAI,UAAU,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAazC,YAAY,IAAI,MAAM;IAetB,OAAO,CAAC,qBAAqB;CAoB9B"}
|
|
1
|
+
{"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/cache/file-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAc,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkC3E;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CAwBnE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,OAAO,GAAE,gBAAqB;IAc1C,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IA4BlC;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAmChD;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAsBnC;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD,mEAAmE;IACnE,OAAO,CAAC,aAAa;IAWrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAezB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAqBtC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAsB/D,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB7E,KAAK,IAAI,IAAI;IAOb,KAAK,IAAI,UAAU,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAazC,YAAY,IAAI,MAAM;IAetB,OAAO,CAAC,qBAAqB;CAoB9B"}
|
|
@@ -242,6 +242,16 @@ export class FileCache {
|
|
|
242
242
|
this.fallbackMemoryUsed -= entry.size;
|
|
243
243
|
return this.fallbackCache.delete(key);
|
|
244
244
|
}
|
|
245
|
+
deleteAsync(key) {
|
|
246
|
+
return withSpan("platform.fs.cache.deleteAsync", async () => {
|
|
247
|
+
const deletedFromFallback = this.delete(key);
|
|
248
|
+
const backend = this.getBackend();
|
|
249
|
+
if (backend) {
|
|
250
|
+
await backend.del(key);
|
|
251
|
+
}
|
|
252
|
+
return deletedFromFallback;
|
|
253
|
+
}, { "cache.key": key });
|
|
254
|
+
}
|
|
245
255
|
deleteByPrefix(prefix) {
|
|
246
256
|
let count = 0;
|
|
247
257
|
for (const key of this.fallbackCache.keys()) {
|
|
@@ -39,6 +39,7 @@ export declare class VeryfrontFSAdapter implements FSAdapter {
|
|
|
39
39
|
private isPersistentCacheInvalidated;
|
|
40
40
|
private shouldBackgroundPregenerateStyles;
|
|
41
41
|
private scheduleFileListWarmup;
|
|
42
|
+
refreshSourceSnapshot(reason?: string): Promise<void>;
|
|
42
43
|
getPokeMetrics(): {
|
|
43
44
|
received: number;
|
|
44
45
|
invalidationsTriggered: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EACd,SAAS,EACT,eAAe,EAEf,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAoDnE,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAS;IAE5B,kFAAkF;IAClF,OAAO,CAAC,oBAAoB,CAA6B;IACzD,0EAA0E;IAC1E,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,WAAW,CAAC,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAmB;IAEpC,4DAA4D;IAC5D,OAAO,CAAC,aAAa,CAAuB;IAE5C,+CAA+C;IAC/C,OAAO,CAAC,aAAa,CAAgB;IACrC,iGAAiG;IACjG,OAAO,CAAC,cAAc,CAAuC;IAC7D,mFAAmF;IACnF,OAAO,CAAC,SAAS,CAAU;IAE3B,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,qBAAqB;YAMf,sBAAsB;gBA4BxB,MAAM,EAAE,eAAe;IAmI7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyJjC,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,iCAAiC;IAOzC,OAAO,CAAC,sBAAsB;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -377,6 +377,43 @@ export class VeryfrontFSAdapter {
|
|
|
377
377
|
this.fileListWarmupKey = effectiveCacheKey;
|
|
378
378
|
this.readOps.setFileListReadyPromise(warmupPromise);
|
|
379
379
|
}
|
|
380
|
+
async refreshSourceSnapshot(reason = "manual-refresh") {
|
|
381
|
+
await this.ensureInitialized();
|
|
382
|
+
if (!this.contentContext) {
|
|
383
|
+
logger.debug("Skipping source snapshot refresh without content context", {
|
|
384
|
+
reason,
|
|
385
|
+
projectSlug: this.projectSlug,
|
|
386
|
+
});
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const cacheKey = buildFileListCacheKey(this.contentContext);
|
|
390
|
+
const refreshContext = this.contentContext;
|
|
391
|
+
this.fileListWarmupPromise = null;
|
|
392
|
+
this.fileListWarmupKey = null;
|
|
393
|
+
this.readOps.clearFileListIndex();
|
|
394
|
+
this.statOps.clearIndex();
|
|
395
|
+
this.dirOps.clearTree();
|
|
396
|
+
await this.cache.deleteAsync(cacheKey);
|
|
397
|
+
const files = await fetchFileListForContext(this.client, refreshContext);
|
|
398
|
+
await this.cache.setAsync(cacheKey, files);
|
|
399
|
+
const fileSummary = summarizeFileList(files);
|
|
400
|
+
if (fileSummary.sourceFilesWithContent > 0 && this.shouldBackgroundPregenerateStyles()) {
|
|
401
|
+
this.triggerCSSPregeneration(files).catch(() => {
|
|
402
|
+
// Error already logged in triggerCSSPregeneration
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
logger.info("Refreshed source snapshot", {
|
|
406
|
+
reason,
|
|
407
|
+
cacheKey,
|
|
408
|
+
projectSlug: this.projectSlug,
|
|
409
|
+
sourceType: refreshContext.sourceType,
|
|
410
|
+
branch: refreshContext.branch,
|
|
411
|
+
environmentName: refreshContext.environmentName,
|
|
412
|
+
releaseId: refreshContext.releaseId,
|
|
413
|
+
totalFiles: fileSummary.totalFiles,
|
|
414
|
+
filesWithContent: fileSummary.filesWithContent,
|
|
415
|
+
});
|
|
416
|
+
}
|
|
380
417
|
getPokeMetrics() {
|
|
381
418
|
return this.wsManager.getPokeMetrics();
|
|
382
419
|
}
|
|
@@ -30,6 +30,7 @@ export declare class MultiProjectFSAdapter implements FSAdapter {
|
|
|
30
30
|
*/
|
|
31
31
|
readDir(path: string): AsyncIterable<DirectoryEntry>;
|
|
32
32
|
resolveFile(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
|
|
33
|
+
refreshSourceSnapshot(reason?: string): Promise<void>;
|
|
33
34
|
dispose(): void;
|
|
34
35
|
getManagerStats(): ReturnType<ProxyFSAdapterManager["getStats"]>;
|
|
35
36
|
getProjectData(): Promise<ReturnType<VeryfrontFSAdapter["getProjectData"]> | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-project-adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/multi-project-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,qBAAa,qBAAsB,YAAW,SAAS;IACrD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAqB;gBAEhC,MAAM,EAAE,eAAe;IAanC,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;IA8Cb,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3D,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;YAIxD,UAAU;IAgDxB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIpD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKtD;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC;IAOrD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"multi-project-adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/multi-project-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,qBAAa,qBAAsB,YAAW,SAAS;IACrD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAqB;gBAEhC,MAAM,EAAE,eAAe;IAanC,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;IA8Cb,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3D,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;YAIxD,UAAU;IAgDxB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIpD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKtD;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC;IAOrD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKnB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,OAAO,IAAI,IAAI;IAOf,eAAe,IAAI,UAAU,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAI1D,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC;IAUvF,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAUpE,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAoB9E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,qBAAqB,CAExF"}
|
|
@@ -143,6 +143,10 @@ export class MultiProjectFSAdapter {
|
|
|
143
143
|
const adapter = await this.getAdapter();
|
|
144
144
|
return adapter.resolveFile(basePath, options);
|
|
145
145
|
}
|
|
146
|
+
async refreshSourceSnapshot(reason) {
|
|
147
|
+
const adapter = await this.getAdapter();
|
|
148
|
+
await adapter.refreshSourceSnapshot(reason);
|
|
149
|
+
}
|
|
146
150
|
dispose() {
|
|
147
151
|
this.manager.dispose();
|
|
148
152
|
this.defaultAdapter?.dispose();
|
|
@@ -26,6 +26,7 @@ export interface FSAdapter {
|
|
|
26
26
|
initialize?(): Promise<void>;
|
|
27
27
|
shutdown?(): Promise<void>;
|
|
28
28
|
resolveFile?(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
|
|
29
|
+
refreshSourceSnapshot?(reason?: string): Promise<void>;
|
|
29
30
|
}
|
|
30
31
|
export interface ContextualFSAdapter extends FSAdapter {
|
|
31
32
|
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,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,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,EAAE,OAAO,CAAC,EAAE,kBAAkB,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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"}
|
|
@@ -33,6 +33,7 @@ export declare class NotSupportedError extends Error {
|
|
|
33
33
|
}
|
|
34
34
|
export declare class FSAdapterWrapper implements ExtendedFileSystemAdapter {
|
|
35
35
|
private readonly _fsAdapter;
|
|
36
|
+
readonly refreshSourceSnapshot?: (reason?: string) => Promise<void>;
|
|
36
37
|
constructor(fsAdapter: FSAdapter);
|
|
37
38
|
getUnderlyingAdapter(): FSAdapter;
|
|
38
39
|
getAdapterType(): string;
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/fs/wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,8 +36,12 @@ function isContextualAdapter(adapter) {
|
|
|
36
36
|
}
|
|
37
37
|
export class FSAdapterWrapper {
|
|
38
38
|
_fsAdapter;
|
|
39
|
+
refreshSourceSnapshot;
|
|
39
40
|
constructor(fsAdapter) {
|
|
40
41
|
this._fsAdapter = fsAdapter;
|
|
42
|
+
if (typeof fsAdapter.refreshSourceSnapshot === "function") {
|
|
43
|
+
this.refreshSourceSnapshot = (reason) => fsAdapter.refreshSourceSnapshot.call(fsAdapter, reason);
|
|
44
|
+
}
|
|
41
45
|
}
|
|
42
46
|
getUnderlyingAdapter() {
|
|
43
47
|
return this._fsAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"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"}
|
package/esm/src/proxy/handler.js
CHANGED
|
@@ -2,6 +2,7 @@ import { TokenManager } from "./token-manager.js";
|
|
|
2
2
|
import { parseProjectDomain } from "../server/utils/domain-parser.js";
|
|
3
3
|
import { injectContext, ProxySpanNames, withSpan } from "./tracing.js";
|
|
4
4
|
import { computeContentSourceId } from "../cache/keys.js";
|
|
5
|
+
import { getEnv } from "../platform/compat/process.js";
|
|
5
6
|
import { checkProtectedProxyAccess } from "./proxy-access-control.js";
|
|
6
7
|
import { createLocalProjectResolver } from "./local-project-resolver.js";
|
|
7
8
|
import { isMissingCustomDomainProjectError, resolveProxyRequestToken, } from "./proxy-token-resolution.js";
|
|
@@ -42,6 +43,18 @@ function isSignedInternalControlPlaneRequest(req, url) {
|
|
|
42
43
|
}
|
|
43
44
|
return !!req.headers.get("x-token");
|
|
44
45
|
}
|
|
46
|
+
const DEFAULT_PROXY_ROUTING_CACHE_TTL_MS = 60_000;
|
|
47
|
+
const DEFAULT_PROXY_ROUTING_CACHE_MAX_ENTRIES = 1_000;
|
|
48
|
+
function readNonNegativeIntegerEnv(name, fallback) {
|
|
49
|
+
const raw = getEnv(name);
|
|
50
|
+
if (!raw)
|
|
51
|
+
return fallback;
|
|
52
|
+
const value = Number(raw);
|
|
53
|
+
return Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;
|
|
54
|
+
}
|
|
55
|
+
function normalizeProjectLookupKey(lookupKey) {
|
|
56
|
+
return lookupKey.trim().replace(/:\d+$/, "").toLowerCase();
|
|
57
|
+
}
|
|
45
58
|
async function lookupProjectByDomain(domain, apiBaseUrl, token, logger) {
|
|
46
59
|
return withSpan(ProxySpanNames.PROXY_DOMAIN_LOOKUP, async () => {
|
|
47
60
|
const domainWithoutPort = domain.replace(/:\d+$/, "");
|
|
@@ -85,6 +98,93 @@ async function lookupProjectByDomain(domain, apiBaseUrl, token, logger) {
|
|
|
85
98
|
}
|
|
86
99
|
}, { "proxy.domain": domain });
|
|
87
100
|
}
|
|
101
|
+
async function lookupProjectRoutingMetadata(lookupKey, apiBaseUrl, token, logger) {
|
|
102
|
+
return withSpan(ProxySpanNames.PROXY_DOMAIN_LOOKUP, async () => {
|
|
103
|
+
const normalizedLookupKey = normalizeProjectLookupKey(lookupKey);
|
|
104
|
+
const url = `${apiBaseUrl}/projects/-/proxy-routing/${encodeURIComponent(normalizedLookupKey)}`;
|
|
105
|
+
const urlObj = new URL(url);
|
|
106
|
+
logger?.debug("Looking up project proxy routing metadata", { lookupKey, url });
|
|
107
|
+
const headers = new Headers({
|
|
108
|
+
Authorization: `Bearer ${token}`,
|
|
109
|
+
Accept: "application/json",
|
|
110
|
+
});
|
|
111
|
+
injectContext(headers);
|
|
112
|
+
try {
|
|
113
|
+
const response = await withSpan(ProxySpanNames.HTTP_CLIENT_FETCH, () => fetch(url, { headers }), {
|
|
114
|
+
"http.method": "GET",
|
|
115
|
+
"http.url": url,
|
|
116
|
+
"http.host": urlObj.host,
|
|
117
|
+
"proxy.routing_lookup": normalizedLookupKey,
|
|
118
|
+
});
|
|
119
|
+
if (!response.ok) {
|
|
120
|
+
await response.body?.cancel();
|
|
121
|
+
if (response.status !== 404) {
|
|
122
|
+
logger?.error("Proxy routing metadata API error", undefined, {
|
|
123
|
+
lookupKey,
|
|
124
|
+
status: response.status,
|
|
125
|
+
statusText: response.statusText,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
const result = (await response.json());
|
|
131
|
+
logger?.debug("Proxy routing metadata lookup successful", {
|
|
132
|
+
lookupKey,
|
|
133
|
+
projectSlug: result.slug,
|
|
134
|
+
environments: result.environments?.map((e) => e.name),
|
|
135
|
+
});
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
logger?.error("Proxy routing metadata lookup failed", error, { lookupKey });
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}, { "proxy.lookup_key": lookupKey });
|
|
143
|
+
}
|
|
144
|
+
async function lookupProjectAccessMetadata(lookupKey, apiBaseUrl, token, includeUsers, logger) {
|
|
145
|
+
return withSpan(ProxySpanNames.PROXY_DOMAIN_LOOKUP, async () => {
|
|
146
|
+
const normalizedLookupKey = normalizeProjectLookupKey(lookupKey);
|
|
147
|
+
const url = `${apiBaseUrl}/projects/-/proxy-access/${encodeURIComponent(normalizedLookupKey)}?include_users=${includeUsers ? "true" : "false"}`;
|
|
148
|
+
const urlObj = new URL(url);
|
|
149
|
+
logger?.debug("Looking up project proxy access metadata", { lookupKey, includeUsers, url });
|
|
150
|
+
const headers = new Headers({
|
|
151
|
+
Authorization: `Bearer ${token}`,
|
|
152
|
+
Accept: "application/json",
|
|
153
|
+
});
|
|
154
|
+
injectContext(headers);
|
|
155
|
+
try {
|
|
156
|
+
const response = await withSpan(ProxySpanNames.HTTP_CLIENT_FETCH, () => fetch(url, { headers }), {
|
|
157
|
+
"http.method": "GET",
|
|
158
|
+
"http.url": url,
|
|
159
|
+
"http.host": urlObj.host,
|
|
160
|
+
"proxy.access_lookup": normalizedLookupKey,
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
await response.body?.cancel();
|
|
164
|
+
if (response.status !== 404) {
|
|
165
|
+
logger?.error("Proxy access metadata API error", undefined, {
|
|
166
|
+
lookupKey,
|
|
167
|
+
status: response.status,
|
|
168
|
+
statusText: response.statusText,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
const result = (await response.json());
|
|
174
|
+
logger?.debug("Proxy access metadata lookup successful", {
|
|
175
|
+
lookupKey,
|
|
176
|
+
projectSlug: result.slug,
|
|
177
|
+
environments: result.environments?.map((e) => e.name),
|
|
178
|
+
userCount: result.users?.length ?? 0,
|
|
179
|
+
});
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
logger?.error("Proxy access metadata lookup failed", error, { lookupKey });
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}, { "proxy.lookup_key": lookupKey });
|
|
187
|
+
}
|
|
88
188
|
function getRequestHost(req, url) {
|
|
89
189
|
return req.headers.get("host") ?? url.host;
|
|
90
190
|
}
|
|
@@ -107,9 +207,76 @@ export function createProxyHandler(options) {
|
|
|
107
207
|
previewApiClientId: config.previewApiClientId,
|
|
108
208
|
previewApiClientSecret: config.previewApiClientSecret,
|
|
109
209
|
}, { cache });
|
|
210
|
+
const routingCacheTtlMs = readNonNegativeIntegerEnv("VERYFRONT_PROXY_ROUTING_CACHE_TTL_MS", DEFAULT_PROXY_ROUTING_CACHE_TTL_MS);
|
|
211
|
+
const routingCacheMaxEntries = readNonNegativeIntegerEnv("VERYFRONT_PROXY_ROUTING_CACHE_MAX_ENTRIES", DEFAULT_PROXY_ROUTING_CACHE_MAX_ENTRIES);
|
|
212
|
+
const routingLookupCache = new Map();
|
|
213
|
+
const routingLookupInflight = new Map();
|
|
110
214
|
async function resolveProjectLookup(lookupKey, token, timing) {
|
|
111
215
|
return await profileProxyServerTimingPhase(timing ?? { enabled: false, startedAt: 0, phases: new Map() }, "proxy.project_lookup", () => lookupProjectByDomain(lookupKey, config.apiBaseUrl, token, logger));
|
|
112
216
|
}
|
|
217
|
+
function getCachedRoutingLookup(cacheKey) {
|
|
218
|
+
if (routingCacheTtlMs <= 0 || routingCacheMaxEntries <= 0) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const cached = routingLookupCache.get(cacheKey);
|
|
222
|
+
if (!cached) {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
if (cached.expiresAt <= Date.now()) {
|
|
226
|
+
routingLookupCache.delete(cacheKey);
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
routingLookupCache.delete(cacheKey);
|
|
230
|
+
routingLookupCache.set(cacheKey, cached);
|
|
231
|
+
return cached.value;
|
|
232
|
+
}
|
|
233
|
+
function setCachedRoutingLookup(cacheKey, value) {
|
|
234
|
+
if (routingCacheTtlMs <= 0 || routingCacheMaxEntries <= 0) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (!routingLookupCache.has(cacheKey)) {
|
|
238
|
+
while (routingLookupCache.size >= routingCacheMaxEntries) {
|
|
239
|
+
const oldestKey = routingLookupCache.keys().next().value;
|
|
240
|
+
if (!oldestKey)
|
|
241
|
+
break;
|
|
242
|
+
routingLookupCache.delete(oldestKey);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
routingLookupCache.set(cacheKey, {
|
|
246
|
+
value,
|
|
247
|
+
expiresAt: Date.now() + routingCacheTtlMs,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
async function resolveProjectRoutingLookup(lookupKey, token, timing) {
|
|
251
|
+
const cacheKey = normalizeProjectLookupKey(lookupKey);
|
|
252
|
+
return await profileProxyServerTimingPhase(timing ?? { enabled: false, startedAt: 0, phases: new Map() }, "proxy.routing_lookup", async () => {
|
|
253
|
+
const cached = getCachedRoutingLookup(cacheKey);
|
|
254
|
+
if (cached) {
|
|
255
|
+
logger?.debug("Proxy routing metadata cache hit", { lookupKey });
|
|
256
|
+
return cached;
|
|
257
|
+
}
|
|
258
|
+
const existingLookup = routingLookupInflight.get(cacheKey);
|
|
259
|
+
if (existingLookup) {
|
|
260
|
+
logger?.debug("Proxy routing metadata lookup joined in-flight request", { lookupKey });
|
|
261
|
+
return await existingLookup;
|
|
262
|
+
}
|
|
263
|
+
const lookupPromise = lookupProjectRoutingMetadata(lookupKey, config.apiBaseUrl, token, logger)
|
|
264
|
+
.then((result) => {
|
|
265
|
+
if (result) {
|
|
266
|
+
setCachedRoutingLookup(cacheKey, result);
|
|
267
|
+
}
|
|
268
|
+
return result;
|
|
269
|
+
})
|
|
270
|
+
.finally(() => {
|
|
271
|
+
routingLookupInflight.delete(cacheKey);
|
|
272
|
+
});
|
|
273
|
+
routingLookupInflight.set(cacheKey, lookupPromise);
|
|
274
|
+
return await lookupPromise;
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
async function resolveProjectAccessLookup(lookupKey, token, includeUsers, timing) {
|
|
278
|
+
return await profileProxyServerTimingPhase(timing ?? { enabled: false, startedAt: 0, phases: new Map() }, "proxy.access_lookup", () => lookupProjectAccessMetadata(lookupKey, config.apiBaseUrl, token, includeUsers, logger));
|
|
279
|
+
}
|
|
113
280
|
function validateConfig() {
|
|
114
281
|
const missing = [];
|
|
115
282
|
if (!config.apiClientId)
|
|
@@ -118,7 +285,7 @@ export function createProxyHandler(options) {
|
|
|
118
285
|
missing.push("VERYFRONT_PROXY_API_CLIENT_SECRET");
|
|
119
286
|
return missing;
|
|
120
287
|
}
|
|
121
|
-
async function
|
|
288
|
+
async function resolveFullProjectLookupAndProtection(req, url, token, userToken, lookupKey, envMatcher, timing, logContext) {
|
|
122
289
|
const lookupResult = await resolveProjectLookup(lookupKey, token, timing);
|
|
123
290
|
if (!lookupResult)
|
|
124
291
|
return { projectId: undefined, releaseId: undefined };
|
|
@@ -138,10 +305,45 @@ export function createProxyHandler(options) {
|
|
|
138
305
|
return { error: protectionError };
|
|
139
306
|
return {
|
|
140
307
|
projectId: lookupResult.id,
|
|
308
|
+
projectSlug: lookupResult.slug,
|
|
141
309
|
releaseId: matchingEnv?.active_release_id ?? undefined,
|
|
142
310
|
environmentId: matchingEnv?.id,
|
|
143
311
|
};
|
|
144
312
|
}
|
|
313
|
+
async function resolveProjectMetadataAndProtection(req, url, token, userToken, lookupKey, envMatcher, timing, logContext) {
|
|
314
|
+
return await profileProxyServerTimingPhase(timing ?? { enabled: false, startedAt: 0, phases: new Map() }, "proxy.project_lookup", async () => {
|
|
315
|
+
const routingResult = await resolveProjectRoutingLookup(lookupKey, token, timing);
|
|
316
|
+
if (!routingResult) {
|
|
317
|
+
return await resolveFullProjectLookupAndProtection(req, url, token, userToken, lookupKey, envMatcher, undefined, logContext);
|
|
318
|
+
}
|
|
319
|
+
const accessResult = await resolveProjectAccessLookup(lookupKey, token, !!userToken, timing);
|
|
320
|
+
if (!accessResult || accessResult.id !== routingResult.id) {
|
|
321
|
+
routingLookupCache.delete(normalizeProjectLookupKey(lookupKey));
|
|
322
|
+
return await resolveFullProjectLookupAndProtection(req, url, token, userToken, lookupKey, envMatcher, undefined, logContext);
|
|
323
|
+
}
|
|
324
|
+
const routingEnv = routingResult.environments?.find(envMatcher);
|
|
325
|
+
const accessEnv = accessResult.environments?.find(envMatcher);
|
|
326
|
+
const protectionError = await checkProtectedProxyAccess({
|
|
327
|
+
req,
|
|
328
|
+
url,
|
|
329
|
+
matchingEnv: accessEnv,
|
|
330
|
+
userToken,
|
|
331
|
+
users: accessResult.users,
|
|
332
|
+
apiBaseUrl: config.apiBaseUrl,
|
|
333
|
+
logger,
|
|
334
|
+
logContext,
|
|
335
|
+
isSignedInternalControlPlaneRequest: isSignedInternalControlPlaneRequest(req, url),
|
|
336
|
+
});
|
|
337
|
+
if (protectionError)
|
|
338
|
+
return { error: protectionError };
|
|
339
|
+
return {
|
|
340
|
+
projectId: routingResult.id,
|
|
341
|
+
projectSlug: routingResult.slug,
|
|
342
|
+
releaseId: routingEnv?.active_release_id ?? undefined,
|
|
343
|
+
environmentId: routingEnv?.id,
|
|
344
|
+
};
|
|
345
|
+
});
|
|
346
|
+
}
|
|
145
347
|
async function processRequest(req, options = {}) {
|
|
146
348
|
const url = options.url ?? new URL(req.url);
|
|
147
349
|
const rawHost = getRequestHost(req, url);
|
|
@@ -236,51 +438,39 @@ export function createProxyHandler(options) {
|
|
|
236
438
|
token,
|
|
237
439
|
});
|
|
238
440
|
}
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
441
|
+
const normalizedHost = host.toLowerCase().replace(/:\d+$/, "");
|
|
442
|
+
const resolved = await resolveProjectMetadataAndProtection(req, url, token, userToken, host, (env) => env.domains?.some((d) => d.toLowerCase() === normalizedHost) ?? false, options.timing, { domain: host });
|
|
443
|
+
if ("error" in resolved) {
|
|
242
444
|
return createProxyErrorContext(base, {
|
|
243
|
-
status:
|
|
244
|
-
message:
|
|
445
|
+
status: resolved.error.status,
|
|
446
|
+
message: resolved.error.message,
|
|
245
447
|
token,
|
|
448
|
+
redirectUrl: resolved.error.redirectUrl,
|
|
246
449
|
});
|
|
247
450
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const normalizedHost = host.toLowerCase().replace(/:\d+$/, "");
|
|
251
|
-
const matchingEnv = lookupResult.environments?.find((env) => env.domains?.some((d) => d.toLowerCase() === normalizedHost));
|
|
252
|
-
releaseId = matchingEnv?.active_release_id ?? undefined;
|
|
253
|
-
environmentId = matchingEnv?.id;
|
|
254
|
-
const protectionError = await checkProtectedProxyAccess({
|
|
255
|
-
req,
|
|
256
|
-
url,
|
|
257
|
-
matchingEnv,
|
|
258
|
-
userToken,
|
|
259
|
-
users: lookupResult.users,
|
|
260
|
-
apiBaseUrl: config.apiBaseUrl,
|
|
261
|
-
logger,
|
|
262
|
-
logContext: { domain: host },
|
|
263
|
-
isSignedInternalControlPlaneRequest: isSignedInternalControlPlaneRequest(req, url),
|
|
264
|
-
});
|
|
265
|
-
if (protectionError) {
|
|
451
|
+
if (!resolved.projectId || !resolved.projectSlug) {
|
|
452
|
+
logger?.info("Custom domain not found", { domain: host });
|
|
266
453
|
return createProxyErrorContext(base, {
|
|
267
|
-
status:
|
|
268
|
-
message:
|
|
454
|
+
status: 404,
|
|
455
|
+
message: `No project configured for domain: ${host}`,
|
|
269
456
|
token,
|
|
270
|
-
redirectUrl: protectionError.redirectUrl,
|
|
271
457
|
});
|
|
272
458
|
}
|
|
459
|
+
projectSlug = resolved.projectSlug;
|
|
460
|
+
projectId = resolved.projectId;
|
|
461
|
+
releaseId = resolved.releaseId;
|
|
462
|
+
environmentId = resolved.environmentId;
|
|
273
463
|
logger?.info("Resolved custom domain to project", {
|
|
274
464
|
domain: host,
|
|
275
465
|
projectSlug,
|
|
276
466
|
projectId,
|
|
277
467
|
releaseId,
|
|
278
|
-
|
|
468
|
+
environmentId,
|
|
279
469
|
});
|
|
280
470
|
}
|
|
281
471
|
else if (projectSlug && scope === "production" && token && parsedDomain.environment) {
|
|
282
472
|
const targetEnv = parsedDomain.environment.toLowerCase();
|
|
283
|
-
const resolved = await
|
|
473
|
+
const resolved = await resolveProjectMetadataAndProtection(req, url, token, userToken, projectSlug, (env) => env.name.toLowerCase() === targetEnv, options.timing, { projectSlug });
|
|
284
474
|
if ("error" in resolved) {
|
|
285
475
|
return createProxyErrorContext(base, {
|
|
286
476
|
status: resolved.error.status,
|
|
@@ -312,7 +502,7 @@ export function createProxyHandler(options) {
|
|
|
312
502
|
else if (projectSlug && scope === "preview" && token) {
|
|
313
503
|
// Preview uses branch-based content (no releaseId needed), but must
|
|
314
504
|
// still enforce the environment's `protected` flag like other scopes.
|
|
315
|
-
const resolved = await
|
|
505
|
+
const resolved = await resolveProjectMetadataAndProtection(req, url, token, userToken, projectSlug, (env) => env.name.toLowerCase() === "preview", options.timing, { projectSlug });
|
|
316
506
|
if ("error" in resolved) {
|
|
317
507
|
return createProxyErrorContext(base, {
|
|
318
508
|
status: resolved.error.status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAuBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAuBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA+ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AA0BD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAIJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA2Q9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsFzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IA8EhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -38,6 +38,7 @@ import { getReadyManifestForRender } from "../../release-assets/manifest-cache.j
|
|
|
38
38
|
import { createEsmCache, createModuleCache, loadModule } from "./module-loader/index.js";
|
|
39
39
|
import { getCSSImports, runWithCSSCollector, } from "../../modules/react-loader/css-import-collector.js";
|
|
40
40
|
import { assembleRenderResult } from "./render-result-assembly.js";
|
|
41
|
+
import { isMdxEsmExportMismatchError, recoverStaleMdxEsmPreviewCaches } from "../page-rendering.js";
|
|
41
42
|
// Extracted modules
|
|
42
43
|
import { EMPTY_LAYOUT_RESULT, isDotPath } from "./path-helpers.js";
|
|
43
44
|
import { cachePageCss, CSS_SSR_TIMEOUT_MS, getCachedPageCss, getPageCssCacheKey, } from "./css-cache.js";
|
|
@@ -251,7 +252,7 @@ export class RenderPipeline {
|
|
|
251
252
|
if (this.config.mode === "development") {
|
|
252
253
|
clearSSRModuleCacheForProject(projectId);
|
|
253
254
|
}
|
|
254
|
-
|
|
255
|
+
const renderOnce = () => withSpan("render.page", async () => {
|
|
255
256
|
const { result } = await runWithCSSCollector(async () => {
|
|
256
257
|
const pageResolveStart = performance.now();
|
|
257
258
|
const pageInfo = await withSpan("render.resolve_page", () => this.config.pageResolver.resolvePage(slug), { "render.slug": slug });
|
|
@@ -374,6 +375,32 @@ export class RenderPipeline {
|
|
|
374
375
|
"render.project_id": options?.projectId || this.config.projectDir,
|
|
375
376
|
"render.mode": this.config.mode,
|
|
376
377
|
});
|
|
378
|
+
try {
|
|
379
|
+
return await renderOnce();
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
if (isMdxEsmExportMismatchError(error)) {
|
|
383
|
+
const recovered = await recoverStaleMdxEsmPreviewCaches({
|
|
384
|
+
adapter: this.config.adapter,
|
|
385
|
+
projectId,
|
|
386
|
+
projectSlug,
|
|
387
|
+
contentSourceId: options?.contentSourceId,
|
|
388
|
+
slug,
|
|
389
|
+
pagePath: slug,
|
|
390
|
+
});
|
|
391
|
+
if (recovered) {
|
|
392
|
+
cacheResult = null;
|
|
393
|
+
renderPipelineLog.warn("Retrying page render after stale MDX ESM cache recovery", {
|
|
394
|
+
slug,
|
|
395
|
+
projectId,
|
|
396
|
+
projectSlug,
|
|
397
|
+
contentSourceId: options?.contentSourceId,
|
|
398
|
+
});
|
|
399
|
+
return await renderOnce();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
throw error;
|
|
403
|
+
}
|
|
377
404
|
}
|
|
378
405
|
/** Resolve page data for SPA client-side navigation without rendering HTML. */
|
|
379
406
|
async resolvePageData(slug, options) {
|
|
@@ -10,6 +10,16 @@ interface PreparedMDXPageBundles {
|
|
|
10
10
|
pageBundle: PageBundle;
|
|
11
11
|
serverModuleCode: string;
|
|
12
12
|
}
|
|
13
|
+
interface StaleMdxEsmRecoveryOptions {
|
|
14
|
+
adapter: RuntimeAdapter;
|
|
15
|
+
projectId?: string;
|
|
16
|
+
projectSlug?: string;
|
|
17
|
+
contentSourceId?: string;
|
|
18
|
+
slug: string;
|
|
19
|
+
pagePath: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function isMdxEsmExportMismatchError(error: unknown): boolean;
|
|
22
|
+
export declare function recoverStaleMdxEsmPreviewCaches(options: StaleMdxEsmRecoveryOptions): Promise<boolean>;
|
|
13
23
|
export declare function prepareMDXPageBundles(pageInfo: EntityInfo, projectDir: string, options?: {
|
|
14
24
|
precompiledModule?: string;
|
|
15
25
|
studioEmbed?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,UAAU,sBAAsB;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAInE;AAED,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,sBAAsB,CAAC,CA4CjC;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,CAyHxB"}
|
|
@@ -1,10 +1,38 @@
|
|
|
1
1
|
import { rendererLogger as logger } from "../utils/index.js";
|
|
2
2
|
import { RENDER_ERROR } from "../errors/error-registry.js";
|
|
3
3
|
import { mdxRenderer } from "../transforms/mdx/index.js";
|
|
4
|
+
import { clearMdxEsmCacheNamespace } from "../transforms/mdx/esm-module-loader/index.js";
|
|
4
5
|
import { getProjectReact } from "../react/index.js";
|
|
5
6
|
import { compileContent } from "../transforms/mdx/compiler/index.js";
|
|
6
7
|
import { ensureError, getErrorMessage } from "../errors/veryfront-error.js";
|
|
7
8
|
import { withSpan } from "../observability/tracing/otlp-setup.js";
|
|
9
|
+
export function isMdxEsmExportMismatchError(error) {
|
|
10
|
+
const message = getErrorMessage(error);
|
|
11
|
+
return /does not provide an export named/i.test(message) &&
|
|
12
|
+
/requested module|import/i.test(message);
|
|
13
|
+
}
|
|
14
|
+
export async function recoverStaleMdxEsmPreviewCaches(options) {
|
|
15
|
+
let recovered = false;
|
|
16
|
+
const refreshSourceSnapshot = options.adapter.fs.refreshSourceSnapshot;
|
|
17
|
+
if (typeof refreshSourceSnapshot === "function") {
|
|
18
|
+
await refreshSourceSnapshot.call(options.adapter.fs, "mdx-esm-export-mismatch");
|
|
19
|
+
recovered = true;
|
|
20
|
+
}
|
|
21
|
+
if (options.projectId && options.contentSourceId) {
|
|
22
|
+
await clearMdxEsmCacheNamespace(options.projectId, options.contentSourceId);
|
|
23
|
+
recovered = true;
|
|
24
|
+
}
|
|
25
|
+
if (recovered) {
|
|
26
|
+
logger.warn("Recovered stale MDX ESM preview caches, retrying render", {
|
|
27
|
+
slug: options.slug,
|
|
28
|
+
pagePath: options.pagePath,
|
|
29
|
+
projectId: options.projectId,
|
|
30
|
+
projectSlug: options.projectSlug,
|
|
31
|
+
contentSourceId: options.contentSourceId,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return recovered;
|
|
35
|
+
}
|
|
8
36
|
export async function prepareMDXPageBundles(pageInfo, projectDir, options) {
|
|
9
37
|
const { frontmatter, content, path } = pageInfo.entity;
|
|
10
38
|
const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
|
|
@@ -35,8 +63,8 @@ export function handleMDXPage(pageInfo, slug, projectDir, mergedComponents, _com
|
|
|
35
63
|
precompiledModule: options?.precompiledModule,
|
|
36
64
|
studioEmbed: options?.studioEmbed,
|
|
37
65
|
});
|
|
38
|
-
|
|
39
|
-
|
|
66
|
+
const loadPageElement = async () => {
|
|
67
|
+
let collectedMetadata = {};
|
|
40
68
|
const mod = (await mdxRenderer.loadModuleESM(serverModuleCode, adapter, options?.projectId, projectDir, options?.projectSlug, options?.contentSourceId));
|
|
41
69
|
const MDXComp = mod.MDXContent || mod.default;
|
|
42
70
|
if (!MDXComp) {
|
|
@@ -80,8 +108,42 @@ export function handleMDXPage(pageInfo, slug, projectDir, mergedComponents, _com
|
|
|
80
108
|
const React = await getProjectReact();
|
|
81
109
|
const pageElement = React.createElement(MDXComp, { components: mergedComponents });
|
|
82
110
|
return { pageElement, pageBundle, collectedMetadata };
|
|
111
|
+
};
|
|
112
|
+
try {
|
|
113
|
+
return await loadPageElement();
|
|
83
114
|
}
|
|
84
115
|
catch (error) {
|
|
116
|
+
if (isMdxEsmExportMismatchError(error)) {
|
|
117
|
+
let recovered = false;
|
|
118
|
+
try {
|
|
119
|
+
recovered = await recoverStaleMdxEsmPreviewCaches({
|
|
120
|
+
adapter,
|
|
121
|
+
projectId: options?.projectId,
|
|
122
|
+
projectSlug: options?.projectSlug,
|
|
123
|
+
contentSourceId: options?.contentSourceId,
|
|
124
|
+
slug,
|
|
125
|
+
pagePath: path,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
catch (recoveryError) {
|
|
129
|
+
logger.warn("Failed to recover stale MDX ESM preview caches", {
|
|
130
|
+
slug,
|
|
131
|
+
path,
|
|
132
|
+
error: getErrorMessage(recoveryError),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (recovered) {
|
|
136
|
+
try {
|
|
137
|
+
return await loadPageElement();
|
|
138
|
+
}
|
|
139
|
+
catch (retryError) {
|
|
140
|
+
throw RENDER_ERROR.create({
|
|
141
|
+
detail: `Failed to import MDX page via ESM after cache refresh: ${getErrorMessage(retryError)}`,
|
|
142
|
+
context: { slug, error: retryError, recoveredFrom: error },
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
85
147
|
throw RENDER_ERROR.create({
|
|
86
148
|
detail: `Failed to import MDX page via ESM: ${getErrorMessage(error)}`,
|
|
87
149
|
context: { slug, error },
|
|
@@ -48,6 +48,7 @@ export declare function invalidateModulePaths(changedPaths: string[]): void;
|
|
|
48
48
|
*/
|
|
49
49
|
export declare function invalidateMdxEsmModule(cacheDir: string, filePath: string, projectDir?: string, reactVersion?: string): void;
|
|
50
50
|
export declare function clearESMDiskCache(): Promise<void>;
|
|
51
|
+
export declare function clearMdxEsmCacheNamespace(projectId: string, contentSourceId: string): Promise<void>;
|
|
51
52
|
export declare function clearHttpBundleCache(): Promise<void>;
|
|
52
53
|
/**
|
|
53
54
|
* Clear all local ESM caches (MDX-ESM disk cache, HTTP bundles, in-memory caches).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAK9D,eAAO,MAAM,kBAAkB,wBAE7B,CAAC;AA6IH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBvF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAQD,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAuBD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CA0ElE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,SAAwB,GACnC,IAAI,CAgBN;AAOD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAmBD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,oDAAoD;AAC3E,eAAe,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAChE,YAAY,SAAwB,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA+J5B"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAK9D,eAAO,MAAM,kBAAkB,wBAE7B,CAAC;AA6IH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBvF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAQD,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAuBD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CA0ElE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,SAAwB,GACnC,IAAI,CAgBN;AAOD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAmBD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,oDAAoD;AAC3E,eAAe,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAChE,YAAY,SAAwB,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA+J5B"}
|
|
@@ -347,6 +347,41 @@ export async function clearESMDiskCache() {
|
|
|
347
347
|
}
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
|
+
export async function clearMdxEsmCacheNamespace(projectId, contentSourceId) {
|
|
351
|
+
const cacheDir = join(getMdxEsmCacheDir(), encodeURIComponent(projectId), encodeURIComponent(contentSourceId));
|
|
352
|
+
modulePathCaches.delete(cacheDir);
|
|
353
|
+
modulePathCacheLoaded.delete(cacheDir);
|
|
354
|
+
for (const key of Array.from(verifiedModuleDeps.keys())) {
|
|
355
|
+
if (String(key).startsWith(cacheDir)) {
|
|
356
|
+
verifiedModuleDeps.delete(key);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
try {
|
|
360
|
+
await getLocalFs().remove(cacheDir, { recursive: true });
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
if (!isNotFoundError(error)) {
|
|
364
|
+
logger.warn(`${LOG_PREFIX_MDX_LOADER} Failed to remove MDX-ESM cache namespace`, {
|
|
365
|
+
cacheDir,
|
|
366
|
+
error: error instanceof Error ? error.message : String(error),
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
await getLocalFs().mkdir(cacheDir, { recursive: true });
|
|
372
|
+
logger.debug(`${LOG_PREFIX_MDX_LOADER} Cleared MDX-ESM cache namespace`, {
|
|
373
|
+
projectId,
|
|
374
|
+
contentSourceId,
|
|
375
|
+
cacheDir,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
logger.warn(`${LOG_PREFIX_MDX_LOADER} Failed to recreate MDX-ESM cache namespace`, {
|
|
380
|
+
cacheDir,
|
|
381
|
+
error: error instanceof Error ? error.message : String(error),
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
350
385
|
export async function clearHttpBundleCache() {
|
|
351
386
|
const cacheDir = getHttpBundleCacheDir();
|
|
352
387
|
const fs = getLocalFs();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module transforms/mdx/esm-module-loader
|
|
5
5
|
*/
|
|
6
|
-
export { clearESMDiskCache, clearModulePathCache, invalidateModulePaths } from "./cache/index.js";
|
|
6
|
+
export { clearESMDiskCache, clearMdxEsmCacheNamespace, clearModulePathCache, invalidateModulePaths, } from "./cache/index.js";
|
|
7
7
|
export { IS_TRUE_NODE, LOG_PREFIX_MDX_LOADER, LOG_PREFIX_MDX_RENDERER } from "./constants.js";
|
|
8
8
|
export { loadModuleESM } from "./loader.js";
|
|
9
9
|
export type { ESMLoaderContext, FSAdapter, ModuleFetcherContext } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGpF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGlG,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module transforms/mdx/esm-module-loader
|
|
5
5
|
*/
|
|
6
6
|
// Cache exports
|
|
7
|
-
export { clearESMDiskCache, clearModulePathCache, invalidateModulePaths } from "./cache/index.js";
|
|
7
|
+
export { clearESMDiskCache, clearMdxEsmCacheNamespace, clearModulePathCache, invalidateModulePaths, } from "./cache/index.js";
|
|
8
8
|
// Constants exports
|
|
9
9
|
export { IS_TRUE_NODE, LOG_PREFIX_MDX_LOADER, LOG_PREFIX_MDX_RENDERER } from "./constants.js";
|
|
10
10
|
// Loader exports
|
|
@@ -55,6 +55,26 @@ export interface GCStats {
|
|
|
55
55
|
minorGCs: number;
|
|
56
56
|
lastGCDurationMs?: number;
|
|
57
57
|
}
|
|
58
|
+
export interface PendingRapidHeapGrowth {
|
|
59
|
+
baselineHeapUsedMB: number;
|
|
60
|
+
observedGrowthMB: number;
|
|
61
|
+
}
|
|
62
|
+
export interface RapidHeapGrowthEvaluationInput {
|
|
63
|
+
previousHeapUsedMB: number;
|
|
64
|
+
currentHeapUsedMB: number;
|
|
65
|
+
pending: PendingRapidHeapGrowth | undefined;
|
|
66
|
+
thresholdMB: number;
|
|
67
|
+
}
|
|
68
|
+
export interface RapidHeapGrowthEvaluation {
|
|
69
|
+
shouldWarn: boolean;
|
|
70
|
+
growthMB?: number;
|
|
71
|
+
observedGrowthMB?: number;
|
|
72
|
+
pending?: PendingRapidHeapGrowth;
|
|
73
|
+
}
|
|
74
|
+
export interface RapidHeapGrowthState {
|
|
75
|
+
lastHeapUsedMB: number;
|
|
76
|
+
pending: PendingRapidHeapGrowth | undefined;
|
|
77
|
+
}
|
|
58
78
|
export declare function registerCache(name: string, getStats: () => CacheStats): void;
|
|
59
79
|
export declare function unregisterCache(name: string): void;
|
|
60
80
|
export declare function getHeapStats(): HeapStats;
|
|
@@ -63,6 +83,8 @@ export declare function getMemorySnapshot(): MemorySnapshot;
|
|
|
63
83
|
export declare function getTopCacheStats(caches: CacheStats[], limit?: number): MonitoringCacheStats[];
|
|
64
84
|
export declare function getMemoryMonitoringLogContext(snapshot: MemorySnapshot, topCacheLimit?: number): MemoryMonitoringLogContext;
|
|
65
85
|
export declare function getMemoryMonitoringConfig(env: MemoryMonitoringEnv): MemoryMonitoringConfig;
|
|
86
|
+
export declare function getInitialRapidHeapGrowthState(initialHeapUsedMB: number): RapidHeapGrowthState;
|
|
87
|
+
export declare function getRapidHeapGrowthEvaluation(input: RapidHeapGrowthEvaluationInput): RapidHeapGrowthEvaluation;
|
|
66
88
|
export declare function getMemoryMonitoringState(): MemoryMonitoringState;
|
|
67
89
|
export declare function forceGC(): Promise<boolean>;
|
|
68
90
|
export declare function startMemoryMonitoring(intervalMs?: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/memory/profiler.ts"],"names":[],"mappings":"AAiBA,kEAAkE;AAClE,eAAO,MAAM,qCAAqC,QAAS,CAAC;AAO5D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/memory/profiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ let memoryCheckInterval;
|
|
|
19
19
|
let memoryCheckIntervalMs;
|
|
20
20
|
let lastHeapUsed = 0;
|
|
21
21
|
let heapGrowthWarningThreshold = 0.8;
|
|
22
|
+
let pendingRapidHeapGrowth;
|
|
22
23
|
export function registerCache(name, getStats) {
|
|
23
24
|
cacheRegistry.set(name, getStats);
|
|
24
25
|
logger.debug(`Registered cache: ${name}`);
|
|
@@ -119,6 +120,39 @@ export function getMemoryMonitoringConfig(env) {
|
|
|
119
120
|
: DEFAULT_MEMORY_MONITORING_INTERVAL_MS;
|
|
120
121
|
return { enabled, intervalMs };
|
|
121
122
|
}
|
|
123
|
+
function roundMemoryMB(value) {
|
|
124
|
+
return Math.round(value * 100) / 100;
|
|
125
|
+
}
|
|
126
|
+
export function getInitialRapidHeapGrowthState(initialHeapUsedMB) {
|
|
127
|
+
return {
|
|
128
|
+
lastHeapUsedMB: initialHeapUsedMB,
|
|
129
|
+
pending: undefined,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export function getRapidHeapGrowthEvaluation(input) {
|
|
133
|
+
const intervalGrowthMB = roundMemoryMB(input.currentHeapUsedMB - input.previousHeapUsedMB);
|
|
134
|
+
if (input.pending) {
|
|
135
|
+
const sustainedGrowthMB = roundMemoryMB(input.currentHeapUsedMB - input.pending.baselineHeapUsedMB);
|
|
136
|
+
if (sustainedGrowthMB > input.thresholdMB) {
|
|
137
|
+
return {
|
|
138
|
+
shouldWarn: true,
|
|
139
|
+
growthMB: sustainedGrowthMB,
|
|
140
|
+
observedGrowthMB: input.pending.observedGrowthMB,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return { shouldWarn: false };
|
|
144
|
+
}
|
|
145
|
+
if (intervalGrowthMB > input.thresholdMB) {
|
|
146
|
+
return {
|
|
147
|
+
shouldWarn: false,
|
|
148
|
+
pending: {
|
|
149
|
+
baselineHeapUsedMB: input.previousHeapUsedMB,
|
|
150
|
+
observedGrowthMB: intervalGrowthMB,
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return { shouldWarn: false };
|
|
155
|
+
}
|
|
122
156
|
export function getMemoryMonitoringState() {
|
|
123
157
|
return {
|
|
124
158
|
active: memoryCheckInterval !== undefined,
|
|
@@ -142,6 +176,9 @@ export function startMemoryMonitoring(intervalMs = DEFAULT_MEMORY_MONITORING_INT
|
|
|
142
176
|
clearInterval(memoryCheckInterval);
|
|
143
177
|
logger.info(`Starting memory monitoring (interval: ${intervalMs}ms)`);
|
|
144
178
|
memoryCheckIntervalMs = intervalMs;
|
|
179
|
+
const rapidGrowthState = getInitialRapidHeapGrowthState(getHeapStats().usedHeapSizeMB);
|
|
180
|
+
lastHeapUsed = rapidGrowthState.lastHeapUsedMB;
|
|
181
|
+
pendingRapidHeapGrowth = rapidGrowthState.pending;
|
|
145
182
|
memoryCheckInterval = dntShim.setInterval(() => {
|
|
146
183
|
const snapshot = getMemorySnapshot();
|
|
147
184
|
const { heap } = snapshot;
|
|
@@ -156,10 +193,17 @@ export function startMemoryMonitoring(intervalMs = DEFAULT_MEMORY_MONITORING_INT
|
|
|
156
193
|
caches: snapshot.caches.map((c) => `${c.name}: ${c.entries}`).join(", "),
|
|
157
194
|
});
|
|
158
195
|
}
|
|
159
|
-
const
|
|
160
|
-
|
|
196
|
+
const rapidGrowthEvaluation = getRapidHeapGrowthEvaluation({
|
|
197
|
+
previousHeapUsedMB: lastHeapUsed,
|
|
198
|
+
currentHeapUsedMB: heap.usedHeapSizeMB,
|
|
199
|
+
pending: pendingRapidHeapGrowth,
|
|
200
|
+
thresholdMB: HEAP_RAPID_GROWTH_THRESHOLD_MB,
|
|
201
|
+
});
|
|
202
|
+
pendingRapidHeapGrowth = rapidGrowthEvaluation.pending;
|
|
203
|
+
if (rapidGrowthEvaluation.shouldWarn) {
|
|
161
204
|
logger.warn("Rapid heap growth detected", {
|
|
162
|
-
growthMB:
|
|
205
|
+
growthMB: rapidGrowthEvaluation.growthMB,
|
|
206
|
+
observedGrowthMB: rapidGrowthEvaluation.observedGrowthMB,
|
|
163
207
|
intervalMs,
|
|
164
208
|
topCaches: monitoringContext.topCaches,
|
|
165
209
|
});
|
|
@@ -187,6 +231,7 @@ export function stopMemoryMonitoring() {
|
|
|
187
231
|
clearInterval(memoryCheckInterval);
|
|
188
232
|
memoryCheckInterval = undefined;
|
|
189
233
|
memoryCheckIntervalMs = undefined;
|
|
234
|
+
pendingRapidHeapGrowth = undefined;
|
|
190
235
|
logger.info("Memory monitoring stopped");
|
|
191
236
|
}
|
|
192
237
|
export function setHeapWarningThreshold(threshold) {
|