Spaces:
Sleeping
Sleeping
; | |
var getFieldAsFn = require('./get-field-as-fn'), | |
CustomError = require('./get-error'); | |
/** | |
* Create an encoder for output sources using the given codec hash | |
* @throws Error Where the given codec is missing an encode function | |
* @this {object} A loader or compilation | |
* @param {{encode:function}} codec A single codec with an `encode` function | |
* @returns {function(string):string|Error|false} An encode function that takes an absolute path | |
*/ | |
function encodeSourcesWith(codec) { | |
/* jshint validthis:true */ | |
var context = this, | |
encoder = getFieldAsFn('encode')(codec); | |
if (!encoder) { | |
return new CustomError('Specified format does not support encoding (it lacks an "encoder" function)'); | |
} | |
else { | |
return function encode(absoluteSource) { | |
// call the encoder | |
var encoded; | |
try { | |
encoded = absoluteSource && encoder.call(context, absoluteSource); | |
} | |
catch (exception) { | |
return getNamedError(exception); | |
} | |
return encoded; | |
function getNamedError(details) { | |
var name = codec.name || '(unnamed)', | |
message = [ | |
'Encoding with codec: ' + name, | |
'Absolute source: ' + absoluteSource, | |
details && (details.stack ? details.stack : details) | |
] | |
.filter(Boolean) | |
.join('\n'); | |
return new Error(message); | |
} | |
}; | |
} | |
} | |
module.exports = encodeSourcesWith; | |