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

@noravel/supporter

v1.8.2

Published

This is a support library for my personal projects.

Downloads

143

Readme

Noravel supporter

This is a support library for Nam's projects.

_obj

const { _obj } = require('@noravel/supporter');

# OR

import { _obj } from '@noravel/supporter';

_obj.combine()

Create a new object with each key associated with each corresponding value.

const keys = ['id', 'name'];
const values = [1, 'Trinh Tran Phuong Nam'];

console.log(_obj.combine(keys, values));
/*
{
  id: 1,
  name: 'Trinh Tran Phuong Nam'
}
*/

In case the key length is greater than the value length.

const keys = ['id', 'name', 'email'];
const values = [1, 'Trinh Tran Phuong Nam'];

console.log(_obj.combine(keys, values));
/*
{
  id: 1,
  name: 'Trinh Tran Phuong Nam',
  email: null
}
*/

In case the price length is greater than the key length.

const keys = ['id', 'name'];
const values = [1, 'Trinh Tran Phuong Nam', '[email protected]', 'bla bla'];

console.log(_obj.combine(keys, values));
/*
{
  id: 1,
  name: 'Trinh Tran Phuong Nam',
  key_0: '[email protected]',
  key_1: 'bla bla'
}
*/

_obj.get()

Get an item from an array using "dot" notation.

