From 466c00689bf6e411becec2c1b6d5d3246f4aa834 Mon Sep 17 00:00:00 2001 From: eric Date: Sat, 12 Aug 2017 10:47:55 -0400 Subject: Adding source map support (#102) * Adding source map support Resolves #101 * Remove unused fs --- src/source-maps.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/source-maps.js (limited to 'src/source-maps.js') diff --git a/src/source-maps.js b/src/source-maps.js new file mode 100644 index 0000000..9e65867 --- /dev/null +++ b/src/source-maps.js @@ -0,0 +1,68 @@ +'use strict'; + +const Promise = require('bluebird'); + +const fs = require('fs'); + +const path = require('path'); + +const debug_ = require('debug'); + +const debugVerbose = debug_('purs-loader:verbose'); + +module.exports = function sourceMap(psModule, js) { + const options = psModule.options; + + const jsPath = psModule.jsPath; + + const srcPath = psModule.srcPath; + + const source = psModule.source; + + const remainingRequest = psModule.remainingRequest; + + const sourceMapPath = path.join(path.dirname(jsPath), 'index.js.map'); + + const isSourceMapsEnabled = options.pscArgs && options.pscArgs.sourceMaps; + + return new Promise((resolve, reject) => { + if (!isSourceMapsEnabled) { + resolve({ + js: js, + map: undefined + }); + } + else { + debugVerbose('loading source map %s', sourceMapPath); + + fs.readFile(sourceMapPath, 'utf-8', (error, result) => { + if (error) { + reject(error); + } + else { + try { + const map = Object.assign(JSON.parse(result), { + sources: [ + remainingRequest + ], + file: path.normalize(srcPath), + sourcesContent: [ + source + ] + }); + + const jsRemovedMapUrl = js.replace(/^\/\/# sourceMappingURL=[^\r\n]*/gm, '') + + resolve({ + js: jsRemovedMapUrl, + map: map + }); + } + catch (error) { + reject(error); + } + } + }) + } + }); +}; -- cgit v1.2.3