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;
 |