UNPKG

handy-tool-box

Version:

A colection of handy snippets and functions.

133 lines (121 loc) 3.06 kB
/* * Copyright (c) 2018. 1o1 :{P */ import { Observable } from '@reactivex/rxjs'; /** * Mixin: Two Objects go in and one Object is returned with all values. * */ export function mergeObjects<T, K extends T>(x: T, y: K): K { if (typeof x === typeof {} && typeof y === typeof {}) { for (let key of Object.keys(x)) { y[key] = x[key]; } return y; } } /** * Hash string. * @param {string} dataString * @param {string} algo * @returns {Promise<string>} */ export async function stringShaHash(dataString: string, algo: string = 'sha-256'): Promise<string> { const buffer = new Buffer(dataString, 'utf-8'); return await window.crypto.subtle.digest(algo, buffer).toString(); } export function counter (mod?: number): { increment: (offset: number) => void; decrement: (offset: number) => void; getCount: number; } { let count = mod ? 0 % mod : 0; return { increment: (offset: number = 0) => count++ + offset, decrement: (offset: number = 0) => count-- + offset, getCount: count }; } /** * Handy for frameworks that need to load and settle before any Namespace * can be called. * * @param {string} url * @returns {<boolean>} */ export const loadDependency$ = (url: string): Observable<boolean> => { return Observable.create(observer => { let node = document.createElement('script'); node.async = true; node.src = url; node.onload = (e) => { observer.next(e); }; node.onerror = (e) => { observer.error(e) }; document.head.appendChild(node); }); }; export async function loadDependency(url: string): Promise<boolean> { return new Promise((resolve, reject) => { let node = document.createElement('script'); node.async = true; node.src = url; node.onload = (e) => { resolve(e); }; node.onerror = (e) => { reject(e); }; document.head.appendChild(node); }); } export function convertToArray(map: Map<any, any> | {[index: string]: {[prop: string]: any}}): any[] { let newArray = []; for (let key of Object.keys(map)) { newArray = [...newArray, map[key]]; } return newArray; } export function bufferArrayToBase64(arrayBuffer: ArrayBuffer, format: string = 'audio/mp3'): string { if (arrayBuffer) { const base64Data = `data:${format};base64,${btoa( new Uint8Array(arrayBuffer) .reduce((data, byte) => data + String.fromCharCode(byte), '') )}`; return base64Data; } else { return 'boo'; } } export function formatSeconds(seconds: number): string { return `${Math.trunc(seconds / 60) < 10 ? '0' + Math.trunc(seconds / 60) : Math.trunc(seconds / 60) }:${Math.trunc(seconds % 60) < 10 ? '0' + Math.trunc(seconds % 60) : Math.trunc(seconds % 60)}`; } export function ensureVal<T>(arg: T ): T { if (arg == undefined) { return null; } return arg; } export function HEADER_TO_MIME(header: string): string { switch (header.slice(0, 6)) { case'464f52': return 'aif'; case'494433': return 'mp3'; case'524946': return 'wav'; case'664C61': return 'flac'; case'000001': return 'mp4'; default: return 'unknown'; } }