@paroicms/server-image-cache-engine 1.17.1 → 1.18.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.
- package/dist/api.d.ts +6 -6
- package/dist/api.js +6 -22
- package/dist/api.js.map +1 -1
- package/dist/compute-variant-size.d.ts +1 -1
- package/dist/compute-variant-size.js +7 -11
- package/dist/compute-variant-size.js.map +1 -1
- package/dist/constants.js +3 -6
- package/dist/constants.js.map +1 -1
- package/dist/db-init/db-init.js +16 -19
- package/dist/db-init/db-init.js.map +1 -1
- package/dist/db-init/ddl-migration.js +11 -15
- package/dist/db-init/ddl-migration.js.map +1 -1
- package/dist/db-init/entities/PaImageCache.entity.js +17 -20
- package/dist/db-init/entities/PaImageCache.entity.js.map +1 -1
- package/dist/db-init/entities/PaImageCacheUsed.entity.js +7 -10
- package/dist/db-init/entities/PaImageCacheUsed.entity.js.map +1 -1
- package/dist/default-bo-favicon.d.ts +1 -1
- package/dist/default-bo-favicon.js +9 -15
- package/dist/default-bo-favicon.js.map +1 -1
- package/dist/engine-types.js +1 -2
- package/dist/image-cache-engine.d.ts +2 -2
- package/dist/image-cache-engine.js +22 -27
- package/dist/image-cache-engine.js.map +1 -1
- package/dist/image-processor-setup.js +7 -14
- package/dist/image-processor-setup.js.map +1 -1
- package/dist/internal/engine-context.d.ts +3 -3
- package/dist/internal/engine-context.js +5 -8
- package/dist/internal/engine-context.js.map +1 -1
- package/dist/internal/internal.types.js +1 -2
- package/dist/internal/queries.d.ts +2 -2
- package/dist/internal/queries.js +32 -43
- package/dist/internal/queries.js.map +1 -1
- package/dist/internal/resizer.d.ts +1 -1
- package/dist/internal/resizer.js +12 -21
- package/dist/internal/resizer.js.map +1 -1
- package/dist/internal/task-processor.d.ts +1 -1
- package/dist/internal/task-processor.js +7 -10
- package/dist/internal/task-processor.js.map +1 -1
- package/dist/original-images-processing.js +11 -17
- package/dist/original-images-processing.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const queries_1 = require("./internal/queries");
|
|
10
|
-
const task_processor_1 = require("./internal/task-processor");
|
|
11
|
-
async function createImageCacheEngine(options) {
|
|
12
|
-
const { context, isCleared } = await (0, engine_context_1.createVariantEngineContext)(options);
|
|
1
|
+
import { promiseToHandle } from "@paroi/async-lib";
|
|
2
|
+
import { generateResourceVersion } from "@paroicms/internal-server-lib";
|
|
3
|
+
import { computeVariantSize, findAuthorizedVariantSize } from "./compute-variant-size.js";
|
|
4
|
+
import { createVariantEngineContext, } from "./internal/engine-context.js";
|
|
5
|
+
import { clearVariantCache, deleteUnusedVariants, deleteVariants, deleteVariantsByDependencies, fetchImageVariant, fetchImageVariantWithBinary, markOneUsedKeyAsUsed, markUsedKeyAsUnused, } from "./internal/queries.js";
|
|
6
|
+
import { processAllPending } from "./internal/task-processor.js";
|
|
7
|
+
export async function createImageCacheEngine(options) {
|
|
8
|
+
const { context, isCleared } = await createVariantEngineContext(options);
|
|
13
9
|
return {
|
|
14
10
|
imageCache: new ImageCacheEngine(context),
|
|
15
11
|
isCleared,
|
|
16
12
|
};
|
|
17
13
|
}
|
|
18
|
-
class ImageCacheEngine {
|
|
14
|
+
export class ImageCacheEngine {
|
|
19
15
|
#processing = false;
|
|
20
16
|
#context;
|
|
21
17
|
constructor(context) {
|
|
@@ -27,28 +23,28 @@ class ImageCacheEngine {
|
|
|
27
23
|
const pth = this.#context.pendingTasks.get(taskKey);
|
|
28
24
|
if (pth)
|
|
29
25
|
return pth.promise;
|
|
30
|
-
const found = await
|
|
26
|
+
const found = await fetchImageVariantWithBinary(this.#context, {
|
|
31
27
|
imageUid,
|
|
32
28
|
variantName,
|
|
33
29
|
});
|
|
34
30
|
return found ? found.variant : undefined;
|
|
35
31
|
}
|
|
36
32
|
async resetUsedKey(options) {
|
|
37
|
-
await
|
|
33
|
+
await markUsedKeyAsUnused(this.#context, options);
|
|
38
34
|
}
|
|
39
35
|
async makeImageAvailable(params) {
|
|
40
36
|
this.#checkStatus();
|
|
41
37
|
const imageUid = params.imageRef.imageUid;
|
|
42
|
-
const { width, height, variantName } =
|
|
43
|
-
const found = await
|
|
38
|
+
const { width, height, variantName } = computeVariantSize(params);
|
|
39
|
+
const found = await fetchImageVariant(this.#context, { imageUid, variantName });
|
|
44
40
|
if (found) {
|
|
45
|
-
await
|
|
41
|
+
await markOneUsedKeyAsUsed(this.#context, {
|
|
46
42
|
imageCacheId: found.id,
|
|
47
43
|
usedKey: params.dependsOnUsedKey,
|
|
48
44
|
});
|
|
49
45
|
return found.variant;
|
|
50
46
|
}
|
|
51
|
-
const resourceVersion =
|
|
47
|
+
const resourceVersion = generateResourceVersion();
|
|
52
48
|
const taskKey = `${imageUid}:${variantName}`;
|
|
53
49
|
if (!this.#context.pendingTasks.has(taskKey)) {
|
|
54
50
|
this.#context.queue.push({
|
|
@@ -65,7 +61,7 @@ class ImageCacheEngine {
|
|
|
65
61
|
resourceVersion,
|
|
66
62
|
slug: params.slug,
|
|
67
63
|
});
|
|
68
|
-
this.#context.pendingTasks.set(taskKey,
|
|
64
|
+
this.#context.pendingTasks.set(taskKey, promiseToHandle());
|
|
69
65
|
this.#startQueue();
|
|
70
66
|
}
|
|
71
67
|
return {
|
|
@@ -87,7 +83,7 @@ class ImageCacheEngine {
|
|
|
87
83
|
}
|
|
88
84
|
async conditionallyCreateImageVariantWithBinary(media, options) {
|
|
89
85
|
this.#checkStatus();
|
|
90
|
-
const authorized =
|
|
86
|
+
const authorized = findAuthorizedVariantSize(media, options);
|
|
91
87
|
if (!authorized)
|
|
92
88
|
return;
|
|
93
89
|
const available = await this.makeImageAvailable({
|
|
@@ -108,10 +104,10 @@ class ImageCacheEngine {
|
|
|
108
104
|
async invalidate(options) {
|
|
109
105
|
this.#checkStatus();
|
|
110
106
|
if ("usedKeys" in options) {
|
|
111
|
-
await
|
|
107
|
+
await deleteVariantsByDependencies(this.#context.cn, options);
|
|
112
108
|
}
|
|
113
109
|
else {
|
|
114
|
-
await
|
|
110
|
+
await deleteVariants(this.#context.cn, options);
|
|
115
111
|
}
|
|
116
112
|
}
|
|
117
113
|
/**
|
|
@@ -119,21 +115,21 @@ class ImageCacheEngine {
|
|
|
119
115
|
*/
|
|
120
116
|
async cleanUnusedValues() {
|
|
121
117
|
this.#checkStatus();
|
|
122
|
-
const count = await
|
|
118
|
+
const count = await deleteUnusedVariants(this.#context);
|
|
123
119
|
if (count !== undefined && count > 0) {
|
|
124
120
|
this.#context.logger.debug(`${count} unused cache image were deleted`);
|
|
125
121
|
}
|
|
126
122
|
}
|
|
127
123
|
async clearCache() {
|
|
128
124
|
this.#checkStatus();
|
|
129
|
-
await
|
|
125
|
+
await clearVariantCache(this.#context);
|
|
130
126
|
this.#context.logger.debug("cache is cleared");
|
|
131
127
|
}
|
|
132
128
|
#startQueue() {
|
|
133
129
|
if (this.#processing)
|
|
134
130
|
return;
|
|
135
131
|
this.#processing = true;
|
|
136
|
-
void
|
|
132
|
+
void processAllPending(this.#context)
|
|
137
133
|
.catch((error) => {
|
|
138
134
|
this.#context.logger.error("Error when proccessing =>", error);
|
|
139
135
|
})
|
|
@@ -153,5 +149,4 @@ class ImageCacheEngine {
|
|
|
153
149
|
}
|
|
154
150
|
}
|
|
155
151
|
}
|
|
156
|
-
exports.ImageCacheEngine = ImageCacheEngine;
|
|
157
152
|
//# sourceMappingURL=image-cache-engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-cache-engine.js","sourceRoot":"","sources":["../src/image-cache-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"image-cache-engine.js","sourceRoot":"","sources":["../src/image-cache-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
exports.sharpQueue = void 0;
|
|
7
|
-
exports.setupImageProcessor = setupImageProcessor;
|
|
8
|
-
const async_lib_1 = require("@paroi/async-lib");
|
|
9
|
-
const sharp_1 = __importDefault(require("sharp"));
|
|
10
|
-
exports.sharpQueue = execImmediately;
|
|
11
|
-
function setupImageProcessor({ cpuCoresPerFile, allowConcurrency, logger, }) {
|
|
12
|
-
const oldValue = sharp_1.default.concurrency();
|
|
1
|
+
import { createAsyncQueue } from "@paroi/async-lib";
|
|
2
|
+
import sharp from "sharp";
|
|
3
|
+
export let sharpQueue = execImmediately;
|
|
4
|
+
export function setupImageProcessor({ cpuCoresPerFile, allowConcurrency, logger, }) {
|
|
5
|
+
const oldValue = sharp.concurrency();
|
|
13
6
|
if (cpuCoresPerFile !== undefined) {
|
|
14
7
|
// https://sharp.pixelplumbing.com/api-utility#concurrency
|
|
15
|
-
|
|
8
|
+
sharp.concurrency(cpuCoresPerFile);
|
|
16
9
|
logger.debug(`Set sharp concurrency (cpu cores per file) to '${cpuCoresPerFile}' (was ${oldValue})`);
|
|
17
10
|
}
|
|
18
11
|
else if (oldValue > 1) {
|
|
19
12
|
logger.debug(`Use the sharp concurrency (cpu cores per file) default value: ${oldValue}`);
|
|
20
13
|
}
|
|
21
14
|
if (!allowConcurrency) {
|
|
22
|
-
|
|
15
|
+
sharpQueue = createAsyncQueue({
|
|
23
16
|
delayMs: 50,
|
|
24
17
|
});
|
|
25
18
|
logger.debug(`Mode "one image processing at a time" is enabled`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-processor-setup.js","sourceRoot":"","sources":["../src/image-processor-setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"image-processor-setup.js","sourceRoot":"","sources":["../src/image-processor-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,IAAI,UAAU,GAA6D,eAAe,CAAC;AAQlG,MAAM,UAAU,mBAAmB,CAAC,EAClC,eAAe,EACf,gBAAgB,EAChB,MAAM,GACqB;IAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,0DAA0D;QAC1D,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CACV,kDAAkD,eAAe,UAAU,QAAQ,GAAG,CACvF,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,iEAAiE,QAAQ,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,UAAU,GAAG,gBAAgB,CAAC;YAC5B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAA+B,IAAO;IAC5D,OAAO,IAAI,EAAmB,CAAC;AACjC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { PromiseToHandle } from "@paroi/async-lib";
|
|
2
2
|
import type { BasicAppLogger } from "@paroicms/internal-server-lib";
|
|
3
3
|
import type { DataSource } from "typeorm";
|
|
4
|
-
import type { ImageVariantWithBinary } from "../engine-types";
|
|
5
|
-
import type { CreateImageCacheEngineOptions } from "../image-cache-engine";
|
|
6
|
-
import type { TaskData, TaskKey } from "./internal.types";
|
|
4
|
+
import type { ImageVariantWithBinary } from "../engine-types.js";
|
|
5
|
+
import type { CreateImageCacheEngineOptions } from "../image-cache-engine.js";
|
|
6
|
+
import type { TaskData, TaskKey } from "./internal.types.js";
|
|
7
7
|
export interface VariantEngineContext extends Omit<CreateImageCacheEngineOptions, "logger"> {
|
|
8
8
|
status: "ready" | "destroyed";
|
|
9
9
|
logger: BasicAppLogger;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const internal_anywhere_lib_1 = require("@paroicms/internal-anywhere-lib");
|
|
5
|
-
const db_init_1 = require("../db-init/db-init");
|
|
6
|
-
async function createVariantEngineContext(options) {
|
|
1
|
+
import { parseTimeWithUnit } from "@paroicms/internal-anywhere-lib";
|
|
2
|
+
import { createOrOpenConnection } from "../db-init/db-init.js";
|
|
3
|
+
export async function createVariantEngineContext(options) {
|
|
7
4
|
const logger = options.logger ?? console;
|
|
8
|
-
const { cn, logNextQuery, isCleared } = await
|
|
5
|
+
const { cn, logNextQuery, isCleared } = await createOrOpenConnection({
|
|
9
6
|
sqliteFile: options.storage.file,
|
|
10
7
|
logger,
|
|
11
8
|
});
|
|
@@ -17,7 +14,7 @@ async function createVariantEngineContext(options) {
|
|
|
17
14
|
pendingTasks: new Map(),
|
|
18
15
|
cn,
|
|
19
16
|
logNextQuery,
|
|
20
|
-
timeToIdleDays: options.timeToIdle === undefined ? undefined :
|
|
17
|
+
timeToIdleDays: options.timeToIdle === undefined ? undefined : parseTimeWithUnit(options.timeToIdle).delay,
|
|
21
18
|
};
|
|
22
19
|
return { context, isCleared };
|
|
23
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-context.js","sourceRoot":"","sources":["../../src/internal/engine-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine-context.js","sourceRoot":"","sources":["../../src/internal/engine-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAe/D,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAsC;IAEtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;IAEzC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,sBAAsB,CAAC;QACnE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QAChC,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAyB;QACpC,GAAG,OAAO;QACV,MAAM,EAAE,OAAO;QACf,MAAM;QACN,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,EAAE;QACF,YAAY;QACZ,cAAc,EACZ,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK;KAC7F,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { QueryBuilderConnection } from "@paroicms/internal-server-lib";
|
|
2
2
|
import type { VariantName } from "@paroicms/public-anywhere-lib";
|
|
3
|
-
import type { ImageVariant, ImageVariantWithBinary } from "../engine-types";
|
|
4
|
-
import type { VariantEngineContext } from "../internal/engine-context";
|
|
3
|
+
import type { ImageVariant, ImageVariantWithBinary } from "../engine-types.js";
|
|
4
|
+
import type { VariantEngineContext } from "../internal/engine-context.js";
|
|
5
5
|
export declare function insertIntoImageVariant(cn: QueryBuilderConnection, data: {
|
|
6
6
|
resourceVersion: string;
|
|
7
7
|
imageUid: string;
|
package/dist/internal/queries.js
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.deleteVariants = deleteVariants;
|
|
5
|
-
exports.deleteVariantsByDependencies = deleteVariantsByDependencies;
|
|
6
|
-
exports.fetchImageVariant = fetchImageVariant;
|
|
7
|
-
exports.fetchImageVariantWithBinary = fetchImageVariantWithBinary;
|
|
8
|
-
exports.deleteUnusedVariants = deleteUnusedVariants;
|
|
9
|
-
exports.markOneUsedKeyAsUsed = markOneUsedKeyAsUsed;
|
|
10
|
-
exports.markUsedKeyAsUnused = markUsedKeyAsUnused;
|
|
11
|
-
exports.clearVariantCache = clearVariantCache;
|
|
12
|
-
const data_formatters_lib_1 = require("@paroi/data-formatters-lib");
|
|
13
|
-
const internal_anywhere_lib_1 = require("@paroicms/internal-anywhere-lib");
|
|
14
|
-
async function insertIntoImageVariant(cn, data, usedKey) {
|
|
1
|
+
import { dateVal, nbVal, strVal, strValOrUndef } from "@paroi/data-formatters-lib";
|
|
2
|
+
import { isSameTimeUnit } from "@paroicms/internal-anywhere-lib";
|
|
3
|
+
export async function insertIntoImageVariant(cn, data, usedKey) {
|
|
15
4
|
const result = await cn
|
|
16
5
|
.createQueryBuilder()
|
|
17
6
|
.insert()
|
|
@@ -23,7 +12,7 @@ async function insertIntoImageVariant(cn, data, usedKey) {
|
|
|
23
12
|
})
|
|
24
13
|
.orUpdate(["mediaType", "width", "height", "weightB", "binaryFile", "modifiedAt", "readAt"], ["imageUid", "variantName"])
|
|
25
14
|
.execute();
|
|
26
|
-
let newId =
|
|
15
|
+
let newId = strValOrUndef(result.identifiers[0].id, { varName: "PaImageCache.id" });
|
|
27
16
|
if (newId === undefined) {
|
|
28
17
|
const row = await cn
|
|
29
18
|
.createQueryBuilder()
|
|
@@ -34,7 +23,7 @@ async function insertIntoImageVariant(cn, data, usedKey) {
|
|
|
34
23
|
.getRawOne();
|
|
35
24
|
if (!row)
|
|
36
25
|
throw new Error(`unable to find variant row '${data.imageUid}-${data.variantName}'`);
|
|
37
|
-
newId =
|
|
26
|
+
newId = strVal(row.id);
|
|
38
27
|
}
|
|
39
28
|
await cn
|
|
40
29
|
.createQueryBuilder()
|
|
@@ -53,10 +42,10 @@ async function insertIntoImageVariant(cn, data, usedKey) {
|
|
|
53
42
|
.getRawOne();
|
|
54
43
|
if (!row)
|
|
55
44
|
throw new Error(`missing cache row: ${newId}`);
|
|
56
|
-
const lastModified =
|
|
45
|
+
const lastModified = dateVal(row.modifiedAt).toISOString();
|
|
57
46
|
return { newId, lastModified };
|
|
58
47
|
}
|
|
59
|
-
async function deleteVariants(cn, options) {
|
|
48
|
+
export async function deleteVariants(cn, options) {
|
|
60
49
|
const query = cn.createQueryBuilder().delete().from("PaImageCache");
|
|
61
50
|
if ("imageUids" in options) {
|
|
62
51
|
query.andWhere("imageUid in (:...imageUids)", { imageUids: options.imageUids });
|
|
@@ -72,14 +61,14 @@ async function deleteVariants(cn, options) {
|
|
|
72
61
|
/**
|
|
73
62
|
* @returns the list of cache usedKeys that were deleted
|
|
74
63
|
*/
|
|
75
|
-
async function deleteVariantsByDependencies(cn, options) {
|
|
64
|
+
export async function deleteVariantsByDependencies(cn, options) {
|
|
76
65
|
const rows = await cn
|
|
77
66
|
.createQueryBuilder()
|
|
78
67
|
.select("k.imageCacheId", "imageCacheId")
|
|
79
68
|
.from("PaImageCacheUsed", "k")
|
|
80
69
|
.andWhere("k.usedKey in (:...usedKeys)", { usedKeys: options.usedKeys })
|
|
81
70
|
.getRawMany();
|
|
82
|
-
const imageCacheIds = rows.map((row) =>
|
|
71
|
+
const imageCacheIds = rows.map((row) => strVal(row.imageCacheId));
|
|
83
72
|
await cn
|
|
84
73
|
.createQueryBuilder()
|
|
85
74
|
.delete()
|
|
@@ -88,7 +77,7 @@ async function deleteVariantsByDependencies(cn, options) {
|
|
|
88
77
|
.execute();
|
|
89
78
|
return imageCacheIds.length;
|
|
90
79
|
}
|
|
91
|
-
async function fetchImageVariant(ctx, { imageUid, variantName, }) {
|
|
80
|
+
export async function fetchImageVariant(ctx, { imageUid, variantName, }) {
|
|
92
81
|
const row = await ctx.cn
|
|
93
82
|
.createQueryBuilder()
|
|
94
83
|
.select("v.id", "id")
|
|
@@ -105,8 +94,8 @@ async function fetchImageVariant(ctx, { imageUid, variantName, }) {
|
|
|
105
94
|
.getRawOne();
|
|
106
95
|
if (!row)
|
|
107
96
|
return;
|
|
108
|
-
const id =
|
|
109
|
-
const readAt =
|
|
97
|
+
const id = strVal(row.id);
|
|
98
|
+
const readAt = dateVal(row.readAt);
|
|
110
99
|
await updateReadAtOfImageVariant(ctx, {
|
|
111
100
|
id,
|
|
112
101
|
readAt,
|
|
@@ -116,16 +105,16 @@ async function fetchImageVariant(ctx, { imageUid, variantName, }) {
|
|
|
116
105
|
return {
|
|
117
106
|
id,
|
|
118
107
|
variant: {
|
|
119
|
-
resourceVersion:
|
|
120
|
-
slug:
|
|
121
|
-
mediaType:
|
|
122
|
-
width:
|
|
123
|
-
height:
|
|
108
|
+
resourceVersion: strVal(row.resourceVersion),
|
|
109
|
+
slug: strValOrUndef(row.slug),
|
|
110
|
+
mediaType: strVal(row.mediaType),
|
|
111
|
+
width: nbVal(row.width),
|
|
112
|
+
height: nbVal(row.height),
|
|
124
113
|
variantName,
|
|
125
114
|
},
|
|
126
115
|
};
|
|
127
116
|
}
|
|
128
|
-
async function fetchImageVariantWithBinary(ctx, { imageUid, variantName, }) {
|
|
117
|
+
export async function fetchImageVariantWithBinary(ctx, { imageUid, variantName, }) {
|
|
129
118
|
const row = await ctx.cn
|
|
130
119
|
.createQueryBuilder()
|
|
131
120
|
.select("v.id", "id")
|
|
@@ -144,27 +133,27 @@ async function fetchImageVariantWithBinary(ctx, { imageUid, variantName, }) {
|
|
|
144
133
|
.getRawOne();
|
|
145
134
|
if (!row)
|
|
146
135
|
return;
|
|
147
|
-
const id =
|
|
148
|
-
const readAt =
|
|
136
|
+
const id = strVal(row.id);
|
|
137
|
+
const readAt = dateVal(row.readAt);
|
|
149
138
|
await updateReadAtOfImageVariant(ctx, { id, readAt, imageUid, variantName });
|
|
150
139
|
return {
|
|
151
140
|
id,
|
|
152
141
|
variant: {
|
|
153
|
-
resourceVersion:
|
|
154
|
-
slug:
|
|
155
|
-
mediaType:
|
|
156
|
-
width:
|
|
157
|
-
height:
|
|
158
|
-
weightB:
|
|
142
|
+
resourceVersion: strVal(row.resourceVersion),
|
|
143
|
+
slug: strValOrUndef(row.slug),
|
|
144
|
+
mediaType: strVal(row.mediaType),
|
|
145
|
+
width: nbVal(row.width),
|
|
146
|
+
height: nbVal(row.height),
|
|
147
|
+
weightB: nbVal(row.weightB),
|
|
159
148
|
binaryFile: row.binaryFile,
|
|
160
|
-
lastModified:
|
|
149
|
+
lastModified: dateVal(row.modifiedAt).toISOString(),
|
|
161
150
|
variantName,
|
|
162
151
|
},
|
|
163
152
|
};
|
|
164
153
|
}
|
|
165
154
|
async function updateReadAtOfImageVariant(ctx, { id, readAt, imageUid, variantName, }) {
|
|
166
155
|
const { cn, timeToIdleDays, logger } = ctx;
|
|
167
|
-
if (timeToIdleDays === undefined ||
|
|
156
|
+
if (timeToIdleDays === undefined || isSameTimeUnit(readAt, "day"))
|
|
168
157
|
return;
|
|
169
158
|
logger.debug(`updating readAt of image cache: ${imageUid}, ${variantName}`);
|
|
170
159
|
await cn
|
|
@@ -180,7 +169,7 @@ async function updateReadAtOfImageVariant(ctx, { id, readAt, imageUid, variantNa
|
|
|
180
169
|
* Delete the images that have no usedKey and that have not been used recently.
|
|
181
170
|
* @returns the number of cache identifiers that were deleted
|
|
182
171
|
*/
|
|
183
|
-
async function deleteUnusedVariants({ cn, timeToIdleDays, }) {
|
|
172
|
+
export async function deleteUnusedVariants({ cn, timeToIdleDays, }) {
|
|
184
173
|
const result = await cn
|
|
185
174
|
.createQueryBuilder()
|
|
186
175
|
.delete()
|
|
@@ -194,7 +183,7 @@ async function deleteUnusedVariants({ cn, timeToIdleDays, }) {
|
|
|
194
183
|
.execute();
|
|
195
184
|
return result.affected ?? undefined;
|
|
196
185
|
}
|
|
197
|
-
async function markOneUsedKeyAsUsed(ctx, { imageCacheId, usedKey, }) {
|
|
186
|
+
export async function markOneUsedKeyAsUsed(ctx, { imageCacheId, usedKey, }) {
|
|
198
187
|
await ctx.cn
|
|
199
188
|
.createQueryBuilder()
|
|
200
189
|
.update("PaImageCacheUsed")
|
|
@@ -203,7 +192,7 @@ async function markOneUsedKeyAsUsed(ctx, { imageCacheId, usedKey, }) {
|
|
|
203
192
|
.andWhere("usedKey = :usedKey", { usedKey })
|
|
204
193
|
.execute();
|
|
205
194
|
}
|
|
206
|
-
async function markUsedKeyAsUnused(ctx, { usedKey, }) {
|
|
195
|
+
export async function markUsedKeyAsUnused(ctx, { usedKey, }) {
|
|
207
196
|
await ctx.cn
|
|
208
197
|
.createQueryBuilder()
|
|
209
198
|
.update("PaImageCacheUsed")
|
|
@@ -211,7 +200,7 @@ async function markUsedKeyAsUnused(ctx, { usedKey, }) {
|
|
|
211
200
|
.andWhere("usedKey = :usedKey", { usedKey })
|
|
212
201
|
.execute();
|
|
213
202
|
}
|
|
214
|
-
async function clearVariantCache({ cn }) {
|
|
203
|
+
export async function clearVariantCache({ cn }) {
|
|
215
204
|
await cn.createQueryBuilder().delete().from("PaImageCacheUsed").execute();
|
|
216
205
|
await cn.createQueryBuilder().delete().from("PaImageCache").execute();
|
|
217
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ScImageCompressionQualityPolicyStep } from "@paroicms/public-anywhere-lib";
|
|
2
|
-
import type { ImageSize } from "./internal.types";
|
|
2
|
+
import type { ImageSize } from "./internal.types.js";
|
|
3
3
|
export interface UnsavedImageVariantWithBinary {
|
|
4
4
|
width: number;
|
|
5
5
|
height: number;
|
package/dist/internal/resizer.js
CHANGED
|
@@ -1,29 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.resizeImage = resizeImage;
|
|
7
|
-
exports.resizeIcoImage = resizeIcoImage;
|
|
8
|
-
exports.convertSharpFormatToMediaType = convertSharpFormatToMediaType;
|
|
9
|
-
exports.getQuality = getQuality;
|
|
10
|
-
const sharp_1 = __importDefault(require("sharp"));
|
|
11
|
-
const constants_1 = require("../constants");
|
|
12
|
-
const image_processor_setup_1 = require("../image-processor-setup");
|
|
13
|
-
const icoEndec = require("ico-endec");
|
|
14
|
-
async function resizeImage(options) {
|
|
1
|
+
import sharp from "sharp";
|
|
2
|
+
import { authorizedMediaTypes } from "../constants.js";
|
|
3
|
+
import { sharpQueue } from "../image-processor-setup.js";
|
|
4
|
+
const icoEndec = (await import("ico-endec")).default;
|
|
5
|
+
export async function resizeImage(options) {
|
|
15
6
|
if (options.formatTo?.mediaType === "image/x-icon")
|
|
16
7
|
return await resizeIcoImage(options);
|
|
17
8
|
const sharpFormat = options.formatTo
|
|
18
9
|
? convertMediaTypeToSharpFormat(options.formatTo.mediaType)
|
|
19
10
|
: "webp";
|
|
20
|
-
const sharpInst = (
|
|
11
|
+
const sharpInst = sharp(options.binaryFile)
|
|
21
12
|
.resize(options.imageSize)
|
|
22
13
|
.toFormat(sharpFormat, {
|
|
23
14
|
quality: getQuality(options.imageSize),
|
|
24
15
|
lossless: options.formatTo?.lossless,
|
|
25
16
|
});
|
|
26
|
-
const { data, info } = await
|
|
17
|
+
const { data, info } = await sharpQueue(() => sharpInst.toBuffer({ resolveWithObject: true }));
|
|
27
18
|
return {
|
|
28
19
|
width: info.width,
|
|
29
20
|
height: info.height,
|
|
@@ -32,8 +23,8 @@ async function resizeImage(options) {
|
|
|
32
23
|
binaryFile: data,
|
|
33
24
|
};
|
|
34
25
|
}
|
|
35
|
-
async function resizeIcoImage(options) {
|
|
36
|
-
const { data, info } = await
|
|
26
|
+
export async function resizeIcoImage(options) {
|
|
27
|
+
const { data, info } = await sharpQueue(() => sharp(options.binaryFile)
|
|
37
28
|
.resize(options.imageSize)
|
|
38
29
|
.toFormat("png")
|
|
39
30
|
.toBuffer({ resolveWithObject: true }));
|
|
@@ -47,17 +38,17 @@ async function resizeIcoImage(options) {
|
|
|
47
38
|
};
|
|
48
39
|
}
|
|
49
40
|
function convertMediaTypeToSharpFormat(mediaType) {
|
|
50
|
-
if (!mediaType.startsWith("image/") || !
|
|
41
|
+
if (!mediaType.startsWith("image/") || !authorizedMediaTypes.has(mediaType)) {
|
|
51
42
|
throw new Error(`invalid media-type '${mediaType}'`);
|
|
52
43
|
}
|
|
53
44
|
return mediaType.substring(6);
|
|
54
45
|
}
|
|
55
|
-
function convertSharpFormatToMediaType(format) {
|
|
46
|
+
export function convertSharpFormatToMediaType(format) {
|
|
56
47
|
if (format === "svg")
|
|
57
48
|
return "image/svg+xml"; // Sharp omit +xml
|
|
58
49
|
return `image/${format}`;
|
|
59
50
|
}
|
|
60
|
-
function getQuality({ width, height }, qualityPolicy) {
|
|
51
|
+
export function getQuality({ width, height }, qualityPolicy) {
|
|
61
52
|
const area = width * height;
|
|
62
53
|
for (const { quality, areaLimitPx } of qualityPolicy ?? []) {
|
|
63
54
|
if (areaLimitPx === undefined || area <= areaLimitPx)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/internal/resizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/internal/resizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { VariantEngineContext } from "./engine-context";
|
|
1
|
+
import type { VariantEngineContext } from "./engine-context.js";
|
|
2
2
|
export declare function processAllPending(context: VariantEngineContext): Promise<void>;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const queries_1 = require("./queries");
|
|
5
|
-
const resizer_1 = require("./resizer");
|
|
6
|
-
async function processAllPending(context) {
|
|
1
|
+
import { fetchImageVariantWithBinary, insertIntoImageVariant, markOneUsedKeyAsUsed, } from "./queries.js";
|
|
2
|
+
import { resizeImage } from "./resizer.js";
|
|
3
|
+
export async function processAllPending(context) {
|
|
7
4
|
while (true) {
|
|
8
5
|
const task = context.queue.shift();
|
|
9
6
|
if (!task)
|
|
@@ -25,19 +22,19 @@ async function processAllPending(context) {
|
|
|
25
22
|
}
|
|
26
23
|
}
|
|
27
24
|
async function excecuteTask(task, ctx) {
|
|
28
|
-
const found = await
|
|
25
|
+
const found = await fetchImageVariantWithBinary(ctx, {
|
|
29
26
|
imageUid: task.imageUid,
|
|
30
27
|
variantName: task.variantName,
|
|
31
28
|
});
|
|
32
29
|
if (found) {
|
|
33
|
-
await
|
|
30
|
+
await markOneUsedKeyAsUsed(ctx, {
|
|
34
31
|
imageCacheId: found.id,
|
|
35
32
|
usedKey: task.dependsOnUsedKey,
|
|
36
33
|
});
|
|
37
34
|
return found.variant;
|
|
38
35
|
}
|
|
39
36
|
const origBinaryFile = await ctx.getOriginalImage(task.imageUid);
|
|
40
|
-
const result = await
|
|
37
|
+
const result = await resizeImage({
|
|
41
38
|
binaryFile: origBinaryFile,
|
|
42
39
|
imageSize: task.imageSize,
|
|
43
40
|
formatTo: task.changeMediaTypeTo
|
|
@@ -47,7 +44,7 @@ async function excecuteTask(task, ctx) {
|
|
|
47
44
|
: undefined,
|
|
48
45
|
qualityPolicy: ctx.qualityPolicy,
|
|
49
46
|
});
|
|
50
|
-
const { lastModified } = await
|
|
47
|
+
const { lastModified } = await insertIntoImageVariant(ctx.cn, {
|
|
51
48
|
resourceVersion: task.resourceVersion,
|
|
52
49
|
imageUid: task.imageUid,
|
|
53
50
|
slug: task.slug,
|