Commit 619caa94 authored by Alex Quispe's avatar Alex Quispe
Browse files

Se adicionaron algunas funciones y se corrigieron errores.

parent 0aeb76b4
......@@ -70,14 +70,16 @@ El resultado se encuentra en la carpeta `build`
### Funciones disponibles:
| propiedad | Descripción |
| --------- | ----------- |
| `data` | Datos de entrada: `{ headers: {}, params: {}, query: {}, body: {} }` |
| `name` | Nombre con el que se identificará a la ruta. |
| `description` | Descripción de la ruta |
| `group` | Grupo al que pertenece la ruta |
| `version` | Versión |
| `permissions` | Lista de los roles que pueden acceder a la ruta. Ej.: `.permissions(['admin', 'user'])` |
| Función | Descripción | Valor por defecto |
| ------------- | ---------------------------------------------------------------------- | ----------------------- |
| `data` | Datos de entrada: `{ headers: {}, params: {}, query: {}, body: {} }` | `{}` |
| `name` | Nombre con el que se identificará a la ruta. | `<method>/<path></key>` |
| `key` | Palabra clave que se adiciona al final del nombre de la ruta. | `null` |
| `description` | Descripción de la ruta. | `null` |
| `group` | Grupo al que pertenece la ruta. | `<fileName>` |
| `version` | Versión. | `1` |
| `request` | Indica si se va a ejecutar la petición para crear los datos de salida. | `true` |
| `permissions` | Lista de los roles. Ej.: `.permissions(['admin', 'user'])` | `null` |
**Ejemplo:**
......@@ -85,6 +87,11 @@ El resultado se encuentra en la carpeta `build`
ApiGen.get('/api/v1/users').generate()
ApiGen.post('/api/v1/users').data({ body; { user: 'admin', pass: '123'} }).generate()
ApiGen.post('/api/v1/users').data({ body; { user: 'admin', pass: '123'} }).name('Autenticar').generate()
ApiGen.get('/api/v1/users').key('Admin').generate()
ApiGen.get('/api/v1/users').key('User').generate()
ApiGen.get('/documentando/solo/la/ruta').request(false).generate()
```
### Función `execute`
......@@ -98,7 +105,7 @@ const usuarios = await ApiGen.get('/api/v1/users').execute()
### Función `generate`
Ejecuta la petición, genera el respectivo apidoc y devuelve el resultado del body.
Ejecuta la petición (solamente si la propiedad `request` es igual a `true`), genera el respectivo apidoc y devuelve el resultado del body.
Adicionalmente se puede pasar como parámetro el nombre del grupo al que pertenece la ruta. Por defecto es el nombre del fichero.
......@@ -109,6 +116,6 @@ await ApiGen.get('/api/v1/users').generate()
// group = AUTH
await ApiGen.get('/api/v1/users').generate('AUTH')
// Devuelve el resultado del body
// Devuelve el resultado de la petición (body)
const body = await ApiGen.get('/api/v1/users').generate()
```
......@@ -190,7 +190,9 @@ function _headerSwagger (route) {
"tags": [route.group],
"responses": { "200": { "description": route.description } },
"consumes": [ "application/json" ],
"produces": [ "application/json" ]
"produces": [ "application/json" ],
"description": route.description,
"name": route.name
}
}
}
......
const request = require('request')
const fs = require('fs')
const _ = require('lodash')
const path = require('path')
const Route = require('./Route')
const ApidocCreator = require('./ApidocCreator')
const Field = require('./FieldCreator')
const util = require('../tools/util')
const util = require('../tools/util')
class ApidocGenerator {
constructor (groupName) {
......@@ -80,6 +81,16 @@ class ApidocGenerator {
return this
}
request (value) {
this.route.request = (value === true)
return this
}
key (value) {
this.route.key = value
return this
}
data (inputData) {
this.route.inputData = inputData
if (inputData && inputData.params) {
......@@ -93,10 +104,10 @@ class ApidocGenerator {
async generate (groupName) {
this.route.group = groupName || this.route.group || ApidocGenerator.GROUP_FILE
this.route.name = this.route.name || `[${this.route.method}] ${this.route.path}${this.route.key ? ` ${this.route.key}` : ''}`
this.route.name = this.route.name || `[${this.route.method}] ${_toWords(this.route.path)}${this.route.key ? ` (${this.route.key})` : ''}`
this.route.description = this.route.description || this.route.name
this.route.input = toFieldGroup(this.route.inputData || {})
this.route.outputData = await _request(this.route.method, this.route.requestPath, this.route.inputData.body, this.route.inputData.headers)
this.route.outputData = (this.route.request) ? await _request(this.route.method, this.route.requestPath, this.route.inputData.body, this.route.inputData.headers) : {}
this.route.output = toFieldGroup(this.route.outputData || {})
let apidocContent = this._getApidocContent()
let swaggerContent = this._getSwaggerContent()
......@@ -105,7 +116,7 @@ class ApidocGenerator {
apidocContent += route.apidoc
swaggerContent.paths[route.apidocSwagger.path] = swaggerContent.paths[route.apidocSwagger.path] || {}
if (swaggerContent.paths[route.apidocSwagger.path][route.apidocSwagger.method]) {
console.log(`\n Advertencia: El servicio [${this.route.method}] ${this.route.path} (${this.name}) ya ha sido documentado`)
console.log(`\n \x1b[33mAdvertencia:\x1b[0m El servicio [${this.route.method}] ${this.route.path} (${this.route.name}) ya ha sido documentado`)
}
swaggerContent.paths[route.apidocSwagger.path][route.apidocSwagger.method] = route.apidocSwagger.content
})
......@@ -114,7 +125,7 @@ class ApidocGenerator {
this._generateApidocJS(apidocContent)
this._generateSwagger(swaggerContent)
console.log(` ${this.route.name} (${ApidocGenerator.OUTPUT_TEMP_PATH.replace(process.cwd(), '')} - ${this.route.group}) \u2713`)
console.log(` ${ApidocGenerator.OUTPUT_TEMP_PATH.replace(process.cwd(), '')} - ${this.route.group} (${this.route.name}) \u2713`)
return this.route.outputData
}
......@@ -167,7 +178,7 @@ class ApidocGenerator {
}
async execute () {
this.route.name = this.route.name || `[${this.route.method}] ${this.route.path}${this.route.key ? ` ${this.route.key}` : ''}`
this.route.name = this.route.name || `[${this.route.method}] ${_toWords(this.route.path)}${this.route.key ? ` (${this.route.key})` : ''}`
this.route.description = this.route.description || this.route.name
this.route.input = toFieldGroup(this.route.inputData || {})
this.route.outputData = await _request(this.route.method, this.route.requestPath, this.route.inputData.body, this.route.inputData.headers)
......@@ -181,7 +192,11 @@ ApidocGenerator.API_URL = 'http://localhost'
ApidocGenerator.COMPILE = true
function _toWords (text) {
return text.toUpperCase()
return `${_words(_.upperFirst(_.camelCase(text)))}`
}
function _words (text) {
return _.replace((_.words(text)).toString(), /,/g, ' ')
}
function toFieldGroup (obj, fullPath = '') {
......@@ -272,7 +287,7 @@ async function _build () {
content2.paths[routePath] = content2.paths[routePath] || {}
Object.keys(contentToAdd.paths[routePath]).forEach(routeMethod => {
if (content2.paths[routePath][routeMethod]) {
console.log(`\n Advertencia: El servicio [${routeMethod}] ${routePath} () ya ha sido documentado`)
console.log(`\n \x1b[33mAdvertencia:\x1b[0m El servicio [${routeMethod}] ${routePath} (${content2.paths[routePath][routeMethod].name}) ya ha sido documentado`)
return
}
content2.paths[routePath][routeMethod] = contentToAdd.paths[routePath][[routeMethod]]
......
......@@ -4,12 +4,17 @@ class Route {
this.path = '/'
this.group = groupName
this.version = 1
this.name = null
this.key = null
this.description = null
this.permissions = null
this.requestPath = this.path
this.requestPathSwagger = this.path
this.input = {}
this.output = {}
this.inputData = {}
this.outputData = {}
this.request = true
}
_setURI (method, routePath) {
......
......@@ -2,5 +2,13 @@ const ApiGen = require('../../../')
module.exports = async () => {
await ApiGen.get('/api/v1/users').generate()
await ApiGen.post('/api/v1/users').data({body:{name:'rosa',username:'user100',pass:'123'}}).generate()
await ApiGen.post('/api/v1/users').data({body:{name:'rosa',user:'user100',pass:'123'}}).generate()
await ApiGen.get('/api/v1/users').name('Devuelve una lista de usuarios').generate('GRUPO 1')
await ApiGen.get('/api/v1/users').name('Listar usuarios').generate('GRUPO 1')
await ApiGen.post('/api/v1/users').data({body:{name:'John',user:'admin',pass:'123'}}).key('Admin').generate('GRUPO 2')
await ApiGen.post('/api/v1/users').data({body:{name:'Smith',user:'user',pass:'123'}}).key('User').generate('GRUPO 2')
await ApiGen.get('/documentando/solo/la/ruta').request(false).generate('GRUPO 3')
}
......@@ -16,8 +16,8 @@ app.use(express.static('public'))
app.get('/api/v1/users', (req, res, next) => {
const users = [
{id:1, name:'John', username:'admin', pass:'123'},
{id:2, name:'Dany', username:'user', pass:'123'}
{id:1, name:'John', user:'admin', pass:'123'},
{id:2, name:'Dany', user:'user', pass:'123'}
]
res.status(200).json(users)
})
......@@ -25,7 +25,7 @@ app.get('/api/v1/users', (req, res, next) => {
app.post('/api/v1/users', (req, res, next) => {
const result = {
finalizado: true,
datos: { id: 100, name: req.body.name, username: req.body.username, pass: req.body.pass }
datos: { id: 100, name: req.body.name, user: req.body.user, pass: req.body.pass }
}
res.status(201).json(result)
})
......
......@@ -35,6 +35,52 @@
"json-schema-traverse": "^0.3.0"
}
},
"ansi-styles": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
"integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg="
},
"apidoc": {
"version": "0.17.6",
"resolved": "https://registry.npmjs.org/apidoc/-/apidoc-0.17.6.tgz",
"integrity": "sha1-TuisYQ3t3csQBsPij6fdY0tKXOY=",
"requires": {
"apidoc-core": "~0.8.2",
"fs-extra": "~3.0.1",
"lodash": "~4.17.4",
"markdown-it": "^8.3.1",
"nomnom": "~1.8.1",
"winston": "~2.3.1"
}
},
"apidoc-core": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/apidoc-core/-/apidoc-core-0.8.3.tgz",
"integrity": "sha1-2dY1RYKd8lDSzKBJaDqH53U2S5Y=",
"requires": {
"fs-extra": "^3.0.1",
"glob": "^7.1.1",
"iconv-lite": "^0.4.17",
"klaw-sync": "^2.1.0",
"lodash": "~4.17.4",
"semver": "~5.3.0"
},
"dependencies": {
"semver": {
"version": "5.3.0",
"resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
}
}
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"requires": {
"sprintf-js": "~1.0.2"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
......@@ -54,6 +100,11 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz",
"integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
......@@ -69,6 +120,11 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
......@@ -117,6 +173,15 @@
}
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
......@@ -128,6 +193,16 @@
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"chalk": {
"version": "0.4.0",
"resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
"integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
"requires": {
"ansi-styles": "~1.0.0",
"has-color": "~0.1.0",
"strip-ansi": "~0.1.0"
}
},
"cls-bluebird": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz",
......@@ -142,6 +217,11 @@
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
},
"colors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
},
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
......@@ -150,6 +230,11 @@
"delayed-stream": "~1.0.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
......@@ -189,6 +274,11 @@
"vary": "^1"
}
},
"cycle": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
"integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
......@@ -247,6 +337,11 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
},
"entities": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
"integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
......@@ -324,6 +419,11 @@
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"eyes": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
"integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
},
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
......@@ -393,6 +493,21 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"dev": true
},
"fs-extra": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
"integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^3.0.0",
"universalify": "^0.1.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"generic-pool": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.2.tgz",
......@@ -406,6 +521,24 @@
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
......@@ -420,6 +553,11 @@
"har-schema": "^2.0.0"
}
},
"has-color": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
"integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8="
},
"http-errors": {
"version": "1.6.3",
"resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
......@@ -446,7 +584,6 @@
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
......@@ -456,11 +593,19 @@
"resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
"integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ipaddr.js": {
"version": "1.8.0",
......@@ -503,6 +648,14 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonfile": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
"integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
"requires": {
"graceful-fs": "^4.1.6"
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
......@@ -514,11 +667,44 @@
"verror": "1.10.0"
}
},
"klaw-sync": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-2.1.0.tgz",
"integrity": "sha1-PTvNhgDnv971MjHHOf8FOu1WDkQ=",
"requires": {
"graceful-fs": "^4.1.11"
}
},
"linkify-it": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
"integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
"requires": {
"uc.micro": "^1.0.1"
}
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"markdown-it": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
"requires": {
"argparse": "^1.0.7",
"entities": "~1.1.1",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
......@@ -556,6 +742,14 @@
"mime-db": "~1.36.0"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
......@@ -593,6 +787,15 @@
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true
},
"nomnom": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
"integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
"requires": {
"chalk": "~0.4.0",
"underscore": "~1.6.0"
}
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
......@@ -613,12 +816,25 @@
"ee-first": "1.1.1"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
......@@ -824,6 +1040,11 @@
"resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.0.tgz",
"integrity": "sha512-xTCx2vohXC2EWWDqY/zb4+5Mu28D+HYNSOuFzsyRDRvI/e1ICb69afwaUwfjr+25ZXldbOLyp+iDUZHq8UnTag=="
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"sshpk": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz",
......@@ -840,12 +1061,22 @@
"tweetnacl": "~0.14.0"
}
},
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
"integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
},
"statuses": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
"dev": true
},
"strip-ansi": {
"version": "0.1.1",
"resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
"integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE="
},
"swagger-ui-dist": {