index.js•1.6 kB
import Jimp, {
addType,
addJimpMethods,
addConstants,
jimpEvChange,
} from "@jimp/core";
export default function configure(configuration, jimpInstance = Jimp) {
const jimpConfig = {
hasAlpha: {},
encoders: {},
decoders: {},
class: {},
constants: {},
};
function addToConfig(newConfig) {
Object.entries(newConfig).forEach(([key, value]) => {
jimpConfig[key] = {
...jimpConfig[key],
...value,
};
});
}
function addImageType(typeModule) {
const type = typeModule();
if (Array.isArray(type.mime)) {
addType(...type.mime);
} else {
Object.entries(type.mime).forEach((mimeType) => addType(...mimeType));
}
delete type.mime;
addToConfig(type);
}
function addPlugin(pluginModule) {
const plugin = pluginModule(jimpEvChange) || {};
if (!plugin.class && !plugin.constants) {
// Default to class function
addToConfig({ class: plugin });
} else {
addToConfig(plugin);
}
}
if (configuration.types) {
configuration.types.forEach(addImageType);
jimpInstance.decoders = {
...jimpInstance.decoders,
...jimpConfig.decoders,
};
jimpInstance.encoders = {
...jimpInstance.encoders,
...jimpConfig.encoders,
};
jimpInstance.hasAlpha = {
...jimpInstance.hasAlpha,
...jimpConfig.hasAlpha,
};
}
if (configuration.plugins) {
configuration.plugins.forEach(addPlugin);
}
addJimpMethods(jimpConfig.class, jimpInstance);
addConstants(jimpConfig.constants, jimpInstance);
return Jimp;
}