@paroicms/server-image-cache-engine 1.22.5 → 1.23.0

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.
Files changed (60) hide show
  1. package/ddl/image-cache.ddl.sql +16 -15
  2. package/dist/compute-variant-size.d.ts +4 -9
  3. package/dist/compute-variant-size.js +28 -38
  4. package/dist/compute-variant-size.js.map +1 -1
  5. package/dist/constants.d.ts +3 -0
  6. package/dist/constants.js +8 -0
  7. package/dist/constants.js.map +1 -1
  8. package/dist/db-init/ddl-migration.d.ts +1 -1
  9. package/dist/db-init/ddl-migration.js +1 -1
  10. package/dist/db-init/ddl-migration.js.map +1 -1
  11. package/dist/default-bo-favicon.js +2 -2
  12. package/dist/default-bo-favicon.js.map +1 -1
  13. package/dist/engine-types.d.ts +42 -19
  14. package/dist/image-cache-engine.d.ts +42 -36
  15. package/dist/image-cache-engine.js +107 -138
  16. package/dist/image-cache-engine.js.map +1 -1
  17. package/dist/image-utils.d.ts +6 -0
  18. package/dist/image-utils.js +12 -0
  19. package/dist/image-utils.js.map +1 -0
  20. package/dist/{api.d.ts → index.d.ts} +2 -1
  21. package/dist/{api.js → index.js} +3 -2
  22. package/dist/index.js.map +1 -0
  23. package/dist/internal/engine-context.d.ts +12 -6
  24. package/dist/internal/engine-context.js +1 -2
  25. package/dist/internal/engine-context.js.map +1 -1
  26. package/dist/internal/internal.types.d.ts +36 -16
  27. package/dist/internal/queries.d.ts +64 -38
  28. package/dist/internal/queries.js +246 -106
  29. package/dist/internal/queries.js.map +1 -1
  30. package/dist/internal/resizer.d.ts +6 -6
  31. package/dist/internal/resizer.js +9 -9
  32. package/dist/internal/resizer.js.map +1 -1
  33. package/dist/internal/task-processor.js +37 -34
  34. package/dist/internal/task-processor.js.map +1 -1
  35. package/dist/internal/utils.d.ts +16 -0
  36. package/dist/internal/utils.js +34 -0
  37. package/dist/internal/utils.js.map +1 -0
  38. package/dist/original-images-processing.d.ts +2 -2
  39. package/dist/original-images-processing.js +27 -14
  40. package/dist/original-images-processing.js.map +1 -1
  41. package/dist/owner-transaction/make-t-image-available.d.ts +7 -0
  42. package/dist/owner-transaction/make-t-image-available.js +122 -0
  43. package/dist/owner-transaction/make-t-image-available.js.map +1 -0
  44. package/dist/owner-transaction/owner-batch.d.ts +10 -0
  45. package/dist/owner-transaction/owner-batch.js +85 -0
  46. package/dist/owner-transaction/owner-batch.js.map +1 -0
  47. package/dist/owner-transaction/owner-image-manager.d.ts +11 -0
  48. package/dist/owner-transaction/owner-image-manager.js +44 -0
  49. package/dist/owner-transaction/owner-image-manager.js.map +1 -0
  50. package/dist/owner-transaction/owner-transaction-types.d.ts +12 -0
  51. package/dist/owner-transaction/owner-transaction-types.js +2 -0
  52. package/dist/owner-transaction/owner-transaction-types.js.map +1 -0
  53. package/dist/owner-transaction/owner-transaction.d.ts +13 -0
  54. package/dist/owner-transaction/owner-transaction.js +60 -0
  55. package/dist/owner-transaction/owner-transaction.js.map +1 -0
  56. package/dist/owner-transaction/owner-utils.d.ts +1 -0
  57. package/dist/owner-transaction/owner-utils.js +10 -0
  58. package/dist/owner-transaction/owner-utils.js.map +1 -0
  59. package/package.json +8 -8
  60. package/dist/api.js.map +0 -1
