Skip to content

oritwoen/nordi

Repository files navigation

nordi

npm version npm size npm downloads

Normalize data with interfaces.

Why?

In many projects where it is necessary to use different APIs for the same purpose, there is a huge problem with standardization.

It is always a waste of time and almost always writing new functions and data normalization separately for each project.

What if there was a simple function that normalizes data according to a predetermined pattern? – it was on the basis of this thought that nordi was created.

Install

npm install --save nordi

# Using pnpm
pnpm add nordi

# Using yarn
yarn add nordi

Usage

1. Define Interface

To normalize data, you need to create an interface/schema beforehand.

The principle of operation is very simple. catch grabs the appropriate variable from the object and transform converts it to the selected format.

const blockInterface = {
    hash: {
        catch: ['hash', 'blockhash'],
        transform: (value: any) => String(value)
    },

    number: {
        catch: ['height', 'number', 'blockHeight'],
        transform: (value: any) => Number(value)
    },
}

2. Prepare a dataset

Of course, different data sets are required to normalize different data.

For example, I used blocks of various cryptocurrencies here.

const solanaBlock = {
    "blockhash": "4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZAMdL4VZHirAn",
    "blockHeight": 0
}

const bitcoinBlock = {
    "hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
    "height": 0
}

const ethereumBlock = {
    "hash": "0x0000000000000000000000000000000000000000",
    "number": 0,
}

3. Normalization

Of course, different data sets are required to normalize different data.

For example, I used blocks of various cryptocurrencies here.

const { useNormalizedData } from 'nordi'

const normalizedSolanaBlock = useNormalizedData(blockInterface, solanaBlock)
const normalizedBitcoinBlock = useNormalizedData(blockInterface, bitcoinBlock)
const normalizedEthereumBlock = useNormalizedData(blockInterface, ethereumBlock)

console.log(normalizedSolanaBlock)

//{
//  hash: "4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZAMdL4VZHirAn"
//  number: 0
//}

License

MIT License © 2023 Dominik Opyd