Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions src/param/_abstract.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ class Abstract {
required = true,
nullable = false,
normalize = true,
getter = null
getter = null,
lowercase = false
} = {}) {
assert(Object.keys(positionMapping).includes(position), `Unknown Parameter Position: ${position}`);
assert(
Expand All @@ -29,6 +30,7 @@ class Abstract {
this.required = required;
this.nullable = nullable;
this.normalize = normalize;
this.lowercase = lowercase;
this.getter = getter;
this.type = null;
}
Expand All @@ -38,7 +40,7 @@ class Abstract {
}

get(event) {
const result = get(event, `${positionMapping[this.position]}.${
let result = get(event, `${positionMapping[this.position]}.${
this.position === 'header'
? this.name.toLowerCase()
: this.name
Expand All @@ -56,18 +58,23 @@ class Abstract {
value: result
});
}
const r = this.getter !== null && ![undefined, null].includes(result)
result = this.getter !== null && ![undefined, null].includes(result)
? (params) => this.getter(result, params)
: result;
if (typeof r !== 'string' || this.normalize === false) {
return r;
if (typeof result === 'string') {
if (this.normalize !== false) {
result = result
// eslint-disable-next-line no-control-regex
.replace(/[\x00-\x09\x0B\x1F\x7F-\x9F]/g, ' ')
.replace(/(?<=\s) /g, '')
.replace(/ (?=\s)/g, '')
.replace(/\s+$|^\s+/g, '');
}
if (this.lowercase === true) {
result = result.toLowerCase();
}
}
return r
// eslint-disable-next-line no-control-regex
.replace(/[\x00-\x09\x0B\x1F\x7F-\x9F]/g, ' ')
.replace(/(?<=\s) /g, '')
.replace(/ (?=\s)/g, '')
.replace(/\s+$|^\s+/g, '');
return result;
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/param/email.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ import RegEx from './regex.js';

class Email extends RegEx {
constructor(name, position, opts) {
super(name, position, { ...opts, regex: /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/ });
super(name, position, {
...opts,
regex: /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,
lowercase: true
});
}
}
export default Email;
53 changes: 53 additions & 0 deletions test/param/email.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { expect } from 'chai';
import { describe } from 'node-tdd';
import { Api } from '../../src/index.js';

const api = Api();

describe('Testing Email Parameter', () => {
describe('Testing query param', () => {
let queryParam;
before(() => {
queryParam = api.Email('value', 'query');
});

it('Testing valid query parameter', () => {
expect(queryParam.get({
queryStringParameters: {
value: 'TEST@test.ca'
}
})).to.equal('test@test.ca');
});

it('Testing invalid query parameter (rejected string)', () => {
expect(() => queryParam.get({
queryStringParameters: {
value: ''
}
})).to.throw('Invalid Value for query-Parameter "value" provided.');
});
});

describe('Testing json param', () => {
let jsonParam;
before(() => {
jsonParam = api.Email('value', 'json');
});

it('Testing valid json parameter', () => {
expect(jsonParam.get({
body: {
value: 'TEST@test.ca'
}
})).to.equal('test@test.ca');
});

it('Testing invalid json parameter (rejected string)', () => {
expect(() => jsonParam.get({
body: {
value: 'undefined'
}
})).to.throw('Invalid Value for json-Parameter "value" provided.');
});
});
});