@cibule/image-sharp 0.2.1 → 0.3.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 (28) hide show
  1. package/dist/dts/packages/di/src/index.d.ts +1 -0
  2. package/dist/dts/packages/di/src/index.d.ts.map +1 -1
  3. package/dist/dts/packages/di/src/lib/run-in-injection-context.d.ts +3 -0
  4. package/dist/dts/packages/di/src/lib/run-in-injection-context.d.ts.map +1 -0
  5. package/dist/dts/packages/image/src/index.d.ts +1 -0
  6. package/dist/dts/packages/image/src/index.d.ts.map +1 -1
  7. package/dist/dts/packages/image/src/lib/image-transformer.d.ts.map +1 -1
  8. package/dist/dts/packages/image/src/lib/provider.d.ts +4 -0
  9. package/dist/dts/packages/image/src/lib/provider.d.ts.map +1 -0
  10. package/dist/dts/packages/storage/src/index.d.ts +2 -1
  11. package/dist/dts/packages/storage/src/index.d.ts.map +1 -1
  12. package/dist/dts/packages/storage/src/lib/file-storage-types.d.ts +1 -0
  13. package/dist/dts/packages/storage/src/lib/file-storage-types.d.ts.map +1 -1
  14. package/dist/dts/packages/storage/src/lib/file-storage.d.ts +3 -3
  15. package/dist/dts/packages/storage/src/lib/file-storage.d.ts.map +1 -1
  16. package/dist/dts/packages/storage/src/lib/in-memory-file-storage.d.ts +3 -3
  17. package/dist/dts/packages/storage/src/lib/in-memory-file-storage.d.ts.map +1 -1
  18. package/dist/dts/packages/storage/src/lib/local-file-storage.d.ts +3 -3
  19. package/dist/dts/packages/storage/src/lib/local-file-storage.d.ts.map +1 -1
  20. package/dist/dts/packages/storage/src/lib/provider.d.ts +4 -0
  21. package/dist/dts/packages/storage/src/lib/provider.d.ts.map +1 -0
  22. package/dist/dts/packages/storage/src/lib/to-uint8-array.d.ts +2 -1
  23. package/dist/dts/packages/storage/src/lib/to-uint8-array.d.ts.map +1 -1
  24. package/dist/index.cjs +58 -0
  25. package/dist/index.cjs.map +3 -3
  26. package/dist/index.js +62 -0
  27. package/dist/index.js.map +3 -3
  28. package/package.json +3 -3
@@ -3,5 +3,6 @@ export { Injectable } from './lib/injectable';
3
3
  export { InjectionToken } from './lib/injection-token';
4
4
  export { Injector } from './lib/injector';
5
5
  export type { ClassProvider, FactoryProvider, InjectOptions, Provider, SingleProvider, ValueProvider, } from './lib/provider';
6
+ export { runInInjectionContext } from './lib/run-in-injection-context';
6
7
  export type { AbstractType, Token, Type } from './lib/token';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../di/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAQ,EACR,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../di/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAQ,EACR,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Injector } from './injector';
2
+ export declare function runInInjectionContext<T>(injector: Injector, fn: () => T): T;
3
+ //# sourceMappingURL=run-in-injection-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-in-injection-context.d.ts","sourceRoot":"","sources":["../../../../../../../di/src/lib/run-in-injection-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE3E"}
@@ -3,5 +3,6 @@ export { getContentType } from './lib/content-type-map';
3
3
  export { ImageTransformer } from './lib/image-transformer';
4
4
  export type { ImageTransformerAccessor } from './lib/image-transformer-accessor';
5
5
  export { IMAGE_TRANSFORMER_ACCESSOR } from './lib/image-transformer-accessor';
6
+ export { provideImageTransformerAccessor } from './lib/provider';
6
7
  export type { ImageFit, ImageFormat, PurgeCacheResult, TransformOptions, TransformResult, } from './lib/transform-options';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../image/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../image/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-transformer.d.ts","sourceRoot":"","sources":["../../../../../../../image/src/lib/image-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE/F,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IACpF,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CACjD"}
1
+ {"version":3,"file":"image-transformer.d.ts","sourceRoot":"","sources":["../../../../../../../image/src/lib/image-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE/F,8BACsB,gBAAgB;IACpC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IACpF,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CACjD"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from '@cibule/di';
2
+ import type { ImageTransformerAccessor } from './image-transformer-accessor';
3
+ export declare function provideImageTransformerAccessor(factory: () => ImageTransformerAccessor): Provider;
4
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../../../../image/src/lib/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAG7E,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,wBAAwB,GAAG,QAAQ,CAEjG"}
@@ -2,10 +2,11 @@ export { createReadableStream } from './lib/create-readable-stream';
2
2
  export { FileStorage } from './lib/file-storage';
3
3
  export type { FileStorageAccessor } from './lib/file-storage-accessor';
4
4
  export { FILE_STORAGE_ACCESSOR } from './lib/file-storage-accessor';
5
- export type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions, } from './lib/file-storage-types';
5
+ export type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions, UploadData, } from './lib/file-storage-types';
6
6
  export { InMemoryFileStorage } from './lib/in-memory-file-storage';
7
7
  export type { LocalFileStorageConfig } from './lib/local-file-storage';
8
8
  export { LocalFileStorage } from './lib/local-file-storage';
9
+ export { provideFileStorageAccessor } from './lib/provider';
9
10
  export type { StoredFile } from './lib/stored-file';
10
11
  export { toUint8Array } from './lib/to-uint8-array';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../storage/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../storage/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
@@ -40,4 +40,5 @@ export interface CompletedPart {
40
40
  readonly partNumber: number;
41
41
  readonly etag: string;
42
42
  }
43
+ export type UploadData = ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array | Blob;
43
44
  //# sourceMappingURL=file-storage-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-storage-types.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/file-storage-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"file-storage-types.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/file-storage-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC"}
