Socket
Socket
Sign inDemoInstall

koas-parameters

Package Overview
Dependencies
63
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.0 to 0.1.1

55

createParameterHandler.js

@@ -1,3 +0,10 @@

import { SchemaValidationError } from 'koas-core';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createParameterHandler;
var _koasCore = require("koas-core");
function createSchema(definitions) {

@@ -7,17 +14,27 @@ if (definitions.length === 0) {

}
const r = definitions.filter(({ required }) => required).map(({ name }) => name);
const r = definitions.filter(({
required
}) => required).map(({
name
}) => name);
const fullSchema = {
additionalProperties: true,
properties: definitions.reduce((acc, { name, schema = {} }) => {
properties: definitions.reduce((acc, {
name,
schema = {}
}) => {
acc[name] = schema;
return acc;
}, {}),
}, {})
};
if (r.length) {
fullSchema.required = r;
}
return fullSchema;
}
export default function createParameterHandler(operationObject, parameters, parsers, validate) {
function createParameterHandler(operationObject, parameters, parsers, validate) {
const queryDefinitions = [];

@@ -39,2 +56,3 @@ const pathDefinitions = [];

}
return value;

@@ -50,3 +68,8 @@ }

}
const { items, type = 'string' } = pathSchema.properties[key];
const {
items,
type = 'string'
} = pathSchema.properties[key];
if (type === 'array') {

@@ -56,11 +79,14 @@ acc[key] = value.split('/').map(val => parse(items && items.type, val));

}
acc[key] = parse(type, value);
return acc;
}, {});
try {
await validate(ctx.params, pathSchema);
} catch (err) {
if (!(err instanceof SchemaValidationError)) {
if (!(err instanceof _koasCore.SchemaValidationError)) {
throw err;
}
ctx.throw(400, err.message, err.errors);

@@ -76,3 +102,8 @@ }

}
const { items, type = 'string' } = pathSchema.properties[key];
const {
items,
type = 'string'
} = pathSchema.properties[key];
if (type === 'array') {

@@ -83,2 +114,3 @@ const values = Array.isArray(value) ? value : [value];

}
if (Array.isArray(value)) {

@@ -88,11 +120,14 @@ acc[key] = value;

}
acc[key] = parse(type, value);
return acc;
}, {});
try {
await validate(ctx.query, querySchema);
} catch (err) {
if (!(err instanceof SchemaValidationError)) {
if (!(err instanceof _koasCore.SchemaValidationError)) {
throw err;
}
ctx.throw(400, err.message, err.errors);

@@ -102,2 +137,2 @@ }

};
}
}

49

koasParameters.js

@@ -1,3 +0,12 @@

