Exporing options with API.

This commit is contained in:
d98762625 2018-04-13 12:14:40 +01:00
parent 30aa4e05ef
commit 59877b5138
5 changed files with 149 additions and 17 deletions

View file

@ -118,6 +118,7 @@
"build": "grunt prod", "build": "grunt prod",
"test": "grunt test", "test": "grunt test",
"docs": "grunt docs", "docs": "grunt docs",
"lint": "grunt lint" "lint": "grunt lint",
"build-node": "grunt node"
} }
} }

View file

@ -240,6 +240,26 @@ class Dish {
} }
} }
/**
*
*/
findType() {
if (!this.value) {
throw "Dish has no value";
}
const types = [Dish.BYTE_ARRAY, Dish.STRING, Dish.HTML, Dish.NUMBER, Dish.ARRAY_BUFFER, Dish.BIG_NUMBER, Dish.LIST_FILE];
types.find((type) => {
this.type = type;
if (this.valid()) {
return true;
}
});
return this.type;
}
/** /**
* Determines how much space the Dish takes up. * Determines how much space the Dish takes up.

View file

@ -45,7 +45,6 @@ class ToBase32 extends Operation {
chr1, chr2, chr3, chr4, chr5, chr1, chr2, chr3, chr4, chr5,
enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8, enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8,
i = 0; i = 0;
while (i < input.length) { while (i < input.length) {
chr1 = input[i++]; chr1 = input[i++];
chr2 = input[i++]; chr2 = input[i++];
@ -76,7 +75,6 @@ class ToBase32 extends Operation {
alphabet.charAt(enc4) + alphabet.charAt(enc5) + alphabet.charAt(enc6) + alphabet.charAt(enc4) + alphabet.charAt(enc5) + alphabet.charAt(enc6) +
alphabet.charAt(enc7) + alphabet.charAt(enc8); alphabet.charAt(enc7) + alphabet.charAt(enc8);
} }
return output; return output;
} }

99
src/node/Wrapper.mjs Normal file
View file

@ -0,0 +1,99 @@
/**
* Wrap operations in a
*
* @author d98762625 [d98762625@gmail.com]
* @copyright Crown Copyright 2018
* @license Apache-2.0
*/
import Dish from "../core/Dish";
import log from "loglevel";
/**
*
*/
export default class Wrapper {
/**
*
* @param arg
*/
extractArg(arg) {
if (arg.type === "option" || arg.type === "editableOption") {
return arg.value[0];
}
return arg.value;
}
/**
*
*/
wrap(operation) {
this.operation = new operation();
// This for just exposing run function:
// return this.run.bind(this);
/**
*
* @param input
* @param args
*/
const _run = async(input, args=null) => {
const dish = new Dish(input);
try {
dish.findType();
} catch (e) {
log.debug(e);
}
if (!args) {
args = this.operation.args.map(this.extractArg);
} else {
// Allows single arg ops to have arg defined not in array
if (!(args instanceof Array)) {
args = [args];
}
}
const transformedInput = await dish.get(Dish.typeEnum(this.operation.inputType));
return this.operation.innerRun(transformedInput, args);
};
// There's got to be a nicer way to do this!
this.operation.innerRun = this.operation.run;
this.operation.run = _run;
return this.operation;
}
/**
*
* @param input
*/
async run(input, args = null) {
const dish = new Dish(input);
try {
dish.findType();
} catch (e) {
log.debug(e);
}
if (!args) {
args = this.operation.args.map(this.extractArg);
} else {
// Allows single arg ops to have arg defined not in array
if (!(args instanceof Array)) {
args = [args];
}
}
const transformedInput = await dish.get(Dish.typeEnum(this.operation.inputType));
return this.operation.run(transformedInput, args);
}
}

View file

@ -18,22 +18,36 @@ global.ENVIRONMENT_IS_WEB = function() {
return typeof window === "object"; return typeof window === "object";
}; };
import Chef from "../core/Chef"; // import Chef from "../core/Chef";
const CyberChef = { // const CyberChef = {
bake: function(input, recipeConfig) { // bake: function(input, recipeConfig) {
this.chef = new Chef(); // this.chef = new Chef();
return this.chef.bake( // return this.chef.bake(
input, // input,
recipeConfig, // recipeConfig,
{}, // {},
0, // 0,
false // false
); // );
// }
// };
// export default CyberChef;
// export {CyberChef};
import Wrapper from "./Wrapper";
import * as operations from "../core/operations/index";
const cyberChef = {
base32: {
from: new Wrapper().wrap(operations.FromBase32),
to: new Wrapper().wrap(operations.ToBase32),
} }
}; };
export default CyberChef; export default cyberChef;
export {CyberChef}; export {cyberChef};