2023-05-27 18:17:31 -07:00
|
|
|
/**
|
|
|
|
* @author Jon K (jon@ajarsoftware.com)
|
|
|
|
* @copyright Crown Copyright 2016
|
|
|
|
* @license Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
import jsonata from "jsonata";
|
|
|
|
import Operation from "../Operation.mjs";
|
|
|
|
import OperationError from "../errors/OperationError.mjs";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Jsonata Query operation
|
|
|
|
*/
|
|
|
|
class JsonataQuery extends Operation {
|
|
|
|
/**
|
|
|
|
* JsonataQuery constructor
|
|
|
|
*/
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
|
|
|
|
this.name = "Jsonata Query";
|
|
|
|
this.module = "Code";
|
|
|
|
this.description =
|
|
|
|
"Query and transform JSON data with a jsonata query.";
|
|
|
|
this.infoURL = "https://docs.jsonata.org/overview.html";
|
|
|
|
this.inputType = "string";
|
|
|
|
this.outputType = "string";
|
|
|
|
this.args = [
|
|
|
|
{
|
|
|
|
name: "Query",
|
|
|
|
type: "text",
|
|
|
|
value: "string",
|
|
|
|
},
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {string} input
|
|
|
|
* @param {Object[]} args
|
2023-07-13 11:33:07 -07:00
|
|
|
* @returns {string}
|
2023-05-27 18:17:31 -07:00
|
|
|
*/
|
|
|
|
async run(input, args) {
|
|
|
|
const [query] = args;
|
|
|
|
let result, jsonObj;
|
|
|
|
|
|
|
|
try {
|
|
|
|
jsonObj = JSON.parse(input);
|
|
|
|
} catch (err) {
|
|
|
|
throw new OperationError(`Invalid input JSON: ${err.message}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
const expression = jsonata(query);
|
|
|
|
result = await expression.evaluate(jsonObj);
|
|
|
|
} catch (err) {
|
|
|
|
throw new OperationError(
|
|
|
|
`Invalid Jsonata Expression: ${err.message}`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2025-02-17 10:15:13 -07:00
|
|
|
return JSON.stringify(result === undefined ? "" : result);
|
2023-05-27 18:17:31 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default JsonataQuery;
|