@@ -4,7 +4,7 @@ const Joi = require('@hapi/joi')
|
||||
const jp = require('jsonpath')
|
||||
const { renderDynamicBadge, errorMessages } = require('../dynamic-common')
|
||||
const { createRoute } = require('./dynamic-helpers')
|
||||
const { BaseJsonService, InvalidResponse } = require('..')
|
||||
const { BaseJsonService, InvalidParameter, InvalidResponse } = require('..')
|
||||
|
||||
module.exports = class DynamicJson extends BaseJsonService {
|
||||
static get category() {
|
||||
@@ -28,7 +28,18 @@ module.exports = class DynamicJson extends BaseJsonService {
|
||||
errorMessages,
|
||||
})
|
||||
|
||||
const values = jp.query(data, pathExpression)
|
||||
let values
|
||||
try {
|
||||
values = jp.query(data, pathExpression)
|
||||
} catch (e) {
|
||||
if (e.message.startsWith('Lexical error')) {
|
||||
throw new InvalidParameter({
|
||||
prettyMessage: 'unparseable jsonpath query',
|
||||
})
|
||||
} else {
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
if (!values.length) {
|
||||
throw new InvalidResponse({ prettyMessage: 'no result' })
|
||||
|
||||
@@ -139,3 +139,13 @@ t.create('JSON from url | request should set Accept header')
|
||||
.after(() => {
|
||||
expect(headers).to.have.property('accept', 'application/json')
|
||||
})
|
||||
|
||||
t.create('JSON from url | invalid query')
|
||||
.get(
|
||||
'.json?url=https://github.com/badges/shields/raw/master/package.json&query=$[?'
|
||||
)
|
||||
.expectBadge({
|
||||
label: 'custom badge',
|
||||
message: 'unparseable jsonpath query',
|
||||
color: 'red',
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user