This commit is contained in:
2025-11-14 02:35:17 +01:00
parent 6f4ff68062
commit a3c5494bf7
53 changed files with 269 additions and 340 deletions
+17 -16
View File
@@ -81,15 +81,16 @@ const mergeAssetObjects = (
const merged = new Map<number, AssetObject>();
normalizeAssetObjects(existingObjects).forEach((entry) => {
if (typeof entry.ordinal === 'number') {
merged.set(entry.ordinal, { ...entry });
if (Number.isFinite(entry.ordinal)) {
merged.set(entry.ordinal as number, { ...entry });
}
});
normalizeAssetObjects(incomingObjects).forEach((entry) => {
if (typeof entry.ordinal === 'number') {
const current = merged.get(entry.ordinal) || {};
merged.set(entry.ordinal, { ...current, ...entry });
if (Number.isFinite(entry.ordinal)) {
const ordinal = entry.ordinal as number;
const current = merged.get(ordinal) || {};
merged.set(ordinal, { ...current, ...entry });
}
});
@@ -198,23 +199,23 @@ export const resolveDocumentAssetUrl = (
if (!doc || !type) {
return null;
}
const asset = typeof getAsset === 'function' ? getAsset(doc, type) : null;
const asset = getAsset ? getAsset(doc, type) : null;
if (!asset) {
return null;
}
const view = createAssetView(asset);
const object = view.getObject(objectOrdinal);
const url = object?.url || (objectOrdinal === 1 ? view.getPrimaryUrl() : null);
const expiresAt = typeof object?.expires_at === 'number'
? object.expires_at
: objectOrdinal === 1 && typeof asset.expiresAt === 'number'
? asset.expiresAt
const expiresAt = Number.isFinite(object?.expires_at)
? Number(object?.expires_at)
: objectOrdinal === 1 && Number.isFinite(asset.expiresAt)
? Number(asset.expiresAt)
: null;
const now = Date.now();
if (url && (!expiresAt || expiresAt > now)) {
return url;
}
if (doc.id && asset.id && typeof ensureAssetUrl === 'function') {
if (doc.id && asset.id && ensureAssetUrl) {
const force = Boolean(url && expiresAt && expiresAt <= now);
const options: { force: boolean; start?: number | null; limit?: number | null; [key: string]: unknown } = {
force,
@@ -397,7 +398,7 @@ class AssetManager {
const baseAsset = this.assetCache.get(asset.id) || asset;
const view = createAssetView(baseAsset);
const assetExpiresAt = typeof baseAsset.expiresAt === 'number' ? baseAsset.expiresAt : null;
const assetExpiresAt = Number.isFinite(baseAsset.expiresAt) ? Number(baseAsset.expiresAt) : null;
const now = Date.now();
const isOrdinalSatisfied = (ordinal) => {
@@ -408,8 +409,8 @@ class AssetManager {
if (!object.url) {
return false;
}
if (typeof object.expires_at === 'number') {
return object.expires_at > now;
if (Number.isFinite(object.expires_at)) {
return Number(object.expires_at) > now;
}
if (ordinal === 1 && baseAsset.url && (!assetExpiresAt || assetExpiresAt > now)) {
return true;
@@ -460,8 +461,8 @@ class AssetManager {
const combined = { ...cachedEntry, ...asset, ...data, objects: mergedObjects };
const view = createAssetView(combined);
const primaryObject = view.getPrimaryObject();
const expiresAt = typeof primaryObject?.expires_at === 'number'
? primaryObject.expires_at
const expiresAt = Number.isFinite(primaryObject?.expires_at)
? Number(primaryObject?.expires_at)
: Date.now() + this.assetPresignTtlMs;
const cardinality = (() => {
const reported = Number(data.cardinality ?? asset.cardinality ?? cachedEntry?.cardinality);