@@ -1,6 +1,6 @@
1
- import type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions } from './file-storage-types';
1
+ import type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions, UploadData } from './file-storage-types';
2
2
  export declare abstract class FileStorage {
3
- abstract upload(key: string, data: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array, options?: FileUploadOptions): Promise<void>;
3
+ abstract upload(key: string, data: UploadData, options?: FileUploadOptions): Promise<void>;
4
4
  abstract download(key: string): Promise<FileStorageObject>;
5
5
  abstract head(key: string): Promise<HeadResult | null>;
6
6
  abstract delete(key: string): Promise<void>;
@@ -12,7 +12,7 @@ export declare abstract class FileStorage {
12
12
  abstract createPresignedUploadUrl(key: string, options?: PresignOptions): Promise<PresignedUploadUrl | null>;
13
13
  abstract initiateMultipartUpload(key: string): Promise<MultipartUploadInit>;
14
14
  abstract createPresignedPartUrls(key: string, uploadId: string, parts: number[]): Promise<PresignedPartUrl[]>;
15
- abstract uploadPart(key: string, uploadId: string, partNumber: number, data: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array): Promise<string>;
15
+ abstract uploadPart(key: string, uploadId: string, partNumber: number, data: UploadData): Promise<string>;
16
16
  abstract completeMultipartUpload(key: string, uploadId: string, parts: CompletedPart[]): Promise<void>;
17
17
  abstract abortMultipartUpload(key: string, uploadId: string): Promise<void>;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/file-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,8BAAsB,WAAW;IAC/B,QAAQ,CAAC,MAAM,CACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,EAC3D,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAE1D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAEtD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3C,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAErD,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAE1C,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAE7C,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEzF,QAAQ,CAAC,eAAe,CACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAEtC,QAAQ,CAAC,wBAAwB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAErC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAE3E,QAAQ,CAAC,uBAAuB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAE9B,QAAQ,CAAC,UAAU,CACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,GAC1D,OAAO,CAAC,MAAM,CAAC;IAElB,QAAQ,CAAC,uBAAuB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5E"}
1
+ {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/file-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,8BACsB,WAAW;IAC/B,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1F,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAE1D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAEtD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3C,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAErD,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAE1C,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAE7C,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEzF,QAAQ,CAAC,eAAe,CACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAEtC,QAAQ,CAAC,wBAAwB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAErC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAE3E,QAAQ,CAAC,uBAAuB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAE9B,QAAQ,CAAC,UAAU,CACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC;IAElB,QAAQ,CAAC,uBAAuB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5E"}
@@ -1,11 +1,11 @@
1
1
  import { FileStorage } from './file-storage';
2
- import type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions } from './file-storage-types';
2
+ import type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions, UploadData } from './file-storage-types';
3
3
  export declare class InMemoryFileStorage extends FileStorage {
4
4
  private readonly store;
5
5
  private readonly uploads;
6
6
  private readonly baseUrl;
7
7
  constructor(baseUrl?: string);
8
- upload(key: string, data: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array, options?: FileUploadOptions): Promise<void>;
8
+ upload(key: string, data: UploadData, options?: FileUploadOptions): Promise<void>;
9
9
  download(key: string): Promise<FileStorageObject>;
10
10
  head(key: string): Promise<HeadResult | null>;
11
11
  delete(key: string): Promise<void>;
@@ -17,7 +17,7 @@ export declare class InMemoryFileStorage extends FileStorage {
17
17
  createPresignedUploadUrl(_key: string, _options?: PresignOptions): Promise<PresignedUploadUrl | null>;
18
18
  initiateMultipartUpload(key: string): Promise<MultipartUploadInit>;
19
19
  createPresignedPartUrls(_key: string, _uploadId: string, _parts: number[]): Promise<PresignedPartUrl[]>;
20
- uploadPart(_key: string, uploadId: string, partNumber: number, data: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array): Promise<string>;
20
+ uploadPart(_key: string, uploadId: string, partNumber: number, data: UploadData): Promise<string>;
21
21
  completeMultipartUpload(_key: string, uploadId: string, parts: CompletedPart[]): Promise<void>;
22
22
  abortMultipartUpload(_key: string, uploadId: string): Promise<void>;
23
23
  clear(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-file-storage.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/in-memory-file-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAM9B,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEd,OAAO,SAAc;IAK3B,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,EAC3D,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAYT,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBjD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAW7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIpC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAahF,eAAe,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAU/B,wBAAwB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAI9B,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIjB,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,GAC1D,OAAO,CAAC,MAAM,CAAC;IAOX,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAkBT,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,KAAK,IAAI,IAAI;IAKpB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;CAKzB"}
1
+ {"version":3,"file":"in-memory-file-storage.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/in-memory-file-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACX,MAAM,sBAAsB,CAAC;AAM9B,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEd,OAAO,SAAc;IAK3B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBjD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAW7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIpC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAahF,eAAe,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAU/B,wBAAwB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAI9B,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlE,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIjB,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC;IAOX,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAkBT,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,KAAK,IAAI,IAAI;IAKpB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;CAKzB"}
@@ -1,5 +1,5 @@
1
1
  import { FileStorage } from './file-storage';
2
- import type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions } from './file-storage-types';
2
+ import type { CompletedPart, FileStorageObject, FileUploadOptions, HeadResult, MultipartUploadInit, PresignedPartUrl, PresignedUploadUrl, PresignOptions, UploadData } from './file-storage-types';
3
3
  export interface LocalFileStorageConfig {
4
4
  readonly basePath: string;
5
5
  }
@@ -7,7 +7,7 @@ export declare class LocalFileStorage extends FileStorage {
7
7
  private readonly basePath;
8
8
  private readonly partsDir;
9
9
  constructor(config: LocalFileStorageConfig);
10
- upload(key: string, data: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array, _options?: FileUploadOptions): Promise<void>;
10
+ upload(key: string, data: UploadData, _options?: FileUploadOptions): Promise<void>;
11
11
  download(key: string): Promise<FileStorageObject>;
12
12
  head(key: string): Promise<HeadResult | null>;
13
13
  delete(key: string): Promise<void>;
@@ -19,7 +19,7 @@ export declare class LocalFileStorage extends FileStorage {
19
19
  createPresignedUploadUrl(_key: string, _options?: PresignOptions): Promise<PresignedUploadUrl | null>;
20
20
  initiateMultipartUpload(key: string): Promise<MultipartUploadInit>;
21
21
  createPresignedPartUrls(_key: string, _uploadId: string, _parts: number[]): Promise<PresignedPartUrl[]>;
22
- uploadPart(_key: string, uploadId: string, partNumber: number, data: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array): Promise<string>;
22
+ uploadPart(_key: string, uploadId: string, partNumber: number, data: UploadData): Promise<string>;
23
23
  completeMultipartUpload(key: string, uploadId: string, parts: CompletedPart[]): Promise<void>;
24
24
  abortMultipartUpload(_key: string, uploadId: string): Promise<void>;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-file-storage.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/local-file-storage.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAc9B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEf,MAAM,EAAE,sBAAsB;IAMpC,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,EAC3D,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAOH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAcjD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAe7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUlD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQhF,eAAe,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAO/B,wBAAwB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIxB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMxE,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIjB,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,GAC1D,OAAO,CAAC,MAAM,CAAC;IAQL,uBAAuB,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAqBH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKjF"}
1
+ {"version":3,"file":"local-file-storage.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/local-file-storage.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACX,MAAM,sBAAsB,CAAC;AAc9B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEf,MAAM,EAAE,sBAAsB;IAMpC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAcjD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAe7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUlD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQhF,eAAe,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAO/B,wBAAwB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIxB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMxE,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIjB,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC;IAQL,uBAAuB,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAqBH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKjF"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from '@cibule/di';
2
+ import type { FileStorageAccessor } from './file-storage-accessor';
3
+ export declare function provideFileStorageAccessor(factory: () => FileStorageAccessor): Provider;
4
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,mBAAmB,GAAG,QAAQ,CAEvF"}
@@ -1,2 +1,3 @@
1
- export declare function toUint8Array(input: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array): Promise<Uint8Array>;
1
+ import type { UploadData } from './file-storage-types';
2
+ export declare function toUint8Array(input: UploadData): Promise<Uint8Array>;
2
3
  //# sourceMappingURL=to-uint8-array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-uint8-array.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/to-uint8-array.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY,CAChC,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU,GAC3D,OAAO,CAAC,UAAU,CAAC,CAmBrB"}
1
+ {"version":3,"file":"to-uint8-array.d.ts","sourceRoot":"","sources":["../../../../../../../storage/src/lib/to-uint8-array.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAuBzE"}
package/dist/index.cjs CHANGED
@@ -5,6 +5,12 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
9
+ var __typeError = (msg) => {
10
+ throw TypeError(msg);
11
+ };
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
14
  var __export = (target, all) => {
9
15
  for (var name in all)
10
16
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -26,6 +32,44 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
32
  mod
27
33
  ));
28
34
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
36
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
37
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
38
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
39
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
40
+ var __runInitializers = (array, flags, self, value) => {
41
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
42
+ return value;
43
+ };
44
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
45
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
46
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
47
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
48
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
49
+ return __privateGet(this, extra);
50
+ }, set [name](x) {
51
+ return __privateSet(this, extra, x);
52
+ } }, name));
53
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
54
+ for (var i = decorators.length - 1; i >= 0; i--) {
55
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
56
+ if (k) {
57
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
58
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
59
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
60
+ }
61
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
62
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
63
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
64
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
65
+ }
66
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
67
+ };
68
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
69
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
70
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
71
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
72
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
29
73
 
30
74
  // src/index.ts
31
75
  var index_exports = {};
@@ -49,9 +93,20 @@ function getContentType(format) {
49
93
  return FORMAT_TO_CONTENT_TYPE[format];
50
94
  }
51
95
 
96
+ // ../di/src/lib/injectable.ts
97
+ function Injectable() {
98
+ return () => {
99
+ };
100
+ }
101
+
52
102
  // ../image/src/lib/image-transformer.ts
103
+ var _ImageTransformer_decorators, _init;
104
+ _ImageTransformer_decorators = [Injectable()];
53
105
  var ImageTransformer = class {
54
106
  };
107
+ _init = __decoratorStart(null);
108
+ ImageTransformer = __decorateElement(_init, 0, "ImageTransformer", _ImageTransformer_decorators, ImageTransformer);
109
+ __runInitializers(_init, 1, ImageTransformer);
55
110
 
56
111
  // ../storage/src/lib/create-readable-stream.ts
57
112
  function createReadableStream(data) {
@@ -89,6 +144,9 @@ async function toUint8Array(input) {
89
144
  if (input instanceof ArrayBuffer) {
90
145
  return new Uint8Array(input);
91
146
  }
147
+ if (input instanceof Blob) {
148
+ return new Uint8Array(await input.arrayBuffer());
149
+ }
92
150
  const reader = input.getReader();
93
151
  const chunks = [];
94
152
  for (; ; ) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../../image/src/lib/constants.ts", "../../image/src/lib/content-type-map.ts", "../../image/src/lib/image-transformer.ts", "../../storage/src/lib/create-readable-stream.ts", "../../storage/src/lib/concat-uint8-arrays.ts", "../../storage/src/lib/to-uint8-array.ts", "../src/lib/sharp-image-transformer.ts", "../src/lib/cache-key.ts"],
4
- "sourcesContent": ["export { SharpImageTransformer } from './lib/sharp-image-transformer';\nexport type { SharpImageTransformerConfig } from './lib/sharp-image-transformer-config';\n", "export const ALLOWED_WIDTHS = [384, 640, 750, 828, 1080, 1200, 1920] as const;\n\nexport const ALLOWED_PLACEHOLDER_WIDTHS = [20, 30, 50, 80] as const;\n\nexport const DEFAULT_QUALITY = 80;\n\nexport const DEFAULT_MAX_SOURCE_SIZE = 60 * 1024 * 1024;\n", "import type { ImageFormat } from './transform-options';\n\nconst FORMAT_TO_CONTENT_TYPE: Record<ImageFormat, string> = {\n avif: 'image/avif',\n webp: 'image/webp',\n jpeg: 'image/jpeg',\n png: 'image/png',\n};\n\nexport function getContentType(format: ImageFormat): string {\n return FORMAT_TO_CONTENT_TYPE[format];\n}\n", "import type { PurgeCacheResult, TransformOptions, TransformResult } from './transform-options';\n\nexport abstract class ImageTransformer {\n abstract transform(key: string, options: TransformOptions): Promise<TransformResult>;\n abstract purgeCache(): Promise<PurgeCacheResult>;\n}\n", "export function createReadableStream(data: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(new Uint8Array(data));\n controller.close();\n },\n });\n}\n", "export function concatUint8Arrays(chunks: Uint8Array[]): Uint8Array {\n if (chunks.length === 0) {\n return new Uint8Array(0);\n }\n\n if (chunks.length === 1) {\n return chunks[0] ?? new Uint8Array(0);\n }\n\n const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return result;\n}\n", "import { concatUint8Arrays } from './concat-uint8-arrays';\n\nexport async function toUint8Array(\n input: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array,\n): Promise<Uint8Array> {\n if (input instanceof Uint8Array) {\n return input;\n }\n\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n }\n\n const reader = input.getReader();\n const chunks: Uint8Array[] = [];\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n return concatUint8Arrays(chunks);\n}\n", "import type { PurgeCacheResult, TransformOptions, TransformResult } from '@cibule/image';\nimport { DEFAULT_QUALITY, getContentType, ImageTransformer } from '@cibule/image';\nimport { createReadableStream, toUint8Array } from '@cibule/storage';\nimport sharp from 'sharp';\n\nimport { buildCacheKey } from './cache-key';\nimport type { SharpImageTransformerConfig } from './sharp-image-transformer-config';\n\nexport class SharpImageTransformer extends ImageTransformer {\n private readonly cachePrefix: string;\n\n public constructor(private readonly config: SharpImageTransformerConfig) {\n super();\n this.cachePrefix = config.cachePrefix ?? 'thumbnails';\n }\n\n public async transform(key: string, options: TransformOptions): Promise<TransformResult> {\n const format = options.format ?? this.config.defaultFormat ?? 'avif';\n const quality = options.quality ?? DEFAULT_QUALITY;\n const fit = options.fit ?? 'cover';\n const cacheKey = buildCacheKey(\n key,\n { width: options.width, format, quality, fit },\n this.cachePrefix,\n );\n\n const cached = await this.config.cache.head(cacheKey);\n if (cached) {\n return this.serveCached(cacheKey, cached.size, cached.contentType ?? getContentType(format));\n }\n\n const sourceObject = await this.config.source.download(key);\n const sourceBytes = await toUint8Array(sourceObject.body);\n\n const { data, info } = await sharp(sourceBytes)\n .resize({ width: options.width, fit })\n .toFormat(format, { quality })\n .toBuffer({ resolveWithObject: true });\n\n const contentType = getContentType(format);\n await this.config.cache.upload(cacheKey, data, { contentType });\n\n return {\n body: createReadableStream(data),\n contentType,\n width: info.width,\n height: info.height,\n size: info.size,\n };\n }\n\n public async purgeCache(): Promise<PurgeCacheResult> {\n const keys = await this.config.cache.listKeys(this.cachePrefix);\n await Promise.all(keys.map(k => this.config.cache.delete(k)));\n return { purgedCount: keys.length };\n }\n\n private async serveCached(\n cacheKey: string,\n size: number,\n contentType: string,\n ): Promise<TransformResult> {\n const cached = await this.config.cache.download(cacheKey);\n const bytes = await toUint8Array(cached.body);\n const metadata = await sharp(bytes).metadata();\n\n return {\n body: createReadableStream(bytes),\n contentType,\n width: metadata.width ?? 0,\n height: metadata.height ?? 0,\n size,\n };\n }\n}\n", "import type { ImageFit, ImageFormat } from '@cibule/image';\n\nexport interface ResolvedTransformOptions {\n readonly width: number;\n readonly format: ImageFormat;\n readonly quality: number;\n readonly fit: ImageFit;\n}\n\nexport function buildCacheKey(\n sourceKey: string,\n options: ResolvedTransformOptions,\n prefix: string,\n): string {\n return `${prefix}/${sourceKey}/w${String(options.width)}_q${String(options.quality)}_${options.format}_${options.fit}`;\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/index.ts", "../../image/src/lib/constants.ts", "../../image/src/lib/content-type-map.ts", "../../di/src/lib/injectable.ts", "../../image/src/lib/image-transformer.ts", "../../storage/src/lib/create-readable-stream.ts", "../../storage/src/lib/concat-uint8-arrays.ts", "../../storage/src/lib/to-uint8-array.ts", "../src/lib/sharp-image-transformer.ts", "../src/lib/cache-key.ts"],
4
+ "sourcesContent": ["export { SharpImageTransformer } from './lib/sharp-image-transformer';\nexport type { SharpImageTransformerConfig } from './lib/sharp-image-transformer-config';\n", "export const ALLOWED_WIDTHS = [384, 640, 750, 828, 1080, 1200, 1920] as const;\n\nexport const ALLOWED_PLACEHOLDER_WIDTHS = [20, 30, 50, 80] as const;\n\nexport const DEFAULT_QUALITY = 80;\n\nexport const DEFAULT_MAX_SOURCE_SIZE = 60 * 1024 * 1024;\n", "import type { ImageFormat } from './transform-options';\n\nconst FORMAT_TO_CONTENT_TYPE: Record<ImageFormat, string> = {\n avif: 'image/avif',\n webp: 'image/webp',\n jpeg: 'image/jpeg',\n png: 'image/png',\n};\n\nexport function getContentType(format: ImageFormat): string {\n return FORMAT_TO_CONTENT_TYPE[format];\n}\n", "import type { AbstractType, Type } from './token';\n\nexport function Injectable(): (target: Type<unknown> | AbstractType<unknown>) => void {\n return (): void => {};\n}\n", "import { Injectable } from '@cibule/di';\n\nimport type { PurgeCacheResult, TransformOptions, TransformResult } from './transform-options';\n\n@Injectable()\nexport abstract class ImageTransformer {\n abstract transform(key: string, options: TransformOptions): Promise<TransformResult>;\n abstract purgeCache(): Promise<PurgeCacheResult>;\n}\n", "export function createReadableStream(data: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(new Uint8Array(data));\n controller.close();\n },\n });\n}\n", "export function concatUint8Arrays(chunks: Uint8Array[]): Uint8Array {\n if (chunks.length === 0) {\n return new Uint8Array(0);\n }\n\n if (chunks.length === 1) {\n return chunks[0] ?? new Uint8Array(0);\n }\n\n const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return result;\n}\n", "import { concatUint8Arrays } from './concat-uint8-arrays';\nimport type { UploadData } from './file-storage-types';\n\nexport async function toUint8Array(input: UploadData): Promise<Uint8Array> {\n if (input instanceof Uint8Array) {\n return input;\n }\n\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n }\n\n if (input instanceof Blob) {\n return new Uint8Array(await input.arrayBuffer());\n }\n\n const reader = input.getReader();\n const chunks: Uint8Array[] = [];\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n return concatUint8Arrays(chunks);\n}\n", "import type { PurgeCacheResult, TransformOptions, TransformResult } from '@cibule/image';\nimport { DEFAULT_QUALITY, getContentType, ImageTransformer } from '@cibule/image';\nimport { createReadableStream, toUint8Array } from '@cibule/storage';\nimport sharp from 'sharp';\n\nimport { buildCacheKey } from './cache-key';\nimport type { SharpImageTransformerConfig } from './sharp-image-transformer-config';\n\nexport class SharpImageTransformer extends ImageTransformer {\n private readonly cachePrefix: string;\n\n public constructor(private readonly config: SharpImageTransformerConfig) {\n super();\n this.cachePrefix = config.cachePrefix ?? 'thumbnails';\n }\n\n public async transform(key: string, options: TransformOptions): Promise<TransformResult> {\n const format = options.format ?? this.config.defaultFormat ?? 'avif';\n const quality = options.quality ?? DEFAULT_QUALITY;\n const fit = options.fit ?? 'cover';\n const cacheKey = buildCacheKey(\n key,\n { width: options.width, format, quality, fit },\n this.cachePrefix,\n );\n\n const cached = await this.config.cache.head(cacheKey);\n if (cached) {\n return this.serveCached(cacheKey, cached.size, cached.contentType ?? getContentType(format));\n }\n\n const sourceObject = await this.config.source.download(key);\n const sourceBytes = await toUint8Array(sourceObject.body);\n\n const { data, info } = await sharp(sourceBytes)\n .resize({ width: options.width, fit })\n .toFormat(format, { quality })\n .toBuffer({ resolveWithObject: true });\n\n const contentType = getContentType(format);\n await this.config.cache.upload(cacheKey, data, { contentType });\n\n return {\n body: createReadableStream(data),\n contentType,\n width: info.width,\n height: info.height,\n size: info.size,\n };\n }\n\n public async purgeCache(): Promise<PurgeCacheResult> {\n const keys = await this.config.cache.listKeys(this.cachePrefix);\n await Promise.all(keys.map(k => this.config.cache.delete(k)));\n return { purgedCount: keys.length };\n }\n\n private async serveCached(\n cacheKey: string,\n size: number,\n contentType: string,\n ): Promise<TransformResult> {\n const cached = await this.config.cache.download(cacheKey);\n const bytes = await toUint8Array(cached.body);\n const metadata = await sharp(bytes).metadata();\n\n return {\n body: createReadableStream(bytes),\n contentType,\n width: metadata.width ?? 0,\n height: metadata.height ?? 0,\n size,\n };\n }\n}\n", "import type { ImageFit, ImageFormat } from '@cibule/image';\n\nexport interface ResolvedTransformOptions {\n readonly width: number;\n readonly format: ImageFormat;\n readonly quality: number;\n readonly fit: ImageFit;\n}\n\nexport function buildCacheKey(\n sourceKey: string,\n options: ResolvedTransformOptions,\n prefix: string,\n): string {\n return `${prefix}/${sourceKey}/w${String(options.width)}_q${String(options.quality)}_${options.format}_${options.fit}`;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["sharp"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,3 +1,51 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
5
+ var __typeError = (msg) => {
6
+ throw TypeError(msg);
7
+ };
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
11
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
+ var __runInitializers = (array, flags, self, value) => {
16
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
+ return value;
18
+ };
19
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
+ return __privateGet(this, extra);
25
+ }, set [name](x) {
26
+ return __privateSet(this, extra, x);
27
+ } }, name));
28
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
+ for (var i = decorators.length - 1; i >= 0; i--) {
30
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
+ if (k) {
32
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
35
+ }
36
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
+ }
41
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
42
+ };
43
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
45
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
46
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
47
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
48
+
1
49
  // ../image/src/lib/constants.ts
