@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.
- package/dist/{image-blur-sharp.adapter.d.ts → image-blur.adapter.d.ts} +5 -9
- package/dist/image-blur.adapter.d.ts.map +1 -0
- package/dist/image-blur.adapter.js +19 -0
- package/dist/image-blur.adapter.js.map +1 -0
- package/dist/image-blur.port.d.ts +0 -2
- package/dist/image-blur.port.d.ts.map +1 -1
- package/dist/{image-compressor-sharp.adapter.d.ts → image-compressor.adapter.d.ts} +5 -9
- package/dist/image-compressor.adapter.d.ts.map +1 -0
- package/dist/image-compressor.adapter.js +20 -0
- package/dist/image-compressor.adapter.js.map +1 -0
- package/dist/image-exif-clear.adapter.d.ts +15 -0
- package/dist/image-exif-clear.adapter.d.ts.map +1 -0
- package/dist/image-exif-clear.adapter.js +17 -0
- package/dist/image-exif-clear.adapter.js.map +1 -0
- package/dist/{image-formatter-sharp.adapter.d.ts → image-formatter.adapter.d.ts} +5 -9
- package/dist/image-formatter.adapter.d.ts.map +1 -0
- package/dist/image-formatter.adapter.js +22 -0
- package/dist/image-formatter.adapter.js.map +1 -0
- package/dist/{image-grayscale-sharp.adapter.d.ts → image-grayscale.adapter.d.ts} +5 -9
- package/dist/image-grayscale.adapter.d.ts.map +1 -0
- package/dist/image-grayscale.adapter.js +22 -0
- package/dist/image-grayscale.adapter.js.map +1 -0
- package/dist/image-info.adapter.d.ts +12 -0
- package/dist/image-info.adapter.d.ts.map +1 -0
- package/dist/image-info.adapter.js +21 -0
- package/dist/image-info.adapter.js.map +1 -0
- package/dist/{image-processor-sharp.adapter.d.ts → image-processor.adapter.d.ts} +5 -9
- package/dist/image-processor.adapter.d.ts.map +1 -0
- package/dist/image-processor.adapter.js +28 -0
- package/dist/image-processor.adapter.js.map +1 -0
- package/dist/image-processor.port.d.ts +0 -8
- package/dist/image-processor.port.d.ts.map +1 -1
- package/dist/{image-resizer-sharp.adapter.d.ts → image-resizer.adapter.d.ts} +5 -9
- package/dist/image-resizer.adapter.d.ts.map +1 -0
- package/dist/image-resizer.adapter.js +21 -0
- package/dist/image-resizer.adapter.js.map +1 -0
- package/dist/image.types.d.ts +2 -0
- package/dist/image.types.d.ts.map +1 -0
- package/dist/image.types.js +2 -0
- package/dist/image.types.js.map +1 -0
- package/dist/index.d.ts +9 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/mailer-file.adapter.d.ts.map +1 -1
- package/dist/mailer-file.adapter.js +1 -0
- package/dist/mailer-file.adapter.js.map +1 -1
- package/dist/request-context-hono.adapter.d.ts.map +1 -1
- package/dist/request-context-hono.adapter.js +1 -0
- package/dist/request-context-hono.adapter.js.map +1 -1
- package/package.json +1 -6
- package/readme.md +9 -12
- package/src/image-blur.adapter.ts +29 -0
- package/src/image-blur.port.ts +0 -2
- package/src/image-compressor.adapter.ts +31 -0
- package/src/image-exif-clear.adapter.ts +26 -0
- package/src/image-formatter.adapter.ts +39 -0
- package/src/image-grayscale.adapter.ts +33 -0
- package/src/image-info.adapter.ts +26 -0
- package/src/image-processor.adapter.ts +46 -0
- package/src/image-processor.port.ts +0 -3
- package/src/image-resizer.adapter.ts +31 -0
- package/src/image.types.ts +1 -0
- package/src/index.ts +9 -12
- package/src/mailer-file.adapter.ts +1 -0
- package/src/request-context-hono.adapter.ts +1 -0
- package/dist/image-alpha-noop.adapter.d.ts +0 -6
- package/dist/image-alpha-noop.adapter.d.ts.map +0 -1
- package/dist/image-alpha-noop.adapter.js +0 -6
- package/dist/image-alpha-noop.adapter.js.map +0 -1
- package/dist/image-alpha-sharp.adapter.d.ts +0 -19
- package/dist/image-alpha-sharp.adapter.d.ts.map +0 -1
- package/dist/image-alpha-sharp.adapter.js +0 -96
- package/dist/image-alpha-sharp.adapter.js.map +0 -1
- package/dist/image-alpha-with-semaphore.adapter.d.ts +0 -14
- package/dist/image-alpha-with-semaphore.adapter.d.ts.map +0 -1
- package/dist/image-alpha-with-semaphore.adapter.js +0 -10
- package/dist/image-alpha-with-semaphore.adapter.js.map +0 -1
- package/dist/image-alpha.port.d.ts +0 -24
- package/dist/image-alpha.port.d.ts.map +0 -1
- package/dist/image-alpha.port.js +0 -2
- package/dist/image-alpha.port.js.map +0 -1
- package/dist/image-blur-sharp.adapter.d.ts.map +0 -1
- package/dist/image-blur-sharp.adapter.js +0 -92
- package/dist/image-blur-sharp.adapter.js.map +0 -1
- package/dist/image-compressor-sharp.adapter.d.ts.map +0 -1
- package/dist/image-compressor-sharp.adapter.js +0 -94
- package/dist/image-compressor-sharp.adapter.js.map +0 -1
- package/dist/image-exif-clear-sharp.adapter.d.ts +0 -19
- package/dist/image-exif-clear-sharp.adapter.d.ts.map +0 -1
- package/dist/image-exif-clear-sharp.adapter.js +0 -90
- package/dist/image-exif-clear-sharp.adapter.js.map +0 -1
- package/dist/image-formatter-sharp.adapter.d.ts.map +0 -1
- package/dist/image-formatter-sharp.adapter.js +0 -96
- package/dist/image-formatter-sharp.adapter.js.map +0 -1
- package/dist/image-grayscale-sharp.adapter.d.ts.map +0 -1
- package/dist/image-grayscale-sharp.adapter.js +0 -90
- package/dist/image-grayscale-sharp.adapter.js.map +0 -1
- package/dist/image-info-sharp.adapter.d.ts +0 -20
- package/dist/image-info-sharp.adapter.d.ts.map +0 -1
- package/dist/image-info-sharp.adapter.js +0 -95
- package/dist/image-info-sharp.adapter.js.map +0 -1
- package/dist/image-processor-sharp.adapter.d.ts.map +0 -1
- package/dist/image-processor-sharp.adapter.js +0 -109
- package/dist/image-processor-sharp.adapter.js.map +0 -1
- package/dist/image-resizer-sharp.adapter.d.ts.map +0 -1
- package/dist/image-resizer-sharp.adapter.js +0 -101
- package/dist/image-resizer-sharp.adapter.js.map +0 -1
- package/src/image-alpha-noop.adapter.ts +0 -8
- package/src/image-alpha-sharp.adapter.ts +0 -53
- package/src/image-alpha-with-semaphore.adapter.ts +0 -13
- package/src/image-alpha.port.ts +0 -19
- package/src/image-blur-sharp.adapter.ts +0 -48
- package/src/image-compressor-sharp.adapter.ts +0 -50
- package/src/image-exif-clear-sharp.adapter.ts +0 -45
- package/src/image-formatter-sharp.adapter.ts +0 -55
- package/src/image-grayscale-sharp.adapter.ts +0 -45
- package/src/image-info-sharp.adapter.ts +0 -49
- package/src/image-processor-sharp.adapter.ts +0 -73
- 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
|
|
11
|
-
private readonly sharp;
|
|
9
|
+
export declare class ImageBlurAdapter implements ImageBlurPort {
|
|
12
10
|
private readonly deps;
|
|
13
|
-
|
|
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
|
|
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;
|
|
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
|
|
11
|
-
private readonly sharp;
|
|
9
|
+
export declare class ImageCompressorAdapter implements ImageCompressorPort {
|
|
12
10
|
private readonly deps;
|
|
13
11
|
private static readonly DEFAULT_QUALITY;
|
|
14
|
-
|
|
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
|
|
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
|
|
13
|
-
private readonly sharp;
|
|
11
|
+
export declare class ImageFormatterAdapter implements ImageFormatterPort {
|
|
14
12
|
private readonly deps;
|
|
15
|
-
|
|
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
|
|
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
|
|
11
|
-
private readonly sharp;
|
|
9
|
+
export declare class ImageGrayscaleAdapter implements ImageGrayscalePort {
|
|
12
10
|
private readonly deps;
|
|
13
|
-
|
|
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
|
|
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
|
|
13
|
-
private readonly sharp;
|
|
11
|
+
export declare class ImageProcessorAdapter implements ImageProcessorPort {
|
|
14
12
|
private readonly deps;
|
|
15
13
|
private static readonly DEFAULT_QUALITY;
|
|
16
|
-
|
|
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
|
|
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,
|
|
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
|
|
11
|
-
private readonly sharp;
|
|
9
|
+
export declare class ImageResizerAdapter implements ImageResizerPort {
|
|
12
10
|
private readonly deps;
|
|
13
|
-
|
|
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
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
|
210
|
-
export * from "./image-
|
|
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";
|