![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
extract-params
Advanced tools
npm install extract-params --save
Then, in your app:
var extractParams = require('extract-params').extractParams;
// or
var extractParamsInFirstMatch = require('extract-params').extractParamsInFirstMatch;
Tests whether str
matches the given parameterized pattern. If match is successful, it returns a hash of parameters and their values. Otherwise, extractParams
returns null
.
The match is considered successful only if str
matches the pattern
at the start and at the end (see examples 2 and 3 below).
var params = extractParams(
'/users/123/friends/456/photo',
'/users/:userId/friends/:friendId/photo'
);
/*
Returns:
{
userId: '123',
friendId: '456'
}
*/
var params = extractParams(
'/home/users/123',
'/users/:userId'
);
/*
Returns:
null
because `str` doesn't match the `pattern` at the start.
*/
var params = extractParams(
'/users/123/friends/456',
'/users/:userId/friends'
);
/*
Returns:
null
because `str` doesn't match the `pattern` at the end.
*/
var params = extractParams(
'/USERS/123/Friends/456/photo',
'/users/:userId/friends/:friendId/photo'
);
/*
Returns:
null
because the pattern is case sensitive by default
*/
var params = extractParams(
'/USERS/123/Friends/456/photo',
{
pattern: '/users/:userId/friends/:friendId/photo',
caseSensitive: false
}
);
/*
Returns:
{
userId: '123',
friendId: '456'
}
*/
function lowercaseValues(params) {
return Object.keys(params).reduce(function(result, param) {
result[param] = params[param].toLowerCase();
return result;
}, {});
}
var params = extractParams(
'/users/Misha/friends/MARK/photo',
{
pattern: '/users/:user/friends/:friend/photo',
transform: lowercaseValues
}
);
/*
Returns:
{
user: 'misha',
friend: 'mark'
}
*/
var companyRegex = /^[a-zA-Z]+$/;
var employeeRegex = /^[a-z-]+$/;
function validator(params) {
return typeof params.company === 'string' && companyRegex.test(params.company) &&
typeof params.employee === 'string' && employeeRegex.test(params.employee) ? params : null;
}
var params = extractParams(
'/companies/Yahoo7/employees/david-brown',
{
pattern: '/companies/:company/employees/:employee',
transform: validator
}
);
/*
Returns:
null
because 'Yahoo7' contains a number
*/
Tests whether str
matches one of the parameterized patterns. If none of the patterns
match, extractParamsInFirstMatch
returns null
. Otherwise, it returns the matching pattern index and its parameters.
var params = extractParamsInFirstMatch(
'/users/123',
[
{ pattern: '/users/:userId/friends/:friendId/photo' },
{ pattern: '/users/:userId/friends/:friendId' },
{ pattern: '/users/:userId/friends' },
{ pattern: '/users/:userId' },
{ pattern: '/users' }
]
);
/*
Returns:
{
patternIndex: 3,
params: {
userId: '123'
}
}
*/
var params = extractParamsInFirstMatch(
'/users/123/subscriptions',
[
{ pattern: '/users/:userId/friends/:friendId/photo' },
{ pattern: '/users/:userId/friends/:friendId' },
{ pattern: '/users/:userId/friends' },
{ pattern: '/users/:userId' },
{ pattern: '/users' }
]
);
/*
Returns:
null
because none of the patterns match.
*/
function userIdValidator(params) {
if (!('userId' in params)) {
return params;
}
// Without this check, '/users/1234/friends/567' would match '/users/:userId'
// with { userId: '1234/friends/567' }
if (!(/^\d+$/.test(params.userId))) {
return null;
}
var userId = parseInt(params.userId, 10);
return userId >= 1 && userId <= 999 ? params : null;
}
var params = extractParamsInFirstMatch(
'/users/1234/friends/567',
[
{ pattern: '/users/:userId/friends/:friendId/photo', transform: userIdValidator },
{ pattern: '/users/:userId/friends/:friendId', transform: userIdValidator },
{ pattern: '/users/:userId/friends', transform: userIdValidator },
{ pattern: '/users/:userId', transform: userIdValidator },
{ pattern: '/users' }
]
);
/*
Returns:
null
because userId > 999
*/
The functions in this library operate on a pattern
type.
In its simplest form, pattern is just a string, e.g. /users
.
Patterns can have parameters, e.g. /users/:userId/friends/:friendId/photo
.
Parameters must start with a :
, and can contain letters only. Therefore, :username
, :userName
, and :USERNAME
are valid parameters, but :user-name
, :user_name
and :iphone6
are not.
For more advanced patterns, an object with the following keys can be provided:
pattern
- (required) The pattern string.caseSensitive
- (optional) Boolean indicating whether the pattern is considered case sensitive or not. Exampletrue
.transform
- (optional) Function that takes the extracted params, and returns a manipulated version of them. Examplenull
, the match fails. Examplenpm test
FAQs
Extract parameters from a string based on a pattern
The npm package extract-params receives a total of 0 weekly downloads. As such, extract-params popularity was classified as not popular.
We found that extract-params demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.