@bgord/bun 0.22.1 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/file-hash-noop.adapter.d.ts +10 -0
  2. package/dist/file-hash-noop.adapter.d.ts.map +1 -0
  3. package/dist/file-hash-noop.adapter.js +7 -0
  4. package/dist/file-hash-noop.adapter.js.map +1 -0
  5. package/dist/file-hash-sha256-bun.adapter.d.ts +10 -0
  6. package/dist/file-hash-sha256-bun.adapter.d.ts.map +1 -0
  7. package/dist/file-hash-sha256-bun.adapter.js +15 -0
  8. package/dist/file-hash-sha256-bun.adapter.js.map +1 -0
  9. package/dist/file-hash.port.d.ts +10 -0
  10. package/dist/file-hash.port.d.ts.map +1 -0
  11. package/dist/file-hash.port.js +2 -0
  12. package/dist/file-hash.port.js.map +1 -0
  13. package/dist/image-alpha-noop.adapter.d.ts +1 -1
  14. package/dist/image-alpha-sharp.adapter.d.ts +1 -1
  15. package/dist/image-blur-noop.adapter.d.ts +1 -1
  16. package/dist/image-blur-sharp.adapter.d.ts +1 -1
  17. package/dist/image-compressor-noop.adapter.d.ts +1 -1
  18. package/dist/image-compressor-sharp.adapter.d.ts +1 -1
  19. package/dist/image-exif-clear-noop.adapter.d.ts +1 -1
  20. package/dist/image-exif-clear-sharp.adapter.d.ts +1 -1
  21. package/dist/image-formatter-sharp.adapter.d.ts +1 -1
  22. package/dist/image-info.port.d.ts +1 -2
  23. package/dist/image-info.port.d.ts.map +1 -1
  24. package/dist/image-resizer-noop.adapter.d.ts +1 -1
  25. package/dist/image-resizer-sharp.adapter.d.ts +1 -1
  26. package/dist/index.d.ts +6 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +6 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/remote-file-storage-disk.adapter.d.ts +20 -0
  31. package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -0
  32. package/dist/remote-file-storage-disk.adapter.js +54 -0
  33. package/dist/remote-file-storage-disk.adapter.js.map +1 -0
  34. package/dist/remote-file-storage-noop.adapter.d.ts +19 -0
  35. package/dist/remote-file-storage-noop.adapter.d.ts.map +1 -0
  36. package/dist/remote-file-storage-noop.adapter.js +52 -0
  37. package/dist/remote-file-storage-noop.adapter.js.map +1 -0
  38. package/dist/remote-file-storage.port.d.ts +20 -0
  39. package/dist/remote-file-storage.port.d.ts.map +1 -0
  40. package/dist/remote-file-storage.port.js +2 -0
  41. package/dist/remote-file-storage.port.js.map +1 -0
  42. package/dist/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +2 -2
  44. package/readme.md +6 -0
  45. package/src/file-hash-noop.adapter.ts +8 -0
  46. package/src/file-hash-sha256-bun.adapter.ts +18 -0
  47. package/src/file-hash.port.ts +7 -0
  48. package/src/image-info.port.ts +6 -1
  49. package/src/index.ts +6 -0
  50. package/src/remote-file-storage-disk.adapter.ts +74 -0
  51. package/src/remote-file-storage-noop.adapter.ts +69 -0
  52. package/src/remote-file-storage.port.ts +19 -0
