Skip to content

Commit 1df493c

Browse files
committed
refactor: parse integer phc params
1 parent b4d2dd1 commit 1df493c

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

lib/phc.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const NAME_RE = /^[\da-z-]{1,32}$/,
44
VALUE_RE = /^[\d+./A-Za-z-]+$/,
5+
INTEGER_RE = /^-?(?:0|[1-9]\d*)$/,
56
PHC_RE = new RegExp( String.raw`^` +
67
String.raw`\$(?<id>[\da-z-]{1,32})` + // id
78
String.raw`(?:\$v=(?<version>\d+))?` + // version
@@ -100,7 +101,7 @@ export function toPhc ( { id, version, params, salt, hash, defaultParams, sortPa
100101
return string;
101102
}
102103

103-
export function fromPhc ( string, { defaultParams, decodeSalt = true, decodeHash = true } = {} ) {
104+
export function fromPhc ( string, { defaultParams, decodeNumbers = true, decodeSalt = true, decodeHash = true } = {} ) {
104105
const match = string.match( PHC_RE );
105106
if ( !match ) throw "PHC string is not valid";
106107

@@ -130,7 +131,13 @@ export function fromPhc ( string, { defaultParams, decodeSalt = true, decodeHash
130131
}
131132
else {
132133
data.params ??= {};
133-
data.params[ name ] = value;
134+
135+
if ( decodeNumbers && typeof value === "string" && INTEGER_RE.test( value ) ) {
136+
data.params[ name ] = Number.parseInt( value );
137+
}
138+
else {
139+
data.params[ name ] = value;
140+
}
134141
}
135142
}
136143
}
@@ -147,9 +154,14 @@ export function fromPhc ( string, { defaultParams, decodeSalt = true, decodeHash
147154
for ( const param of match.groups.params.split( "," ) ) {
148155
const [ name, value ] = param.split( "=" );
149156

150-
if ( name === "v" ) throw "PHC params are not valid";
157+
if ( name === "v" ) continue;
151158

152-
data.params[ name ] = value;
159+
if ( decodeNumbers && INTEGER_RE.test( value ) ) {
160+
data.params[ name ] = Number.parseInt( value );
161+
}
162+
else {
163+
data.params[ name ] = value;
164+
}
153165
}
154166
}
155167

0 commit comments

Comments
 (0)