| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- class BasicEvaluatedExpression {
 
- 	constructor() {
 
- 		this.range = null;
 
- 	}
 
- 	isNull() {
 
- 		return !!this.null;
 
- 	}
 
- 	isString() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "string");
 
- 	}
 
- 	isNumber() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "number");
 
- 	}
 
- 	isBoolean() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "bool");
 
- 	}
 
- 	isRegExp() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "regExp");
 
- 	}
 
- 	isConditional() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "options");
 
- 	}
 
- 	isArray() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "items");
 
- 	}
 
- 	isConstArray() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "array");
 
- 	}
 
- 	isIdentifier() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "identifier");
 
- 	}
 
- 	isWrapped() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "prefix") || Object.prototype.hasOwnProperty.call(this, "postfix");
 
- 	}
 
- 	isTemplateString() {
 
- 		return Object.prototype.hasOwnProperty.call(this, "quasis");
 
- 	}
 
- 	isTruthy() {
 
- 		return this.truthy;
 
- 	}
 
- 	isFalsy() {
 
- 		return this.falsy;
 
- 	}
 
- 	asBool() {
 
- 		if(this.truthy) return true;
 
- 		else if(this.falsy) return false;
 
- 		else if(this.isBoolean()) return this.bool;
 
- 		else if(this.isNull()) return false;
 
- 		else if(this.isString()) return !!this.string;
 
- 		else if(this.isNumber()) return !!this.number;
 
- 		else if(this.isRegExp()) return true;
 
- 		else if(this.isArray()) return true;
 
- 		else if(this.isConstArray()) return true;
 
- 		else if(this.isWrapped()) return this.prefix && this.prefix.asBool() || this.postfix && this.postfix.asBool() ? true : undefined;
 
- 		else if(this.isTemplateString()) {
 
- 			if(this.quasis.length === 1) return this.quasis[0].asBool();
 
- 			for(let i = 0; i < this.quasis.length; i++) {
 
- 				if(this.quasis[i].asBool()) return true;
 
- 			}
 
- 			// can't tell if string will be empty without executing
 
- 		}
 
- 		return undefined;
 
- 	}
 
- 	setString(str) {
 
- 		if(str === null)
 
- 			delete this.string;
 
- 		else
 
- 			this.string = str;
 
- 		return this;
 
- 	}
 
- 	setNull() {
 
- 		this.null = true;
 
- 		return this;
 
- 	}
 
- 	setNumber(num) {
 
- 		if(num === null)
 
- 			delete this.number;
 
- 		else
 
- 			this.number = num;
 
- 		return this;
 
- 	}
 
- 	setBoolean(bool) {
 
- 		if(bool === null)
 
- 			delete this.bool;
 
- 		else
 
- 			this.bool = bool;
 
- 		return this;
 
- 	}
 
- 	setRegExp(regExp) {
 
- 		if(regExp === null)
 
- 			delete this.regExp;
 
- 		else
 
- 			this.regExp = regExp;
 
- 		return this;
 
- 	}
 
- 	setIdentifier(identifier) {
 
- 		if(identifier === null)
 
- 			delete this.identifier;
 
- 		else
 
- 			this.identifier = identifier;
 
- 		return this;
 
- 	}
 
- 	setWrapped(prefix, postfix) {
 
- 		this.prefix = prefix;
 
- 		this.postfix = postfix;
 
- 		return this;
 
- 	}
 
- 	unsetWrapped() {
 
- 		delete this.prefix;
 
- 		delete this.postfix;
 
- 		return this;
 
- 	}
 
- 	setOptions(options) {
 
- 		if(options === null)
 
- 			delete this.options;
 
- 		else
 
- 			this.options = options;
 
- 		return this;
 
- 	}
 
- 	setItems(items) {
 
- 		if(items === null)
 
- 			delete this.items;
 
- 		else
 
- 			this.items = items;
 
- 		return this;
 
- 	}
 
- 	setArray(array) {
 
- 		if(array === null)
 
- 			delete this.array;
 
- 		else
 
- 			this.array = array;
 
- 		return this;
 
- 	}
 
- 	setTemplateString(quasis) {
 
- 		if(quasis === null)
 
- 			delete this.quasis;
 
- 		else
 
- 			this.quasis = quasis;
 
- 		return this;
 
- 	}
 
- 	setTruthy() {
 
- 		this.falsy = false;
 
- 		this.truthy = true;
 
- 		return this;
 
- 	}
 
- 	setFalsy() {
 
- 		this.falsy = true;
 
- 		this.truthy = false;
 
- 		return this;
 
- 	}
 
- 	addOptions(options) {
 
- 		if(!this.options) this.options = [];
 
- 		options.forEach(item => {
 
- 			this.options.push(item);
 
- 		}, this);
 
- 		return this;
 
- 	}
 
- 	setRange(range) {
 
- 		this.range = range;
 
- 		return this;
 
- 	}
 
- }
 
- module.exports = BasicEvaluatedExpression;
 
 
  |