@paroicms/server-image-cache-engine
Version:
The image variant engine that we use at Paroi.
69 lines • 2.52 kB
JavaScript
import { fetchImageVariantWithBinary, insertIntoImageVariant, insertIntoPaImageCacheOwner, } from "./queries.js";
import { resizeImage } from "./resizer.js";
export async function processAllPending(context) {
while (true) {
const taskKey = context.queue.shift();
if (!taskKey)
break;
const pth = context.pendingTasks.get(taskKey);
if (!pth) {
context.logger.error(`Missing pending variant '${taskKey}'`);
continue;
}
const { task, resolve, reject } = pth;
try {
const result = await executeTask(task, context);
resolve(result);
}
catch (error) {
context.logger.error(`[image-cache-engine] image '${task.variant.mediaId}', '${task.variant.rawSizeName}':`, error, task);
reject(error);
}
context.pendingTasks.delete(taskKey);
for (const oneOwnerKey of pth.ownerKeys) {
context.pendingTaskByOwnerKeys.delete(oneOwnerKey);
}
}
}
async function executeTask(task, ctx) {
const found = await fetchImageVariantWithBinary(ctx, task.variant);
if (found) {
if (task.owners.size > 0) {
await insertIntoPaImageCacheOwner(ctx, {
imageCacheId: found.id,
owners: Array.from(task.owners.values()),
});
}
return found.variant;
}
const origBinaryFile = await ctx.getOriginalImage(task.variant.mediaId);
const result = await resizeImage({
binaryFile: origBinaryFile,
rawSize: task.variant,
formatTo: task.variant.mediaType !== task.input.sourceImage.mediaType
? {
mediaType: task.variant.mediaType,
}
: undefined,
qualityPolicy: ctx.qualityPolicy,
});
const { lastModified } = await insertIntoImageVariant(ctx, {
resourceVersion: task.variant.resourceVersion,
mediaId: task.variant.mediaId,
mediaType: result.mediaType,
rawWidth: result.rawWidth,
rawHeight: result.rawHeight,
weightB: result.weightB,
binaryFile: result.binaryFile,
slug: task.variant.slug,
}, Array.from(task.owners.values()));
return {
...result,
mediaId: task.variant.mediaId,
resourceVersion: task.variant.resourceVersion,
rawSizeName: task.variant.rawSizeName,
slug: task.variant.slug,
lastModified,
};
}
//# sourceMappingURL=task-processor.js.map