token-stream-transformer.js 820 Bytes
"use strict";


module.exports = {
	/**
	 * Simplifies the token stream to ease the matching with the expected token stream.
	 *
	 * * Strings are kept as-is
	 * * In arrays each value is transformed individually
	 * * Values that are empty (empty arrays or strings only containing whitespace)
	 *
	 *
	 * @param {Array} tokenStream
	 * @returns {Array.<string[]|Array>}
	 */
	simplify: function (tokenStream) {
		if (Array.isArray(tokenStream)) {
			return tokenStream
				.map(this.simplify.bind(this))
				.filter(function (value) {
					return !(Array.isArray(value) && !value.length) && !(typeof value === "string" && !value.trim().length);
				}
			);
		}
		else if (typeof tokenStream === "object") {
			return [tokenStream.type, this.simplify(tokenStream.content)];
		}
		else {
			return tokenStream;
		}
	}
};