]> git.immae.eu Git - github/fretlink/purs-loader.git/blobdiff - lib/source-maps.js
Build v3.3.1
[github/fretlink/purs-loader.git] / lib / source-maps.js
diff --git a/lib/source-maps.js b/lib/source-maps.js
new file mode 100644 (file)
index 0000000..3ad70dd
--- /dev/null
@@ -0,0 +1,61 @@
+'use strict';
+
+var Promise = require('bluebird');
+
+var fs = require('fs');
+
+var path = require('path');
+
+var debug_ = require('debug');
+
+var debugVerbose = debug_('purs-loader:verbose');
+
+module.exports = function sourceMap(psModule, js) {
+  var options = psModule.options;
+
+  var jsPath = psModule.jsPath;
+
+  var srcPath = psModule.srcPath;
+
+  var source = psModule.source;
+
+  var remainingRequest = psModule.remainingRequest;
+
+  var sourceMapPath = path.join(path.dirname(jsPath), 'index.js.map');
+
+  var isSourceMapsEnabled = options.pscArgs && options.pscArgs.sourceMaps;
+
+  return new Promise(function (resolve, reject) {
+    if (!isSourceMapsEnabled) {
+      resolve({
+        js: js,
+        map: undefined
+      });
+    } else {
+      debugVerbose('loading source map %s', sourceMapPath);
+
+      fs.readFile(sourceMapPath, 'utf-8', function (error, result) {
+        if (error) {
+          reject(error);
+        } else {
+          try {
+            var map = Object.assign(JSON.parse(result), {
+              sources: [remainingRequest],
+              file: path.normalize(srcPath),
+              sourcesContent: [source]
+            });
+
+            var jsRemovedMapUrl = js.replace(/^\/\/# sourceMappingURL=[^\r\n]*/gm, '');
+
+            resolve({
+              js: jsRemovedMapUrl,
+              map: map
+            });
+          } catch (error) {
+            reject(error);
+          }
+        }
+      });
+    }
+  });
+};
\ No newline at end of file