diff --git a/package-lock.json b/package-lock.json index 3707f285..72f31782 100644 --- a/package-lock.json +++ b/package-lock.json @@ -637,15 +637,6 @@ "ajv": "*" } }, - "@types/axios": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz", - "integrity": "sha1-7CMA++fX3d1+udOr+HmZlkyvzkY=", - "dev": true, - "requires": { - "axios": "*" - } - }, "@types/cacheable-request": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", diff --git a/src/parsers.ts b/src/parsers.ts index 37890e00..c70d0434 100644 --- a/src/parsers.ts +++ b/src/parsers.ts @@ -17,6 +17,14 @@ export class JSONParser implements Parser { * @return {object} the parsed JSON payload. */ parse(payload: Record | string): string { + if (typeof payload === "string") { + // This is kind of a hack, but the payload data could be JSON in the form of a single + // string, such as "some data". But without the quotes in the string, JSON.parse blows + // up. We can check for this scenario and add quotes. Not sure if this is ideal. + if (!/^[[|{|"]/.test(payload)) { + payload = `"${payload}"`; + } + } if (this.decorator) { payload = this.decorator.parse(payload); } diff --git a/test/integration/parser_test.ts b/test/integration/parser_test.ts index b5d678a4..ea7f67cd 100644 --- a/test/integration/parser_test.ts +++ b/test/integration/parser_test.ts @@ -47,11 +47,19 @@ describe("JSON Event Format Parser", () => { it("Throw error when payload is an invalid JSON", () => { // setup - const payload = "gg"; + const payload = "{gg"; const parser = new Parser(); // TODO: Should the parser catch the SyntaxError and re-throw a ValidationError? - expect(parser.parse.bind(parser, payload)).to.throw(SyntaxError, "Unexpected token g in JSON at position 0"); + expect(parser.parse.bind(parser, payload)).to.throw(SyntaxError, "Unexpected token g in JSON at position 1"); + }); + + it("Accepts a string as valid JSON", () => { + // setup + const payload = "I am a string!"; + const parser = new Parser(); + + expect(parser.parse(payload)).to.equal("I am a string!"); }); it("Must accept when the payload is a string well formed as JSON", () => {