-
Notifications
You must be signed in to change notification settings - Fork 1
Using JavaScript
JavaScript expressions can be used to transform inputs, generate strings, manipulate content and access variables. Anything between ${} is interpolated as a Template string Everything between ${} must be on 1 line unless you use this approach.
Read about variables here
Aside from the standard JavaScript functions like String.toLowerCase() there are several built-in functions and a few libraries available.
| Function | Description | Parameters | Example |
|---|---|---|---|
| arrayify | Converts a string or array into an array | str || [str] |
arrayify("str") = ["str"]arrayify(["str","str2"]) = ["str","str2"]
|
| bashEscape | Escapes a string for use between $'str' in Bash shells | str |
"echo $'${bashEscape("It'sa me Mario")}'" = "echo $'It\'sa me Mario'"
|
| cfn | Get the value from a CloudFormation stack. Since it is async, you must call it with await. |
stack |
(await cfn(`speedrun-federation-${stage}`)).outputs.HostedZoneId=Z2OJLYMUO9EFXC
|
| acfn | Get the value from a CloudFormation stack. Wrapped version cfn so you don't need the await syntax. |
stack, pathToValue |
acfn(`speedrun-federation-${stage}`,'outputs.HostedZoneId')=Z2OJLYMUO9EFXC
|
| dayjs | The day.js library | See docs |
dayjs().format() = "2022-08-17T15:02:17-07:00"
|
| encodeCloudWatchInsightsParam | Encodes a string for usages as a parameter in a Cloudwatch Insights url | str |
encodeCloudWatchInsightsParam("/lambda/speedrun-federation") = "\*2flambda\*2fspeedrun-api"
|
| encodeCloudWatchURL | Encodes a string for usages as a parameter in a Cloudwatch url | str |
encodeCloudWatchuRL("/lambda/speedrun-federation") = "$252Faws$252Flambda$252Fspeedrun-federation-dev"
|
| firstGroup | get the first matcher group of a regex | regex, str |
firstGroup(/#(\w+)/,"#hashtag") = "hashtag"
|
| firstNonNull | Return the first value that isn't undefined or null | ...str |
firstNonNull(null,undefined,"defined") = "defined"
|
| includesSearch | Return all elements that include str | str, ["str","str2"] |
includesSearch("a",["ab","ba","cd"]) = ["ab","ba"]
|
| JSON5 | The JSON5 library | See docs |
JSON5.parse('{name:"David"}') = {name:"David"}
|
| lastLine | Return the last line of str | str |
lastLine('A long time ago\nIn a faraway land') = "In a faraway land"
|
| nullSafe | Returns a empty {} if o is undefined | o |
nullSafe(undefined) = {}nullSafe("str") = "str"
|
| prefixSearch | Return all elements that are prefixed with str | str, ["str","str2"] |
includesSearch("a",["ab","ba","cd"]) = ["ab"]
|
| prepend | Return all elements prepended with str | str, ["str1","str2",...] |
prepend('a',["b","c"]) = ["ab","ac"]
|
| prettyJSON | Formats json | o, spaces=4 |
prettyJSON({region:"us-east-1", account:"10203456789"}) = {"region": "us-east-1","account": "10203456789"}
|
| regexSearch | Return all elements that are match regex | regex, ["str","str2"] |
regexSearch(/a/,["ab","ba","cd"]) = ["ab","ba"]
|
| srTimestamp | Prompt user for recorded time interval and turn it into url form | n/a |
srTimestamp() = "end~'2022-08-06T17:45:42.557Z~start~'2022-08-06T17:42:35.544Z~timeType~'ABSOLUTE~tz~'UTC"
|
| stringify | Converts o to a JavaScript escaped string | o |
stringify({"region":"us-west-2"}) = "{\"region\":\"us-west-2\"}"
|
| _ | The lodash library | See docs |
_.camelCase('Two Words') = "twoWords"
|
You can define your own functions in your srConfig. Functions must be prefixed with function: The body must be converted to a one line JSON string.
If there is only one argument, reference it with str.
"function:stripNewLines" : {
"body" : "return str.replaceAll('\\n','')"
}
To define a function with multiple arguments specify args containing an array of their names:
"function:concatenate" : {
"args" : ["str1","str2"],
"body" : "return str1 + str2"
}
This is a sample of how to use multiline Javascript. You can use `` (Template string syntax) within a ${}. Click the code tab to see exact code.
#copy
~~~multiline=Multiline? {"type":"checkbox","suppress":"true"}~~~
${multiline?`This
is
some
beautiful multiline content`:'One line'}
If you want to use a default only if a variable isn't defined use this syntax:
${typeof start === 'undefined' ? '-3600' : start}