|
|
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) { |
|
|
|
|
|
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; |
|
|
} |
|
|
|