import { bytesToHex, bytesFromHex, bufferConcats } from '../helpers/bytes'; import { nextRandomInt } from '../helpers/random'; //export const secureRandom = new SecureRandom(); Object.defineProperty(Uint8Array.prototype, 'hex', { get: function(): string { return bytesToHex([...this]); }, set: function(str: string) { this.set(bytesFromHex(str)); }, enumerable: true, configurable: true }); Uint8Array.prototype.randomize = function() { //secureRandom.nextBytes(this); for(let i = 0; i < this.length; ++i) { this[i] = nextRandomInt(255); } return this; }; Uint8Array.prototype.concat = function(...args: Array) { return bufferConcats(this, ...args); }; /* Uint8Array.prototype.toString = function() { return String.fromCharCode.apply(null, [...this]); }; */ Uint8Array.prototype.toJSON = function() { return [...this]; //return {type: 'bytes', value: [...this]}; }; Array.prototype.forEachReverse = function(callback: (value: T, index?: number, array?: Array) => void) { let length = this.length; for(var i = length - 1; i >= 0; --i) { callback(this[i], i, this); } }; Array.prototype.findAndSplice = function(verify: (value: T, index?: number, array?: Array) => boolean) { let index = this.findIndex(verify); return index !== -1 ? this.splice(index, 1)[0] : undefined; }; String.prototype.toHHMMSS = function(leadZero = false) { const sec_num = parseInt(this + '', 10); const hours = Math.floor(sec_num / 3600); let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60); let seconds: any = sec_num - (hours * 3600) - (minutes * 60); if(hours) leadZero = true; if(minutes < 10) minutes = leadZero ? "0" + minutes : minutes; if(seconds < 10) seconds = "0" + seconds; return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds; }; /* Promise.prototype.finally = Promise.prototype.finally || { finally(fn: () => any) { const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback); return this.then( result => onFinally(() => result), reason => onFinally(() => Promise.reject(reason)) ); } }.finally; */ Promise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) { const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback); return this.then( result => onFinally(() => result), reason => onFinally(() => Promise.reject(reason)) ); }; declare global { interface Uint8Array { hex: string; randomize: () => Uint8Array, concat: (...args: Array) => Uint8Array, //toString: () => string, toJSON: () => number[], //toJSON: () => {type: 'bytes', value: number[]}, } interface Array { forEachReverse(callback: (value: T, index?: number, array?: Array) => void): void; findAndSplice(verify: (value: T, index?: number, array?: Array) => boolean): T; } interface String { toHHMMSS(leadZero?: boolean): string; } interface Promise { finally: (onfinally?: () => void) => Promise; } }