UNPKG

virool-pivot

Version:

A web-based exploratory visualization UI for Druid.io

678 lines (677 loc) 30.6 kB
"use strict"; var immutable_1 = require('immutable'); var lz_string_1 = require('lz-string'); var immutable_class_1 = require('immutable-class'); var chronoshift_1 = require('chronoshift'); var plywood_1 = require('plywood'); var general_1 = require('../../../common/utils/general/general'); var filter_1 = require('../filter/filter'); var filter_clause_1 = require('../filter-clause/filter-clause'); var highlight_1 = require('../highlight/highlight'); var splits_1 = require('../splits/splits'); var colors_1 = require('../colors/colors'); var manifest_1 = require('../manifest/manifest'); var HASH_VERSION = 2; function constrainDimensions(dimensions, dataSource) { return dimensions.filter(function (dimensionName) { return Boolean(dataSource.getDimension(dimensionName)); }); } function constrainMeasures(measures, dataSource) { return measures.filter(function (measureName) { return Boolean(dataSource.getMeasure(measureName)); }); } function addToSetInOrder(order, setToAdd, thing) { return immutable_1.OrderedSet(order.toArray().filter(function (name) { return setToAdd.has(name) || name === thing; })); } /** * FairGame - Run all visualizations pretending that there is no current * UnfairGame - Run all visualizations but mark current vis as current * KeepAlways - Just keep the current one */ (function (VisStrategy) { VisStrategy[VisStrategy["FairGame"] = 0] = "FairGame"; VisStrategy[VisStrategy["UnfairGame"] = 1] = "UnfairGame"; VisStrategy[VisStrategy["KeepAlways"] = 2] = "KeepAlways"; })(exports.VisStrategy || (exports.VisStrategy = {})); var VisStrategy = exports.VisStrategy; var check; var Essence = (function () { function Essence(parameters) { var visualizations = parameters.visualizations, dataSource = parameters.dataSource, visualization = parameters.visualization, timezone = parameters.timezone, filter = parameters.filter, splits = parameters.splits, multiMeasureMode = parameters.multiMeasureMode, singleMeasure = parameters.singleMeasure, selectedMeasures = parameters.selectedMeasures, pinnedDimensions = parameters.pinnedDimensions, colors = parameters.colors, pinnedSort = parameters.pinnedSort, compare = parameters.compare, highlight = parameters.highlight; if (!dataSource) throw new Error('Essence must have a dataSource'); timezone = timezone || chronoshift_1.Timezone.UTC; if (!filter) { if (dataSource.timeAttribute) { filter = dataSource.defaultFilter.setSelection(dataSource.timeAttribute, plywood_1.$(filter_clause_1.FilterClause.MAX_TIME_REF_NAME).timeRange(dataSource.defaultDuration, -1)); } else { filter = filter_1.Filter.EMPTY; } } multiMeasureMode = Boolean(multiMeasureMode); function visibleMeasure(measureName) { return multiMeasureMode ? selectedMeasures.has(measureName) : measureName === singleMeasure; } // Wipe out the highlight if measure is not selected if (highlight && highlight.measure && !visibleMeasure(highlight.measure)) { highlight = null; } // Place vis here because it needs to know about splits and colors (and maybe later other things) if (!visualization) { var visAndResolve = Essence.getBestVisualization(visualizations, dataSource, splits, colors, null); visualization = visAndResolve.visualization; } var visResolve = visualization.handleCircumstance(dataSource, splits, colors, true); if (visResolve.isAutomatic()) { var adjustment = visResolve.adjustment; splits = adjustment.splits; colors = adjustment.colors || null; visResolve = visualization.handleCircumstance(dataSource, splits, colors, true); if (!visResolve.isReady()) { console.log(visResolve); throw new Error(visualization.title + ' must be ready after automatic adjustment'); } } this.visualizations = visualizations; this.dataSource = dataSource; this.visualization = visualization; this.dataSource = dataSource; this.timezone = timezone; this.filter = filter; this.splits = splits; this.multiMeasureMode = multiMeasureMode; this.singleMeasure = singleMeasure; this.selectedMeasures = selectedMeasures; this.pinnedDimensions = pinnedDimensions; this.colors = colors; this.pinnedSort = pinnedSort; this.highlight = highlight; this.compare = compare; this.visResolve = visResolve; } Essence.isEssence = function (candidate) { return immutable_class_1.isInstanceOf(candidate, Essence); }; Essence.getBestVisualization = function (visualizations, dataSource, splits, colors, currentVisualization) { var visAndResolves = visualizations.toArray().map(function (visualization) { return { visualization: visualization, resolve: visualization.handleCircumstance(dataSource, splits, colors, visualization === currentVisualization) }; }); return visAndResolves.sort(function (vr1, vr2) { return manifest_1.Resolve.compare(vr1.resolve, vr2.resolve); })[0]; }; Essence.fromHash = function (hash, context) { var parts = hash.split('/'); if (parts.length < 3) return null; var visualization = parts.shift(); var version = parseInt(parts.shift(), 10); if (version > HASH_VERSION) return null; var jsArray = null; try { jsArray = JSON.parse('[' + lz_string_1.decompressFromBase64(parts.join('/')) + ']'); } catch (e) { return null; } if (!Array.isArray(jsArray)) return null; if (version === 1) { jsArray.splice(3, 0, false, null); // Insert null at position 3 (between splits and selectedMeasures) } var jsArrayLength = jsArray.length; if (!(8 <= jsArrayLength && jsArrayLength <= 11)) return null; var essence; try { essence = Essence.fromJS({ visualization: visualization, timezone: jsArray[0], filter: jsArray[1], splits: jsArray[2], multiMeasureMode: jsArray[3], singleMeasure: jsArray[4], selectedMeasures: jsArray[5], pinnedDimensions: jsArray[6], pinnedSort: jsArray[7], colors: jsArray[8] || null, compare: jsArray[9] || null, highlight: jsArray[10] || null }, context); } catch (e) { return null; } return essence; }; Essence.fromDataSource = function (dataSource, context) { var timezone = dataSource.defaultTimezone; var splits = splits_1.Splits.EMPTY; var defaultSplits = dataSource.options.defaultSplits; if (defaultSplits) { splits = splits_1.Splits.fromJS(defaultSplits, dataSource); } var essence = new Essence({ dataSource: context.dataSource, visualizations: context.visualizations, visualization: null, timezone: timezone, filter: null, splits: splits, multiMeasureMode: false, singleMeasure: dataSource.defaultSortMeasure, selectedMeasures: immutable_1.OrderedSet(dataSource.measures.toArray().slice(0, 4).map(function (m) { return m.name; })), pinnedDimensions: dataSource.defaultPinnedDimensions, colors: null, pinnedSort: dataSource.defaultSortMeasure, compare: null, highlight: null }); if (defaultSplits) { essence = essence.updateSplitsWithFilter(); } return essence; }; Essence.fromJS = function (parameters, context) { if (!context) throw new Error('must have context'); var dataSource = context.dataSource, visualizations = context.visualizations; var visualizationID = parameters.visualization; var visualization = visualizations.find(function (v) { return v.id === visualizationID; }); var timezone = parameters.timezone ? chronoshift_1.Timezone.fromJS(parameters.timezone) : null; var filter = parameters.filter ? filter_1.Filter.fromJS(parameters.filter).constrainToDimensions(dataSource.dimensions, dataSource.timeAttribute) : null; var splits = splits_1.Splits.fromJS(parameters.splits || [], dataSource).constrainToDimensions(dataSource.dimensions); var defaultSortMeasureName = dataSource.defaultSortMeasure; var multiMeasureMode = general_1.hasOwnProperty(parameters, 'multiMeasureMode') ? parameters.multiMeasureMode : !general_1.hasOwnProperty(parameters, 'singleMeasure'); var singleMeasure = dataSource.getMeasure(parameters.singleMeasure) ? parameters.singleMeasure : defaultSortMeasureName; var selectedMeasures = constrainMeasures(immutable_1.OrderedSet(parameters.selectedMeasures || []), dataSource); var pinnedDimensions = constrainDimensions(immutable_1.OrderedSet(parameters.pinnedDimensions || []), dataSource); var colors = parameters.colors ? colors_1.Colors.fromJS(parameters.colors) : null; var pinnedSort = dataSource.getMeasure(parameters.pinnedSort) ? parameters.pinnedSort : defaultSortMeasureName; var compare = null; var compareJS = parameters.compare; if (compareJS) { compare = filter_1.Filter.fromJS(compareJS).constrainToDimensions(dataSource.dimensions, dataSource.timeAttribute); } var highlight = null; var highlightJS = parameters.highlight; if (highlightJS) { highlight = highlight_1.Highlight.fromJS(highlightJS).constrainToDimensions(dataSource.dimensions, dataSource.timeAttribute); } return new Essence({ dataSource: dataSource, visualizations: visualizations, visualization: visualization, timezone: timezone, filter: filter, splits: splits, multiMeasureMode: multiMeasureMode, singleMeasure: singleMeasure, selectedMeasures: selectedMeasures, pinnedDimensions: pinnedDimensions, colors: colors, pinnedSort: pinnedSort, compare: compare, highlight: highlight }); }; Essence.prototype.valueOf = function () { return { dataSource: this.dataSource, visualizations: this.visualizations, visualization: this.visualization, timezone: this.timezone, filter: this.filter, splits: this.splits, multiMeasureMode: this.multiMeasureMode, singleMeasure: this.singleMeasure, selectedMeasures: this.selectedMeasures, pinnedDimensions: this.pinnedDimensions, colors: this.colors, pinnedSort: this.pinnedSort, compare: this.compare, highlight: this.highlight }; }; Essence.prototype.toJS = function () { var js = { visualization: this.visualization.id, timezone: this.timezone.toJS(), filter: this.filter.toJS(), splits: this.splits.toJS(), singleMeasure: this.singleMeasure, selectedMeasures: this.selectedMeasures.toArray(), pinnedDimensions: this.pinnedDimensions.toArray() }; if (this.multiMeasureMode) js.multiMeasureMode = true; if (this.colors) js.colors = this.colors.toJS(); var defaultSortMeasure = this.dataSource.defaultSortMeasure; if (this.pinnedSort !== defaultSortMeasure) js.pinnedSort = this.pinnedSort; if (this.compare) js.compare = this.compare.toJS(); if (this.highlight) js.highlight = this.highlight.toJS(); return js; }; Essence.prototype.toJSON = function () { return this.toJS(); }; Essence.prototype.toString = function () { return "[Essence]"; }; Essence.prototype.equals = function (other) { return Essence.isEssence(other) && this.dataSource.equals(other.dataSource) && this.visualization.id === other.visualization.id && this.timezone.equals(other.timezone) && this.filter.equals(other.filter) && this.splits.equals(other.splits) && this.multiMeasureMode === other.multiMeasureMode && this.singleMeasure === other.singleMeasure && this.selectedMeasures.equals(other.selectedMeasures) && this.pinnedDimensions.equals(other.pinnedDimensions) && immutable_class_1.immutableEqual(this.colors, other.colors) && this.pinnedSort === other.pinnedSort && immutable_class_1.immutableEqual(this.compare, other.compare) && immutable_class_1.immutableEqual(this.highlight, other.highlight); }; Essence.prototype.toHash = function () { var js = this.toJS(); var compressed = [ js.timezone, js.filter, js.splits, js.multiMeasureMode, js.singleMeasure, js.selectedMeasures, js.pinnedDimensions, js.pinnedSort // 7 ]; if (js.colors) compressed[8] = js.colors; if (js.compare) compressed[9] = js.compare; if (js.highlight) compressed[10] = js.highlight; var restJSON = []; for (var i = 0; i < compressed.length; i++) { restJSON.push(JSON.stringify(compressed[i] || null)); } return [ js.visualization, HASH_VERSION, lz_string_1.compressToBase64(restJSON.join(',')) ].join('/'); }; Essence.prototype.getURL = function (urlPrefix) { return urlPrefix + this.toHash(); }; Essence.prototype.getTimeAttribute = function () { return this.dataSource.timeAttribute; }; Essence.prototype.getTimeDimension = function () { return this.dataSource.getTimeDimension(); }; Essence.prototype.evaluateSelection = function (selection, now) { if (now === void 0) { now = new Date(); } var _a = this, dataSource = _a.dataSource, timezone = _a.timezone; var maxTime = dataSource.getMaxTimeDate(); return filter_clause_1.FilterClause.evaluate(selection, now, maxTime, timezone); }; Essence.prototype.getEffectiveFilter = function (highlightId, unfilterDimension) { if (highlightId === void 0) { highlightId = null; } if (unfilterDimension === void 0) { unfilterDimension = null; } var _a = this, dataSource = _a.dataSource, filter = _a.filter, highlight = _a.highlight, timezone = _a.timezone; if (highlight && (highlightId !== highlight.owner)) filter = highlight.applyToFilter(filter); if (unfilterDimension) filter = filter.remove(unfilterDimension.expression); var maxTime = dataSource.getMaxTimeDate(); return filter.getSpecificFilter(new Date(), maxTime, timezone); }; Essence.prototype.getTimeSelection = function () { var timeAttribute = this.getTimeAttribute(); return this.filter.getSelection(timeAttribute); }; Essence.prototype.isFixedMeasureMode = function () { return this.visualization.measureModeNeed !== 'any'; }; Essence.prototype.getEffectiveMultiMeasureMode = function () { var measureModeNeed = this.visualization.measureModeNeed; if (measureModeNeed !== 'any') { return measureModeNeed === 'multi'; } return this.multiMeasureMode; }; Essence.prototype.getEffectiveMeasures = function () { if (this.getEffectiveMultiMeasureMode()) { return this.getMeasures(); } else { return immutable_1.List([this.dataSource.getMeasure(this.singleMeasure)]); } }; Essence.prototype.getMeasures = function () { var dataSource = this.dataSource; return this.selectedMeasures.toList().map(function (measureName) { return dataSource.getMeasure(measureName); }); }; Essence.prototype.getEffectiveSelectedMeasure = function () { if (this.getEffectiveMultiMeasureMode()) { return this.selectedMeasures; } else { return immutable_1.OrderedSet([this.singleMeasure]); } }; Essence.prototype.differentDataSource = function (other) { return this.dataSource !== other.dataSource; }; Essence.prototype.differentTimezone = function (other) { return !this.timezone.equals(other.timezone); }; Essence.prototype.differentTimezoneMatters = function (other) { return this.splits.timezoneDependant() && this.differentTimezone(other); }; Essence.prototype.differentFilter = function (other) { return !this.filter.equals(other.filter); }; Essence.prototype.differentSplits = function (other) { return !this.splits.equals(other.splits); }; Essence.prototype.differentEffectiveSplits = function (other) { return this.differentSplits(other) || this.differentTimezoneMatters(other); }; Essence.prototype.differentColors = function (other) { if (Boolean(this.colors) !== Boolean(other.colors)) return true; if (!this.colors) return false; return !this.colors.equals(other.colors); }; Essence.prototype.differentSelectedMeasures = function (other) { return !this.selectedMeasures.equals(other.selectedMeasures); }; Essence.prototype.differentEffectiveMeasures = function (other) { return !this.getEffectiveSelectedMeasure().equals(other.getEffectiveSelectedMeasure()); }; Essence.prototype.newSelectedMeasures = function (other) { return !this.selectedMeasures.isSubset(other.selectedMeasures); }; Essence.prototype.newEffectiveMeasures = function (other) { return !this.getEffectiveSelectedMeasure().isSubset(other.getEffectiveSelectedMeasure()); }; Essence.prototype.differentPinnedDimensions = function (other) { return !this.pinnedDimensions.equals(other.pinnedDimensions); }; Essence.prototype.differentPinnedSort = function (other) { return this.pinnedSort !== other.pinnedSort; }; Essence.prototype.differentCompare = function (other) { if (Boolean(this.compare) !== Boolean(other.compare)) return true; return Boolean(this.compare && !this.compare.equals(other.compare)); }; Essence.prototype.differentHighligh = function (other) { if (Boolean(this.highlight) !== Boolean(other.highlight)) return true; return Boolean(this.highlight && !this.highlight.equals(other.highlight)); }; Essence.prototype.differentEffectiveFilter = function (other, highlightId, unfilterDimension) { if (highlightId === void 0) { highlightId = null; } if (unfilterDimension === void 0) { unfilterDimension = null; } var myEffectiveFilter = this.getEffectiveFilter(highlightId, unfilterDimension); var otherEffectiveFilter = other.getEffectiveFilter(highlightId, unfilterDimension); return !myEffectiveFilter.equals(otherEffectiveFilter); }; Essence.prototype.highlightOn = function (owner, measure) { var highlight = this.highlight; if (!highlight) return false; return highlight.owner === owner && (!measure || highlight.measure === measure); }; Essence.prototype.highlightOnDifferentMeasure = function (owner, measure) { var highlight = this.highlight; if (!highlight) return false; return highlight.owner === owner && measure && highlight.measure !== measure; }; Essence.prototype.getSingleHighlightSet = function () { var highlight = this.highlight; if (!highlight) return null; return highlight.delta.getSingleClauseSet(); }; Essence.prototype.getApplyForSort = function (sort) { var sortOn = sort.expression.name; var sortMeasure = this.dataSource.getMeasure(sortOn); if (!sortMeasure) return null; return sortMeasure.toApplyAction(); }; Essence.prototype.getCommonSort = function () { var splits = this.splits.toArray(); var commonSort = null; for (var _i = 0, splits_2 = splits; _i < splits_2.length; _i++) { var split = splits_2[_i]; var sort = split.sortAction; if (commonSort) { if (!commonSort.equals(sort)) return null; } else { commonSort = sort; } } return commonSort; }; Essence.prototype.updateDataSource = function (newDataSource) { var _a = this, dataSource = _a.dataSource, visualizations = _a.visualizations; if (dataSource.equals(newDataSource)) return this; // nothing to do if (dataSource.equalsWithoutMaxTime(newDataSource)) { var value = this.valueOf(); value.dataSource = newDataSource; return new Essence(value); } if (dataSource.name !== newDataSource.name) return Essence.fromDataSource(newDataSource, { dataSource: newDataSource, visualizations: visualizations }); var value = this.valueOf(); value.dataSource = newDataSource; // Make sure that all the elements of state are still valid value.filter = value.filter.constrainToDimensions(newDataSource.dimensions, newDataSource.timeAttribute, dataSource.timeAttribute); value.splits = value.splits.constrainToDimensions(newDataSource.dimensions); value.selectedMeasures = constrainMeasures(value.selectedMeasures, newDataSource); value.pinnedDimensions = constrainDimensions(value.pinnedDimensions, newDataSource); if (value.colors && !newDataSource.getDimension(value.colors.dimension)) { value.colors = null; } var defaultSortMeasureName = newDataSource.defaultSortMeasure; if (!newDataSource.getMeasure(value.pinnedSort)) value.pinnedSort = defaultSortMeasureName; if (value.compare) { value.compare = value.compare.constrainToDimensions(newDataSource.dimensions, newDataSource.timeAttribute); } if (value.highlight) { value.highlight = value.highlight.constrainToDimensions(newDataSource.dimensions, newDataSource.timeAttribute); } return new Essence(value); }; // Modification Essence.prototype.changeFilter = function (filter, removeHighlight) { if (removeHighlight === void 0) { removeHighlight = false; } var value = this.valueOf(); value.filter = filter; if (removeHighlight) { value.highlight = null; } var differentAttributes = filter.getDifferentAttributes(this.filter); value.splits = value.splits.removeBucketingFrom(differentAttributes); return (new Essence(value)).updateSplitsWithFilter(); }; Essence.prototype.changeTimezone = function (newTimezone) { var timezone = this.timezone; if (timezone === newTimezone) return this; var value = this.valueOf(); value.timezone = newTimezone; return new Essence(value); }; Essence.prototype.changeTimeSelection = function (check) { var filter = this.filter; var timeAttribute = this.getTimeAttribute(); return this.changeFilter(filter.setSelection(timeAttribute, check)); }; Essence.prototype.convertToSpecificFilter = function () { var _a = this, dataSource = _a.dataSource, filter = _a.filter, timezone = _a.timezone; if (!filter.isRelative()) return this; var maxTime = dataSource.getMaxTimeDate(); return this.changeFilter(filter.getSpecificFilter(new Date(), maxTime, timezone)); }; Essence.prototype.changeSplits = function (splits, strategy) { var _a = this, visualizations = _a.visualizations, dataSource = _a.dataSource, visualization = _a.visualization, visResolve = _a.visResolve, colors = _a.colors; splits = splits.updateWithFilter(this.getEffectiveFilter(), dataSource.dimensions); // If in manual mode stay there, keep the vis regardless of suggested strategy if (visResolve.isManual()) { strategy = VisStrategy.KeepAlways; } if (strategy !== VisStrategy.KeepAlways) { var visAndResolve = Essence.getBestVisualization(visualizations, dataSource, splits, colors, (strategy === VisStrategy.FairGame ? null : visualization)); visualization = visAndResolve.visualization; } var value = this.valueOf(); value.splits = splits; value.visualization = visualization; if (value.highlight) { value.filter = value.highlight.applyToFilter(value.filter); value.highlight = null; } return new Essence(value); }; Essence.prototype.changeSplit = function (splitCombine, strategy) { return this.changeSplits(splits_1.Splits.fromSplitCombine(splitCombine), strategy); }; Essence.prototype.addSplit = function (split, strategy) { var splits = this.splits; return this.changeSplits(splits.addSplit(split), strategy); }; Essence.prototype.removeSplit = function (split, strategy) { var splits = this.splits; return this.changeSplits(splits.removeSplit(split), strategy); }; Essence.prototype.updateSplitsWithFilter = function () { var value = this.valueOf(); value.splits = value.splits.updateWithFilter(this.getEffectiveFilter(), this.dataSource.dimensions); return new Essence(value); }; Essence.prototype.changeColors = function (colors) { var value = this.valueOf(); value.colors = colors; return new Essence(value); }; Essence.prototype.changeVisualization = function (visualization) { var value = this.valueOf(); value.visualization = visualization; return new Essence(value); }; Essence.prototype.pin = function (dimension) { var value = this.valueOf(); value.pinnedDimensions = value.pinnedDimensions.add(dimension.name); return new Essence(value); }; Essence.prototype.unpin = function (dimension) { var value = this.valueOf(); value.pinnedDimensions = value.pinnedDimensions.remove(dimension.name); return new Essence(value); }; Essence.prototype.getPinnedSortMeasure = function () { return this.dataSource.getMeasure(this.pinnedSort); }; Essence.prototype.changePinnedSortMeasure = function (measure) { var value = this.valueOf(); value.pinnedSort = measure.name; return new Essence(value); }; Essence.prototype.toggleMultiMeasureMode = function () { var _a = this, dataSource = _a.dataSource, multiMeasureMode = _a.multiMeasureMode, selectedMeasures = _a.selectedMeasures, singleMeasure = _a.singleMeasure; var value = this.valueOf(); value.multiMeasureMode = !multiMeasureMode; if (multiMeasureMode) { // Ensure that the singleMeasure is in the selectedMeasures if (selectedMeasures.size && !selectedMeasures.has(singleMeasure)) { value.singleMeasure = selectedMeasures.first(); } } else { value.selectedMeasures = addToSetInOrder(dataSource.measures.map(function (m) { return m.name; }), value.selectedMeasures, singleMeasure); } return new Essence(value); }; Essence.prototype.changeSingleMeasure = function (measure) { if (measure.name === this.singleMeasure) return this; var value = this.valueOf(); value.singleMeasure = measure.name; value.pinnedSort = measure.name; return new Essence(value); }; Essence.prototype.toggleSelectedMeasure = function (measure) { var dataSource = this.dataSource; var value = this.valueOf(); var selectedMeasures = value.selectedMeasures; var measureName = measure.name; if (selectedMeasures.has(measureName)) { value.selectedMeasures = selectedMeasures.delete(measureName); } else { value.selectedMeasures = addToSetInOrder(dataSource.measures.map(function (m) { return m.name; }), selectedMeasures, measureName); } return new Essence(value); }; Essence.prototype.toggleEffectiveMeasure = function (measure) { if (this.getEffectiveMultiMeasureMode()) { return this.toggleSelectedMeasure(measure); } else { return this.changeSingleMeasure(measure); } }; Essence.prototype.acceptHighlight = function () { var highlight = this.highlight; if (!highlight) return this; return this.changeFilter(highlight.applyToFilter(this.filter), true); }; Essence.prototype.changeHighlight = function (owner, measure, delta) { var highlight = this.highlight; // If there is already a highlight from someone else accept it var value; if (highlight && highlight.owner !== owner) { value = this.changeFilter(highlight.applyToFilter(this.filter)).valueOf(); } else { value = this.valueOf(); } value.highlight = new highlight_1.Highlight({ owner: owner, delta: delta, measure: measure }); return new Essence(value); }; Essence.prototype.dropHighlight = function () { var value = this.valueOf(); value.highlight = null; return new Essence(value); }; return Essence; }()); exports.Essence = Essence; check = Essence;