Browse Source

arg array options to wrapped func

d98762625 6 năm trước cách đây
mục cha
commit
19366e3624
2 tập tin đã thay đổi với 82 bổ sung14 xóa
  1. 19 7
      src/node/api.mjs
  2. 63 7
      src/node/apiUtils.mjs

+ 19 - 7
src/node/api.mjs

@@ -11,7 +11,7 @@
 import SyncDish from "./SyncDish";
 import NodeRecipe from "./NodeRecipe";
 import OperationConfig from "./config/OperationConfig.json";
-import { sanitise } from "./apiUtils";
+import { sanitise, removeSubheadingsFromArray, sentenceToCamelCase } from "./apiUtils";
 import ExludedOperationError from "../core/errors/ExcludedOperationError";
 
 
@@ -58,12 +58,7 @@ function transformArgs(originalArgs, newArgs) {
     // See Strings op for example.
     const allArgs = Object.assign([], originalArgs).map((a) => {
         if (Array.isArray(a.value)) {
-            a.value = a.value.filter((v) => {
-                if (typeof v === "string") {
-                    return !v.match(/^\[[\s\S]*\]$/); // Matches anything surrounded in [ ]
-                }
-                return true;
-            });
+            a.value = removeSubheadingsFromArray(a.value);
         }
         return a;
     });
@@ -187,6 +182,23 @@ export function wrap(OpClass) {
 
     // used in chef.help
     wrapped.opName = OpClass.name;
+
+    /** */
+    const addArgs = (op) => {
+        const result = {};
+        op.args.forEach((a) => {
+            if (a.type === "option") {
+                result[sentenceToCamelCase(a.name)] = removeSubheadingsFromArray(a.value);
+            } else if (a.type === "toggleString") {
+                result[sentenceToCamelCase(a.name)] = removeSubheadingsFromArray(a.toggleValues);
+            }
+        });
+
+        return result;
+    };
+
+    wrapped.args = addArgs(opInstance);
+
     return wrapped;
 }
 

+ 63 - 7
src/node/apiUtils.mjs

@@ -6,24 +6,61 @@
  * @license Apache-2.0
  */
 
+
+/**
+ * someName => Somename
+ *
+ * @param {String} str = string to be altered
+ * @returns {String}
+ */
+const capitalise = function capitalise(str) {
+    // Don't edit names that start with 2+ caps
+    if (/^[A-Z0-9]{2,}/g.test(str)) {
+        return str;
+    }
+    // reserved. Don't change for now.
+    if (str === "Return") {
+        return str;
+    }
+
+    return `${str.charAt(0).toUpperCase()}${str.substr(1).toLowerCase()}`;
+};
+
+
 /**
  * SomeName => someName
  * @param {String} name - string to be altered
  * @returns {String} decapitalised
  */
-export function decapitalise(name) {
-    // Don't decapitalise names that start with 2+ caps
-    if (/^[A-Z0-9]{2,}/g.test(name)) {
-        return name;
+export function decapitalise(str) {
+    // Don't decapitalise str that start with 2+ caps
+    if (/^[A-Z0-9]{2,}/g.test(str)) {
+        return str;
     }
     // reserved. Don't change for now.
-    if (name === "Return") {
-        return name;
+    if (str === "Return") {
+        return str;
     }
 
-    return `${name.charAt(0).toLowerCase()}${name.substr(1)}`;
+    return `${str.charAt(0).toLowerCase()}${str.substr(1)}`;
 }
 
+
+/**
+ * Remove strings surrounded with [] from the given array.
+*/
+export function removeSubheadingsFromArray(array) {
+    if (Array.isArray(array)) {
+        return array.filter((i) => {
+            if (typeof i === "string") {
+                return !i.match(/^\[[\s\S]*\]$/);
+            }
+            return true;
+        });
+    }
+}
+
+
 /**
  * Remove spaces, make lower case.
  * @param str
@@ -31,3 +68,22 @@ export function decapitalise(name) {
 export function sanitise(str) {
     return str.replace(/ /g, "").toLowerCase();
 }
+
+
+/**
+ * sonething like this => somethingLikeThis
+ * ABC a sentence => ABCASentence
+*/
+export function sentenceToCamelCase(str) {
+    return str.split(" ")
+        .map((s, index) => {
+            if (index === 0) {
+                return decapitalise(s);
+            }
+            return capitalise(s);
+        })
+        .reduce((prev, curr) => `${prev}${curr}`, "");
+}
+
+
+