浏览代码

feature: #56 custom tegex for arguments (#244)

James Read 2 年之前
父节点
当前提交
c97fd60c25
共有 2 个文件被更改,包括 19 次插入6 次删除
  1. 14 6
      internal/executor/arguments.go
  2. 5 0
      webui.dev/js/ArgumentForm.js

+ 14 - 6
internal/executor/arguments.go

@@ -109,19 +109,27 @@ func TypeSafetyCheck(name string, value string, argumentType string) error {
 }
 }
 
 
 func typeSafetyCheckRegex(name string, value string, argumentType string) error {
 func typeSafetyCheckRegex(name string, value string, argumentType string) error {
-	pattern, found := typecheckRegex[argumentType]
+	pattern := ""
 
 
-	if !found {
-		return errors.New("argument type not implemented " + argumentType)
+	if strings.HasPrefix(argumentType, "regex:") {
+		pattern = strings.Replace(argumentType, "regex:", "", 1)
+	} else {
+		found := false
+		pattern, found = typecheckRegex[argumentType]
+
+		if !found {
+			return errors.New("argument type not implemented " + argumentType)
+		}
 	}
 	}
 
 
 	matches, _ := regexp.MatchString(pattern, value)
 	matches, _ := regexp.MatchString(pattern, value)
 
 
 	if !matches {
 	if !matches {
 		log.WithFields(log.Fields{
 		log.WithFields(log.Fields{
-			"name":  name,
-			"value": value,
-			"type":  argumentType,
+			"name":    name,
+			"value":   value,
+			"type":    argumentType,
+			"pattern": pattern,
 		}).Warn("Arg type check safety failure")
 		}).Warn("Arg type check safety failure")
 
 
 		return errors.New("invalid argument, doesn't match " + argumentType)
 		return errors.New("invalid argument, doesn't match " + argumentType)

+ 5 - 0
webui.dev/js/ArgumentForm.js

@@ -108,6 +108,11 @@ class ArgumentForm extends window.HTMLElement {
       domEl.setAttribute('step', '1')
       domEl.setAttribute('step', '1')
     } else {
     } else {
       domEl = document.createElement('input')
       domEl = document.createElement('input')
+
+      if (arg.type.startsWith(':regex')) {
+        domEl.setAttribute('pattern', arg.type.replace('regex:', ''))
+      }
+
       domEl.onchange = () => {
       domEl.onchange = () => {
         const validateArgumentTypeArgs = {
         const validateArgumentTypeArgs = {
           value: domEl.value,
           value: domEl.value,