UNPKG

linq4js

Version:

Linq methods for JavaScript/TypeScript to work with Arrays

927 lines (926 loc) 132 kB
"use strict"; var Linq4JS; (function (Linq4JS) { var GeneratedEntity = /** @class */ (function () { function GeneratedEntity() { } return GeneratedEntity; }()); Linq4JS.GeneratedEntity = GeneratedEntity; })(Linq4JS || (Linq4JS = {})); var Linq4JS; (function (Linq4JS) { var EvaluateCommand = /** @class */ (function () { function EvaluateCommand(command) { var identifier = []; for (var _i = 1; _i < arguments.length; _i++) { identifier[_i - 1] = arguments[_i]; } this.SplitRegex = []; this.Finder = []; this.Command = command; for (var _a = 0, identifier_1 = identifier; _a < identifier_1.length; _a++) { var id = identifier_1[_a]; var sSplitRegex = void 0; var sFinder = void 0; if (id.indexOf("{x}") !== -1) { if (id.indexOf("{x}") === id.length - 3) { sSplitRegex = "\\b" + id.replace(" {x}", "") + "\\b"; sFinder = "\\b" + id.replace(" {x}", "\\b (.*)"); } else { sSplitRegex = "\\b" + id.replace(" {x}", "\\b .*? \\b") + "\\b"; sFinder = "\\b" + id.replace(" {x} ", "\\b (.*) \\b") + "\\b"; } } else { sSplitRegex = "\\b" + id + "\\b"; sFinder = "\\b" + id + "\\b"; } this.Finder.push(new RegExp(sFinder, "i")); this.SplitRegex.push(new RegExp(sSplitRegex, "gi")); } } return EvaluateCommand; }()); Linq4JS.EvaluateCommand = EvaluateCommand; var EvaluateCommandResult = /** @class */ (function () { function EvaluateCommandResult(cmd, fn) { this.Command = cmd; this.DynamicFunction = fn; } return EvaluateCommandResult; }()); Linq4JS.EvaluateCommandResult = EvaluateCommandResult; })(Linq4JS || (Linq4JS = {})); var Linq4JS; (function (Linq4JS) { var Helper = /** @class */ (function () { function Helper() { } Helper.ConvertStringFunction = function (functionString, noAutoReturn, noBracketReplace) { if (functionString.length === 0) { throw new Error("Linq4JS: Cannot convert empty string to function"); } var varnameString = functionString .substring(0, functionString.indexOf("=>")) .split(" ").join("") .split("(").join("") .split(")").join(""); var varnames = varnameString.split(","); var func = functionString .substring(functionString.indexOf("=>") + ("=>").length); if (noBracketReplace == null || noBracketReplace === false) { func.replace("{", "").replace("}", ""); } func.split(".match(//gi)").join(""); if (noAutoReturn == null || noAutoReturn === false) { /*No return outside of quotations*/ if (func.match(/return(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)/g) == null) { func = "return " + func; } } return Function.apply(void 0, varnames.concat([func])); }; Helper.ConvertFunction = function (testFunction, noAutoReturn, noBracketReplace) { var result; if (typeof testFunction === "function") { result = testFunction; } else if (typeof testFunction === "string") { result = Linq4JS.Helper.ConvertStringFunction(testFunction, noAutoReturn, noBracketReplace); } else { throw new Error("Linq4JS: Cannot use '" + testFunction + "' as function"); } return result; }; Helper.OrderCompareFunction = function (valueSelector, a, b, invert) { var value_a = valueSelector(a); var value_b = valueSelector(b); var type_a = typeof value_a; var type_b = typeof value_b; if (type_a === "string" && type_a === type_b) { var value_a_string = value_a; value_a_string = value_a_string.toLowerCase(); var value_b_string = value_b; value_b_string = value_b_string.toLowerCase(); if (value_a_string > value_b_string) { return invert === true ? -1 : 1; } else if (value_a_string < value_b_string) { return invert === true ? 1 : -1; } else { return 0; } } else if (type_a === "number" && type_a === type_b) { var value_a_number = value_a; var value_b_number = value_b; return invert === true ? value_b_number - value_a_number : value_a_number - value_b_number; } else if (type_a === "boolean" && type_a === type_b) { var value_a_bool = value_a; var value_b_bool = value_b; if (value_a_bool === value_b_bool) { return 0; } else { if (invert === true) { return value_a_bool ? 1 : -1; } else { return value_a_bool ? -1 : 1; } } } else { if (type_a === "undefined" && type_a === type_b) { return 0; } else if (type_a === "undefined") { return invert ? 1 : -1; } else if (type_b === "undefined") { return invert ? -1 : 1; } return 0; } }; Helper.SplitCommand = function (command) { var splitIndexes = []; for (var _i = 0, _a = this.Commands; _i < _a.length; _i++) { var cmd = _a[_i]; for (var _b = 0, _c = cmd.SplitRegex; _b < _c.length; _b++) { var split = _c[_b]; while (true) { var result = split.exec(command); if (result != null) { splitIndexes.push(result.index); } else { break; } } } } var parts = []; splitIndexes = splitIndexes.Distinct().OrderBy(function (x) { return x; }); for (var i = 0; i < splitIndexes.length; i++) { if (i === splitIndexes.length - 1) { parts.push(command.substr(splitIndexes[i])); } else { parts.push(command.substr(splitIndexes[i], splitIndexes[i + 1] - splitIndexes[i])); } } return parts; }; Helper.MatchCommand = function (cmd) { for (var _i = 0, _a = this.Commands; _i < _a.length; _i++) { var command = _a[_i]; for (var _b = 0, _c = command.Finder; _b < _c.length; _b++) { var regex = _c[_b]; var result = cmd.match(regex); if (result != null) { return new Linq4JS.EvaluateCommandResult(command.Command, result[1]); } } } throw new Error("Linq4JS: No matching command was found for '" + cmd + "'"); }; Helper.NonEnumerable = function (name, value) { Object.defineProperty(Array.prototype, name, { value: value, enumerable: false }); }; Helper.CreateArrayData = function (array, value) { if (value === void 0) { value = {}; } Object.defineProperty(array, "_linq4js_", { value: value, enumerable: false }); }; Helper.Commands = [ new Linq4JS.EvaluateCommand("Clone", "clone"), new Linq4JS.EvaluateCommand("Reverse", "reverse"), new Linq4JS.EvaluateCommand("Contains", "contains {x}"), new Linq4JS.EvaluateCommand("Join", "join {x}"), new Linq4JS.EvaluateCommand("Sum", "sum {x}", "sum"), new Linq4JS.EvaluateCommand("Average", "average {x}", "average"), new Linq4JS.EvaluateCommand("Where", "where {x}"), new Linq4JS.EvaluateCommand("SelectMany", "selectmany {x}", "select many {x}", "select {x} many"), new Linq4JS.EvaluateCommand("Select", "select {x}"), new Linq4JS.EvaluateCommand("Get", "get {x}"), new Linq4JS.EvaluateCommand("ForEach", "foreach {x}", "for each {x}"), new Linq4JS.EvaluateCommand("Count", "count", "count {x}"), new Linq4JS.EvaluateCommand("All", "all {x}"), new Linq4JS.EvaluateCommand("Any", "any {x}", "any"), new Linq4JS.EvaluateCommand("TakeWhile", "take while {x}", "take {x} while", "takewhile {x}"), new Linq4JS.EvaluateCommand("Take", "take {x}"), new Linq4JS.EvaluateCommand("Skip", "skip {x}"), new Linq4JS.EvaluateCommand("Min", "min {x}", "min"), new Linq4JS.EvaluateCommand("Max", "max {x}", "max"), new Linq4JS.EvaluateCommand("GroupBy", "groupby {x}", "group by {x}"), new Linq4JS.EvaluateCommand("Distinct", "distinct {x}", "distinct"), new Linq4JS.EvaluateCommand("FindLastIndex", "findlastindex {x}", "find last index {x}", "findindex {x} last", "find index {x} last"), new Linq4JS.EvaluateCommand("FindIndex", "findfirstindex {x}", "find first index {x}", "findindex {x} first", "find index {x} first", "findindex {x}", "find index {x}"), new Linq4JS.EvaluateCommand("OrderByDescending", "orderby {x} descending", "order by {x} descending", "orderby descending {x}", "orderbydescending {x}", "order by descending {x}"), new Linq4JS.EvaluateCommand("OrderBy", "orderby {x} ascending", "order by {x} ascending", "orderbyascending {x}", "order by ascending {x}", "orderby {x}", "order by {x}"), new Linq4JS.EvaluateCommand("FirstOrDefault", "firstordefault {x}", "first or default {x}", "firstordefault", "first or default"), new Linq4JS.EvaluateCommand("LastOrDefault", "lastordefault {x}", "last or default {x}", "lastordefault", "last or default"), new Linq4JS.EvaluateCommand("SingleOrDefault", "singleordefault {x}", "single or default {x}", "singleordefault", "single or default"), new Linq4JS.EvaluateCommand("First", "first {x}", "first"), new Linq4JS.EvaluateCommand("Last", "last {x}", "last"), new Linq4JS.EvaluateCommand("Single", "single {x}", "single"), new Linq4JS.EvaluateCommand("ThenByDescending", "thenby {x} descending", "then by {x} descending", "thenbydescending {x}", "then by descending {x}"), new Linq4JS.EvaluateCommand("ThenBy", "thenby {x} ascending", "then by {x} ascending", "thenbyascending {x}", "then by ascending {x}", "thenby {x}", "then by {x}") ]; return Helper; }()); Linq4JS.Helper = Helper; })(Linq4JS || (Linq4JS = {})); var Linq4JS; (function (Linq4JS) { var OrderEntry = /** @class */ (function () { function OrderEntry(_direction, _valueSelector) { this.Direction = _direction; this.ValueSelector = _valueSelector; } return OrderEntry; }()); Linq4JS.OrderEntry = OrderEntry; var OrderDirection; (function (OrderDirection) { OrderDirection[OrderDirection["Ascending"] = 0] = "Ascending"; OrderDirection[OrderDirection["Descending"] = 1] = "Descending"; })(OrderDirection = Linq4JS.OrderDirection || (Linq4JS.OrderDirection = {})); })(Linq4JS || (Linq4JS = {})); var Linq4JS; (function (Linq4JS) { var SelectEntry = /** @class */ (function () { function SelectEntry(n, p) { this.name = n; this.property = p; } return SelectEntry; }()); Linq4JS.SelectEntry = SelectEntry; })(Linq4JS || (Linq4JS = {})); Linq4JS.Helper.NonEnumerable("Add", function (object, generateId) { if (object != null) { if (generateId === true) { var newIndex_1; var castedObject = object; var last = this.Where(function (x) { return x._GeneratedId_ != null; }).OrderBy(function (x) { return x._GeneratedId_; }).LastOrDefault(); if (last != null) { newIndex_1 = last._GeneratedId_ != null ? last._GeneratedId_ : 1; while (this.Any(function (x) { return x._GeneratedId_ === newIndex_1; })) { newIndex_1++; } castedObject._GeneratedId_ = newIndex_1; } else { castedObject._GeneratedId_ = 1; } } this.push(object); } return this; }); Linq4JS.Helper.NonEnumerable("AddRange", function (objects, generateId) { var that = this; objects.ForEach(function (x) { that.Add(x, generateId); }); return that; }); Linq4JS.Helper.NonEnumerable("Aggregate", function (method, startVal) { var result; if (startVal != null) { result = startVal; } else { result = ""; } var methodFunction = Linq4JS.Helper.ConvertFunction(method); this.ForEach(function (x) { result = methodFunction(result, x); }); return result; }); Linq4JS.Helper.NonEnumerable("All", function (filter) { return this.Count(filter) === this.Count(); }); Linq4JS.Helper.NonEnumerable("Any", function (filter) { return this.Count(filter) > 0; }); Linq4JS.Helper.NonEnumerable("Average", function (selector, filter) { var result = 0; var array = this; if (filter != null) { array = array.Where(filter); } if (selector != null) { array = array.Select(selector); } array.ForEach(function (x) { result += x; }); return result / array.Count(); }); Linq4JS.Helper.NonEnumerable("Clone", function () { var newArray = []; for (var _i = 0, _a = this; _i < _a.length; _i++) { var obj = _a[_i]; newArray.Add(obj); } return newArray; }); Linq4JS.Helper.NonEnumerable("Concat", function (array) { return this.concat(array); }); Linq4JS.Helper.NonEnumerable("Contains", function (object) { return this.Any(function (x) { return x === object; }); }); Linq4JS.Helper.NonEnumerable("Count", function (filter) { if (filter != null) { return this.Where(filter).length; } else { return this.length; } }); Linq4JS.Helper.NonEnumerable("Distinct", function (valueSelector) { var that = this; if (valueSelector != null) { var valueSelectorFunction_1 = Linq4JS.Helper.ConvertFunction(valueSelector); return this.Where(function (x, i) { return that.FindIndex(function (y) { return valueSelectorFunction_1(y) === valueSelectorFunction_1(x); }) === i; }); } else { return this.Where(function (x, i) { return that.FindIndex(function (y) { return y === x; }) === i; }); } }); Linq4JS.Helper.NonEnumerable("Evaluate", function (command) { var commandParts = Linq4JS.Helper.SplitCommand(command); var computeObject = this; for (var _i = 0, commandParts_1 = commandParts; _i < commandParts_1.length; _i++) { var cmd = commandParts_1[_i]; var cmdResult = Linq4JS.Helper.MatchCommand(cmd); computeObject = computeObject[cmdResult.Command](cmdResult.DynamicFunction); } return computeObject; }); Linq4JS.Helper.NonEnumerable("FindIndex", function (filter) { if (filter != null) { var filterFunction = Linq4JS.Helper.ConvertFunction(filter); for (var i = 0; i < this.length; i++) { var obj = this[i]; if (filterFunction(obj)) { return i; } } return -1; } else { throw new Error("Linq4JS: You must define a filter"); } }); Linq4JS.Helper.NonEnumerable("FindLastIndex", function (filter) { if (filter != null) { var filterFunction = Linq4JS.Helper.ConvertFunction(filter); for (var i = this.length - 1; i >= 0; i--) { var obj = this[i]; if (filterFunction(obj) === true) { return i; } } return -1; } else { throw new Error("Linq4JS: You must define a filter"); } }); Linq4JS.Helper.NonEnumerable("First", function (filter) { var result = this; if (filter != null) { result = this.Where(filter); } if (result.Any()) { return result.Get(0); } else { throw new Error("Linq4JS: The First Entry was not found"); } }); Linq4JS.Helper.NonEnumerable("FirstOrDefault", function (filter) { var result = this; if (filter != null) { result = this.Where(filter); } if (result.Any()) { return result.Get(0); } else { return null; } }); Linq4JS.Helper.NonEnumerable("ForEach", function (action) { var actionFunction = Linq4JS.Helper.ConvertFunction(action, true); for (var i = 0; i < this.length; i++) { var result = actionFunction(this[i], i); if (result != null && result === true) { break; } } return this; }); Linq4JS.Helper.NonEnumerable("Get", function (index) { return this[index]; }); Linq4JS.Helper.NonEnumerable("GroupBy", function (selector) { var selectorFunction = Linq4JS.Helper.ConvertFunction(selector); var newArray = []; var ordered = this.OrderBy(selectorFunction); var prev; var newSub = []; ordered.ForEach(function (x) { if (prev != null) { if (selectorFunction(prev) !== selectorFunction(x)) { newArray.Add(newSub); newSub = []; Linq4JS.Helper.CreateArrayData(newSub, {}); newSub._linq4js_.GroupValue = selectorFunction(x); } } else { Linq4JS.Helper.CreateArrayData(newSub, {}); newSub._linq4js_.GroupValue = selectorFunction(x); } newSub.Add(x); prev = x; }); if (newSub.Count() > 0) { newArray.Add(newSub); } return newArray; }); Linq4JS.Helper.NonEnumerable("Insert", function (object, index) { this.splice(index, 0, object); return this; }); Linq4JS.Helper.NonEnumerable("Intersect", function (array) { var that = this; var newArray = []; this.ForEach(function (x) { if (array.Contains(x)) { newArray.Add(x); } }); array.ForEach(function (x) { if (that.Contains(x)) { newArray.Add(x); } }); return newArray.Distinct(); }); Linq4JS.Helper.NonEnumerable("Join", function (char, selector) { var array = this; if (selector != null) { array = this.Select(selector); } return array.join(char); }); Linq4JS.Helper.NonEnumerable("Last", function (filter) { var result = this; if (filter != null) { result = this.Where(filter); } if (result.Any()) { return result.Get(result.length - 1); } else { throw new Error("Linq4JS: The Last Entry was not found"); } }); Linq4JS.Helper.NonEnumerable("LastOrDefault", function (filter) { var result = this; if (filter != null) { result = this.Where(filter); } if (result.Any()) { return result.Get(result.length - 1); } else { return null; } }); Linq4JS.Helper.NonEnumerable("Max", function (valueSelector) { if (valueSelector != null) { var valueSelectorFunction = Linq4JS.Helper.ConvertFunction(valueSelector); return this.OrderBy(valueSelectorFunction).LastOrDefault(); } else { return this.OrderBy(function (x) { return x; }).LastOrDefault(); } }); Linq4JS.Helper.NonEnumerable("Min", function (valueSelector) { if (valueSelector != null) { var valueSelectorFunction = Linq4JS.Helper.ConvertFunction(valueSelector); return this.OrderBy(valueSelectorFunction).FirstOrDefault(); } else { return this.OrderBy(function (x) { return x; }).FirstOrDefault(); } }); Linq4JS.Helper.NonEnumerable("Move", function (oldIndex, newIndex) { this.splice(newIndex, 0, this.splice(oldIndex, 1)[0]); return this; }); Linq4JS.Helper.NonEnumerable("OrderBy", function (valueSelector) { var valueSelectorFunction = Linq4JS.Helper.ConvertFunction(valueSelector); var ordered = this.Clone(); Linq4JS.Helper.CreateArrayData(ordered, {}); ordered._linq4js_.Order = new Array(new Linq4JS.OrderEntry(Linq4JS.OrderDirection.Ascending, valueSelectorFunction)); return ordered.sort(function (a, b) { return Linq4JS.Helper.OrderCompareFunction(valueSelectorFunction, a, b, false); }); }); Linq4JS.Helper.NonEnumerable("OrderByDescending", function (valueSelector) { var valueSelectorFunction = Linq4JS.Helper.ConvertFunction(valueSelector); var ordered = this.Clone(); Linq4JS.Helper.CreateArrayData(ordered, {}); ordered._linq4js_.Order = new Array(new Linq4JS.OrderEntry(Linq4JS.OrderDirection.Descending, valueSelectorFunction)); return ordered.sort(function (a, b) { return Linq4JS.Helper.OrderCompareFunction(valueSelectorFunction, a, b, true); }); }); Linq4JS.Helper.NonEnumerable("Range", function (start, length) { var newArray = []; for (var i = start; i < start + length; i++) { newArray.Add(this.Get(i)); } return newArray; }); Linq4JS.Helper.NonEnumerable("Remove", function (object, primaryKeySelector) { var targetIndex; if (object == null) { throw new Error("Linq4JS: The object cannot be null"); } var castedObject = object; if (primaryKeySelector != null) { var selector_1 = Linq4JS.Helper.ConvertFunction(primaryKeySelector); targetIndex = this.FindIndex(function (x) { return selector_1(x) === selector_1(object); }); } else if (castedObject._GeneratedId_ != null) { targetIndex = this.FindIndex(function (x) { return x._GeneratedId_ === castedObject._GeneratedId_; }); } else if (castedObject.Id != null) { targetIndex = this.FindIndex(function (x) { return x.Id === castedObject.Id; }); } else { targetIndex = this.FindIndex(function (x) { return x === object; }); } if (targetIndex !== -1) { this.splice(targetIndex, 1); } else { throw new Error("Linq4JS: Nothing found to Remove"); } return this; }); Linq4JS.Helper.NonEnumerable("RemoveRange", function (objects, primaryKeySelector) { var that = this; if (primaryKeySelector != null) { var selector_2 = Linq4JS.Helper.ConvertFunction(primaryKeySelector); objects.ForEach(function (x) { that.Remove(x, selector_2); }); } else { objects.ForEach(function (x) { that.Remove(x); }); } return that; }); Linq4JS.Helper.NonEnumerable("Repeat", function (object, count) { for (var i = 0; i < count; i++) { this.Add(object); } return this; }); Linq4JS.Helper.NonEnumerable("Reverse", function () { return this.Clone().reverse(); }); Linq4JS.Helper.NonEnumerable("Select", function (selector) { var selectorWork = selector; if (typeof selectorWork === "string") { var selectStatement = selectorWork.substr(selectorWork.indexOf("=>") + ("=>").length); if (selectStatement.match(/^\s*{.*}\s*$/) != null) { selectStatement = selectStatement.replace(/^\s*{(.*)}\s*$/, "$1"); var parts = selectStatement.split(/,(?=(?:[^'"]*['"][^'"]*['"])*[^'"]*$)/g); var newContent = ""; for (var i = 0; i < parts.length; i++) { var part = parts[i]; if (part.indexOf(":") !== -1) { newContent += part; } else if (part.indexOf("=") !== -1) { newContent += part.replace("=", ":"); } else { var values = part.split("."); var name_1 = values[values.length - 1]; newContent += name_1 + ":" + part; } if (i < parts.length - 1) { newContent += ","; } } selectorWork = selectorWork.substr(0, selectorWork.indexOf("=>")) + "=> return {" + newContent + "}"; } } var selectorFunction = Linq4JS.Helper.ConvertFunction(selectorWork, false, true); var newArray = []; if (this._linq4js_ && this._linq4js_.GroupValue) { newArray._linq4js_ = { GroupValue: this._linq4js_.GroupValue, Order: [] }; } for (var _i = 0, _a = this; _i < _a.length; _i++) { var obj = _a[_i]; newArray.Add(selectorFunction(obj)); } return newArray; }); Linq4JS.Helper.NonEnumerable("SelectMany", function (selector) { var newArray = []; var selectorFunction = Linq4JS.Helper.ConvertFunction(selector); this.ForEach(function (item) { var items = selectorFunction(item) || []; newArray.AddRange(items); }); return newArray; }); Linq4JS.Helper.NonEnumerable("SequenceEqual", function (array) { if (this === array) { return true; } if (this == null || array == null) { return false; } if (this.length !== array.length) { return false; } for (var i = 0; i < this.length; i++) { var currentObjectThis = this[i]; var currentObjectArray = array[i]; if (currentObjectThis instanceof Array && currentObjectArray instanceof Array) { if (!currentObjectThis.SequenceEqual(currentObjectArray)) { return false; } } else if (currentObjectThis instanceof Object && currentObjectArray instanceof Object) { var keys = Object.keys(currentObjectThis); for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; if (currentObjectThis[key] !== currentObjectArray[key]) { return false; } } } else { if (currentObjectThis !== currentObjectArray) { return false; } } } return true; }); Linq4JS.Helper.NonEnumerable("Single", function (filter) { var result = this; if (filter != null) { result = this.Where(filter); } if (result.Count() === 1) { return result.Get(0); } else { throw new Error("Linq4JS: The array does not contain exactly one element"); } }); Linq4JS.Helper.NonEnumerable("SingleOrDefault", function (filter) { var result = this; if (filter != null) { result = this.Where(filter); } if (result.Count() === 1) { return result.Get(0); } else { if (result.Count() > 1) { throw new Error("Linq4JS: The array contains more than one element"); } else { return null; } } }); Linq4JS.Helper.NonEnumerable("Skip", function (count) { return this.slice(count, this.Count()); }); Linq4JS.Helper.NonEnumerable("Sum", function (selector, filter) { var result = 0; var array = this; if (filter != null) { array = array.Where(filter); } if (selector != null) { array = array.Select(selector); } array.ForEach(function (x) { result += x; }); return result; }); Linq4JS.Helper.NonEnumerable("Take", function (count) { return this.slice(0, count); }); Linq4JS.Helper.NonEnumerable("TakeWhile", function (condition, initial, after) { var conditionFunction = Linq4JS.Helper.ConvertFunction(condition); var storage = {}; if (initial != null) { var initialFunction = Linq4JS.Helper.ConvertFunction(initial); initialFunction(storage); } var afterFunction = null; if (after != null) { afterFunction = Linq4JS.Helper.ConvertFunction(after); } var result = []; for (var _i = 0, _a = this; _i < _a.length; _i++) { var object = _a[_i]; if (conditionFunction(object, storage) === true) { result.Add(object); if (afterFunction != null) { afterFunction(object, storage); } } } return result; }); Linq4JS.Helper.NonEnumerable("ThenBy", function (valueSelector) { var valueSelectorFunction = Linq4JS.Helper.ConvertFunction(valueSelector); if (this._linq4js_ == null || this._linq4js_.Order == null || this._linq4js_.Order.Count() === 0) { throw new Error("Linq4JS: Please call OrderBy or OrderByDescending before ThenBy"); } var ordered = this; ordered._linq4js_.Order.Add(new Linq4JS.OrderEntry(Linq4JS.OrderDirection.Ascending, valueSelectorFunction)); return ordered.sort(function (a, b) { for (var _i = 0, _a = ordered._linq4js_.Order; _i < _a.length; _i++) { var entry = _a[_i]; var result = Linq4JS.Helper.OrderCompareFunction(entry.ValueSelector, a, b, entry.Direction === Linq4JS.OrderDirection.Descending); if (result !== 0) { return result; } } return 0; }); }); Linq4JS.Helper.NonEnumerable("ThenByDescending", function (valueSelector) { var valueSelectorFunction = Linq4JS.Helper.ConvertFunction(valueSelector); if (this._linq4js_ == null || this._linq4js_.Order == null || this._linq4js_.Order.Count() === 0) { throw new Error("Linq4JS: Please call OrderBy or OrderByDescending before ThenByDescending"); } var ordered = this; ordered._linq4js_.Order.Add(new Linq4JS.OrderEntry(Linq4JS.OrderDirection.Descending, valueSelectorFunction)); return ordered.sort(function (a, b) { for (var _i = 0, _a = ordered._linq4js_.Order; _i < _a.length; _i++) { var entry = _a[_i]; var result = Linq4JS.Helper.OrderCompareFunction(entry.ValueSelector, a, b, entry.Direction === Linq4JS.OrderDirection.Descending); if (result !== 0) { return result; } } return 0; }); }); Linq4JS.Helper.NonEnumerable("ToDictionary", function (keySelector, valueSelector) { var keySelectorFunction = Linq4JS.Helper.ConvertFunction(keySelector); var returnObject = {}; if (valueSelector != null) { var valueSelectorFunction_2 = Linq4JS.Helper.ConvertFunction(valueSelector); this.ForEach(function (x) { returnObject[keySelectorFunction(x)] = valueSelectorFunction_2(x); }); } else { this.ForEach(function (x) { returnObject[keySelectorFunction(x)] = x; }); } return returnObject; }); Linq4JS.Helper.NonEnumerable("Union", function (array) { return this.Concat(array).Distinct(); }); Linq4JS.Helper.NonEnumerable("Update", function (object, primaryKeySelector) { var targetIndex; if (object == null) { throw new Error("Linq4JS: The object cannot be null"); } var castedObject = object; if (primaryKeySelector != null) { var selector_3 = Linq4JS.Helper.ConvertFunction(primaryKeySelector); targetIndex = this.FindIndex(function (x) { return selector_3(x) === selector_3(object); }); } else if (castedObject._GeneratedId_ != null) { targetIndex = this.FindIndex(function (x) { return x._GeneratedId_ === castedObject._GeneratedId_; }); } else if (castedObject.Id != null) { targetIndex = this.FindIndex(function (x) { return x.Id === castedObject.Id; }); } else { targetIndex = this.FindIndex(function (x) { return x === object; }); } if (targetIndex !== -1) { var keys = Object.keys(object); for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) { var key = keys_2[_i]; if (key !== "Id") { this[targetIndex][key] = object[key]; } } } else { throw new Error("Linq4JS: Nothing found to Update"); } return this; }); Linq4JS.Helper.NonEnumerable("UpdateRange", function (objects, primaryKeySelector) { var that = this; if (primaryKeySelector != null) { var selector_4 = Linq4JS.Helper.ConvertFunction(primaryKeySelector); objects.ForEach(function (x) { that.Update(x, selector_4); }); } else { objects.ForEach(function (x) { that.Update(x); }); } return this; }); Linq4JS.Helper.NonEnumerable("Where", function (filter) { if (filter != null) { var filterFunction = Linq4JS.Helper.ConvertFunction(filter); var newArray = []; for (var i = 0; i < this.length; i++) { var obj = this[i]; if (filterFunction(obj, i) === true) { newArray.push(obj); } } return newArray; } else { throw new Error("Linq4JS: You must define a filter"); } }); Linq4JS.Helper.NonEnumerable("Zip", function (array, result) { var resultFunction = Linq4JS.Helper.ConvertFunction(result); var newArray = []; for (var i = 0; i < this.length; i++) { if (array[i] != null) { newArray.Add(resultFunction(this[i], array[i])); } } return newArray; }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRldi9FbnRpdHkudHMiLCJkZXYvRXZhbHVhdGVDb21tYW5kLnRzIiwiZGV2L0hlbHBlci50cyIsImRldi9PcmRlckVudHJ5LnRzIiwiZGV2L1NlbGVjdEVudHJ5LnRzIiwiZGV2L01vZHVsZXMvQWRkLnRzIiwiZGV2L01vZHVsZXMvQWRkUmFuZ2UudHMiLCJkZXYvTW9kdWxlcy9BZ2dyZWdhdGUudHMiLCJkZXYvTW9kdWxlcy9BbGwudHMiLCJkZXYvTW9kdWxlcy9BbnkudHMiLCJkZXYvTW9kdWxlcy9BdmVyYWdlLnRzIiwiZGV2L01vZHVsZXMvQ2xvbmUudHMiLCJkZXYvTW9kdWxlcy9Db25jYXQudHMiLCJkZXYvTW9kdWxlcy9Db250YWlucy50cyIsImRldi9Nb2R1bGVzL0NvdW50LnRzIiwiZGV2L01vZHVsZXMvRGlzdGluY3QudHMiLCJkZXYvTW9kdWxlcy9FdmFsdWF0ZS50cyIsImRldi9Nb2R1bGVzL0ZpbmRJbmRleC50cyIsImRldi9Nb2R1bGVzL0ZpbmRMYXN0SW5kZXgudHMiLCJkZXYvTW9kdWxlcy9GaXJzdC50cyIsImRldi9Nb2R1bGVzL0ZpcnN0T3JEZWZhdWx0LnRzIiwiZGV2L01vZHVsZXMvRm9yRWFjaC50cyIsImRldi9Nb2R1bGVzL0dldC50cyIsImRldi9Nb2R1bGVzL0dyb3VwQnkudHMiLCJkZXYvTW9kdWxlcy9JbnNlcnQudHMiLCJkZXYvTW9kdWxlcy9JbnRlcnNlY3QudHMiLCJkZXYvTW9kdWxlcy9Kb2luLnRzIiwiZGV2L01vZHVsZXMvTGFzdC50cyIsImRldi9Nb2R1bGVzL0xhc3RPckRlZmF1bHQudHMiLCJkZXYvTW9kdWxlcy9NYXgudHMiLCJkZXYvTW9kdWxlcy9NaW4udHMiLCJkZXYvTW9kdWxlcy9Nb3ZlLnRzIiwiZGV2L01vZHVsZXMvT3JkZXJCeS50cyIsImRldi9Nb2R1bGVzL09yZGVyQnlEZXNjZW5kaW5nLnRzIiwiZGV2L01vZHVsZXMvUmFuZ2UudHMiLCJkZXYvTW9kdWxlcy9SZW1vdmUudHMiLCJkZXYvTW9kdWxlcy9SZW1vdmVSYW5nZS50cyIsImRldi9Nb2R1bGVzL1JlcGVhdC50cyIsImRldi9Nb2R1bGVzL1JldmVyc2UudHMiLCJkZXYvTW9kdWxlcy9TZWxlY3QudHMiLCJkZXYvTW9kdWxlcy9TZWxlY3RNYW55LnRzIiwiZGV2L01vZHVsZXMvU2VxdWVuY2VFcXVhbC50cyIsImRldi9Nb2R1bGVzL1NpbmdsZS50cyIsImRldi9Nb2R1bGVzL1NpbmdsZU9yRGVmYXVsdC50cyIsImRldi9Nb2R1bGVzL1NraXAudHMiLCJkZXYvTW9kdWxlcy9TdW0udHMiLCJkZXYvTW9kdWxlcy9UYWtlLnRzIiwiZGV2L01vZHVsZXMvVGFrZVdoaWxlLnRzIiwiZGV2L01vZHVsZXMvVGhlbkJ5LnRzIiwiZGV2L01vZHVsZXMvVGhlbkJ5RGVzY2VuZGluZy50cyIsImRldi9Nb2R1bGVzL1RvRGljdGlvbmFyeS50cyIsImRldi9Nb2R1bGVzL1VuaW9uLnRzIiwiZGV2L01vZHVsZXMvVXBkYXRlLnRzIiwiZGV2L01vZHVsZXMvVXBkYXRlUmFuZ2UudHMiLCJkZXYvTW9kdWxlcy9XaGVyZS50cyIsImRldi9Nb2R1bGVzL1ppcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsSUFBVSxPQUFPLENBS2hCO0FBTEQsV0FBVSxPQUFPO0lBQ2I7UUFBQTtRQUdBLENBQUM7UUFBRCxzQkFBQztJQUFELENBSEEsQUFHQyxJQUFBO0lBSFksdUJBQWUsa0JBRzNCLENBQUE7QUFDTCxDQUFDLEVBTFMsT0FBTyxLQUFQLE9BQU8sUUFLaEI7QUNMRCxJQUFVLE9BQU8sQ0F5Q2hCO0FBekNELFdBQVUsT0FBTztJQUNiO1FBS0kseUJBQVksT0FBZTtZQUFFLG9CQUF1QjtpQkFBdkIsVUFBdUIsRUFBdkIscUJBQXVCLEVBQXZCLElBQXVCO2dCQUF2QixtQ0FBdUI7O1lBSDdDLGVBQVUsR0FBYSxFQUFFLENBQUM7WUFDMUIsV0FBTSxHQUFhLEVBQUUsQ0FBQztZQUd6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUV2QixL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