imgproxy
Version:
NodeJS client library to generate imgproxy urls
125 lines (122 loc) • 3.12 kB
JavaScript
import {
BaseBuilder
} from "./chunk-JXUYAEMM.mjs";
import {
isFocusPoint,
isOffsetGravity,
isRGBColor
} from "./chunk-X7NDVT4E.mjs";
// src/builder.ts
var ImgproxyBuilder = class extends BaseBuilder {
options = {};
resize(type, width, height, enlarge) {
return this.setOption(
"rs",
[type, width, height, enlarge ? 1 : 0].join(":")
);
}
size(width, height, enlarge) {
return this.setOption("s", [width, height, enlarge ? 1 : 0].join(":"));
}
resizingType(type) {
return this.setOption("rs", type);
}
width(width) {
return this.setOption("w", `${width}`);
}
height(height) {
return this.setOption("h", `${height}`);
}
minWidth(width) {
return this.setOption("mw", `${width}`);
}
minHeight(height) {
return this.setOption("mh", `${height}`);
}
// allow for strings since javascript float precision sucks
dpr(dpr) {
if (dpr > 0) {
this.setOption("dpr", `${dpr}`);
}
return this;
}
enlarge(enlarge) {
return this.setOption("el", `${enlarge}`);
}
gravity(gravity) {
if (isFocusPoint(gravity)) {
return this.setOption("g", `fp:${gravity.x}:${gravity.y}`);
} else if (isOffsetGravity(gravity)) {
return this.setOption(
"g",
`${gravity.type}:${gravity.xOffset}:${gravity.yOffset}`
);
} else {
return this.setOption("g", gravity);
}
}
quality(quality) {
return this.setOption("q", `${quality}`);
}
background(color) {
if (isRGBColor(color)) {
return this.setOption("bg", `${color.r}:${color.g}:${color.b}`);
} else {
return this.setOption("bg", color);
}
}
blur(sigma) {
return this.setOption("bl", `${sigma}`);
}
sharpen(sigma) {
return this.setOption("sh", `${sigma}`);
}
watermark(opacity, position, offset, scale) {
return this.setOption(
"wm",
`${opacity}:${position}:${offset ? `${offset.x}:${offset.y}` : ""}:${scale}`
);
}
preset(...presets) {
return this.setOption("pr", presets.join(":"));
}
cacheBuster(buster) {
return this.setOption("cb", buster);
}
format(extension) {
return this.setOption("f", extension);
}
maxBytes(bytes) {
return this.setOption("mb", `${bytes}`);
}
expires(timestamp) {
return this.setOption("exp", `${timestamp}`);
}
crop(width, height, gravity) {
let crop = `${width}:${height}`;
if (gravity) {
if (isFocusPoint(gravity)) {
crop = `${crop}:fp:${gravity.x}:${gravity.y}`;
} else if (isOffsetGravity(gravity)) {
crop = `${crop}:${gravity.type}:${gravity.xOffset}:${gravity.yOffset}`;
} else {
crop = `${crop}:${gravity}`;
}
}
return this.setOption("c", crop);
}
setOption(option, value) {
this.options[option] = value;
return this;
}
clearOption(option) {
this.options[option] = void 0;
return this;
}
serializeOptions() {
return Object.keys(this.options).filter((option) => !!this.options[option]).map((option) => `${option}:${this.options[option]}`).join("/");
}
};
export {
ImgproxyBuilder
};