2
50
  var DEFAULT_QUALITY = 80;
3
51
  var DEFAULT_MAX_SOURCE_SIZE = 60 * 1024 * 1024;
@@ -13,9 +61,20 @@ function getContentType(format) {
13
61
  return FORMAT_TO_CONTENT_TYPE[format];
14
62
  }
15
63
 
64
+ // ../di/src/lib/injectable.ts
65
+ function Injectable() {
66
+ return () => {
67
+ };
68
+ }
69
+
16
70
  // ../image/src/lib/image-transformer.ts
71
+ var _ImageTransformer_decorators, _init;
72
+ _ImageTransformer_decorators = [Injectable()];
17
73
  var ImageTransformer = class {
18
74
  };
75
+ _init = __decoratorStart(null);
76
+ ImageTransformer = __decorateElement(_init, 0, "ImageTransformer", _ImageTransformer_decorators, ImageTransformer);
77
+ __runInitializers(_init, 1, ImageTransformer);
19
78
 
20
79
  // ../storage/src/lib/create-readable-stream.ts
21
80
  function createReadableStream(data) {
@@ -53,6 +112,9 @@ async function toUint8Array(input) {
53
112
  if (input instanceof ArrayBuffer) {
54
113
  return new Uint8Array(input);
55
114
  }
115
+ if (input instanceof Blob) {
116
+ return new Uint8Array(await input.arrayBuffer());
117
+ }
56
118
  const reader = input.getReader();
57
119
  const chunks = [];
58
120
  for (; ; ) {
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../image/src/lib/constants.ts", "../../image/src/lib/content-type-map.ts", "../../image/src/lib/image-transformer.ts", "../../storage/src/lib/create-readable-stream.ts", "../../storage/src/lib/concat-uint8-arrays.ts", "../../storage/src/lib/to-uint8-array.ts", "../src/lib/sharp-image-transformer.ts", "../src/lib/cache-key.ts"],
4
- "sourcesContent": ["export const ALLOWED_WIDTHS = [384, 640, 750, 828, 1080, 1200, 1920] as const;\n\nexport const ALLOWED_PLACEHOLDER_WIDTHS = [20, 30, 50, 80] as const;\n\nexport const DEFAULT_QUALITY = 80;\n\nexport const DEFAULT_MAX_SOURCE_SIZE = 60 * 1024 * 1024;\n", "import type { ImageFormat } from './transform-options';\n\nconst FORMAT_TO_CONTENT_TYPE: Record<ImageFormat, string> = {\n avif: 'image/avif',\n webp: 'image/webp',\n jpeg: 'image/jpeg',\n png: 'image/png',\n};\n\nexport function getContentType(format: ImageFormat): string {\n return FORMAT_TO_CONTENT_TYPE[format];\n}\n", "import type { PurgeCacheResult, TransformOptions, TransformResult } from './transform-options';\n\nexport abstract class ImageTransformer {\n abstract transform(key: string, options: TransformOptions): Promise<TransformResult>;\n abstract purgeCache(): Promise<PurgeCacheResult>;\n}\n", "export function createReadableStream(data: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(new Uint8Array(data));\n controller.close();\n },\n });\n}\n", "export function concatUint8Arrays(chunks: Uint8Array[]): Uint8Array {\n if (chunks.length === 0) {\n return new Uint8Array(0);\n }\n\n if (chunks.length === 1) {\n return chunks[0] ?? new Uint8Array(0);\n }\n\n const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return result;\n}\n", "import { concatUint8Arrays } from './concat-uint8-arrays';\n\nexport async function toUint8Array(\n input: ReadableStream<Uint8Array> | ArrayBuffer | Uint8Array,\n): Promise<Uint8Array> {\n if (input instanceof Uint8Array) {\n return input;\n }\n\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n }\n\n const reader = input.getReader();\n const chunks: Uint8Array[] = [];\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n return concatUint8Arrays(chunks);\n}\n", "import type { PurgeCacheResult, TransformOptions, TransformResult } from '@cibule/image';\nimport { DEFAULT_QUALITY, getContentType, ImageTransformer } from '@cibule/image';\nimport { createReadableStream, toUint8Array } from '@cibule/storage';\nimport sharp from 'sharp';\n\nimport { buildCacheKey } from './cache-key';\nimport type { SharpImageTransformerConfig } from './sharp-image-transformer-config';\n\nexport class SharpImageTransformer extends ImageTransformer {\n private readonly cachePrefix: string;\n\n public constructor(private readonly config: SharpImageTransformerConfig) {\n super();\n this.cachePrefix = config.cachePrefix ?? 'thumbnails';\n }\n\n public async transform(key: string, options: TransformOptions): Promise<TransformResult> {\n const format = options.format ?? this.config.defaultFormat ?? 'avif';\n const quality = options.quality ?? DEFAULT_QUALITY;\n const fit = options.fit ?? 'cover';\n const cacheKey = buildCacheKey(\n key,\n { width: options.width, format, quality, fit },\n this.cachePrefix,\n );\n\n const cached = await this.config.cache.head(cacheKey);\n if (cached) {\n return this.serveCached(cacheKey, cached.size, cached.contentType ?? getContentType(format));\n }\n\n const sourceObject = await this.config.source.download(key);\n const sourceBytes = await toUint8Array(sourceObject.body);\n\n const { data, info } = await sharp(sourceBytes)\n .resize({ width: options.width, fit })\n .toFormat(format, { quality })\n .toBuffer({ resolveWithObject: true });\n\n const contentType = getContentType(format);\n await this.config.cache.upload(cacheKey, data, { contentType });\n\n return {\n body: createReadableStream(data),\n contentType,\n width: info.width,\n height: info.height,\n size: info.size,\n };\n }\n\n public async purgeCache(): Promise<PurgeCacheResult> {\n const keys = await this.config.cache.listKeys(this.cachePrefix);\n await Promise.all(keys.map(k => this.config.cache.delete(k)));\n return { purgedCount: keys.length };\n }\n\n private async serveCached(\n cacheKey: string,\n size: number,\n contentType: string,\n ): Promise<TransformResult> {\n const cached = await this.config.cache.download(cacheKey);\n const bytes = await toUint8Array(cached.body);\n const metadata = await sharp(bytes).metadata();\n\n return {\n body: createReadableStream(bytes),\n contentType,\n width: metadata.width ?? 0,\n height: metadata.height ?? 0,\n size,\n };\n }\n}\n", "import type { ImageFit, ImageFormat } from '@cibule/image';\n\nexport interface ResolvedTransformOptions {\n readonly width: number;\n readonly format: ImageFormat;\n readonly quality: number;\n readonly fit: ImageFit;\n}\n\nexport function buildCacheKey(\n sourceKey: string,\n options: ResolvedTransformOptions,\n prefix: string,\n): string {\n return `${prefix}/${sourceKey}/w${String(options.width)}_q${String(options.quality)}_${options.format}_${options.fit}`;\n}\n"],
5
- "mappings": ";AAIO,IAAM,kBAAkB;AAExB,IAAM,0BAA0B,KAAK,OAAO;;;ACJnD,IAAM,yBAAsD;AAAA,EAC1D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AACP;AAEO,SAAS,eAAe,QAA6B;AAC1D,SAAO,uBAAuB,MAAM;AACtC;;;ACTO,IAAe,mBAAf,MAAgC;AAGvC;;;ACLO,SAAS,qBAAqB,MAA8C;AACjF,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,YAAkB;AACtB,iBAAW,QAAQ,IAAI,WAAW,IAAI,CAAC;AACvC,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACH;;;ACPO,SAAS,kBAAkB,QAAkC;AAClE,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,IAAI,WAAW,CAAC;AAAA,EACzB;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;AAAA,EACtC;AAEA,QAAM,cAAc,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,YAAY,CAAC;AACnE,QAAM,SAAS,IAAI,WAAW,WAAW;AACzC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,WAAO,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AAEA,SAAO;AACT;;;AChBA,eAAsB,aACpB,OACqB;AACrB,MAAI,iBAAiB,YAAY;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,aAAa;AAChC,WAAO,IAAI,WAAW,KAAK;AAAA,EAC7B;AAEA,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,SAAuB,CAAC;AAE9B,aAAS;AACP,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI,KAAM;AACV,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO,kBAAkB,MAAM;AACjC;;;ACpBA,OAAO,WAAW;;;ACMX,SAAS,cACd,WACA,SACA,QACQ;AACR,SAAO,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,QAAQ,KAAK,CAAC,KAAK,OAAO,QAAQ,OAAO,CAAC,IAAI,QAAQ,MAAM,IAAI,QAAQ,GAAG;AACtH;;;ADPO,IAAM,wBAAN,cAAoC,iBAAiB;AAAA,EAGnD,YAA6B,QAAqC;AACvE,UAAM;AAD4B;AAElC,SAAK,cAAc,OAAO,eAAe;AAAA,EAC3C;AAAA,EALiB;AAAA,EAOjB,MAAa,UAAU,KAAa,SAAqD;AACvF,UAAM,SAAS,QAAQ,UAAU,KAAK,OAAO,iBAAiB;AAC9D,UAAM,UAAU,QAAQ,WAAW;AACnC,UAAM,MAAM,QAAQ,OAAO;AAC3B,UAAM,WAAW;AAAA,MACf;AAAA,MACA,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,IAAI;AAAA,MAC7C,KAAK;AAAA,IACP;AAEA,UAAM,SAAS,MAAM,KAAK,OAAO,MAAM,KAAK,QAAQ;AACpD,QAAI,QAAQ;AACV,aAAO,KAAK,YAAY,UAAU,OAAO,MAAM,OAAO,eAAe,eAAe,MAAM,CAAC;AAAA,IAC7F;AAEA,UAAM,eAAe,MAAM,KAAK,OAAO,OAAO,SAAS,GAAG;AAC1D,UAAM,cAAc,MAAM,aAAa,aAAa,IAAI;AAExD,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,MAAM,WAAW,EAC3C,OAAO,EAAE,OAAO,QAAQ,OAAO,IAAI,CAAC,EACpC,SAAS,QAAQ,EAAE,QAAQ,CAAC,EAC5B,SAAS,EAAE,mBAAmB,KAAK,CAAC;AAEvC,UAAM,cAAc,eAAe,MAAM;AACzC,UAAM,KAAK,OAAO,MAAM,OAAO,UAAU,MAAM,EAAE,YAAY,CAAC;AAE9D,WAAO;AAAA,MACL,MAAM,qBAAqB,IAAI;AAAA,MAC/B;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAa,aAAwC;AACnD,UAAM,OAAO,MAAM,KAAK,OAAO,MAAM,SAAS,KAAK,WAAW;AAC9D,UAAM,QAAQ,IAAI,KAAK,IAAI,OAAK,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC;AAC5D,WAAO,EAAE,aAAa,KAAK,OAAO;AAAA,EACpC;AAAA,EAEA,MAAc,YACZ,UACA,MACA,aAC0B;AAC1B,UAAM,SAAS,MAAM,KAAK,OAAO,MAAM,SAAS,QAAQ;AACxD,UAAM,QAAQ,MAAM,aAAa,OAAO,IAAI;AAC5C,UAAM,WAAW,MAAM,MAAM,KAAK,EAAE,SAAS;AAE7C,WAAO;AAAA,MACL,MAAM,qBAAqB,KAAK;AAAA,MAChC;AAAA,MACA,OAAO,SAAS,SAAS;AAAA,MACzB,QAAQ,SAAS,UAAU;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACF;",
3
+ "sources": ["../../image/src/lib/constants.ts", "../../image/src/lib/content-type-map.ts", "../../di/src/lib/injectable.ts", "../../image/src/lib/image-transformer.ts", "../../storage/src/lib/create-readable-stream.ts", "../../storage/src/lib/concat-uint8-arrays.ts", "../../storage/src/lib/to-uint8-array.ts", "../src/lib/sharp-image-transformer.ts", "../src/lib/cache-key.ts"],
4
+ "sourcesContent": ["export const ALLOWED_WIDTHS = [384, 640, 750, 828, 1080, 1200, 1920] as const;\n\nexport const ALLOWED_PLACEHOLDER_WIDTHS = [20, 30, 50, 80] as const;\n\nexport const DEFAULT_QUALITY = 80;\n\nexport const DEFAULT_MAX_SOURCE_SIZE = 60 * 1024 * 1024;\n", "import type { ImageFormat } from './transform-options';\n\nconst FORMAT_TO_CONTENT_TYPE: Record<ImageFormat, string> = {\n avif: 'image/avif',\n webp: 'image/webp',\n jpeg: 'image/jpeg',\n png: 'image/png',\n};\n\nexport function getContentType(format: ImageFormat): string {\n return FORMAT_TO_CONTENT_TYPE[format];\n}\n", "import type { AbstractType, Type } from './token';\n\nexport function Injectable(): (target: Type<unknown> | AbstractType<unknown>) => void {\n return (): void => {};\n}\n", "import { Injectable } from '@cibule/di';\n\nimport type { PurgeCacheResult, TransformOptions, TransformResult } from './transform-options';\n\n@Injectable()\nexport abstract class ImageTransformer {\n abstract transform(key: string, options: TransformOptions): Promise<TransformResult>;\n abstract purgeCache(): Promise<PurgeCacheResult>;\n}\n", "export function createReadableStream(data: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(new Uint8Array(data));\n controller.close();\n },\n });\n}\n", "export function concatUint8Arrays(chunks: Uint8Array[]): Uint8Array {\n if (chunks.length === 0) {\n return new Uint8Array(0);\n }\n\n if (chunks.length === 1) {\n return chunks[0] ?? new Uint8Array(0);\n }\n\n const totalLength = chunks.reduce((sum, c) => sum + c.byteLength, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return result;\n}\n", "import { concatUint8Arrays } from './concat-uint8-arrays';\nimport type { UploadData } from './file-storage-types';\n\nexport async function toUint8Array(input: UploadData): Promise<Uint8Array> {\n if (input instanceof Uint8Array) {\n return input;\n }\n\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n }\n\n if (input instanceof Blob) {\n return new Uint8Array(await input.arrayBuffer());\n }\n\n const reader = input.getReader();\n const chunks: Uint8Array[] = [];\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n return concatUint8Arrays(chunks);\n}\n", "import type { PurgeCacheResult, TransformOptions, TransformResult } from '@cibule/image';\nimport { DEFAULT_QUALITY, getContentType, ImageTransformer } from '@cibule/image';\nimport { createReadableStream, toUint8Array } from '@cibule/storage';\nimport sharp from 'sharp';\n\nimport { buildCacheKey } from './cache-key';\nimport type { SharpImageTransformerConfig } from './sharp-image-transformer-config';\n\nexport class SharpImageTransformer extends ImageTransformer {\n private readonly cachePrefix: string;\n\n public constructor(private readonly config: SharpImageTransformerConfig) {\n super();\n this.cachePrefix = config.cachePrefix ?? 'thumbnails';\n }\n\n public async transform(key: string, options: TransformOptions): Promise<TransformResult> {\n const format = options.format ?? this.config.defaultFormat ?? 'avif';\n const quality = options.quality ?? DEFAULT_QUALITY;\n const fit = options.fit ?? 'cover';\n const cacheKey = buildCacheKey(\n key,\n { width: options.width, format, quality, fit },\n this.cachePrefix,\n );\n\n const cached = await this.config.cache.head(cacheKey);\n if (cached) {\n return this.serveCached(cacheKey, cached.size, cached.contentType ?? getContentType(format));\n }\n\n const sourceObject = await this.config.source.download(key);\n const sourceBytes = await toUint8Array(sourceObject.body);\n\n const { data, info } = await sharp(sourceBytes)\n .resize({ width: options.width, fit })\n .toFormat(format, { quality })\n .toBuffer({ resolveWithObject: true });\n\n const contentType = getContentType(format);\n await this.config.cache.upload(cacheKey, data, { contentType });\n\n return {\n body: createReadableStream(data),\n contentType,\n width: info.width,\n height: info.height,\n size: info.size,\n };\n }\n\n public async purgeCache(): Promise<PurgeCacheResult> {\n const keys = await this.config.cache.listKeys(this.cachePrefix);\n await Promise.all(keys.map(k => this.config.cache.delete(k)));\n return { purgedCount: keys.length };\n }\n\n private async serveCached(\n cacheKey: string,\n size: number,\n contentType: string,\n ): Promise<TransformResult> {\n const cached = await this.config.cache.download(cacheKey);\n const bytes = await toUint8Array(cached.body);\n const metadata = await sharp(bytes).metadata();\n\n return {\n body: createReadableStream(bytes),\n contentType,\n width: metadata.width ?? 0,\n height: metadata.height ?? 0,\n size,\n };\n }\n}\n", "import type { ImageFit, ImageFormat } from '@cibule/image';\n\nexport interface ResolvedTransformOptions {\n readonly width: number;\n readonly format: ImageFormat;\n readonly quality: number;\n readonly fit: ImageFit;\n}\n\nexport function buildCacheKey(\n sourceKey: string,\n options: ResolvedTransformOptions,\n prefix: string,\n): string {\n return `${prefix}/${sourceKey}/w${String(options.width)}_q${String(options.quality)}_${options.format}_${options.fit}`;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAAM,kBAAkB;AAExB,IAAM,0BAA0B,KAAK,OAAO;;;ACJnD,IAAM,yBAAsD;AAAA,EAC1D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AACP;AAEO,SAAS,eAAe,QAA6B;AAC1D,SAAO,uBAAuB,MAAM;AACtC;;;ACTO,SAAS,aAAsE;AACpF,SAAO,MAAY;AAAA,EAAC;AACtB;;;ACJA;AAIA,gCAAC,WAAW;AACL,IAAe,mBAAf,MAAgC;AAGvC;AAHO;AAAe,mBAAf,gDADP,8BACsB;AAAf,4BAAe;;;ACLf,SAAS,qBAAqB,MAA8C;AACjF,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,YAAkB;AACtB,iBAAW,QAAQ,IAAI,WAAW,IAAI,CAAC;AACvC,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACH;;;ACPO,SAAS,kBAAkB,QAAkC;AAClE,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,IAAI,WAAW,CAAC;AAAA,EACzB;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;AAAA,EACtC;AAEA,QAAM,cAAc,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,YAAY,CAAC;AACnE,QAAM,SAAS,IAAI,WAAW,WAAW;AACzC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,WAAO,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AAEA,SAAO;AACT;;;ACfA,eAAsB,aAAa,OAAwC;AACzE,MAAI,iBAAiB,YAAY;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,aAAa;AAChC,WAAO,IAAI,WAAW,KAAK;AAAA,EAC7B;AAEA,MAAI,iBAAiB,MAAM;AACzB,WAAO,IAAI,WAAW,MAAM,MAAM,YAAY,CAAC;AAAA,EACjD;AAEA,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,SAAuB,CAAC;AAE9B,aAAS;AACP,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI,KAAM;AACV,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO,kBAAkB,MAAM;AACjC;;;ACvBA,OAAO,WAAW;;;ACMX,SAAS,cACd,WACA,SACA,QACQ;AACR,SAAO,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,QAAQ,KAAK,CAAC,KAAK,OAAO,QAAQ,OAAO,CAAC,IAAI,QAAQ,MAAM,IAAI,QAAQ,GAAG;AACtH;;;ADPO,IAAM,wBAAN,cAAoC,iBAAiB;AAAA,EAGnD,YAA6B,QAAqC;AACvE,UAAM;AAD4B;AAElC,SAAK,cAAc,OAAO,eAAe;AAAA,EAC3C;AAAA,EALiB;AAAA,EAOjB,MAAa,UAAU,KAAa,SAAqD;AACvF,UAAM,SAAS,QAAQ,UAAU,KAAK,OAAO,iBAAiB;AAC9D,UAAM,UAAU,QAAQ,WAAW;AACnC,UAAM,MAAM,QAAQ,OAAO;AAC3B,UAAM,WAAW;AAAA,MACf;AAAA,MACA,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,IAAI;AAAA,MAC7C,KAAK;AAAA,IACP;AAEA,UAAM,SAAS,MAAM,KAAK,OAAO,MAAM,KAAK,QAAQ;AACpD,QAAI,QAAQ;AACV,aAAO,KAAK,YAAY,UAAU,OAAO,MAAM,OAAO,eAAe,eAAe,MAAM,CAAC;AAAA,IAC7F;AAEA,UAAM,eAAe,MAAM,KAAK,OAAO,OAAO,SAAS,GAAG;AAC1D,UAAM,cAAc,MAAM,aAAa,aAAa,IAAI;AAExD,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,MAAM,WAAW,EAC3C,OAAO,EAAE,OAAO,QAAQ,OAAO,IAAI,CAAC,EACpC,SAAS,QAAQ,EAAE,QAAQ,CAAC,EAC5B,SAAS,EAAE,mBAAmB,KAAK,CAAC;AAEvC,UAAM,cAAc,eAAe,MAAM;AACzC,UAAM,KAAK,OAAO,MAAM,OAAO,UAAU,MAAM,EAAE,YAAY,CAAC;AAE9D,WAAO;AAAA,MACL,MAAM,qBAAqB,IAAI;AAAA,MAC/B;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAa,aAAwC;AACnD,UAAM,OAAO,MAAM,KAAK,OAAO,MAAM,SAAS,KAAK,WAAW;AAC9D,UAAM,QAAQ,IAAI,KAAK,IAAI,OAAK,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC;AAC5D,WAAO,EAAE,aAAa,KAAK,OAAO;AAAA,EACpC;AAAA,EAEA,MAAc,YACZ,UACA,MACA,aAC0B;AAC1B,UAAM,SAAS,MAAM,KAAK,OAAO,MAAM,SAAS,QAAQ;AACxD,UAAM,QAAQ,MAAM,aAAa,OAAO,IAAI;AAC5C,UAAM,WAAW,MAAM,MAAM,KAAK,EAAE,SAAS;AAE7C,WAAO;AAAA,MACL,MAAM,qBAAqB,KAAK;AAAA,MAChC;AAAA,MACA,OAAO,SAAS,SAAS;AAAA,MACzB,QAAQ,SAAS,UAAU;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cibule/image-sharp",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -31,8 +31,8 @@
31
31
  "access": "public"
32
32
  },
33
33
  "dependencies": {
34
- "@cibule/image": "^0.2.0",
35
- "@cibule/storage": "^0.2.0",
34
+ "@cibule/image": "^0.3.0",
35
+ "@cibule/storage": "^0.3.0",
36
36
  "sharp": "^0.33.0"
37
37
  }
38
38
  }