import createParameterHandler from './createParameterHandler';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = koasParameters;
var _createParameterHandler = _interopRequireDefault(require("./createParameterHandler"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function identity(value) {

@@ -12,4 +21,6 @@ return value;

return false;
case 'true':
return true;
default:

@@ -19,25 +30,32 @@ return value;

},
integer: value => parseInt(value, 10),
number: parseFloat,
string: identity,
string: identity
};
export default function koasParameters({ parsers = {} } = {}) {
const combinedParsers = {
...defaultParsers,
...parsers,
function koasParameters({
parsers = {}
} = {}) {
const combinedParsers = { ...defaultParsers,
...parsers
};
return ({ spec, validate }) => {
return ({
spec,
validate
}) => {
const handlers = new Map();
Object.values(spec.paths).forEach(({ parameters, ...operations }) => {
Object.values(spec.paths).forEach(({
parameters,
...operations
}) => {
Object.values(operations).forEach(operationObject => {
handlers.set(
operationObject,
createParameterHandler(operationObject, parameters, combinedParsers, validate),
);
handlers.set(operationObject, (0, _createParameterHandler.default)(operationObject, parameters, combinedParsers, validate));
});
});
return async (ctx, next) => {
const { operationObject } = ctx.openApi;
const {
operationObject
} = ctx.openApi;
if (handlers.has(operationObject)) {

@@ -47,5 +65,6 @@ const handler = handlers.get(operationObject);

}
return next();
};
};
}
}

@@ -1,109 +0,125 @@

import createTestServer from 'koas-supertest';
"use strict";
import koasParameters from './koasParameters';
var _koasSupertest = _interopRequireDefault(require("koas-supertest"));
var _koasParameters = _interopRequireDefault(require("./koasParameters"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const spec = {
paths: {
'/bool/{value}': {
parameters: [
{
name: 'value',
in: 'path',
schema: { type: 'boolean' },
},
],
get: { responses: {} },
parameters: [{
name: 'value',
in: 'path',
schema: {
type: 'boolean'
}
}],
get: {
responses: {}
}
},
'/int/{value}': {
parameters: [
{
name: 'value',
in: 'path',
schema: { type: 'integer' },
},
],
get: { responses: {} },
parameters: [{
name: 'value',
in: 'path',
schema: {
type: 'integer'
}
}],
get: {
responses: {}
}
},
'/numeric/{value}': {
parameters: [
{
name: 'value',
in: 'path',
schema: { type: 'number' },
},
],
get: { responses: {} },
parameters: [{
name: 'value',
in: 'path',
schema: {
type: 'number'
}
}],
get: {
responses: {}
}
},
'/str/{value}': {
parameters: [
{
name: 'value',
in: 'path',
schema: { type: 'string' },
},
],
get: { responses: {} },
},
},
parameters: [{
name: 'value',
in: 'path',
schema: {
type: 'string'
}
}],
get: {
responses: {}
}
}
}
};
let api;
let params;
afterEach(() => {
params = undefined;
});
describe('defaults', () => {
beforeEach(async () => {
api = await createTestServer(spec, [
koasParameters(),
() => (ctx, next) => {
({ params } = ctx);
return next();
},
]);
api = await (0, _koasSupertest.default)(spec, [(0, _koasParameters.default)(), () => (ctx, next) => {
({
params
} = ctx);
return next();
}]);
});
it('should a boolean value true', async () => {
await api.get('/bool/true');
expect(params).toStrictEqual({ value: true });
expect(params).toStrictEqual({
value: true
});
});
it('should a boolean value false', async () => {
await api.get('/bool/false');
expect(params).toStrictEqual({ value: false });
expect(params).toStrictEqual({
value: false
});
});
it('should parse an integer', async () => {
await api.get('/int/42');
expect(params).toStrictEqual({ value: 42 });
expect(params).toStrictEqual({
value: 42
});
});
it('should parse a number', async () => {
await api.get('/numeric/13.37');
expect(params).toStrictEqual({ value: 13.37 });
expect(params).toStrictEqual({
value: 13.37
});
});
it('should leave a string as-is', async () => {
await api.get('/str/1337');
expect(params).toStrictEqual({ value: '1337' });
expect(params).toStrictEqual({
value: '1337'
});
});
});
describe('custom parsers', () => {
beforeEach(async () => {
api = await createTestServer(spec, [
koasParameters({ parsers: { string: value => `${value}-postfix` } }),
() => (ctx, next) => {
({ params } = ctx);
return next();
},
]);
api = await (0, _koasSupertest.default)(spec, [(0, _koasParameters.default)({
parsers: {
string: value => `${value}-postfix`
}
}), () => (ctx, next) => {
({
params
} = ctx);
return next();
}]);
});
it('should leave a string as-is', async () => {
await api.get('/str/value');
expect(params).toStrictEqual({ value: 'value-postfix' });
expect(params).toStrictEqual({
value: 'value-postfix'
});
});
});
});
{
"name": "koas-parameters",
"version": "0.1.0",
"version": "0.1.1",
"author": "Remco Haszing <remcohaszing@gmail.com>",

@@ -20,4 +20,4 @@ "license": "MIT",

"devDependencies": {
"koas-supertest": "^0.1.0"
"koas-supertest": "^0.1.1"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc