interface String { ReplaceAll(toReplace: string, replacement: string): string; Truncate(length: number, replacement: string): String; removeTrailingNewlines(): string; hasNewline(): boolean; } const extensions = require(".././/.//../util/UtilExtensions"); String.prototype.ReplaceAll = function (toReplace: string, replacement: string): string { var target = this; return target.split(toReplace).join(replacement); }; String.prototype.Truncate = function (length: number, replacement: string): String { var target = this; if (target.length >= length) { target = target.slice(0, Math.max(0, length - replacement.length)) + replacement; } return target; }; type BatchConverterSync = (batch: I[], isFullBatch: boolean) => O[]; type BatchHandlerSync = (batch: I[], isFullBatch: boolean) => void; type BatchConverterAsync = (batch: I[], isFullBatch: boolean) => Promise; type BatchHandlerAsync = (batch: I[], isFullBatch: boolean) => Promise; type BatchConverter = BatchConverterSync | BatchConverterAsync; type BatchHandler = BatchHandlerSync | BatchHandlerAsync; interface Array { batch(batchSize: number): T[][]; batchedForEach(batchSize: number, handler: BatchHandlerSync): void; batchedMap(batchSize: number, handler: BatchConverterSync): O[]; batchedForEachAsync(batchSize: number, handler: BatchHandler): Promise; batchedMapAsync(batchSize: number, handler: BatchConverter): Promise; batchedForEachInterval(batchSize: number, handler: BatchHandler, interval: number): Promise; batchedMapInterval(batchSize: number, handler: BatchConverter, interval: number): Promise; lastElement(): T; } Array.prototype.batch = extensions.Batch; Array.prototype.batchedForEach = extensions.ExecuteInBatches; Array.prototype.batchedMap = extensions.ConvertInBatches; Array.prototype.batchedForEachAsync = extensions.ExecuteInBatchesAsync; Array.prototype.batchedMapAsync = extensions.ConvertInBatchesAsync; Array.prototype.batchedForEachInterval = extensions.ExecuteInBatchesAtInterval; Array.prototype.batchedMapInterval = extensions.ConvertInBatchesAtInterval; Array.prototype.lastElement = function () { if (!this.length) { return undefined; } const last: T = this[this.length - 1]; return last; }; interface Math { log10(val: number): number; } Math.log10 = function (val: number): number { return Math.log(val) / Math.LN10; }; declare interface ObjectConstructor { assign(...objects: Object[]): Object; }