78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
export default (SourceMapOutput, environment) => {
|
|
class SourceMapBuilder {
|
|
constructor(options) {
|
|
this.options = options;
|
|
}
|
|
|
|
toCSS(rootNode, options, imports) {
|
|
const sourceMapOutput = new SourceMapOutput(
|
|
{
|
|
contentsIgnoredCharsMap: imports.contentsIgnoredChars,
|
|
rootNode,
|
|
contentsMap: imports.contents,
|
|
sourceMapFilename: this.options.sourceMapFilename,
|
|
sourceMapURL: this.options.sourceMapURL,
|
|
outputFilename: this.options.sourceMapOutputFilename,
|
|
sourceMapBasepath: this.options.sourceMapBasepath,
|
|
sourceMapRootpath: this.options.sourceMapRootpath,
|
|
outputSourceFiles: this.options.outputSourceFiles,
|
|
sourceMapGenerator: this.options.sourceMapGenerator,
|
|
sourceMapFileInline: this.options.sourceMapFileInline
|
|
});
|
|
|
|
const css = sourceMapOutput.toCSS(options);
|
|
this.sourceMap = sourceMapOutput.sourceMap;
|
|
this.sourceMapURL = sourceMapOutput.sourceMapURL;
|
|
if (this.options.sourceMapInputFilename) {
|
|
this.sourceMapInputFilename = sourceMapOutput.normalizeFilename(this.options.sourceMapInputFilename);
|
|
}
|
|
if (this.options.sourceMapBasepath !== undefined && this.sourceMapURL !== undefined) {
|
|
this.sourceMapURL = sourceMapOutput.removeBasepath(this.sourceMapURL);
|
|
}
|
|
return css + this.getCSSAppendage();
|
|
}
|
|
|
|
getCSSAppendage() {
|
|
|
|
let sourceMapURL = this.sourceMapURL;
|
|
if (this.options.sourceMapFileInline) {
|
|
if (this.sourceMap === undefined) {
|
|
return '';
|
|
}
|
|
sourceMapURL = `data:application/json;base64,${environment.encodeBase64(this.sourceMap)}`;
|
|
}
|
|
|
|
if (sourceMapURL) {
|
|
return `/*# sourceMappingURL=${sourceMapURL} */`;
|
|
}
|
|
return '';
|
|
}
|
|
|
|
getExternalSourceMap() {
|
|
return this.sourceMap;
|
|
}
|
|
|
|
setExternalSourceMap(sourceMap) {
|
|
this.sourceMap = sourceMap;
|
|
}
|
|
|
|
isInline() {
|
|
return this.options.sourceMapFileInline;
|
|
}
|
|
|
|
getSourceMapURL() {
|
|
return this.sourceMapURL;
|
|
}
|
|
|
|
getOutputFilename() {
|
|
return this.options.sourceMapOutputFilename;
|
|
}
|
|
|
|
getInputFilename() {
|
|
return this.sourceMapInputFilename;
|
|
}
|
|
}
|
|
|
|
return SourceMapBuilder;
|
|
};
|