Initial commit
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
Copyright (c) 2015, Ahmad Nassri <ahmad@ahmadnassri.com>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
+309
@@ -0,0 +1,309 @@
|
||||
# HAR Validator [![version][npm-version]][npm-url] [![License][npm-license]][license-url]
|
||||
|
||||
Extremely fast HTTP Archive ([HAR](http://www.softwareishard.com/blog/har-12-spec/)) validator using JSON Schema.
|
||||
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Downloads][npm-downloads]][npm-url]
|
||||
[![Code Climate][codeclimate-quality]][codeclimate-url]
|
||||
[![Coverage Status][codeclimate-coverage]][codeclimate-url]
|
||||
[![Dependencies][david-image]][david-url]
|
||||
|
||||
## Install
|
||||
|
||||
```shell
|
||||
# to use in cli
|
||||
npm install --global har-validator
|
||||
|
||||
# to use as a module
|
||||
npm install --save har-validator
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
|
||||
Usage: har-validator [options] <files ...>
|
||||
|
||||
Options:
|
||||
|
||||
-h, --help output usage information
|
||||
-V, --version output the version number
|
||||
-s, --schema [name] validate schema name (log, request, response, etc ...)
|
||||
|
||||
```
|
||||
|
||||
###### Example
|
||||
|
||||
```shell
|
||||
har-validator har.json
|
||||
|
||||
har-validator --schema request request.json
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
**Note**: as of [`v2.0.0`](https://github.com/ahmadnassri/har-validator/releases/tag/v2.0.0) this module defaults to Promise based API. *For backward comptability with `v1.x` an [async/callback API](#callback-api) is provided*
|
||||
|
||||
### Validate(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a full [HAR](http://www.softwareishard.com/blog/har-12-spec/) object
|
||||
|
||||
```js
|
||||
validate(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.log(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [log](http://www.softwareishard.com/blog/har-12-spec/#log) object
|
||||
|
||||
```js
|
||||
validate.log(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.cache(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [cache](http://www.softwareishard.com/blog/har-12-spec/#cache) object
|
||||
|
||||
```js
|
||||
validate.cache(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.cacheEntry(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a ["beforeRequest" or "afterRequest"](http://www.softwareishard.com/blog/har-12-spec/#cache) objects
|
||||
|
||||
```js
|
||||
validate.cacheEntry(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.content(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [content](http://www.softwareishard.com/blog/har-12-spec/#content) object
|
||||
|
||||
```js
|
||||
validate.content(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.cookie(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [cookie](http://www.softwareishard.com/blog/har-12-spec/#cookies) object
|
||||
|
||||
```js
|
||||
validate.cookie(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.creator(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [creator](http://www.softwareishard.com/blog/har-12-spec/#creator) object
|
||||
|
||||
```js
|
||||
validate.creator(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.entry(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
an [entry](http://www.softwareishard.com/blog/har-12-spec/#entries) object
|
||||
|
||||
```js
|
||||
validate.entry(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.log(data)
|
||||
|
||||
alias of [`Validate(data)`](#validate-data-callback-)
|
||||
|
||||
### Validate.page(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [page](http://www.softwareishard.com/blog/har-12-spec/#pages) object
|
||||
|
||||
```js
|
||||
validate.page(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.pageTimings(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [pageTimings](http://www.softwareishard.com/blog/har-12-spec/#pageTimings) object
|
||||
|
||||
```js
|
||||
validate.pageTimings(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.postData(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [postData](http://www.softwareishard.com/blog/har-12-spec/#postData) object
|
||||
|
||||
```js
|
||||
validate.postData(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.record(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [record](http://www.softwareishard.com/blog/har-12-spec/#headers) object
|
||||
|
||||
```js
|
||||
validate.record(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.request(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [request](http://www.softwareishard.com/blog/har-12-spec/#request) object
|
||||
|
||||
```js
|
||||
validate.request(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.response(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [response](http://www.softwareishard.com/blog/har-12-spec/#response) object
|
||||
|
||||
```js
|
||||
validate.cacheEntry(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
### Validate.timings(data)
|
||||
|
||||
> Returns a promise that resolves to the valid object.
|
||||
|
||||
- **data**: `Object` *(Required)*
|
||||
a [timings](http://www.softwareishard.com/blog/har-12-spec/#timings) object
|
||||
|
||||
```js
|
||||
validate.timings(data)
|
||||
.then(data => console.log('horray!'))
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
## Callback API
|
||||
|
||||
### Validate(data [, callback])
|
||||
|
||||
> Returns `true` or `false`.
|
||||
|
||||
```js
|
||||
var HAR = require('./har.json');
|
||||
var validate = require('har-validator/lib/async');
|
||||
|
||||
validate(HAR, function (e, valid) {
|
||||
if (e) console.log(e.errors)
|
||||
|
||||
if (valid) console.log('horray!');
|
||||
});
|
||||
|
||||
```
|
||||
The async API provides exactly the same methods as the [Promise API](#promise-api)
|
||||
|
||||
----
|
||||
|
||||
## Support
|
||||
|
||||
Donations are welcome to help support the continuous development of this project.
|
||||
|
||||
[![Gratipay][gratipay-image]][gratipay-url]
|
||||
[![PayPal][paypal-image]][paypal-url]
|
||||
[![Flattr][flattr-image]][flattr-url]
|
||||
[![Bitcoin][bitcoin-image]][bitcoin-url]
|
||||
|
||||
## License
|
||||
|
||||
[ISC License](LICENSE) © [Ahmad Nassri](https://www.ahmadnassri.com/)
|
||||
|
||||
[license-url]: https://github.com/ahmadnassri/har-validator/blob/master/LICENSE
|
||||
|
||||
[travis-url]: https://travis-ci.org/ahmadnassri/har-validator
|
||||
[travis-image]: https://img.shields.io/travis/ahmadnassri/har-validator.svg?style=flat-square
|
||||
|
||||
[npm-url]: https://www.npmjs.com/package/har-validator
|
||||
[npm-license]: https://img.shields.io/npm/l/har-validator.svg?style=flat-square
|
||||
[npm-version]: https://img.shields.io/npm/v/har-validator.svg?style=flat-square
|
||||
[npm-downloads]: https://img.shields.io/npm/dm/har-validator.svg?style=flat-square
|
||||
|
||||
[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/har-validator
|
||||
[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/har-validator.svg?style=flat-square
|
||||
[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/har-validator.svg?style=flat-square
|
||||
|
||||
[david-url]: https://david-dm.org/ahmadnassri/har-validator
|
||||
[david-image]: https://img.shields.io/david/ahmadnassri/har-validator.svg?style=flat-square
|
||||
|
||||
[gratipay-url]: https://www.gratipay.com/ahmadnassri/
|
||||
[gratipay-image]: https://img.shields.io/gratipay/ahmadnassri.svg?style=flat-square
|
||||
|
||||
[paypal-url]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UJ2B2BTK9VLRS&on0=project&os0=har-validator
|
||||
[paypal-image]: http://img.shields.io/badge/paypal-donate-green.svg?style=flat-square
|
||||
|
||||
[flattr-url]: https://flattr.com/submit/auto?user_id=ahmadnassri&url=https://github.com/ahmadnassri/har-validator&title=har-validator&language=&tags=github&category=software
|
||||
[flattr-image]: http://img.shields.io/badge/flattr-donate-green.svg?style=flat-square
|
||||
|
||||
[bitcoin-image]: http://img.shields.io/badge/bitcoin-1Nb46sZRVG3or7pNaDjthcGJpWhvoPpCxy-green.svg?style=flat-square
|
||||
[bitcoin-url]: https://www.coinbase.com/checkouts/ae383ae6bb931a2fa5ad11cec115191e?name=har-validator
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict'
|
||||
|
||||
var chalk = require('chalk')
|
||||
var cmd = require('commander')
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var pkg = require('../package.json')
|
||||
var Promise = require('pinkie-promise')
|
||||
var validate = require('..')
|
||||
var ValidationError = require('../lib/error')
|
||||
|
||||
cmd
|
||||
.version(pkg.version)
|
||||
.usage('[options] <files ...>')
|
||||
.option('-s, --schema [name]', 'validate schema name (log, request, response, etc ...)')
|
||||
.parse(process.argv)
|
||||
|
||||
if (!cmd.args.length) {
|
||||
cmd.help()
|
||||
}
|
||||
|
||||
cmd.args.map(function (fileName) {
|
||||
var file = chalk.yellow.italic(path.basename(fileName))
|
||||
|
||||
new Promise(function (resolve, reject) {
|
||||
fs.readFile(fileName, function (err, data) {
|
||||
return err === null ? resolve(data) : reject(err)
|
||||
})
|
||||
})
|
||||
|
||||
.then(JSON.parse)
|
||||
|
||||
.then(cmd.schema ? validate[cmd.schema] : validate)
|
||||
|
||||
.then(function (data) {
|
||||
console.log('%s [%s] is valid', chalk.green('✓'), file)
|
||||
})
|
||||
|
||||
.catch(function (err) {
|
||||
if (err instanceof SyntaxError) {
|
||||
return console.error('%s [%s] failed to read JSON: %s', chalk.red('✖'), file, chalk.red(err.message))
|
||||
}
|
||||
|
||||
if (err instanceof ValidationError) {
|
||||
err.errors.forEach(function (details) {
|
||||
console.error('%s [%s] failed validation: (%s: %s) %s', chalk.red('✖'), file, chalk.cyan.italic(details.field), chalk.magenta.italic(details.value), chalk.red(details.message))
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
console.error('%s [%s] an unknown error has occured: %s', chalk.red('✖'), file, chalk.red(err.message))
|
||||
})
|
||||
})
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
'use strict'
|
||||
|
||||
var runner = require('./runner')
|
||||
var schemas = require('./schemas')
|
||||
|
||||
module.exports = function (data, cb) {
|
||||
return runner(schemas.har, data, cb)
|
||||
}
|
||||
|
||||
Object.keys(schemas).map(function (name) {
|
||||
module.exports[name] = function (data, cb) {
|
||||
return runner(schemas[name], data, cb)
|
||||
}
|
||||
})
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
'use strict'
|
||||
|
||||
function ValidationError (errors) {
|
||||
this.name = 'ValidationError'
|
||||
this.errors = errors
|
||||
}
|
||||
|
||||
ValidationError.prototype = Error.prototype
|
||||
|
||||
module.exports = ValidationError
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
'use strict'
|
||||
|
||||
var Promise = require('pinkie-promise')
|
||||
var runner = require('./runner')
|
||||
var schemas = require('./schemas')
|
||||
|
||||
var promisify = function (schema) {
|
||||
return function (data) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
runner(schema, data, function (err, valid) {
|
||||
return err === null ? resolve(data) : reject(err)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = promisify(schemas.har)
|
||||
|
||||
// utility methods for all parts of the schema
|
||||
Object.keys(schemas).map(function (name) {
|
||||
module.exports[name] = promisify(schemas[name])
|
||||
})
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
'use strict'
|
||||
|
||||
var schemas = require('./schemas')
|
||||
var ValidationError = require('./error')
|
||||
var validator = require('is-my-json-valid')
|
||||
|
||||
module.exports = function (schema, data, cb) {
|
||||
// default value
|
||||
var valid = false
|
||||
|
||||
// validator config
|
||||
var validate = validator(schema, {
|
||||
greedy: true,
|
||||
verbose: true,
|
||||
schemas: schemas
|
||||
})
|
||||
|
||||
// execute is-my-json-valid
|
||||
if (data !== undefined) {
|
||||
valid = validate(data)
|
||||
}
|
||||
|
||||
// callback?
|
||||
if (typeof cb === 'function') {
|
||||
return cb(validate.errors ? new ValidationError(validate.errors) : null, valid)
|
||||
}
|
||||
|
||||
return valid
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"properties": {
|
||||
"beforeRequest": {
|
||||
"$ref": "#cacheEntry"
|
||||
},
|
||||
"afterRequest": {
|
||||
"$ref": "#cacheEntry"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"oneOf": [{
|
||||
"type": "object",
|
||||
"optional": true,
|
||||
"required": [
|
||||
"lastAccess",
|
||||
"eTag",
|
||||
"hitCount"
|
||||
],
|
||||
"properties": {
|
||||
"expires": {
|
||||
"type": "string"
|
||||
},
|
||||
"lastAccess": {
|
||||
"type": "string"
|
||||
},
|
||||
"eTag": {
|
||||
"type": "string"
|
||||
},
|
||||
"hitCount": {
|
||||
"type": "integer"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}, {
|
||||
"type": null,
|
||||
"additionalProperties": false
|
||||
}]
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"size",
|
||||
"mimeType"
|
||||
],
|
||||
"properties": {
|
||||
"size": {
|
||||
"type": "integer"
|
||||
},
|
||||
"compression": {
|
||||
"type": "integer"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"encoding": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"value"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
},
|
||||
"domain": {
|
||||
"type": "string"
|
||||
},
|
||||
"expires": {
|
||||
"type": ["string", "null"],
|
||||
"format": "date-time"
|
||||
},
|
||||
"httpOnly": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"secure": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"version"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"version": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"type": "object",
|
||||
"optional": true,
|
||||
"required": [
|
||||
"startedDateTime",
|
||||
"time",
|
||||
"request",
|
||||
"response",
|
||||
"cache",
|
||||
"timings"
|
||||
],
|
||||
"properties": {
|
||||
"pageref": {
|
||||
"type": "string"
|
||||
},
|
||||
"startedDateTime": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))"
|
||||
},
|
||||
"time": {
|
||||
"type": "number",
|
||||
"min": 0
|
||||
},
|
||||
"request": {
|
||||
"$ref": "#request"
|
||||
},
|
||||
"response": {
|
||||
"$ref": "#response"
|
||||
},
|
||||
"cache": {
|
||||
"$ref": "#cache"
|
||||
},
|
||||
"timings": {
|
||||
"$ref": "#timings"
|
||||
},
|
||||
"serverIPAddress": {
|
||||
"type": "string",
|
||||
"oneOf": [
|
||||
{ "format": "ipv4" },
|
||||
{ "format": "ipv6" }
|
||||
]
|
||||
},
|
||||
"connection": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"log"
|
||||
],
|
||||
"properties": {
|
||||
"log": {
|
||||
"$ref": "#log"
|
||||
}
|
||||
}
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
'use strict'
|
||||
|
||||
var schemas = {
|
||||
cache: require('./cache.json'),
|
||||
cacheEntry: require('./cacheEntry.json'),
|
||||
content: require('./content.json'),
|
||||
cookie: require('./cookie.json'),
|
||||
creator: require('./creator.json'),
|
||||
entry: require('./entry.json'),
|
||||
har: require('./har.json'),
|
||||
log: require('./log.json'),
|
||||
page: require('./page.json'),
|
||||
pageTimings: require('./pageTimings.json'),
|
||||
postData: require('./postData.json'),
|
||||
record: require('./record.json'),
|
||||
request: require('./request.json'),
|
||||
response: require('./response.json'),
|
||||
timings: require('./timings.json')
|
||||
}
|
||||
|
||||
// is-my-json-valid does not provide meaningful error messages for external schemas
|
||||
// this is a workaround
|
||||
schemas.cache.properties.beforeRequest = schemas.cacheEntry
|
||||
schemas.cache.properties.afterRequest = schemas.cacheEntry
|
||||
|
||||
schemas.page.properties.pageTimings = schemas.pageTimings
|
||||
|
||||
schemas.request.properties.cookies.items = schemas.cookie
|
||||
schemas.request.properties.headers.items = schemas.record
|
||||
schemas.request.properties.queryString.items = schemas.record
|
||||
schemas.request.properties.postData = schemas.postData
|
||||
|
||||
schemas.response.properties.cookies.items = schemas.cookie
|
||||
schemas.response.properties.headers.items = schemas.record
|
||||
schemas.response.properties.content = schemas.content
|
||||
|
||||
schemas.entry.properties.request = schemas.request
|
||||
schemas.entry.properties.response = schemas.response
|
||||
schemas.entry.properties.cache = schemas.cache
|
||||
schemas.entry.properties.timings = schemas.timings
|
||||
|
||||
schemas.log.properties.creator = schemas.creator
|
||||
schemas.log.properties.browser = schemas.creator
|
||||
schemas.log.properties.pages.items = schemas.page
|
||||
schemas.log.properties.entries.items = schemas.entry
|
||||
|
||||
schemas.har.properties.log = schemas.log
|
||||
|
||||
module.exports = schemas
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"version",
|
||||
"creator",
|
||||
"entries"
|
||||
],
|
||||
"properties": {
|
||||
"version": {
|
||||
"type": "string"
|
||||
},
|
||||
"creator": {
|
||||
"$ref": "#creator"
|
||||
},
|
||||
"browser": {
|
||||
"$ref": "#creator"
|
||||
},
|
||||
"pages": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#page"
|
||||
}
|
||||
},
|
||||
"entries": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#entry"
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"type": "object",
|
||||
"optional": true,
|
||||
"required": [
|
||||
"startedDateTime",
|
||||
"id",
|
||||
"title",
|
||||
"pageTimings"
|
||||
],
|
||||
"properties": {
|
||||
"startedDateTime": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))"
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"unique": true
|
||||
},
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"pageTimings": {
|
||||
"$ref": "#pageTimings"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"onContentLoad": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"onLoad": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"type": "object",
|
||||
"optional": true,
|
||||
"required": [
|
||||
"mimeType"
|
||||
],
|
||||
"properties": {
|
||||
"mimeType": {
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"type": "array",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"type": "string"
|
||||
},
|
||||
"fileName": {
|
||||
"type": "string"
|
||||
},
|
||||
"contentType": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"value"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"method",
|
||||
"url",
|
||||
"httpVersion",
|
||||
"cookies",
|
||||
"headers",
|
||||
"queryString",
|
||||
"headersSize",
|
||||
"bodySize"
|
||||
],
|
||||
"properties": {
|
||||
"method": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "uri"
|
||||
},
|
||||
"httpVersion": {
|
||||
"type": "string"
|
||||
},
|
||||
"cookies": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#cookie"
|
||||
}
|
||||
},
|
||||
"headers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#record"
|
||||
}
|
||||
},
|
||||
"queryString": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#record"
|
||||
}
|
||||
},
|
||||
"postData": {
|
||||
"$ref": "#postData"
|
||||
},
|
||||
"headersSize": {
|
||||
"type": "integer"
|
||||
},
|
||||
"bodySize": {
|
||||
"type": "integer"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"status",
|
||||
"statusText",
|
||||
"httpVersion",
|
||||
"cookies",
|
||||
"headers",
|
||||
"content",
|
||||
"redirectURL",
|
||||
"headersSize",
|
||||
"bodySize"
|
||||
],
|
||||
"properties": {
|
||||
"status": {
|
||||
"type": "integer"
|
||||
},
|
||||
"statusText": {
|
||||
"type": "string"
|
||||
},
|
||||
"httpVersion": {
|
||||
"type": "string"
|
||||
},
|
||||
"cookies": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#cookie"
|
||||
}
|
||||
},
|
||||
"headers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#record"
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"$ref": "#content"
|
||||
},
|
||||
"redirectURL": {
|
||||
"type": "string"
|
||||
},
|
||||
"headersSize": {
|
||||
"type": "integer"
|
||||
},
|
||||
"bodySize": {
|
||||
"type": "integer"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"required": [
|
||||
"send",
|
||||
"wait",
|
||||
"receive"
|
||||
],
|
||||
"properties": {
|
||||
"dns": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"connect": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"blocked": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"send": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"wait": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"receive": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"ssl": {
|
||||
"type": "number",
|
||||
"min": -1
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"har-validator@~2.0.6",
|
||||
"/home/xor/shared_vm/git/node-sunwell/node_modules/request"
|
||||
]
|
||||
],
|
||||
"_from": "har-validator@>=2.0.6 <2.1.0",
|
||||
"_id": "har-validator@2.0.6",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/har-validator",
|
||||
"_nodeVersion": "5.2.0",
|
||||
"_npmUser": {
|
||||
"email": "ahmad@ahmadnassri.com",
|
||||
"name": "ahmadnassri"
|
||||
},
|
||||
"_npmVersion": "3.3.12",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"name": "har-validator",
|
||||
"raw": "har-validator@~2.0.6",
|
||||
"rawSpec": "~2.0.6",
|
||||
"scope": null,
|
||||
"spec": ">=2.0.6 <2.1.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/request"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
|
||||
"_shasum": "cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "har-validator@~2.0.6",
|
||||
"_where": "/home/xor/shared_vm/git/node-sunwell/node_modules/request",
|
||||
"author": {
|
||||
"email": "ahmad@ahmadnassri.com",
|
||||
"name": "Ahmad Nassri",
|
||||
"url": "https://www.ahmadnassri.com/"
|
||||
},
|
||||
"bin": {
|
||||
"har-validator": "bin/har-validator"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/ahmadnassri/har-validator/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "^1.1.1",
|
||||
"commander": "^2.9.0",
|
||||
"is-my-json-valid": "^2.12.4",
|
||||
"pinkie-promise": "^2.0.0"
|
||||
},
|
||||
"description": "Extremely fast HTTP Archive (HAR) validator using JSON Schema",
|
||||
"devDependencies": {
|
||||
"codeclimate-test-reporter": "0.2.1",
|
||||
"echint": "^1.5.1",
|
||||
"istanbul": "^0.4.2",
|
||||
"mocha": "^2.3.4",
|
||||
"require-directory": "^2.1.1",
|
||||
"should": "^8.1.1",
|
||||
"standard": "^5.4.1"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d",
|
||||
"tarball": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz"
|
||||
},
|
||||
"echint": {
|
||||
"ignore": [
|
||||
"coverage/**"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
},
|
||||
"files": [
|
||||
"bin",
|
||||
"lib"
|
||||
],
|
||||
"gitHead": "92ccddad2e5d13e6e32c764e06c347d67805b211",
|
||||
"homepage": "https://github.com/ahmadnassri/har-validator",
|
||||
"keywords": [
|
||||
"archive",
|
||||
"har",
|
||||
"http",
|
||||
"validate",
|
||||
"validator"
|
||||
],
|
||||
"license": "ISC",
|
||||
"main": "lib/index",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "ahmadnassri",
|
||||
"email": "ahmad@ahmadnassri.com"
|
||||
}
|
||||
],
|
||||
"name": "har-validator",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/ahmadnassri/har-validator.git"
|
||||
},
|
||||
"scripts": {
|
||||
"codeclimate": "codeclimate < coverage/lcov.info",
|
||||
"coverage": "istanbul cover --dir coverage _mocha -- -R dot",
|
||||
"posttest": "npm run coverage",
|
||||
"pretest": "standard && echint",
|
||||
"test": "mocha"
|
||||
},
|
||||
"version": "2.0.6"
|
||||
}
|
||||
Reference in New Issue
Block a user