permit-params
v1.0.3
Published
Simple module to permit parameters with schema
Downloads
252
Readme
Introduction
Simple package to permit parameters (from client for Node.js) to make it be strong parameters.
The behavior is like RoR ActionController::Parameters
's behavior.
Installation
$ npm install permit-params
Usage
import permitParams from 'permit-params';
const params = {
name: 'Alpha',
addresses: [
{
buildNumber: '0112',
streetName: 'King Abdulaziz Road',
city: 'Riyadh',
postalCode: '12643',
},
{
buildNumber: '0113',
streetName: 'King Abdulaziz Road',
postalCode: '12643',
},
{
buildNumber: '0114',
city: 'Riyadh',
postalCode: '12643',
},
],
favoriteGames: ['Pokémon', 'Dragon Quest', 'Grandia', 'Fire Emblem', 'Megaman'],
otherData: {
firstCase: 'just a string',
secondCase: ['array of string', null, 100],
thirdCase: {
test: 'test string',
},
fourthCase: [
{
test: 'test string',
},
],
fifthCase: [
{
test: ['test string'],
},
],
sixthCase: [
'test string',
{
test: ['test string'],
},
],
},
};
const strongParams = permitParams(
params,
'name',
{
favoriteGames: [],
addresses: ['buildNumber', 'streetName', 'city', 'postalCode'],
otherData: [
'firstCase',
{
secondCase: [],
thirdCase: ['test'],
fourthCase: ['test'],
fifthCase: [{ test: [] }],
sixthCase: [{ test: [] }],
},
],
},
);
console.log(strongParams); // will give the same object params, without element 'test string' of sixthCase
More example
permitParams(params, 'name'); // { name: 'Alpha' }
permitParams(params, { otherData: ['firstCase', 'seventhCase'] }); // { otherData: { firstCase: 'just a string' } }
permitParams(params, { favoriteGames: [] }); // { favoriteGames: ['Pokémon', 'Dragon Quest', 'Grandia', 'Fire Emblem', 'Megaman'] }
permitParams(params, { addresses: ['buildNumber'] }); // { addresses: [{ buildNumber: '0112' }, { buildNumber: '0113' }, { buildNumber: '0114' }] }
permitParams(params, { otherData: [{ sixthCase: [{ test: [] }] }] }); // { otherData: { sixthCase: [{ test: ['test string'] }] } }
Cheatsheets
To permit string/number/undefined/null parameter, use a
simple string
const params = { firstName: 'Alpha', lastName: 'Lucifer', gender: 'Male', }; permitParams(, 'firstName', 'lastName'); // { firstName: 'Alpha', lastName: 'Lucifer' }
To permit object parameter, use
key - value
. With key is the name of the parameter, value is array of attributes' name of the objectconst params = otherData: { firstCase: 'just a string', secondCase: 'a simple string', thirdCase: 'do not care', }; permitParams(params, { otherData: ['firstCase', 'secondCase'] }); // { otherData: { firstCase: 'just a string, secondCase: 'a simple string' } }
To permit array parameter, use
empty array ([])
const params = { favoriteGames: ['Pokémon', 'Dragon Quest', 'Grandia', 'Fire Emblem', 'Megaman'], }; permitParams(params, { favoriteGames: [] }); // { favoriteGames: ['Pokémon', 'Dragon Quest', 'Grandia', 'Fire Emblem', 'Megaman'] }
To permit array of object parameter, use
key - value
. With key is the name of the parameter, value is array of attributes' name of the objectconst params = { addresses: [ { buildNumber: '0112', streetName: 'King Abdulaziz Road', city: 'Riyadh', postalCode: '12643', }, { buildNumber: '0113', streetName: 'King Abdulaziz Road', postalCode: '12643', }, { buildNumber: '0114', city: 'Riyadh', postalCode: '12643', }, ], } permitParams(params, { addresses: ['buildNumber'] }); // { addresses: [{ buildNumber: '0112' }, { buildNumber: '0113' }, { buildNumber: '0114' }] }