@bgord/bun 1.18.16 → 1.19.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 (120) hide show
  1. package/dist/{image-blur-sharp.adapter.d.ts → image-blur.adapter.d.ts} +5 -9
  2. package/dist/image-blur.adapter.d.ts.map +1 -0
  3. package/dist/image-blur.adapter.js +19 -0
  4. package/dist/image-blur.adapter.js.map +1 -0
  5. package/dist/image-blur.port.d.ts +0 -2
  6. package/dist/image-blur.port.d.ts.map +1 -1
  7. package/dist/{image-compressor-sharp.adapter.d.ts → image-compressor.adapter.d.ts} +5 -9
  8. package/dist/image-compressor.adapter.d.ts.map +1 -0
  9. package/dist/image-compressor.adapter.js +20 -0
  10. package/dist/image-compressor.adapter.js.map +1 -0
  11. package/dist/image-exif-clear.adapter.d.ts +15 -0
  12. package/dist/image-exif-clear.adapter.d.ts.map +1 -0
  13. package/dist/image-exif-clear.adapter.js +17 -0
  14. package/dist/image-exif-clear.adapter.js.map +1 -0
  15. package/dist/{image-formatter-sharp.adapter.d.ts → image-formatter.adapter.d.ts} +5 -9
  16. package/dist/image-formatter.adapter.d.ts.map +1 -0
  17. package/dist/image-formatter.adapter.js +22 -0
  18. package/dist/image-formatter.adapter.js.map +1 -0
  19. package/dist/{image-grayscale-sharp.adapter.d.ts → image-grayscale.adapter.d.ts} +5 -9
  20. package/dist/image-grayscale.adapter.d.ts.map +1 -0
  21. package/dist/image-grayscale.adapter.js +22 -0
  22. package/dist/image-grayscale.adapter.js.map +1 -0
  23. package/dist/image-info.adapter.d.ts +12 -0
  24. package/dist/image-info.adapter.d.ts.map +1 -0
  25. package/dist/image-info.adapter.js +21 -0
  26. package/dist/image-info.adapter.js.map +1 -0
  27. package/dist/{image-processor-sharp.adapter.d.ts → image-processor.adapter.d.ts} +5 -9
  28. package/dist/image-processor.adapter.d.ts.map +1 -0
  29. package/dist/image-processor.adapter.js +28 -0
  30. package/dist/image-processor.adapter.js.map +1 -0
  31. package/dist/image-processor.port.d.ts +0 -8
  32. package/dist/image-processor.port.d.ts.map +1 -1
  33. package/dist/{image-resizer-sharp.adapter.d.ts → image-resizer.adapter.d.ts} +5 -9
  34. package/dist/image-resizer.adapter.d.ts.map +1 -0
  35. package/dist/image-resizer.adapter.js +21 -0
  36. package/dist/image-resizer.adapter.js.map +1 -0
  37. package/dist/image.types.d.ts +2 -0
  38. package/dist/image.types.d.ts.map +1 -0
  39. package/dist/image.types.js +2 -0
  40. package/dist/image.types.js.map +1 -0
  41. package/dist/index.d.ts +9 -12
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +9 -12
  44. package/dist/index.js.map +1 -1
  45. package/dist/mailer-file.adapter.d.ts.map +1 -1
  46. package/dist/mailer-file.adapter.js +1 -0
  47. package/dist/mailer-file.adapter.js.map +1 -1
  48. package/dist/request-context-hono.adapter.d.ts.map +1 -1
  49. package/dist/request-context-hono.adapter.js +1 -0
  50. package/dist/request-context-hono.adapter.js.map +1 -1
  51. package/package.json +1 -6
  52. package/readme.md +9 -12
  53. package/src/image-blur.adapter.ts +29 -0
  54. package/src/image-blur.port.ts +0 -2
  55. package/src/image-compressor.adapter.ts +31 -0
  56. package/src/image-exif-clear.adapter.ts +26 -0
  57. package/src/image-formatter.adapter.ts +39 -0
  58. package/src/image-grayscale.adapter.ts +33 -0
  59. package/src/image-info.adapter.ts +26 -0
  60. package/src/image-processor.adapter.ts +46 -0
  61. package/src/image-processor.port.ts +0 -3
  62. package/src/image-resizer.adapter.ts +31 -0
  63. package/src/image.types.ts +1 -0
  64. package/src/index.ts +9 -12
  65. package/src/mailer-file.adapter.ts +1 -0
  66. package/src/request-context-hono.adapter.ts +1 -0
  67. package/dist/image-alpha-noop.adapter.d.ts +0 -6
  68. package/dist/image-alpha-noop.adapter.d.ts.map +0 -1
  69. package/dist/image-alpha-noop.adapter.js +0 -6
  70. package/dist/image-alpha-noop.adapter.js.map +0 -1
  71. package/dist/image-alpha-sharp.adapter.d.ts +0 -19
  72. package/dist/image-alpha-sharp.adapter.d.ts.map +0 -1
  73. package/dist/image-alpha-sharp.adapter.js +0 -96
  74. package/dist/image-alpha-sharp.adapter.js.map +0 -1
  75. package/dist/image-alpha-with-semaphore.adapter.d.ts +0 -14
  76. package/dist/image-alpha-with-semaphore.adapter.d.ts.map +0 -1
  77. package/dist/image-alpha-with-semaphore.adapter.js +0 -10
  78. package/dist/image-alpha-with-semaphore.adapter.js.map +0 -1
  79. package/dist/image-alpha.port.d.ts +0 -24
  80. package/dist/image-alpha.port.d.ts.map +0 -1
  81. package/dist/image-alpha.port.js +0 -2
  82. package/dist/image-alpha.port.js.map +0 -1
  83. package/dist/image-blur-sharp.adapter.d.ts.map +0 -1
  84. package/dist/image-blur-sharp.adapter.js +0 -92
  85. package/dist/image-blur-sharp.adapter.js.map +0 -1
  86. package/dist/image-compressor-sharp.adapter.d.ts.map +0 -1
  87. package/dist/image-compressor-sharp.adapter.js +0 -94
  88. package/dist/image-compressor-sharp.adapter.js.map +0 -1
  89. package/dist/image-exif-clear-sharp.adapter.d.ts +0 -19
  90. package/dist/image-exif-clear-sharp.adapter.d.ts.map +0 -1
  91. package/dist/image-exif-clear-sharp.adapter.js +0 -90
  92. package/dist/image-exif-clear-sharp.adapter.js.map +0 -1
  93. package/dist/image-formatter-sharp.adapter.d.ts.map +0 -1
  94. package/dist/image-formatter-sharp.adapter.js +0 -96
  95. package/dist/image-formatter-sharp.adapter.js.map +0 -1
  96. package/dist/image-grayscale-sharp.adapter.d.ts.map +0 -1
  97. package/dist/image-grayscale-sharp.adapter.js +0 -90
  98. package/dist/image-grayscale-sharp.adapter.js.map +0 -1
  99. package/dist/image-info-sharp.adapter.d.ts +0 -20
  100. package/dist/image-info-sharp.adapter.d.ts.map +0 -1
  101. package/dist/image-info-sharp.adapter.js +0 -95
  102. package/dist/image-info-sharp.adapter.js.map +0 -1
  103. package/dist/image-processor-sharp.adapter.d.ts.map +0 -1
  104. package/dist/image-processor-sharp.adapter.js +0 -109
  105. package/dist/image-processor-sharp.adapter.js.map +0 -1
  106. package/dist/image-resizer-sharp.adapter.d.ts.map +0 -1
  107. package/dist/image-resizer-sharp.adapter.js +0 -101
  108. package/dist/image-resizer-sharp.adapter.js.map +0 -1
  109. package/src/image-alpha-noop.adapter.ts +0 -8
  110. package/src/image-alpha-sharp.adapter.ts +0 -53
  111. package/src/image-alpha-with-semaphore.adapter.ts +0 -13
  112. package/src/image-alpha.port.ts +0 -19
  113. package/src/image-blur-sharp.adapter.ts +0 -48
  114. package/src/image-compressor-sharp.adapter.ts +0 -50
  115. package/src/image-exif-clear-sharp.adapter.ts +0 -45
  116. package/src/image-formatter-sharp.adapter.ts +0 -55
  117. package/src/image-grayscale-sharp.adapter.ts +0 -45
  118. package/src/image-info-sharp.adapter.ts +0 -49
  119. package/src/image-processor-sharp.adapter.ts +0 -73
  120. package/src/image-resizer-sharp.adapter.ts +0 -56
