npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

reformed-data

v1.0.3

Published

package with functions for declarative data structure transformations

Downloads

2

Readme

reformed-data

npm package with functions that can be used for declarative data transformations

Goal

Goal is to create some functions for easy data structure changing

Result

The result is an reformed-data npm package

Examples


// get functions from package
const { getValuesByStructure, pipeValuesByStructure } = require('reformed-data')

// GET_VALUES_BY_STRUCTURE EXAMPLES
// getValuesByStructure has two parameters:
// 1) inputStructure - object with placeholders inside. Placeholders are used to mark place of value
// 2) object - object with data
// 
// It returns object or an array with keys and values described by placeholders
// 
// There are three types of placeholders:
// 1) String placeholder
//   String placeholder is used as a key. Corresponding value is used as a value of the key.
// 2) Number placeholder
//   Number placeholder is similar to string placeholder. But there is difference:
//   - if there is only one number placeholder result will be an array.
// 3) Function placeholder
//   Function placeholder is used to calculate set of values based on the placeholdered value.
//   function placeholder has three params:
//   @param {*} value placed in the place of the placeholder
//   @param {Array<(string|number)>} path - path to value
//   @param {*} whole object (2rd parameter of getValuesByStructure)
//   It returns an object that will be merged to the result
// ----------------------------------------------------------------------------
// INPUT OBJECTS
const obj = {
  array: [{ id: 1 }, ['Andrew', 'Beletskiy'], 3, null, 'something'],
  obj: {
    a: 1,
    b: '2',
    arr: [-1, -2, -3],
    n: null,
    u: undefined
  }
}
const arr = [ obj, 'other', 1, null ]
// ----------------------------------------------------------------------------
// EXAMPLE 1. Get a value from a complex structured object
// First argument of getValuesByStructure is an object, or an array.
// It has the same property names as an object passed as a second argument.
// We can use string placeholders to show where can we find data, and how 
// it must be called in result object of getValuesByStructure function
const structToGetValueFromObj = {
  obj: {
    a: 'stringPlaceholder'
  }
}

const { stringPlaceholder: value1 } = getValuesByStructure(structToGetValueFromObj, obj)
console.log(value1)

// OUTPUT: 1
// ----------------------------------------------------------------------------
// EXAMPLE 2. Get a value from a complex structured object (from array)
// We can use string placeholder placed into array
// Result will contain it as a key with a value placed
// in the same place as the placeholder
const structToGetValueFromArr = {
  obj: {
    arr: ['stringPlaceholder']
  }
}

const { stringPlaceholder: value2 } = getValuesByStructure(structToGetValueFromArr, obj)
console.log(value2)

// OUTPUT: -1
// ----------------------------------------------------------------------------
// EXAMPLE 3. Get a value from a complex structured object (from array)
// `undefined` is just an empty placeholder that will be ignored
const structToGetValueFromArr2 = {
  obj: {
    arr: [undefined, 'stringPlaceholder']
  }
}

const { stringPlaceholder: value3 } = getValuesByStructure(structToGetValueFromArr2, obj)
console.log(value3)
// OUTPUT: -2
// ----------------------------------------------------------------------------
// EXAMPLE 4. Get values from a complex structured object
const structToGetValues = {
  array: [{id: 'first'}],
  obj: {
    b: 'second'
  }
}

const { first, second } = getValuesByStructure(structToGetValues, obj)
console.log(first, second)
// OUTPUT: 1 '2'
// ----------------------------------------------------------------------------
// EXAMPLE 5. If we the second argument object doesn't fit the structure
// not fitting elements will have values undefined
const structToGetValuesNotInObj = {
  notInTheObj: 'third_ex5',
  array: [{id: 'first'}],
  obj: {
    b: 'second'
  }
}

let res = getValuesByStructure(structToGetValuesNotInObj, obj)
console.log(res)
// OUTPUT: { third_ex5: undefined, first: 1, second: '2' }
// ----------------------------------------------------------------------------
// EXAMLE 6: Number placeholder is used to describe which index in array will be
// used to store value.
// If there is only one number placeholder -  result will be an array.
const structToGetArrayAsAResult = {
  array: [0],
  obj: {
    b: 1,
    n: 'a'
  }
}
res = getValuesByStructure(structToGetArrayAsAResult, obj)
console.log(res)
// OUTPUT: [{ id: 1 }, '2', a: null]
// ----------------------------------------------------------------------------
// EXAMLE 7: Function placeholder.
// Function placeholder is used for calculating or formatting of data
// placed on the place of the placeholder
// Function placeholder must return an object. The object will be merged with
// the result of other placeholders. I mean all entries of the function-placeholder
// result will be stored in result object.
const structWithFuncPlaceholder = {
  array: [obj => ({c: obj.id})],
  obj: {
    b: 'b',
    n: 'a'
  }
}
res = getValuesByStructure(structWithFuncPlaceholder, obj)
console.log(res)
// OUTPUT: { c: 1, b: '2', a: null }

// PIPE_VALUES_BY_STRUCTURE EXAMPLES
// pipeValuesByStructure is used to create new structure with using of
// values founded by getValuesByStructure
// It has three arguments
// 1) inputStructure - this is structure that will be used to get values
//   from the object
// 2) outputStructure - this is structure of the resulting object.
//  ( To be accurate, all valid placeholder in this structure will
//    be replaced with values that were get by inputStructure)
// 3) Object with data
//
// It returns object with the same structure as the outputStructure.
// 
// There three possible types of placeholders
// 1) Number placeholder - is used to take data by index from result get by inputStructure
// 2) String placeholder - is used to take data by property name from result
//    get by inputStructure
// 3) Function placeholder - it calculates value based on whole result object get by
//    inputStructure
//  Function placeholder has two params:
//   @param {object} object or an array that will be get from a result of getValuesByStructure(inputStructure, obj)
//   @param {object} object with data (3rd parameter of pipeValuesByStructure)

// EXAMLES:

// Using of number placeholder
console.log(pipeValuesByStructure([100, 200], [200, 100], ['a', 'b']))
// OUTPUT: [ 'b', 'a' ]

// Using of string placeholer
console.log(pipeValuesByStructure([undefined, 'b'], ['b', 'b'], [123, 23]))
// OUTPUT: [ 23, 23 ]

console.log(pipeValuesByStructure([1, 2], [3, 2, 1, 4], [123, 23]))
// OUTPUT: [ undefined, 23, 123, undefined ]

// Using of functional place holder
const inStruct1 = {
  a: 'a',
  b: 'b'
}
const outStruct1 = {
  sum: ({a, b}) => a + b
}
console.log(pipeValuesByStructure(inStruct1, outStruct1, { a: 1, b: 2 }))
// OUTPUT: { sum: 3 }
console.log(pipeValuesByStructure('arr', {
  max: ({ arr }) => Math.max(...arr),
  min: ({ arr }) => Math.min(...arr)
}, [1,2,3,4,5]))
// OUTPUT: { max: 5, min: 1 }