From 8afbb40f36d5265a9ef355cadeabd35bb713be9b Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Wed, 23 Sep 2020 11:54:15 +0100 Subject: [PATCH] Implementing type cleanup based on the input schema, specifically for booleans and numbers. --- packages/server/src/automations/thread.js | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/packages/server/src/automations/thread.js b/packages/server/src/automations/thread.js index 15445c26f5..30eed75aa4 100644 --- a/packages/server/src/automations/thread.js +++ b/packages/server/src/automations/thread.js @@ -29,6 +29,36 @@ function cleanMustache(string) { return string } +// looks for inputs that need cleanup to the correct type +function cleanInputValue(inputs, schema) { + if (schema == null) { + return inputs + } + for (let inputKey of Object.keys(inputs)) { + let input = inputs[inputKey] + if (typeof input !== "string") { + continue + } + let propSchema = schema.properties[inputKey] + if (propSchema.type === "boolean") { + let lcInput = input.toLowerCase() + if (lcInput === "true") { + inputs[inputKey] = true + } + if (lcInput === "false") { + inputs[inputKey] = false + } + } + if (propSchema.type === "number") { + let floatInput = parseFloat(input) + if (!isNaN(floatInput)) { + inputs[inputKey] = floatInput + } + } + } + return inputs +} + function recurseMustache(inputs, context) { for (let key of Object.keys(inputs)) { let val = inputs[key] @@ -77,6 +107,7 @@ class Orchestrator { for (let step of automation.definition.steps) { let stepFn = await this.getStepFunctionality(step.type, step.stepId) step.inputs = recurseMustache(step.inputs, this._context) + step.inputs = cleanInputValue(step.inputs, step.schema.inputs) // instanceId is always passed const outputs = await stepFn({ inputs: step.inputs,