123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 'use strict';
- var debugMessage = require('./debug-message'),
- toRegExp = require('./to-reg-exp'),
- throwErrors = require('./throw-errors'),
- decodeSourcesWith = require('./decode-sources-with'),
- locateRootWith = require('./locate-root-with'),
- encodeSourcesWith = require('./encode-sources-with'),
- testCodec = require('./test-codec');
- var CODECS = require('../../codec');
- function process(context, opt, sourceMapOrSource) {
-
- var options = Object.assign({
- sep : '/',
- debug : false,
- fail : false,
- format: false,
- root : false,
- codecs: CODECS
- }, opt);
-
- var codecs = options.codecs
- .filter(testCodec);
-
- var inputMap = !!sourceMapOrSource && (typeof sourceMapOrSource === 'object') && sourceMapOrSource,
- inputPath = (typeof sourceMapOrSource === 'string') && sourceMapOrSource,
- inputSources = inputMap && inputMap.sources || inputPath && [inputPath];
-
- var absoluteSources,
- outputSources,
- outputRoot,
- outputMap;
- if (inputSources) {
-
- absoluteSources = inputSources
- .map(decodeSourcesWith.call(context, codecs, options.fail));
-
- throwErrors(context.resourcePath, absoluteSources);
-
- outputMap = (!inputMap || (options.format === 'remove')) ? undefined : Object.assign({}, inputMap);
-
- if (options.format) {
-
- var codec = codecs
- .filter(testNamedCodec)
- .pop();
- if (!codec) {
- throw new Error('Specified format "' + options.format + '" does not match any available codec.');
- }
-
- outputSources = absoluteSources
- .map(encodeSourcesWith.call(context, codec))
- .map(insertAbstractSources)
- .map(convertPathSep);
- outputRoot = !!options.root && locateRootWith.call(context, codec)() || undefined;
-
- throwErrors(context.resourcePath, outputSources.concat(outputRoot));
-
- if (outputMap) {
- outputMap.sources = outputSources;
- outputMap.sourceRoot = outputRoot;
- }
- }
- }
-
- var isDebug = toRegExp(options.debug).test(context.resourcePath);
- if (isDebug) {
- console.log(debugMessage(context, {
- input : inputSources,
- absolute: absoluteSources,
- output : outputSources,
- root : outputRoot
- }));
- }
-
- return inputMap ? outputMap : outputSources ? outputSources[0] : undefined;
- function testNamedCodec(value) {
- return (value.name === options.format);
- }
- function insertAbstractSources(value, i) {
- return value || inputSources[i];
- }
- function convertPathSep(value) {
- return (value instanceof Error) ? value : value.replace(/[\\\/]/g, options.sep);
- }
- }
- module.exports = process;
|