underscore-functions

0.9.0 • Public • Published

_f

Moxy String, Array, and Object library for TypeScript / NodeJS. Array functions are immutable by default, providing you with copies rather than references.

Installation

npm i underscore-functions

Usage

const _f = require('underscore-functions')

String Functions

  • pascalCase = (s: string): string => Converts to Pascal Case
  • camelCase = (s: string): string => Converts to camel case
  • nl2br = (s: string) => Converts new lines to break tags
  • br2nl = (s: string) => Converts break tags to new lines
  • splitByLength = (s: string, len: number) => Splits a string by length
  • upperCaseWords = (s: string) => Upper cases words in a string
  • upperCaseFirst = (s: string) => Upper cases the first letter of a string.
  • upperCaseFirstInSentence = (s: string) => Upper cases the first letter in each sentence.
  • decodeHTML = (html: string): string => decodes HTML into safe characters
  • toAlpha = (s: string, charSet?: string) => Converts to alpha-only characters
  • toNumeric = (s: string, charSet?: string) => Converts to number-only characters
  • toBinary = (s: string) => Converts to binary
  • fromBinary = (s: string) => Converts from binary
  • toHex = (s: string) => Converts to Hex
  • fromHex = (s: string) => Converts from Hex
  • toBase64 = (s: string) => Converts to Base64
  • fromBase64 = (s: string) => Converts from Base64
  • rightRotate = (s: string, bits: number) => Right rotates a string
  • leftRotate = (s: string, bits: number) => Left rotates a string
  • rightShift = (s: string, bits: number, char: string = '0') => Right shifts a string
  • reverse = (s: string) => Reverses a string
  • reverseWords = (s: string) => Reverses words in a string
  • shuffle = (a: string | any[]) => Shuffle a string
  • keyToField = (s: string, strip?: string) => Converts a key to a human readable field
  • isAlpha = (s: string, ignoreChars?: string) => Returns true if the string contains only alpha characters, with an optional set of characters to ignore
  • isNumeric = (s: string, ignoreChars?: string) => Returns true if the string contains only numeric characters, with an optional set of characters to ignore
  • isAlphaNumeric = (s: string, ignoreChars?: string) => Returns true if the string contains only alpha numeric characters, with an optional set of characters to ignore
  • uniqueId = (prefix?: string, postfix?: string) => Generates a unique ID
  • firstUniqueCharacter = (s: string) => Returns the first non-repeating character in a string
  • randomString = (len: number, charSet?: string) => Generates a random string of N length using an optionally defined character set.
  • isShouting = (s: string, optionalThreshold?: number) => Returns true if a sentence (more than 5 characters long) is detected as being SHOUTED OUT. Threshold is the fractional percentage of uppercase text.
  • getRepeatingCharacters = (s: string, ignoreCase?: boolean, minRepeat: number = 2) => Get all repeating characters in a string
  • hasRepeatingCharacters = (s: string, ignoreCase?: boolean, minRepeat: number = 2) => Returns true if a string has repeating characters, booo = 2 repeated 'o' characters.
  • getRepeatingSets = (s: string, ignoreCase?: boolean, minRepeat: number = 2) => Get all repeating sets in a string
  • hasRepeatingSets = (s: string, ignoreCase?: boolean, minRepeat: number = 2) => Returns true if a string has repeating sets, hellohellohello = 2 repeated 'hello' sets.
  • getSequences = (s: string, ignoreCase?: boolean) => Returns all sequences (eg. 123, abc, 321) in a string
  • hasSequences = (s: string, ignoreCase?: boolean) => Returns true if a string has characters or numbers in sequence or reverse sequence (eg. 123, abc, 321)
  • levenshtein = (s: string, s2: string) => Returns the number of edits (deletes/inserts/substitutions) required to get from string s to string s2.
  • justifyText = (text: string, len: number = 20) => Returns justified text broken into lines of n size.
  • isJson = (s: string) => Returns true if string is valid JSON
  • stringifyCache = (o: any, _returnTemplate: boolean = false): TStringifyCacheResult => Caches the object schema and returns a stringify function that is twice as fast as native JSON.stringify (on average)
  • stringifyT = (o: any, tpl: string = '') => Returns a string representation of an object. This is the same function that is returned by stringifyCache. Use in combination with the _returnTemplate parameter of stringifyCache to cache known object schemas and stringify them later.
  • stripTags = (s: string) => Returns a string with <tags> (presumably HTML) omitted.