@@ -0,0 +1,10 @@
1
+ import * as tools from "@bgord/tools";
2
+ import type { FileHashPort } from "./file-hash.port";
3
+ export declare class FileHashNoopAdapter implements FileHashPort {
4
+ hash(_path: tools.FilePathAbsolute | tools.FilePathRelative): Promise<{
5
+ etag: string;
6
+ size: tools.Size;
7
+ lastModified: number & import("zod/v4").$brand<"Timestamp">;
8
+ }>;
9
+ }
10
+ //# sourceMappingURL=file-hash-noop.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-hash-noop.adapter.d.ts","sourceRoot":"","sources":["../src/file-hash-noop.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,mBAAoB,YAAW,YAAY;IAChD,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;;;;;CAGlE"}
@@ -0,0 +1,7 @@
1
+ import * as tools from "@bgord/tools";
2
+ export class FileHashNoopAdapter {
3
+ async hash(_path) {
4
+ return { etag: "noop", size: tools.Size.fromBytes(0), lastModified: tools.Timestamp.parse(1000) };
5
+ }
6
+ }
7
+ //# sourceMappingURL=file-hash-noop.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-hash-noop.adapter.js","sourceRoot":"","sources":["../src/file-hash-noop.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,MAAM,OAAO,mBAAmB;IAC9B,KAAK,CAAC,IAAI,CAAC,KAAsD;QAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACpG,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import * as tools from "@bgord/tools";
2
+ import type { FileHashPort } from "./file-hash.port";
3
+ export declare class FileHashSha256BunAdapter implements FileHashPort {
4
+ hash(path: tools.FilePathAbsolute | tools.FilePathRelative): Promise<{
5
+ etag: string;
6
+ size: tools.Size;
7
+ lastModified: number & import("zod/v4").$brand<"Timestamp">;
8
+ }>;
9
+ }
10
+ //# sourceMappingURL=file-hash-sha256-bun.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-hash-sha256-bun.adapter.d.ts","sourceRoot":"","sources":["../src/file-hash-sha256-bun.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,wBAAyB,YAAW,YAAY;IACrD,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;;;;;CAajE"}
@@ -0,0 +1,15 @@
1
+ import * as tools from "@bgord/tools";
2
+ export class FileHashSha256BunAdapter {
3
+ async hash(path) {
4
+ const file = Bun.file(path.get());
5
+ const arrayBuffer = await file.arrayBuffer();
6
+ const digest = await crypto.subtle.digest("SHA-256", arrayBuffer);
7
+ const etag = Buffer.from(digest).toString("hex");
8
+ return {
9
+ etag,
10
+ size: tools.Size.fromBytes(arrayBuffer.byteLength),
11
+ lastModified: tools.Timestamp.parse(file.lastModified),
12
+ };
13
+ }
14
+ }
15
+ //# sourceMappingURL=file-hash-sha256-bun.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-hash-sha256-bun.adapter.js","sourceRoot":"","sources":["../src/file-hash-sha256-bun.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,IAAI,CAAC,IAAqD;QAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEjD,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC;YAClD,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;SACvD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type * as tools from "@bgord/tools";
2
+ export type FileHashResult = {
3
+ etag: string;
4
+ size: tools.Size;
5
+ lastModified: tools.TimestampType;
6
+ };
7
+ export interface FileHashPort {
8
+ hash(path: tools.FilePathAbsolute | tools.FilePathRelative): Promise<FileHashResult>;
9
+ }
10
+ //# sourceMappingURL=file-hash.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-hash.port.d.ts","sourceRoot":"","sources":["../src/file-hash.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAA;CAAE,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACtF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=file-hash.port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-hash.port.js","sourceRoot":"","sources":["../src/file-hash.port.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import type { ImageAlphaPort, ImageAlphaStrategy } from "./image-alpha.port";
2
2
  export declare class ImageAlphaNoopAdapter implements ImageAlphaPort {
3
- flatten(recipe: ImageAlphaStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ flatten(recipe: ImageAlphaStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-alpha-noop.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageAlphaPort, ImageAlphaStrategy } from "./image-alpha.port";
2
2
  export declare class ImageAlphaSharpAdapter implements ImageAlphaPort {
3
- flatten(recipe: ImageAlphaStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ flatten(recipe: ImageAlphaStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-alpha-sharp.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageBlurPort, ImageBlurStrategy } from "./image-blur.port";
2
2
  export declare class ImageBlurNoopAdapter implements ImageBlurPort {
3
- blur(recipe: ImageBlurStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ blur(recipe: ImageBlurStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-blur-noop.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageBlurPort, ImageBlurStrategy } from "./image-blur.port";
2
2
  export declare class ImageBlurSharpAdapter implements ImageBlurPort {
3
- blur(recipe: ImageBlurStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ blur(recipe: ImageBlurStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-blur-sharp.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageCompressorPort, ImageCompressorStrategy } from "./image-compressor.port";
2
2
  export declare class ImageCompressorNoopAdapter implements ImageCompressorPort {
3
- compress(recipe: ImageCompressorStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ compress(recipe: ImageCompressorStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-compressor-noop.adapter.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type { ImageCompressorPort, ImageCompressorStrategy } from "./image-compressor.port";
2
2
  export declare class ImageCompressorSharpAdapter implements ImageCompressorPort {
3
3
  private static readonly DEFAULT_QUALITY;
4
- compress(recipe: ImageCompressorStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
4
+ compress(recipe: ImageCompressorStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
5
5
  }
6
6
  //# sourceMappingURL=image-compressor-sharp.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageExifClearPort, ImageExifClearStrategy } from "./image-exif-clear.port";
2
2
  export declare class ImageExifClearNoopAdapter implements ImageExifClearPort {
3
- clear(recipe: ImageExifClearStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ clear(recipe: ImageExifClearStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-exif-clear-noop.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageExifClearPort, ImageExifClearStrategy } from "./image-exif-clear.port";
2
2
  export declare class ImageExifClearSharpAdapter implements ImageExifClearPort {
3
- clear(recipe: ImageExifClearStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ clear(recipe: ImageExifClearStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-exif-clear-sharp.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageFormatterPort, ImageFormatterStrategy } from "./image-formatter.port";
2
2
  export declare class ImageFormatterSharpAdapter implements ImageFormatterPort {
3
- format(recipe: ImageFormatterStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ format(recipe: ImageFormatterStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-formatter-sharp.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type * as tools from "@bgord/tools";
2
- type ImageInfoType = {
2
+ export type ImageInfoType = {
3
3
  height: tools.HeightType;
4
4
  width: tools.WidthType;
5
5
  mime: tools.Mime;
@@ -8,5 +8,4 @@ type ImageInfoType = {
8
8
  export interface ImageInfoPort {
9
9
  inspect(filePath: tools.FilePathRelative | tools.FilePathAbsolute): Promise<ImageInfoType>;
10
10
  }
11
- export {};
12
11
  //# sourceMappingURL=image-info.port.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-info.port.d.ts","sourceRoot":"","sources":["../src/image-info.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,KAAK,aAAa,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAA;CAAE,CAAC;AAE9G,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC5F"}
1
+ {"version":3,"file":"image-info.port.d.ts","sourceRoot":"","sources":["../src/image-info.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC5F"}
@@ -1,5 +1,5 @@
1
1
  import type { ImageResizerPort, ImageResizerStrategy } from "./image-resizer.port";
2
2
  export declare class ImageResizerNoopAdapter implements ImageResizerPort {
3
- resize(recipe: ImageResizerStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ resize(recipe: ImageResizerStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-resizer-noop.adapter.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { ImageResizerPort, ImageResizerStrategy } from "./image-resizer.port";
2
2
  export declare class ImageResizerSharpAdapter implements ImageResizerPort {
3
- resize(recipe: ImageResizerStrategy): Promise<import("@bgord/tools").FilePathRelative | import("@bgord/tools").FilePathAbsolute>;
3
+ resize(recipe: ImageResizerStrategy): Promise<import("@bgord/tools").FilePathAbsolute | import("@bgord/tools").FilePathRelative>;
4
4
  }
5
5
  //# sourceMappingURL=image-resizer-sharp.adapter.d.ts.map
package/dist/index.d.ts CHANGED
@@ -29,6 +29,9 @@ export * from "./event-store-like.types";
29
29
  export * from "./event-stream.vo";
30
30
  export * from "./file-draft.service";
31
31
  export * from "./file-draft-zip.service";
32
+ export * from "./file-hash.port";
33
+ export * from "./file-hash-noop.adapter";
34
+ export * from "./file-hash-sha256-bun.adapter";
32
35
  export * from "./file-uploader.middleware";
33
36
  export * from "./graceful-shutdown.service";
34
37
  export * from "./gzip.service";
@@ -83,6 +86,9 @@ export * from "./prerequisites/index";
83
86
  export * from "./prerequisites.service";
84
87
  export * from "./rate-limit-store.port";
85
88
  export * from "./rate-limit-store-node-cache.adapter";
89
+ export * from "./remote-file-storage.port";
90
+ export * from "./remote-file-storage-disk.adapter";
91
+ export * from "./remote-file-storage-noop.adapter";
86
92
  export * from "./safe-parse-body.service";
87
93
  export * from "./setup.service";
88
94
  export * from "./shield-api-key.middleware";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mCAAmC,CAAC;AAClD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAC;AACrD,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uCAAuC,CAAC;AACtD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,6 +29,9 @@ export * from "./event-store-like.types";
29
29
  export * from "./event-stream.vo";
30
30
  export * from "./file-draft.service";
31
31
  export * from "./file-draft-zip.service";
32
+ export * from "./file-hash.port";
33
+ export * from "./file-hash-noop.adapter";
34
+ export * from "./file-hash-sha256-bun.adapter";
32
35
  export * from "./file-uploader.middleware";
33
36
  export * from "./graceful-shutdown.service";
34
37
  export * from "./gzip.service";
@@ -83,6 +86,9 @@ export * from "./prerequisites/index";
83
86
  export * from "./prerequisites.service";
84
87
  export * from "./rate-limit-store.port";
85
88
  export * from "./rate-limit-store-node-cache.adapter";
89
+ export * from "./remote-file-storage.port";
90
+ export * from "./remote-file-storage-disk.adapter";
91
+ export * from "./remote-file-storage-noop.adapter";
86
92
  export * from "./safe-parse-body.service";
87
93
  export * from "./setup.service";
88
94
  export * from "./shield-api-key.middleware";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import * as tools from "@bgord/tools";
2
+ import type { FileHashPort } from "./file-hash.port";
3
+ import type { RemoteFileStoragePort, RemoteHeadResult, RemotePutFromPathInput, RemotePutFromPathResult } from "./remote-file-storage.port";
4
+ type RemoteFileStorageDiskConfig = {
5
+ root: tools.DirectoryPathAbsoluteType;
6
+ hasher: FileHashPort;
7
+ publicBaseUrl?: string;
8
+ };
9
+ export declare class RemoteFileStorageDiskAdapter implements RemoteFileStoragePort {
10
+ private readonly config;
11
+ constructor(config: RemoteFileStorageDiskConfig);
12
+ private resolveKeyToAbsoluteFilePath;
13
+ publicUrl(key: tools.ObjectKeyType): string;
14
+ putFromPath(input: RemotePutFromPathInput): Promise<RemotePutFromPathResult>;
15
+ head(key: tools.ObjectKeyType): Promise<RemoteHeadResult>;
16
+ getStream(key: tools.ObjectKeyType): Promise<ReadableStream | null>;
17
+ delete(key: tools.ObjectKeyType): Promise<void>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=remote-file-storage-disk.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-storage-disk.adapter.d.ts","sourceRoot":"","sources":["../src/remote-file-storage-disk.adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAEpC,KAAK,2BAA2B,GAAG;IACjC,IAAI,EAAE,KAAK,CAAC,yBAAyB,CAAC;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,4BAA6B,YAAW,qBAAqB;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,2BAA2B;IAEhE,OAAO,CAAC,4BAA4B;IASpC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,MAAM;IAKrC,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAa5E,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUzD,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAUnE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAOtD"}
@@ -0,0 +1,54 @@
1
+ import fs from "node:fs/promises";
2
+ import * as tools from "@bgord/tools";
3
+ export class RemoteFileStorageDiskAdapter {
4
+ config;
5
+ constructor(config) {
6
+ this.config = config;
7
+ }
8
+ resolveKeyToAbsoluteFilePath(key) {
9
+ const parts = key.split("/");
10
+ const filename = tools.Filename.fromString(parts.pop());
11
+ const directory = tools.DirectoryPathAbsoluteSchema.parse(`${this.config.root}/${parts.join("/")}`);
12
+ return tools.FilePathAbsolute.fromPartsSafe(directory, filename);
13
+ }
14
+ publicUrl(key) {
15
+ if (!this.config.publicBaseUrl)
16
+ return `/${key}`;
17
+ return `${this.config.publicBaseUrl}/${key}`;
18
+ }
19
+ async putFromPath(input) {
20
+ const final = this.resolveKeyToAbsoluteFilePath(input.key);
21
+ const temporary = final.withFilename(final.getFilename().withSuffix("-part"));
22
+ await fs.mkdir(final.getDirectory(), { recursive: true });
23
+ const source = Bun.file(input.path.get());
24
+ await Bun.write(temporary.get(), source);
25
+ await fs.rename(temporary.get(), final.get());
26
+ return this.config.hasher.hash(final);
27
+ }
28
+ async head(key) {
29
+ const path = this.resolveKeyToAbsoluteFilePath(key);
30
+ try {
31
+ return { exists: true, ...(await this.config.hasher.hash(path)) };
32
+ }
33
+ catch {
34
+ return { exists: false };
35
+ }
36
+ }
37
+ async getStream(key) {
38
+ const path = this.resolveKeyToAbsoluteFilePath(key);
39
+ try {
40
+ return Bun.file(path.get()).stream();
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ async delete(key) {
47
+ const path = this.resolveKeyToAbsoluteFilePath(key);
48
+ try {
49
+ await fs.unlink(path.get());
50
+ }
51
+ catch (error) { }
52
+ }
53
+ }
54
+ //# sourceMappingURL=remote-file-storage-disk.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-storage-disk.adapter.js","sourceRoot":"","sources":["../src/remote-file-storage-disk.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as tools from "@bgord/tools";
2
+ import type { LoggerPort } from "./logger.port";
3
+ import type { RemoteFileStoragePort, RemoteHeadResult, RemotePutFromPathInput, RemotePutFromPathResult } from "./remote-file-storage.port";
4
+ type RemoteFileStorageNoopConfig = {
5
+ root: tools.DirectoryPathAbsoluteType;
6
+ logger: LoggerPort;
7
+ publicBaseUrl?: string;
8
+ };
9
+ export declare class RemoteFileStorageNoopAdapter implements RemoteFileStoragePort {
10
+ private readonly config;
11
+ constructor(config: RemoteFileStorageNoopConfig);
12
+ publicUrl(key: tools.ObjectKeyType): string;
13
+ putFromPath(input: RemotePutFromPathInput): Promise<RemotePutFromPathResult>;
14
+ head(key: tools.ObjectKeyType): Promise<RemoteHeadResult>;
15
+ getStream(key: tools.ObjectKeyType): Promise<ReadableStream | null>;
16
+ delete(key: tools.ObjectKeyType): Promise<void>;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=remote-file-storage-noop.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-storage-noop.adapter.d.ts","sourceRoot":"","sources":["../src/remote-file-storage-noop.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAEpC,KAAK,2BAA2B,GAAG;IACjC,IAAI,EAAE,KAAK,CAAC,yBAAyB,CAAC;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,4BAA6B,YAAW,qBAAqB;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,2BAA2B;IAEhE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,MAAM;IAKrC,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAe5E,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWzD,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAWnE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAQtD"}
@@ -0,0 +1,52 @@
1
+ import * as tools from "@bgord/tools";
2
+ export class RemoteFileStorageNoopAdapter {
3
+ config;
4
+ constructor(config) {
5
+ this.config = config;
6
+ }
7
+ publicUrl(key) {
8
+ if (!this.config.publicBaseUrl)
9
+ return `/${key}`;
10
+ return `${this.config.publicBaseUrl}/${key}`;
11
+ }
12
+ async putFromPath(input) {
13
+ this.config.logger.info({
14
+ message: "[NOOP] RemoteFileStorageNoopAdapter putFromPath",
15
+ component: "infra",
16
+ operation: "RemoteFileStorageNoopAdapter.putFromPath",
17
+ metadata: { input },
18
+ });
19
+ return {
20
+ etag: "noop",
21
+ size: tools.Size.fromBytes(0),
22
+ lastModified: tools.Timestamp.parse(Date.now()),
23
+ };
24
+ }
25
+ async head(key) {
26
+ this.config.logger.info({
27
+ message: "[NOOP] RemoteFileStorageNoopAdapter head",
28
+ component: "infra",
29
+ operation: "RemoteFileStorageNoopAdapter.head",
30
+ metadata: { key },
31
+ });
32
+ return { exists: false };
33
+ }
34
+ async getStream(key) {
35
+ this.config.logger.info({
36
+ message: "[NOOP] RemoteFileStorageNoopAdapter getStream",
37
+ component: "infra",
38
+ operation: "RemoteFileStorageNoopAdapter.getStream",
39
+ metadata: { key },
40
+ });
41
+ return null;
42
+ }
43
+ async delete(key) {
44
+ this.config.logger.info({
45
+ message: "[NOOP] RemoteFileStorageNoopAdapter delete",
46
+ component: "infra",
47
+ operation: "RemoteFileStorageNoopAdapter.delete",
48
+ metadata: { key },
49
+ });
50
+ }
51
+ }
52
+ //# sourceMappingURL=remote-file-storage-noop.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-storage-noop.adapter.js","sourceRoot":"","sources":["../src/remote-file-storage-noop.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAetC,MAAM,OAAO,4BAA4B;IACV;IAA7B,YAA6B,MAAmC;QAAnC,WAAM,GAAN,MAAM,CAA6B;IAAG,CAAC;IAEpE,SAAS,CAAC,GAAwB;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAA6B;QAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,iDAAiD;YAC1D,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,0CAA0C;YACrD,QAAQ,EAAE,EAAE,KAAK,EAAE;SACpB,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAwB;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,0CAA0C;YACnD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,mCAAmC;YAC9C,QAAQ,EAAE,EAAE,GAAG,EAAE;SAClB,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAwB;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,+CAA+C;YACxD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,wCAAwC;YACnD,QAAQ,EAAE,EAAE,GAAG,EAAE;SAClB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAwB;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,4CAA4C;YACrD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,qCAAqC;YAChD,QAAQ,EAAE,EAAE,GAAG,EAAE;SAClB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type * as tools from "@bgord/tools";
2
+ import type { FileHashResult } from "./file-hash.port";
3
+ export type RemotePutFromPathInput = {
4
+ key: tools.ObjectKeyType;
5
+ path: tools.FilePathRelative | tools.FilePathAbsolute;
6
+ };
7
+ export type RemotePutFromPathResult = FileHashResult;
8
+ export type RemoteHeadResult = {
9
+ exists: false;
10
+ } | ({
11
+ exists: true;
12
+ } & FileHashResult);
13
+ export interface RemoteFileStoragePort {
14
+ putFromPath(input: RemotePutFromPathInput): Promise<RemotePutFromPathResult>;
15
+ head(key: tools.ObjectKeyType): Promise<RemoteHeadResult>;
16
+ getStream(key: tools.ObjectKeyType): Promise<ReadableStream | null>;
17
+ delete(key: tools.ObjectKeyType): Promise<void>;
18
+ publicUrl(key: tools.ObjectKeyType): string;
19
+ }
20
+ //# sourceMappingURL=remote-file-storage.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-storage.port.d.ts","sourceRoot":"","sources":["../src/remote-file-storage.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC;IACzB,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,GAAG,CAAC;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,cAAc,CAAC,CAAC;AAEvF,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;CAC7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=remote-file-storage.port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-file-storage.port.js","sourceRoot":"","sources":["../src/remote-file-storage.port.ts"],"names":[],"mappings":""}