blob: 1690d7b30cb8f159e205f4c1e53fa673e7895113 [file] [log] [blame]
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var combineSourceMap = require("combine-source-map");
var convertSourceMap = require("convert-source-map");
var fs = require("fs");
var path = require("path");
var SourceMap = /** @class */ (function () {
function SourceMap(config, log) {
this.config = config;
this.log = log;
this.line = 0;
}
SourceMap.prototype.initialize = function (bundle) {
this.combiner = combineSourceMap.create();
this.line = this.getNumberOfNewlines(bundle);
};
SourceMap.prototype.removeSourceMapComment = function (queued) {
return queued.emitOutput.sourceMapText ?
combineSourceMap.removeComments(queued.emitOutput.outputText) :
queued.emitOutput.outputText;
};
SourceMap.prototype.getSourceMap = function (queued) {
if (queued.emitOutput.sourceMapText) {
var map = convertSourceMap.fromJSON(queued.emitOutput.sourceMapText);
if (!map.getProperty("sourcesContent")) {
map.addProperty("sourcesContent", [queued.emitOutput.sourceFile.text]);
}
return map;
}
return undefined;
};
SourceMap.prototype.addFile = function (bundleItem) {
if (this.config.bundlerOptions.sourceMap) {
this.loadFileFromComment(bundleItem);
var sourceFile = path.relative(this.config.karma.basePath, bundleItem.filename);
this.combiner.addFile({ sourceFile: path.join("/base", sourceFile), source: bundleItem.source }, { line: this.line });
}
bundleItem.source = combineSourceMap.removeComments(bundleItem.source);
};
SourceMap.prototype.offsetLineNumber = function (wrappedSource) {
if (this.config.bundlerOptions.sourceMap) {
this.line += this.getNumberOfNewlines(wrappedSource);
}
};
SourceMap.prototype.getComment = function () {
return this.config.bundlerOptions.sourceMap ? this.combiner.comment() : "";
};
SourceMap.prototype.loadFileFromComment = function (bundleItem) {
var _this = this;
var commentMatch = convertSourceMap.mapFileCommentRegex.exec(bundleItem.source);
if (commentMatch && commentMatch[1]) {
var map = void 0;
var dirname_1 = path.dirname(bundleItem.filename);
if (!commentMatch[1].startsWith("data:")) {
var mapFilename = path.join(dirname_1, commentMatch[1]);
try {
var mapJson = fs.readFileSync(mapFilename, "utf-8");
map = convertSourceMap.fromJSON(mapJson);
}
catch (error) {
this.log.debug("Source map %s doesn't exist", mapFilename);
}
}
else {
map = convertSourceMap.fromComment(commentMatch[0]);
}
if (!map) {
this.log.debug("Unable to resolve source map for %s", bundleItem.filename);
return;
}
if (!map.getProperty("sourcesContent")) {
var sourcesContent_1 = [];
map.getProperty("sources").forEach(function (source) {
var sourceFilename = path.join(dirname_1, source);
try {
var sourceContent = fs.readFileSync(sourceFilename, "utf-8");
sourcesContent_1.push(sourceContent);
}
catch (error) {
_this.log.debug("Source file %s doesn't exist", sourceFilename);
}
});
map.addProperty("sourcesContent", sourcesContent_1);
}
this.cleanupSources(map);
bundleItem.source = combineSourceMap.removeComments(bundleItem.source) + map.toComment();
}
};
SourceMap.prototype.cleanupSources = function (map) {
map.sourcemap.sources.forEach(function (source, index) {
map.sourcemap.sources[index] = source.replace("webpack:///", "");
});
};
SourceMap.prototype.getNumberOfNewlines = function (source) {
var newlines = source.match(/\n/g);
return newlines ? newlines.length : 0;
};
return SourceMap;
}());
exports.SourceMap = SourceMap;
//# sourceMappingURL=source-map.js.map