const data = {
  user: {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
};

console.log(_obj.get(data, 'user.name')); // 'Trinh Tran Phuong Nam'
console.log(_obj.get(data, 'user.email')); // null
console.log(_obj.get(data, 'user.email', '[email protected]')); // '[email protected]'
console.log(_obj.get(data, 'user.email', () => 'We can pass the callback here.')); // 'We can pass the callback here.'

_obj.set()

Set an object item to a given value using "dot" notation.

const data = {
  user: {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
};

console.log(_obj.get(data, 'user.email')); // null

_obj.set(data, 'user.email', '[email protected]');

console.log(_obj.get(data, 'user.email')); // '[email protected]'

_obj.only()

Get a subset of the items from the given object.

const user = {
  id: 1,
  name: 'Trinh Tran Phuong Nam',
  email: '[email protected]',
  address: 'Everywhere',
};

console.log(_obj.only(user, 'id')); // { id: 1 }
console.log(_obj.only(user, ['id', 'name'])); // { id: 1, name: 'Trinh Tran Phuong Nam' }

_obj.except()

Get all of the given object except for a specified object of keys.

const user = {
  id: 1,
  name: 'Trinh Tran Phuong Nam',
  email: '[email protected]',
};

console.log(_obj.except(user, 'email')); // { id: 1, name: 'Trinh Tran Phuong Nam' }
console.log(_obj.except(user, ['name', 'email'])); // { id: 1 }

_obj.has()

Deeply check whether the properties exist or not.

const user = {
  id: 1,
  address: {
    city: 'Sample city',
  },
};

console.log(_obj.has(user, 'address.city')); // true
console.log(_obj.has(user, 'address.district')); // false

_obj.map()

Run a map over each of the properties in the object.

const routes = {
  home: {
    controller: 'HomeController',
    url: '/',
  },
  about: {
    controller: 'HomeController',
    url: '/about',
  },
};

const links = _obj.map(routes, item => `https://domain.example${item.url}`);
const actions = _obj.map(routes, (item, key) => `${item.controller}@${key}`);

console.log(links); // ['https://domain.example/', 'https://domain.example/about']
console.log(actions); // ['HomeController@home', 'HomeController@about']

_obj.toQueryString()

Convert an object to a query string with each property.

const filters = { search: { name: 'Nam' }, sort_field: 'id', sort_direction: 'desc' };

console.log(_obj.toQueryString(filters)); // '?search[name]=Nam&sort_field=id&sort_direction=desc'

_obj.replicate()

Clone the object into a new, non-existing instance.

const user = new User();
const clone = _obj.replicate(user);

JSON.stringify(user) === JSON.stringify(clone); // true

_arr()

const { _arr } = require('@noravel/supporter');

# OR

import { _arr } from '@noravel/supporter';

_arr().get()

Gets the array value of this object.

console.log(_arr([1, 2, 3, 4, 5, 6]).get()); // [1, 2, 3, 4, 5, 6]

# OR

console.log(_arr([1, 2, 3, 4, 5, 6]).toArray()); // [1, 2, 3, 4, 5, 6]

_arr().chunk()

Chunk the array into chunks of the given size.

const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(_arr(data).chunk(2).get()); // [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

_arr().first()

Returns the first element of the array.

const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(_arr(data).first()); // 1

_arr().map()

Run a map over each of the items in the array.

const users = [
  {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
  {
    id: 2,
    name: 'John Doe',
  },
];

console.log(_arr(users).map(user => user.name)); // ['Trinh Tran Phuong Nam', 'John Doe']

_arr().mapToGroups()

Run a grouping map over the items. The callback should return an array with a single key/value pair.

const users = [
  {
    name: 'John Doe',
    department: 'Sales',
  },
  {
    name: 'Jane Doe',
    department: 'Sales',
  },
  {
    name: 'Johnny Doe',
    department: 'Marketing',
  },
];

console.log(_arr(users).mapToGroups(user => [user.department, user.name]));
/*
{
  Sales: ['John Doe', 'Jane Doe'],
  Marketing: ['Johnny Doe'],
}
*/

_arr().pluck()

Pluck an array of values from an array.

const users = [
  {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
  {
    id: 2,
    name: 'John Doe',
  },
];

console.log(_arr(users).pluck('id').get()); // [1, 2]

_arr().range()

Creates an array of numbers processing from "start" up to "end" (including "end").

console.log(_arr().range(10), get()); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(_arr().range(-10), get()); // [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
console.log(_arr().range(0, 10), get()); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(_arr().range(1, 10, 2), get()); // [1, 3, 5, 7, 9]
console.log(_arr().range(10, 1), get()); // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log(_arr().range(10, 1, 2), get()); // [10, 8, 6, 4, 2]

_arr().supplement()

Add elements to ensure the length of the array.

const data = ['a', 'b', 'c'];

console.log(_arr(data).supplement(5), get()); // ['a', 'b', 'c', null, null]
console.log(_arr(data).supplement(5, 'additional item'), get()); // ['a', 'b', 'c', 'additional item', 'additional item']

_arr().unique()

Filter out duplicate elements to ensure that array elements are unique.

const data = ['a', 'b', 1, 2, 'a', '1'];
console.log(_arr(data).unique().get()); // ['a', 'b', 1, 2, '1']

Check for a unique value for an array element that is an object by key.

const users = [
  {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
  {
    id: 2,
    name: 'John Doe',
  },
  {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
];

console.log(_arr(users).unique('id').get());
/*
[
  {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
  },
  {
    id: 2,
    name: 'John Doe',
  },
]
*/

_arr().toSelectOptions()

The first parameter is an array with 2 elements, the first element is the name of the key that will be taken as the value of the option and the second element is the name of the key that will be taken as the label.

The second parameter is an array with 2 elements, the first element is the name of the key that stores the value of the element retrieved by the key in the first parameter and the second element is the name of the key that stores the value of the element is obtained by the second key in the first parameter.

const users = [
  {
    id: 1,
    name: 'Trinh Tran Phuong Nam',
    email: '[email protected]',
  },
  {
    id: 2,
    name: 'John Doe',
    email: '[email protected]',
  }
];

const options = _arr(users).toSelectOptions(['id', 'name'], ['value', 'label']);
console.log(options);
/*
[
  {
    value: 1,
    label: 'Trinh Tran Phuong Nam',
  },
  {
    value: 2,
    label: 'John Doe',
  },
]
*/

// Example for react component
<select>
  {options.map(option => (
      <option value={option.value} key={option.value}>
        {option.label}
      </option>
    )
  )}
</select>

<Select options={options} />

In case the array elements are not an object. The element's index will be the value of the option, the element's value will be the label.

const status = ['new', 'in process', 'done'];
console.log(_arr(status).toSelectOptions());
/*
[
  {
    value: 0,
    label: 'new',
  },
  {
    value: 1,
    label: 'in process',
  },
  {
    value: 2,
    label: 'done',
  },
]
*/

_arr().count()

Count the element of this array.

console.log(_arr([1, 2, 3]).count()); // 3

_arr().isEmpty()

Check for empty array.

console.log(_arr([]).isEmpty()); // true
console.log(_arr([]).supplement(10).isEmpty()); // false

_str()

const { _str } = require('@noravel/supporter');

# OR

import { _str } from '@noravel/supporter';

_str().get()

Get the raw string value.

console.log(_str('Lorem ipsum').get()); // 'Lorem ipsum'

# OR

console.log(_str('Lorem ipsum').toString()); // 'Lorem ipsum'

You can also get a substring from the start position to the end position.

console.log(_str('Lorem ipsum').get(6, 11)); // 'ipsum'

_str().length()

Get the length of the string.

console.log(_str('Nam').length()); // 3

_str().after()

Return the remainder of a string after the first occurrence of a given value.

console.log(_str('This is my name').after(' ').get()); // 'is my name'

_str().afterLast()

Return the remainder of a string after the last occurrence of a given value.

console.log(_str('/path/to/filename.extension').afterLast('/').get()); // 'filename.extension'

_str().before()

Get the portion of a string before the first occurrence of a given value.

console.log(_str('This is my name').before(' ').get()); // 'This'

_str().beforeLast()

Get the portion of a string before the last occurrence of a given value.

console.log(_str('This is my name').beforeLast(' ').get()); // 'This is my'

_str().between()

Get the portion of a string between two given values.

console.log(_str('This is my name').between('This', 'name').get()); // ' is my '

_str().betweenFirst()

Get the smallest possible portion of a string between two given values.

console.log(_str('[a] bc [d]').betweenFirst('[', ']').get()); // 'a'
console.log(_str('[a] bc [d]').between('[', ']').get()); // 'a] bc [d'

_str().bind()

Binds the values ​​to the given string.

const user = { user_id: 1, name: 'John Doe' };
const url = '/api/users/{user_id}/edit';

console.log(_str(url).bind(user).get()); // '/api/users/1/edit'
const user = { user_id: 1, name: 'John Doe' };
const url = '/api/users/{0}/edit';

console.log(_str(url).bind(user.user_id).get()); // '/api/users/1/edit'
const user = { user_id: 1, name: 'John Doe' };
const post = { post_id: 1812, title: 'Title', content: 'Content' };
const url = '/api/users/{0}/post/{1}/edit';

console.log(_str(url).bind(user.user_id, post.post_id).get()); // '/api/users/1/post/1812/edit'
console.log(_str(url).bind([user.user_id, post.post_id]).get()); // '/api/users/1/post/1812/edit'

_str().append()

Append the given values to the string.

console.log(_str('This is').append(' my name').get()); // 'This is my name'

_str().prepend()

Prepend the given values to the string.

console.log(_str('/api/users').prepend('https://domain.example').get()); // 'https://domain.example/api/users'

_str().title()

Convert the given string to proper case.

console.log(_str('trinh tran phuong nam').title().get()); // 'Trinh Tran Phuong Nam'

_str().studly()

Convert a value to studly caps case.

console.log(_str('phuong_nam').studly().get()); // 'PhuongNam'

_str().camel()

Convert a value to camel case.

console.log(_str('phuong_nam').camel().get()); // 'phuongNam'

_str().lower()

Convert the given string to lower-case.

console.log(_str('NAM').lower().get()); // 'nam'

_str().upper()

Convert the given string to upper-case.

console.log(_str('nam').upper().get()); // 'NAM'

_str().nonUnicode()

Remove Vietnamese unicode characters from the string.

console.log(_str('Trịnh Trần Phương Nam').upper().get()); // 'Trinh Tran Phuong Nam'

_str().snake()

Convert a string to snake case.

console.log(_str('trinhTranPhuongNam').snake().get()); // 'trinh_tran_phuong_nam'

console.log(_str('trinhTranPhuongNam').snake('-').get()); // 'trinh-tran-phuong-nam'

_str().kebab()

Convert a string to kebab case.

console.log(_str('trinhTranPhuongNam').kebab().get()); // 'trinh-tran-phuong-nam'

_str().escapeHtml()

Escape HTML character.

console.log(_str('<p>Hello world</p>').escapeHtml().get()); // '&lt;p&gt;Hello world&lt;/p&gt;'

_str().limit()

Limit the number of characters in a string.

console.log(_str('The quick brown fox jumps over the lazy dog').limit(20).get()); // 'The quick brown fox...'

_str().random()

Generate a more truly "random" string.

console.log(_str().random(20)); // 'kvyufaqbosqlcojacnqo'
console.log(_str().random(20, { includeUppercase: true })); // 'KJqGfjKjccCjHnmmxyeM'
console.log(_str().random(20, { includeNumbers: true })); // 'h372ysnmr71klxekb4fs'

// full options
const options = {
  includeUppercase: true,
  includeNumbers: true,
  includeSymbols: true,
};
const password = _str().random(20, options);

console.log(password); // '6!?iR(2)iQW}>UY})owi'

_str().shuffle()

Randomly shuffles a string.

console.log(_str('abcdefghijklmnopqrstuvwxyz').shuffle().get()); // 'zjmpnleuqfcsakigwhoxrdytbv'

_str().replace()

Replace the given value in the given string.

console.log(
  _str('Hello everyone')
    .replace(/^Hello/, 'Hi')
    .get(),
); // 'Hi everyone'

_str().replaceAt()

Replace the given value in the given string from a specific position.

console.log(_str('Hello everyone').replaceAt(2, '!!').get()); // 'He!!o everyone'

_str().splice()

Split a string from a specific position and then insert the splice into the slice.

console.log(_str('Hello everyone!!!').splice(6, 8, '**everyone**').get()); // 'Hello **everyone**!!!'

_str().slice()

Extracts a section of this string and returns it as a new string. The start value is the position taken from and the end value is the position taken to. Start = 0 is equivalent to the first character of the string. The ending value includes the character at that position.

const str = 'The quick brown fox jumps over the lazy dog.';

console.log(_str(str).slice(31).get()); // 'the lazy dog.'
console.log(_str(str).slice(4, 19).get()); // 'quick brown fox'
console.log(_str(str).slice(-4).get()); // 'dog.'
console.log(_str(str).slice(-9, -5).get()); // 'lazy'
console.log(_str(str).slice(-9).upper().slice(0, 8).get()); // 'LAZY DOG'

_str().padStart()

Pads a given value in front of a given string until the given length is reached.

console.log(_str('1').padStart(2, '0').get()); // '01'

const email = '[email protected]';
const marked = _str(email)
  .before('@')
  .slice(-3)
  .padStart(_str(email).before('@').length(), '*')
  .append(_str(email).after('@').prepend('@').get())
  .get();
console.log(marked); // '***[email protected]'

_str().padEnd()

Pads a given value behind a given string until the given length is reached.

console.log(_str('200').padEnd(10, '-').get()); // '200-------'
console.log(_str('200').padEnd(5)); // '200     '

_str().caseString()

Casts a value to a string type.

console.log(_str().caseString({ id: 1, name: 'Nam' })); // '[object Object]'
console.log(_str().caseString([1, 2, 3])); // '1,2,3'
console.log(_str().caseString({ toString: () => 'Stringable' })); // 'Stringable'
console.log(_str().caseString(NaN)); // 'NaN'
console.log(_str().caseString(() => {})); // '() => {}'
console.log(
  _str().caseString(function () {
    return 'this is a function';
  }),
); // function () { return 'this is a function'; }

helper

isset()

Determine if a variable is declared and is different than null.

const { isset } = require('@noravel/supporter');

# OR

import { isset } from '@noravel/supporter';

Except for undefined and null, everything will return true;

console.log(isset(undefined)); // false
console.log(isset(null)); // false

empty()

Determine whether a variable is empty.

const { empty } = require('@noravel/supporter');

# OR

import { empty } from '@noravel/supporter';
console.log(empty(undefined)); // true
console.log(empty(null)); // true
console.log(empty('')); // true
console.log(empty(false)); // true
console.log(empty(0)); // true
console.log(empty([])); // true
console.log(empty({})); // true
console.log(
  empty({
    items: [],
    count() {
      return this.items.length;
    },
  }),
); // true
console.log(
  empty({
    isEmpty() {
      return true;
    },
  }),
); // true

typeOf()

If you want to check the exact data type then typeOf will help you.

const { typeOf } = require('@noravel/supporter');

# OR

import { typeOf } from '@noravel/supporter';

What makes this function different from typeof is:

console.log(typeof []); // object
console.log(typeOf([])); // array

console.log(typeof null); // object
console.log(typeOf(null)); // null

class A {}
console.log(typeof A); // function
console.log(typeOf(A)); // constructor
function* inf() {
  let i = 1;
  while (true) {
    yield i;
    i++;
  }
}
console.log(typeof inf); // function
console.log(typeOf(inf)); // generatorfunction

isJSON()

Check if a string value is json.

console.log(isJSON('{}')); // true
console.log(isJSON('[]')); // true
console.log(isJSON('nam')); // false

queryStringToObject()

Convert a query string to an object.

console.log(queryStringToObject('?search[name]=Nam&sort_field=id&sort_direction=desc'));

// { search: { name: 'Nam' }, sort_field: 'id', sort_direction: 'desc' }