text: 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;
  };
  