@@ -1,19 +1,15 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
  import type { FileRenamerPort } from "./file-renamer.port";
3
+ import type { FileWriterPort } from "./file-writer.port";
3
4
  import type { ImageBlurPort, ImageBlurStrategy } from "./image-blur.port";
4
- export declare const ImageBlurSharpAdapterError: {
5
- MissingDependency: string;
6
- };
7
5
  type Dependencies = {
8
6
  FileRenamer: FileRenamerPort;
7
+ FileWriter: FileWriterPort;
9
8
  };
10
- export declare class ImageBlurSharpAdapter implements ImageBlurPort {
11
- private readonly sharp;
9
+ export declare class ImageBlurAdapter implements ImageBlurPort {
12
10
  private readonly deps;
13
- private static readonly importer;
14
- private constructor();
15
- static build(deps: Dependencies): Promise<ImageBlurSharpAdapter>;
11
+ constructor(deps: Dependencies);
16
12
  blur(recipe: ImageBlurStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
17
13
  }
18
14
  export {};
19
- //# sourceMappingURL=image-blur-sharp.adapter.d.ts.map
15
+ //# sourceMappingURL=image-blur.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-blur.adapter.d.ts","sourceRoot":"","sources":["../src/image-blur.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAAC;AAEjF,qBAAa,gBAAiB,YAAW,aAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAgB9F;CACF"}
@@ -0,0 +1,19 @@
1
+ export class ImageBlurAdapter {
2
+ deps;
3
+ constructor(deps) {
4
+ this.deps = deps;
5
+ }
6
+ async blur(recipe) {
7
+ const final = recipe.strategy === "output_path" ? recipe.output : recipe.input;
8
+ const filename = final.getFilename();
9
+ const temporary = final.withFilename(filename.withSuffix("-blurred"));
10
+ const extension = final.getFilename().getExtension();
11
+ const format = (extension === "jpg" ? "jpeg" : extension);
12
+ const blurred = await Bun.file(recipe.input.get()).image()[format]().placeholder();
13
+ const bytes = Buffer.from(blurred.substring(blurred.indexOf(",") + 1), "base64");
14
+ await this.deps.FileWriter.write(temporary.get(), bytes);
15
+ await this.deps.FileRenamer.rename(temporary, final);
16
+ return final;
17
+ }
18
+ }
19
+ //# sourceMappingURL=image-blur.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-blur.adapter.js","sourceRoot":"","sources":["../src/image-blur.adapter.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,gBAAgB;IACE,IAAI;IAAjC,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,IAAI,CAAC,MAAyB;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAE/E,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAEtE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAEhF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACnF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEjF,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -3,12 +3,10 @@ type ImageBlurOutputPathStrategy = {
3
3
  strategy: "output_path";
4
4
  input: tools.FilePathRelative | tools.FilePathAbsolute;
5
5
  output: tools.FilePathRelative | tools.FilePathAbsolute;
6
- sigma?: number;
7
6
  };
8
7
  type ImageBlurInPlaceStrategy = {
9
8
  strategy: "in_place";
10
9
  input: tools.FilePathRelative | tools.FilePathAbsolute;
11
- sigma?: number;
12
10
  };
13
11
  export type ImageBlurStrategy = ImageBlurOutputPathStrategy | ImageBlurInPlaceStrategy;
14
12
  export interface ImageBlurPort {
@@ -1 +1 @@
1
- {"version":3,"file":"image-blur.port.d.ts","sourceRoot":"","sources":["../src/image-blur.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,MAAM,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,2BAA2B,GAAG,wBAAwB,CAAC;AAEvF,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;CAC3F"}
1
+ {"version":3,"file":"image-blur.port.d.ts","sourceRoot":"","sources":["../src/image-blur.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,MAAM,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;CACzD,CAAC;AACF,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;CACxD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,2BAA2B,GAAG,wBAAwB,CAAC;AAEvF,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;CAC3F"}
@@ -1,20 +1,16 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
  import type { FileRenamerPort } from "./file-renamer.port";
3
+ import type { FileWriterPort } from "./file-writer.port";
3
4
  import type { ImageCompressorPort, ImageCompressorStrategy } from "./image-compressor.port";
4
- export declare const ImageCompressorSharpAdapterError: {
5
- MissingDependency: string;
6
- };
7
5
  type Dependencies = {
8
6
  FileRenamer: FileRenamerPort;
7
+ FileWriter: FileWriterPort;
9
8
  };
10
- export declare class ImageCompressorSharpAdapter implements ImageCompressorPort {
11
- private readonly sharp;
9
+ export declare class ImageCompressorAdapter implements ImageCompressorPort {
12
10
  private readonly deps;
13
11
  private static readonly DEFAULT_QUALITY;
14
- private static readonly importer;
15
- private constructor();
16
- static build(deps: Dependencies): Promise<ImageCompressorSharpAdapter>;
12
+ constructor(deps: Dependencies);
17
13
  compress(recipe: ImageCompressorStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
18
14
  }
19
15
  export {};
20
- //# sourceMappingURL=image-compressor-sharp.adapter.d.ts.map
16
+ //# sourceMappingURL=image-compressor.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-compressor.adapter.d.ts","sourceRoot":"","sources":["../src/image-compressor.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE5F,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAAC;AAEjF,qBAAa,sBAAuB,YAAW,mBAAmB;IAGpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAE7C,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,QAAQ,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAgBxG;CACF"}
@@ -0,0 +1,20 @@
1
+ export class ImageCompressorAdapter {
2
+ deps;
3
+ static DEFAULT_QUALITY = 85;
4
+ constructor(deps) {
5
+ this.deps = deps;
6
+ }
7
+ async compress(recipe) {
8
+ const quality = recipe.quality ?? ImageCompressorAdapter.DEFAULT_QUALITY;
9
+ const final = recipe.strategy === "output_path" ? recipe.output : recipe.input;
10
+ const filename = final.getFilename();
11
+ const temporary = final.withFilename(filename.withSuffix("-compressed"));
12
+ const extension = final.getFilename().getExtension();
13
+ const format = (extension === "jpg" ? "jpeg" : extension);
14
+ const compressed = await Bun.file(recipe.input.get()).image().rotate(0)[format]({ quality }).bytes();
15
+ await this.deps.FileWriter.write(temporary.get(), compressed);
16
+ await this.deps.FileRenamer.rename(temporary, final);
17
+ return final;
18
+ }
19
+ }
20
+ //# sourceMappingURL=image-compressor.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-compressor.adapter.js","sourceRoot":"","sources":["../src/image-compressor.adapter.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,sBAAsB;IAGJ,IAAI;IAFzB,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IAE7C,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC,eAAe,CAAC;QAEzE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QAEzE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAEhF,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAErG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type * as tools from "@bgord/tools";
2
+ import type { FileRenamerPort } from "./file-renamer.port";
3
+ import type { FileWriterPort } from "./file-writer.port";
4
+ import type { ImageExifClearPort, ImageExifClearStrategy } from "./image-exif-clear.port";
5
+ type Dependencies = {
6
+ FileRenamer: FileRenamerPort;
7
+ FileWriter: FileWriterPort;
8
+ };
9
+ export declare class ImageExifClearAdapter implements ImageExifClearPort {
10
+ private readonly deps;
11
+ constructor(deps: Dependencies);
12
+ clear(recipe: ImageExifClearStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=image-exif-clear.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-exif-clear.adapter.d.ts","sourceRoot":"","sources":["../src/image-exif-clear.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAAC;AAEjF,qBAAa,qBAAsB,YAAW,kBAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,KAAK,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAapG;CACF"}
@@ -0,0 +1,17 @@
1
+ export class ImageExifClearAdapter {
2
+ deps;
3
+ constructor(deps) {
4
+ this.deps = deps;
5
+ }
6
+ async clear(recipe) {
7
+ const final = recipe.strategy === "output_path" ? recipe.output : recipe.input;
8
+ const temporary = final.withFilename(final.getFilename().withSuffix("-exif-cleared"));
9
+ const extension = final.getFilename().getExtension();
10
+ const format = (extension === "jpg" ? "jpeg" : extension);
11
+ const cleared = await Bun.file(recipe.input.get()).image().rotate(0)[format]().bytes();
12
+ await this.deps.FileWriter.write(temporary.get(), cleared);
13
+ await this.deps.FileRenamer.rename(temporary, final);
14
+ return final;
15
+ }
16
+ }
17
+ //# sourceMappingURL=image-exif-clear.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-exif-clear.adapter.js","sourceRoot":"","sources":["../src/image-exif-clear.adapter.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,qBAAqB;IACH,IAAI;IAAjC,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,KAAK,CAAC,MAA8B;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QAEtF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAEhF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAEvF,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,21 +1,17 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
  import type { FileCleanerPort } from "./file-cleaner.port";
3
3
  import type { FileRenamerPort } from "./file-renamer.port";
4
+ import type { FileWriterPort } from "./file-writer.port";
4
5
  import type { ImageFormatterPort, ImageFormatterStrategy } from "./image-formatter.port";
5
- export declare const ImageFormatterSharpAdapterError: {
6
- MissingDependency: string;
7
- };
8
6
  type Dependencies = {
9
7
  FileCleaner: FileCleanerPort;
10
8
  FileRenamer: FileRenamerPort;
9
+ FileWriter: FileWriterPort;
11
10
  };
12
- export declare class ImageFormatterSharpAdapter implements ImageFormatterPort {
13
- private readonly sharp;
11
+ export declare class ImageFormatterAdapter implements ImageFormatterPort {
14
12
  private readonly deps;
15
- private static readonly importer;
16
- private constructor();
17
- static build(deps: Dependencies): Promise<ImageFormatterSharpAdapter>;
13
+ constructor(deps: Dependencies);
18
14
  format(recipe: ImageFormatterStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
19
15
  }
20
16
  export {};
21
- //# sourceMappingURL=image-formatter-sharp.adapter.d.ts.map
17
+ //# sourceMappingURL=image-formatter.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-formatter.adapter.d.ts","sourceRoot":"","sources":["../src/image-formatter.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF,qBAAa,qBAAsB,YAAW,kBAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAqBrG;CACF"}
@@ -0,0 +1,22 @@
1
+ export class ImageFormatterAdapter {
2
+ deps;
3
+ constructor(deps) {
4
+ this.deps = deps;
5
+ }
6
+ async format(recipe) {
7
+ const final = recipe.strategy === "output_path"
8
+ ? recipe.output
9
+ : recipe.input.withFilename(recipe.input.getFilename().withExtension(recipe.to));
10
+ const temporary = final.withFilename(final.getFilename().withSuffix("-formatted"));
11
+ const extension = final.getFilename().getExtension();
12
+ const format = (extension === "jpg" ? "jpeg" : extension);
13
+ const bytes = await Bun.file(recipe.input.get()).image().rotate(0)[format]().bytes();
14
+ await this.deps.FileWriter.write(temporary.get(), bytes);
15
+ await this.deps.FileRenamer.rename(temporary, final);
16
+ if (recipe.strategy === "in_place" && final.get() !== recipe.input.get()) {
17
+ await this.deps.FileCleaner.delete(recipe.input.get());
18
+ }
19
+ return final;
20
+ }
21
+ }
22
+ //# sourceMappingURL=image-formatter.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-formatter.adapter.js","sourceRoot":"","sources":["../src/image-formatter.adapter.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,qBAAqB;IACH,IAAI;IAAjC,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,MAAM,CAAC,MAA8B;QACzC,MAAM,KAAK,GACT,MAAM,CAAC,QAAQ,KAAK,aAAa;YAC/B,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAErF,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAEnF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAEhF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAErF,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YACzE,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,19 +1,15 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
  import type { FileRenamerPort } from "./file-renamer.port";
3
+ import type { FileWriterPort } from "./file-writer.port";
3
4
  import type { ImageGrayscalePort, ImageGrayscaleStrategy } from "./image-grayscale.port";
4
- export declare const ImageGrayscaleSharpAdapterError: {
5
- MissingDependency: string;
6
- };
7
5
  type Dependencies = {
8
6
  FileRenamer: FileRenamerPort;
7
+ FileWriter: FileWriterPort;
9
8
  };
10
- export declare class ImageGrayscaleSharpAdapter implements ImageGrayscalePort {
11
- private readonly sharp;
9
+ export declare class ImageGrayscaleAdapter implements ImageGrayscalePort {
12
10
  private readonly deps;
13
- private static readonly importer;
14
- private constructor();
15
- static build(deps: Dependencies): Promise<ImageGrayscaleSharpAdapter>;
11
+ constructor(deps: Dependencies);
16
12
  grayscale(recipe: ImageGrayscaleStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
17
13
  }
18
14
  export {};
19
- //# sourceMappingURL=image-grayscale-sharp.adapter.d.ts.map
15
+ //# sourceMappingURL=image-grayscale.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-grayscale.adapter.d.ts","sourceRoot":"","sources":["../src/image-grayscale.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAAC;AAEjF,qBAAa,qBAAsB,YAAW,kBAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,SAAS,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAoBxG;CACF"}
@@ -0,0 +1,22 @@
1
+ export class ImageGrayscaleAdapter {
2
+ deps;
3
+ constructor(deps) {
4
+ this.deps = deps;
5
+ }
6
+ async grayscale(recipe) {
7
+ const final = recipe.strategy === "output_path" ? recipe.output : recipe.input;
8
+ const filename = final.getFilename();
9
+ const temporary = final.withFilename(filename.withSuffix("-grayscale"));
10
+ const extension = final.getFilename().getExtension();
11
+ const format = (extension === "jpg" ? "jpeg" : extension);
12
+ const grayscaled = await Bun.file(recipe.input.get())
13
+ .image()
14
+ .rotate(0)
15
+ .modulate({ saturation: 0 })[format]()
16
+ .bytes();
17
+ await this.deps.FileWriter.write(temporary.get(), grayscaled);
18
+ await this.deps.FileRenamer.rename(temporary, final);
19
+ return final;
20
+ }
21
+ }
22
+ //# sourceMappingURL=image-grayscale.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-grayscale.adapter.js","sourceRoot":"","sources":["../src/image-grayscale.adapter.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,qBAAqB;IACH,IAAI;IAAjC,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,SAAS,CAAC,MAA8B;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAE/E,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAExE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAEhF,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;aAClD,KAAK,EAAE;aACP,MAAM,CAAC,CAAC,CAAC;aACT,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAC3B,MAAM,CAAC,EAAE;aACT,KAAK,EAAE,CAAC;QAEX,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import * as tools from "@bgord/tools";
2
+ import type { ImageInfoPort, ImageInfoType } from "./image-info.port";
3
+ type Dependencies = {
4
+ MimeRegistry: tools.MimeRegistry;
5
+ };
6
+ export declare class ImageInfoAdapter implements ImageInfoPort {
7
+ private readonly deps;
8
+ constructor(deps: Dependencies);
9
+ inspect(input: tools.FilePathRelative | tools.FilePathAbsolute): Promise<ImageInfoType>;
10
+ }
11
+ export {};
12
+ //# sourceMappingURL=image-info.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-info.adapter.d.ts","sourceRoot":"","sources":["../src/image-info.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEtE,KAAK,YAAY,GAAG;IAAE,YAAY,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,CAAC;AAEzD,qBAAa,gBAAiB,YAAW,aAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAe5F;CACF"}
@@ -0,0 +1,21 @@
1
+ import * as tools from "@bgord/tools";
2
+ import * as v from "valibot";
3
+ export class ImageInfoAdapter {
4
+ deps;
5
+ constructor(deps) {
6
+ this.deps = deps;
7
+ }
8
+ async inspect(input) {
9
+ const file = Bun.file(input.get());
10
+ const size = tools.Size.fromBytes(file.size);
11
+ const metadata = await file.image().metadata();
12
+ const width = v.parse(tools.ImageWidth, metadata.width);
13
+ const height = v.parse(tools.ImageHeight, metadata.height);
14
+ const extension = v.parse(tools.Extension, metadata.format);
15
+ const mime = this.deps.MimeRegistry.fromExtension(extension);
16
+ if (!mime)
17
+ throw new Error(tools.MimeRegistryError.MimeNotFound);
18
+ return { width, height, mime, size };
19
+ }
20
+ }
21
+ //# sourceMappingURL=image-info.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-info.adapter.js","sourceRoot":"","sources":["../src/image-info.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAK7B,MAAM,OAAO,gBAAgB;IACE,IAAI;IAAjC,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,KAAsD;QAClE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;QAE/C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -1,22 +1,18 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
  import type { FileCleanerPort } from "./file-cleaner.port";
3
3
  import type { FileRenamerPort } from "./file-renamer.port";
4
+ import type { FileWriterPort } from "./file-writer.port";
4
5
  import type { ImageProcessorPort, ImageProcessorStrategy } from "./image-processor.port";
5
- export declare const ImageProcessorSharpAdapterError: {
6
- MissingDependency: string;
7
- };
8
6
  type Dependencies = {
9
7
  FileCleaner: FileCleanerPort;
10
8
  FileRenamer: FileRenamerPort;
9
+ FileWriter: FileWriterPort;
11
10
  };
12
- export declare class ImageProcessorSharpAdapter implements ImageProcessorPort {
13
- private readonly sharp;
11
+ export declare class ImageProcessorAdapter implements ImageProcessorPort {
14
12
  private readonly deps;
15
13
  private static readonly DEFAULT_QUALITY;
16
- private static readonly importer;
17
- private constructor();
18
- static build(deps: Dependencies): Promise<ImageProcessorSharpAdapter>;
14
+ constructor(deps: Dependencies);
19
15
  process(recipe: ImageProcessorStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
20
16
  }
21
17
  export {};
22
- //# sourceMappingURL=image-processor-sharp.adapter.d.ts.map
18
+ //# sourceMappingURL=image-processor.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-processor.adapter.d.ts","sourceRoot":"","sources":["../src/image-processor.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF,qBAAa,qBAAsB,YAAW,kBAAkB;IAGlD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAE7C,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,OAAO,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CA0BtG;CACF"}
@@ -0,0 +1,28 @@
1
+ export class ImageProcessorAdapter {
2
+ deps;
3
+ static DEFAULT_QUALITY = 85;
4
+ constructor(deps) {
5
+ this.deps = deps;
6
+ }
7
+ async process(recipe) {
8
+ const final = recipe.strategy === "output_path"
9
+ ? recipe.output
10
+ : recipe.input.withFilename(recipe.input.getFilename().withExtension(recipe.to));
11
+ const temporary = final.withFilename(final.getFilename().withSuffix("-processed"));
12
+ const extension = final.getFilename().getExtension();
13
+ const format = (extension === "jpg" ? "jpeg" : extension);
14
+ const quality = recipe.quality ?? ImageProcessorAdapter.DEFAULT_QUALITY;
15
+ const processed = await Bun.file(recipe.input.get())
16
+ .image()
17
+ .rotate(0)
18
+ .resize(recipe.maxSide, recipe.maxSide, { fit: "inside", withoutEnlargement: true })[format]({ quality })
19
+ .bytes();
20
+ await this.deps.FileWriter.write(temporary.get(), processed);
21
+ await this.deps.FileRenamer.rename(temporary, final);
22
+ if (recipe.strategy === "in_place" && final.get() !== recipe.input.get()) {
23
+ await this.deps.FileCleaner.delete(recipe.input.get());
24
+ }
25
+ return final;
26
+ }
27
+ }
28
+ //# sourceMappingURL=image-processor.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-processor.adapter.js","sourceRoot":"","sources":["../src/image-processor.adapter.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,qBAAqB;IAGH,IAAI;IAFzB,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IAE7C,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,MAA8B;QAC1C,MAAM,KAAK,GACT,MAAM,CAAC,QAAQ,KAAK,aAAa;YAC/B,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAErF,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,qBAAqB,CAAC,eAAe,CAAC;QAExE,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;aACjD,KAAK,EAAE;aACP,MAAM,CAAC,CAAC,CAAC;aACT,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CACnF,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;aACpB,KAAK,EAAE,CAAC;QAEX,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YACzE,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,10 +1,4 @@
1
1
  import type * as tools from "@bgord/tools";
2
- type ImageBackground = string | {
3
- r: number;
4
- g: number;
5
- b: number;
6
- alpha?: number;
7
- };
8
2
  type ImageProcessorOutputPathStrategy = {
9
3
  strategy: "output_path";
10
4
  input: tools.FilePathRelative | tools.FilePathAbsolute;
@@ -12,7 +6,6 @@ type ImageProcessorOutputPathStrategy = {
12
6
  maxSide: tools.ImageWidthType;
13
7
  to: tools.ExtensionType;
14
8
  quality?: tools.IntegerPositiveType;
15
- background?: ImageBackground;
16
9
  };
17
10
  type ImageProcessorInPlaceStrategy = {
18
11
  strategy: "in_place";
@@ -20,7 +13,6 @@ type ImageProcessorInPlaceStrategy = {
20
13
  maxSide: tools.ImageWidthType;
21
14
  to: tools.ExtensionType;
22
15
  quality?: tools.IntegerPositiveType;
23
- background?: ImageBackground;
24
16
  };
25
17
  export type ImageProcessorStrategy = ImageProcessorInPlaceStrategy | ImageProcessorOutputPathStrategy;
26
18
  export interface ImageProcessorPort {
@@ -1 +1 @@
1
- {"version":3,"file":"image-processor.port.d.ts","sourceRoot":"","sources":["../src/image-processor.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,KAAK,eAAe,GAAG,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,KAAK,gCAAgC,GAAG;IACtC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,MAAM,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACxD,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC;IAC9B,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B,CAAC;AACF,KAAK,6BAA6B,GAAG;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC;IAC9B,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,6BAA6B,GAAG,gCAAgC,CAAC;AAEtG,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;CACnG"}
1
+ {"version":3,"file":"image-processor.port.d.ts","sourceRoot":"","sources":["../src/image-processor.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,KAAK,gCAAgC,GAAG;IACtC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,MAAM,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACxD,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC;IAC9B,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC;CACrC,CAAC;AACF,KAAK,6BAA6B,GAAG;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvD,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC;IAC9B,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC;CACrC,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,6BAA6B,GAAG,gCAAgC,CAAC;AAEtG,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;CACnG"}
@@ -1,19 +1,15 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
  import type { FileRenamerPort } from "./file-renamer.port";
3
+ import type { FileWriterPort } from "./file-writer.port";
3
4
  import type { ImageResizerPort, ImageResizerStrategy } from "./image-resizer.port";
4
- export declare const ImageResizerSharpAdapterError: {
5
- MissingDependency: string;
6
- };
7
5
  type Dependencies = {
6
+ FileWriter: FileWriterPort;
8
7
  FileRenamer: FileRenamerPort;
9
8
  };
10
- export declare class ImageResizerSharpAdapter implements ImageResizerPort {
11
- private readonly sharp;
9
+ export declare class ImageResizerAdapter implements ImageResizerPort {
12
10
  private readonly deps;
13
- private static readonly importer;
14
- private constructor();
15
- static build(deps: Dependencies): Promise<ImageResizerSharpAdapter>;
11
+ constructor(deps: Dependencies);
16
12
  resize(recipe: ImageResizerStrategy): Promise<tools.FilePathRelative | tools.FilePathAbsolute>;
17
13
  }
18
14
  export {};
19
- //# sourceMappingURL=image-resizer-sharp.adapter.d.ts.map
15
+ //# sourceMappingURL=image-resizer.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-resizer.adapter.d.ts","sourceRoot":"","sources":["../src/image-resizer.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEnF,KAAK,YAAY,GAAG;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,CAAC;AAEjF,qBAAa,mBAAoB,YAAW,gBAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAkBnG;CACF"}
@@ -0,0 +1,21 @@
1
+ export class ImageResizerAdapter {
2
+ deps;
3
+ constructor(deps) {
4
+ this.deps = deps;
5
+ }
6
+ async resize(recipe) {
7
+ const final = recipe.strategy === "output_path" ? recipe.output : recipe.input;
8
+ const filename = final.getFilename();
9
+ const temporary = final.withFilename(filename.withSuffix("-resized"));
10
+ const extension = final.getFilename().getExtension();
11
+ const format = (extension === "jpg" ? "jpeg" : extension);
12
+ const resized = await Bun.file(recipe.input.get())
13
+ .image()
14
+ .resize(recipe.maxSide, recipe.maxSide, { fit: "inside", withoutEnlargement: true })[format]()
15
+ .bytes();
16
+ await this.deps.FileWriter.write(temporary.get(), resized);
17
+ await this.deps.FileRenamer.rename(temporary, final);
18
+ return final;
19
+ }
20
+ }
21
+ //# sourceMappingURL=image-resizer.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-resizer.adapter.js","sourceRoot":"","sources":["../src/image-resizer.adapter.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,mBAAmB;IACD,IAAI;IAAjC,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,MAAM,CAAC,MAA4B;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAEtE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAuB,CAAC;QAEhF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;aAC/C,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CACnF,MAAM,CAAC,EAAE;aACT,KAAK,EAAE,CAAC;QAEX,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export type ImageSupportedType = Exclude<Bun.Image.Format, "bmp" | "tiff" | "gif">;
2
+ //# sourceMappingURL=image.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.types.d.ts","sourceRoot":"","sources":["../src/image.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=image.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.types.js","sourceRoot":"","sources":["../src/image.types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -206,41 +206,38 @@ export * from "./i18n.service";
206
206
  export * from "./id-provider.port";
207
207
  export * from "./id-provider-crypto.adapter";
208
208
  export * from "./id-provider-deterministic.adapter";
209
- export * from "./image-alpha.port";
210
- export * from "./image-alpha-noop.adapter";
211
- export * from "./image-alpha-sharp.adapter";
212
- export * from "./image-alpha-with-semaphore.adapter";
209
+ export * from "./image.types";
210
+ export * from "./image-blur.adapter";
213
211
  export * from "./image-blur.port";
214
212
  export * from "./image-blur-noop.adapter";
215
- export * from "./image-blur-sharp.adapter";
216
213
  export * from "./image-blur-with-semaphore.adapter";
214
+ export * from "./image-compressor.adapter";
217
215
  export * from "./image-compressor.port";
218
216
  export * from "./image-compressor-noop.adapter";
219
- export * from "./image-compressor-sharp.adapter";
220
217
  export * from "./image-compressor-with-semaphore.adapter";
218
+ export * from "./image-exif-clear.adapter";
221
219
  export * from "./image-exif-clear.port";
222
220
  export * from "./image-exif-clear-noop.adapter";
223
- export * from "./image-exif-clear-sharp.adapter";
224
221
  export * from "./image-exif-clear-with-semaphore.adapter";
222
+ export * from "./image-formatter.adapter";
225
223
  export * from "./image-formatter.port";
226
224
  export * from "./image-formatter-noop.adapter";
227
- export * from "./image-formatter-sharp.adapter";
228
225
  export * from "./image-formatter-with-semaphore.adapter";
226
+ export * from "./image-grayscale.adapter";
229
227
  export * from "./image-grayscale.port";
230
228
  export * from "./image-grayscale-noop.adapter";
231
- export * from "./image-grayscale-sharp.adapter";
232
229
  export * from "./image-grayscale-with-semaphore.adapter";
230
+ export * from "./image-info.adapter";
233
231
  export * from "./image-info.port";
234
232
  export * from "./image-info-noop.adapter";
235
- export * from "./image-info-sharp.adapter";
236
233
  export * from "./image-info-with-semaphore.adapter";
234
+ export * from "./image-processor.adapter";
237
235
  export * from "./image-processor.port";
238
236
  export * from "./image-processor-noop.adapter";
239
- export * from "./image-processor-sharp.adapter";
240
237
  export * from "./image-processor-with-semaphore.adapter";
238
+ export * from "./image-resizer.adapter";
241
239
  export * from "./image-resizer.port";
242
240
  export * from "./image-resizer-noop.adapter";
243
- export * from "./image-resizer-sharp.adapter";
244
241
  export * from "./image-resizer-with-semaphore.adapter";
245
242
  export * from "./in-flight-requests-hono.middleware";
246
243
  export * from "./in-flight-requests-tracker.service";