github.com/coveo/gotemplate@v2.7.7+incompatible/template/extra_sprig.go (about) 1 package template 2 3 import ( 4 "github.com/Masterminds/sprig" 5 ) 6 7 const ( 8 sprigCrypto = "Sprig Cryptographic & Security, http://masterminds.github.io/sprig/crypto.html" 9 sprigDate = "Sprig Date, http://masterminds.github.io/sprig/date.html" 10 sprigDict = "Sprig Dictionnary, http://masterminds.github.io/sprig/dicst.html" 11 sprigEncoding = "Sprig Encoding, http://masterminds.github.io/sprig/encoding.html" 12 sprigFilePath = "Sprig File Path, http://masterminds.github.io/sprig/paths.html" 13 sprigFlow = "Sprig Flow Control, http://masterminds.github.io/sprig/flow_control.html" 14 sprigGen = "Sprig General, http://masterminds.github.io/sprig/" 15 sprigList = "Sprig List, http://masterminds.github.io/sprig/lists.html" 16 sprigMath = "Sprig Mathematics, http://masterminds.github.io/sprig/math.html" 17 sprigRegex = "Sprig Regex, http://masterminds.github.io/sprig/strings.html" 18 sprigSemver = "Sprig Version comparison, http://masterminds.github.io/sprig/semver.html" 19 sprigString = "Sprig Strings, http://masterminds.github.io/sprig/strings.html" 20 sprigReflect = "Sprig Reflection, http://masterminds.github.io/sprig/reflection.html" 21 sprigDefault = "Sprig Default, http://masterminds.github.io/sprig/defaults.html" 22 sprigOS = "Sprig OS, http://masterminds.github.io/sprig/defaults.html" 23 sprigTypeConversion = "Sprig Type Conversion, http://masterminds.github.io/sprig/conversion.html" 24 sprigStringList = "Sprig String Slice, http://masterminds.github.io/sprig/string_slice.html" 25 ) 26 27 var sprigFuncs funcTableMap 28 29 var sprigFuncMap = sprig.GenericFuncMap() 30 var sprigDef = sprigFuncMap["default"].(func(interface{}, ...interface{}) interface{}) 31 var sprigRound = sprigFuncMap["round"].(func(a interface{}, p int, r_opt ...float64) float64) 32 33 func (t *Template) addSprigFuncs() { 34 if sprigFuncs == nil { 35 // We get the list of aliases to avoid issuing warning a sprig unmapped functions. 36 aliases := make(map[string]string) 37 for key, value := range sprigFuncRef { 38 for _, alias := range value.aliases { 39 aliases[alias] = key 40 } 41 } 42 43 sprigFuncs = make(funcTableMap) 44 for key, value := range sprigFuncMap { 45 info := sprigFuncRef[key] 46 if info.group == "" { 47 if aliases[key] == "" { 48 log.Warning(key, "not found") 49 continue 50 } 51 key = aliases[key] 52 info = sprigFuncRef[key] 53 } 54 sprigFuncs[key] = FuncInfo{function: value, group: info.group, aliases: info.aliases, arguments: info.arguments, description: info.description} 55 } 56 } 57 t.addFunctions(sprigFuncs) 58 } 59 60 var sprigFuncRef = map[string]struct { 61 arguments, aliases []string 62 group, description string 63 }{ 64 "hello": {group: sprigGen, description: "Simple hello by Sprig"}, 65 // Date functions 66 "date": {group: sprigDate, description: "The date function formats a dat (https://golang.org/pkg/time/#Time.Format).", arguments: []string{"fmt", "date"}}, 67 "now": {group: sprigDate, description: "The current date/time. Use this in conjunction with other date functions."}, 68 "htmlDate": {group: sprigDate, description: "The htmlDate function formates a date for inserting into an HTML date picker input field.", arguments: []string{"date"}}, 69 "htmlDateInZone": {group: sprigDate, description: "Same as htmlDate, but with a timezone.", arguments: []string{"date", "zone"}}, 70 "dateInZone": {group: sprigDate, description: "Same as date, but with a timezone.", arguments: []string{"fmt", "date", "zone"}, aliases: []string{"date_in_zone"}}, 71 "dateModify": {group: sprigDate, description: "The dateModify takes a modification and a date and returns the timestamp.", arguments: []string{"fmt", "date"}, aliases: []string{"date_modify"}}, 72 "ago": {group: sprigDate, description: "The ago function returns duration from time.Now in seconds resolution.", arguments: []string{"date"}}, 73 "toDate": {group: sprigDate, description: "Converts a string to a date. The first argument is the date layout and the second the date string. If the string can’t be convert it returns the zero value.", arguments: []string{"fmt", "str"}}, 74 75 // Strings functions 76 "abbrev": {group: sprigString, description: "Truncates a string with ellipses (...).", arguments: []string{"width", "str"}}, 77 "abbrevboth": {group: sprigString, description: "Abbreviates both sides with ellipses (...).", arguments: []string{"left", "right", "str"}}, 78 "camelcase": {group: sprigString, description: "Converts string from snake_case to CamelCase.", arguments: []string{"str"}}, 79 "cat": {group: sprigString, description: "Concatenates multiple strings together into one, separating them with spaces."}, 80 "containsSprig": {group: sprigString, description: "Tests to see if one string is contained inside of another.", arguments: []string{"substr", "str"}, aliases: []string{"contains"}}, 81 "hasPrefix": {group: sprigString, description: "Tests whether a string has a given prefix.", arguments: []string{"prefix", "str"}}, 82 "hasSuffix": {group: sprigString, description: "Tests whether a string has a given suffix.", arguments: []string{"suffix", "str"}}, 83 "indentSprig": {group: sprigString, description: "Indents every line in a given string to the specified indent width. This is useful when aligning multi-line strings.", arguments: []string{"spaces", "str"}, aliases: []string{"indent"}}, 84 "initials": {group: sprigString, description: "Given multiple words, takes the first letter of each word and combine.", arguments: []string{"str"}}, 85 "kebabcase": {group: sprigString, description: "Convert string from camelCase to kebab-case.", arguments: []string{"str"}}, 86 "lower": {group: sprigString, description: "Converts the entire string to lowercase.", arguments: []string{"str"}}, 87 "nindentSprig": {group: sprigString, description: "Same as the indent function, but prepends a new line to the beginning of the string.", arguments: []string{"spaces", "str"}, aliases: []string{"nindent"}}, 88 "nospace": {group: sprigString, description: "Removes all whitespace from a string.", arguments: []string{"str"}}, 89 "plural": {group: sprigString, description: "Pluralizes a string.", arguments: []string{"one", "many", "count"}}, 90 "quote": {group: sprigString, description: "Wraps each argument with double quotes.", arguments: []string{"str"}}, 91 "randAlpha": {group: sprigString, description: "Generates random string with letters.", arguments: []string{"count"}}, 92 "randAlphaNum": {group: sprigString, description: "Generates random string with letters and digits.", arguments: []string{"count"}}, 93 "randAscii": {group: sprigString, description: "Generates random string with ASCII printable characters.", arguments: []string{"count"}}, 94 "randNumeric": {group: sprigString, description: "Generates random string with digits.", arguments: []string{"count"}}, 95 "repeatSprig": {group: sprigString, description: "Repeats a string multiple times.", arguments: []string{"count", "str"}, aliases: []string{"repeat"}}, 96 "replace": {group: sprigString, description: "Performs simple string replacement.", arguments: []string{"old", "new", "src"}}, 97 "shuffle": {group: sprigString, description: "Shuffle a string.", arguments: []string{"str"}}, 98 "snakecase": {group: sprigString, description: "Converts string from camelCase to snake_case.", arguments: []string{"str"}}, 99 "squote": {group: sprigString, description: "Wraps each argument with single quotes."}, 100 "substr": {group: sprigString, description: "Get a substring from a string.", arguments: []string{"start", "length", "str"}}, 101 "swapcase": {group: sprigString, description: "Swaps the uppercase to lowercase and lowercase to uppercase.", arguments: []string{"str"}}, 102 "title": {group: sprigString, description: "Converts to title case.", arguments: []string{"str"}}, 103 "toString": {group: sprigString, description: "Converts any value to string.", arguments: []string{"value"}}, 104 "trim": {group: sprigString, description: "Removes space from either side of a string.", arguments: []string{"str"}}, 105 "trimAll": {group: sprigString, description: "Removes given characters from the front or back of a string.", aliases: []string{"trimall"}, arguments: []string{"chars", "str"}}, 106 "trimPrefix": {group: sprigString, description: "Trims just the prefix from a string if present.", arguments: []string{"prefix", "str"}}, 107 "trimSuffix": {group: sprigString, description: "Trims just the suffix from a string if present.", arguments: []string{"suffix", "str"}}, 108 "truncSprig": {group: sprigString, description: "Truncates a string (and add no suffix).", arguments: []string{"length", "str"}, aliases: []string{"trunc"}}, 109 "untitle": {group: sprigString, description: `Removes title casing.`, arguments: []string{"str"}}, 110 "upper": {group: sprigString, description: "Converts the entire string to uppercase.", arguments: []string{"str"}}, 111 "wrapSprig": {group: sprigString, description: "Wraps text at a given column count.", arguments: []string{"length", "str"}, aliases: []string{"wrap"}}, 112 "wrapWith": {group: sprigString, description: "Works as wrap, but lets you specify the string to wrap with (wrap uses \\n).", arguments: []string{"length", "spe", "str"}}, 113 114 "atoi": {group: sprigTypeConversion}, 115 "int64": {group: sprigTypeConversion}, 116 "intSprig": {group: sprigTypeConversion, aliases: []string{"int"}}, 117 "float64": {group: sprigTypeConversion}, 118 119 "split": {group: sprigStringList}, 120 "splitn": {group: sprigStringList}, 121 "splitList": {group: sprigStringList}, 122 "toStrings": {group: sprigStringList}, 123 "join": {group: sprigStringList}, 124 "sortAlpha": {group: sprigStringList}, 125 126 // VERY basic arithmetic. 127 "add1": {group: sprigMath}, 128 "addSprig": {group: sprigMath, aliases: []string{"add"}}, 129 "subSprig": {group: sprigMath, aliases: []string{"sub"}}, 130 "divSprig": {group: sprigMath, aliases: []string{"div"}}, 131 "modSprig": {group: sprigMath, aliases: []string{"mod"}}, 132 "mulSprig": {group: sprigMath, aliases: []string{"mul"}}, 133 "maxSprig": {group: sprigMath, aliases: []string{"max", "biggest", "biggestSprig"}}, 134 "minSprig": {group: sprigMath, aliases: []string{"min"}}, 135 "ceilSprig": {group: sprigMath, aliases: []string{"ceil"}}, 136 "floorSprig": {group: sprigMath, aliases: []string{"floor"}}, 137 "round": {group: sprigMath}, 138 139 "until": {group: sprigMath, aliases: []string{"until"}}, 140 "untilStep": {group: sprigMath}, 141 142 // Defaults 143 "default": {group: sprigDefault}, 144 "empty": {group: sprigDefault}, 145 "coalesce": {group: sprigDefault}, 146 "compact": {group: sprigDefault}, 147 "toJsonSprig": {group: sprigDefault, aliases: []string{"toJson"}}, 148 "toPrettyJsonSprig": {group: sprigDefault, aliases: []string{"toPrettyJson"}}, 149 "ternarySprig": {group: sprigDefault, aliases: []string{"ternary"}}, 150 151 // Reflection 152 "typeOf": {group: sprigReflect, aliases: []string{"typeof"}}, 153 "typeIs": {group: sprigReflect, aliases: []string{"typeis"}}, 154 "typeIsLike": {group: sprigReflect, aliases: []string{"typeisLike"}}, 155 "kindOf": {group: sprigReflect, aliases: []string{"kindof"}}, 156 "kindIs": {group: sprigReflect, aliases: []string{"kindis"}}, 157 158 // OS: 159 "env": {group: sprigOS}, 160 "expandenv": {group: sprigOS}, 161 162 // File Paths: 163 "base": {group: sprigFilePath}, 164 "dir": {group: sprigFilePath}, 165 "clean": {group: sprigFilePath}, 166 "ext": {group: sprigFilePath}, 167 "isAbs": {group: sprigFilePath}, 168 169 // Encoding: 170 "b64enc": {group: sprigEncoding}, 171 "b64dec": {group: sprigEncoding}, 172 "b32enc": {group: sprigEncoding}, 173 "b32dec": {group: sprigEncoding}, 174 175 // Data Structures: 176 "listSprig": {group: sprigDict, aliases: []string{"list", "tuple", "tupleSprig"}}, 177 "dictSprig": {group: sprigDict, aliases: []string{"dict"}}, 178 "setSprig": {group: sprigDict, aliases: []string{"set"}}, 179 "unsetSprig": {group: sprigDict, aliases: []string{"unset"}}, 180 "hasKeySprig": {group: sprigDict, aliases: []string{"hasKey"}}, 181 "pluckSprig": {group: sprigDict, aliases: []string{"pluck"}}, 182 "keysSprig": {group: sprigDict, aliases: []string{"keys"}}, 183 "pickSprig": {group: sprigDict, aliases: []string{"pick"}}, 184 "omitSprig": {group: sprigDict, aliases: []string{"omit"}}, 185 "mergeSprig": {group: sprigDict, aliases: []string{"merge"}}, 186 "mergeOverwrite": {group: sprigDict, description: "Merge two or more dictionaries into one, giving precedence from **right to left**, effectively overwriting values in the dest dictionary"}, 187 "valuesSprig": {group: sprigDict, aliases: []string{"values"}}, 188 189 // Lists functions 190 "appendSprig": {group: sprigList, aliases: []string{"append", "push", "pushSprig"}}, 191 "prependSprig": {group: sprigList, aliases: []string{"prepend"}}, 192 "first": {group: sprigList}, 193 "restSprig": {group: sprigList, aliases: []string{"rest"}}, 194 "last": {group: sprigList}, 195 "initialSprig": {group: sprigList, aliases: []string{"initial"}}, 196 "reverseSprig": {group: sprigList, aliases: []string{"reverse"}}, 197 "uniqSprig": {group: sprigList, aliases: []string{"uniq"}}, 198 "withoutSprig": {group: sprigList, aliases: []string{"without"}}, 199 "hasSprig": {group: sprigList, aliases: []string{"has"}}, 200 "sliceSprig": {group: sprigList, aliases: []string{"slice"}}, 201 202 // Cryptographics functions 203 "adler32sum": {group: sprigCrypto, description: "Computes Adler-32 checksum.", arguments: []string{"input"}}, 204 "sha1sum": {group: sprigCrypto, description: "Computes SHA1 digest.", arguments: []string{"input"}}, 205 "sha256sum": {group: sprigCrypto, description: "Computes SHA256 digest.", arguments: []string{"input"}}, 206 "genPrivateKey": {group: sprigCrypto, description: "Generates a new private key encoded into a PEM block. Type should be: ecdsa, dsa or rsa", arguments: []string{"type"}}, 207 "derivePassword": {group: sprigCrypto}, 208 "buildCustomCert": {group: sprigCrypto}, 209 "genCA": {group: sprigCrypto}, 210 "genSelfSignedCert": {group: sprigCrypto}, 211 "genSignedCert": {group: sprigCrypto}, 212 213 // UUIDs: 214 "uuidv4": {group: sprigGen, aliases: []string{"uuid", "guid", "GUID"}}, 215 216 // SemVer: 217 "semver": {group: sprigSemver, description: "Parses a string into a Semantic Version.", arguments: []string{"version"}}, 218 "semverCompare": {group: sprigSemver, description: "A more robust comparison function is provided as semverCompare. This version supports version ranges.", arguments: []string{"constraints", "version"}}, 219 220 // Flow Control: 221 "fail": {group: sprigFlow, description: "Unconditionally returns an empty string and an error with the specified text. This is useful in scenarios where other conditionals have determined that template rendering should fail."}, 222 223 // Regex 224 "regexMatch": {group: sprigRegex, description: "Returns true if the input string matches the regular expression.", arguments: []string{"regex", "str"}}, 225 "regexFindAll": {group: sprigRegex, description: "Returns a slice of all matches of the regular expression in the input string.", arguments: []string{"regex", "str", "n"}}, 226 "regexFind": {group: sprigRegex, description: "Returns the first (left most) match of the regular expression in the input string.", arguments: []string{"regex", "str"}}, 227 "regexReplaceAll": {group: sprigRegex, description: "Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement. Inside string replacement, $ signs are interpreted as in Expand, so for instance $1 represents the text of the first submatch.", arguments: []string{"regex", "str", "repl"}}, 228 "regexReplaceAllLiteral": {group: sprigRegex, description: "Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement The replacement string is substituted directly, without using Expand.", arguments: []string{"regex", "str", "repl"}}, 229 "regexSplit": {group: sprigRegex, description: "Slices the input string into substrings separated by the expression and returns a slice of the substrings between those expression matches. The last parameter n determines the number of substrings to return, where -1 means return all matches.", arguments: []string{"regex", "str", "n"}}, 230 }