@trokky/trokky 3.3.0 → 3.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../../src/core/media/image-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,EACd,sBAAsB,EACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,kBAAkB,EACnB,MAAM,uBAAuB,CAAA;AAE9B;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAsDhG"}
1
+ {"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../../src/core/media/image-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,EACd,sBAAsB,EACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,kBAAkB,EACnB,MAAM,uBAAuB,CAAA;AAE9B;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAqDhG"}
@@ -37,8 +37,9 @@ export async function createImageProcessor(config) {
37
37
  }
38
38
  }
39
39
  case 'cloudflare-images': {
40
- throw new Error('Cloudflare Images processor is not yet implemented.\n' +
41
- 'Use processor: "none" on Workers: uploads are stored as-is and no variants are generated.');
40
+ // Loaded on demand so a Node deployment never pulls it in.
41
+ const { CloudflareImagesProcessor } = await import('./processors/cloudflare-images.js');
42
+ return new CloudflareImagesProcessor(config);
42
43
  }
43
44
  case 'imagekit': {
44
45
  throw new Error('ImageKit processor is not yet implemented.\n' +
@@ -53,7 +54,7 @@ export async function createImageProcessor(config) {
53
54
  `Available processors:\n` +
54
55
  `- "none": Store originals only (recommended for edge environments)\n` +
55
56
  `- "sharp": Local processing with Sharp (Node.js only)\n` +
56
- `- "cloudflare-images": Cloudflare Images binding (coming soon)\n` +
57
+ `- "cloudflare-images": Cloudflare Images binding (Workers)\n` +
57
58
  `- "imagekit": ImageKit API (coming soon)\n` +
58
59
  `- "imgix": Imgix API (coming soon)`);
59
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../../../src/core/media/image-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,EACL,cAAc,EACd,sBAAsB,EACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,kBAAkB,EACnB,MAAM,uBAAuB,CAAA;AAE9B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAA4B;IACrE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,yEAAyE;YACzE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACnE,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,mEAAmE;YACnE,IAAI,CAAC;gBACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;gBACrE,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;oBAC/F,8DAA8D;oBAC9D,yFAAyF,CAC1F,CAAA;YACH,CAAC;QACH,CAAC;QAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACvD,2FAA2F,CAC5F,CAAA;QACH,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,8CAA8C;gBAC9C,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2CAA2C;gBAC3C,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,IAAI,MAAM;gBAClD,yBAAyB;gBACzB,sEAAsE;gBACtE,yDAAyD;gBACzD,kEAAkE;gBAClE,4CAA4C;gBAC5C,oCAAoC,CACrC,CAAA;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../../../src/core/media/image-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,EACL,cAAc,EACd,sBAAsB,EACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,kBAAkB,EACnB,MAAM,uBAAuB,CAAA;AAE9B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAA4B;IACrE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,yEAAyE;YACzE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACnE,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,mEAAmE;YACnE,IAAI,CAAC;gBACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;gBACrE,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;oBAC/F,8DAA8D;oBAC9D,yFAAyF,CAC1F,CAAA;YACH,CAAC;QACH,CAAC;QAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,2DAA2D;YAC3D,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;YACvF,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAA;QAC9C,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,8CAA8C;gBAC9C,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2CAA2C;gBAC3C,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,IAAI,MAAM;gBAClD,yBAAyB;gBACzB,sEAAsE;gBACtE,yDAAyD;gBACzD,8DAA8D;gBAC9D,4CAA4C;gBAC5C,oCAAoC,CACrC,CAAA;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Cloudflare Images processor — variants made by the Images binding at upload time.
3
+ *
4
+ * Why this shape and not the URL API or `fetch(cf.image)`: the binding takes raw bytes, so the
5
+ * R2 bucket behind Trokky never has to be public; and a binding call bills every time while a
6
+ * URL transformation bills once per unique transformation per calendar month — so calling it
7
+ * once per variant at upload and storing the output is a one-time cost, and it slots straight
8
+ * into MediaService's existing `saveVariantFile` pipeline with no architectural change.
9
+ *
10
+ * Measured against the real service, roughly one call in fifteen of a 6MB JPEG fails
11
+ * transiently ("Network connection lost", "internal error; reference = …"), so every variant
12
+ * is retried here. MediaService retries the whole `processImage` too, as a second net.
13
+ *
14
+ * `env.IMAGES` is passed through `media.imageProcessorOptions.images` — it is an object from
15
+ * the Worker's environment, and TrokkyConfig is plain data, so the options bag is where a
16
+ * binding can travel.
17
+ */
18
+ import { ImageProcessor, type ImageProcessorConfig, type ProcessedImage } from './types.js';
19
+ /**
20
+ * The slice of Cloudflare's `ImagesBinding` this processor uses, declared structurally.
21
+ *
22
+ * Declared rather than imported on purpose: `@cloudflare/workers-types` ships its own
23
+ * `ReadableStream` type, and mixing it with the DOM lib's produces "not assignable" errors
24
+ * that come and go with the types package version. `env.IMAGES` satisfies this shape as-is.
25
+ */
26
+ export interface ImagesBindingLike {
27
+ info(stream: ReadableStream<Uint8Array>): Promise<{
28
+ width?: number;
29
+ height?: number;
30
+ format?: string;
31
+ }>;
32
+ input(stream: ReadableStream<Uint8Array>): ImageTransformerLike;
33
+ }
34
+ export interface ImageTransformerLike {
35
+ transform(transform: {
36
+ width?: number;
37
+ height?: number;
38
+ fit?: string;
39
+ }): ImageTransformerLike;
40
+ output(options: {
41
+ format: string;
42
+ quality?: number;
43
+ }): Promise<{
44
+ image(): ReadableStream<Uint8Array>;
45
+ contentType(): string;
46
+ }>;
47
+ }
48
+ export interface CloudflareImagesOptions {
49
+ /** The Images binding from the Worker environment, e.g. `env.IMAGES`. */
50
+ images: ImagesBindingLike;
51
+ /** Attempts per variant before giving up on it. @default 3 */
52
+ attempts?: number;
53
+ }
54
+ export declare class CloudflareImagesProcessor extends ImageProcessor {
55
+ private readonly images;
56
+ private readonly attempts;
57
+ constructor(config: ImageProcessorConfig);
58
+ processImage(file: File, metadata: {
59
+ id: string;
60
+ filename: string;
61
+ path: string;
62
+ }): Promise<ProcessedImage>;
63
+ getImageUrl(imageId: string, variantName?: string): string;
64
+ deleteImage(): Promise<void>;
65
+ healthCheck(): Promise<boolean>;
66
+ }
67
+ //# sourceMappingURL=cloudflare-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-images.d.ts","sourceRoot":"","sources":["../../../../src/core/media/processors/cloudflare-images.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EACL,cAAc,EAEd,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAA;AAEnB;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvG,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAA;CAChE;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,SAAS,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAA;IAC7F,MAAM,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC7D,KAAK,IAAI,cAAc,CAAC,UAAU,CAAC,CAAA;QACnC,WAAW,IAAI,MAAM,CAAA;KACtB,CAAC,CAAA;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,MAAM,EAAE,iBAAiB,CAAA;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAoBD,qBAAa,yBAA0B,SAAQ,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,MAAM,EAAE,oBAAoB;IAalC,YAAY,CAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,cAAc,CAAC;IAwC1B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAMpD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Cloudflare Images processor — variants made by the Images binding at upload time.
3
+ *
4
+ * Why this shape and not the URL API or `fetch(cf.image)`: the binding takes raw bytes, so the
5
+ * R2 bucket behind Trokky never has to be public; and a binding call bills every time while a
6
+ * URL transformation bills once per unique transformation per calendar month — so calling it
7
+ * once per variant at upload and storing the output is a one-time cost, and it slots straight
8
+ * into MediaService's existing `saveVariantFile` pipeline with no architectural change.
9
+ *
10
+ * Measured against the real service, roughly one call in fifteen of a 6MB JPEG fails
11
+ * transiently ("Network connection lost", "internal error; reference = …"), so every variant
12
+ * is retried here. MediaService retries the whole `processImage` too, as a second net.
13
+ *
14
+ * `env.IMAGES` is passed through `media.imageProcessorOptions.images` — it is an object from
15
+ * the Worker's environment, and TrokkyConfig is plain data, so the options bag is where a
16
+ * binding can travel.
17
+ */
18
+ import { InvalidInputError } from '../../errors/index.js';
19
+ import { withRetry } from '../../utils/retry.js';
20
+ import { ImageProcessor, DEFAULT_IMAGE_VARIANTS } from './types.js';
21
+ /** Cloudflare has no stretch; `fill` and `outside` fall back to the nearest crop behaviour. */
22
+ const FIT = {
23
+ cover: 'cover',
24
+ contain: 'contain',
25
+ inside: 'scale-down',
26
+ outside: 'cover',
27
+ fill: 'cover'
28
+ };
29
+ /** A fresh stream over the same bytes; the binding consumes each one it is given. */
30
+ const streamOf = (bytes) =>
31
+ // A copy, so the Blob owns a plain ArrayBuffer rather than a view into a shared one.
32
+ new Blob([bytes.slice().buffer]).stream();
33
+ async function collect(stream) {
34
+ return Buffer.from(await new Response(stream).arrayBuffer());
35
+ }
36
+ export class CloudflareImagesProcessor extends ImageProcessor {
37
+ images;
38
+ attempts;
39
+ constructor(config) {
40
+ super(config);
41
+ const options = (config.options ?? {});
42
+ if (!options.images || typeof options.images.input !== 'function') {
43
+ throw new InvalidInputError('The cloudflare-images processor needs the Images binding: media.imageProcessorOptions.images = env.IMAGES', 'images');
44
+ }
45
+ this.images = options.images;
46
+ this.attempts = options.attempts ?? 3;
47
+ }
48
+ async processImage(file, metadata) {
49
+ const bytes = new Uint8Array(await file.arrayBuffer());
50
+ // Metadata only; not a transformation.
51
+ const info = await withRetry(() => this.images.info(streamOf(bytes)), { attempts: this.attempts });
52
+ const original = {
53
+ url: this.getImageUrl(metadata.id, 'original'),
54
+ width: info.width ?? 0,
55
+ height: info.height ?? 0,
56
+ format: file.type,
57
+ size: bytes.byteLength
58
+ };
59
+ const variants = {};
60
+ for (const variant of this.config.variants?.length ? this.config.variants : DEFAULT_IMAGE_VARIANTS) {
61
+ const format = variant.format ?? 'webp';
62
+ const produced = await withRetry(async () => {
63
+ const result = await this.images
64
+ .input(streamOf(bytes))
65
+ .transform({ width: variant.width, height: variant.height, fit: FIT[variant.fit ?? 'inside'] })
66
+ .output({ format: `image/${format}`, quality: variant.quality });
67
+ const buffer = await collect(result.image());
68
+ // The service reports output dimensions only through info(); metadata, not billed work.
69
+ const dims = await this.images.info(streamOf(new Uint8Array(buffer)));
70
+ return { buffer, dims };
71
+ }, { attempts: this.attempts });
72
+ variants[variant.name] = {
73
+ url: this.getImageUrl(metadata.id, variant.name),
74
+ width: produced.dims.width ?? 0,
75
+ height: produced.dims.height ?? 0,
76
+ format,
77
+ size: produced.buffer.length,
78
+ buffer: produced.buffer
79
+ };
80
+ }
81
+ return { original, variants };
82
+ }
83
+ getImageUrl(imageId, variantName) {
84
+ // The frontend builds real URLs from the media record; this is the same placeholder the
85
+ // other processors return.
86
+ return variantName && variantName !== 'original' ? `/media/${imageId}/${variantName}` : `/media/${imageId}`;
87
+ }
88
+ async deleteImage() {
89
+ // Variants live in the media storage adapter, which deletes them with the original.
90
+ }
91
+ async healthCheck() {
92
+ return typeof this.images?.input === 'function';
93
+ }
94
+ }
95
+ //# sourceMappingURL=cloudflare-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-images.js","sourceRoot":"","sources":["../../../../src/core/media/processors/cloudflare-images.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trokky/trokky",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "Modern, composable Content Management System - Server package",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",