linq4js
Version:
Linq methods for JavaScript/TypeScript to work with Arrays
927 lines (926 loc) • 132 kB
JavaScript
"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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