veryfront 0.1.1151 → 0.1.1153
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/deploy/command.d.ts +5 -2
- package/esm/cli/commands/deploy/command.d.ts.map +1 -1
- package/esm/cli/commands/deploy/command.js +36 -12
- package/esm/deno.js +1 -1
- package/esm/src/platform/adapters/base.d.ts +10 -0
- package/esm/src/platform/adapters/base.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts +15 -0
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/adapter.js +181 -17
- package/esm/src/platform/adapters/fs/veryfront/default-invalidation-callbacks.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/default-invalidation-callbacks.js +12 -7
- package/esm/src/platform/adapters/fs/veryfront/multi-project-adapter.d.ts +2 -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 +28 -0
- package/esm/src/platform/adapters/fs/veryfront/types.d.ts +10 -7
- package/esm/src/platform/adapters/fs/veryfront/types.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts +3 -10
- package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/websocket-manager.js +39 -17
- package/esm/src/platform/adapters/fs/wrapper.d.ts +2 -0
- package/esm/src/platform/adapters/fs/wrapper.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/wrapper.js +8 -0
- package/esm/src/rendering/app-route-resolver.js +17 -19
- package/esm/src/rendering/router-detection.js +41 -10
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.js +1 -0
- package/esm/src/server/handlers/request/api/api-handler-wrapper.d.ts +1 -0
- package/esm/src/server/handlers/request/api/api-handler-wrapper.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/api-handler-wrapper.js +37 -3
- package/esm/src/server/handlers/request/api/pages-api-handler.d.ts +7 -1
- package/esm/src/server/handlers/request/api/pages-api-handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/pages-api-handler.js +26 -10
- package/esm/src/server/handlers/request/api/project-discovery.d.ts +6 -0
- package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/project-discovery.js +43 -11
- package/esm/src/server/runtime-handler/adapter-factory.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/adapter-factory.js +10 -8
- package/esm/src/types/entities/getEntityInfo.js +0 -15
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +5 -5
|
@@ -137,9 +137,12 @@ interface DeploymentExpectation {
|
|
|
137
137
|
sourceDigest: string;
|
|
138
138
|
releaseName?: string;
|
|
139
139
|
}
|
|
140
|
-
interface
|
|
140
|
+
interface VerificationRetryOptions {
|
|
141
141
|
attempts?: number;
|
|
142
142
|
delayMs?: number;
|
|
143
|
+
}
|
|
144
|
+
interface DeploymentVerificationOptions extends VerificationRetryOptions {
|
|
145
|
+
releaseSource?: VerificationRetryOptions;
|
|
143
146
|
verifiedRelease?: ReleaseSourceVerification;
|
|
144
147
|
}
|
|
145
148
|
export declare function getDeploymentRoutingConvergenceWarning(deployment: Deployment): string | null;
|
|
@@ -166,7 +169,7 @@ export declare function createRelease(client: ApiClient, projectSlug: string, op
|
|
|
166
169
|
* Create a new deployment
|
|
167
170
|
*/
|
|
168
171
|
export declare function createDeployment(client: ApiClient, projectSlug: string, releaseId: string, environmentId: string): Promise<Deployment>;
|
|
169
|
-
export declare function verifyReleaseSource(client: ApiClient, projectReference: string, expected: ReleaseSourceExpectation): Promise<ReleaseSourceVerification>;
|
|
172
|
+
export declare function verifyReleaseSource(client: ApiClient, projectReference: string, expected: ReleaseSourceExpectation, options?: VerificationRetryOptions): Promise<ReleaseSourceVerification>;
|
|
170
173
|
export declare function verifyDeployment(client: ApiClient, projectReference: string, expected: DeploymentExpectation, options?: DeploymentVerificationOptions): Promise<DeploymentVerification>;
|
|
171
174
|
export declare function resolvePushedSource(input: {
|
|
172
175
|
projectDir: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/command.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,24 @@ export const parseDeployArgs = createArgParser(DeployArgsSchema, {
|
|
|
44
44
|
export function requiresExplicitDeployConfirmation(force) {
|
|
45
45
|
return !force && !isAutoConfirmEnabled();
|
|
46
46
|
}
|
|
47
|
+
const MAX_RELEASE_SOURCE_VERIFICATION_ATTEMPTS = 20;
|
|
48
|
+
const MAX_RELEASE_SOURCE_VERIFICATION_DELAY_MS = 500;
|
|
49
|
+
// Release creation can precede source-snapshot materialization. Only a
|
|
50
|
+
// successfully read, well-formed digest mismatch enters this convergence loop;
|
|
51
|
+
// validation and exhausted API-client transport errors still fail closed.
|
|
52
|
+
function boundedReleaseSourceVerificationOptions(options) {
|
|
53
|
+
const attempts = options.attempts === undefined
|
|
54
|
+
? MAX_RELEASE_SOURCE_VERIFICATION_ATTEMPTS
|
|
55
|
+
: Number.isFinite(options.attempts)
|
|
56
|
+
? Math.min(MAX_RELEASE_SOURCE_VERIFICATION_ATTEMPTS, Math.max(1, Math.trunc(options.attempts)))
|
|
57
|
+
: MAX_RELEASE_SOURCE_VERIFICATION_ATTEMPTS;
|
|
58
|
+
const delayMs = options.delayMs === undefined
|
|
59
|
+
? MAX_RELEASE_SOURCE_VERIFICATION_DELAY_MS
|
|
60
|
+
: Number.isFinite(options.delayMs)
|
|
61
|
+
? Math.min(MAX_RELEASE_SOURCE_VERIFICATION_DELAY_MS, Math.max(0, Math.trunc(options.delayMs)))
|
|
62
|
+
: MAX_RELEASE_SOURCE_VERIFICATION_DELAY_MS;
|
|
63
|
+
return { attempts, delayMs };
|
|
64
|
+
}
|
|
47
65
|
function referenceId(value) {
|
|
48
66
|
return typeof value === "string" ? value : value?.id;
|
|
49
67
|
}
|
|
@@ -184,7 +202,7 @@ export async function createDeployment(client, projectSlug, releaseId, environme
|
|
|
184
202
|
function wait(ms) {
|
|
185
203
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
186
204
|
}
|
|
187
|
-
export async function verifyReleaseSource(client, projectReference, expected) {
|
|
205
|
+
export async function verifyReleaseSource(client, projectReference, expected, options = {}) {
|
|
188
206
|
const release = await getRelease(client, projectReference, expected.releaseId);
|
|
189
207
|
if (release.id !== expected.releaseId) {
|
|
190
208
|
throw new Error(`Release read-back returned ${release.id}; expected ${expected.releaseId}`);
|
|
@@ -196,17 +214,23 @@ export async function verifyReleaseSource(client, projectReference, expected) {
|
|
|
196
214
|
if (!release.version) {
|
|
197
215
|
throw new Error(`Release ${expected.releaseId} has no version`);
|
|
198
216
|
}
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
217
|
+
const { attempts, delayMs } = boundedReleaseSourceVerificationOptions(options);
|
|
218
|
+
let sourceDigest = "";
|
|
219
|
+
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
220
|
+
sourceDigest = await getReleaseSourceDigest(client, projectReference, expected.releaseId);
|
|
221
|
+
if (sourceDigest === expected.sourceDigest) {
|
|
222
|
+
return {
|
|
223
|
+
projectId: expected.projectId,
|
|
224
|
+
releaseId: expected.releaseId,
|
|
225
|
+
releaseVersion: release.version,
|
|
226
|
+
commitSha: expected.commitSha,
|
|
227
|
+
sourceDigest,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
if (attempt < attempts - 1 && delayMs > 0)
|
|
231
|
+
await wait(delayMs);
|
|
202
232
|
}
|
|
203
|
-
|
|
204
|
-
projectId: expected.projectId,
|
|
205
|
-
releaseId: expected.releaseId,
|
|
206
|
-
releaseVersion: release.version,
|
|
207
|
-
commitSha: expected.commitSha,
|
|
208
|
-
sourceDigest,
|
|
209
|
-
};
|
|
233
|
+
throw new Error(`Release ${expected.releaseId} source does not match pushed commit ${expected.commitSha}: expected source digest ${expected.sourceDigest}; last observed ${sourceDigest}`);
|
|
210
234
|
}
|
|
211
235
|
export async function verifyDeployment(client, projectReference, expected, options = {}) {
|
|
212
236
|
const deployment = await getDeployment(client, projectReference, expected.deploymentId);
|
|
@@ -214,7 +238,7 @@ export async function verifyDeployment(client, projectReference, expected, optio
|
|
|
214
238
|
deployment.environment_id !== expected.environmentId) {
|
|
215
239
|
throw new Error(`Deployment ${expected.deploymentId} does not reference release ${expected.releaseId} and environment ${expected.environmentId}`);
|
|
216
240
|
}
|
|
217
|
-
const verifiedRelease = options.verifiedRelease ?? await verifyReleaseSource(client, projectReference, expected);
|
|
241
|
+
const verifiedRelease = options.verifiedRelease ?? await verifyReleaseSource(client, projectReference, expected, options.releaseSource);
|
|
218
242
|
if (verifiedRelease.projectId !== expected.projectId ||
|
|
219
243
|
verifiedRelease.releaseId !== expected.releaseId ||
|
|
220
244
|
verifiedRelease.commitSha !== expected.commitSha ||
|
package/esm/deno.js
CHANGED
|
@@ -140,6 +140,16 @@ export interface FileSystemAdapter {
|
|
|
140
140
|
resolveFile?(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
|
|
141
141
|
/** Refresh remote source snapshots when a preview render detects stale cached content. */
|
|
142
142
|
refreshSourceSnapshot?(reason?: string): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Confirm that a mutable remote source snapshot is within its freshness
|
|
145
|
+
* lease, coalescing the network check across concurrent requests.
|
|
146
|
+
*/
|
|
147
|
+
ensureSourceSnapshotFresh?(reason?: string): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* Monotonic generation for the active source snapshot. Consumers can retain
|
|
150
|
+
* derived state while this value is unchanged.
|
|
151
|
+
*/
|
|
152
|
+
getSourceSnapshotVersion?(): number | undefined | Promise<number | undefined>;
|
|
143
153
|
}
|
|
144
154
|
export interface ResolveFileOptions {
|
|
145
155
|
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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"}
|
|
@@ -19,6 +19,13 @@ export declare class VeryfrontFSAdapter implements FSAdapter {
|
|
|
19
19
|
private branchMissRecoveryPromise;
|
|
20
20
|
private branchMissRecoveryGeneration;
|
|
21
21
|
private readonly branchMissRecoveryFailures;
|
|
22
|
+
/** Last successful source check and generation of the materialized snapshot. */
|
|
23
|
+
private sourceSnapshotCheckedAt;
|
|
24
|
+
private sourceSnapshotVersion;
|
|
25
|
+
private sourceSnapshotIdentity;
|
|
26
|
+
private sourceSnapshotFiles;
|
|
27
|
+
private sourceSnapshotRefreshPromise;
|
|
28
|
+
private sourceSnapshotMutationTail;
|
|
22
29
|
private projectData?;
|
|
23
30
|
private apiBaseUrl;
|
|
24
31
|
private apiToken;
|
|
@@ -35,6 +42,7 @@ export declare class VeryfrontFSAdapter implements FSAdapter {
|
|
|
35
42
|
/** Whether running in proxy mode (shared adapter with per-request OAuth tokens) */
|
|
36
43
|
private proxyMode;
|
|
37
44
|
private getCurrentFileListCacheKey;
|
|
45
|
+
private getCurrentSourceSnapshotIdentity;
|
|
38
46
|
private syncClientContext;
|
|
39
47
|
private getCachedFileListSync;
|
|
40
48
|
private getCachedFileListAsync;
|
|
@@ -49,7 +57,14 @@ export declare class VeryfrontFSAdapter implements FSAdapter {
|
|
|
49
57
|
private refreshBranchSnapshotAfterMiss;
|
|
50
58
|
private withBranchSnapshotRecovery;
|
|
51
59
|
private scheduleFileListWarmup;
|
|
60
|
+
private markSourceSnapshotChanged;
|
|
61
|
+
private runSourceSnapshotMutation;
|
|
62
|
+
private replaceSourceSnapshot;
|
|
63
|
+
private invalidateDerivedSourceCaches;
|
|
64
|
+
private performSourceSnapshotRefresh;
|
|
52
65
|
refreshSourceSnapshot(reason?: string): Promise<void>;
|
|
66
|
+
ensureSourceSnapshotFresh(reason?: string): Promise<void>;
|
|
67
|
+
getSourceSnapshotVersion(): number;
|
|
53
68
|
getPokeMetrics(): {
|
|
54
69
|
received: number;
|
|
55
70
|
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;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,29 @@ import { clearCachedReleaseAssetManifests, registerManifestFetcherForRelease, un
|
|
|
16
16
|
import { parseReleaseAssetManifest } from "../../../../release-assets/manifest-schema.js";
|
|
17
17
|
const logger = baseLogger.component("veryfront-fs-adapter");
|
|
18
18
|
const BRANCH_MISS_RECOVERY_FAILURE_TTL_MS = 5_000;
|
|
19
|
+
const BRANCH_SOURCE_SNAPSHOT_FRESHNESS_MS = 30_000;
|
|
20
|
+
// Process-wide uniqueness prevents a recreated adapter from matching stale
|
|
21
|
+
// derived-state generations left behind by its predecessor.
|
|
22
|
+
let sourceSnapshotGeneration = 0;
|
|
23
|
+
function nextSourceSnapshotGeneration() {
|
|
24
|
+
sourceSnapshotGeneration++;
|
|
25
|
+
return sourceSnapshotGeneration;
|
|
26
|
+
}
|
|
27
|
+
function sourceSnapshotsEqual(previous, next) {
|
|
28
|
+
if (!previous || previous.length !== next.length)
|
|
29
|
+
return false;
|
|
30
|
+
const previousByPath = new Map(previous.map((file) => [file.path, file]));
|
|
31
|
+
return next.every((file) => {
|
|
32
|
+
const prior = previousByPath.get(file.path);
|
|
33
|
+
return prior !== undefined &&
|
|
34
|
+
prior.id === file.id &&
|
|
35
|
+
prior.version_id === file.version_id &&
|
|
36
|
+
prior.content === file.content &&
|
|
37
|
+
prior.type === file.type &&
|
|
38
|
+
prior.size === file.size &&
|
|
39
|
+
prior.updated_at === file.updated_at;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
19
42
|
/**
|
|
20
43
|
* Build a project-scoped manifest fetcher backed by the given API client.
|
|
21
44
|
*
|
|
@@ -49,6 +72,13 @@ export class VeryfrontFSAdapter {
|
|
|
49
72
|
branchMissRecoveryPromise = null;
|
|
50
73
|
branchMissRecoveryGeneration = 0;
|
|
51
74
|
branchMissRecoveryFailures = new Map();
|
|
75
|
+
/** Last successful source check and generation of the materialized snapshot. */
|
|
76
|
+
sourceSnapshotCheckedAt = 0;
|
|
77
|
+
sourceSnapshotVersion = 0;
|
|
78
|
+
sourceSnapshotIdentity;
|
|
79
|
+
sourceSnapshotFiles;
|
|
80
|
+
sourceSnapshotRefreshPromise = null;
|
|
81
|
+
sourceSnapshotMutationTail = Promise.resolve();
|
|
52
82
|
projectData;
|
|
53
83
|
apiBaseUrl;
|
|
54
84
|
apiToken;
|
|
@@ -67,6 +97,19 @@ export class VeryfrontFSAdapter {
|
|
|
67
97
|
getCurrentFileListCacheKey() {
|
|
68
98
|
return this.contentContext ? buildFileListCacheKey(this.contentContext) : undefined;
|
|
69
99
|
}
|
|
100
|
+
getCurrentSourceSnapshotIdentity() {
|
|
101
|
+
const context = this.contentContext;
|
|
102
|
+
if (!context)
|
|
103
|
+
return undefined;
|
|
104
|
+
switch (context.sourceType) {
|
|
105
|
+
case "branch":
|
|
106
|
+
return `branch:${context.projectSlug}:${this.requestBranch ?? context.branch ?? "main"}`;
|
|
107
|
+
case "environment":
|
|
108
|
+
return `environment:${context.projectSlug}:${context.environmentName ?? ""}:${context.releaseId ?? ""}`;
|
|
109
|
+
case "release":
|
|
110
|
+
return `release:${context.projectSlug}:${context.releaseId ?? ""}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
70
113
|
syncClientContext() {
|
|
71
114
|
this.client.clearRequestBranch();
|
|
72
115
|
if (this.contentContext) {
|
|
@@ -173,8 +216,7 @@ export class VeryfrontFSAdapter {
|
|
|
173
216
|
this.statOps.clearIndex();
|
|
174
217
|
this.dirOps.clearTree();
|
|
175
218
|
},
|
|
176
|
-
|
|
177
|
-
setFileListCache: (cacheKey, files) => this.cache.setAsync(cacheKey, files),
|
|
219
|
+
replaceSourceSnapshot: (cacheKey, files) => this.replaceSourceSnapshot(cacheKey, files),
|
|
178
220
|
pregenerateStyles: (files) => this.triggerCSSPregeneration(files),
|
|
179
221
|
});
|
|
180
222
|
logger.debug("Created", {
|
|
@@ -256,6 +298,7 @@ export class VeryfrontFSAdapter {
|
|
|
256
298
|
const files = await fetchFileListForContext(this.client, contentContext);
|
|
257
299
|
const fileSummary = summarizeFileList(files);
|
|
258
300
|
await this.cache.setAsync(cacheKey, files);
|
|
301
|
+
this.markSourceSnapshotChanged(files);
|
|
259
302
|
this.fileListReadyResolve?.();
|
|
260
303
|
this.fileListReadyResolve = null;
|
|
261
304
|
logger.debug("Fetched files during initialization", {
|
|
@@ -490,7 +533,53 @@ export class VeryfrontFSAdapter {
|
|
|
490
533
|
this.fileListWarmupKey = effectiveCacheKey;
|
|
491
534
|
this.readOps.setFileListReadyPromise(warmupPromise);
|
|
492
535
|
}
|
|
493
|
-
|
|
536
|
+
markSourceSnapshotChanged(files, identity = this.getCurrentSourceSnapshotIdentity()) {
|
|
537
|
+
this.sourceSnapshotFiles = files;
|
|
538
|
+
this.sourceSnapshotIdentity = identity;
|
|
539
|
+
this.sourceSnapshotVersion = nextSourceSnapshotGeneration();
|
|
540
|
+
this.sourceSnapshotCheckedAt = Date.now();
|
|
541
|
+
}
|
|
542
|
+
runSourceSnapshotMutation(operation) {
|
|
543
|
+
const mutation = this.sourceSnapshotMutationTail
|
|
544
|
+
.catch(() => undefined)
|
|
545
|
+
.then(operation);
|
|
546
|
+
this.sourceSnapshotMutationTail = mutation.then(() => undefined, () => undefined);
|
|
547
|
+
return mutation;
|
|
548
|
+
}
|
|
549
|
+
replaceSourceSnapshot(cacheKey, files) {
|
|
550
|
+
return this.runSourceSnapshotMutation(async () => {
|
|
551
|
+
const context = this.contentContext;
|
|
552
|
+
if (!context || buildFileListCacheKey(context) !== cacheKey) {
|
|
553
|
+
logger.debug("Discarding source snapshot for superseded content context", {
|
|
554
|
+
cacheKey,
|
|
555
|
+
projectSlug: this.projectSlug,
|
|
556
|
+
});
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
await this.cache.setAsync(cacheKey, files);
|
|
560
|
+
this.readOps.clearFileListIndex();
|
|
561
|
+
this.markSourceSnapshotChanged(files);
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
async invalidateDerivedSourceCaches() {
|
|
565
|
+
const projectId = this.client.getProjectId();
|
|
566
|
+
const invalidations = [];
|
|
567
|
+
if (projectId) {
|
|
568
|
+
invalidations.push(this.invalidationCallbacks.clearSSRModuleCacheForProject?.(projectId), this.invalidationCallbacks.clearRouterDetectionCacheForProject?.(projectId), this.invalidationCallbacks.clearProjectDiscoveryCacheForProject?.(projectId), this.invalidationCallbacks.clearRendererCacheForProject?.(projectId));
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
invalidations.push(this.invalidationCallbacks.clearSSRModuleCache?.());
|
|
572
|
+
}
|
|
573
|
+
invalidations.push(this.invalidationCallbacks.clearModulePathCache?.());
|
|
574
|
+
if (this.projectSlug) {
|
|
575
|
+
invalidations.push(this.invalidationCallbacks.clearSnippetCacheForProject?.(this.projectSlug), this.invalidationCallbacks.clearProjectCSSCache?.(this.projectSlug));
|
|
576
|
+
}
|
|
577
|
+
const pendingInvalidations = invalidations.filter((invalidation) => invalidation !== undefined);
|
|
578
|
+
if (pendingInvalidations.length > 0) {
|
|
579
|
+
await Promise.all(pendingInvalidations);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
async performSourceSnapshotRefresh(reason) {
|
|
494
583
|
await this.ensureInitialized();
|
|
495
584
|
if (!this.contentContext) {
|
|
496
585
|
logger.debug("Skipping source snapshot refresh without content context", {
|
|
@@ -501,22 +590,58 @@ export class VeryfrontFSAdapter {
|
|
|
501
590
|
}
|
|
502
591
|
const cacheKey = buildFileListCacheKey(this.contentContext);
|
|
503
592
|
const refreshContext = this.contentContext;
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
this.
|
|
507
|
-
this.statOps.clearIndex();
|
|
508
|
-
this.dirOps.clearTree();
|
|
509
|
-
await Promise.all([
|
|
510
|
-
this.cache.deleteByPrefixAsync(buildFileCacheKeyPrefix(refreshContext)),
|
|
511
|
-
this.cache.deleteByPrefixAsync(buildStatCacheKeyPrefix(refreshContext)),
|
|
512
|
-
this.cache.deleteByPrefixAsync(buildDirCacheKeyPrefix(refreshContext)),
|
|
513
|
-
this.cache.deleteAsync(cacheKey),
|
|
514
|
-
]);
|
|
593
|
+
const refreshIdentity = this.getCurrentSourceSnapshotIdentity();
|
|
594
|
+
const previousFiles = this.sourceSnapshotFiles;
|
|
595
|
+
const previousVersion = this.sourceSnapshotVersion;
|
|
515
596
|
const files = await fetchFileListForContext(this.client, refreshContext);
|
|
516
|
-
await this.
|
|
597
|
+
const result = await this.runSourceSnapshotMutation(async () => {
|
|
598
|
+
if (this.contentContext !== refreshContext ||
|
|
599
|
+
this.getCurrentSourceSnapshotIdentity() !== refreshIdentity ||
|
|
600
|
+
this.sourceSnapshotVersion !== previousVersion) {
|
|
601
|
+
return { applied: false, sourceChanged: false };
|
|
602
|
+
}
|
|
603
|
+
const sourceChanged = !sourceSnapshotsEqual(previousFiles, files);
|
|
604
|
+
if (sourceChanged) {
|
|
605
|
+
this.fileListWarmupPromise = null;
|
|
606
|
+
this.fileListWarmupKey = null;
|
|
607
|
+
this.readOps.clearFileListIndex();
|
|
608
|
+
this.statOps.clearIndex();
|
|
609
|
+
this.dirOps.clearTree();
|
|
610
|
+
await Promise.all([
|
|
611
|
+
this.cache.deleteByPrefixAsync(buildFileCacheKeyPrefix(refreshContext)),
|
|
612
|
+
this.cache.deleteByPrefixAsync(buildStatCacheKeyPrefix(refreshContext)),
|
|
613
|
+
this.cache.deleteByPrefixAsync(buildDirCacheKeyPrefix(refreshContext)),
|
|
614
|
+
this.cache.deleteAsync(cacheKey),
|
|
615
|
+
]);
|
|
616
|
+
}
|
|
617
|
+
await this.cache.setAsync(cacheKey, files);
|
|
618
|
+
this.branchMissRecoveryFailures.clear();
|
|
619
|
+
if (sourceChanged) {
|
|
620
|
+
await this.invalidateDerivedSourceCaches();
|
|
621
|
+
// Publish freshness only after every cache derived from the previous
|
|
622
|
+
// snapshot has been invalidated. Concurrent followers remain attached
|
|
623
|
+
// to the refresh singleflight until this point.
|
|
624
|
+
this.markSourceSnapshotChanged(files, refreshIdentity);
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
this.sourceSnapshotFiles = files;
|
|
628
|
+
this.sourceSnapshotIdentity = refreshIdentity;
|
|
629
|
+
this.sourceSnapshotCheckedAt = Date.now();
|
|
630
|
+
}
|
|
631
|
+
return { applied: true, sourceChanged };
|
|
632
|
+
});
|
|
633
|
+
if (!result.applied) {
|
|
634
|
+
logger.debug("Discarding stale source snapshot refresh", {
|
|
635
|
+
reason,
|
|
636
|
+
cacheKey,
|
|
637
|
+
projectSlug: this.projectSlug,
|
|
638
|
+
});
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
517
641
|
const fileSummary = summarizeFileList(files);
|
|
518
|
-
|
|
519
|
-
|
|
642
|
+
if (result.sourceChanged &&
|
|
643
|
+
fileSummary.sourceFilesWithContent > 0 &&
|
|
644
|
+
this.shouldBackgroundPregenerateStyles()) {
|
|
520
645
|
this.triggerCSSPregeneration(files).catch(() => {
|
|
521
646
|
// Error already logged in triggerCSSPregeneration
|
|
522
647
|
});
|
|
@@ -531,8 +656,42 @@ export class VeryfrontFSAdapter {
|
|
|
531
656
|
releaseId: refreshContext.releaseId,
|
|
532
657
|
totalFiles: fileSummary.totalFiles,
|
|
533
658
|
filesWithContent: fileSummary.filesWithContent,
|
|
659
|
+
sourceChanged: result.sourceChanged,
|
|
660
|
+
sourceSnapshotVersion: this.sourceSnapshotVersion,
|
|
534
661
|
});
|
|
535
662
|
}
|
|
663
|
+
async refreshSourceSnapshot(reason = "manual-refresh") {
|
|
664
|
+
await this.ensureInitialized();
|
|
665
|
+
while (true) {
|
|
666
|
+
this.sourceSnapshotRefreshPromise ??= this.performSourceSnapshotRefresh(reason);
|
|
667
|
+
const refresh = this.sourceSnapshotRefreshPromise;
|
|
668
|
+
try {
|
|
669
|
+
await refresh;
|
|
670
|
+
}
|
|
671
|
+
finally {
|
|
672
|
+
if (this.sourceSnapshotRefreshPromise === refresh) {
|
|
673
|
+
this.sourceSnapshotRefreshPromise = null;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
const currentIdentity = this.getCurrentSourceSnapshotIdentity();
|
|
677
|
+
if (currentIdentity === undefined ||
|
|
678
|
+
this.sourceSnapshotIdentity === currentIdentity)
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
async ensureSourceSnapshotFresh(reason = "freshness-check") {
|
|
683
|
+
await this.ensureInitialized();
|
|
684
|
+
if (this.contentContext?.sourceType !== "branch")
|
|
685
|
+
return;
|
|
686
|
+
if (this.sourceSnapshotIdentity === this.getCurrentSourceSnapshotIdentity() &&
|
|
687
|
+
Date.now() - this.sourceSnapshotCheckedAt < BRANCH_SOURCE_SNAPSHOT_FRESHNESS_MS) {
|
|
688
|
+
return;
|
|
689
|
+
}
|
|
690
|
+
await this.refreshSourceSnapshot(reason);
|
|
691
|
+
}
|
|
692
|
+
getSourceSnapshotVersion() {
|
|
693
|
+
return this.sourceSnapshotVersion;
|
|
694
|
+
}
|
|
536
695
|
getPokeMetrics() {
|
|
537
696
|
return this.wsManager.getPokeMetrics();
|
|
538
697
|
}
|
|
@@ -719,6 +878,11 @@ export class VeryfrontFSAdapter {
|
|
|
719
878
|
this.branchMissRecoveryPromise = null;
|
|
720
879
|
this.branchMissRecoveryGeneration++;
|
|
721
880
|
this.branchMissRecoveryFailures.clear();
|
|
881
|
+
this.sourceSnapshotCheckedAt = 0;
|
|
882
|
+
this.sourceSnapshotVersion = 0;
|
|
883
|
+
this.sourceSnapshotIdentity = undefined;
|
|
884
|
+
this.sourceSnapshotFiles = undefined;
|
|
885
|
+
this.sourceSnapshotRefreshPromise = null;
|
|
722
886
|
logger.debug("Cleared index and dirTree due to context change", {
|
|
723
887
|
oldContext,
|
|
724
888
|
newContext: context,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-invalidation-callbacks.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/default-invalidation-callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,wBAAgB,kCAAkC,CAChD,SAAS,CAAC,EAAE,qBAAqB,GAChC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"default-invalidation-callbacks.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/default-invalidation-callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,wBAAgB,kCAAkC,CAChD,SAAS,CAAC,EAAE,qBAAqB,GAChC,qBAAqB,CAmDvB"}
|
|
@@ -4,22 +4,27 @@ function loadModule(specifier) {
|
|
|
4
4
|
export function createDefaultInvalidationCallbacks(callbacks) {
|
|
5
5
|
return {
|
|
6
6
|
clearSSRModuleCache: () => {
|
|
7
|
-
|
|
7
|
+
return loadModule("#veryfront/modules/react-loader/ssr-module-loader/cache/index.ts").then((m) => m.clearSSRModuleCache());
|
|
8
8
|
},
|
|
9
9
|
clearModulePathCache: () => {
|
|
10
|
-
|
|
10
|
+
return loadModule("#veryfront/transforms/mdx/esm-module-loader/cache/index.ts").then((m) => m.clearModulePathCache());
|
|
11
11
|
},
|
|
12
12
|
invalidateModulePaths: (changedPaths) => {
|
|
13
|
-
|
|
13
|
+
return loadModule("#veryfront/transforms/mdx/esm-module-loader/cache/index.ts").then((m) => m.invalidateModulePaths(changedPaths));
|
|
14
14
|
},
|
|
15
15
|
clearSSRModuleCacheForProject: (projectId) => {
|
|
16
|
-
|
|
16
|
+
return loadModule("#veryfront/modules/react-loader/ssr-module-loader/cache/index.ts").then((m) => m.clearSSRModuleCacheForProject(projectId));
|
|
17
17
|
},
|
|
18
|
-
clearRouterDetectionCacheForProject: (projectId) => {
|
|
19
|
-
|
|
18
|
+
clearRouterDetectionCacheForProject: async (projectId) => {
|
|
19
|
+
const module = await loadModule("#veryfront/rendering/router-detection.ts");
|
|
20
|
+
module.clearRouterDetectionCacheForProject(projectId);
|
|
21
|
+
},
|
|
22
|
+
clearProjectDiscoveryCacheForProject: async (projectId) => {
|
|
23
|
+
const module = await loadModule("#veryfront/server/handlers/request/api/project-discovery.ts");
|
|
24
|
+
module.clearProjectDiscoveryCacheForProject(projectId);
|
|
20
25
|
},
|
|
21
26
|
clearSnippetCacheForProject: (projectSlug) => {
|
|
22
|
-
|
|
27
|
+
return loadModule("#veryfront/rendering/snippet-renderer.ts").then((m) => m.clearSnippetCacheForProject(projectSlug));
|
|
23
28
|
},
|
|
24
29
|
clearRendererCacheForProject: async (projectId) => {
|
|
25
30
|
const { clearRendererCacheForProject } = await loadModule("#veryfront/rendering/renderer.ts");
|
|
@@ -32,6 +32,8 @@ export declare class MultiProjectFSAdapter implements FSAdapter {
|
|
|
32
32
|
readDir(path: string): AsyncIterable<DirectoryEntry>;
|
|
33
33
|
resolveFile(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
|
|
34
34
|
refreshSourceSnapshot(reason?: string): Promise<void>;
|
|
35
|
+
ensureSourceSnapshotFresh(reason?: string): Promise<void>;
|
|
36
|
+
getSourceSnapshotVersion(): Promise<number | undefined>;
|
|
35
37
|
dispose(): void;
|
|
36
38
|
getManagerStats(): ReturnType<ProxyFSAdapterManager["getStats"]>;
|
|
37
39
|
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;AAOvD,OAAO,EACL,2BAA2B,EAC3B,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;IAoDb,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,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnD,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;
|
|
1
|
+
{"version":3,"file":"multi-project-adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/fs/veryfront/multi-project-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -163,6 +163,34 @@ export class MultiProjectFSAdapter {
|
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
|
+
async ensureSourceSnapshotFresh(reason) {
|
|
167
|
+
const adapter = await this.getAdapter();
|
|
168
|
+
if (typeof adapter.ensureSourceSnapshotFresh !== "function")
|
|
169
|
+
return;
|
|
170
|
+
const previousVersion = await adapter.getSourceSnapshotVersion?.();
|
|
171
|
+
await adapter.ensureSourceSnapshotFresh(reason);
|
|
172
|
+
const currentVersion = await adapter.getSourceSnapshotVersion?.();
|
|
173
|
+
const sourceMayHaveChanged = previousVersion === undefined ||
|
|
174
|
+
currentVersion === undefined ||
|
|
175
|
+
previousVersion !== currentVersion;
|
|
176
|
+
if (!sourceMayHaveChanged)
|
|
177
|
+
return;
|
|
178
|
+
const cleared = clearRequestScopedFileCache();
|
|
179
|
+
if (cleared > 0) {
|
|
180
|
+
logger.debug("Cleared request-scoped file cache after source freshness changed", {
|
|
181
|
+
reason,
|
|
182
|
+
cleared,
|
|
183
|
+
previousVersion,
|
|
184
|
+
currentVersion,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async getSourceSnapshotVersion() {
|
|
189
|
+
const adapter = await this.getAdapter();
|
|
190
|
+
return typeof adapter.getSourceSnapshotVersion === "function"
|
|
191
|
+
? await adapter.getSourceSnapshotVersion()
|
|
192
|
+
: undefined;
|
|
193
|
+
}
|
|
166
194
|
dispose() {
|
|
167
195
|
this.manager.dispose();
|
|
168
196
|
this.defaultAdapter?.dispose();
|
|
@@ -28,6 +28,8 @@ export interface FSAdapter {
|
|
|
28
28
|
shutdown?(): Promise<void>;
|
|
29
29
|
resolveFile?(basePath: string, options?: ResolveFileOptions): Promise<string | null>;
|
|
30
30
|
refreshSourceSnapshot?(reason?: string): Promise<void>;
|
|
31
|
+
ensureSourceSnapshotFresh?(reason?: string): Promise<void>;
|
|
32
|
+
getSourceSnapshotVersion?(): number | undefined | Promise<number | undefined>;
|
|
31
33
|
}
|
|
32
34
|
export interface ContextualFSAdapter extends FSAdapter {
|
|
33
35
|
setRequestToken?(token: string): void;
|
|
@@ -133,16 +135,17 @@ export interface InvalidationProjectContext {
|
|
|
133
135
|
styleAssetPath?: string;
|
|
134
136
|
}
|
|
135
137
|
export interface InvalidationCallbacks {
|
|
136
|
-
clearSSRModuleCache?: () => void
|
|
137
|
-
clearSSRModuleCacheForProject?: (projectId: string) => void
|
|
138
|
-
clearRouterDetectionCacheForProject?: (projectId: string) => void
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
138
|
+
clearSSRModuleCache?: () => void | Promise<void>;
|
|
139
|
+
clearSSRModuleCacheForProject?: (projectId: string) => void | Promise<void>;
|
|
140
|
+
clearRouterDetectionCacheForProject?: (projectId: string) => void | Promise<void>;
|
|
141
|
+
clearProjectDiscoveryCacheForProject?: (projectId: string) => void | Promise<void>;
|
|
142
|
+
clearModulePathCache?: () => void | Promise<void>;
|
|
143
|
+
invalidateModulePaths?: (changedPaths: string[]) => void | Promise<void>;
|
|
144
|
+
clearSnippetCacheForProject?: (projectSlug: string) => void | Promise<void>;
|
|
142
145
|
triggerReload?: (changedPaths?: string[], project?: InvalidationProjectContext) => void;
|
|
143
146
|
clearRendererCacheForProject?: (projectId: string) => void | Promise<void>;
|
|
144
147
|
/** Invalidate project-level CSS cache when source files change */
|
|
145
|
-
clearProjectCSSCache?: (projectSlug: string) => void
|
|
148
|
+
clearProjectCSSCache?: (projectSlug: string) => void | Promise<void>;
|
|
146
149
|
/** Clear domain lookup cache to refresh release IDs after publishing */
|
|
147
150
|
clearDomainCache?: () => void;
|
|
148
151
|
/** Evict the current shared proxy adapter after successful invalidation */
|