Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@logdna/stdlib

logdna79kMIT2.1.0

Standardized module functions free of business logic

readme

stdlib

Coverage Status semantic-release  All Contributors

Standardized modular package exposing language constructs - free of business logic.

Main Goals

  • Free of business logic
  • Consistent api
  • Explicitness
  • Lacking in dependencies
  • Lacking indirection
  • Highly debuggable
  • Highly testable

Installation

> npm install @logdna/stdlib

API

array

Common array manipulation functions

toArray(item: any): Array

Converts or wraps anything in an array. Set objects will be converted to arrays. A String will be treated as a CSV and parsed into an array. If an array cannont be coerced from the input value, it will be wrapped in an a single element array

Arguments:

  • item - The element to convert to an array.

returns result Array: The resulting array for input coercion

Example
const {array} = require('@logdna/stdlib')
array.toArray() // []
array.toArray(null) // []
array.toArray(1) // [1]
array.toArray('1,2, 4, 3') // [1, 2, 4, 3]

iter

Iteration tools for complex and efficient iteration. Inspired by python's itertools

cycle(items: Array): Generator

Iterates endlessly over a single array of items. The elements of the array can be of any type.

Arguments:

  • items (Array) - An array to iterate over

returns Generator A generator object containing the passed in elements

Example
const {iter} = require('@logdna/stdlib')
const numbers = iter.cycle([1, 2, 3])

numbers.next().value // 1
numbers.next().value // 2
numbers.next().value // 3
numbers.next().value // 1
numbers.next().value // 2
numbers.next().value // 3

json

Common json functions

parse(input: String): Object

Safe json parsing function that attempts to json parse a string. If it cannont, undefined will be returned

Arguments

  • input (String) - a json string to parse

returns Object A fully parsed javascript object

Example
const {json} = require('@logdna/stdlib')
json.parse('{"valid": "json"}') // {valid: 'json'}
json.parse('{"invalid" json') // undefined

object

Common object manipulation and intropsection functions

has(obj: Object, property: String [, separator: String = '.']): Boolean

Determines if a specified key is a direct property of an object. This function is safe to call on objects that do not inherit from Object.prototype, unlike attempting to call .hasOwnProperty on input objects

Arguments

  • obj (Object) - The object to introspect
  • key (String) - The name of the property to locate
  • (optional) separator (String) - Delimiter character
    • default: '.'

returns Boolean - True of the key is defined on the input object.

Example
const {object} = require('@logdna/stdlib')
object.has({a: 1}, 'a') // true
object.has({}, 'test') // false
object.has(Object.create(null), 'test') // false
object.has({}, 'hasOwnProperty') // false
object.has({one: {two: {three: 3}}}, 'one-two-three', '-') // true

get(obj: Object, property: String [, separator: String = '.']): any

Returns the value from an object at a specified object path.

Arguments

  • obj (Object) - The object to introspect
  • key (String) - The name of the property to local
  • (optional) separator (String) - Delimiter character
    • default: '.'

returns any - The value at the specified key. If no value is found, undefined will be returned.

Example
const {object} = require('@logdna/stdlib')
const obj = {one: {two: {three: 3}}}
const value = object.get(obj, 'one-two-three', '-') // 3

set(obj: Object, property: String, value: any [, separator: String = '.' ]): Object

Sets a property at the deepest level. Nested objects will be created if they do not exist. Returns the modified object. This will not work on complex Types like arrays or maps; Only POJOs.

NOTE: if you find your self wanting to set the value at a specific index of an array - you probably want an object.

Arguments

  • obj (Object) - The object to introspect
  • key (String) - The name of the property to local
  • value (any) - The value to set at the specified path
  • (optional) separator (String) - Delimiter character
    • default: '.'
Example
const {object} = require('@logdna/stdlib')
const obj = {one: {two: {three: 3}}}
const value = object.set(obj, 'four.five', 6)
// {one: { two: three: 3 }, four: {five: 6}}

filter(obj: Object, test: Function): Object

Similar to array.filter, removes keys from an input object that do not pass the test function

Arguments

  • obj (Object) - The object to introspect
  • test (Function) - The function to be used to reject keys from the input object. If this function returns a truthy value, the key will be included in the final output. If falsey it will be excluded
Example
const {object} = require('@logdna/stdlib')
const obj = {one: { two: three: 3 } }

object.filter({two: 2, three: 3}, (key) => {
   return key.match(/ee$/)
}) // {three: 3}

returns Object An object containing only the keys which passed the test function.

