/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Source = require("./Source"); const { SourceNode } = require("source-map"); const { SourceListMap } = require("source-list-map"); class RawSource extends Source { constructor(value, convertToString = false) { super(); const isBuffer = Buffer.isBuffer(value); if (!isBuffer && typeof value !== "string") { throw new TypeError("argument 'value' must be either string of Buffer"); } this._valueIsBuffer = !convertToString && isBuffer; this._value = convertToString && isBuffer ? undefined : value; this._valueAsBuffer = isBuffer ? value : undefined; } isBuffer() { return this._valueIsBuffer; } source() { if (this._value === undefined) { this._value = this._valueAsBuffer.toString("utf-8"); } return this._value; } buffer() { if (this._valueAsBuffer === undefined) { this._valueAsBuffer = Buffer.from(this._value, "utf-8"); } return this._valueAsBuffer; } map(options) { return null; } node(options) { if (this._value === undefined) { this._value = this._valueAsBuffer.toString("utf-8"); } return new SourceNode(null, null, null, this._value); } listMap(options) { if (this._value === undefined) { this._value = this._valueAsBuffer.toString("utf-8"); } return new SourceListMap(this._value); } updateHash(hash) { if (this._valueAsBuffer === undefined) { this._valueAsBuffer = Buffer.from(this._value, "utf-8"); } hash.update("RawSource"); hash.update(this._valueAsBuffer); } } module.exports = RawSource;