Debugging your function
When you write a function in Function service, you may encounter errors while running the function.
In this case, you can debug your code by checking the logs from your function.
Example
Assuming you have a function like below:
<span><span style="color: var(--shiki-token-keyword)">import</span><span style="color: var(--shiki-color-text)"> { gql</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> request } </span><span style="color: var(--shiki-token-keyword)">from</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"graphql-request"</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
<span><span style="color: var(--shiki-token-constant)">globalThis</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">main</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> (args) {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">document</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">gql</span><span style="color: var(--shiki-token-string-expression)">`</span></span>
<span><span style="color: var(--shiki-token-string-expression)"> query ExampleQuery($pokemon: String!) {</span></span>
<span><span style="color: var(--shiki-token-string-expression)"> getFuzzyPokemon(pokemon: $pokemon) {</span></span>
<span><span style="color: var(--shiki-token-string-expression)"> species</span></span>
<span><span style="color: var(--shiki-token-string-expression)"> }</span></span>
<span><span style="color: var(--shiki-token-string-expression)"> }</span></span>
<span><span style="color: var(--shiki-token-string-expression)"> `</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">console</span><span style="color: var(--shiki-token-function)">.log</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">JSON</span><span style="color: var(--shiki-token-function)">.stringify</span><span style="color: var(--shiki-color-text)">(args)); </span><span style="color: var(--shiki-token-comment)">// log the input args</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">variables</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> pokemon</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">args</span><span style="color: var(--shiki-color-text)">.pokemon</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-comment)">// e.g., "rayquaza"</span></span>
<span><span style="color: var(--shiki-color-text)"> };</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">let</span><span style="color: var(--shiki-color-text)"> res </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">request</span><span style="color: var(--shiki-color-text)">(</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"https://graphqlpokemon.favware.tech/v8"</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> document</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> variables</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> );</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">console</span><span style="color: var(--shiki-token-function)">.log</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">JSON</span><span style="color: var(--shiki-token-function)">.stringify</span><span style="color: var(--shiki-color-text)">(res)); </span><span style="color: var(--shiki-token-comment)">// log the response</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)"> { species</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">res</span><span style="color: var(--shiki-color-text)">.getFuzzyPokemon[</span><span style="color: var(--shiki-token-constant)">0</span><span style="color: var(--shiki-color-text)">].species };</span></span>
<span><span style="color: var(--shiki-color-text)">};</span></span>
<span></span>
After deploying the function with these steps, you can run the function with the test-run
command in tailorctl.
<span><span style="color: var(--shiki-color-text)">tailorctl workspace </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">test</span><span style="color: var(--shiki-color-text)">-</span><span style="color: var(--shiki-token-function)">run</span><span style="color: var(--shiki-color-text)"> -</span><span style="color: var(--shiki-token-function)">s</span><span style="color: var(--shiki-color-text)"> .</span><span style="color: var(--shiki-token-function)">script</span><span style="color: var(--shiki-color-text)">/</span><span style="color: var(--shiki-token-function)">dist</span><span style="color: var(--shiki-color-text)">/</span><span style="color: var(--shiki-token-function)">get_pokemon_function</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">js</span><span style="color: var(--shiki-color-text)"> -</span><span style="color: var(--shiki-token-function)">a</span><span style="color: var(--shiki-color-text)"> <</span><span style="color: var(--shiki-token-function)">YOUR_APP_NAME</span><span style="color: var(--shiki-color-text)">> -</span><span style="color: var(--shiki-token-function)">m</span><span style="color: var(--shiki-color-text)"> <</span><span style="color: var(--shiki-token-function)">YOUR_MACHINE_USER_NAME</span><span style="color: var(--shiki-color-text)">> -</span><span style="color: var(--shiki-token-function)">g</span><span style="color: var(--shiki-color-text)"> '{</span><span style="color: var(--shiki-token-string-expression)">"pokemon"</span><span style="color: var(--shiki-color-text)">: </span><span style="color: var(--shiki-token-string-expression)">"ay"</span><span style="color: var(--shiki-color-text)">}</span><span style="color: var(--shiki-token-string-expression)">' --tail</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">[result]</span></span>
<span><span style="color: var(--shiki-color-text)">{</span><span style="color: var(--shiki-token-function)">"species"</span><span style="color: var(--shiki-token-function)">:</span><span style="color: var(--shiki-token-function)">"rayquaza"</span><span style="color: var(--shiki-token-function)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">[log]</span></span>
<span><span style="color: var(--shiki-token-function)">2025-02-14T07:16:31.590771150Z</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">INFO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">{</span><span style="color: var(--shiki-token-string-expression)">"pokemon"</span><span style="color: var(--shiki-token-string)">:</span><span style="color: var(--shiki-token-string-expression)">"ay"</span><span style="color: var(--shiki-token-string)">}</span></span>
<span><span style="color: var(--shiki-token-function)">2025-02-14T07:16:32.467262922Z</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">INFO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">{</span><span style="color: var(--shiki-token-string-expression)">"getFuzzyPokemon"</span><span style="color: var(--shiki-token-string)">:[{</span><span style="color: var(--shiki-token-string-expression)">"species"</span><span style="color: var(--shiki-token-string)">:</span><span style="color: var(--shiki-token-string-expression)">"rayquaza"</span><span style="color: var(--shiki-token-string)">}]}</span></span>
<span></span>
Here's flags for the test-run
command:
Flags:
-a, --app string app name
-g, --arg string argument to the script
-h, --help help for test-run
-m, --machineuser string machieuser name
-s, --script-path string script path
-t, --tail tail console.log