| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const Source = require("./Source");class CachedSource extends Source {	constructor(source) {		super();		this._source = source;		this._cachedSource = undefined;		this._cachedSize = undefined;		this._cachedMaps = {};		if(source.node) this.node = function(options) {			return this._source.node(options);		};		if(source.listMap) this.listMap = function(options) {			return this._source.listMap(options);		};	}	source() {		if(typeof this._cachedSource !== "undefined") return this._cachedSource;		return this._cachedSource = this._source.source();	}	size() {		if(typeof this._cachedSize !== "undefined") return this._cachedSize;		if(typeof this._cachedSource !== "undefined") {			if(Buffer.from.length === 1) return new Buffer(this._cachedSource).length;			return this._cachedSize = Buffer.byteLength(this._cachedSource);		}		return this._cachedSize = this._source.size();	}	sourceAndMap(options) {		const key = JSON.stringify(options);		if(typeof this._cachedSource !== "undefined" && key in this._cachedMaps)			return {				source: this._cachedSource,				map: this._cachedMaps[key]			};		else if(typeof this._cachedSource !== "undefined") {			return {				source: this._cachedSource,				map: this._cachedMaps[key] = this._source.map(options)			};		} else if(key in this._cachedMaps) {			return {				source: this._cachedSource = this._source.source(),				map: this._cachedMaps[key]			};		}		const result = this._source.sourceAndMap(options);		this._cachedSource = result.source;		this._cachedMaps[key] = result.map;		return {			source: this._cachedSource,			map: this._cachedMaps[key]		};	}	map(options) {		if(!options) options = {};		const key = JSON.stringify(options);		if(key in this._cachedMaps)			return this._cachedMaps[key];		return this._cachedMaps[key] = this._source.map();	}	updateHash(hash) {		this._source.updateHash(hash);	}}module.exports = CachedSource;
 |