@nuxt/image
Version:
Nuxt Image Module
58 lines (57 loc) • 1.4 kB
JavaScript
import { joinURL, hasProtocol } from "ufo";
import { createOperationsGenerator } from "../utils/index.js";
import { defineProvider } from "../utils/provider.js";
const operationsGenerator = createOperationsGenerator({
keyMap: {
fit: "func",
quality: "q",
format: "force_format"
},
valueMap: {
fit: {
cover: "crop",
contain: "fit",
fill: "cover",
inside: "bound",
outside: "boundmin"
}
}
});
export default defineProvider({
getImage: (src, {
modifiers,
baseURL,
token = "",
apiVersion = "",
cdnURL = ""
}, ctx) => {
const operations = operationsGenerator(modifiers);
const query = operations ? "?" + operations : "";
if (import.meta.dev) {
const warning = [];
if (!token && !cdnURL) {
warning.push("<token> or <cdnURL>");
}
if (warning.length > 0) {
console.warn(`[cloudimage] ${warning.join(", ")} is required to build image URL`);
return {
url: joinURL("<token>", "<baseURL>", src) + query
};
}
}
if (!cdnURL) {
cdnURL = `https://${token}.cloudimg.io/${apiVersion}`;
}
if (hasProtocol(src)) {
return {
url: joinURL(cdnURL, src) + query
};
}
if (!baseURL) {
baseURL = ctx.options.nuxt.baseURL;
}
return {
url: joinURL(cdnURL, baseURL, src) + query
};
}
});