Object Functions

  • deepFreeze = (a: any) => Make an object and all nested objects immutable
  • leftJoin = (a: any, b: any[], criteria?: () => boolean) => Left join an array of JSON documents onto a source
  • rightJoin = (a: any, b: any[], criteria?: () => boolean) => Right join an array of JSON documents onto a source

Array Functions

  • compact = (a: any[]) => Removes values that are falsey
  • first = (a: any[], byRef: boolean = false) => Returns the first element in an array (as a copy by default)
  • last = (a: any[], byRef: boolean = false) => Returns the last element in an array (as a copy by default)
  • findFirst = (a: any[], cond: (item: any) => boolean, byRef: boolean = false) => Returns the first element in an array (as a copy by default) that matches a condition
  • findLast = (a: any[], cond: (item: any) => boolean, byRef: boolean = false) => Returns the last element in an array (as a copy by default) that matches a condition
  • unique = (a: any[]) => Returns only the unique values in an array
  • uniqueBy = (a: any[], prop: string, byRef: boolean = false) => Returns only the unique values in an array by a specific property. Returns a new copy by default
  • deepClone = (a: any) => Deep clone an object or array so that is is a pure copy
  • flat = (a: any) => Flatten an array
  • shuffle = (a: string | any[]) => Shuffle an array
  • range = (start: number, end?: number, step?: number) => Creates a range of numbers
  • lrange = (start: number, end?: number, step?: number) => Generates a number within a range as you iterate through. Useful for large ranges of values
  • partition = (a: any[], size: number) => Partitions an array into segments of X size

Number Functions

  • secureRandomNumber = (min: number, max: number) => Generates a cryptographically secure number using the crypto NodeJS package.
  • round = (n: number, precision: number = 0.5, ERoundOption = { ROUND: 0, ROUND_UP: 1, ROUND_DOWN: 2 } ) => Round to the nearest X number.
  • add = (...n: number[]) => Adds numbers together with precision up to 15 decimal places. Works around the floating point issue (0.2 + 0.1 = 0.30000000000000004, should be 0.3)
  • subtract = (...n: number[]) => Subtracts numbers with precision up to 15 decimal places
  • multiply = (...n: number[]) => Multiply numbers with precision up to 15 decimal places. Works around the floating point issue (0.2 * 0.1 = 0.020000000000000004, should be 0.02)
  • divide = (...n: number[]) => Divide numbers with precision up to 15 decimal places
  • intToRoman = (num: number) => Converts numbers less than 4,000,000 to roman numeral, (eg: 7 = VII)

Date Functions

  • unixTimestamp = () => Returns the time in milliseconds since the Unix epoch (00:00:00 UTC on 1 January 1970)

Misc Functions

  • check = (value: any, type: any, throwErr: boolean = true) => Returns true if the value's type matches the type passed. Otherwise throws an error or returns false depending on the optional 3rd parameter.
  • memoize = (n: number)(fn: (...args: any) => any) => Caches n results of the callback function passed into it. eg: _f.memoize(5)(callbackFn) will store the most recently used results based on the included arguments. Highly efficient for recursive algorithms where you don't want to recalculate explored states/paths. Argument checks are done by value (not by reference). This algorithm performs better than memoizerific by a factor of 10 in some cases (for example, when reaching the cache limit)
  • sanitize = (stringOrObject: any, mode: ESanitize = ESanitize.MONGO) => Returns a sanitized string or object based on mode, (MONGO = 1, SQL = 2, HTML = 3). MONGO removes queries from JSON objects (eg: keys that start with $). SQL escapes (adds backslashes to) unsafe characters. HTML converts special characters into printable entities, (eg: '<' becomes '&lt;').
  • safeEval = async (s: string, context?: any = {}, timeout?: number = 5000): Promise => Evaluates stringified code in a sandboxed environment. Supports both NodeJS and browser environments. safeEval does not mutate context, it returns a copy of the context with mutations based on the evaluated code. This function runs async and resolves with a Promise.
  • simpleEval = (s: string) => Evaluates stringified code using a Function wrapper instead of eval() as recommended by Mozilla. Use safeEval if security is a top priority.

Usage

const _f = require('underscore-functions')
const str = _f.upperCaseWords('hello world') // Hello World

Donations appreciated

If you find any of my GitHub projects useful, feel free to donate here!

Dependencies (0)

    Dev Dependencies (8)

    Package Sidebar

    Install

    npm i underscore-functions

    Weekly Downloads

    7

    Version

    0.9.0

    License

    Apache-2.0

    Unpacked Size

    153 kB

    Total Files

    142

    Last publish

    Collaborators

    • dancmox