Browse Source

in/out typing working. Added translateTo function

d98762625 7 years ago
parent
commit
c238862efe
3 changed files with 23 additions and 8 deletions
  1. 1 0
      src/core/Dish.mjs
  2. 20 7
      src/node/apiUtils.mjs
  3. 2 1
      src/node/index.mjs

+ 1 - 0
src/core/Dish.mjs

@@ -39,6 +39,7 @@ class Dish {
      */
     static typeEnum(typeStr) {
         switch (typeStr.toLowerCase()) {
+            case "array":
             case "bytearray":
             case "byte array":
                 return Dish.BYTE_ARRAY;

+ 20 - 7
src/node/apiUtils.mjs

@@ -35,13 +35,12 @@ export function wrap(Operation) {
      */
     return async (input, args=null) => {
         const operation = new Operation();
-        const dish = new Dish(input);
+        const dish = new Dish();
 
-        try {
-            dish.findType();
-        } catch (e) {
-            log.debug(e);
-        }
+        // Stolen from Recipe. Only works there as raw input is one 
+        // of these types. consider a mapping for all use cases like below.
+        const type = input instanceof ArrayBuffer ? Dish.ARRAY_BUFFER : Dish.STRING;
+        dish.set(input, type);
 
         if (!args) {
             args = operation.args.map(extractArg);
@@ -51,11 +50,25 @@ export function wrap(Operation) {
                 args = [args];
             }
         }
-        const transformedInput = await dish.get(Dish.typeEnum(operation.inputType));
+        const transformedInput = await dish.get(operation.inputType);
         return operation.run(transformedInput, args);
     };
 }
 
+/**
+ * First draft
+ * @param input 
+ * @param type 
+ */
+export async function translateTo(input, type) {
+    const dish = new Dish();
+
+    const initialType = Dish.typeEnum(input.constructor.name);
+
+    dish.set(input, initialType);
+    return await dish.get(type);
+}
+
 /**
  * 
  * @param searchTerm 

+ 2 - 1
src/node/index.mjs

@@ -7,7 +7,7 @@
  */
 import "babel-polyfill";
 
-import {wrap, help, decapitalise} from "./apiUtils";
+import {wrap, help, decapitalise, translateTo} from "./apiUtils";
 import * as operations from "../core/operations/index";
 
 // Define global environment functions
@@ -29,6 +29,7 @@ Object.keys(operations).forEach(op =>
     chef[decapitalise(op)] = wrap(operations[op]));
 
 chef.help = help.bind(null, operations);
+chef.translateTo = translateTo;
 
 export default chef;
 export {chef};