Support jq.

This commit is contained in:
zhzy0077 2023-07-25 14:42:43 +08:00
parent 6ed9d4554a
commit d2da11c79a
4 changed files with 70 additions and 0 deletions

11
package-lock.json generated
View file

@ -45,6 +45,7 @@
"geodesy": "1.1.3", "geodesy": "1.1.3",
"highlight.js": "^11.7.0", "highlight.js": "^11.7.0",
"jimp": "^0.16.13", "jimp": "^0.16.13",
"jq-web": "^0.5.1",
"jquery": "3.6.4", "jquery": "3.6.4",
"js-crc": "^0.2.0", "js-crc": "^0.2.0",
"js-sha3": "^0.8.0", "js-sha3": "^0.8.0",
@ -8662,6 +8663,11 @@
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
"integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="
}, },
"node_modules/jq-web": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/jq-web/-/jq-web-0.5.1.tgz",
"integrity": "sha512-3Fa3E6g3U1O1j46ljy0EM10yRr4txzILga8J7bqOG8F89gZ6Lilz82WG9z6TItWpYEO0YGa4W8yFGj+NMM1xqQ=="
},
"node_modules/jquery": { "node_modules/jquery": {
"version": "3.6.4", "version": "3.6.4",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz",
@ -19681,6 +19687,11 @@
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
"integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="
}, },
"jq-web": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/jq-web/-/jq-web-0.5.1.tgz",
"integrity": "sha512-3Fa3E6g3U1O1j46ljy0EM10yRr4txzILga8J7bqOG8F89gZ6Lilz82WG9z6TItWpYEO0YGa4W8yFGj+NMM1xqQ=="
},
"jquery": { "jquery": {
"version": "3.6.4", "version": "3.6.4",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz",

View file

@ -127,6 +127,7 @@
"geodesy": "1.1.3", "geodesy": "1.1.3",
"highlight.js": "^11.7.0", "highlight.js": "^11.7.0",
"jimp": "^0.16.13", "jimp": "^0.16.13",
"jq-web": "^0.5.1",
"jquery": "3.6.4", "jquery": "3.6.4",
"js-crc": "^0.2.0", "js-crc": "^0.2.0",
"js-sha3": "^0.8.0", "js-sha3": "^0.8.0",

View file

@ -422,6 +422,7 @@
"CSS Minify", "CSS Minify",
"XPath expression", "XPath expression",
"JPath expression", "JPath expression",
"Jq",
"CSS selector", "CSS selector",
"PHP Deserialize", "PHP Deserialize",
"Microsoft Script Decoder", "Microsoft Script Decoder",

View file

@ -0,0 +1,57 @@
/**
* @author zhzy0077 [zhzy0077@hotmail.com]
* @copyright Crown Copyright 2023
* @license Apache-2.0
*/
import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import jq from "jq-web";
/**
* jq operation
*/
class Jq extends Operation {
/**
* Jq constructor
*/
constructor() {
super();
this.name = "jq";
this.module = "Code";
this.description = "jq is a lightweight and flexible command-line JSON processor.";
this.infoURL = "https://github.com/jqlang/jq";
this.inputType = "JSON";
this.outputType = "string";
this.args = [
{
name: "Query",
type: "string",
value: ""
}
];
}
/**
* @param {JSON} input
* @param {Object[]} args
* @returns {string}
*/
run(input, args) {
const [query] = args;
let result;
try {
result = jq.json(input, query);
} catch (err) {
throw new OperationError(`Invalid jq expression: ${err.message}`);
}
return JSON.stringify(result);
}
}
export default Jq;