cogs
Version:
The fast file transform pipeline.
33 lines (26 loc) • 976 B
JavaScript
import npath from 'node:path';
export default async transformer => {
if (typeof transformer === 'string') transformer = { name: transformer };
else if (typeof transformer === 'function') transformer = { fn: transformer };
else transformer = { ...transformer };
if (!transformer.options) transformer.options = {};
if (transformer.fn) return transformer;
const { name } = transformer;
if (!name) throw new Error('Each transformer requires a name or fn property');
const attempts = [`cogs-transformer-${name}`, name, npath.resolve(name)];
for (const attempt of attempts) {
try {
transformer.fn = (await import(attempt)).default;
return transformer;
} catch (er) {
if (er.code !== 'ERR_MODULE_NOT_FOUND') {
throw Object.assign(er, {
message: `Failed to load '${name}'\n${er.message}`
});
}
}
}
throw new Error(
`Cannot find transformer '${name}'. Did you forget to install it?`
);
};