PageSourceSearch

https://gaute.dev/assets/dev-blog_dynamodb-for-our-kotlin-lambda-function.md.e8138a46.js

js gaute.dev collected 2026-10-03 19:57:14 UTC 24,341 bytes, 70 lines download raw bytes

1import{_ as a,c as n,l,o}from"./chunks/framework.24cd38f4.js";const A=JSON.parse('{"title":"DynamoDB for our Kotlin Lambda function","description":"How to create a DynamoDB table and interact with it from Kotlin code.","frontmatter":{"title":"DynamoDB for our Kotlin Lambda function","date":"2020-06-10T00:00:00.000Z","coverImgExtension":"png","tags":["AWS","Kotlin"],"series":"Twitter bot with Kotlin in AWS","description":"How to create a DynamoDB table and interact with it from Kotlin code."},"headers":[],"relativePath":"dev-blog/dynamodb-for-our-kotlin-lambda-function.md"}'),p={name:"dev-blog/dynamodb-for-our-kotlin-lambda-function.md"};function e(t,s,c,r,B,y){return o(),n("div",null,[...s[0]||(s[0]=[l(`<p>This article is part of the <strong>Twitter bot with Kotlin in AWS series</strong> showing how <a href="/dev-blog/twitter-bot-vue-3-updates.html">I created a Twitter bot for Vue 3 updates</a>. But this article works as an independent article on how to create a DynamoDB table and interact with it from Kotlin code.</p><p>If you haven&#39;t set up a Lambda function in Kotlin before, you can look <a href="/dev-blog/creating-an-aws-lambda-kotlin-function.html">here</a>. Also, remember to give your role running the code permission to access DynamoDB.</p><p>Now it&#39;s time to set up our DynamoDB table, add some items, and write code to read and update them.</p><h2 id="table-setup" tabindex="-1">Table setup <a class="header-anchor" href="#table-setup" aria-label="Permalink to &quot;Table setup&quot;">​</a></h2><p>First, let&#39;s create our table through the AWS CLI. We are specifying our required partition key with the --attribute-definitions and --key-schema, saying that the attribute &quot;Project&quot; is a string and HASH for the partition key.</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">aws</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">dynamodb</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">create-table</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">--table-name</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">twitter-bot-vue-3</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">--attribute-definitions</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">AttributeName=Project,AttributeType=S</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">-</span></span>
2<span class="line"><span style="color:#FFCB6B;">-key-schema</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">AttributeName=Project,KeyType=HASH</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">--billing-mode</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">PAY_PER_REQUEST</span></span>
3<span class="line"></span></code></pre></div><p>For my use case, I want an item for each changelog file I&#39;m looking up. They will be defined beforehand, so you can add them through the AWS console, AWS CLI, or code if you want. This is how to add an item with the CLI. (for Linux-based systems, you can change to single quotes &#39; at the start and end and skip the escaping of quotes).</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">aws</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">dynamodb</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">put-item</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">--table-name</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">twitter-bot-vue-3</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">--item</span><span style="color:#BABED8;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">
3{</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">Project</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">: {</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">S</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">: </span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">Vue 3</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">}, </span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">Changelog</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">: {</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">S</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">: </span><span style="color:#BABED8;">\\&quot;</span></span>
4<span class="line"><span style="color:#C3E88D;">https://github.com/vuejs/vue-next/blob/master/CHANGELOG.md</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">}, </span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">LastRecordedChange</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">: {</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">S</span><span style="color:#BABED8;">\\&quot;</span><span style="color:#C3E88D;">: </span><span style="color:#BABED8;">\\&quot;\\&quot;</span><span style="color:#C3E88D;">}}</span><span style="color:#89DDFF;">&quot;</span></span>
5<span class="line"></span></code></pre></div><h2 id="dependencies" tabindex="-1">Dependencies <a class="header-anchor" href="#dependencies" aria-label="Permalink to &quot;Dependencies&quot;">​</a></h2><p>Now go to the <code>build.gradle.kts</code> file and add these two dependencies (add them to the existing dependencies in your file). You can find the latest version <a href="https://sdk.amazonaws.com/java/api/latest/" target="_blank" rel="noreferrer">here</a>.</p><div class="language-kotlin"><button title="Copy Code" class="copy"></button><span class="lang">kotlin</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#82AAFF;">dependencies</span><span style="color:#BABED8;"> {</span></span>
6<span class="line"><span style="color:#BABED8;">    </span><span style="color:#82AAFF;">implementation</span><span style="color:#BABED8;">(</span><span style="color:#82AAFF;">platform</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&quot;software.amazon.awssdk:bom:2.13.18&quot;</span><span style="color:#BABED8;">))</span></span>
7<span class="line"><span style="color:#BABED8;">    </span><span style="color:#82AAFF;">implementation</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&quot;software.amazon.awssdk:dynamodb&quot;</span><span style="color:#BABED8;">)</span></span>
8<span class="line"><span style="color:#BABED8;">}</span></span>
9<span class="line"></span></code></pre></div><h2 id="read-and-update-items" tabindex="-1">Read and update items <a class="header-anchor" href="#read-and-update-items" aria-label="Permalink to &quot;Read and update items&quot;">​</a></h2><p>I have the file <code>ProjectsDB.kt</code> which has two methods that interact with the DynamoDB table.</p><div class="language-kotlin"><button title="Copy Code" class="copy"></button><span class="lang">kotlin</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">import</span><span style="color:#BABED8;"> </span><span style="color:#FFCB6B;">software.amazon.awssdk.services.dynamodb.DynamoDbClient</span></span>
10<span class="line"><span style="color:#C792EA;">import</span><span style="color:#BABED8;"> </span><span style="color:#FFCB6B;">software.amazon.awssdk.services.dynamodb.model.</span><span style="color:#BABED8;">*</span></span>
11<span class="line"></span>
12<span class="line"><span style="color:#C792EA;">data</span><span style="color:#BABED8;"> </span><span style="color:#C792EA;">class</span><span style="color:#BABED8;"> </span><span style="color:#FFCB6B;">Project</span><span style="color:#BABED8;">(</span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> name: </span><span style="color:#FFCB6B;">String</span><span style="color:#BABED8;">, </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> changelog: </span><span style="color:#FFCB6B;">String</span><span style="color:#BABED8;">, </span><span style="color:#C792EA;">var</span><span style="color:#BABED8;">
12 lastRecordedChangelog: </span><span style="color:#FFCB6B;">String</span><span style="color:#BABED8;">)</span></span>
13<span class="line"></span>
14<span class="line"><span style="color:#C792EA;">const</span><span style="color:#BABED8;"> </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> tableName </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">&quot;twitter-bot-vue-3&quot;</span></span>
15<span class="line"></span>
16<span class="line"><span style="color:#C792EA;">fun</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">readProjects</span><span style="color:#BABED8;">(): </span><span style="color:#FFCB6B;">List</span><span style="color:#BABED8;">&lt;</span><span style="color:#FFCB6B;">Project</span><span style="color:#BABED8;">&gt;{</span></span>
17<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> client </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> DynamoDbClient.</span><span style="color:#82AAFF;">create</span><span style="color:#BABED8;">()</span></span>
18<span class="line"></span>
19<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> result </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> client.</span><span style="color:#82AAFF;">scan</span><span style="color:#BABED8;"> {</span></span>
20<span class="line"><span style="color:#BABED8;">        it.</span><span style="color:#82AAFF;">tableName</span><span style="color:#BABED8;">(tableName)</span></span>
21<span class="line"><span style="color:#BABED8;">    }</span></span>
22<span class="line"><span style="color:#BABED8;">    </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#BABED8;"> result.</span><span style="color:#82AAFF;">items</span><span style="color:#BABED8;">().</span><span style="color:#82AAFF;">map</span><span style="color:#BABED8;"> {</span></span>
23<span class="line"><span style="color:#BABED8;">        </span><span style="color:#82AAFF;">Project</span><span style="color:#BABED8;">(it[</span><span style="color:#C3E88D;">&quot;Project&quot;</span><span style="color:#BABED8;">]</span><span style="color:#89DDFF;">!!</span><span style="color:#BABED8;">.</span><span style="color:#82AAFF;">s</span><span style="color:#BABED8;">(), it[</span><span style="color:#C3E88D;">&quot;Changelog&quot;</span><span style="color:#BABED8;">]</span><span style="color:#89DDFF;">!!</span><span style="color:#BABED8;">.</span><span style="color:#82AAFF;">s</span><span style="color:#BABED8;">(), it[</span><span style="color:#C3E88D;">&quot;LastRecordedChange&quot;</span><span style="color:#BABED8;">]</span><span style="color:#89DDFF;">!!</span><span style="color:#BABED8;">.</span><span style="color:#82AAFF;">s</span><span style="color:#BABED8;">())</span></span>
24<span class="line"><span style="color:#BABED8;">    }</span></span>
25<span class="line"><span style="color:#BABED8;">}</span></span>
26<span class="line"></span>
27<span class="line"><span style="color:#C792EA;">fun</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">updateProjectLastRecordedChange</span><span style="color:#BABED8;">(project: </span><span style="color:#FFCB6B;">Project</span><span style="color:#BABED8;">){</span></span>
28<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> client </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> DynamoDbClient.</span><span style="color:#82AAFF;">create</span><span style="color:#BABED8;">()</span></span>
29<span class="line"></span>
30<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> key </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">mutableMapOf</span><span style="color:#BABED8;">(</span><span style="color:#82AAFF;">Pair</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&quot;Project&quot;</span><span style="color:#BABED8;">, </span><span style="color:#82AAFF;">createAttributeValueString</span><span style="color:#BABED8;">
30(project.name)))</span></span>
31<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> updates </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">mutableMapOf</span><span style="color:#BABED8;">(</span><span style="color:#82AAFF;">Pair</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&quot;LastRecordedChange&quot;</span><span style="color:#BABED8;">, AttributeValueUpdate</span></span>
32<span class="line"><span style="color:#BABED8;">        .</span><span style="color:#82AAFF;">builder</span><span style="color:#BABED8;">()</span></span>
33<span class="line"><span style="color:#BABED8;">        .</span><span style="color:#82AAFF;">value</span><span style="color:#BABED8;">(</span><span style="color:#82AAFF;">createAttributeValueString</span><span style="color:#BABED8;">(project.lastRecordedChangelog))</span></span>
34<span class="line"><span style="color:#BABED8;">        .</span><span style="color:#82AAFF;">action</span><span style="color:#BABED8;">(AttributeAction.PUT)</span></span>
35<span class="line"><span style="color:#BABED8;">        .</span><span style="color:#82AAFF;">build</span><span style="color:#BABED8;">()</span></span>
36<span class="line"><span style="color:#BABED8;">    ))</span></span>
37<span class="line"></span>
38<span class="line"><span style="color:#BABED8;">    client.</span><span style="color:#82AAFF;">updateItem</span><span style="color:#BABED8;"> {</span></span>
39<span class="line"><span style="color:#BABED8;">        it.</span><span style="color:#82AAFF;">tableName</span><span style="color:#BABED8;">(tableName)</span></span>
40<span class="line"><span style="color:#BABED8;">        it.</span><span style="color:#82AAFF;">key</span><span style="color:#BABED8;">(key)</span></span>
41<span class="line"><span style="color:#BABED8;">        it.</span><span style="color:#82AAFF;">attributeUpdates</span><span style="color:#BABED8;">(updates)</span></span>
42<span class="line"><span style="color:#BABED8;">    }</span></span>
43<span class="line"><span style="color:#BABED8;">}</span></span>
44<span class="line"></span>
45<span class="line"><span style="color:#C792EA;">fun</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">createAttributeValueString</span><span style="color:#BABED8;">(</span><span style="color:#C792EA;">value</span><span style="color:#BABED8;">: </span><span style="color:#FFCB6B;">String</span><span style="color:#BABED8;">): </span><span style="color:#FFCB6B;">AttributeValue</span><span style="color:#BABED8;"> </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> AttributeValue.</span><span style="color:#82AAFF;">builder</span><span style="color:#BABED8;">().</span><span style="color:#82AAFF;">s</span><span style="color:#BABED8;">(</span><span style="color:#C792EA;">value</span><span style="color:#BABED8;">).</span><span style="color:#82AAFF;">build</span><span style="color:#BABED8;">()</span></span>
46<span class="line"></span></code></pre></div><h2 id="updating-the-lambda-function" tabindex="-1">Updating the Lambda function <a class="header-anchor" href="#updating-the-lambda-function" aria-label="Permalink to &quot;Updating the Lambda function&quot;">​</a></h2><p>First, we need a function that checks the latest update to the changelog files in the Vue repositories.</p><div class="language-kotlin"><button title="Copy Code" class="copy"></button><span class="lang">kotlin</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">import</span><span style="color:#BABED8;"> </span><span style="color:#FFCB6B;">java.net.URL</span></span>
47<span class="line"></span>
48<span class="line"><span style="color:#C792EA;">fun</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">checkChangelog</span><span style="color:#BABED8;">(url: </span><span style="color:#FFCB6B;">String</span><span style="color:#BABED8;">): </span><span style="color:#FFCB6B;">String</span><span style="color:#BABED8;">{</span></span>
49<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> rawGithubUrl </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> url.</span><span style="color:#82AAFF;">replace</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&quot;https://github.com/&quot;</span><span style="color:#BABED8;">, </span><span style="color:#C3E88D;">&quot;https://raw.githubusercontent.com/&quot;</span><span style="color:#BABED8;">).</span><span style="color:#82AAFF;">replace</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&quot;blob/&quot;</span><span style="color:#BABED8;">, </span><span style="color:#C3E88D;">&quot;&quot;</span><span style="color:#BABED8;">)</span></span>
50<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> text </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">URL</span><span style="color:#BABED8;">(rawGithubUrl).</span><span style="color:#82AAFF;">readText</span><span style="color:#BABED8;">()</span></span>
51<span class="line"><span style="color:#BABED8;">    </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#BABED8;"> text.</span><span style="color:#82AAFF;">lines</span><span style="color:#BABED8;">().</span><span style="color:#82AAFF;">first</span><span style="color:#BABED8;">()</span></span>
52<span class="line"><span style="color:#BABED8;">}</span></span>
53<span class="line"></span></code></pre></div><p>Now let&#39;s update the Lambda function with some logic.</p><div class="language-kotlin"><button title="Copy Code" class="copy"></button><span class="lang">kotlin</span>
53<pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">fun</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">runLambda</span><span style="color:#BABED8;">(){</span></span>
54<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> projects </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">readProjects</span><span style="color:#BABED8;">()</span></span>
55<span class="line"><span style="color:#BABED8;">    </span><span style="color:#89DDFF;font-style:italic;">for</span><span style="color:#BABED8;">(project </span><span style="color:#89DDFF;">in</span><span style="color:#BABED8;"> projects){</span></span>
56<span class="line"><span style="color:#BABED8;">        </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> latestChange </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">checkChangelog</span><span style="color:#BABED8;">(project.changelog)</span></span>
57<span class="line"><span style="color:#BABED8;">        </span><span style="color:#89DDFF;font-style:italic;">if</span><span style="color:#BABED8;">(latestChange </span><span style="color:#89DDFF;">!=</span><span style="color:#BABED8;"> project.lastRecordedChangelog){</span></span>
58<span class="line"><span style="color:#BABED8;">            project.lastRecordedChangelog </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> latestChange</span></span>
59<span class="line"><span style="color:#BABED8;">            </span><span style="color:#676E95;font-style:italic;">// tweet(project)</span></span>
60<span class="line"><span style="color:#BABED8;">            </span><span style="color:#82AAFF;">updateProjectLastRecordedChange</span><span style="color:#BABED8;">(project)</span></span>
61<span class="line"><span style="color:#BABED8;">        }</span></span>
62<span class="line"><span style="color:#BABED8;">    }</span></span>
63<span class="line"><span style="color:#BABED8;">}</span></span>
64<span class="line"></span></code></pre></div><p>That&#39;s it. If you want a temporary tweet function that prints the tweet message you can use this.</p><div class="language-kotlin"><button title="Copy Code" class="copy"></button><span class="lang">kotlin</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">fun</span><span style="color:#BABED8;"> </span><span style="color:#82AAFF;">tweet</span><span style="color:#BABED8;">(project: </span><span style="color:#FFCB6B;">Project</span><span style="color:#BABED8;">){</span></span>
65<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> regex </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">&quot;&quot;&quot;</span><span style="color:#BABED8;">\\[</span><span style="color:#C3E88D;">.+]&quot;&quot;&quot;</span><span style="color:#BABED8;">.</span><span style="color:#82AAFF;">toRegex</span><span style="color:#BABED8;">()</span></span>
66<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> version </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> regex.</span><span style="color:#82AAFF;">find</span><span style="color:#BABED8;">(project.lastRecordedChangelog)?.</span><span style="color:#C792EA;">value</span><span style="color:#BABED8;">?.</span><span style="color:#82AAFF;">trim</span><span style="color:#BABED8;">(</span><span style="color:#C3E88D;">&#39;[&#39;</span><span style="color:#BABED8;">, </span><span style="color:#C3E88D;">&#39;]&#39;</span><span style="color:#BABED8;">)</span></span>
67<span class="line"><span style="color:#BABED8;">    </span><span style="color:#C792EA;">val</span><span style="color:#BABED8;"> message </span><span style="color:#89DDFF;">=</span><span style="color:#BABED8;"> </span><span style="color:#C3E88D;">&quot;</span><span style="color:#89DDFF;">\${</span><span style="color:#BABED8;">
67project.name</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">, </span><span style="color:#89DDFF;">\${</span><span style="color:#89DDFF;font-style:italic;">if</span><span style="color:#BABED8;">(version.</span><span style="color:#82AAFF;">isNullOrEmpty</span><span style="color:#BABED8;">()) </span><span style="color:#C3E88D;">&quot;new version&quot;</span><span style="color:#BABED8;"> </span><span style="color:#89DDFF;font-style:italic;">else</span><span style="color:#BABED8;"> version</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> is out! (</span><span style="color:#89DDFF;">\${</span><span style="color:#BABED8;">project.changelog</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">) #VueJS&quot;</span></span>
68<span class="line"><span style="color:#BABED8;">    </span><span style="color:#82AAFF;">println</span><span style="color:#BABED8;">(message)</span></span>
69<span class="line"><span style="color:#BABED8;">}</span></span>
70<span class="line"></span></code></pre></div>`,21)])])}const D=a(p,[["render",e]]);export{A as __pageData,D as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.