@visulima/storage 1.0.0-alpha.15 → 1.0.0-alpha.16

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 (144) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE.md +1094 -382
  3. package/dist/adapter/nuxt/module.d.ts +41 -34
  4. package/dist/handler/http/fetch/index.d.ts +297 -4
  5. package/dist/handler/http/hono/index.d.ts +1474 -58
  6. package/dist/handler/http/nextjs/index.d.ts +66 -58
  7. package/dist/handler/http/node/index.d.ts +361 -4
  8. package/dist/handler/http/solid-start/index.d.ts +66 -57
  9. package/dist/index.d.ts +376 -17
  10. package/dist/openapi/index.d.ts +24 -5
  11. package/dist/packem_shared/{GCSMetaStorage-BkUIdJ5m.js → GCSMetaStorage-CNXq7vGd.js} +1 -1
  12. package/dist/packem_shared/{GCStorage-BnsSAjdW.js → GCStorage-CdnSuQwa.js} +1 -1
  13. package/dist/packem_shared/S3Client.d-CZ62Jztg.d.ts +20357 -0
  14. package/dist/packem_shared/disk-storage-with-checksum.d-hEoe2ugb.d.ts +148 -0
  15. package/dist/packem_shared/{gcs-meta-storage-DBeGn2ix.js → gcs-meta-storage-B5AVt1aS.js} +1 -1
  16. package/dist/packem_shared/local-meta-storage.d-Dop9RP9k.d.ts +20 -0
  17. package/dist/packem_shared/media-transformer.d-DeHZkBVx.d.ts +331 -0
  18. package/dist/packem_shared/s3-base-storage.d-CczjSe98.d.ts +251 -0
  19. package/dist/packem_shared/storage.d-BOMUJD96.d.ts +939 -0
  20. package/dist/packem_shared/tus-base.d-BftIixIA.d.ts +99 -0
  21. package/dist/packem_shared/types.d-BPd_JkW1.d.ts +708 -0
  22. package/dist/packem_shared/types.d-D-mlfmef.d.ts +49 -0
  23. package/dist/storage/aws/clients/index.d.ts +166 -6
  24. package/dist/storage/aws/index.d.ts +320 -4
  25. package/dist/storage/aws-light/index.d.ts +252 -4
  26. package/dist/storage/azure/index.d.ts +10422 -4
  27. package/dist/storage/gcs/index.d.ts +4107 -5
  28. package/dist/storage/gcs/index.js +2 -2
  29. package/dist/storage/local/index.d.ts +7 -4
  30. package/dist/storage/netlify-blob/index.d.ts +142 -4
  31. package/dist/storage/vercel-blob/index.d.ts +129 -4
  32. package/dist/transformer/audio-transformer.d.ts +127 -125
  33. package/dist/transformer/image-transformer.d.ts +569 -568
  34. package/dist/transformer/index.d.ts +62 -5
  35. package/dist/transformer/video-transformer.d.ts +144 -142
  36. package/package.json +37 -37
  37. package/dist/handler/base/base-handler-core.d.ts +0 -91
  38. package/dist/handler/base/base-handler-fetch.d.ts +0 -76
  39. package/dist/handler/base/base-handler-node.d.ts +0 -137
  40. package/dist/handler/multipart/multipart-base.d.ts +0 -84
  41. package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
  42. package/dist/handler/multipart/multipart.d.ts +0 -49
  43. package/dist/handler/rest/rest-base.d.ts +0 -106
  44. package/dist/handler/rest/rest-fetch.d.ts +0 -88
  45. package/dist/handler/rest/rest.d.ts +0 -93
  46. package/dist/handler/tus/tus-base.d.ts +0 -152
  47. package/dist/handler/tus/tus-fetch.d.ts +0 -72
  48. package/dist/handler/tus/tus.d.ts +0 -78
  49. package/dist/handler/types.d.ts +0 -53
  50. package/dist/handler/utils/request-parser.d.ts +0 -72
  51. package/dist/handler/utils/response-builder.d.ts +0 -83
  52. package/dist/handler/utils/storage-utils.d.ts +0 -10
  53. package/dist/handler/utils/stream-utils.d.ts +0 -29
  54. package/dist/handler/utils/upload-handlers.d.ts +0 -76
  55. package/dist/metrics/index.d.ts +0 -2
  56. package/dist/metrics/no-op-metrics.d.ts +0 -15
  57. package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
  58. package/dist/openapi/rest.d.ts +0 -7
  59. package/dist/openapi/shared.d.ts +0 -13
  60. package/dist/openapi/transform.d.ts +0 -3
  61. package/dist/openapi/tus.d.ts +0 -7
  62. package/dist/openapi/xhr.d.ts +0 -7
  63. package/dist/storage/aws/clients/backblaze.d.ts +0 -12
  64. package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
  65. package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
  66. package/dist/storage/aws/clients/minio.d.ts +0 -13
  67. package/dist/storage/aws/clients/tigris.d.ts +0 -12
  68. package/dist/storage/aws/clients/types.d.ts +0 -95
  69. package/dist/storage/aws/clients/wasabi.d.ts +0 -12
  70. package/dist/storage/aws/s3-base-storage.d.ts +0 -248
  71. package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
  72. package/dist/storage/aws/s3-file.d.ts +0 -10
  73. package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
  74. package/dist/storage/aws/s3-storage.d.ts +0 -70
  75. package/dist/storage/aws/types.d.ts +0 -118
  76. package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
  77. package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
  78. package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
  79. package/dist/storage/aws-light/aws-light-storage.d.ts +0 -66
  80. package/dist/storage/aws-light/types.d.ts +0 -36
  81. package/dist/storage/azure/azure-file.d.ts +0 -6
  82. package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
  83. package/dist/storage/azure/azure-storage.d.ts +0 -69
  84. package/dist/storage/azure/types.d.ts +0 -61
  85. package/dist/storage/gcs/fetch-error.d.ts +0 -11
  86. package/dist/storage/gcs/gcs-config.d.ts +0 -2
  87. package/dist/storage/gcs/gcs-file.d.ts +0 -6
  88. package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
  89. package/dist/storage/gcs/gcs-storage.d.ts +0 -91
  90. package/dist/storage/gcs/types.d.ts +0 -54
  91. package/dist/storage/gcs/utils.d.ts +0 -7
  92. package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
  93. package/dist/storage/local/disk-storage.d.ts +0 -135
  94. package/dist/storage/local/local-meta-storage.d.ts +0 -27
  95. package/dist/storage/meta-storage-options.d.ts +0 -11
  96. package/dist/storage/meta-storage.d.ts +0 -30
  97. package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
  98. package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -6
  99. package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
  100. package/dist/storage/netlify-blob/types.d.ts +0 -29
  101. package/dist/storage/storage.d.ts +0 -353
  102. package/dist/storage/types.d.ts +0 -217
  103. package/dist/storage/utils/file/file.d.ts +0 -25
  104. package/dist/storage/utils/file/get-file-status.d.ts +0 -9
  105. package/dist/storage/utils/file/has-content.d.ts +0 -9
  106. package/dist/storage/utils/file/index.d.ts +0 -10
  107. package/dist/storage/utils/file/is-expired.d.ts +0 -8
  108. package/dist/storage/utils/file/metadata.d.ts +0 -18
  109. package/dist/storage/utils/file/part-match.d.ts +0 -11
  110. package/dist/storage/utils/file/types.d.ts +0 -37
  111. package/dist/storage/utils/file/update-metadata.d.ts +0 -10
  112. package/dist/storage/utils/file/update-size.d.ts +0 -10
  113. package/dist/storage/vercel-blob/types.d.ts +0 -31
  114. package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
  115. package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -6
  116. package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
  117. package/dist/transformer/base-transformer.d.ts +0 -63
  118. package/dist/transformer/media-transformer.d.ts +0 -332
  119. package/dist/transformer/transformer-config.d.ts +0 -16
  120. package/dist/transformer/types.d.ts +0 -639
  121. package/dist/transformer/utils.d.ts +0 -33
  122. package/dist/transformer/validation-error.d.ts +0 -23
  123. package/dist/utils/cache.d.ts +0 -32
  124. package/dist/utils/chunked-upload.d.ts +0 -65
  125. package/dist/utils/detect-file-type.d.ts +0 -28
  126. package/dist/utils/errors.d.ts +0 -74
  127. package/dist/utils/file-path-url-matcher.d.ts +0 -18
  128. package/dist/utils/headers.d.ts +0 -111
  129. package/dist/utils/http.d.ts +0 -92
  130. package/dist/utils/locker.d.ts +0 -26
  131. package/dist/utils/pipes/stream-checksum.d.ts +0 -47
  132. package/dist/utils/pipes/stream-length.d.ts +0 -22
  133. package/dist/utils/primitives/get-last-one.d.ts +0 -3
  134. package/dist/utils/primitives/is-record.d.ts +0 -2
  135. package/dist/utils/primitives/map-values.d.ts +0 -9
  136. package/dist/utils/primitives/pick.d.ts +0 -2
  137. package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
  138. package/dist/utils/primitives/to-seconds.d.ts +0 -12
  139. package/dist/utils/range-checksum.d.ts +0 -33
  140. package/dist/utils/range-hasher.d.ts +0 -46
  141. package/dist/utils/retry.d.ts +0 -64
  142. package/dist/utils/types.d.ts +0 -108
  143. package/dist/utils/validation-error.d.ts +0 -22
  144. package/dist/utils/validator.d.ts +0 -36
