Socket
Socket
Sign inDemoInstall

swagger-tools

Package Overview
Dependencies
Maintainers
1
Versions
78
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

swagger-tools - npm Package Compare versions

Comparing version 0.5.1 to 0.5.2

148

lib/specs.js

@@ -32,2 +32,4 @@ /*

var jjve = require('jjve');
var expressStylePath = require('../middleware/helpers').expressStylePath;
var pathToRegexp = require('path-to-regexp');
var validators = require('./validators');

@@ -464,2 +466,3 @@

var modelRefs = {};
var modelsById = {};
var addModelRef = function addModelRef (modelId, modelRef) {

@@ -495,3 +498,2 @@ if (_.isUndefined(modelRefs[modelId])) {

};
var modelsById = {};

@@ -527,3 +529,13 @@ // Build the authorization model

var aPath = ['apis', index.toString()];
var pKeys = [];
var pParams = [];
var pRegex = pathToRegexp(expressStylePath('', api.path), pKeys).toString();
var rParams = _.map(pKeys, function (key) { return key.name; });
// Validate duplicate resource path
if (seenApiPaths.indexOf(pRegex) > -1) {
createErrorOrWarning('DUPLICATE_API_PATH', 'API path (or equivalent) already defined: ' + api.path,
api.path, aPath.concat('path'), result.errors);
}
// Validate operations

@@ -563,3 +575,3 @@ _.reduce(api.operations, function (seenMethods, operation, index) {

// Validate parameters
_.each(operation.parameters, function (parameter, index) {
_.reduce(operation.parameters, function (seenParameters, parameter, index) {
// Add model references from parameter type/items

@@ -572,15 +584,36 @@ if (spec.primitives.indexOf(parameter.type) === -1) {

if (_.isUndefined(parameter.defaultValue)) {
return;
// Validate duplicate parameter name
validateNoExist(seenParameters, parameter.name, 'OPERATION_PARAMETER', 'Operation parameter',
oPath.concat('parameters', index.toString(), 'name'), result.errors);
// Keep track of path parameters
if (parameter.paramType === 'path') {
if (rParams.indexOf(parameter.name) === -1) {
createErrorOrWarning('UNRESOLVABLE_API_PATH_PARAMETER',
'API path parameter could not be resolved: ' + parameter.name, parameter.name,
oPath.concat('parameters', index.toString(), 'name'), result.errors);
}
if (pParams.indexOf(parameter.name) === -1) {
pParams.push(parameter.name);
}
}
// Validate default value against constraints
validateParameterConstraints(spec, parameter, parameter.defaultValue,
oPath.concat('parameters', index.toString(), 'defaultValue'),
result.errors);
if (!_.isUndefined(parameter.defaultValue)) {
// Validate default value against constraints
validateParameterConstraints(spec, parameter, parameter.defaultValue,
oPath.concat('parameters', index.toString(), 'defaultValue'),
result.errors);
}
return seenParameters.concat(parameter.name);
}, []);
// Validate missing path parameters (in path but not in operation.parameters)
_.each(_.difference(rParams, pParams), function (unused) {
createErrorOrWarning('MISSING_API_PATH_PARAMETER',
'API requires path parameter but it is not defined: ' + unused, api.path,
aPath.concat('path'), result.errors);
});
// Validate duplicate resource path
validateNoExist(seenApiPaths, api.path, 'API_PATH', 'API path', aPath.concat('path'), result.errors);
// Validate unique response code

@@ -610,3 +643,3 @@ _.reduce(operation.responseMessages, function (seenResponseCodes, responseMessage, index) {

return seenApiPaths.concat(api.path);
return seenApiPaths.concat(pRegex);
}, []);

@@ -682,3 +715,3 @@

_.each(_.difference(scopes, apiAuthRefs[name] || []), function (scope, index) {
_.each(_.difference(scopes, apiAuthRefs[name] || []), function (scope) {
var sIndex = scopes.indexOf(scope);

@@ -750,16 +783,15 @@

// Validate the Paths
_.each(rlOrSO.paths, function (path, name) {
_.reduce(rlOrSO.paths, function (seenPaths, path, name) {
var aPath = ['paths', name];
var pKeys = [];
var pParams = [];
var pRegex = pathToRegexp(expressStylePath('', name), pKeys).toString();
var rParams = _.map(pKeys, function (key) { return key.name; });
// Validate parameter constraints
_.each(path.parameters, function (parameter, index) {
if (!_.isUndefined(parameter.schema)) {
parameter = parameter.schema;
// Validate duplicate resource path
if (seenPaths.indexOf(pRegex) > -1) {
createErrorOrWarning('DUPLICATE_API_PATH', 'API path (or equivalent) already defined: ' + name,
name, aPath, response.errors);
}
validateParameterConstraints(spec, parameter, parameter.default,
aPath.concat('parameters', index.toString(), 'schema', 'default'),
response.errors);
}
});
// Validate the Operations

@@ -770,2 +802,36 @@ _.each(path, function (operation, method) {

if (method === 'parameters') {
// Validate parameter constraints
_.reduce(path.parameters, function (seenParameters, parameter, index) {
// Validate duplicate parameter name
validateNoExist(seenParameters, parameter.name, 'API_PARAMETER', 'API parameter',
oPath.concat(index.toString(), 'name'), response.errors);
// Keep track of path parameters
if (parameter.in === 'path') {
if (rParams.indexOf(parameter.name) === -1) {
createErrorOrWarning('UNRESOLVABLE_API_PATH_PARAMETER',
'API path parameter could not be resolved: ' + parameter.name, parameter.name,
oPath.concat(index.toString(), 'name'), response.errors);
}
if (pParams.indexOf(parameter.name) === -1) {
pParams.push(parameter.name);
}
}
if (!_.isUndefined(parameter.schema)) {
parameter = parameter.schema;
if (_.isUndefined(parameter.default)) {
return;
}
validateParameterConstraints(spec, parameter, parameter.default,
oPath.concat('parameters', index.toString(), 'schema', 'default'),
response.errors);
}
return seenParameters.concat(parameter.name);
}, []);
return;

@@ -781,3 +847,20 @@ }

// Validate parameter constraints
_.each(path.parameters, function (parameter, index) {
_.reduce(operation.parameters, function (seenParameters, parameter, index) {
// Validate duplicate parameter name
validateNoExist(seenParameters, parameter.name, 'OPERATION_PARAMETER', 'Operation parameter',
oPath.concat('parameters', index.toString(), 'name'), response.errors);
// Keep track of path parameters
if (parameter.in === 'path') {
if (rParams.indexOf(parameter.name) === -1) {
createErrorOrWarning('UNRESOLVABLE_API_PATH_PARAMETER',
'API path parameter could not be resolved: ' + parameter.name, parameter.name,
oPath.concat('parameters', index.toString(), 'name'), response.errors);
}
if (pParams.indexOf(parameter.name) === -1) {
pParams.push(parameter.name);
}
}
if (!_.isUndefined(parameter.schema)) {

@@ -794,8 +877,19 @@ parameter = parameter.schema;

}
});
return seenParameters.concat(parameter.name);
}, []);
});
// Validate missing path parameters (in path but not in operation.parameters)
_.each(_.difference(rParams, pParams), function (unused) {
createErrorOrWarning('MISSING_API_PATH_PARAMETER',
'API requires path parameter but it is not defined: ' + unused, name,
aPath, response.errors);
});
// TODO: Validate the definitions
// TODO: Validate definition references
});
return seenPaths.concat(pRegex);
}, []);
}

@@ -802,0 +896,0 @@

2

package.json
{
"name": "swagger-tools",
"version": "0.5.1",
"version": "0.5.2",
"description": "Various tools for using and integrating with Swagger.",

@@ -5,0 +5,0 @@ "main": "index.js",

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc