0.0.2 • Published 2 years ago

paramser v0.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

Paramser

Collection of small methods to help you to manipulate the URL search params. This package uses URLSearchParams browser API under the hood (no dependencies!). Package's API is simple, yet very powerful. Check out the documentation below on how to use it.

Why bother?

  • simple API
  • small methods responsible for single functionality
  • uses browser API URLSearchParams

Requirements

  • Node >= 10.x.x (if you need it for SSR)

Installation

Just install the package and import a hook that you want to use.

npm i paramser

or

yarn add paramser
import { appendParam } from 'paramser';
import { excludeParam } from 'paramser';
import { getAllParams } from 'paramser';
import { getParam } from 'paramser';
import { hasParam } from 'paramser';
import { pickParam } from 'paramser';
import { stringifyParams } from 'paramser';

Usage

getParams

Returns the values for a specific search param.

// With single param in the search
getParam('?topic=api', 'topic'); // Returns 'api'

// With multiple params in the search
getParam('?topic=api&topic=not-an-api', 'topic'); // Returns ['api', 'not-an-api']

// Parse params to numbers when possible
getParam('?topic=api&amount=121', 'amount', { parseNumbers: true }); // Returns 121

// Parse params to booleans when possible
getParam('?topic=api&isValid=true', 'isValid', { parseBooleans: true }); // Returns true
NameTypeDescriptionRequired
searchstringSearch params from the URLtrue
paramKeystringName of the param to gettrue
options.parseNumbersbooleanParse to number type if possiblefalse
options.parseBooleansbooleanParse to boolean type if possiblefalse

getAllParams

Returns all params. It can either be an object with key/value pairs or array with just keys or values.

// Get object with key/value pairs
getAllParams('?topic=api&technology=nodejs&level=junior');
// Returns {
//  topic: 'api',
//  technology: 'nodejs',
//  level: 'junior'
// }

// Parse params to numbers and booleans when possible
getAllParams('?topic=api&technology=nodejs&amount=121&isValid=true', {
  parseNumbers: true,
  parseBooleans: true,
});
// Returns {
//  topic: 'api',
//  technology: 'nodejs',
//  amount: 121,
//  isValid: true
// }

// Get just an array of keys
getAllParams('?topic=api&technology=nodejs&level=junior', {
  keysOnly: true,
}); // Returns ['topic', 'technology', 'level']

// Get just an array of keys
getAllParams('?topic=api&technology=nodejs&level=junior', {
  valuesOnly: true,
}); // Returns ['api', 'nodejs', 'junior']

// Parse params to numbers and booleans when possible
getAllParams('?topic=api&technology=nodejs&amount=121&isValid=true', {
  valuesOnly: true,
  parseNumbers: true,
  parseBooleans: true,
}); // Returns ['api', 'nodejs', 121, true]
NameTypeDescriptionRequired
searchstringSearch params from the URLtrue
options.keysOnlybooleanIf set to true, returns only an array of keysfalse
options.valuesOnlybooleanIf set to true, returns only an array of valuesfalse
options.parseNumbersbooleanParse to number type if possiblefalse
options.parseBooleansbooleanParse to booleans type if possiblefalse

appendParam

Appends additional search params. Returns updated params string.

// Appends two params
appendParam('?topic=api', {
  technology: 'nodejs',
  level: 'junior',
});
// Returns `topic=api&technology=nodejs&level=junior`
appendParam(
  '?topic=api',
  { technology: ['javascript', 'nodejs', 'react'] },
  { arrayType: 'separator', separator: '|' }
);
// Returns `topic=api&technology=api|nodejs|react`

appendParam(
  '?topic=api',
  { technology: ['javascript', 'nodejs', 'react'] },
  { arrayType: 'separator', separator: ',' }
);
// Returns `topic=api&technology=api,nodejs,react`

appendParam(
  '?topic=api',
  { technology: ['javascript', 'nodejs', 'react'] },
  { arrayType: 'bracket' }
);
// Returns `topic=api&technology[]=api&technology[]=nodejs&technology[]=react`

appendParam(
  '?topic=api',
  { technology: ['javascript', 'nodejs', 'react'] },
  { arrayType: 'indexedBracket' }
);
// Returns `topic=api&technology[0]=api&technology[1]=nodejs&technology[2]=react`
NameTypeDescriptionRequired
searchstringSearch params from the URLtrue
paramsobjectKey/value pairs of params that needs to be appendedtrue

excludeParam

Removes search params from the url. Returns updated params string.

// Removes single param
excludeParam('?topic=api&technology=nodejs', 'technology');
// Returns `topic=api`

// Removes multiple params
excludeParam('?topic=api&technology=nodejs&level=junior', [
  'topic',
  'technology',
]);
// Returns `level=junior`
NameTypeDescriptionRequired
searchstringSearch params from the URLtrue
paramsstring or array<string>Param or array of params to be removedtrue

hasParam

Checks if param exists.

hasParam('?topic=api&technology=nodejs&level=junior', 'topic');
// Returns true

hasParam('?topic=api&level=junior', 'technology');
// Returns false
NameTypeDescriptionRequired
searchstringSearch params from the URLtrue
paramsstringParam that existence is to be checkedtrue

pickParam

Picks which param(s) needs to remain and removes other ones.

// Picks only topic param
pickParam('?topic=api&technology=nodejs&level=junior', 'topic');
// Returns `topic=api`

// Picks two params param
pickParam('?topic=api&technology=nodejs&level=junior', ['topic', 'level']);
// Returns `topic=api&level=junior`
NameTypeDescriptionRequired
searchstringSearch params from the URLtrue
paramsstring or array<string>Param or array of params to remaintrue

stringifyParams

Creates a search param string, based on provided object.

stringifyParams({ topic: 'api', technology: 'nodejs' });
// Returns `topic=api&technology=nodejs`

An array can also be passed as a value of the param. There are few options to do that.

stringifyParams(
  { topic: ['api', 'nodejs', 'react'] },
  { arrayType: 'separator', separator: '|' }
);
// Returns `topic=api|nodejs|react`

stringifyParams(
  { topic: ['api', 'nodejs', 'react'] },
  { arrayType: 'separator', separator: ',' }
);
// Returns `topic=api,nodejs,react`

stringifyParams(
  { topic: ['api', 'nodejs', 'react'] },
  { arrayType: 'bracket' }
);
// Returns `topic[]=api&topic[]=nodejs&topic[]=react`

stringifyParams(
  { topic: ['api', 'nodejs', 'react'] },
  { arrayType: 'indexedBracket' }
);
// Returns `topic[0]=api&topic[1]=nodejs&topic[2]=react`
NameTypeDescriptionRequired
paramsobject<string, string or array>Object with params to stringifytrue
options.arrayType'separator' or 'bracket' or 'indexedBracket'Defines how array should be parsedfalse
options.separatorstringDefines what kind of separator will be used in array. Use with care as not all characters will work with the URLfalse

Tips

  • to get the params from your url, you can use:
    • in most cases -> window.location.search
    • with React Router -> this.props.location.search or props.location.search
    • with Reach Router -> import { useLocation } from "@reach/router" and then const { search } = useLocation()
  • notice that methods that return the search string, will return it without the question mark i.e. topic=api&technology=nodejs, it's because assigning new string to location.search will add it automatically location.search = topic=api&technology=nodejs -> ?topic=api&technology=nodejs

Browser support

  • all major desktop and mobile browsers apart from Internet Explorer (there's no plan for supporting it)

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Maciek Grzybek - @maciek_g88 - maciekgrzybek1@gmail.com - www.maciekgrzybek.dev