mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/*
 | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
						|
	Author Tobias Koppers @sokra
 | 
						|
*/
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
class StringXor {
 | 
						|
	constructor() {
 | 
						|
		this._value = undefined;
 | 
						|
		this._buffer = undefined;
 | 
						|
	}
 | 
						|
 | 
						|
	add(str) {
 | 
						|
		let buf = this._buffer;
 | 
						|
		let value;
 | 
						|
		if (buf === undefined) {
 | 
						|
			buf = this._buffer = Buffer.from(str, "latin1");
 | 
						|
			this._value = Buffer.from(buf);
 | 
						|
			return;
 | 
						|
		} else if (buf.length !== str.length) {
 | 
						|
			value = this._value;
 | 
						|
			buf = this._buffer = Buffer.from(str, "latin1");
 | 
						|
			if (value.length < buf.length) {
 | 
						|
				this._value = Buffer.allocUnsafe(buf.length);
 | 
						|
				value.copy(this._value);
 | 
						|
				this._value.fill(0, value.length);
 | 
						|
				value = this._value;
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			value = this._value;
 | 
						|
			buf.write(str, "latin1");
 | 
						|
		}
 | 
						|
		const len = buf.length;
 | 
						|
		for (let i = 0; i < len; i++) {
 | 
						|
			value[i] = value[i] ^ buf[i];
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	toString() {
 | 
						|
		return this._value === undefined ? "" : this._value.toString("latin1");
 | 
						|
	}
 | 
						|
 | 
						|
	updateHash(hash) {
 | 
						|
		if (this._value !== undefined) hash.update(this._value);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
module.exports = StringXor;
 |