typecast(obj: Object [, depth: Number = 1000]): Object

Recursively typecast string values of enumerable object properties, using string.typecast()

Arguments

  • obj (Object) - The input object
  • key (Number) - The maximum depth to recursively typecast

returns Object A new object with all string properties typecast.

Example
const {object} = require('@logdna/stdlib')
const obj = {foo: '1', bar: 'null', baz: 'three', qux: {foo: '2'}}
const casted = typecast(obj)
// {foo: 1, bar: null, baz: 'three', qux: {foo: 2}}
const with_depth = typecast(obj, 0)
// {foo: 1, bar: null, baz: 'three', qux: {foo: '2'}}

string

camelcase(text: String): String

Casts a string value to its camel case variant

Arguments

  • str String - The string value to convert

returns String A camelcase version of the input string

Example
const {string} = require('@logdna/stdlib')
string.camelcase('Hello George Washington') // helloGeorgeWashington

lowercase(text: String): String

A safe alternative to String.prototype.toLowerCase(). This can be called non string inputs and they will be converted to string prior to lower casing.

Arguments

  • str String - The string value to convert

returns String A lowercased version of the input string

Example
const {string} = require('@logdna/stdlib')
string.lowercase('Hello George Washington') // hello george washington
string.lowercase({}) // [object object]
string.lowercase(null) // ''
string.lowercase(undefined) // ''

uppercase(text: String): String

A safe alternative to String.prototype.toUpperCase(). This can be called non string inputs and they will be converted to string prior to upper casing.

Arguments

  • str String - The string value to convert

returns String A uppercased version of the input string

Example
const {string} = require('@logdna/stdlib')
string.uppercase('Hello George Washington') // HELLO GEORGE WASHINGTON
string.uppercase({}) // [OBJECT OBJECT]
string.uppercase(null) // ''
string.uppercase(undefined) // ''

slugify(text: String [, separator: String = '-']): String

Converts a string to a url friendly format by replacing spaces and symbols with a known value and converting to lower case

Arguments

  • str String - The string value to convert
  • (optional) separator (String) - Delimiter character
    • default: '-'

returns String A slugified version of the input string

Example

const {string} = require('@logdna/stdlib')
string.slugify('A fake Sentence') // a-fake-sentence
string.slugify('A fake Sentence', '::') // a::fake::sentence

typecast(text: String): Object

Best effort to cast a string to its native couter part where possible. Supported casts are booleans, numbers, null and undefined.

Arguments

  • value - The value to cast

returns The native representation of the string input. If the value could not be cast, it will be returned as it was passed.

Example
const {string} = require('@logdna/stdlib')
string.typecast('null') // null
string.typecast('true') // true
string.typecast('10.01') // 10.01
string.typecast({}) // {}

typeOf(element: any): String

A more accurate version of the javascript built-in function typeof

Arguments

  • input - The input object to introspect

returns String A normalized string representation of the input object

Example
const {typeOf} = require('@logdna/stdlib')
typeOf(new Date()) // 'date'
typeOf(/\w+/) // regexp
typeOf(() => {}) // function
typeOf(new Set()) // set

Callable: Class

A class object whose instances are derived from Function and can be called. When exteded, a Symbol function defined by Symbol.for('call') will be executed with any arguments that were passed

Example
const {Callable} = require('@logdna/stdlib')
const __call__ = Symbol.for('call')
class Hello extends Callable {
  constructor(opts) {
    this.yell = !!opts.yell
  }
  [__call__](name) {
    const output = `Hello, ${name}`
    console.log(this.yell ? `${output.toUpperCase()}!` : output)
  }
}

const screamAt = new Hello({yell: true})

screamAt('bill') // HELLO, BILL!

path

moduleId(location: String [, root: String = process.cwd(), sep: String = ':']): String

Returns the path from root to the module at location, separated by sep.

Arguments

  • location (String) - The module's location, typically __filename
  • (optional) root (String) - The root directory to find the relative path to location from
    • default: process.cwd()
  • (optional) separator (String) - Delimiter character
    • default: ':'
Example
const {path} = require(@logdna/stdlib)

const my_module = path.moduleId(__filename)
// e.g. lib:my-module

const pipe_delimited_module = path.moduleId(__filename, __dirname, '|')
// e.g. lib|my-module

Authors

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Darin Spivey
Darin Spivey

💻 👀 ⚠️ 📖
Eric Satterwhite
Eric Satterwhite

