Skip to content

Commit

Permalink
Merge pull request #140 from apiaryio/96-js-version
Browse files Browse the repository at this point in the history
Rewrite Gavel to JavaScript
  • Loading branch information
honzajavorek committed May 2, 2019
2 parents 58f132e + 81f4601 commit 364b235
Show file tree
Hide file tree
Showing 92 changed files with 6,806 additions and 5,307 deletions.
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# Distributed code (source code lives in /src)
/lib

# Common for .gitignore and .npmignore
src-cov/
lcov/
Expand Down
3 changes: 0 additions & 3 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# Source code (distributed code lives in /lib)
/src

# Common for .gitignore and .npmignore
src-cov/
lcov/
Expand Down
45 changes: 25 additions & 20 deletions bin/gavel
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ var fs = require('fs');

cmd.version('0.0.1');

var stdin = "";
var stdin = '';

process.stdin.resume();
process.stdin.setEncoding('utf8');
Expand All @@ -18,42 +18,47 @@ process.stdin.on('data', function(data) {
});

process.stdin.on('end', function() {
fs.readFile(process.argv[2], 'utf8', function (err,string){
var expectedHttp = curlParser.parseBack(string);
fs.readFile(process.argv[2], 'utf8', function(err, string) {
var expectedHttp = curlParser.parseBack(string);

var realHttp = curlParser.parseBack(stdin);

var realRequest = httpParser.parseRequest(realHttp['request']);
var realResponse = httpParser.parseResponse(realHttp['response']);

var expectedRequest = httpParser.parseRequest(expectedHttp['request']);
var expectedResponse = httpParser.parseResponse(expectedHttp['response']);

var requestResult = false;
var requestResult = false;
var responseResult = false;

gavel.isValid(realRequest, expectedRequest, 'request',function (err, result){

gavel.isValid(realRequest, expectedRequest, 'request', function(
err,
result
) {
requestResult = result;
gavel.isValid(realResponse, expectedResponse, 'response', function (err, result){
gavel.isValid(realResponse, expectedResponse, 'response', function(
err,
result
) {
responseResult = result;
})
});
});
if(requestResult && responseResult){

if (requestResult && responseResult) {
process.exit(0);
} else {
process.exit(1);
};
})

}
});
});

// do not end unit stdin end
var busyLoop = function() {
setTimeout( function() {
if(stdin == ""){
process.stderr.write("ERROR: No input on stdin after 1s. Exiting. \n");
process.exit(1)
setTimeout(function() {
if (stdin == '') {
process.stderr.write('ERROR: No input on stdin after 1s. Exiting. \n');
process.exit(1);
}
busyLoop();
}, 1000);
Expand Down
21 changes: 21 additions & 0 deletions lib/errors.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class MalformedDataError extends Error {}
class DataNotJsonParsableError extends MalformedDataError {}
class DataNotStringError extends MalformedDataError {}
class MalformedSchemaError extends Error {}
class SchemaNotJsonParsableError extends MalformedSchemaError {}
class UnknownValidatorError extends Error {}
class NotValidatableError extends Error {}
class NotEnoughDataError extends Error {}
class JsonSchemaNotValid extends Error {}

module.exports = {
DataNotJsonParsableError,
SchemaNotJsonParsableError,
MalformedSchemaError,
MalformedDataError,
UnknownValidatorError,
DataNotStringError,
NotValidatableError,
NotEnoughDataError,
JsonSchemaNotValid,
}
14 changes: 14 additions & 0 deletions lib/gavel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const { HttpRequest, ExpectedHttpRequest } = require('./model/http-request');
const { HttpResponse, ExpectedHttpResponse } = require('./model/http-response');

const { validate, isValid, isValidatable } = require('./validate');

module.exports = {
HttpRequest,
HttpResponse,
ExpectedHttpRequest,
ExpectedHttpResponse,
validate,
isValid,
isValidatable
};
174 changes: 174 additions & 0 deletions lib/meta-schema-v3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
module.exports = {
$schema: 'http://json-schema.org/draft-03/schema#',
id: 'http://json-schema.org/draft-03/schema#',
type: 'object',

properties: {
type: {
type: ['string', 'array'],
items: {
type: ['string', { $ref: '#' }],
},
uniqueItems: true,
default: 'any',
},

properties: {
type: 'object',
additionalProperties: { $ref: '#' },
default: {},
},

patternProperties: {
type: 'object',
additionalProperties: { $ref: '#' },
default: {},
},

additionalProperties: {
type: [{ $ref: '#' }, 'boolean'],
default: {},
},

items: {
type: [{ $ref: '#' }, 'array'],
items: { $ref: '#' },
default: {},
},

additionalItems: {
type: [{ $ref: '#' }, 'boolean'],
default: {},
},

required: {
type: 'boolean',
default: false,
},

dependencies: {
type: 'object',
additionalProperties: {
type: ['string', 'array', { $ref: '#' }],
items: {
type: 'string',
},
},
default: {},
},

minimum: {
type: 'number',
},

maximum: {
type: 'number',
},

exclusiveMinimum: {
type: 'boolean',
default: false,
},

exclusiveMaximum: {
type: 'boolean',
default: false,
},

minItems: {
type: 'integer',
minimum: 0,
default: 0,
},

maxItems: {
type: 'integer',
minimum: 0,
},

uniqueItems: {
type: 'boolean',
default: false,
},

pattern: {
type: 'string',
format: 'regex',
},

minLength: {
type: 'integer',
minimum: 0,
default: 0,
},

maxLength: {
type: 'integer',
},

enum: {
type: 'array',
minItems: 1,
uniqueItems: true,
},

default: {
type: 'any',
},

title: {
type: 'string',
},

description: {
type: 'string',
},

format: {
type: 'string',
},

divisibleBy: {
type: 'number',
minimum: 0,
exclusiveMinimum: true,
default: 1,
},

disallow: {
type: ['string', 'array'],
items: {
type: ['string', { $ref: '#' }],
},
uniqueItems: true,
},

extends: {
type: [{ $ref: '#' }, 'array'],
items: { $ref: '#' },
default: {},
},

id: {
type: 'string',
format: 'uri',
},

$ref: {
type: 'string',
format: 'uri',
},

$schema: {
type: 'string',
format: 'uri',
},
},

dependencies: {
exclusiveMinimum: 'minimum',
exclusiveMaximum: 'maximum',
},

default: {},
}
Loading

0 comments on commit 364b235

Please sign in to comment.