@@ -1,66 +1,69 @@
1
- import { fetchImageVariantWithBinary, insertIntoImageVariant, markOneUsedKeyAsUsed, } from "./queries.js";
1
+ import { fetchImageVariantWithBinary, insertIntoImageVariant, insertIntoPaImageCacheOwner, } from "./queries.js";
2
2
  import { resizeImage } from "./resizer.js";
3
3
  export async function processAllPending(context) {
4
4
  while (true) {
5
- const task = context.queue.shift();
6
- if (!task)
5
+ const taskKey = context.queue.shift();
6
+ if (!taskKey)
7
7
  break;
8
- const pth = context.pendingTasks.get(task.taskKey);
8
+ const pth = context.pendingTasks.get(taskKey);
9
9
  if (!pth) {
10
- context.logger.error(`Missing pending variant '${task.taskKey}'`);
10
+ context.logger.error(`Missing pending variant '${taskKey}'`);
11
11
  continue;
12
12
  }
13
+ const { task, resolve, reject } = pth;
13
14
  try {
14
- const result = await excecuteTask(task, context);
15
- pth.resolve(result);
15
+ const result = await executeTask(task, context);
16
+ resolve(result);
16
17
  }
17
18
  catch (error) {
18
- context.logger.error(`[image-cache-engine] image '${task.imageUid}', '${task.variantName}':`, error, task);
19
- pth.reject(error);
19
+ context.logger.error(`[image-cache-engine] image '${task.variant.mediaId}', '${task.variant.rawSizeName}':`, error, task);
20
+ reject(error);
21
+ }
22
+ context.pendingTasks.delete(taskKey);
23
+ for (const oneOwnerKey of pth.ownerKeys) {
24
+ context.pendingTaskByOwnerKeys.delete(oneOwnerKey);
20
25
  }
21
- context.pendingTasks.delete(task.taskKey);
22
26
  }
23
27
  }