💻 👀 ⚠️ 📖
Jon Moses
Jon Moses

📖 🐛
Mike Del Tito
Mike Del Tito

💻 👀 ⚠️ 📖
Samir Musali
Samir Musali

💻
Wei Zou
Wei Zou

💻 👀 ⚠️ 📖

This project follows the all-contributors specification. Contributions of any kind welcome!

changelog

Changelog

2.1.0 (2025-07-11)

Features

  • moduleId: add module id function 4a20cad - Matt March

2.0.0 (2024-11-01)

Bug Fixes

  • object: has should return early if nothing to split 8b815a0 - Darin Spivey

Chores

  • pkg: Require node >= 16 6ba1ed6 - Darin Spivey

Code Refactoring

  • object: Remove null prototyped objects 5c5dbaf - Darin Spivey

BREAKING CHANGES

  • object: The response objects in certain functions will have the Object prototype instead of a null one.
  • pkg: This commit turns on strictEngines

1.2.3 (2023-05-05)

Bug Fixes

  • ci: gate prs from non maintainers 249c079 - Eric Satterwhite

1.2.2 (2023-04-11)

Chores

  • deps: update microtime requirement from ^3.0.0 to ^3.1.1 e5c5beb - Eric Satterwhite

Miscellaneous

  • update .all-contributorsrc [skip ci] ae4e58f - Eric Satterwhite
  • update README.md [skip ci] f9f03cf - Eric Satterwhite

1.2.1 (2023-04-10)

Chores

  • Update jenkins agent specification 18b582a - Jon Moses

Documentation

  • Remove internal tooling reference from readme 21da877 - Jon Moses

1.2.0 (2022-08-01)

Features

  • lang: include callable class object b0e8d00 - Eric Satterwhite

1.1.5 (2021-09-02)

Chores

  • deps: update eslint requirement from ^7.30.0 to ^7.32.0 8a6a94c - Darin Spivey

Miscellaneous

  • update .all-contributorsrc [skip ci] ed5ed63 - Eric Satterwhite
  • update README.md [skip ci] a81d210 - Eric Satterwhite

1.1.4 (2021-08-10)

Bug Fixes

  • string: fix typecasting of boolean values 42511bf - Eric Satterwhite

1.1.3 (2021-07-06)

Chores

  • deps: update eslint requirement from ^7.26.0 to ^7.30.0 53f2c75 - Darin Spivey

1.1.2 (2021-06-22)

Chores

  • deps: update eslint-config-logdna requirement 7b13ef9 - Eric Satterwhite

1.1.1 (2021-06-18)

Documentation

  • make readme links consistent efd3296 - Eric Satterwhite

1.1.0 (2021-05-17)

Features

  • object.has: enable it on nested objects 55ee9f2 - Samir Musali

1.0.4 (2021-05-11)

Chores

  • deps: update eslint requirement from ^7.25.0 to ^7.26.0 d0b06b3 - Eric Satterwhite

1.0.3 (2021-05-07)

Chores

  • deps: update tap requirement from ^15.0.6 to ^15.0.9 e39cc5b - Eric Satterwhite

1.0.2 (2021-05-06)

Chores

  • README: Add badge for code coverage 55d948a - Darin Spivey

1.0.1 (2021-05-04)

Chores

  • deps: update eslint requirement from ^7.7.0 to ^7.25.0 dc29f6a - Eric Satterwhite

1.0.0 (2021-05-03)

Bug Fixes

  • object: handle when the first param is nullish to get-property f560b62 - Eric Satterwhite

Chores

Features

  • array: add array.chunk function f08b9ca - Eric Satterwhite
  • array: allow custom separator in array.toArray dc7371a - Eric Satterwhite
  • ci: replace versioner with semantic release 1fef479 - Eric Satterwhite
  • json: Allow the caller to specify a return value of parse 46c20e5 - Eric Satterwhite
  • object: add recursive object typecast 8bd7fbc - Eric Satterwhite
  • object: function to shallow exclude object keys 1c4e1d3 - Eric Satterwhite
  • pkg: initial implementation of stdlib package 172c5dd - Eric Satterwhite

Miscellaneous

  • add @darinspivey as a contributor ac8e4fb - Eric Satterwhite
  • add @esatterwhite as a contributor 0f4f49c - Eric Satterwhite
  • add @mdeltito as a contributor 5ea9084 - Eric Satterwhite
  • add @weizou19 as a contributor c462717 - Eric Satterwhite
  • Initial commit c474562 - Eric Satterwhite