chore: es6 parser (#98)

Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>
This commit is contained in:
Grant Timmerman 2020-04-30 15:32:37 -07:00 committed by GitHub
parent e83db297ae
commit cd6decd749
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 25 deletions

View File

@ -4,42 +4,35 @@ const {
isStringOrObjectOrThrow isStringOrObjectOrThrow
} = require("../../utils/fun.js"); } = require("../../utils/fun.js");
function JSONParser(decorator) {
this.decorator = decorator;
}
const invalidPayloadTypeError = const invalidPayloadTypeError =
new Error("invalid payload type, allowed are: string or object"); new Error("invalid payload type, allowed are: string or object");
const nullOrIndefinedPayload = const nullOrIndefinedPayload =
new Error("null or undefined payload"); new Error("null or undefined payload");
// Function
const asJSON = (v) => (isString(v) ? JSON.parse(v) : v); const asJSON = (v) => (isString(v) ? JSON.parse(v) : v);
// Level 0 of validation: is that string? is that JSON? class JSONParser {
function validateAndParse(payload) { constructor(decorator) {
const json = this.decorator = decorator;
Array.of(payload) }
/**
* Parses the payload with an optional decorator
* @param {object|string} payload the JSON payload
* @return {object} the parsed JSON payload.
*/
parse(payload) {
if (this.decorator) {
payload = this.decorator.parse(payload);
}
return Array.of(payload)
.filter((p) => isDefinedOrThrow(p, nullOrIndefinedPayload)) .filter((p) => isDefinedOrThrow(p, nullOrIndefinedPayload))
.filter((p) => isStringOrObjectOrThrow(p, invalidPayloadTypeError)) .filter((p) => isStringOrObjectOrThrow(p, invalidPayloadTypeError))
.map(asJSON) .map(asJSON)
.shift(); .shift();
}
return json;
} }
JSONParser.prototype.parse = function(payload) {
let toparse = payload;
if (this.decorator) {
toparse = this.decorator.parse(payload);
}
// is that string? is that JSON?
const valid = validateAndParse(toparse);
return valid;
};
module.exports = JSONParser; module.exports = JSONParser;