24
- async function excecuteTask(task, ctx) {
25
- const found = await fetchImageVariantWithBinary(ctx, {
26
- imageUid: task.imageUid,
27
- variantName: task.variantName,
28
- });
28
+ async function executeTask(task, ctx) {
29
+ const found = await fetchImageVariantWithBinary(ctx, task.variant);
29
30
  if (found) {
30
- await markOneUsedKeyAsUsed(ctx, {
31
- imageCacheId: found.id,
32
- usedKey: task.dependsOnUsedKey,
33
- });
31
+ if (task.owners.size > 0) {
32
+ await insertIntoPaImageCacheOwner(ctx, {
33
+ imageCacheId: found.id,
34
+ owners: Array.from(task.owners.values()),
35
+ });
36
+ }
34
37
  return found.variant;
35
38
  }
36
- const origBinaryFile = await ctx.getOriginalImage(task.imageUid);
39
+ const origBinaryFile = await ctx.getOriginalImage(task.variant.mediaId);
37
40
  const result = await resizeImage({
38
41
  binaryFile: origBinaryFile,
39
- imageSize: task.imageSize,
40
- formatTo: task.changeMediaTypeTo
42
+ rawSize: task.variant,
43
+ formatTo: task.variant.mediaType !== task.input.sourceImage.mediaType
41
44
  ? {
42
- mediaType: task.changeMediaTypeTo,
45
+ mediaType: task.variant.mediaType,
43
46
  }
44
47
  : undefined,
45
48
  qualityPolicy: ctx.qualityPolicy,
46
49
  });
47
- const { lastModified } = await insertIntoImageVariant(ctx.cn, {
48
- resourceVersion: task.resourceVersion,
49
- imageUid: task.imageUid,
50
- slug: task.slug,
50
+ const { lastModified } = await insertIntoImageVariant(ctx, {
51
+ resourceVersion: task.variant.resourceVersion,
52
+ mediaId: task.variant.mediaId,
51
53
  mediaType: result.mediaType,
52
- variantName: task.variantName,
53
- width: result.width,
54
- height: result.height,
54
+ rawWidth: result.rawWidth,
55
+ rawHeight: result.rawHeight,
55
56
  weightB: result.weightB,
56
57
  binaryFile: result.binaryFile,
57
- }, task.dependsOnUsedKey);
58
+ slug: task.variant.slug,
59
+ }, Array.from(task.owners.values()));
58
60
  return {
59
61
  ...result,
62
+ mediaId: task.variant.mediaId,
63
+ resourceVersion: task.variant.resourceVersion,
64
+ rawSizeName: task.variant.rawSizeName,
65
+ slug: task.variant.slug,
60
66
  lastModified,
61
- resourceVersion: task.resourceVersion,
62
- slug: task.slug,
63
- variantName: task.variantName,
64
67
  };
65
68
  }
66
69
  //# sourceMappingURL=task-processor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-processor.js","sourceRoot":"","sources":["../../src/internal/task-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-processor.js","sourceRoot":"","sources":["../../src/internal/task-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ResizeRule, SizeName } from "@paroicms/public-anywhere-lib";
2
+ import type { NewVariantInput } from "../engine-types.js";
3
+ import type { CompletedInput, OwnerKey, StoredCacheItem, TaskKey, TransactionCacheItem } from "./internal.types.js";
4
+ export declare function makeTaskKey(v: {
5
+ mediaId: string;
6
+ mediaType: string;
7
+ rawSizeName: SizeName;
8
+ }): TaskKey;
9
+ export declare function makeOwnerKey(v: {
10
+ mediaId: string;
11
+ mediaType: string;
12
+ ownerHandle: string;
13
+ rawResizeR: ResizeRule;
14
+ }): OwnerKey;
15
+ export declare function completeInput(input: NewVariantInput): CompletedInput;
16
+ export declare function toTransactionCacheItem(item: StoredCacheItem): TransactionCacheItem;
@@ -0,0 +1,34 @@
1
+ import { computeImageVariantSize } from "../compute-variant-size.js";
2
+ export function makeTaskKey(v) {
3
+ return `${v.mediaId}:${v.rawSizeName}:${v.mediaType}`;
4
+ }
5
+ export function makeOwnerKey(v) {
6
+ return `${v.ownerHandle}:${v.mediaId}:${v.rawResizeR}:${v.mediaType}`;
7
+ }
8
+ export function completeInput(input) {
9
+ const { sourceImage, rawResizeR, autoCrop } = input;
10
+ const variantSize = computeImageVariantSize(input);
11
+ const { rawSizeName, rawWidth, rawHeight } = variantSize;
12
+ const mediaId = sourceImage.mediaId;
13
+ const mediaType = input.mediaType ?? sourceImage.mediaType;
14
+ return {
15
+ taskKey: makeTaskKey({ mediaId, mediaType, rawSizeName }),
16
+ sourceImage,
17
+ requestedVariant: {
18
+ rawSizeName,
19
+ mediaType,
20
+ rawWidth,
21
+ rawHeight,
22
+ },
23
+ rawResizeR,
24
+ autoCrop,
25
+ };
26
+ }
27
+ export function toTransactionCacheItem(item) {
28
+ const { variant, ...stored } = item;
29
+ return {
30
+ variant: item.variant,
31
+ stored,
32
+ };
33
+ }
34
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAUrE,MAAM,UAAU,WAAW,CAAC,CAI3B;IACC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAK5B;IACC,OAAO,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IACzD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC;IAC3D,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QACzD,WAAW;QACX,gBAAgB,EAAE;YAChB,WAAW;YACX,SAAS;YACT,QAAQ;YACR,SAAS;SACV;QACD,UAAU;QACV,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAqB;IAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -4,8 +4,8 @@ export interface ApiErrorType {
4
4
  }
5
5
  export interface OriginalImage {
6
6
  binaryFile: Buffer;
7
- width: number;
8
- height: number;
7
+ rawWidth: number;
8
+ rawHeight: number;
9
9
  weightB: number;
10
10
  mediaType: string;
11
11
  lossless: boolean | undefined;
@@ -22,17 +22,31 @@ export async function processOriginalImage({ binaryFile, mediaType, ApiError, po
22
22
  if (weightLimitB && weightB > weightLimitB) {
23
23
  throw new ApiError("Image weight exceeds limit", 400);
24
24
  }
25
- return { binaryFile, width, height, mediaType, weightB, lossless: undefined };
25
+ return {
26
+ binaryFile,
27
+ rawWidth: width,
28
+ rawHeight: height,
29
+ mediaType,
30
+ weightB,
31
+ lossless: undefined,
32
+ };
26
33
  }
27
34
  const input = {
28
- width,
29
- height,
35
+ rawWidth: width,
36
+ rawHeight: height,
30
37
  mediaType,
31
38
  sharpInst,
32
39
  };
33
40
  if (mediaType === "image/webp") {
34
41
  if (weightLimitB === undefined || weightB <= weightLimitB) {
35
- return { binaryFile, width, height, mediaType, weightB, lossless: undefined };
42
+ return {
43
+ binaryFile,
44
+ rawWidth: width,
45
+ rawHeight: height,
46
+ mediaType,
47
+ weightB,
48
+ lossless: undefined,
49
+ };
36
50
  }
37
51
  return await convertToWebp({ input, qualityPolicy, areaLimitPx, lossless: false });
38
52
  }
@@ -49,19 +63,18 @@ export async function processOriginalImage({ binaryFile, mediaType, ApiError, po
49
63
  return await convertToWebp({ input, qualityPolicy, areaLimitPx, lossless: false });
50
64
  }
51
65
  async function convertToWebp({ input, qualityPolicy, areaLimitPx, lossless, }) {
52
- const { width, height } = areaLimitPx === undefined ? input : computeOriginalSize(input, areaLimitPx);
53
- const size = { width, height }; // to be sure we keep only these properties
54
- const quality = getQuality(size, qualityPolicy);
66
+ const { rawWidth, rawHeight } = areaLimitPx === undefined ? input : computeOriginalSize(input, areaLimitPx);
67
+ const quality = getQuality({ rawWidth, rawHeight }, qualityPolicy);
55
68
  const { data, info } = await sharpQueue(() => input.sharpInst
56
- .resize(size)
69
+ .resize({ width: rawWidth, height: rawHeight })
57
70
  .webp({
58
71
  lossless,
59
72
  quality,
60
73
  })
61
74
  .toBuffer({ resolveWithObject: true }));
62
75
  return {
63
- width: info.width,
64
- height: info.height,
76
+ rawWidth: info.width,
77
+ rawHeight: info.height,
65
78
  weightB: data.byteLength,
66
79
  mediaType: "image/webp",
67
80
  lossless,
@@ -69,12 +82,12 @@ async function convertToWebp({ input, qualityPolicy, areaLimitPx, lossless, }) {
69
82
  };
70
83
  }
71
84
  function computeOriginalSize(input, areaLimitPx) {
72
- const inputArea = input.width * input.height;
85
+ const inputArea = input.rawWidth * input.rawHeight;
73
86
  if (inputArea <= areaLimitPx)
74
87
  return input;
75
- const ratio = input.width / input.height;
88
+ const ratio = input.rawWidth / input.rawHeight;
76
89
  const width = Math.trunc(Math.sqrt(areaLimitPx * ratio));
77
- const height = Math.round((input.height / input.width) * width);
78
- return { width, height };
90
+ const height = Math.round((input.rawHeight / input.rawWidth) * width);
91
+ return { rawWidth: width, rawHeight: height };
79
92
  }
80
93
  //# sourceMappingURL=original-images-processing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"original-images-processing.js","sourceRoot":"","sources":["../src/original-images-processing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"original-images-processing.js","sourceRoot":"","sources":["../src/original-images-processing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ImageVariant, NewVariantInput } from "../engine-types.js";
2
+ import type { OwnerTransactionContext } from "./owner-transaction-types.js";
3
+ export declare function makeTransactionImageAvailable(otContext: OwnerTransactionContext, inputs: NewVariantInput[], { optimizeForBatch, }: {
4
+ optimizeForBatch?: {
5
+ getMoreInputsForBatch: (filter: (input: NewVariantInput) => boolean) => NewVariantInput[];
6
+ };
7
+ }): Promise<ImageVariant[]>;
@@ -0,0 +1,122 @@
1
+ import { completeInput, makeOwnerKey } from "../internal/utils.js";
2
+ import { makeBatchOfImagesAvailable } from "./owner-batch.js";
3
+ import { promiseToHandleSafely } from "./owner-utils.js";
4
+ export async function makeTransactionImageAvailable(otContext, inputs, { optimizeForBatch, }) {
5
+ const { engineContext, ownerHandle, canBeRetrievedByOwner, localCache } = otContext;
6
+ const completedInputs = inputs.map(completeInput);
7
+ let unresolvedInputs = completedInputs.filter((input) => !localCache.has(input.taskKey));
8
+ const pendingVariants = new Map();
9
+ for (const input of unresolvedInputs) {
10
+ const pt = engineContext.pendingTasks.get(input.taskKey);
11
+ if (pt) {
12
+ pt.task.owners.set(ownerHandle, { ownerHandle, rawResizeR: input.rawResizeR });
13
+ pendingVariants.set(input.taskKey, pt.task.variant);
14
+ if (canBeRetrievedByOwner) {
15
+ pt.ownerKeys.add(makeOwnerKey({
16
+ mediaId: input.sourceImage.mediaId,
17
+ mediaType: input.requestedVariant.mediaType,
18
+ ownerHandle,
19
+ rawResizeR: input.rawResizeR,
20
+ }));
21
+ }
22
+ }
23
+ }
24
+ unresolvedInputs = unresolvedInputs.filter((input) => !pendingVariants.has(input.taskKey));
25
+ if (unresolvedInputs.length > 0) {
26
+ const unresolvedTaskKeys = new Set(unresolvedInputs.map((i) => i.taskKey));
27
+ let augmentedInputs = unresolvedInputs;
28
+ if (optimizeForBatch) {
29
+ const newItems = optimizeForBatch
30
+ .getMoreInputsForBatch((candidate) => {
31
+ return unresolvedTaskKeys.has(completeInput(candidate).taskKey);
32
+ })
33
+ .map(completeInput);
34
+ augmentedInputs = augmentedInputs.concat(newItems);
35
+ }
36
+ await makeBatchOfImagesAvailable(otContext, augmentedInputs);
37
+ }
38
+ createTasksAndCollectImageOwners(otContext, completedInputs, canBeRetrievedByOwner);
39
+ return completedInputs.map((input) => {
40
+ const pending = pendingVariants.get(input.taskKey);
41
+ if (pending)
42
+ return pending;
43
+ const v = localCache.get(input.taskKey);
44
+ if (!v) {
45
+ throw new Error(`Missing image variant for task "${input.taskKey}" (ownerHandle: ${ownerHandle})`);
46
+ }
47
+ v.usedBy = input;
48
+ return v.variant;
49
+ });
50
+ }
51
+ function createTasksAndCollectImageOwners(otContext, completedInputs, canBeRetrievedByOwner) {
52
+ const { startQueue } = otContext;
53
+ let hasCreatedTask = false;
54
+ for (const input of completedInputs) {
55
+ const taskCreated = processImageInput(otContext, input, canBeRetrievedByOwner);
56
+ if (taskCreated) {
57
+ hasCreatedTask = true;
58
+ }
59
+ }
60
+ if (hasCreatedTask) {
61
+ startQueue();
62
+ }
63
+ }
64
+ /**
65
+ * @returns `true` if a new task was created.
66
+ */
67
+ function processImageInput(otContext, input, canBeRetrievedByOwner) {
68
+ const { engineContext, ownerHandle } = otContext;
69
+ const cacheItem = otContext.localCache.get(input.taskKey);
70
+ if (!cacheItem)
71
+ return false;
72
+ const { stored } = cacheItem;
73
+ if (stored) {
74
+ // Item is already stored - add to owner image manager if not already owned
75
+ if (!stored.alreadyOwned) {
76
+ otContext.ownerImageManager.add(stored.imageCacheId, input.rawResizeR);
77
+ }
78
+ return false;
79
+ }
80
+ // Item needs a task - check if task already exists
81
+ const pending = engineContext.pendingTasks.get(input.taskKey);
82
+ if (pending) {
83
+ pending.task.owners.set(ownerHandle, { ownerHandle, rawResizeR: input.rawResizeR });
84
+ if (canBeRetrievedByOwner) {
85
+ const ownerKey = makeOwnerKey({
86
+ mediaId: input.sourceImage.mediaId,
87
+ mediaType: input.requestedVariant.mediaType,
88
+ ownerHandle,
89
+ rawResizeR: input.rawResizeR,
90
+ });
91
+ pending.ownerKeys.add(ownerKey);
92
+ }
93
+ return false;
94
+ }
95
+ // Create new task
96
+ const ownerKey = canBeRetrievedByOwner
97
+ ? makeOwnerKey({
98
+ mediaId: input.sourceImage.mediaId,
99
+ mediaType: input.requestedVariant.mediaType,
100
+ ownerHandle,
101
+ rawResizeR: input.rawResizeR,
102
+ })
103
+ : undefined;
104
+ const task = {
105
+ variant: cacheItem.variant,
106
+ input,
107
+ owners: new Map([[ownerHandle, { ownerHandle, rawResizeR: input.rawResizeR }]]),
108
+ };
109
+ const pendingTask = {
110
+ ...promiseToHandleSafely(),
111
+ task,
112
+ ownerKeys: new Set(),
113
+ };
114
+ engineContext.queue.push(input.taskKey);
115
+ engineContext.pendingTasks.set(input.taskKey, pendingTask);
116
+ if (ownerKey) {
117
+ pendingTask.ownerKeys.add(ownerKey);
118
+ engineContext.pendingTaskByOwnerKeys.set(ownerKey, pendingTask);
119
+ }
120
+ return true;
121
+ }
122
+ //# sourceMappingURL=make-t-image-available.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-t-image-available.js","sourceRoot":"","sources":["../../src/owner-transaction/make-t-image-available.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RequestedImageVariantWithSize, SourceImageRef } from "../engine-types.js";
2
+ import type { CompletedInput } from "../internal/internal.types.js";
3
+ import type { OwnerTransactionContext } from "./owner-transaction-types.js";
4
+ export declare function makeBatchOfImagesAvailable(otContext: OwnerTransactionContext, inputs: CompletedInput[]): Promise<void>;
5
+ export interface GroupedInputsByImage {
6
+ image: SourceImageRef;
7
+ requestedVariants: RequestedImageVariantWithSize[];
8
+ requestedListKey: string;
9
+ inputs: CompletedInput[];
10
+ }
@@ -0,0 +1,85 @@
1
+ import { generateResourceVersion } from "@paroicms/internal-server-lib";
2
+ import { fetchBatchOfStoredCacheItems } from "../internal/queries.js";
3
+ import { makeTaskKey, toTransactionCacheItem } from "../internal/utils.js";
4
+ export async function makeBatchOfImagesAvailable(otContext, inputs) {
5
+ const { engineContext, ownerHandle, localCache } = otContext;
6
+ const groups1 = groupInputsByImages(inputs);
7
+ const groups2 = groupInputsByRequestedKeys(groups1);
8
+ const list = await fetchBatchOfStoredCacheItems(engineContext, groups2.map((grouped) => ({
9
+ mediaIds: grouped.images.map((image) => image.mediaId),
10
+ requestedVariants: grouped.requestedVariants,
11
+ })), ownerHandle);
12
+ const fetchedVariants = new Map(list.map((v) => [makeTaskKey(v.variant), v]));
13
+ for (const input of inputs) {
14
+ localCache.set(input.taskKey, createTransactionCacheItem(input, fetchedVariants));
15
+ }
16
+ }
17
+ function createTransactionCacheItem(input, fetchedVariants) {
18
+ const existing = fetchedVariants.get(input.taskKey);
19
+ if (existing)
20
+ return toTransactionCacheItem(existing);
21
+ const resourceVersion = generateResourceVersion();
22
+ const { sourceImage, requestedVariant } = input;
23
+ return {
24
+ variant: {
25
+ mediaId: sourceImage.mediaId,
26
+ resourceVersion,
27
+ mediaType: requestedVariant.mediaType,
28
+ rawWidth: requestedVariant.rawWidth,
29
+ rawHeight: requestedVariant.rawHeight,
30
+ rawSizeName: requestedVariant.rawSizeName,
31
+ slug: sourceImage.slug,
32
+ },
33
+ };
34
+ }
35
+ function groupInputsByRequestedKeys(groupedInputs) {
36
+ const map = new Map();
37
+ for (const entry of groupedInputs) {
38
+ let group = map.get(entry.requestedListKey);
39
+ if (!group) {
40
+ group = {
41
+ requestedVariants: entry.requestedVariants,
42
+ images: new Map(),
43
+ };
44
+ map.set(entry.requestedListKey, group);
45
+ }
46
+ group.images.set(entry.image.mediaId, entry.image);
47
+ }
48
+ return Array.from(map.values()).map((group) => ({
49
+ requestedVariants: group.requestedVariants,
50
+ images: Array.from(group.images.values()),
51
+ }));
52
+ }
53
+ function groupInputsByImages(inputs) {
54
+ const map = new Map();
55
+ for (let index = 0; index < inputs.length; ++index) {
56
+ const input = inputs[index];
57
+ const { sourceImage, requestedVariant } = input;
58
+ let entry = map.get(sourceImage.mediaId);
59
+ if (!entry) {
60
+ entry = {
61
+ image: sourceImage,
62
+ requestedVariants: [],
63
+ inputs: [],
64
+ };
65
+ map.set(sourceImage.mediaId, entry);
66
+ }
67
+ entry.inputs.push(input);
68
+ if (entry.requestedVariants.findIndex((v) => v.rawSizeName === requestedVariant.rawSizeName &&
69
+ v.mediaType === requestedVariant.mediaType) === -1) {
70
+ entry.requestedVariants.push(requestedVariant);
71
+ }
72
+ }
73
+ return Array.from(map.values()).map((entry) => {
74
+ const list = entry.requestedVariants.map(makeRequestedImageVariantKey);
75
+ const requestedListKey = JSON.stringify(list.sort());
76
+ return {
77
+ ...entry,
78
+ requestedListKey,
79
+ };
80
+ });
81
+ }
82
+ function makeRequestedImageVariantKey(r) {
83
+ return `${r.rawSizeName}:${r.mediaType}`;
84
+ }
85
+ //# sourceMappingURL=owner-batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-batch.js","sourceRoot":"","sources":["../../src/owner-transaction/owner-batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ResizeRule } from "@paroicms/public-anywhere-lib";
2
+ import type { VariantEngineContext } from "../internal/engine-context.js";
3
+ export interface OwnerImageManager {
4
+ add(imageCacheId: string, rawResizeR: ResizeRule): void;
5
+ flush(): Promise<void>;
6
+ }
7
+ export declare function createOwnerImageManager({ ownerHandle, isHandleReusable, engineContext, }: {
8
+ ownerHandle: string;
9
+ isHandleReusable: boolean;
10
+ engineContext: VariantEngineContext;
11
+ }): OwnerImageManager;
@@ -0,0 +1,44 @@
1
+ import { associateOwnerToImages } from "../internal/queries.js";
2
+ export function createOwnerImageManager({ ownerHandle, isHandleReusable, engineContext, }) {
3
+ const pendingData = new Map(); // key: imageCacheId, value: rawResizeR
4
+ let flushTimeout;
5
+ function startFlushTimeout() {
6
+ if (flushTimeout)
7
+ return;
8
+ flushTimeout = setTimeout(() => {
9
+ flushTimeout = undefined;
10
+ void flush().catch((error) => {
11
+ engineContext.logger.error("Error during auto-flush:", error);
12
+ });
13
+ }, 2_000);
14
+ }
15
+ async function flush() {
16
+ if (pendingData.size === 0)
17
+ return;
18
+ clearFlushTimeout();
19
+ const cacheImages = Array.from(pendingData).map(([imageCacheId, rawResizeR]) => ({
20
+ imageCacheId,
21
+ rawResizeR,
22
+ }));
23
+ pendingData.clear();
24
+ await associateOwnerToImages(engineContext, {
25
+ ownerHandle,
26
+ cacheImages,
27
+ isHandleReusable,
28
+ });
29
+ }
30
+ function clearFlushTimeout() {
31
+ if (flushTimeout) {
32
+ clearTimeout(flushTimeout);
33
+ flushTimeout = undefined;
34
+ }
35
+ }
36
+ return {
37
+ add(imageCacheId, rawResizeR) {
38
+ pendingData.set(imageCacheId, rawResizeR);
39
+ startFlushTimeout();
40
+ },
41
+ flush,
42
+ };
43
+ }
44
+ //# sourceMappingURL=owner-image-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-image-manager.js","sourceRoot":"","sources":["../../src/owner-transaction/owner-image-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,MAAM,UAAU,uBAAuB,CAAC,EACtC,WAAW,EACX,gBAAgB,EAChB,aAAa,GAKd;IACC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC,CAAC,uCAAuC;IAC1F,IAAI,YAAwC,CAAC;IAE7C,SAAS,iBAAiB;QACxB,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,YAAY,GAAG,SAAS,CAAC;YACzB,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3B,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACnC,iBAAiB,EAAE,CAAC;QAEpB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/E,YAAY;YACZ,UAAU;SACX,CAAC,CAAC,CAAC;QACJ,WAAW,CAAC,KAAK,EAAE,CAAC;QAEpB,MAAM,sBAAsB,CAAC,aAAa,EAAE;YAC1C,WAAW;YACX,WAAW;YACX,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAED,SAAS,iBAAiB;QACxB,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3B,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,CAAC,YAAoB,EAAE,UAAsB;YAC9C,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC1C,iBAAiB,EAAE,CAAC;QACtB,CAAC;QAED,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { VariantEngineContext } from "../internal/engine-context.js";
2
+ import type { TaskKey, TransactionCacheItem } from "../internal/internal.types.js";
3
+ import type { OwnerImageManager } from "./owner-image-manager.js";
4
+ export interface OwnerTransactionContext {
5
+ engineContext: VariantEngineContext;
6
+ startQueue: () => void;
7
+ ownerHandle: string;
8
+ isHandleReusable: boolean;
9
+ canBeRetrievedByOwner: boolean;
10
+ ownerImageManager: OwnerImageManager;
11
+ localCache: Map<TaskKey, TransactionCacheItem>;
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=owner-transaction-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-transaction-types.js","sourceRoot":"","sources":["../../src/owner-transaction/owner-transaction-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { ImageCacheOwnerTransaction } from "../engine-types.js";
2
+ import type { VariantEngineContext } from "../internal/engine-context.js";
3
+ export declare function createOwnerTransaction(options: {
4
+ engine: {
5
+ context: VariantEngineContext;
6
+ startQueue: () => void;
7
+ checkStatus: () => void;
8
+ addPending: (closeNow: () => Promise<void>) => () => void;
9
+ };
10
+ ownerHandle: string;
11
+ isHandleReusable: boolean;
12
+ canBeRetrievedByOwner: boolean;
13
+ }): ImageCacheOwnerTransaction;