@@ -0,0 +1,708 @@
1
+ import { C as Cache, F as File, a as FileReturn, B as BaseStorage } from "./storage.d-BOMUJD96.js";
2
+ import { Readable } from 'node:stream';
3
+ /**
4
+ * Base transformer configuration with common properties
5
+ */
6
+ interface BaseTransformerConfig {
7
+ /** Cache instance to use for caching */
8
+ cache?: Cache;
9
+ /** Cache TTL in seconds */
10
+ cacheTtl?: number;
11
+ /** Logger instance */
12
+ logger?: Console;
13
+ /** Maximum number of cached items */
14
+ maxCacheSize?: number;
15
+ /** Supported input formats */
16
+ supportedFormats?: string[] | undefined;
17
+ }
18
+ /**
19
+ * Abstract base class for all media transformers.
20
+ *
21
+ * Provides a common interface and shared functionality for image, video, and audio transformers.
22
+ * All transformers must implement the abstract methods defined here.
23
+ */
24
+ declare abstract class BaseTransformer<Config extends BaseTransformerConfig, CacheValue extends object, TFile extends File = File, TFileReturn extends FileReturn = FileReturn> {
25
+ protected readonly storage: BaseStorage<TFile, TFileReturn>;
26
+ protected config: Config;
27
+ protected logger?: Console;
28
+ protected cache?: Cache<string, CacheValue>;
29
+ /**
30
+ * Creates a new BaseTransformer instance with common functionality.
31
+ * @param storage The storage backend for retrieving and storing files.
32
+ * @param config Configuration options for the transformer.
33
+ * @param logger Optional logger instance for logging operations.
34
+ * @protected
35
+ */
36
+ protected constructor(storage: BaseStorage<TFile, TFileReturn>, config: Config, logger?: Console);
37
+ /**
38
+ * Transforms a file with the given steps.
39
+ * @param fileId Unique identifier of the file to transform.
40
+ * @param steps Array of transformation steps to apply.
41
+ * @returns Promise resolving to transformation result.
42
+ */
43
+ abstract transform(fileId: string, steps: any[]): Promise<any>;
44
+ /**
45
+ * Streams transform of a file with the given steps (for large files).
46
+ * @param fileId Unique identifier of the file to transform.
47
+ * @param steps Array of transformation steps to apply.
48
+ * @returns Promise resolving to streaming result with headers, size, and stream.
49
+ */
50
+ transformStream?(fileId: string, steps: any[]): Promise<{
51
+ headers?: Record<string, string>;
52
+ size?: number;
53
+ stream: Readable;
54
+ }>;
55
+ /**
56
+ * Clears cache for a specific file or all files.
57
+ * @param fileId Optional file identifier to clear cache for specific file.
58
+ */
59
+ clearCache(fileId?: string): void;
60
+ /**
61
+ * Gets cache statistics.
62
+ * @returns Cache statistics including max size and current size.
63
+ */
64
+ getCacheStats(): {
65
+ maxSize: number;
66
+ size: number;
67
+ };
68
+ /**
69
+ * Gets content type from transformation result based on format.
70
+ * @param result Transformation result object containing format information.
71
+ * @returns Content type string (MIME type).
72
+ */
73
+ protected getContentTypeFromResult(result: any): string;
74
+ }
75
+ /**
76
+ * Supported image formats for transformation
77
+ */
78
+ type ImageFormat = "jpeg" | "png" | "webp" | "avif" | "tiff" | "gif";
79
+ /**
80
+ * Image transformation options
81
+ */
82
+ interface TransformOptions {
83
+ /** Quality of alpha layer for WebP (0-100) */
84
+ alphaQuality?: number;
85
+ /** Compression level for PNG (0-9) */
86
+ compressionLevel?: number;
87
+ /** GIF delay(s) between animation frames (in milliseconds) */
88
+ delay?: number;
89
+ /** Effort for AVIF encoding (0-10) */
90
+ effort?: number;
91
+ /** Output format */
92
+ format?: ImageFormat;
93
+ /** GIF number of animation iterations, use 0 for infinite */
94
+ loop?: number;
95
+ /** Whether to use lossless compression for WebP */
96
+ lossless?: boolean;
97
+ /** Whether to use progressive encoding for JPEG */
98
+ progressive?: boolean;
99
+ /** Quality for JPEG/WebP images (1-100) */
100
+ quality?: number;
101
+ }
102
+ /**
103
+ * Sharpen transformation options
104
+ */
105
+ interface SharpenOptions extends TransformOptions {
106
+ /** M1 for sharpen formula */
107
+ m1?: number;
108
+ /** M2 for sharpen formula */
109
+ m2?: number;
110
+ /** Sigma for Gaussian blur */
111
+ sigma?: number;
112
+ /** X1 for sharpen formula */
113
+ x1?: number;
114
+ /** Y2 for sharpen formula */
115
+ y2?: number;
116
+ /** Y3 for sharpen formula */
117
+ y3?: number;
118
+ }
119
+ /**
120
+ * Blur transformation options
121
+ */
122
+ interface BlurOptions extends TransformOptions {
123
+ /** M1 for blur formula */
124
+ m1?: number;
125
+ /** M2 for blur formula */
126
+ m2?: number;
127
+ /** Sigma for Gaussian blur */
128
+ sigma?: number;
129
+ /** X1 for blur formula */
130
+ x1?: number;
131
+ /** Y2 for blur formula */
132
+ y2?: number;
133
+ /** Y3 for blur formula */
134
+ y3?: number;
135
+ }
136
+ /**
137
+ * Median transformation options
138
+ */
139
+ interface MedianOptions extends TransformOptions {
140
+ /** Size of the median filter */
141
+ size?: number;
142
+ }
143
+ /**
144
+ * CLAHE (Contrast Limited Adaptive Histogram Equalization) options
145
+ */
146
+ interface CLAHEOptions extends TransformOptions {
147
+ /** Height of the tile grid */
148
+ height?: number;
149
+ /** Maximum slope value for contrast limiting */
150
+ maxSlope?: number;
151
+ /** Width of the tile grid */
152
+ width?: number;
153
+ }
154
+ /**
155
+ * Convolve transformation options
156
+ */
157
+ interface ConvolveOptions extends TransformOptions {
158
+ /** Height of the kernel in pixels */
159
+ height?: number;
160
+ /** Kernel values as flat array */
161
+ kernel?: number[];
162
+ /** Offset value */
163
+ offset?: number;
164
+ /** Scale factor */
165
+ scale?: number;
166
+ /** Width of the kernel in pixels */
167
+ width?: number;
168
+ }
169
+ /**
170
+ * Threshold transformation options
171
+ */
172
+ interface ThresholdOptions extends TransformOptions {
173
+ /** Alternative spelling for greyscale */
174
+ grayscale?: boolean;
175
+ /** Convert to greyscale */
176
+ greyscale?: boolean;
177
+ /** Threshold value (0-255) */
178
+ threshold?: number;
179
+ }
180
+ /**
181
+ * Boolean operation options
182
+ */
183
+ interface BooleanOptions extends TransformOptions {
184
+ /** Operand image buffer or path */
185
+ operand: Buffer | string;
186
+ /** Boolean operation: and, or, eor */
187
+ operator: "and" | "or" | "eor";
188
+ /** Raw operand options */
189
+ raw?: {
190
+ channels: number;
191
+ height: number;
192
+ width: number;
193
+ };
194
+ }
195
+ /**
196
+ * Linear transformation options
197
+ */
198
+ interface LinearOptions extends TransformOptions {
199
+ /** Multiplier values (per channel or single value) */
200
+ a?: number | number[];
201
+ /** Offset values (per channel or single value) */
202
+ b?: number | number[];
203
+ }
204
+ /**
205
+ * Recombine transformation options
206
+ */
207
+ interface RecombineOptions extends TransformOptions {
208
+ /** 3x3 or 4x4 recombination matrix */
209
+ matrix: number[][];
210
+ }
211
+ /**
212
+ * Modulate transformation options
213
+ */
214
+ interface ModulateOptions extends TransformOptions {
215
+ /** Brightness multiplier */
216
+ brightness?: number;
217
+ /** Hue rotation in degrees */
218
+ hue?: number;
219
+ /** Lightness adjustment */
220
+ lightness?: number;
221
+ /** Saturation multiplier */
222
+ saturation?: number;
223
+ }
224
+ /**
225
+ * Tint transformation options
226
+ */
227
+ interface TintOptions extends TransformOptions {
228
+ /** RGB tint values */
229
+ rgb: [number, number, number] | string;
230
+ }
231
+ /**
232
+ * Greyscale transformation options
233
+ */
234
+ interface GreyscaleOptions extends TransformOptions {
235
+ /** Alternative spelling */
236
+ grayscale?: boolean;
237
+ /** Convert to greyscale */
238
+ greyscale?: boolean;
239
+ }
240
+ /**
241
+ * Colourspace transformation options
242
+ */
243
+ interface ColourspaceOptions extends TransformOptions {
244
+ /** Target colourspace */
245
+ colourspace: "srgb" | "rgb" | "cmyk" | "lab" | "b-w";
246
+ }
247
+ /**
248
+ * Channel extraction options
249
+ */
250
+ interface ExtractChannelOptions extends TransformOptions {
251
+ /** Channel to extract (0-3 for RGBA) */
252
+ channel: number;
253
+ }
254
+ /**
255
+ * Options for joining multiple images as color channels into a single image.
256
+ */
257
+ interface JoinChannelOptions extends TransformOptions {
258
+ /** Images to join as channels */
259
+ images: (Buffer | string)[];
260
+ }
261
+ /**
262
+ * Options for performing boolean operations on image bands.
263
+ */
264
+ interface BandboolOptions extends TransformOptions {
265
+ /** Boolean operation: and, or, eor */
266
+ operator: "and" | "or" | "eor";
267
+ }
268
+ /**
269
+ * Options for applying affine transformations (rotation, scaling, shearing, translation) to images.
270
+ */
271
+ interface AffineOptions extends TransformOptions {
272
+ /** Background color for areas outside the transformed image */
273
+ background?: string;
274
+ /** Interpolation method */
275
+ interpolation?: "nearest" | "bilinear" | "bicubic" | "nohalo" | "lbb" | "vsqbs";
276
+ /** 2x3 transformation matrix */
277
+ matrix: [number, number, number, number, number, number];
278
+ }
279
+ /**
280
+ * Options for applying morphological dilation operation to images.
281
+ */
282
+ interface DilateOptions extends TransformOptions {
283
+ /** Kernel size for dilation */
284
+ kernelSize?: number;
285
+ }
286
+ /**
287
+ * Options for applying morphological erosion operation to images.
288
+ */
289
+ interface ErodeOptions extends TransformOptions {
290
+ /** Kernel size for erosion */
291
+ kernelSize?: number;
292
+ }
293
+ /**
294
+ * Options for setting the colourspace used for internal processing pipeline operations.
295
+ */
296
+ interface PipelineColourspaceOptions extends TransformOptions {
297
+ /** Colourspace for internal operations */
298
+ colourspace: "rgb" | "srgb" | "cmyk" | "lab" | "b-w";
299
+ }
300
+ /**
301
+ * Options for converting images to a target colourspace.
302
+ */
303
+ interface ToColourspaceOptions extends TransformOptions {
304
+ /** Target colourspace */
305
+ colourspace: "srgb" | "rgb" | "cmyk" | "lab" | "b-w";
306
+ }
307
+ /**
308
+ * Remove alpha channel options
309
+ */
310
+ interface RemoveAlphaOptions extends TransformOptions {
311
+ /** Background color to composite over alpha channel */
312
+ background?: string;
313
+ }
314
+ /**
315
+ * Ensure alpha channel options
316
+ */
317
+ interface EnsureAlphaOptions extends TransformOptions {
318
+ /** Alpha channel value to add */
319
+ alpha?: number;
320
+ }
321
+ /**
322
+ * Resize transformation options
323
+ */
324
+ interface ResizeOptions extends TransformOptions {
325
+ /** Background color for fill fit */
326
+ background?: string;
327
+ /** Whether to skip enlargement during initial load */
328
+ fastShrinkOnLoad?: boolean;
329
+ /** Resize fit mode */
330
+ fit?: "cover" | "contain" | "fill" | "inside" | "outside";
331
+ /** Height in pixels */
332
+ height?: number;
333
+ /** Resize kernel */
334
+ kernel?: "nearest" | "cubic" | "mitchell" | "lanczos2" | "lanczos3";
335
+ /** Position for cover/contain fits */
336
+ position?: string | number;
337
+ /** Width in pixels */
338
+ width?: number;
339
+ /** Whether to avoid enlarging images smaller than specified dimensions */
340
+ withoutEnlargement?: boolean;
341
+ /** Whether to avoid reducing images larger than specified dimensions */
342
+ withoutReduction?: boolean;
343
+ }
344
+ /**
345
+ * Crop transformation options
346
+ */
347
+ interface CropOptions extends TransformOptions {
348
+ /** Crop area height */
349
+ height: number;
350
+ /** Crop area left offset */
351
+ left: number;
352
+ /** Crop area top offset */
353
+ top: number;
354
+ /** Crop area width */
355
+ width: number;
356
+ }
357
+ /**
358
+ * Rotate transformation options
359
+ */
360
+ interface RotateOptions extends TransformOptions {
361
+ /** Rotation angle in degrees. Note: angles other than 90°, 180°, and 270° require interpolation and may affect image quality */
362
+ angle: number;
363
+ /** Background color for rotation */
364
+ background?: string;
365
+ }
366
+ /**
367
+ * Transformation pipeline step
368
+ */
369
+ interface TransformationStep {
370
+ options: TransformOptions | ResizeOptions | CropOptions | RotateOptions | SharpenOptions | BlurOptions | MedianOptions | CLAHEOptions | ConvolveOptions | ThresholdOptions | BooleanOptions | LinearOptions | RecombineOptions | ModulateOptions | TintOptions | GreyscaleOptions | ColourspaceOptions | ExtractChannelOptions | JoinChannelOptions | BandboolOptions | AffineOptions | DilateOptions | ErodeOptions | PipelineColourspaceOptions | ToColourspaceOptions | RemoveAlphaOptions | EnsureAlphaOptions;
371
+ type: "resize" | "crop" | "rotate" | "format" | "quality" | "sharpen" | "blur" | "median" | "clahe" | "convolve" | "threshold" | "boolean" | "linear" | "recombine" | "modulate" | "tint" | "greyscale" | "colourspace" | "extractChannel" | "joinChannel" | "bandbool" | "autoOrient" | "flip" | "flop" | "affine" | "dilate" | "erode" | "pipelineColourspace" | "toColourspace" | "removeAlpha" | "ensureAlpha" | "flatten" | "unflatten" | "gamma" | "negate" | "normalise" | "normalize";
372
+ }
373
+ /**
374
+ * Generic transformation pipeline step (for any media type)
375
+ */
376
+ interface MediaTransformationStep {
377
+ options: TransformOptions | ResizeOptions | CropOptions | RotateOptions | SharpenOptions | BlurOptions | MedianOptions | CLAHEOptions | ConvolveOptions | ThresholdOptions | BooleanOptions | LinearOptions | RecombineOptions | ModulateOptions | TintOptions | GreyscaleOptions | ColourspaceOptions | ExtractChannelOptions | JoinChannelOptions | BandboolOptions | VideoTransformOptions | VideoResizeOptions | VideoCropOptions | VideoRotateOptions | AudioTransformOptions | AudioChannelMixOptions | AudioResampleOptions;
378
+ type: "resize" | "crop" | "rotate" | "format" | "quality" | "sharpen" | "blur" | "median" | "clahe" | "convolve" | "threshold" | "boolean" | "linear" | "recombine" | "modulate" | "tint" | "greyscale" | "colourspace" | "extractChannel" | "joinChannel" | "bandbool" | "autoOrient" | "flip" | "flop" | "affine" | "dilate" | "erode" | "flatten" | "unflatten" | "gamma" | "negate" | "normalise" | "normalize" | "codec" | "bitrate" | "frameRate" | "resample" | "channels";
379
+ }
380
+ /**
381
+ * Video transformation options
382
+ */
383
+ interface VideoTransformOptions extends TransformOptions {
384
+ /** Video bitrate */
385
+ bitrate?: number;
386
+ /** Video codec */
387
+ codec?: "avc" | "hevc" | "vp8" | "vp9" | "av1";
388
+ /** Frame rate in Hz */
389
+ frameRate?: number;
390
+ /** Key frame interval in seconds */
391
+ keyFrameInterval?: number;
392
+ }
393
+ /**
394
+ * Audio transformation options
395
+ */
396
+ interface AudioTransformOptions extends TransformOptions {
397
+ /** Audio bitrate */
398
+ bitrate?: number;
399
+ /** Audio codec */
400
+ codec?: "aac" | "opus" | "mp3" | "vorbis" | "flac";
401
+ /** Number of channels */
402
+ numberOfChannels?: number;
403
+ /** Sample rate in Hz */
404
+ sampleRate?: number;
405
+ }
406
+ /**
407
+ * Video resize transformation options
408
+ */
409
+ interface VideoResizeOptions extends VideoTransformOptions {
410
+ /** Resize fit mode */
411
+ fit?: "cover" | "contain" | "fill" | "inside" | "outside";
412
+ /** Height in pixels */
413
+ height?: number;
414
+ /** Position for cover/contain fits */
415
+ position?: string | number;
416
+ /** Width in pixels */
417
+ width?: number;
418
+ /** Whether to avoid enlarging videos smaller than specified dimensions */
419
+ withoutEnlargement?: boolean;
420
+ /** Whether to avoid reducing videos larger than specified dimensions */
421
+ withoutReduction?: boolean;
422
+ }
423
+ /**
424
+ * Video crop transformation options
425
+ */
426
+ interface VideoCropOptions extends VideoTransformOptions {
427
+ /** Crop area height */
428
+ height: number;
429
+ /** Crop area left offset */
430
+ left: number;
431
+ /** Crop area top offset */
432
+ top: number;
433
+ /** Crop area width */
434
+ width: number;
435
+ }
436
+ /**
437
+ * Video rotate transformation options
438
+ */
439
+ interface VideoRotateOptions extends VideoTransformOptions {
440
+ /** Rotation angle in degrees. Note: angles other than 90°, 180°, and 270° require interpolation and may affect video quality */
441
+ angle: number;
442
+ /** Background color for rotation */
443
+ background?: string;
444
+ }
445
+ /**
446
+ * Audio channel mix transformation options
447
+ */
448
+ interface AudioChannelMixOptions extends AudioTransformOptions {
449
+ /** Number of output channels */
450
+ numberOfChannels: number;
451
+ }
452
+ /**
453
+ * Audio resample transformation options
454
+ */
455
+ interface AudioResampleOptions extends AudioTransformOptions {
456
+ /** Output sample rate in Hz */
457
+ sampleRate: number;
458
+ }
459
+ /**
460
+ * Video transformation pipeline step
461
+ */
462
+ interface VideoTransformationStep {
463
+ options: VideoTransformOptions | VideoResizeOptions | VideoCropOptions | VideoRotateOptions;
464
+ type: "resize" | "crop" | "rotate" | "format" | "codec" | "bitrate" | "frameRate";
465
+ }
466
+ /**
467
+ * Audio transformation pipeline step
468
+ */
469
+ interface AudioTransformationStep {
470
+ options: AudioTransformOptions | AudioChannelMixOptions | AudioResampleOptions;
471
+ type: "resample" | "channels" | "format" | "codec" | "bitrate";
472
+ }
473
+ /**
474
+ * Image transformation result
475
+ */
476
+ interface TransformResult<TFileReturn extends FileReturn = FileReturn> {
477
+ /** Transformed image buffer */
478
+ buffer: Buffer;
479
+ /** Image format */
480
+ format: string;
481
+ /** Image height in pixels */
482
+ height: number;
483
+ /** Original file information */
484
+ originalFile: TFileReturn;
485
+ /** Image size in bytes */
486
+ size: number;
487
+ /** Image width in pixels */
488
+ width: number;
489
+ }
490
+ /**
491
+ * Video transformation result
492
+ */
493
+ interface VideoTransformResult<TFileReturn extends FileReturn = FileReturn> extends TransformResult<TFileReturn> {
494
+ /** Video bitrate */
495
+ bitrate?: number;
496
+ /** Video duration in seconds */
497
+ duration: number;
498
+ }
499
+ /**
500
+ * Audio transformation result
501
+ */
502
+ interface AudioTransformResult<TFileReturn extends FileReturn = FileReturn> extends Omit<TransformResult<TFileReturn>, "width" | "height"> {
503
+ /** Audio bitrate */
504
+ bitrate?: number;
505
+ /** Audio duration in seconds */
506
+ duration: number;
507
+ /** Number of channels */
508
+ numberOfChannels: number;
509
+ /** Sample rate in Hz */
510
+ sampleRate: number;
511
+ }
512
+ /**
513
+ * Media transformer configuration (unified config for all transformers)
514
+ */
515
+ interface MediaTransformerConfig<TFile extends File = File, TFileReturn extends FileReturn = FileReturn> {
516
+ /** Default audio bitrate */
517
+ audioBitrate?: number;
518
+ /** Default audio codec */
519
+ audioCodec?: "aac" | "opus" | "mp3" | "vorbis" | "flac";
520
+ /** Audio transformer class (optional, enables audio transformations) */
521
+ AudioTransformer?: new (storage: BaseStorage<TFile, TFileReturn>, config: AudioTransformerConfig) => BaseTransformer<AudioTransformerConfig, AudioTransformResult<TFileReturn>, TFile, TFileReturn>;
522
+ /** Cache instance to use for caching */
523
+ cache?: Cache;
524
+ /** Cache TTL in seconds */
525
+ cacheTtl?: number;
526
+ /** Image transformer class (optional, enables image transformations) */
527
+ ImageTransformer?: new (storage: BaseStorage<TFile, TFileReturn>, config: ImageTransformerConfig) => BaseTransformer<ImageTransformerConfig, TransformResult<TFileReturn>, TFile, TFileReturn>;
528
+ /** Logger instance */
529
+ logger?: Console;
530
+ /** Maximum audio size to process (in bytes) */
531
+ maxAudioSize?: number;
532
+ /** Maximum image size to process (in bytes) */
533
+ maxImageSize?: number;
534
+ /** Maximum video size to process (in bytes) */
535
+ maxVideoSize?: number;
536
+ /** Save transformed files to storage for reuse */
537
+ saveTransformedFiles?: boolean;
538
+ /** Supported audio input formats */
539
+ supportedAudioFormats?: string[];
540
+ /** Supported image input formats */
541
+ supportedImageFormats?: string[];
542
+ /** Supported video input formats */
543
+ supportedVideoFormats?: string[];
544
+ /** Default video bitrate */
545
+ videoBitrate?: number;
546
+ /** Default video codec */
547
+ videoCodec?: "avc" | "hevc" | "vp8" | "vp9" | "av1";
548
+ /** Video transformer class (optional, enables video transformations) */
549
+ VideoTransformer?: new (storage: BaseStorage<TFile, TFileReturn>, config: VideoTransformerConfig) => BaseTransformer<VideoTransformerConfig, VideoTransformResult<TFileReturn>, TFile, TFileReturn>;
550
+ }
551
+ /**
552
+ * Unified media transformation result
553
+ */
554
+ interface MediaTransformResult<TFileReturn extends FileReturn = FileReturn> {
555
+ /** Video-specific properties */
556
+ bitrate?: number;
557
+ /** Transformed media buffer */
558
+ buffer: Buffer;
559
+ /** Video/Audio-specific properties */
560
+ duration?: number;
561
+ /** Media format */
562
+ format: string;
563
+ /** Image/Video-specific properties */
564
+ height?: number;
565
+ /** Media type */
566
+ mediaType: "image" | "video" | "audio";
567
+ /** Audio-specific properties */
568
+ numberOfChannels?: number;
569
+ /** Original file information */
570
+ originalFile: TFileReturn;
571
+ /** Audio-specific properties */
572
+ sampleRate?: number;
573
+ /** Media size in bytes */
574
+ size: number;
575
+ /** Image-specific properties */
576
+ width?: number;
577
+ }
578
+ /**
579
+ * Query parameters for media transformation
580
+ */
581
+ interface MediaTransformQuery {
582
+ /** Apply affine transformation */
583
+ affine?: boolean;
584
+ /** Rotation angle in degrees. Note: angles other than 90°, 180°, and 270° require interpolation and may affect media quality */
585
+ angle?: number;
586
+ /** Background color for rotation */
587
+ background?: string;
588
+ /** Video bitrate in bits per second */
589
+ bitrate?: number;
590
+ /** Apply blur effect */
591
+ blur?: boolean;
592
+ /** Brightness multiplier for modulation */
593
+ brightness?: number;
594
+ /** Apply CLAHE (Contrast Limited Adaptive Histogram Equalization) */
595
+ clahe?: boolean;
596
+ /** Video codec */
597
+ codec?: "avc" | "hevc" | "vp8" | "vp9" | "av1" | "aac" | "opus" | "mp3" | "vorbis" | "flac";
598
+ /** Crop area height */
599
+ cropHeight?: number;
600
+ /** Crop area width */
601
+ cropWidth?: number;
602
+ /** Apply dilation */
603
+ dilate?: boolean;
604
+ /** Ensure alpha channel */
605
+ ensureAlpha?: boolean;
606
+ /** Apply erosion */
607
+ erode?: boolean;
608
+ /** Fast shrink on load */
609
+ fastShrinkOnLoad?: boolean;
610
+ /** Resize fit mode */
611
+ fit?: "cover" | "contain" | "fill" | "inside" | "outside";
612
+ /** Flatten alpha channel */
613
+ flatten?: boolean;
614
+ /** Flip image vertically */
615
+ flip?: boolean;
616
+ /** Flop image horizontally */
617
+ flop?: boolean;
618
+ /** Output format */
619
+ format?: string;
620
+ /** Frame rate in Hz */
621
+ frameRate?: number;
622
+ /** Apply gamma correction */
623
+ gamma?: boolean;
624
+ /** Convert to greyscale */
625
+ greyscale?: boolean;
626
+ /** Height in pixels */
627
+ height?: number;
628
+ /** Hue rotation in degrees for modulation */
629
+ hue?: number;
630
+ /** Resize kernel */
631
+ kernel?: string;
632
+ /** Key frame interval in seconds */
633
+ keyFrameInterval?: number;
634
+ /** Crop area left offset */
635
+ left?: number;
636
+ /** Lightness adjustment for modulation */
637
+ lightness?: number;
638
+ /** Apply median filter with specified size */
639
+ median?: number;
640
+ /** Apply modulation effects */
641
+ modulate?: boolean;
642
+ /** Negate (invert) the image */
643
+ negate?: boolean;
644
+ /** Normalise the image */
645
+ normalise?: boolean;
646
+ /** Number of channels */
647
+ numberOfChannels?: number;
648
+ /** Set pipeline colourspace */
649
+ pipelineColourspace?: boolean;
650
+ /** Position for cover/contain fits */
651
+ position?: string | number;
652
+ /** Quality (0-100 for images, bitrate for video/audio) */
653
+ quality?: number;
654
+ /** Remove alpha channel */
655
+ removeAlpha?: boolean;
656
+ /** Sample rate in Hz */
657
+ sampleRate?: number;
658
+ /** Saturation multiplier for modulation */
659
+ saturation?: number;
660
+ /** Apply sharpening */
661
+ sharpen?: boolean;
662
+ /** Apply thresholding with specified value */
663
+ threshold?: number;
664
+ /** Apply tinting */
665
+ tint?: boolean;
666
+ /** Convert to colourspace */
667
+ toColourspace?: boolean;
668
+ /** Crop area top offset */
669
+ top?: number;
670
+ /** Unflatten alpha channel */
671
+ unflatten?: boolean;
672
+ /** Width in pixels */
673
+ width?: number;
674
+ /** Whether to avoid enlarging smaller images */
675
+ withoutEnlargement?: boolean;
676
+ /** Whether to avoid reducing larger images */
677
+ withoutReduction?: boolean;
678
+ }
679
+ /**
680
+ * Image transformer configuration
681
+ */
682
+ interface ImageTransformerConfig extends BaseTransformerConfig {
683
+ /** Maximum image size to process (in bytes) */
684
+ maxImageSize?: number;
685
+ }
686
+ /**
687
+ * Video transformer configuration
688
+ */
689
+ interface VideoTransformerConfig extends BaseTransformerConfig {
690
+ /** Default video bitrate */
691
+ defaultBitrate?: number;
692
+ /** Default video codec */
693
+ defaultCodec?: "avc" | "hevc" | "vp8" | "vp9" | "av1";
694
+ /** Maximum video size to process (in bytes) */
695
+ maxVideoSize?: number;
696
+ }
697
+ /**
698
+ * Audio transformer configuration
699
+ */
700
+ interface AudioTransformerConfig extends BaseTransformerConfig {
701
+ /** Default audio bitrate */
702
+ defaultBitrate?: number;
703
+ /** Default audio codec */
704
+ defaultCodec?: "aac" | "opus" | "mp3" | "vorbis" | "flac";
705
+ /** Maximum audio size to process (in bytes) */
706
+ maxAudioSize?: number;
707
+ }
708
+ export { AudioTransformerConfig as A, BaseTransformer as B, CropOptions as C, DilateOptions as D, ExtractChannelOptions as E, VideoCropOptions as F, GreyscaleOptions as G, VideoRotateOptions as H, ImageTransformerConfig as I, JoinChannelOptions as J, VideoTransformOptions as K, LinearOptions as L, MedianOptions as M, VideoTransformationStep as N, MediaTransformerConfig as O, PipelineColourspaceOptions as P, MediaTransformResult as Q, ResizeOptions as R, SharpenOptions as S, TransformResult as T, MediaTransformQuery as U, VideoTransformerConfig as V, MediaTransformationStep as W, AudioTransformResult as a, AudioResampleOptions as b, AudioChannelMixOptions as c, AudioTransformOptions as d, AudioTransformationStep as e, RotateOptions as f, ImageFormat as g, TransformOptions as h, BlurOptions as i, CLAHEOptions as j, ConvolveOptions as k, ThresholdOptions as l, BooleanOptions as m, RecombineOptions as n, ModulateOptions as o, TintOptions as p, ColourspaceOptions as q, BandboolOptions as r, AffineOptions as s, ErodeOptions as t, ToColourspaceOptions as u, RemoveAlphaOptions as v, EnsureAlphaOptions as w, TransformationStep as x, VideoTransformResult as y, VideoResizeOptions as z };