<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>@aws/nx-plugin | Blog</title><description/><link>https://awslabs.github.io/</link><language>jp</language><fh:complete/><atom:link rel="self" href="https://awslabs.github.io/nx-plugin-for-aws/jp/blog/rss.xml"/><item><title>v1.0.0 リリース</title><link>https://awslabs.github.io/nx-plugin-for-aws/jp/blog/v1-0-0-released/</link><guid isPermaLink="true">https://awslabs.github.io/nx-plugin-for-aws/jp/blog/v1-0-0-released/</guid><description>Nx Plugin for AWS が 1.0.0 に到達</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nx Plugin for AWS が &lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/releases/tag/v1.0.0&quot;&gt;v1.0.0&lt;/a&gt; に到達したことを発表できることを嬉しく思います！最初のリリース以来、本番プロジェクトを自信を持って開始できるツールキットの構築に取り組んできましたが、1.0 はそのマイルストーンです。&lt;/p&gt;
&lt;p&gt;いくつかのハイライト: ジェネレーターが冪等になり、再実行しても常に安全でコードを上書きしません。&lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/upgrading&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;nx migrate @aws/nx-plugin&lt;/code&gt;&lt;/a&gt; が完全にサポートされ、バージョンを上げるにつれて、上流で行った改善がワークスペースに流れ込みます。新しい &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/existing-project&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;init&lt;/code&gt; ジェネレーター&lt;/a&gt; により、既存の Nx または非 Nx リポジトリでプラグインを採用できます。ジェネレーター全体で CDK と並んで Terraform がサポートされ、新しい DynamoDB とリレーショナルデータベースのジェネレーター、デフォルトで AgentCore Runtime にデプロイされるエージェントと MCP サーバー、新しい AgentCore Gateway ジェネレーター、そしてローカル開発用の単一の &lt;code dir=&quot;auto&quot;&gt;dev&lt;/code&gt; ターゲットがあります。ジェネレーターの名前とオプションが標準化され、ツールチェーンは Nx 23.2、ESM、Biome に移行しました。セキュリティのデフォルトも強化され、WAF、Cognito 脅威保護、強制 CSP、API アクセスログ、イメージスキャンが含まれています。&lt;/p&gt;
&lt;p&gt;完全なローンチアナウンスについては、&lt;a href=&quot;https://aws.amazon.com/blogs/opensource/build-full-stack-aws-applications-in-minutes-with-ai-powered-scaffolding/&quot;&gt;AWS Open Source ブログ&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;これまでに貢献し、問題を報告し、フィードバックをくださったすべての方に感謝します — 私たちはまだ始まったばかりです。いつものように、次に何を見たいか &lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/discussions&quot;&gt;ディスカッションを投稿&lt;/a&gt; するか、&lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/issues&quot;&gt;問題を報告&lt;/a&gt; してお知らせください！&lt;/p&gt;</content:encoded></item><item><title>AWS PDKからの移行</title><link>https://awslabs.github.io/nx-plugin-for-aws/jp/blog/migrating-from-aws-pdk/</link><guid isPermaLink="true">https://awslabs.github.io/nx-plugin-for-aws/jp/blog/migrating-from-aws-pdk/</guid><description>AWS Project Development Kit (PDK)からNx Plugin for AWSへの移行</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このガイドでは、&lt;a href=&quot;https://github.com/aws/aws-pdk&quot;&gt;AWS PDK&lt;/a&gt;プロジェクトをNx Plugin for AWSに移行する例を説明し、このトピックに関する一般的なガイダンスを提供します。&lt;/p&gt;
&lt;p&gt;Nx Plugin for AWSへの移行により、PDKと比較して以下のメリットが得られます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;より高速なビルド&lt;/li&gt;
&lt;li&gt;より使いやすい（UIとCLI）&lt;/li&gt;
&lt;li&gt;Vibe-codingフレンドリー（&lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/building-with-ai&quot;&gt;MCPサーバーをお試しください！&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;より最新のテクノロジー&lt;/li&gt;
&lt;li&gt;ローカルAPIとウェブサイト開発&lt;/li&gt;
&lt;li&gt;より多くの制御（ユースケースに合わせて提供されたファイルを変更可能）&lt;/li&gt;
&lt;li&gt;その他多数！&lt;/li&gt;
&lt;/ul&gt;
&lt;aside aria-label=&quot;ステップバイステップガイドではありません&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;ステップバイステップガイドではありません&lt;/p&gt;&lt;div&gt;&lt;p&gt;プロジェクトを移行する際には、多くのニュアンスと考慮事項があります。このガイドは簡単な例を対象としており、お客様のプロジェクトに必要な手順が欠けている可能性があります。&lt;/p&gt;&lt;p&gt;このガイドでは、新しいワークスペースを作成し、PDKプロジェクトから新しいプロジェクトに部品をコピーするアプローチを採用しています。異なる方法で移行する必要がある場合、またはPDKからNx Plugin for AWSへの移行に関する質問がある場合は、&lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/discussions&quot;&gt;GitHubディスカッションでお問い合わせください&lt;/a&gt;！&lt;/p&gt;&lt;p&gt;また、PDKの一部の機能には正確な同等物がないことにも注意してください。これらのヒント/アイデアについては、&lt;a href=&quot;#frequently-asked-questions&quot;&gt;FAQ&lt;/a&gt;セクションを参照してください。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;特定時点のガイド&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;特定時点のガイド&lt;/p&gt;&lt;div&gt;&lt;p&gt;これは特定時点のガイドとして書かれており、Nx Plugin for AWSの進化に伴って更新される可能性は低いです。これを補うため、このガイドでは&lt;code dir=&quot;auto&quot;&gt;@aws/nx-plugin&lt;/code&gt;のバージョンを&lt;code dir=&quot;auto&quot;&gt;1.0.0&lt;/code&gt;に固定しています。最新バージョンで試すこともできますが、ガイドとの間にいくつかの相違がある可能性があります。固定されたバージョンでガイドに従った場合は、その後&lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/upgrading&quot;&gt;ワークスペースをアップグレード&lt;/a&gt;できます。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;移行例ショッピングリストアプリケーション&quot;&gt;移行例：ショッピングリストアプリケーション&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;このガイドでは、&lt;a href=&quot;https://aws.github.io/aws-pdk/getting_started/shopping_list_app.html&quot;&gt;PDKチュートリアルのショッピングリストアプリケーション&lt;/a&gt;を移行対象プロジェクトとして使用します。ご自身で実際に試す場合は、そのチュートリアルの手順に従って対象プロジェクトを作成してください。&lt;/p&gt;
&lt;p&gt;ショッピングリストアプリケーションは、以下のPDKプロジェクトタイプで構成されています：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;MonorepoTsProject&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;TypeSafeApiProject&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;CloudscapeReactTsWebsiteProject&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;InfrastructureTsProject&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;ワークスペースの作成&quot;&gt;ワークスペースの作成&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;まず、新しいプロジェクト用の新しいワークスペースを作成します。インプレース移行よりも極端ですが、このアプローチにより最もクリーンな最終結果が得られます。Nxワークスペースの作成は、PDKの&lt;code dir=&quot;auto&quot;&gt;MonorepoTsProject&lt;/code&gt;の使用と同等です：&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;workspace&amp;#x22;,&amp;#x22;tag&amp;#x22;:&amp;#x22;1.0.0&amp;#x22;,&amp;#x22;positional&amp;#x22;:[&amp;#x22;workspace&amp;#x22;],&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;workspace&amp;#x22;,&amp;#x22;iac&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Create your workspace&lt;/span&gt;&lt;code&gt;@aws/nx-workspace@1.0.0&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-0-0&quot; id=&quot;tab-0-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-0-1&quot; id=&quot;tab-0-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-0-2&quot; id=&quot;tab-0-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-0-3&quot; id=&quot;tab-0-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-0-0&quot; aria-labelledby=&quot;tab-0-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace@1.0.0&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;shopping-list&lt;/span&gt; &lt;span data-token-key=&quot;iac&quot;&gt;&lt;span&gt;--iac=&lt;/span&gt;&lt;span&gt;cdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-0-1&quot; aria-labelledby=&quot;tab-0-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace@1.0.0&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;shopping-list&lt;/span&gt; &lt;span data-token-key=&quot;iac&quot;&gt;&lt;span&gt;--iac=&lt;/span&gt;&lt;span&gt;cdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-0-2&quot; aria-labelledby=&quot;tab-0-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npm create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace@1.0.0&lt;/span&gt; &lt;span&gt;--&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;shopping-list&lt;/span&gt; &lt;span data-token-key=&quot;iac&quot;&gt;&lt;span&gt;--iac=&lt;/span&gt;&lt;span&gt;cdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-0-3&quot; aria-labelledby=&quot;tab-0-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bun create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace@1.0.0&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;shopping-list&lt;/span&gt; &lt;span data-token-key=&quot;iac&quot;&gt;&lt;span&gt;--iac=&lt;/span&gt;&lt;span&gt;cdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;p&gt;このコマンドで作成された&lt;code dir=&quot;auto&quot;&gt;shopping-list&lt;/code&gt;ディレクトリをお気に入りのIDEで開きます。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;apiの移行&quot;&gt;APIの移行&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;TypeSafeApiProject&lt;/code&gt; used in the shopping list application made use of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://smithy.io/2.0/&quot;&gt;Smithy&lt;/a&gt; as the modelling language&lt;/li&gt;
&lt;li&gt;TypeScript for implementing operations&lt;/li&gt;
&lt;li&gt;TypeScript hook generation for integrating with a react website&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can therefore use the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator&lt;/a&gt; to provide equivalent functionality.&lt;/p&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;If you used OpenAPI or TypeSpec as your modelling language, or have handlers implemented in Python or Java, please refer to the &lt;a href=&quot;#frequently-asked-questions&quot;&gt;FAQ&lt;/a&gt; for potential options.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;generate-a-typescript-smithy-api&quot;&gt;Generate a TypeScript Smithy API&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Run the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#api&lt;/code&gt; generator&lt;/a&gt; with &lt;code dir=&quot;auto&quot;&gt;framework&lt;/code&gt; set to &lt;code dir=&quot;auto&quot;&gt;smithy&lt;/code&gt; to set up your api project in &lt;code dir=&quot;auto&quot;&gt;packages/api&lt;/code&gt;:&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;generator&amp;#x22;,&amp;#x22;namespace&amp;#x22;:&amp;#x22;@aws/nx-plugin&amp;#x22;,&amp;#x22;generator&amp;#x22;:&amp;#x22;ts#api&amp;#x22;,&amp;#x22;positional&amp;#x22;:[],&amp;#x22;noInteractive&amp;#x22;:true,&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;name&amp;#x22;,&amp;#x22;framework&amp;#x22;,&amp;#x22;namespace&amp;#x22;,&amp;#x22;auth&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Run this generator&lt;/span&gt;&lt;code&gt;@aws/nx-plugin:ts#api&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;generator-usage&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-2-0&quot; id=&quot;tab-2-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-2-1&quot; id=&quot;tab-2-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-2-0&quot; aria-labelledby=&quot;tab-2-0&quot; role=&quot;tabpanel&quot;&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-3-0&quot; id=&quot;tab-3-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-3-1&quot; id=&quot;tab-3-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-3-2&quot; id=&quot;tab-3-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-3-3&quot; id=&quot;tab-3-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-3-0&quot; aria-labelledby=&quot;tab-3-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#api&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;smithy&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;namespace&quot;&gt;&lt;span&gt;--namespace=&lt;/span&gt;&lt;span&gt;com.aws&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;auth&quot;&gt;&lt;span&gt;--auth=&lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-3-1&quot; aria-labelledby=&quot;tab-3-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#api&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;smithy&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;namespace&quot;&gt;&lt;span&gt;--namespace=&lt;/span&gt;&lt;span&gt;com.aws&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;auth&quot;&gt;&lt;span&gt;--auth=&lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-3-2&quot; aria-labelledby=&quot;tab-3-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#api&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;smithy&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;namespace&quot;&gt;&lt;span&gt;--namespace=&lt;/span&gt;&lt;span&gt;com.aws&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;auth&quot;&gt;&lt;span&gt;--auth=&lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-3-3&quot; aria-labelledby=&quot;tab-3-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bunx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#api&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;smithy&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;namespace&quot;&gt;&lt;span&gt;--namespace=&lt;/span&gt;&lt;span&gt;com.aws&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;auth&quot;&gt;&lt;span&gt;--auth=&lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-2-1&quot; aria-labelledby=&quot;tab-2-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;ol role=&quot;list&quot;&gt;&lt;li&gt;Install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console&quot;&gt;Nx Console VSCode Plugin&lt;/a&gt; if you haven&apos;t already&lt;/li&gt;&lt;li&gt;Open the Nx Console in VSCode&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate (UI)&lt;/code&gt; in the &quot;Common Nx Commands&quot; section&lt;/li&gt;&lt;li&gt;Search for &lt;code&gt;@aws/nx-plugin - ts#api&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Fill in the required parameters&lt;ul data-command-card-values=&quot;&quot;&gt;&lt;li&gt;&lt;b&gt;name:&lt;/b&gt; api&lt;/li&gt;&lt;li&gt;&lt;b&gt;framework:&lt;/b&gt; smithy&lt;/li&gt;&lt;li&gt;&lt;b&gt;namespace:&lt;/b&gt; com.aws&lt;/li&gt;&lt;li&gt;&lt;b&gt;auth:&lt;/b&gt; iam&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;p&gt;You will notice this generates a &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt; project, as well as a &lt;code dir=&quot;auto&quot;&gt;backend&lt;/code&gt; project. The &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt; project contains your Smithy model, and &lt;code dir=&quot;auto&quot;&gt;backend&lt;/code&gt; contains your server implementation.&lt;/p&gt;
&lt;p&gt;The backend uses the &lt;a href=&quot;https://smithy.io/2.0/languages/typescript/ts-ssdk/index.html&quot;&gt;Smithy Server Generator for TypeScript&lt;/a&gt;. We will explore this further below.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-the-smithy-model&quot;&gt;Migrate the Smithy Model&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Now that we have the basic structure for our Smithy API project, we can migrate the model:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Delete the generated example Smithy files in &lt;code dir=&quot;auto&quot;&gt;packages/api/model/src&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy your model from the PDK project’s &lt;code dir=&quot;auto&quot;&gt;packages/api/model/src/main/smithy&lt;/code&gt; directory into your new project’s &lt;code dir=&quot;auto&quot;&gt;packages/api/model/src&lt;/code&gt; directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the service name and namespace in &lt;code dir=&quot;auto&quot;&gt;smithy-build.json&lt;/code&gt; to match the PDK application:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;smithy-build.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;openapi&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;com.aws#MyApi&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the service in &lt;code dir=&quot;auto&quot;&gt;main.smithy&lt;/code&gt; to add the &lt;code dir=&quot;auto&quot;&gt;ValidationException&lt;/code&gt; error, which is required when using the Smithy TypeScript Server SDK.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;main.smithy&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;smithy.framework#ValidationException&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/// My Shopping List API&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;restJson1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1.0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;operations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;GetShoppingLists&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;PutShoppingList&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;DeleteShoppingList&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;BadRequestError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;NotAuthorizedError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;InternalFailureError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;ValidationException&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add an &lt;code dir=&quot;auto&quot;&gt;extensions.smithy&lt;/code&gt; file to &lt;code dir=&quot;auto&quot;&gt;packages/api/model/src&lt;/code&gt; where we will define a trait that provides pagination information to the generated client:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;extensions.smithy&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;namespace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;com.aws&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;smithy.openapi#specificationExtension&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;trait&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;specificationExtension&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;x-cursor&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;structure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cursor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;inputToken&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Boolean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the new &lt;code dir=&quot;auto&quot;&gt;@cursor&lt;/code&gt; trait to the &lt;code dir=&quot;auto&quot;&gt;GetShoppingLists&lt;/code&gt; operation in &lt;code dir=&quot;auto&quot;&gt;get-shopping-lists.smithy&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;operations/get-shopping-lists.smithy&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;readonly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/shopping-list&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;paginated&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputToken&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nextToken&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputToken&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nextToken&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;pageSize&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;shoppingLists&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;cursor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputToken&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nextToken&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;typescript&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;operation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GetShoppingLists&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;PaginatedInputMixin&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;httpQuery&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;shoppingListId&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ShoppingListId&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Any &lt;code dir=&quot;auto&quot;&gt;@paginated&lt;/code&gt; operations should also use &lt;code dir=&quot;auto&quot;&gt;@cursor&lt;/code&gt; if you’re using the client generator provided by the Nx Plugin for AWS (via the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/connection/react-smithy&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;api-connection&lt;/code&gt;&lt;/a&gt; generator).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally, remove the &lt;code dir=&quot;auto&quot;&gt;@handler&lt;/code&gt; trait from all operations as this isn’t supported by the Nx Plugin for AWS. Using &lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt;, we don’t need the auto-generated lambda function CDK constructs and bundling targets generated by this trait, as we use a single bundle for all lambda functions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, let’s run a build to check our model changes and ensure we have some generated server code to work with. There will be some failures in the backend project (&lt;code dir=&quot;auto&quot;&gt;@shopping-list/api&lt;/code&gt;) but we’ll address those next.&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-4-0&quot; id=&quot;tab-4-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-4-1&quot; id=&quot;tab-4-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-4-2&quot; id=&quot;tab-4-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-4-3&quot; id=&quot;tab-4-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-4-0&quot; aria-labelledby=&quot;tab-4-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-4-1&quot; aria-labelledby=&quot;tab-4-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-4-2&quot; aria-labelledby=&quot;tab-4-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-4-3&quot; aria-labelledby=&quot;tab-4-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;You may see a build failure due to lint issues. These can usually be automatically fixed:&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-5-0&quot; id=&quot;tab-5-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-5-1&quot; id=&quot;tab-5-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-5-2&quot; id=&quot;tab-5-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-5-3&quot; id=&quot;tab-5-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-5-0&quot; aria-labelledby=&quot;tab-5-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-5-1&quot; aria-labelledby=&quot;tab-5-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-5-2&quot; aria-labelledby=&quot;tab-5-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-5-3&quot; aria-labelledby=&quot;tab-5-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-the-lambda-handlers&quot;&gt;Migrate the Lambda Handlers&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;You can consider the &lt;code dir=&quot;auto&quot;&gt;api/backend&lt;/code&gt; project as somewhat equivalent to Type Safe API’s &lt;code dir=&quot;auto&quot;&gt;api/handlers/typescript&lt;/code&gt; project.&lt;/p&gt;
&lt;p&gt;One of the main differences between Type Safe API and the &lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator is that handlers are implemented using the &lt;a href=&quot;https://smithy.io/2.0/languages/typescript/ts-ssdk/index.html&quot;&gt;Smithy Server Generator for TypeScript&lt;/a&gt;, rather than Type Safe API’s own generated handler wrappers (found in the &lt;code dir=&quot;auto&quot;&gt;api/generated/typescript/runtime&lt;/code&gt; project).&lt;/p&gt;
&lt;p&gt;The shopping list application’s lambda handlers rely on the &lt;code dir=&quot;auto&quot;&gt;@aws-sdk/client-dynamodb&lt;/code&gt; package, so let’s install that into the &lt;code dir=&quot;auto&quot;&gt;@shopping-list/api&lt;/code&gt; project:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-6-0&quot; id=&quot;tab-6-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-6-1&quot; id=&quot;tab-6-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-6-2&quot; id=&quot;tab-6-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-6-3&quot; id=&quot;tab-6-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-6-0&quot; aria-labelledby=&quot;tab-6-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-sdk/client-dynamodb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--filter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-6-1&quot; aria-labelledby=&quot;tab-6-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workspace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@shopping-list/api&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-sdk/client-dynamodb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-6-2&quot; aria-labelledby=&quot;tab-6-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--legacy-peer-deps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-sdk/client-dynamodb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-w&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-6-3&quot; aria-labelledby=&quot;tab-6-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-sdk/client-dynamodb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cwd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;p&gt;Then, let’s copy the &lt;code dir=&quot;auto&quot;&gt;handlers/typescript/src/dynamo-client.ts&lt;/code&gt; file from the PDK project to &lt;code dir=&quot;auto&quot;&gt;backend/src/operations&lt;/code&gt; so it’s available for our handlers.&lt;/p&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator scaffolds an example &lt;code dir=&quot;auto&quot;&gt;Echo&lt;/code&gt; operation. Since we removed this from our model, delete the corresponding handler in &lt;code dir=&quot;auto&quot;&gt;backend/src/operations/echo.ts&lt;/code&gt;. We’ll register our migrated operations in &lt;code dir=&quot;auto&quot;&gt;service.ts&lt;/code&gt; further below.&lt;/p&gt;
&lt;p&gt;To migrate the handlers, you can follow these general steps:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Copy the handler from your PDK project’s &lt;code dir=&quot;auto&quot;&gt;packages/api/handlers/typescript/src&lt;/code&gt; directory to your new project’s &lt;code dir=&quot;auto&quot;&gt;packages/api/backend/src/operations&lt;/code&gt; directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove &lt;code dir=&quot;auto&quot;&gt;my-api-typescript-runtime&lt;/code&gt; imports and instead import the operation type from the generated TypeScript Server SDK, as well as the &lt;code dir=&quot;auto&quot;&gt;ServiceContext&lt;/code&gt; for example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;deleteShoppingListHandler&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;DeleteShoppingListChainedHandlerFunction&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;INTERCEPTORS&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;LoggingInterceptor&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;myapi-typescript-runtime&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DeleteShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DeleteShoppingListOperation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;../generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ServiceContext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;../context.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete the handler wrapper export&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deleteShoppingListHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;INTERCEPTORS&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;deleteShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the signature for your operation handler to use the SSDK:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deleteShoppingList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DeleteShoppingListChainedHandlerFunction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DeleteShoppingList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DeleteShoppingListOperation&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;ServiceContext&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Replace usage of the &lt;code dir=&quot;auto&quot;&gt;LoggingInterceptor&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;ctx.logger&lt;/code&gt;. (Also applies to metrics and tracing interceptors):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;LoggingInterceptor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getLogger&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;...&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;logger&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;...&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update references to input parameters. Since the SSDK provides types that match your Smithy model exactly (rather than grouping path/query/header parameters separately to the body parameter), update any input references accordingly:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;requestParameters&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove use of &lt;code dir=&quot;auto&quot;&gt;Response&lt;/code&gt;. We instead just return plain objects in the SSDK.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;success&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;We also no longer throw or return &lt;code dir=&quot;auto&quot;&gt;Response&lt;/code&gt;, instead we throw the SSDK’s generated errors:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;badRequest&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;oh no&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;badRequest&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;oh no&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BadRequestError&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;../generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BadRequestError&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;oh no&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update any imports to use ESM syntax, namely adding the &lt;code dir=&quot;auto&quot;&gt;.js&lt;/code&gt; extension to relative imports.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the operation to &lt;code dir=&quot;auto&quot;&gt;service.ts&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;service.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ServiceContext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./context.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApiService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DeleteShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./operations/delete-shopping-list.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GetShoppingLists&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./operations/get-shopping-lists.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PutShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./operations/put-shopping-list.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Register operations to the service here&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApiService&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;ServiceContext&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PutShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GetShoppingLists&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;DeleteShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;span data-drawer-trigger=&quot;&quot;&gt;Click here for full before/after examples for the three shopping list operations from the tutorial&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M12 11a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-4a1 1 0 0 0-1-1Zm.38-3.92a1 1 0 0 0-.76 0 1 1 0 0 0-.33.21 1.15 1.15 0 0 0-.21.33 1 1 0 0 0 .21 1.09c.097.088.209.16.33.21A1 1 0 0 0 13 8a1.05 1.05 0 0 0-.29-.71 1 1 0 0 0-.33-.21ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;template id=&quot;drawer-template&quot;&gt;&lt;div class=&quot;drawer-portal&quot;&gt;&lt;div class=&quot;drawer-backdrop&quot; data-drawer-backdrop=&quot;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;drawer&quot; role=&quot;dialog&quot; aria-labelledby=&quot;drawer-title&quot;&gt;&lt;header class=&quot;drawer-header&quot;&gt;&lt;h2 id=&quot;drawer-title&quot; class=&quot;drawer-title&quot; data-drawer-title=&quot;{title}&quot;&gt;Shopping List Handler Migration&lt;/h2&gt;&lt;button class=&quot;drawer-close&quot; aria-label=&quot;Close drawer&quot; data-drawer-close=&quot;&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;6&quot; x2=&quot;6&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; y1=&quot;6&quot; x2=&quot;18&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/header&gt;&lt;div class=&quot;drawer-content sl-markdown-content&quot;&gt;&lt;h4&gt;Delete Shopping List&lt;/h4&gt;&lt;starlight-tabs data-sync-key=&quot;pdk-migration&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;div class=&quot;tablist-wrapper not-content astro-mwziz3wm&quot;&gt;&lt;ul role=&quot;tablist&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-7-0&quot; id=&quot;tab-7-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;astro-mwziz3wm&quot;&gt;Before&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-7-1&quot; id=&quot;tab-7-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot; class=&quot;astro-mwziz3wm&quot;&gt;After&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-7-0&quot; aria-labelledby=&quot;tab-7-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;handlers/typescript/src/delete-shopping-list.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DeleteItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;@aws-sdk/client-dynamodb&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingListHandler&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DeleteShoppingListChainedHandlerFunction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;INTERCEPTORS&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;LoggingInterceptor&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;myapi-typescript-runtime&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;./dynamo-client&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Type-safe handler for the DeleteShoppingList operation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;DeleteShoppingListChainedHandlerFunction&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;LoggingInterceptor&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getLogger&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;Start DeleteShoppingList Operation&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;requestParameters&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;DeleteItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;TableName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Key&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;success&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Entry point for the AWS Lambda handler for the DeleteShoppingList operation.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* The deleteShoppingListHandler method wraps the type-safe handler and manages marshalling inputs and outputs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;handler&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;deleteShoppingListHandler&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;INTERCEPTORS&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import { DeleteItemCommand } from &amp;#x27;@aws-sdk/client-dynamodb&amp;#x27;;import {  deleteShoppingListHandler,  DeleteShoppingListChainedHandlerFunction,  INTERCEPTORS,  Response,  LoggingInterceptor,} from &amp;#x27;myapi-typescript-runtime&amp;#x27;;import { ddbClient } from &amp;#x27;./dynamo-client&amp;#x27;;/** * Type-safe handler for the DeleteShoppingList operation */export const deleteShoppingList: DeleteShoppingListChainedHandlerFunction = async (request) =&gt; {  LoggingInterceptor.getLogger(request).info(    &amp;#x27;Start DeleteShoppingList Operation&amp;#x27;,  );  const shoppingListId = request.input.requestParameters.shoppingListId;  await ddbClient.send(    new DeleteItemCommand({      TableName: &amp;#x27;shopping_list&amp;#x27;,      Key: {        shoppingListId: {          S: shoppingListId,        },      },    }),  );  return Response.success({    shoppingListId,  });};/** * Entry point for the AWS Lambda handler for the DeleteShoppingList operation. * The deleteShoppingListHandler method wraps the type-safe handler and manages marshalling inputs and outputs */export const handler = deleteShoppingListHandler(  ...INTERCEPTORS,  deleteShoppingList,);&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-7-1&quot; aria-labelledby=&quot;tab-7-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;backend/src/operations/delete-shopping-list.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DeleteItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;@aws-sdk/client-dynamodb&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;./dynamo-client.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DeleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DeleteShoppingListOperation&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;../generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ServiceContext&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;../context.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Type-safe handler for the DeleteShoppingList operation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;DeleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;DeleteShoppingListOperation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ServiceContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;Start DeleteShoppingList Operation&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;DeleteItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;TableName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Key&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import { DeleteItemCommand } from &amp;#x27;@aws-sdk/client-dynamodb&amp;#x27;;import { ddbClient } from &amp;#x27;./dynamo-client.js&amp;#x27;;import { DeleteShoppingList as DeleteShoppingListOperation } from &amp;#x27;../generated/ssdk/index.js&amp;#x27;;import { ServiceContext } from &amp;#x27;../context.js&amp;#x27;;/** * Type-safe handler for the DeleteShoppingList operation */export const DeleteShoppingList: DeleteShoppingListOperation&lt;ServiceContext&gt; = async (input, ctx) =&gt; {  ctx.logger.info(    &amp;#x27;Start DeleteShoppingList Operation&amp;#x27;,  );  const shoppingListId = input.shoppingListId;  await ddbClient.send(    new DeleteItemCommand({      TableName: &amp;#x27;shopping_list&amp;#x27;,      Key: {        shoppingListId: {          S: shoppingListId!,        },      },    }),  );  return {    shoppingListId,  };};&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore class=&quot;astro-mwziz3wm&quot;&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;script type=&quot;module&quot; src=&quot;/codebuild/output/src3386235489/src/actions-runner/_work/nx-plugin-for-aws/nx-plugin-for-aws/node_modules/.pnpm/@astrojs+starlight@0.42.6_@astrojs+markdown-remark@7.3.0_supports-color@7.2.0__astro@7._b3b2c26d7602b780b1d1223415f300ed/node_modules/@astrojs/starlight/dist/user-components/Tabs.astro?astro&amp;#x26;type=script&amp;#x26;index=0&amp;#x26;lang.ts&quot;&gt;&lt;/script&gt;&lt;h4&gt;Get Shopping Lists&lt;/h4&gt;&lt;starlight-tabs data-sync-key=&quot;pdk-migration&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;div class=&quot;tablist-wrapper not-content astro-mwziz3wm&quot;&gt;&lt;ul role=&quot;tablist&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-8-0&quot; id=&quot;tab-8-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;astro-mwziz3wm&quot;&gt;Before&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-8-1&quot; id=&quot;tab-8-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot; class=&quot;astro-mwziz3wm&quot;&gt;After&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-8-0&quot; aria-labelledby=&quot;tab-8-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;handlers/typescript/src/get-shopping-lists.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DynamoDBClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;QueryCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;QueryCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ScanCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ScanCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;@aws-sdk/client-dynamodb&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingListsHandler&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;GetShoppingListsChainedHandlerFunction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;INTERCEPTORS&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;LoggingInterceptor&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;myapi-typescript-runtime&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;./dynamo-client&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Type-safe handler for the GetShoppingLists operation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;GetShoppingListsChainedHandlerFunction&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;LoggingInterceptor&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getLogger&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;Start GetShoppingLists Operation&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;requestParameters&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;requestParameters&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;requestParameters&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;commandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ScanCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;QueryCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;TableName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ConsistentRead&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Limit&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ExclusiveStartKey&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;fromToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;...(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;KeyConditionExpression&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shoppingListId = :shoppingListId&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ExpressionAttributeValues&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;:shoppingListId&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;requestParameters&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;QueryCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;commandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;ScanCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;commandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;success&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;[]&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;})),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;LastEvaluatedKey&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;LastEvaluatedKey&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Decode a stringified token&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--0fs:italic;--1:#5A5966;--1fs:italic&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--0fs:italic;--1:#A1002C;--1fs:italic&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--0fs:italic;--1:#2C3947;--1fs:italic&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; a token passed to the paginated request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;fromToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Buffer&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;decodeURIComponent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;base64&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Encode pagination details into an opaque stringified token&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--0fs:italic;--1:#5A5966;--1fs:italic&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--0fs:italic;--1:#A1002C;--1fs:italic&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--0fs:italic;--1:#2C3947;--1fs:italic&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; pagination token details&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;encodeURIComponent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Buffer&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;base64&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Entry point for the AWS Lambda handler for the GetShoppingLists operation.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* The getShoppingListsHandler method wraps the type-safe handler and manages marshalling inputs and outputs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;handler&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getShoppingListsHandler&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(...&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;INTERCEPTORS&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import { DynamoDBClient, QueryCommand, QueryCommandInput, ScanCommand, ScanCommandInput } from &amp;#x27;@aws-sdk/client-dynamodb&amp;#x27;;import {  getShoppingListsHandler,  GetShoppingListsChainedHandlerFunction,  INTERCEPTORS,  Response,  LoggingInterceptor,  ShoppingList,} from &amp;#x27;myapi-typescript-runtime&amp;#x27;;import { ddbClient } from &amp;#x27;./dynamo-client&amp;#x27;;/** * Type-safe handler for the GetShoppingLists operation */export const getShoppingLists: GetShoppingListsChainedHandlerFunction = async (request) =&gt; {  LoggingInterceptor.getLogger(request).info(&amp;#x27;Start GetShoppingLists Operation&amp;#x27;);  const nextToken = request.input.requestParameters.nextToken;  const pageSize = request.input.requestParameters.pageSize;  const shoppingListId = request.input.requestParameters.shoppingListId;  const commandInput: ScanCommandInput | QueryCommandInput = {    TableName: &amp;#x27;shopping_list&amp;#x27;,    ConsistentRead: true,    Limit: pageSize,    ExclusiveStartKey: nextToken ? fromToken(nextToken) : undefined,    ...(shoppingListId ? {      KeyConditionExpression: &amp;#x27;shoppingListId = :shoppingListId&amp;#x27;,      ExpressionAttributeValues: {        &amp;#x27;:shoppingListId&amp;#x27;: {          S: request.input.requestParameters.shoppingListId!,        },      },    } : {}),  };  const response = await ddbClient.send(shoppingListId ? new QueryCommand(commandInput) : new ScanCommand(commandInput));  return Response.success({    shoppingLists: (response.Items || [])      .map&lt;ShoppingList&gt;(item =&gt; ({      shoppingListId: item.shoppingListId.S!,      name: item.name.S!,      shoppingItems: JSON.parse(item.shoppingItems.S || &amp;#x27;[]&amp;#x27;),    })),    nextToken: response.LastEvaluatedKey ? toToken(response.LastEvaluatedKey) : undefined,  });};/** * Decode a stringified token * @param token a token passed to the paginated request */const fromToken = &lt;T&gt;(token?: string): T | undefined =&gt;  token ? (JSON.parse(Buffer.from(decodeURIComponent(token), &amp;#x27;base64&amp;#x27;).toString()) as T) : undefined;/** * Encode pagination details into an opaque stringified token * @param paginationToken pagination token details */const toToken = &lt;T&gt;(paginationToken?: T): string | undefined =&gt;  paginationToken ? encodeURIComponent(Buffer.from(JSON.stringify(paginationToken)).toString(&amp;#x27;base64&amp;#x27;)) : undefined;/** * Entry point for the AWS Lambda handler for the GetShoppingLists operation. * The getShoppingListsHandler method wraps the type-safe handler and manages marshalling inputs and outputs */export const handler = getShoppingListsHandler(...INTERCEPTORS, getShoppingLists);&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-8-1&quot; aria-labelledby=&quot;tab-8-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;backend/src/operations/get-shopping-lists.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;QueryCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;QueryCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ScanCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ScanCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;@aws-sdk/client-dynamodb&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;./dynamo-client.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;GetShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;GetShoppingListsOperation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;../generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ServiceContext&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;../context.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Type-safe handler for the GetShoppingLists operation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;GetShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;GetShoppingListsOperation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ServiceContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;Start GetShoppingLists Operation&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;commandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ScanCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;QueryCommandInput&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;TableName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ConsistentRead&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Limit&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ExclusiveStartKey&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;fromToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;...(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;KeyConditionExpression&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shoppingListId = :shoppingListId&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ExpressionAttributeValues&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;:shoppingListId&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;QueryCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;commandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;ScanCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;commandInput&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;[]&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;})),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;LastEvaluatedKey&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;LastEvaluatedKey&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Decode a stringified token&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--0fs:italic;--1:#5A5966;--1fs:italic&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--0fs:italic;--1:#A1002C;--1fs:italic&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--0fs:italic;--1:#2C3947;--1fs:italic&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; a token passed to the paginated request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;fromToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Buffer&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;decodeURIComponent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;token&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;base64&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Encode pagination details into an opaque stringified token&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--0fs:italic;--1:#5A5966;--1fs:italic&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--0fs:italic;--1:#A1002C;--1fs:italic&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--0fs:italic;--1:#2C3947;--1fs:italic&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; pagination token details&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;encodeURIComponent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Buffer&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;paginationToken&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;base64&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import { QueryCommand, QueryCommandInput, ScanCommand, ScanCommandInput } from &amp;#x27;@aws-sdk/client-dynamodb&amp;#x27;;import { ddbClient } from &amp;#x27;./dynamo-client.js&amp;#x27;;import { GetShoppingLists as GetShoppingListsOperation, ShoppingList } from &amp;#x27;../generated/ssdk/index.js&amp;#x27;;import { ServiceContext } from &amp;#x27;../context.js&amp;#x27;;/** * Type-safe handler for the GetShoppingLists operation */export const GetShoppingLists: GetShoppingListsOperation&lt;ServiceContext&gt; = async (input, ctx) =&gt; {  ctx.logger.info(&amp;#x27;Start GetShoppingLists Operation&amp;#x27;);  const nextToken = input.nextToken;  const pageSize = input.pageSize;  const shoppingListId = input.shoppingListId;  const commandInput: ScanCommandInput | QueryCommandInput = {    TableName: &amp;#x27;shopping_list&amp;#x27;,    ConsistentRead: true,    Limit: pageSize,    ExclusiveStartKey: nextToken ? fromToken(nextToken) : undefined,    ...(shoppingListId ? {      KeyConditionExpression: &amp;#x27;shoppingListId = :shoppingListId&amp;#x27;,      ExpressionAttributeValues: {        &amp;#x27;:shoppingListId&amp;#x27;: {          S: input.shoppingListId!,        },      },    } : {}),  };  const response = await ddbClient.send(shoppingListId ? new QueryCommand(commandInput) : new ScanCommand(commandInput));  return {    shoppingLists: (response.Items || [])      .map&lt;ShoppingList&gt;(item =&gt; ({      shoppingListId: item.shoppingListId.S!,      name: item.name.S!,      shoppingItems: JSON.parse(item.shoppingItems.S || &amp;#x27;[]&amp;#x27;),    })),    nextToken: response.LastEvaluatedKey ? toToken(response.LastEvaluatedKey) : undefined,  };};/** * Decode a stringified token * @param token a token passed to the paginated request */const fromToken = &lt;T&gt;(token?: string): T | undefined =&gt;  token ? (JSON.parse(Buffer.from(decodeURIComponent(token), &amp;#x27;base64&amp;#x27;).toString()) as T) : undefined;/** * Encode pagination details into an opaque stringified token * @param paginationToken pagination token details */const toToken = &lt;T&gt;(paginationToken?: T): string | undefined =&gt;  paginationToken ? encodeURIComponent(Buffer.from(JSON.stringify(paginationToken)).toString(&amp;#x27;base64&amp;#x27;)) : undefined;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore class=&quot;astro-mwziz3wm&quot;&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;script type=&quot;module&quot; src=&quot;/codebuild/output/src3386235489/src/actions-runner/_work/nx-plugin-for-aws/nx-plugin-for-aws/node_modules/.pnpm/@astrojs+starlight@0.42.6_@astrojs+markdown-remark@7.3.0_supports-color@7.2.0__astro@7._b3b2c26d7602b780b1d1223415f300ed/node_modules/@astrojs/starlight/dist/user-components/Tabs.astro?astro&amp;#x26;type=script&amp;#x26;index=0&amp;#x26;lang.ts&quot;&gt;&lt;/script&gt;&lt;h4&gt;Put Shopping List&lt;/h4&gt;&lt;starlight-tabs data-sync-key=&quot;pdk-migration&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;div class=&quot;tablist-wrapper not-content astro-mwziz3wm&quot;&gt;&lt;ul role=&quot;tablist&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-9-0&quot; id=&quot;tab-9-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;astro-mwziz3wm&quot;&gt;Before&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-9-1&quot; id=&quot;tab-9-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot; class=&quot;astro-mwziz3wm&quot;&gt;After&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-9-0&quot; aria-labelledby=&quot;tab-9-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;handlers/typescript/src/put-shopping-list.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;randomUUID&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;crypto&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;DynamoDBClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PutItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;@aws-sdk/client-dynamodb&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingListHandler&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PutShoppingListChainedHandlerFunction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;INTERCEPTORS&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;LoggingInterceptor&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;myapi-typescript-runtime&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;./dynamo-client&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Type-safe handler for the PutShoppingList operation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;PutShoppingListChainedHandlerFunction&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;LoggingInterceptor&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getLogger&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;Start PutShoppingList Operation&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;randomUUID&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;PutItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;TableName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Response&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;success&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Entry point for the AWS Lambda handler for the PutShoppingList operation.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* The putShoppingListHandler method wraps the type-safe handler and manages marshalling inputs and outputs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;handler&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;putShoppingListHandler&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(...&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;INTERCEPTORS&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import { randomUUID } from &amp;#x27;crypto&amp;#x27;;import { DynamoDBClient, PutItemCommand } from &amp;#x27;@aws-sdk/client-dynamodb&amp;#x27;;import {  putShoppingListHandler,  PutShoppingListChainedHandlerFunction,  INTERCEPTORS,  Response,  LoggingInterceptor,} from &amp;#x27;myapi-typescript-runtime&amp;#x27;;import { ddbClient } from &amp;#x27;./dynamo-client&amp;#x27;;/** * Type-safe handler for the PutShoppingList operation */export const putShoppingList: PutShoppingListChainedHandlerFunction = async (request) =&gt; {  LoggingInterceptor.getLogger(request).info(&amp;#x27;Start PutShoppingList Operation&amp;#x27;);  const shoppingListId = request.input.body.shoppingListId ?? randomUUID();  await ddbClient.send(new PutItemCommand({    TableName: &amp;#x27;shopping_list&amp;#x27;,    Item: {      shoppingListId: {        S: shoppingListId,      },      name: {        S: request.input.body.name,      },      shoppingItems: {        S: JSON.stringify(request.input.body.shoppingItems || []),      },    },  }));  return Response.success({    shoppingListId,  });};/** * Entry point for the AWS Lambda handler for the PutShoppingList operation. * The putShoppingListHandler method wraps the type-safe handler and manages marshalling inputs and outputs */export const handler = putShoppingListHandler(...INTERCEPTORS, putShoppingList);&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-9-1&quot; aria-labelledby=&quot;tab-9-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;backend/src/operations/put-shopping-list.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;randomUUID&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;crypto&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PutItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;@aws-sdk/client-dynamodb&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;./dynamo-client.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PutShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PutShoppingListOperation&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;../generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ServiceContext&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;../context.js&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Type-safe handler for the PutShoppingList operation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;PutShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;PutShoppingListOperation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ServiceContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;Start PutShoppingList Operation&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;randomUUID&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ddbClient&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;PutItemCommand&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;TableName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import { randomUUID } from &amp;#x27;crypto&amp;#x27;;import { PutItemCommand } from &amp;#x27;@aws-sdk/client-dynamodb&amp;#x27;;import { ddbClient } from &amp;#x27;./dynamo-client.js&amp;#x27;;import { PutShoppingList as PutShoppingListOperation } from &amp;#x27;../generated/ssdk/index.js&amp;#x27;;import { ServiceContext } from &amp;#x27;../context.js&amp;#x27;;/** * Type-safe handler for the PutShoppingList operation */export const PutShoppingList: PutShoppingListOperation&lt;ServiceContext&gt; = async (input, ctx) =&gt; {  ctx.logger.info(&amp;#x27;Start PutShoppingList Operation&amp;#x27;);  const shoppingListId = input.shoppingListId ?? randomUUID();  await ddbClient.send(new PutItemCommand({    TableName: &amp;#x27;shopping_list&amp;#x27;,    Item: {      shoppingListId: {        S: shoppingListId,      },      name: {        S: input.name!,      },      shoppingItems: {        S: JSON.stringify(input.shoppingItems || []),      },    },  }));  return {    shoppingListId,  };};&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore class=&quot;astro-mwziz3wm&quot;&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;script type=&quot;module&quot; src=&quot;/codebuild/output/src3386235489/src/actions-runner/_work/nx-plugin-for-aws/nx-plugin-for-aws/node_modules/.pnpm/@astrojs+starlight@0.42.6_@astrojs+markdown-remark@7.3.0_supports-color@7.2.0__astro@7._b3b2c26d7602b780b1d1223415f300ed/node_modules/@astrojs/starlight/dist/user-components/Tabs.astro?astro&amp;#x26;type=script&amp;#x26;index=0&amp;#x26;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/template&gt;&lt;/div&gt;
&lt;p&gt;We generated the Smithy API project with the name &lt;code dir=&quot;auto&quot;&gt;api&lt;/code&gt; initially as we wanted it to be added to &lt;code dir=&quot;auto&quot;&gt;packages/api&lt;/code&gt; for consistency with the PDK project. Since our Smithy API now defines &lt;code dir=&quot;auto&quot;&gt;service MyApi&lt;/code&gt; instead of &lt;code dir=&quot;auto&quot;&gt;service Api&lt;/code&gt;, we need to update any instances of &lt;code dir=&quot;auto&quot;&gt;getApiServiceHandler&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;getMyApiServiceHandler&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Make this change to &lt;code dir=&quot;auto&quot;&gt;handler.ts&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;packages/api/backend/src/handler.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getApiServiceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getMyApiServiceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;POWERTOOLS_METRICS_NAMESPACE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Api&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;POWERTOOLS_SERVICE_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Api&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tracer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Tracer&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logger&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Logger&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;metrics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Metrics&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serviceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getApiServiceHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serviceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getMyApiServiceHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And to &lt;code dir=&quot;auto&quot;&gt;local-server.ts&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;packages/api/backend/src/local-server.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getApiServiceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getMyApiServiceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./generated/ssdk/index.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3001&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tracer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Tracer&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logger&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Logger&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;metrics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Metrics&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serviceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getApiServiceHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serviceHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getMyApiServiceHandler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Additionally, update &lt;code dir=&quot;auto&quot;&gt;packages/api/backend/project.json&lt;/code&gt; and update &lt;code dir=&quot;auto&quot;&gt;metadata.apiName&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;my-api&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;packages/api/backend/project.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;metadata&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;generator&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ts#smithy-api&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;apiName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;apiName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-api&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;iam&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;modelProject&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@shopping-list/api-model&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;iac&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cdk&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;ports&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;3001&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;verify-with-a-build&quot;&gt;Verify with a Build&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;We can now build the project to check that the migration has worked so far:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-10-0&quot; id=&quot;tab-10-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-10-1&quot; id=&quot;tab-10-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-10-2&quot; id=&quot;tab-10-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-10-3&quot; id=&quot;tab-10-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-10-0&quot; aria-labelledby=&quot;tab-10-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-10-1&quot; aria-labelledby=&quot;tab-10-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-10-2&quot; aria-labelledby=&quot;tab-10-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-10-3&quot; aria-labelledby=&quot;tab-10-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;You may see a build failure due to lint issues. These can usually be automatically fixed:&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-11-0&quot; id=&quot;tab-11-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-11-1&quot; id=&quot;tab-11-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-11-2&quot; id=&quot;tab-11-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-11-3&quot; id=&quot;tab-11-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-11-0&quot; aria-labelledby=&quot;tab-11-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-11-1&quot; aria-labelledby=&quot;tab-11-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-11-2&quot; aria-labelledby=&quot;tab-11-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-11-3&quot; aria-labelledby=&quot;tab-11-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;ウェブサイトの移行&quot;&gt;ウェブサイトの移行&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;CloudscapeReactTsWebsiteProject&lt;/code&gt; used in the shopping list application configured a React website with CloudScape and Cognito authentication built in.&lt;/p&gt;
&lt;p&gt;This project type leveraged &lt;a href=&quot;https://github.com/facebook/create-react-app&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;create-react-app&lt;/code&gt;&lt;/a&gt;, which is now deprecated. For migrating the website in this guide, we will use the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/react-website&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#website&lt;/code&gt; generator&lt;/a&gt;, which uses more modern and supported technologies, namely &lt;a href=&quot;https://vite.dev/&quot;&gt;Vite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As part of the migration, we will also move from PDK’s configured React Router to &lt;a href=&quot;https://tanstack.com/router&quot;&gt;TanStack Router&lt;/a&gt;, which adds additional type-safety to website routing.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;generate-a-react-website&quot;&gt;Generate a React Website&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Run the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/react-website&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#website&lt;/code&gt; generator&lt;/a&gt; with &lt;code dir=&quot;auto&quot;&gt;framework&lt;/code&gt; set to &lt;code dir=&quot;auto&quot;&gt;react&lt;/code&gt; to set up your website project in &lt;code dir=&quot;auto&quot;&gt;packages/website&lt;/code&gt;. Since the shopping list application is built with CloudScape components, we also set &lt;code dir=&quot;auto&quot;&gt;ux&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;cloudscape&lt;/code&gt; (the default is &lt;code dir=&quot;auto&quot;&gt;shadcn&lt;/code&gt;):&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;generator&amp;#x22;,&amp;#x22;namespace&amp;#x22;:&amp;#x22;@aws/nx-plugin&amp;#x22;,&amp;#x22;generator&amp;#x22;:&amp;#x22;ts#website&amp;#x22;,&amp;#x22;positional&amp;#x22;:[],&amp;#x22;noInteractive&amp;#x22;:true,&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;name&amp;#x22;,&amp;#x22;framework&amp;#x22;,&amp;#x22;ux&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Run this generator&lt;/span&gt;&lt;code&gt;@aws/nx-plugin:ts#website&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;generator-usage&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-12-0&quot; id=&quot;tab-12-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-12-1&quot; id=&quot;tab-12-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-12-0&quot; aria-labelledby=&quot;tab-12-0&quot; role=&quot;tabpanel&quot;&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-13-0&quot; id=&quot;tab-13-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-13-1&quot; id=&quot;tab-13-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-13-2&quot; id=&quot;tab-13-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-13-3&quot; id=&quot;tab-13-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-13-0&quot; aria-labelledby=&quot;tab-13-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;react&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;ux&quot;&gt;&lt;span&gt;--ux=&lt;/span&gt;&lt;span&gt;cloudscape&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-13-1&quot; aria-labelledby=&quot;tab-13-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;react&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;ux&quot;&gt;&lt;span&gt;--ux=&lt;/span&gt;&lt;span&gt;cloudscape&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-13-2&quot; aria-labelledby=&quot;tab-13-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;react&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;ux&quot;&gt;&lt;span&gt;--ux=&lt;/span&gt;&lt;span&gt;cloudscape&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-13-3&quot; aria-labelledby=&quot;tab-13-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bunx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;framework&quot;&gt;&lt;span&gt;--framework=&lt;/span&gt;&lt;span&gt;react&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;ux&quot;&gt;&lt;span&gt;--ux=&lt;/span&gt;&lt;span&gt;cloudscape&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-12-1&quot; aria-labelledby=&quot;tab-12-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;ol role=&quot;list&quot;&gt;&lt;li&gt;Install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console&quot;&gt;Nx Console VSCode Plugin&lt;/a&gt; if you haven&apos;t already&lt;/li&gt;&lt;li&gt;Open the Nx Console in VSCode&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate (UI)&lt;/code&gt; in the &quot;Common Nx Commands&quot; section&lt;/li&gt;&lt;li&gt;Search for &lt;code&gt;@aws/nx-plugin - ts#website&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Fill in the required parameters&lt;ul data-command-card-values=&quot;&quot;&gt;&lt;li&gt;&lt;b&gt;name:&lt;/b&gt; website&lt;/li&gt;&lt;li&gt;&lt;b&gt;framework:&lt;/b&gt; react&lt;/li&gt;&lt;li&gt;&lt;b&gt;ux:&lt;/b&gt; cloudscape&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;add-cognito-authentication&quot;&gt;Add Cognito Authentication&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The React website generator above doesn’t bundle cognito authentication by default like &lt;code dir=&quot;auto&quot;&gt;CloudscapeReactTsWebsiteProject&lt;/code&gt;, instead it’s added explicitly via the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/react-website-auth&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#website#auth&lt;/code&gt; generator&lt;/a&gt;.&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;generator&amp;#x22;,&amp;#x22;namespace&amp;#x22;:&amp;#x22;@aws/nx-plugin&amp;#x22;,&amp;#x22;generator&amp;#x22;:&amp;#x22;ts#website#auth&amp;#x22;,&amp;#x22;positional&amp;#x22;:[],&amp;#x22;noInteractive&amp;#x22;:true,&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;project&amp;#x22;,&amp;#x22;cognitoDomain&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Run this generator&lt;/span&gt;&lt;code&gt;@aws/nx-plugin:ts#website#auth&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;generator-usage&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-14-0&quot; id=&quot;tab-14-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-14-1&quot; id=&quot;tab-14-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-14-0&quot; aria-labelledby=&quot;tab-14-0&quot; role=&quot;tabpanel&quot;&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-15-0&quot; id=&quot;tab-15-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-15-1&quot; id=&quot;tab-15-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-15-2&quot; id=&quot;tab-15-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-15-3&quot; id=&quot;tab-15-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-15-0&quot; aria-labelledby=&quot;tab-15-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website#auth&lt;/span&gt; &lt;span data-token-key=&quot;project&quot;&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;cognitoDomain&quot;&gt;&lt;span&gt;--cognitoDomain=&lt;/span&gt;&lt;span&gt;shopping-list&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-15-1&quot; aria-labelledby=&quot;tab-15-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website#auth&lt;/span&gt; &lt;span data-token-key=&quot;project&quot;&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;cognitoDomain&quot;&gt;&lt;span&gt;--cognitoDomain=&lt;/span&gt;&lt;span&gt;shopping-list&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-15-2&quot; aria-labelledby=&quot;tab-15-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website#auth&lt;/span&gt; &lt;span data-token-key=&quot;project&quot;&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;cognitoDomain&quot;&gt;&lt;span&gt;--cognitoDomain=&lt;/span&gt;&lt;span&gt;shopping-list&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-15-3&quot; aria-labelledby=&quot;tab-15-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bunx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#website#auth&lt;/span&gt; &lt;span data-token-key=&quot;project&quot;&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;cognitoDomain&quot;&gt;&lt;span&gt;--cognitoDomain=&lt;/span&gt;&lt;span&gt;shopping-list&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-14-1&quot; aria-labelledby=&quot;tab-14-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;ol role=&quot;list&quot;&gt;&lt;li&gt;Install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console&quot;&gt;Nx Console VSCode Plugin&lt;/a&gt; if you haven&apos;t already&lt;/li&gt;&lt;li&gt;Open the Nx Console in VSCode&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate (UI)&lt;/code&gt; in the &quot;Common Nx Commands&quot; section&lt;/li&gt;&lt;li&gt;Search for &lt;code&gt;@aws/nx-plugin - ts#website#auth&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Fill in the required parameters&lt;ul data-command-card-values=&quot;&quot;&gt;&lt;li&gt;&lt;b&gt;project:&lt;/b&gt; website&lt;/li&gt;&lt;li&gt;&lt;b&gt;cognitoDomain:&lt;/b&gt; shopping-list&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;p&gt;This adds React components which manage the appropriate redirects to ensure users log in using the Cognito hosted UI. This also adds a CDK construct to deploy the Cognito resources in &lt;code dir=&quot;auto&quot;&gt;packages/common/constructs&lt;/code&gt;, called &lt;code dir=&quot;auto&quot;&gt;UserIdentity&lt;/code&gt;.&lt;/p&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;The PDK &lt;code dir=&quot;auto&quot;&gt;CloudscapeReactTsWebsiteProject&lt;/code&gt; relied on &lt;code dir=&quot;auto&quot;&gt;@aws-northstar/ui&lt;/code&gt; to provide Cognito login components in-app. If you would prefer to use this approach instead of moving to the hosted UI, you can replace the generated &lt;code dir=&quot;auto&quot;&gt;packages/common/constructs/src/core/user-identity.ts&lt;/code&gt; with the &lt;a href=&quot;https://github.com/aws/aws-pdk/blob/mainline/packages/identity/src/user-identity.ts&quot;&gt;implementation from PDK&lt;/a&gt;, replacing the constructs from &lt;code dir=&quot;auto&quot;&gt;@aws-cdk/aws-cognito-identitypool-alpha&lt;/code&gt; with those vended by &lt;code dir=&quot;auto&quot;&gt;aws-cdk-lib&lt;/code&gt;, and make sure to set the relevant values in &lt;code dir=&quot;auto&quot;&gt;RuntimeConfig&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;RuntimeConfig&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ensure&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;connection&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;cognitoProps&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Stack&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;identityPoolId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;identityPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;identityPoolId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userPoolId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPoolId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userPoolWebClientId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPoolClient&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPoolClientId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;You can then reuse the &lt;code dir=&quot;auto&quot;&gt;Auth&lt;/code&gt; component from your &lt;code dir=&quot;auto&quot;&gt;CloudscapeReactTsWebsiteProject&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;connect-the-website-to-the-api&quot;&gt;Connect the Website to the API&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;In PDK you could pass the vended Projen projects to one another to trigger integration code to be vended. This was used in the shopping list application to configure the website to be able to integrate with the API.&lt;/p&gt;
&lt;p&gt;With the Nx Plugin for AWS, API integration is supported via the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/connection&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;connection&lt;/code&gt; generator&lt;/a&gt;. Next, we use this generator so that our website can invoke our Smithy API:&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;generator&amp;#x22;,&amp;#x22;namespace&amp;#x22;:&amp;#x22;@aws/nx-plugin&amp;#x22;,&amp;#x22;generator&amp;#x22;:&amp;#x22;connection&amp;#x22;,&amp;#x22;positional&amp;#x22;:[],&amp;#x22;noInteractive&amp;#x22;:true,&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;sourceProject&amp;#x22;,&amp;#x22;targetProject&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Run this generator&lt;/span&gt;&lt;code&gt;@aws/nx-plugin:connection&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;generator-usage&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-16-0&quot; id=&quot;tab-16-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-16-1&quot; id=&quot;tab-16-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-16-0&quot; aria-labelledby=&quot;tab-16-0&quot; role=&quot;tabpanel&quot;&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-17-0&quot; id=&quot;tab-17-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-17-1&quot; id=&quot;tab-17-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-17-2&quot; id=&quot;tab-17-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-17-3&quot; id=&quot;tab-17-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-17-0&quot; aria-labelledby=&quot;tab-17-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:connection&lt;/span&gt; &lt;span data-token-key=&quot;sourceProject&quot;&gt;&lt;span&gt;--sourceProject=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;targetProject&quot;&gt;&lt;span&gt;--targetProject=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-17-1&quot; aria-labelledby=&quot;tab-17-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:connection&lt;/span&gt; &lt;span data-token-key=&quot;sourceProject&quot;&gt;&lt;span&gt;--sourceProject=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;targetProject&quot;&gt;&lt;span&gt;--targetProject=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-17-2&quot; aria-labelledby=&quot;tab-17-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:connection&lt;/span&gt; &lt;span data-token-key=&quot;sourceProject&quot;&gt;&lt;span&gt;--sourceProject=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;targetProject&quot;&gt;&lt;span&gt;--targetProject=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-17-3&quot; aria-labelledby=&quot;tab-17-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bunx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:connection&lt;/span&gt; &lt;span data-token-key=&quot;sourceProject&quot;&gt;&lt;span&gt;--sourceProject=&lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;targetProject&quot;&gt;&lt;span&gt;--targetProject=&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-16-1&quot; aria-labelledby=&quot;tab-16-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;ol role=&quot;list&quot;&gt;&lt;li&gt;Install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console&quot;&gt;Nx Console VSCode Plugin&lt;/a&gt; if you haven&apos;t already&lt;/li&gt;&lt;li&gt;Open the Nx Console in VSCode&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate (UI)&lt;/code&gt; in the &quot;Common Nx Commands&quot; section&lt;/li&gt;&lt;li&gt;Search for &lt;code&gt;@aws/nx-plugin - connection&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Fill in the required parameters&lt;ul data-command-card-values=&quot;&quot;&gt;&lt;li&gt;&lt;b&gt;sourceProject:&lt;/b&gt; website&lt;/li&gt;&lt;li&gt;&lt;b&gt;targetProject:&lt;/b&gt; api&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;p&gt;This generates the necessary client providers and build targets for your website to call your API via a generated TypeScript client.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;add-aws-northstar-dependency&quot;&gt;Add AWS Northstar Dependency&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;CloudscapeReactTsWebsiteProject&lt;/code&gt; automatically included a dependency on &lt;code dir=&quot;auto&quot;&gt;@aws-northstar/ui&lt;/code&gt; which is used in our shopping list application, so we add it to the &lt;code dir=&quot;auto&quot;&gt;@shopping-list/website&lt;/code&gt; project:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-18-0&quot; id=&quot;tab-18-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-18-1&quot; id=&quot;tab-18-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-18-2&quot; id=&quot;tab-18-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-18-3&quot; id=&quot;tab-18-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-18-0&quot; aria-labelledby=&quot;tab-18-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-northstar/ui&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--filter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;website&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-18-1&quot; aria-labelledby=&quot;tab-18-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workspace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@shopping-list/website&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-northstar/ui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-18-2&quot; aria-labelledby=&quot;tab-18-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--legacy-peer-deps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-northstar/ui&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-w&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/website&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-18-3&quot; aria-labelledby=&quot;tab-18-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@aws-northstar/ui&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cwd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/website&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;@aws-northstar/ui&lt;/code&gt; bundles a code editor component which depends on &lt;code dir=&quot;auto&quot;&gt;ace-builds&lt;/code&gt;, using a webpack-specific import that Vite cannot resolve. Since our shopping list application doesn’t use this component, we exclude it from the bundle by adding it to the &lt;code dir=&quot;auto&quot;&gt;external&lt;/code&gt; configuration within the existing &lt;code dir=&quot;auto&quot;&gt;build&lt;/code&gt; options in &lt;code dir=&quot;auto&quot;&gt;packages/website/vite.config.mts&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;packages/website/vite.config.mts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;outDir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;../../dist/packages/website/bundle&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;emptyOutDir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reportCompressedSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;commonjsOptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;transformMixedEsModules&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rollupOptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;external&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;ace-builds/webpack-resolver&apos;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;move-the-components-and-pages&quot;&gt;Move the Components and Pages&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://aws.github.io/aws-pdk/getting_started/shopping_list_app.html#create-new-pages-components&quot;&gt;shopping list application&lt;/a&gt; has one component called &lt;code dir=&quot;auto&quot;&gt;CreateItem&lt;/code&gt;, and two pages, &lt;code dir=&quot;auto&quot;&gt;ShoppingList&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;ShoppingLists&lt;/code&gt;. We’ll migrate these to the new website, making a few adjustments since we’re using TanStack Router and the Nx Plugin for AWS TypeScript client code generator.&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Copy &lt;code dir=&quot;auto&quot;&gt;packages/website/src/components/CreateItem/index.tsx&lt;/code&gt; from the PDK project into the exact same location in the new project.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy &lt;code dir=&quot;auto&quot;&gt;packages/website/src/pages/ShoppingLists/index.tsx&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;packages/website/src/routes/index.tsx&lt;/code&gt;, since &lt;code dir=&quot;auto&quot;&gt;ShoppingLists&lt;/code&gt; is our home page and we use file-based routing with TanStack router.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy &lt;code dir=&quot;auto&quot;&gt;packages/website/src/pages/ShoppingList/index.tsx&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;packages/website/src/routes/$shoppingListId.tsx&lt;/code&gt;, since &lt;code dir=&quot;auto&quot;&gt;ShoppingList&lt;/code&gt; was the page we want to show on the &lt;code dir=&quot;auto&quot;&gt;/:shoppingListId&lt;/code&gt; route.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note that you’ll now have some build errors visible in your IDE, we’ll need to make a few more changes to fit within the new framework, outlined below.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-from-react-router-to-tanstack-router&quot;&gt;Migrate from React Router to TanStack Router&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Since we’re using &lt;a href=&quot;https://tanstack.com/router/latest/docs/framework/react/routing/file-based-routing&quot;&gt;file-based routing&lt;/a&gt;, we can use the website local development server to manage automatically generating route configuration.&lt;/p&gt;
&lt;p&gt;Let’s start the local website server:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-19-0&quot; id=&quot;tab-19-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-19-1&quot; id=&quot;tab-19-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-19-2&quot; id=&quot;tab-19-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-19-3&quot; id=&quot;tab-19-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-19-0&quot; aria-labelledby=&quot;tab-19-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-19-1&quot; aria-labelledby=&quot;tab-19-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-19-2&quot; aria-labelledby=&quot;tab-19-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-19-3&quot; aria-labelledby=&quot;tab-19-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;aside aria-label=&quot;Tip&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Tip&lt;/p&gt;&lt;div&gt;&lt;p&gt;We’re using the &lt;code dir=&quot;auto&quot;&gt;dev&lt;/code&gt; target here, which also starts local servers for any APIs which have been connected with &lt;code dir=&quot;auto&quot;&gt;connection&lt;/code&gt;, and hot-reloads if your website, model, or backend changes! This allows us to test our API and website locally before we’ve even written any CDK code.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;You’ll see some errors, but the local website server should start on port &lt;code dir=&quot;auto&quot;&gt;4200&lt;/code&gt;, as well as the local Smithy API server on port &lt;code dir=&quot;auto&quot;&gt;3001&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Follow the below steps in both &lt;code dir=&quot;auto&quot;&gt;routes/index.tsx&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;routes/$shoppingListId.tsx&lt;/code&gt; to migrate to TanStack Router:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Add &lt;code dir=&quot;auto&quot;&gt;createFileRoute&lt;/code&gt; to register each route:&lt;/p&gt;
&lt;starlight-tabs&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-20-0&quot; id=&quot;tab-20-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;routes/index.tsx&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-20-1&quot; id=&quot;tab-20-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;routes/$shoppingListId.tsx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-20-0&quot; aria-labelledby=&quot;tab-20-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createFileRoute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-router&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ShoppingLists&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createFileRoute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/&apos;&lt;/span&gt;&lt;span&gt;)({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;component&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ShoppingLists&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-20-1&quot; aria-labelledby=&quot;tab-20-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createFileRoute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-router&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ShoppingList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createFileRoute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/$shoppingListId&apos;&lt;/span&gt;&lt;span&gt;)({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;component&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/starlight-tabs&gt;
&lt;p&gt;After you save the file, you’ll notice that type errors with call to &lt;code dir=&quot;auto&quot;&gt;createFileRoute&lt;/code&gt; have gone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Replace the &lt;code dir=&quot;auto&quot;&gt;useNavigate&lt;/code&gt; hook.&lt;/p&gt;
&lt;p&gt;Update the import:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useNavigate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;react-router-dom&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useNavigate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;@tanstack/react-router&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Update calls to the &lt;code dir=&quot;auto&quot;&gt;navigate&lt;/code&gt; method (returned by &lt;code dir=&quot;auto&quot;&gt;useNavigate&lt;/code&gt;) to pass in the type-safe routes:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;navigate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cell&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;navigate&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/$shoppingListId&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;params&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Replace the &lt;code dir=&quot;auto&quot;&gt;useParams&lt;/code&gt; hook.&lt;/p&gt;
&lt;p&gt;Remove the import:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useParams&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;react-router-dom&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Update calls to &lt;code dir=&quot;auto&quot;&gt;useParams&lt;/code&gt; with the hook provided by the &lt;code dir=&quot;auto&quot;&gt;Route&lt;/code&gt; created above. These are now type-safe!&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useParams&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Route&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;useParams&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;Tip&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Tip&lt;/p&gt;&lt;div&gt;&lt;p&gt;You can also check out the &lt;a href=&quot;https://tanstack.com/router/latest/docs/installation/migrate-from-react-router&quot;&gt;detailed guide in the TanStack Router documentation&lt;/a&gt; for more in-depth information for more complex scenarios.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;fix-component-imports&quot;&gt;Fix Component Imports&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Since our route files aren’t as deeply nested in the file tree as they were in our PDK project, we need to fix the import for &lt;code dir=&quot;auto&quot;&gt;CreateItem&lt;/code&gt; in both &lt;code dir=&quot;auto&quot;&gt;routes/index.tsx&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;routes/$shoppingListId.tsx&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CreateItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../../components/CreateItem&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CreateItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../components/CreateItem&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;AppLayoutContext&lt;/code&gt; is also vended in a slightly different location in our new project:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AppLayoutContext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../../layouts/App&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AppLayoutContext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../components/AppLayout&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-to-use-the-new-generated-typescript-client&quot;&gt;Migrate to use the new Generated TypeScript Client&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;We’re getting closer now! Next, we need to migrate to use the TypeScript client vended by the Nx Plugin for AWS, which has a few improvements compared to Type Safe API. To achieve this, follow the below steps&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Import the new generated client and types instead of the old, for example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;usePutShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;useDeleteShoppingList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;useGetShoppingLists&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;myapi-typescript-react-query-hooks&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../generated/my-api/types.gen&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useMyApi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../hooks/useMyApi&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useInfiniteQuery&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useMutation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-query&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Note that &lt;code dir=&quot;auto&quot;&gt;routes/$shoppingListId.tsx&lt;/code&gt; imports the &lt;code dir=&quot;auto&quot;&gt;ShoppingList&lt;/code&gt; type as &lt;code dir=&quot;auto&quot;&gt;_ShoppingList&lt;/code&gt; - in that file we should do the same, but again importing from &lt;code dir=&quot;auto&quot;&gt;types.gen&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note also we import the relevant hooks directly from &lt;code dir=&quot;auto&quot;&gt;@tanstack/react-query&lt;/code&gt;, since the generated client provides methods to generate options for TanStack query hooks, rather than hook wrappers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Instantiate the new TanStack Query hooks, for example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useGetShoppingLists&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PAGE_SIZE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;usePutShoppingList&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deleteShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useDeleteShoppingList&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useMyApi&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useInfiniteQuery&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;infiniteQueryOptions&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageSize&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PAGE_SIZE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getNextPageParam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nextToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useMutation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mutationOptions&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deleteShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useMutation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mutationOptions&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove the wrapper &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;operation&gt;RequestContent&lt;/code&gt; for calls to operations which accept parameters in the request body:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mutateAsync&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;putShoppingListRequestContent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;There was also a minor bug in the shopping list application’s &lt;code dir=&quot;auto&quot;&gt;pages/ShoppingList/index.tsx&lt;/code&gt; where it was not using optional chaining correctly. Let’s fix this too to avoid a lint error when we run our final build:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingList&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_ShoppingList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;undefined&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;pages&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;shoppingLists&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]!;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;pages&lt;/span&gt;&lt;span&gt;?.[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]?.&lt;/span&gt;&lt;span&gt;shoppingLists&lt;/span&gt;&lt;span&gt;?.[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;And likewise update the references which assumed it’s defined:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingList&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;my list&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shoppingList&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;shoppingListId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-from-tanstack-query-v4-to-v5&quot;&gt;Migrate from TanStack Query v4 to v5&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;There are a few errors left to fix due to differences between TanStack Query v4 (used by PDK) and v5 which the &lt;code dir=&quot;auto&quot;&gt;connection&lt;/code&gt; generator added:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Replace &lt;code dir=&quot;auto&quot;&gt;isLoading&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;isPending&lt;/code&gt; for mutations, for example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;isLoading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;isPending&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The shopping list application made use of the &lt;code dir=&quot;auto&quot;&gt;InfiniteQueryTable&lt;/code&gt; from &lt;code dir=&quot;auto&quot;&gt;@aws-northstar/ui&lt;/code&gt; which expects a type from TanStack Query v4. This actually works with infinite queries from v5, so we can just suppress the type error:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;InfiniteQueryTable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;any&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;Tip&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Tip&lt;/p&gt;&lt;div&gt;&lt;p&gt;The TanStack Query documentation has a &lt;a href=&quot;https://tanstack.com/query/latest/docs/framework/react/guides/migrating-to-v5&quot;&gt;detailed migration guide&lt;/a&gt; which you can follow if you have used more features of the library.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;visit-the-local-website&quot;&gt;Visit the Local Website&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;You can now visit the local website at &lt;a href=&quot;http://localhost:4200/&quot;&gt;http://localhost:4200/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The website should load up now that everything’s been migrated! Since the only infrastructure that the shopping list application relies on besides API, Website and Identity is the DynamoDB table - if you’ve got a DynamoDB table named &lt;code dir=&quot;auto&quot;&gt;shopping_list&lt;/code&gt; in-region, and local AWS credentials which can access it, the website will be fully functional!&lt;/p&gt;
&lt;p&gt;If not, that’s ok, we’ll migrate the infrastructure next.&lt;/p&gt;
&lt;div&gt;&lt;span data-drawer-trigger=&quot;&quot;&gt;Click here for full before/after examples for the two shopping list pages from the tutorial&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M12 11a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-4a1 1 0 0 0-1-1Zm.38-3.92a1 1 0 0 0-.76 0 1 1 0 0 0-.33.21 1.15 1.15 0 0 0-.21.33 1 1 0 0 0 .21 1.09c.097.088.209.16.33.21A1 1 0 0 0 13 8a1.05 1.05 0 0 0-.29-.71 1 1 0 0 0-.33-.21ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;template id=&quot;drawer-template&quot;&gt;&lt;div class=&quot;drawer-portal&quot;&gt;&lt;div class=&quot;drawer-backdrop&quot; data-drawer-backdrop=&quot;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;drawer&quot; role=&quot;dialog&quot; aria-labelledby=&quot;drawer-title&quot;&gt;&lt;header class=&quot;drawer-header&quot;&gt;&lt;h2 id=&quot;drawer-title&quot; class=&quot;drawer-title&quot; data-drawer-title=&quot;{title}&quot;&gt;Shopping List Page Migration&lt;/h2&gt;&lt;button class=&quot;drawer-close&quot; aria-label=&quot;Close drawer&quot; data-drawer-close=&quot;&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;6&quot; x2=&quot;6&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; y1=&quot;6&quot; x2=&quot;18&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/header&gt;&lt;div class=&quot;drawer-content sl-markdown-content&quot;&gt;&lt;h4&gt;Shopping Lists Page&lt;/h4&gt;&lt;starlight-tabs data-sync-key=&quot;pdk-migration&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;div class=&quot;tablist-wrapper not-content astro-mwziz3wm&quot;&gt;&lt;ul role=&quot;tablist&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-21-0&quot; id=&quot;tab-21-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;astro-mwziz3wm&quot;&gt;Before&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-21-1&quot; id=&quot;tab-21-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot; class=&quot;astro-mwziz3wm&quot;&gt;After&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-21-0&quot; aria-labelledby=&quot;tab-21-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;pages/ShoppingLists/index.tsx&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;tsx&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/* eslint-disable @typescript-eslint/no-floating-promises */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;InfiniteQueryTable&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@aws-northstar/ui/components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;TableProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@cloudscape-design/components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;usePutShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useDeleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useGetShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;myapi-typescript-react-query-hooks&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMemo&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useNavigate&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;react-router-dom&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;CreateItem&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../../components/CreateItem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;AppLayoutContext&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../../layouts/App&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PAGE_SIZE&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Component to render the ShoppingLists &quot;/&quot; route.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;ShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;React&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;FC&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setSelectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;([]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useGetShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PAGE_SIZE&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;usePutShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useDeleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;navigate&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useNavigate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setAppLayoutProps&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;AppLayoutContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setAppLayoutProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;contentType&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;table&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setAppLayoutProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;columnDefinitions&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMemo&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;TableProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ColumnDefinition&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;[]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;shoppingListId&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isRowHeader&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Shopping List Id&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Link&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`/&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onFollow&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;preventDefault&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;navigate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`/&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;shoppingItems&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Shopping Items&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt; Items.`&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;navigate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;CreateItem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Create Shopping List&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutateAsync&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;putShoppingListRequestContent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;refetch&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;InfiniteQueryTable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;query&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;itemsKey&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;shoppingLists&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PAGE_SIZE&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;selectionType&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;single&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;stickyHeader&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;selectedItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onSelectionChange&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setSelectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;detail&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;selectedItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;awsui-h1-sticky&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;xs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;direction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;horizontal&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;loading&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data-testid&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;header-btn-delete&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;disabled&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutateAsync&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;![&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setSelectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;([]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;refetch&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Delete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data-testid&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;header-btn-create&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;primary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Create Shopping List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Shopping Lists&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;full-page&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;columnDefinitions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;columnDefinitions&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;/* eslint-disable @typescript-eslint/no-floating-promises */import { InfiniteQueryTable } from &amp;#x22;@aws-northstar/ui/components&amp;#x22;;import {  Button,  Header,  Link,  SpaceBetween,  TableProps,} from &amp;#x22;@cloudscape-design/components&amp;#x22;;import {  ShoppingList,  usePutShoppingList,  useDeleteShoppingList,  useGetShoppingLists,} from &amp;#x22;myapi-typescript-react-query-hooks&amp;#x22;;import { useContext, useEffect, useMemo, useState } from &amp;#x22;react&amp;#x22;;import { useNavigate } from &amp;#x22;react-router-dom&amp;#x22;;import CreateItem from &amp;#x22;../../components/CreateItem&amp;#x22;;import { AppLayoutContext } from &amp;#x22;../../layouts/App&amp;#x22;;const PAGE_SIZE = 50;/** * Component to render the ShoppingLists &amp;#x22;/&amp;#x22; route. */const ShoppingLists: React.FC = () =&gt; {  const [visibleModal, setVisibleModal] = useState(false);  const [selectedShoppingList, setSelectedShoppingList] = useState&lt;    ShoppingList[]  &gt;([]);  const getShoppingLists = useGetShoppingLists({ pageSize: PAGE_SIZE });  const putShoppingList = usePutShoppingList();  const deleteShoppingList = useDeleteShoppingList();  const navigate = useNavigate();  const { setAppLayoutProps } = useContext(AppLayoutContext);  useEffect(() =&gt; {    setAppLayoutProps({      contentType: &amp;#x22;table&amp;#x22;,    });  }, [setAppLayoutProps]);  const columnDefinitions = useMemo&lt;    TableProps.ColumnDefinition&lt;ShoppingList&gt;[]  &gt;(    () =&gt; [      {        id: &amp;#x22;shoppingListId&amp;#x22;,        isRowHeader: true,        header: &amp;#x22;Shopping List Id&amp;#x22;,        cell: (cell) =&gt; (          &lt;Link            href={&amp;#x60;/${cell.shoppingListId}&amp;#x60;}            onFollow={(e) =&gt; {              e.preventDefault();              navigate(&amp;#x60;/${cell.shoppingListId}&amp;#x60;);            }}          &gt;            {cell.shoppingListId}          &lt;/Link&gt;        ),      },      {        id: &amp;#x22;name&amp;#x22;,        header: &amp;#x22;Name&amp;#x22;,        cell: (cell) =&gt; cell.name,      },      {        id: &amp;#x22;shoppingItems&amp;#x22;,        header: &amp;#x22;Shopping Items&amp;#x22;,        cell: (cell) =&gt; &amp;#x60;${cell.shoppingItems?.length || 0} Items.&amp;#x60;,      },    ],    [navigate],  );  return (    &lt;&gt;      &lt;CreateItem        title=&amp;#x22;Create Shopping List&amp;#x22;        callback={async (item) =&gt; {          await putShoppingList.mutateAsync({            putShoppingListRequestContent: {              name: item,            },          });          getShoppingLists.refetch();        }}        isLoading={putShoppingList.isLoading}        visibleModal={visibleModal}        setVisibleModal={setVisibleModal}      /&gt;      &lt;InfiniteQueryTable        query={getShoppingLists}        itemsKey=&amp;#x22;shoppingLists&amp;#x22;        pageSize={PAGE_SIZE}        selectionType=&amp;#x22;single&amp;#x22;        stickyHeader={true}        selectedItems={selectedShoppingList}        onSelectionChange={(e) =&gt;          setSelectedShoppingList(e.detail.selectedItems)        }        header={          &lt;Header            variant=&amp;#x22;awsui-h1-sticky&amp;#x22;            actions={              &lt;SpaceBetween size=&amp;#x22;xs&amp;#x22; direction=&amp;#x22;horizontal&amp;#x22;&gt;                &lt;Button                  loading={deleteShoppingList.isLoading}                  data-testid=&amp;#x22;header-btn-delete&amp;#x22;                  disabled={selectedShoppingList.length === 0}                  onClick={async () =&gt; {                    await deleteShoppingList.mutateAsync({                      shoppingListId: selectedShoppingList![0].shoppingListId,                    });                    setSelectedShoppingList([]);                    getShoppingLists.refetch();                  }}                &gt;                  Delete                &lt;/Button&gt;                &lt;Button                  data-testid=&amp;#x22;header-btn-create&amp;#x22;                  variant=&amp;#x22;primary&amp;#x22;                  onClick={() =&gt; setVisibleModal(true)}                &gt;                  Create Shopping List                &lt;/Button&gt;              &lt;/SpaceBetween&gt;            }          &gt;            Shopping Lists          &lt;/Header&gt;        }        variant=&amp;#x22;full-page&amp;#x22;        columnDefinitions={columnDefinitions}      /&gt;    &lt;/&gt;  );};export default ShoppingLists;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-21-1&quot; aria-labelledby=&quot;tab-21-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;routes/index.tsx&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;tsx&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/* eslint-disable @typescript-eslint/no-floating-promises */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;InfiniteQueryTable&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@aws-northstar/ui/components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;TableProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@cloudscape-design/components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMemo&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useNavigate&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@tanstack/react-router&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;CreateItem&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../components/CreateItem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;AppLayoutContext&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../components/AppLayout&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;createFileRoute&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@tanstack/react-router&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../generated/my-api/types.gen&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMyApi&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../hooks/useMyApi&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useInfiniteQuery&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMutation&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@tanstack/react-query&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PAGE_SIZE&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Component to render the ShoppingLists &quot;/&quot; route.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;ShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;React&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;FC&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setSelectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;([]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useMyApi&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useInfiniteQuery&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;infiniteQueryOptions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PAGE_SIZE&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getNextPageParam&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;res&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;res&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useMutation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutationOptions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useMutation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutationOptions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;navigate&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useNavigate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setAppLayoutProps&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;AppLayoutContext&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setAppLayoutProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;contentType&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;table&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setAppLayoutProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;columnDefinitions&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMemo&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;TableProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;ColumnDefinition&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;[]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;shoppingListId&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isRowHeader&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Shopping List Id&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Link&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`/&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onFollow&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;preventDefault&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;navigate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;/$shoppingListId&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;params&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;shoppingItems&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Shopping Items&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;cell&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt; Items.`&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;navigate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;CreateItem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Create Shopping List&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutateAsync&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;refetch&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isPending&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;InfiniteQueryTable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;query&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;itemsKey&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;shoppingLists&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;PAGE_SIZE&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;selectionType&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;single&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;stickyHeader&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;selectedItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onSelectionChange&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setSelectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;detail&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;selectedItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;awsui-h1-sticky&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;xs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;direction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;horizontal&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;loading&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isPending&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data-testid&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;header-btn-delete&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;disabled&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;deleteShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutateAsync&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;selectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;![&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setSelectedShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;([]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;refetch&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Delete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data-testid&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;header-btn-create&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;primary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Create Shopping List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Shopping Lists&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;full-page&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;columnDefinitions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;columnDefinitions&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Route&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;createFileRoute&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;/* eslint-disable @typescript-eslint/no-floating-promises */import { InfiniteQueryTable } from &amp;#x22;@aws-northstar/ui/components&amp;#x22;;import {  Button,  Header,  Link,  SpaceBetween,  TableProps,} from &amp;#x22;@cloudscape-design/components&amp;#x22;;import { useContext, useEffect, useMemo, useState } from &amp;#x22;react&amp;#x22;;import { useNavigate } from &amp;#x22;@tanstack/react-router&amp;#x22;;import CreateItem from &amp;#x22;../components/CreateItem&amp;#x22;;import { AppLayoutContext } from &amp;#x22;../components/AppLayout&amp;#x22;;import { createFileRoute } from &amp;#x22;@tanstack/react-router&amp;#x22;;import { ShoppingList } from &amp;#x22;../generated/my-api/types.gen&amp;#x22;;import { useMyApi } from &amp;#x22;../hooks/useMyApi&amp;#x22;;import { useInfiniteQuery, useMutation } from &amp;#x22;@tanstack/react-query&amp;#x22;;const PAGE_SIZE = 50;/** * Component to render the ShoppingLists &amp;#x22;/&amp;#x22; route. */const ShoppingLists: React.FC = () =&gt; {  const [visibleModal, setVisibleModal] = useState(false);  const [selectedShoppingList, setSelectedShoppingList] = useState&lt;    ShoppingList[]  &gt;([]);  const api = useMyApi();  const getShoppingLists = useInfiniteQuery(    api.getShoppingLists.infiniteQueryOptions(      { pageSize: PAGE_SIZE },      { getNextPageParam: (res) =&gt; res.nextToken },    ),  );  const putShoppingList = useMutation(api.putShoppingList.mutationOptions());  const deleteShoppingList = useMutation(    api.deleteShoppingList.mutationOptions(),  );  const navigate = useNavigate();  const { setAppLayoutProps } = useContext(AppLayoutContext);  useEffect(() =&gt; {    setAppLayoutProps({      contentType: &amp;#x22;table&amp;#x22;,    });  }, [setAppLayoutProps]);  const columnDefinitions = useMemo&lt;    TableProps.ColumnDefinition&lt;ShoppingList&gt;[]  &gt;(    () =&gt; [      {        id: &amp;#x22;shoppingListId&amp;#x22;,        isRowHeader: true,        header: &amp;#x22;Shopping List Id&amp;#x22;,        cell: (cell) =&gt; (          &lt;Link            href={&amp;#x60;/${cell.shoppingListId}&amp;#x60;}            onFollow={(e) =&gt; {              e.preventDefault();              navigate({  to: &amp;#x27;/$shoppingListId&amp;#x27;,  params: { shoppingListId: cell.shoppingListId },});            }}          &gt;            {cell.shoppingListId}          &lt;/Link&gt;        ),      },      {        id: &amp;#x22;name&amp;#x22;,        header: &amp;#x22;Name&amp;#x22;,        cell: (cell) =&gt; cell.name,      },      {        id: &amp;#x22;shoppingItems&amp;#x22;,        header: &amp;#x22;Shopping Items&amp;#x22;,        cell: (cell) =&gt; &amp;#x60;${cell.shoppingItems?.length || 0} Items.&amp;#x60;,      },    ],    [navigate],  );  return (    &lt;&gt;      &lt;CreateItem        title=&amp;#x22;Create Shopping List&amp;#x22;        callback={async (item) =&gt; {          await putShoppingList.mutateAsync({              name: item,          });          getShoppingLists.refetch();        }}        isLoading={putShoppingList.isPending}        visibleModal={visibleModal}        setVisibleModal={setVisibleModal}      /&gt;      &lt;InfiniteQueryTable        query={getShoppingLists as any}        itemsKey=&amp;#x22;shoppingLists&amp;#x22;        pageSize={PAGE_SIZE}        selectionType=&amp;#x22;single&amp;#x22;        stickyHeader={true}        selectedItems={selectedShoppingList}        onSelectionChange={(e) =&gt;          setSelectedShoppingList(e.detail.selectedItems)        }        header={          &lt;Header            variant=&amp;#x22;awsui-h1-sticky&amp;#x22;            actions={              &lt;SpaceBetween size=&amp;#x22;xs&amp;#x22; direction=&amp;#x22;horizontal&amp;#x22;&gt;                &lt;Button                  loading={deleteShoppingList.isPending}                  data-testid=&amp;#x22;header-btn-delete&amp;#x22;                  disabled={selectedShoppingList.length === 0}                  onClick={async () =&gt; {                    await deleteShoppingList.mutateAsync({                      shoppingListId: selectedShoppingList![0].shoppingListId,                    });                    setSelectedShoppingList([]);                    getShoppingLists.refetch();                  }}                &gt;                  Delete                &lt;/Button&gt;                &lt;Button                  data-testid=&amp;#x22;header-btn-create&amp;#x22;                  variant=&amp;#x22;primary&amp;#x22;                  onClick={() =&gt; setVisibleModal(true)}                &gt;                  Create Shopping List                &lt;/Button&gt;              &lt;/SpaceBetween&gt;            }          &gt;            Shopping Lists          &lt;/Header&gt;        }        variant=&amp;#x22;full-page&amp;#x22;        columnDefinitions={columnDefinitions}      /&gt;    &lt;/&gt;  );};export const Route = createFileRoute(&amp;#x27;/&amp;#x27;)({  component: ShoppingLists,});&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore class=&quot;astro-mwziz3wm&quot;&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;script type=&quot;module&quot; src=&quot;/codebuild/output/src3386235489/src/actions-runner/_work/nx-plugin-for-aws/nx-plugin-for-aws/node_modules/.pnpm/@astrojs+starlight@0.42.6_@astrojs+markdown-remark@7.3.0_supports-color@7.2.0__astro@7._b3b2c26d7602b780b1d1223415f300ed/node_modules/@astrojs/starlight/dist/user-components/Tabs.astro?astro&amp;#x26;type=script&amp;#x26;index=0&amp;#x26;lang.ts&quot;&gt;&lt;/script&gt;&lt;h4&gt;Shopping List Page&lt;/h4&gt;&lt;starlight-tabs data-sync-key=&quot;pdk-migration&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;div class=&quot;tablist-wrapper not-content astro-mwziz3wm&quot;&gt;&lt;ul role=&quot;tablist&quot; class=&quot;astro-mwziz3wm&quot;&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-22-0&quot; id=&quot;tab-22-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;astro-mwziz3wm&quot;&gt;Before&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot; class=&quot;tab astro-mwziz3wm&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-22-1&quot; id=&quot;tab-22-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot; class=&quot;astro-mwziz3wm&quot;&gt;After&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-22-0&quot; aria-labelledby=&quot;tab-22-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;pages/ShoppingList/index.tsx&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;tsx&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/* eslint-disable @typescript-eslint/no-floating-promises */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Board&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;BoardItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;BoardProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@cloudscape-design/board-components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ContentLayout&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Spinner&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@cloudscape-design/components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;_ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;usePutShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useGetShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;myapi-typescript-react-query-hooks&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useParams&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;react-router-dom&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;CreateItem&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../../components/CreateItem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Component to render a singular Shopping List &quot;/:shoppingListId&quot; route.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;React&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;FC&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useParams&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useGetShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;usePutShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;_ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pages&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]!;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;BoardProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;[]&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;definition&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;minColumnSpan&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;})),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ContentLayout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;awsui-h1-sticky&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;xs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;direction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;horizontal&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data-testid&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;header-btn-create&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;primary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Add Item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Shopping list: &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;CreateItem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Add Item&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;...(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;definition&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;minColumnSpan&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;putShoppingListRequestContent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Spinner&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Board&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onItemsChange&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;detail&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;BoardProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;[];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;putShoppingListRequestContent&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;renderItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;BoardItem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;iconName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;close&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;removeItem&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;i18nStrings&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;dragHandleAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Drag handle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;dragHandleAriaDescription&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Use Space or Enter to activate drag, arrow keys to move, Space or Enter to submit, or Escape to discard.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;resizeHandleAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Resize handle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;resizeHandleAriaDescription&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Use Space or Enter to activate resize, arrow keys to move, Space or Enter to submit, or Escape to discard.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;i18nStrings&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndCommitted&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndDiscarded&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndItemInserted&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndItemReordered&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndItemResized&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndStarted&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementItemRemoved&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;navigationAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;navigationItemAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&gt;&amp;#x3C;/&gt;&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ContentLayout&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;/* eslint-disable @typescript-eslint/no-floating-promises */import {  Board,  BoardItem,  BoardProps,} from &amp;#x22;@cloudscape-design/board-components&amp;#x22;;import {  Button,  Container,  ContentLayout,  Header,  SpaceBetween,  Spinner,} from &amp;#x22;@cloudscape-design/components&amp;#x22;;import {  ShoppingList as _ShoppingList,  usePutShoppingList,  useGetShoppingLists,} from &amp;#x22;myapi-typescript-react-query-hooks&amp;#x22;;import { useEffect, useState } from &amp;#x22;react&amp;#x22;;import { useParams } from &amp;#x22;react-router-dom&amp;#x22;;import CreateItem from &amp;#x22;../../components/CreateItem&amp;#x22;;type ListItem = { name: string };/** * Component to render a singular Shopping List &amp;#x22;/:shoppingListId&amp;#x22; route. */const ShoppingList: React.FC = () =&gt; {  const { shoppingListId } = useParams();  const [visibleModal, setVisibleModal] = useState(false);  const getShoppingLists = useGetShoppingLists({ shoppingListId });  const putShoppingList = usePutShoppingList();  const shoppingList: _ShoppingList | undefined =    getShoppingLists.data?.pages[0].shoppingLists[0]!;  const [shoppingItems, setShoppingItems] =    useState&lt;BoardProps.Item&lt;ListItem&gt;[]&gt;();  useEffect(() =&gt; {    setShoppingItems(      shoppingList?.shoppingItems?.map((i) =&gt; ({        id: i,        definition: { minColumnSpan: 4 },        data: { name: i },      })),    );  }, [shoppingList?.shoppingItems]);  return (    &lt;ContentLayout      header={        &lt;Header          variant=&amp;#x22;awsui-h1-sticky&amp;#x22;          actions={            &lt;SpaceBetween size=&amp;#x22;xs&amp;#x22; direction=&amp;#x22;horizontal&amp;#x22;&gt;              &lt;Button                data-testid=&amp;#x22;header-btn-create&amp;#x22;                variant=&amp;#x22;primary&amp;#x22;                onClick={() =&gt; setVisibleModal(true)}              &gt;                Add Item              &lt;/Button&gt;            &lt;/SpaceBetween&gt;          }        &gt;          Shopping list: {shoppingList?.name}        &lt;/Header&gt;      }    &gt;      &lt;CreateItem        isLoading={false}        title=&amp;#x22;Add Item&amp;#x22;        callback={async (item) =&gt; {          const items = [            ...(shoppingItems || []),            {              id: item,              definition: { minColumnSpan: 4 },              data: { name: item },            },          ];          setShoppingItems(items);          putShoppingList.mutate({            putShoppingListRequestContent: {              name: shoppingList.name,              shoppingListId: shoppingList.shoppingListId,              shoppingItems: items.map((i) =&gt; i.data.name),            },          });        }}        visibleModal={visibleModal}        setVisibleModal={setVisibleModal}      /&gt;      &lt;Container&gt;        {!shoppingList ? (          &lt;Spinner /&gt;        ) : (          &lt;Board&lt;ListItem&gt;            onItemsChange={(event) =&gt; {              const items = event.detail.items as BoardProps.Item&lt;ListItem&gt;[];              setShoppingItems(items);              putShoppingList.mutate({                putShoppingListRequestContent: {                  name: shoppingList.name,                  shoppingListId: shoppingList.shoppingListId,                  shoppingItems: items.map((i) =&gt; i.data.name),                },              });            }}            items={shoppingItems || []}            renderItem={(item, actions) =&gt; (              &lt;BoardItem                header={item.data.name}                settings={                  &lt;Button                    iconName=&amp;#x22;close&amp;#x22;                    variant=&amp;#x22;icon&amp;#x22;                    onClick={actions.removeItem}                  /&gt;                }                i18nStrings={{                  dragHandleAriaLabel: &amp;#x22;Drag handle&amp;#x22;,                  dragHandleAriaDescription:                    &amp;#x22;Use Space or Enter to activate drag, arrow keys to move, Space or Enter to submit, or Escape to discard.&amp;#x22;,                  resizeHandleAriaLabel: &amp;#x22;Resize handle&amp;#x22;,                  resizeHandleAriaDescription:                    &amp;#x22;Use Space or Enter to activate resize, arrow keys to move, Space or Enter to submit, or Escape to discard.&amp;#x22;,                }}              /&gt;            )}            i18nStrings={{              liveAnnouncementDndCommitted: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndDiscarded: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndItemInserted: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndItemReordered: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndItemResized: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndStarted: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementItemRemoved: () =&gt; &amp;#x22;&amp;#x22;,              navigationAriaLabel: &amp;#x22;&amp;#x22;,              navigationItemAriaLabel: () =&gt; &amp;#x22;&amp;#x22;,            }}            empty={&lt;&gt;&lt;/&gt;}          /&gt;        )}      &lt;/Container&gt;    &lt;/ContentLayout&gt;  );};export default ShoppingList;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-22-1&quot; aria-labelledby=&quot;tab-22-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame not-content&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;tsx&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;// routes/$shoppingListId.tsx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/* eslint-disable @typescript-eslint/no-floating-promises */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Board&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;BoardItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;BoardProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@cloudscape-design/board-components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ContentLayout&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Spinner&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@cloudscape-design/components&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;CreateItem&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../components/CreateItem&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;createFileRoute&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@tanstack/react-router&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMyApi&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../hooks/useMyApi&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useInfiniteQuery&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;useMutation&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;@tanstack/react-query&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;_ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;../generated/my-api/types.gen&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;* Component to render a singular Shopping List &quot;/:shoppingListId&quot; route.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9C93AD;--0fs:italic;--1:#6B6579;--1fs:italic&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;React&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;FC&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Route&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useParams&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useMyApi&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useInfiniteQuery&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;infiniteQueryOptions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;getNextPageParam&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;nextToken&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useMutation&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutationOptions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;_ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;getShoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;pages&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.[&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingLists&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.[&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;BoardProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;[]&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;useEffect&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;definition&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;minColumnSpan&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;})),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ContentLayout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;awsui-h1-sticky&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;xs&quot;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;direction&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;horizontal&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data-testid&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;header-btn-create&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;primary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Add Item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;SpaceBetween&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt;Shopping list: &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;CreateItem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Add Item&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;...(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;definition&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;minColumnSpan&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F4935F;--1:#9E3F00&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;my list&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;visibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;setVisibleModal&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Spinner&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Board&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onItemsChange&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;detail&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;BoardProps&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ListItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;[];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;setShoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;putShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;mutate&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingListId&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;shoppingItems&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;renderItem&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;BoardItem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;settings&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;iconName&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;close&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;actions&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;removeItem&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;i18nStrings&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;dragHandleAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Drag handle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;dragHandleAriaDescription&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Use Space or Enter to activate drag, arrow keys to move, Space or Enter to submit, or Escape to discard.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;resizeHandleAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Resize handle&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;resizeHandleAriaDescription&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;Use Space or Enter to activate resize, arrow keys to move, Space or Enter to submit, or Escape to discard.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;i18nStrings&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndCommitted&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndDiscarded&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndItemInserted&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndItemReordered&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndItemResized&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementDndStarted&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;liveAnnouncementItemRemoved&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;navigationAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;navigationItemAriaLabel&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;&gt;&amp;#x3C;/&gt;&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#ED94D0;--1:#8D316B&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#72D6D0;--1:#006161&quot;&gt;ContentLayout&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F05E70;--1:#A1002C&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;Route&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B597FF;--1:#6025AF&quot;&gt;createFileRoute&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#E8BB67;--1:#7B5100&quot;&gt;&apos;/$shoppingListId&apos;&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;)({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#A1CCF6;--1:#1A538B&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#DEDDE6;--1:#2D2D35&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D0DAE6;--1:#2C3947&quot;&gt;ShoppingList&lt;/span&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#AAA9B8;--1:#5A5966&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;// routes/$shoppingListId.tsx/* eslint-disable @typescript-eslint/no-floating-promises */import {  Board,  BoardItem,  BoardProps,} from &amp;#x22;@cloudscape-design/board-components&amp;#x22;;import {  Button,  Container,  ContentLayout,  Header,  SpaceBetween,  Spinner,} from &amp;#x22;@cloudscape-design/components&amp;#x22;;import { useEffect, useState } from &amp;#x22;react&amp;#x22;;import CreateItem from &amp;#x22;../components/CreateItem&amp;#x22;;import { createFileRoute } from &amp;#x22;@tanstack/react-router&amp;#x22;;import { useMyApi } from &amp;#x22;../hooks/useMyApi&amp;#x22;;import { useInfiniteQuery, useMutation } from &amp;#x22;@tanstack/react-query&amp;#x22;;import { ShoppingList as _ShoppingList } from &amp;#x22;../generated/my-api/types.gen&amp;#x22;;type ListItem = { name: string };/** * Component to render a singular Shopping List &amp;#x22;/:shoppingListId&amp;#x22; route. */const ShoppingList: React.FC = () =&gt; {  const { shoppingListId } = Route.useParams();  const [visibleModal, setVisibleModal] = useState(false);  const api = useMyApi();  const getShoppingLists = useInfiniteQuery(    api.getShoppingLists.infiniteQueryOptions(      { shoppingListId },      { getNextPageParam: (p) =&gt; p.nextToken },    ),  );  const putShoppingList = useMutation(api.putShoppingList.mutationOptions());  const shoppingList: _ShoppingList | undefined =    getShoppingLists.data?.pages?.[0]?.shoppingLists?.[0];  const [shoppingItems, setShoppingItems] =    useState&lt;BoardProps.Item&lt;ListItem&gt;[]&gt;();  useEffect(() =&gt; {    setShoppingItems(      shoppingList?.shoppingItems?.map((i) =&gt; ({        id: i,        definition: { minColumnSpan: 4 },        data: { name: i },      })),    );  }, [shoppingList?.shoppingItems]);  return (    &lt;ContentLayout      header={        &lt;Header          variant=&amp;#x22;awsui-h1-sticky&amp;#x22;          actions={            &lt;SpaceBetween size=&amp;#x22;xs&amp;#x22; direction=&amp;#x22;horizontal&amp;#x22;&gt;              &lt;Button                data-testid=&amp;#x22;header-btn-create&amp;#x22;                variant=&amp;#x22;primary&amp;#x22;                onClick={() =&gt; setVisibleModal(true)}              &gt;                Add Item              &lt;/Button&gt;            &lt;/SpaceBetween&gt;          }        &gt;          Shopping list: {shoppingList?.name}        &lt;/Header&gt;      }    &gt;      &lt;CreateItem        isLoading={false}        title=&amp;#x22;Add Item&amp;#x22;        callback={async (item) =&gt; {          const items = [            ...(shoppingItems || []),            {              id: item,              definition: { minColumnSpan: 4 },              data: { name: item },            },          ];          setShoppingItems(items);          putShoppingList.mutate({              name: shoppingList?.name ?? &amp;#x27;my list&amp;#x27;,              shoppingListId: shoppingList?.shoppingListId,              shoppingItems: items.map((i) =&gt; i.data.name),          });        }}        visibleModal={visibleModal}        setVisibleModal={setVisibleModal}      /&gt;      &lt;Container&gt;        {!shoppingList ? (          &lt;Spinner /&gt;        ) : (          &lt;Board&lt;ListItem&gt;            onItemsChange={(event) =&gt; {              const items = event.detail.items as BoardProps.Item&lt;ListItem&gt;[];              setShoppingItems(items);              putShoppingList.mutate({                  name: shoppingList.name,                  shoppingListId: shoppingList.shoppingListId,                  shoppingItems: items.map((i) =&gt; i.data.name),              });            }}            items={shoppingItems || []}            renderItem={(item, actions) =&gt; (              &lt;BoardItem                header={item.data.name}                settings={                  &lt;Button                    iconName=&amp;#x22;close&amp;#x22;                    variant=&amp;#x22;icon&amp;#x22;                    onClick={actions.removeItem}                  /&gt;                }                i18nStrings={{                  dragHandleAriaLabel: &amp;#x22;Drag handle&amp;#x22;,                  dragHandleAriaDescription:                    &amp;#x22;Use Space or Enter to activate drag, arrow keys to move, Space or Enter to submit, or Escape to discard.&amp;#x22;,                  resizeHandleAriaLabel: &amp;#x22;Resize handle&amp;#x22;,                  resizeHandleAriaDescription:                    &amp;#x22;Use Space or Enter to activate resize, arrow keys to move, Space or Enter to submit, or Escape to discard.&amp;#x22;,                }}              /&gt;            )}            i18nStrings={{              liveAnnouncementDndCommitted: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndDiscarded: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndItemInserted: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndItemReordered: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndItemResized: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementDndStarted: () =&gt; &amp;#x22;&amp;#x22;,              liveAnnouncementItemRemoved: () =&gt; &amp;#x22;&amp;#x22;,              navigationAriaLabel: &amp;#x22;&amp;#x22;,              navigationItemAriaLabel: () =&gt; &amp;#x22;&amp;#x22;,            }}            empty={&lt;&gt;&lt;/&gt;}          /&gt;        )}      &lt;/Container&gt;    &lt;/ContentLayout&gt;  );};export const Route = createFileRoute(&amp;#x27;/$shoppingListId&amp;#x27;)({  component: ShoppingList,});&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore class=&quot;astro-mwziz3wm&quot;&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;script type=&quot;module&quot; src=&quot;/codebuild/output/src3386235489/src/actions-runner/_work/nx-plugin-for-aws/nx-plugin-for-aws/node_modules/.pnpm/@astrojs+starlight@0.42.6_@astrojs+markdown-remark@7.3.0_supports-color@7.2.0__astro@7._b3b2c26d7602b780b1d1223415f300ed/node_modules/@astrojs/starlight/dist/user-components/Tabs.astro?astro&amp;#x26;type=script&amp;#x26;index=0&amp;#x26;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/template&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;インフラストラクチャの移行&quot;&gt;インフラストラクチャの移行&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The last project we need to migrate for our shopping list application is the &lt;code dir=&quot;auto&quot;&gt;InfrastructureTsProject&lt;/code&gt;. This is a TypeScript CDK project, for which the Nx Plugin for AWS equivalent is the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/typescript-infrastructure&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#infra&lt;/code&gt; generator&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As well as the Projen projects, PDK also vended CDK constructs which these projects depend on. We will migrate the shopping list application from these CDK constructs too, in favour of the ones generated by the Nx Plugin for AWS.&lt;/p&gt;
&lt;aside aria-label=&quot;Tip&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Tip&lt;/p&gt;&lt;div&gt;&lt;p&gt;A big advantage of the Nx Plugin for AWS over PDK is that the CDK constructs it vends are source code added to your project rather than imported via a third party package. This gives you the control and flexibility to customise them beyond what PDK suppported.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;generate-a-typescript-cdk-infrastructure-project&quot;&gt;Generate a TypeScript CDK Infrastructure Project&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Run the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/typescript-infrastructure&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#infra&lt;/code&gt; generator&lt;/a&gt; to set up your infrastructure project in &lt;code dir=&quot;auto&quot;&gt;packages/infra&lt;/code&gt;:&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;generator&amp;#x22;,&amp;#x22;namespace&amp;#x22;:&amp;#x22;@aws/nx-plugin&amp;#x22;,&amp;#x22;generator&amp;#x22;:&amp;#x22;ts#infra&amp;#x22;,&amp;#x22;positional&amp;#x22;:[],&amp;#x22;noInteractive&amp;#x22;:true,&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;name&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Run this generator&lt;/span&gt;&lt;code&gt;@aws/nx-plugin:ts#infra&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;generator-usage&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-23-0&quot; id=&quot;tab-23-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-23-1&quot; id=&quot;tab-23-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-23-0&quot; aria-labelledby=&quot;tab-23-0&quot; role=&quot;tabpanel&quot;&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-24-0&quot; id=&quot;tab-24-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-24-1&quot; id=&quot;tab-24-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-24-2&quot; id=&quot;tab-24-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-24-3&quot; id=&quot;tab-24-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-24-0&quot; aria-labelledby=&quot;tab-24-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#infra&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-24-1&quot; aria-labelledby=&quot;tab-24-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#infra&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-24-2&quot; aria-labelledby=&quot;tab-24-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#infra&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-24-3&quot; aria-labelledby=&quot;tab-24-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bunx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:ts#infra&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/span&gt; &lt;span&gt;--no-interactive&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-23-1&quot; aria-labelledby=&quot;tab-23-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;ol role=&quot;list&quot;&gt;&lt;li&gt;Install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console&quot;&gt;Nx Console VSCode Plugin&lt;/a&gt; if you haven&apos;t already&lt;/li&gt;&lt;li&gt;Open the Nx Console in VSCode&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate (UI)&lt;/code&gt; in the &quot;Common Nx Commands&quot; section&lt;/li&gt;&lt;li&gt;Search for &lt;code&gt;@aws/nx-plugin - ts#infra&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Fill in the required parameters&lt;ul data-command-card-values=&quot;&quot;&gt;&lt;li&gt;&lt;b&gt;name:&lt;/b&gt; infra&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-the-cdk-infrastructure&quot;&gt;Migrate the CDK Infrastructure&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The PDK shopping list application instantiated the following constructs within the CDK application stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;DatabaseConstruct&lt;/code&gt; for the DynamoDB table storing shopping lists&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;UserIdentity&lt;/code&gt; for Cognito resources, imported directly from PDK&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;MyApi&lt;/code&gt; for deploying the Smithy API, which used the generated TypeScript CDK construct with type-safe integrations, depending on PDK’s &lt;code dir=&quot;auto&quot;&gt;TypeSafeRestApi&lt;/code&gt; CDK construct under the hood.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Website&lt;/code&gt; for deploying the Website, wrapping PDK’s &lt;code dir=&quot;auto&quot;&gt;StaticWebsite&lt;/code&gt; CDK construct.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, we will migrate each of these to the new project.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;copy-the-application-stack&quot;&gt;Copy the Application Stack&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;Copy &lt;code dir=&quot;auto&quot;&gt;packages/infra/src/stacks/application-stack.ts&lt;/code&gt; from the PDK shopping list application to the exact same location in your new project. You’ll see some TypeScript errors which we’ll address below.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;copy-the-database-construct&quot;&gt;Copy the Database Construct&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;The PDK shopping list application had a &lt;code dir=&quot;auto&quot;&gt;Database&lt;/code&gt; construct in &lt;code dir=&quot;auto&quot;&gt;packages/src/constructs/database.ts&lt;/code&gt;. Copy this to the exact same location in your new project.&lt;/p&gt;
&lt;p&gt;Since the Nx Plugin for AWS uses &lt;a href=&quot;https://www.checkov.io/&quot;&gt;Checkov&lt;/a&gt; for security tests which is a little stricter than PDK Nag, we also need to add some suppressions:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;constructs/database.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suppressRules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;@shopping-list/common-constructs&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;suppressRules&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;CKV_AWS_28&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;CKV_AWS_119&apos;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;Backup and KMS key not required for this project&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In &lt;code dir=&quot;auto&quot;&gt;application-stack.ts&lt;/code&gt;, update the import for the &lt;code dir=&quot;auto&quot;&gt;DatabaseConstruct&lt;/code&gt; to use ESM syntax:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;stacks/application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DatabaseConstruct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;../constructs/database&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DatabaseConstruct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;../constructs/database.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h5 id=&quot;migrate-the-useridentity-construct&quot;&gt;Migrate the UserIdentity Construct&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;UserIdentity&lt;/code&gt; construct can generally be swapped out without changes by adjusting the imports.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserIdentity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@aws/pdk/identity&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserIdentity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;@shopping-list/common-constructs&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserIdentity&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;UserIdentity`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Note that the underlying constructs used by the new &lt;code dir=&quot;auto&quot;&gt;UserIdentity&lt;/code&gt; construct are vended directly from &lt;code dir=&quot;auto&quot;&gt;aws-cdk-lib&lt;/code&gt;, where PDK used &lt;code dir=&quot;auto&quot;&gt;@aws-cdk/aws-cognito-identitypool-alpha&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;migrate-the-api-construct&quot;&gt;Migrate the API Construct&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;The PDK shopping list application had a construct in &lt;code dir=&quot;auto&quot;&gt;constructs/apis/myapi.ts&lt;/code&gt; which instantiated a CDK construct which Type Safe API generated from your Smithy model.&lt;/p&gt;
&lt;p&gt;As well as this construct, since the PDK project used the &lt;code dir=&quot;auto&quot;&gt;@handler&lt;/code&gt; trait, generated lambda function CDK constructs were also generated.&lt;/p&gt;
&lt;p&gt;Like Type Safe API, the Nx Plugin for AWS provides type-safety for integrations based on your Smithy model, however it’s achieved in a much simpler and more flexible way. Instead of generating an entire CDK construct at build time, only minimal “metadata” is generated, which the &lt;code dir=&quot;auto&quot;&gt;packages/common/constructs/src/app/apis/api.ts&lt;/code&gt; uses in a generic fashion. You can learn more about how to use the construct in the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the below steps:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Instantiate the &lt;code dir=&quot;auto&quot;&gt;Api&lt;/code&gt; construct in &lt;code dir=&quot;auto&quot;&gt;application-stack.ts&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;stacks/application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../constructs/apis/myapi&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Api&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;@shopping-list/common-constructs&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myapi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApi&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyApi&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;databaseConstruct&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Api&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;MyApi&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;integrations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;defaultIntegrations&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Notice here we use &lt;code dir=&quot;auto&quot;&gt;Api.defaultIntegrations(this).build()&lt;/code&gt; - the default behaviour is to create a lambda function for each operation in our API, which is the same behaviour we had in &lt;code dir=&quot;auto&quot;&gt;myapi.ts&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grant permissions for the lambda functions to access the DynamoDB table.&lt;/p&gt;
&lt;p&gt;In the PDK shopping list application, the &lt;code dir=&quot;auto&quot;&gt;DatabaseConsruct&lt;/code&gt; was passed into &lt;code dir=&quot;auto&quot;&gt;MyApi&lt;/code&gt;, and it managed adding the relevant permissions to each generated function construct. We’ll do this directly in the &lt;code dir=&quot;auto&quot;&gt;application-stack.ts&lt;/code&gt; file by accessing the &lt;code dir=&quot;auto&quot;&gt;Api&lt;/code&gt; construct’s type-safe &lt;code dir=&quot;auto&quot;&gt;integrations&lt;/code&gt; property:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;stacks/application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Grant our lambda functions scoped access to call Dynamo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;databaseConstruct&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;grantReadData&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;integrations&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getShoppingLists&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;integrations&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;putShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;integrations&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteShoppingList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseConstruct&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;grantWriteData&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grant permissions for authenticated users to invoke the API.&lt;/p&gt;
&lt;p&gt;Within the PDK application’s &lt;code dir=&quot;auto&quot;&gt;myapi.ts&lt;/code&gt;, authenticated users were also granted IAM permissions to invoke the API. We will do the equivalent in &lt;code dir=&quot;auto&quot;&gt;application-stack.ts&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;stacks/application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;grantInvokeAccess&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;identityPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authenticatedRole&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h5 id=&quot;migrate-the-website-construct&quot;&gt;Migrate the Website Construct&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;Finally, we add the &lt;code dir=&quot;auto&quot;&gt;Website&lt;/code&gt; construct from &lt;code dir=&quot;auto&quot;&gt;packages/common/constructs/src/app/static-websites/website.ts&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;application-stack.ts&lt;/code&gt;, since this is the equivalent of the PDK shopping list application’s &lt;code dir=&quot;auto&quot;&gt;packages/infra/src/constructs/websites/website.ts&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Website&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;../constructs/websites/website&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Website&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;@shopping-list/common-constructs&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Website&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Website&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myapi&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Website&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Website&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Notice that we don’t pass the identity or API to the website - runtime config is managed within each construct vended by the Nx Plugin for AWS, where &lt;code dir=&quot;auto&quot;&gt;UserIdentity&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;Api&lt;/code&gt; register the necessary values, and &lt;code dir=&quot;auto&quot;&gt;Website&lt;/code&gt; manages deploying it to &lt;code dir=&quot;auto&quot;&gt;/runtime-config.json&lt;/code&gt; on your static website.&lt;/p&gt;
&lt;p&gt;Let’s build the project now that we’ve migrated all the relevant parts of the codebase to our new project.&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-25-0&quot; id=&quot;tab-25-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-25-1&quot; id=&quot;tab-25-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-25-2&quot; id=&quot;tab-25-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-25-3&quot; id=&quot;tab-25-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-25-0&quot; aria-labelledby=&quot;tab-25-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-25-1&quot; aria-labelledby=&quot;tab-25-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-25-2&quot; aria-labelledby=&quot;tab-25-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-25-3&quot; aria-labelledby=&quot;tab-25-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;aside aria-label=&quot;Caution&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Caution&lt;/p&gt;&lt;div&gt;&lt;p&gt;You may see a build failure due to lint issues. These can usually be automatically fixed:&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-26-0&quot; id=&quot;tab-26-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-26-1&quot; id=&quot;tab-26-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-26-2&quot; id=&quot;tab-26-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-26-3&quot; id=&quot;tab-26-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-26-0&quot; aria-labelledby=&quot;tab-26-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-26-1&quot; aria-labelledby=&quot;tab-26-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-26-2&quot; aria-labelledby=&quot;tab-26-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-26-3&quot; aria-labelledby=&quot;tab-26-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;デプロイ&quot;&gt;デプロイ&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Now we’ve got our fully migrated codebase, we can look at deploying it. There are two paths we can take at this point.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;all-new-resources-simple&quot;&gt;All-New Resources (Simple)&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The simplest approach is to treat this as a completely new application, meaning we’ll “start again” with a fresh DynamoDB table and Cognito User Pool - losing all users and their shopping lists. For this approach, simply:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Delete the DynamoDB table named &lt;code dir=&quot;auto&quot;&gt;shopping_list&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the new application:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-27-0&quot; id=&quot;tab-27-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-27-1&quot; id=&quot;tab-27-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-27-2&quot; id=&quot;tab-27-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-27-3&quot; id=&quot;tab-27-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-27-0&quot; aria-labelledby=&quot;tab-27-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-27-1&quot; aria-labelledby=&quot;tab-27-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-27-2&quot; aria-labelledby=&quot;tab-27-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-27-3&quot; aria-labelledby=&quot;tab-27-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bunx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;🎉 And we’re done! 🎉&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;migrate-existing-stateful-resources-with-no-outage-more-complex&quot;&gt;Migrate Existing Stateful Resources with no Outage (More Complex)&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;In reality, it’s more likely that you will want to migrate existing AWS resources so that they are managed by the new codebase, while avoiding any downtime for your customers.&lt;/p&gt;
&lt;aside aria-label=&quot;Danger&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Danger&lt;/p&gt;&lt;div&gt;&lt;p&gt;This approach is a bit more nuanced and complex, and this is just an example, so it’s STRONGLY recommended to practice in a non-production environment (ideally create a new sandbox stack) and document the exact steps for your application. It is also recommended to write up contingency/rollback plans in case of steps failing or producing unexpected results.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Our PDK shopping list application didn’t define any custom domains or DNS. In practice you’d most likely have domains configured for your website and API. For the purpose of this section of the guide, we’ll assume that we’ve set up Route53 with custom DNS names for the website and API.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For our shopping list application, the stateful resources we care about are the DynamoDB table which contains our users’ shopping lists, and the User Pool which contains the details of all of our registered users. Our high level plan will be to retain these two key resources and move them such that they’re managed by our new stack, then to update DNS to point to our new website (and API if exposed to customers).&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Update your new application to reference the existing resources you wish to retain.&lt;/p&gt;
&lt;p&gt;For the shopping list application, we do this for the DynamoDB table&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;constructs/database.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Table&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ShoppingList&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Table&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromTableName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;ShoppingList&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And for the Cognito User Pool&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;packages/common/constructs/src/core/user-identity.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createUserPool&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mfa&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mfaSecondFactor&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromUserPoolId&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;UserPool&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;&amp;#x3C;your-user-pool-id&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build and deploy the new application:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-28-0&quot; id=&quot;tab-28-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-28-1&quot; id=&quot;tab-28-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-28-2&quot; id=&quot;tab-28-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-28-3&quot; id=&quot;tab-28-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-28-0&quot; aria-labelledby=&quot;tab-28-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-28-1&quot; aria-labelledby=&quot;tab-28-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-28-2&quot; aria-labelledby=&quot;tab-28-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-28-3&quot; aria-labelledby=&quot;tab-28-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-29-0&quot; id=&quot;tab-29-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-29-1&quot; id=&quot;tab-29-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-29-2&quot; id=&quot;tab-29-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-29-3&quot; id=&quot;tab-29-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-29-0&quot; aria-labelledby=&quot;tab-29-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-29-1&quot; aria-labelledby=&quot;tab-29-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-29-2&quot; aria-labelledby=&quot;tab-29-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-29-3&quot; aria-labelledby=&quot;tab-29-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bunx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;p&gt;Now we have our new application stood up referencing the existing resources, not yet taking any traffic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perform full integration testing to ensure the new application works as expected. For the shopping list application, load the website and check you can sign in and create, view, edit and delete shopping lists.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Revert the changes which reference the existing resources in your new application, but do not deploy them yet.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;constructs/database.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Table&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ShoppingList&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Table&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromTableName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;ShoppingList&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And for the Cognito User Pool&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;packages/common/constructs/src/core/user-identity.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createUserPool&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mfa&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mfaSecondFactor&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromUserPoolId&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;UserPool&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;&amp;#x3C;your-user-pool-id&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And then run a build&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-30-0&quot; id=&quot;tab-30-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-30-1&quot; id=&quot;tab-30-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-30-2&quot; id=&quot;tab-30-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-30-3&quot; id=&quot;tab-30-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-30-0&quot; aria-labelledby=&quot;tab-30-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-30-1&quot; aria-labelledby=&quot;tab-30-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-30-2&quot; aria-labelledby=&quot;tab-30-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-30-3&quot; aria-labelledby=&quot;tab-30-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code dir=&quot;auto&quot;&gt;cdk import&lt;/code&gt; in your new application’s &lt;code dir=&quot;auto&quot;&gt;packages/infra&lt;/code&gt; folder to see which resources we’ll be prompted to import.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;New Application&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cdk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shopping-list-infra-sandbox/Application&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--force&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Step through the prompts by hitting enter. The import will fail because the resources are managed by another stack - this is expected, we just did this step to confirm which resources we’ll need to retain. You’ll see output like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;shopping-list-infra-sandbox/Application/ApplicationUserIdentity/UserPool/smsRole/Resource&lt;/span&gt;&lt;span&gt; (AWS::IAM::Role): enter RoleName (&lt;/span&gt;&lt;span&gt;empty&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;skip&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;shopping-list-infra-sandbox/Application/ApplicationUserIdentity/UserPool/Resource&lt;/span&gt;&lt;span&gt; (AWS::Cognito::UserPool): enter UserPoolId (&lt;/span&gt;&lt;span&gt;empty&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;skip&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;shopping-list-infra-sandbox/Application/Database/ShoppingList/Resource&lt;/span&gt;&lt;span&gt; (AWS::DynamoDB::Table): import with &lt;/span&gt;&lt;span&gt;TableName&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;shopping_list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(y/n&lt;/span&gt;&lt;span&gt;) y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This tells us that there are actually 3 resources we’ll need to import into our new stack.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your old PDK project to set &lt;code dir=&quot;auto&quot;&gt;RemovalPolicy&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;RETAIN&lt;/code&gt; for the resources discovered from the previous step. At the time of writing this is the default for both the User Pool and the DynamoDB table, but we need to update it for the SMS Role we discovered above:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserIdentity&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;UserIdentity`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;smsRole&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;findAll&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CfnResource&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;isCfnResource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/smsRole/&apos;&lt;/span&gt;&lt;span&gt;))[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CfnResource&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;smsRole&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;applyRemovalPolicy&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;RemovalPolicy&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;RETAIN&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy your PDK project so that the removal policies are applied&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;PDK Application&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projen&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Take a look at the CloudFormation console and record the values you were prompted for in the above &lt;code dir=&quot;auto&quot;&gt;cdk import&lt;/code&gt; step&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The User Pool ID, eg &lt;code dir=&quot;auto&quot;&gt;us-west-2_XXXXX&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The SMS Role Name, eg &lt;code dir=&quot;auto&quot;&gt;infra-sandbox-UserIdentityUserPoolsmsRoleXXXXXX&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your PDK project to reference the existing resources instead of creating them&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;constructs/database.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Table&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ShoppingList&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;shoppingListTable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Table&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromTableName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;ShoppingList&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;shopping_list&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And for the Cognito User Pool&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserPool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fromUserPoolId&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;UserPool&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;&amp;#x3C;your-user-pool-id&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userIdentity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserIdentity&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;UserIdentity`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// PDK construct accepts UserPool not IUserPool, but this still works!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userPool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;any&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy your PDK project again, this will mean the resources are no longer managed by our PDK project’s CloudFormation stack.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;PDK Application&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projen&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now that the resources are unmanaged, we can run &lt;code dir=&quot;auto&quot;&gt;cdk import&lt;/code&gt; in our new application to actually perform the import:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;New Application&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cdk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shopping-list-infra-sandbox/Application&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--force&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Enter the values when prompted, the import should complete successfully.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the new application again to make sure that any changes to these existing resources (now managed by your new stack) are made:&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-31-0&quot; id=&quot;tab-31-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-31-1&quot; id=&quot;tab-31-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-31-2&quot; id=&quot;tab-31-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-31-3&quot; id=&quot;tab-31-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-31-0&quot; aria-labelledby=&quot;tab-31-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-31-1&quot; aria-labelledby=&quot;tab-31-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-31-2&quot; aria-labelledby=&quot;tab-31-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-31-3&quot; aria-labelledby=&quot;tab-31-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bunx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy-sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perform a full test of your new application again&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update DNS records to point to your new Website (and API if required).&lt;/p&gt;
&lt;p&gt;We recommend a gradual approach using Route53 &lt;a href=&quot;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-weighted.html&quot;&gt;Weighted Routing&lt;/a&gt;, whereby a fraction of requests are directed to the new application to begin with. As you monitor your metrics you can increase the weight for the new application until no traffic is sent to your old PDK application.&lt;/p&gt;
&lt;p&gt;If you don’t have any DNS and used the auto-generated domains for the website and API, you can always look at proxying requests (eg via a &lt;a href=&quot;https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudfront_origins-readme.html#from-an-http-endpoint&quot;&gt;CloudFront HTTP origin&lt;/a&gt; or &lt;a href=&quot;https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.HttpIntegration.html&quot;&gt;API Gateway HTTP integration(s)&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Monitor PDK application metrics to ensure there is no traffic, and finally destroy the old CloudFormation stack:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages/infra&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projen&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;destroy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That was quite a bit more involved, but we successfully migrated our users seamlessly to the new application! 🎉🎉🎉&lt;/p&gt;
&lt;p&gt;We now have the new benefits of the Nx Plugin for AWS over PDK:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster builds&lt;/li&gt;
&lt;li&gt;Local API development support&lt;/li&gt;
&lt;li&gt;A vibe-coding friendly codebase (&lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/building-with-ai&quot;&gt;try our MCP server!&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;More intuitive type-safe client/server code&lt;/li&gt;
&lt;li&gt;And more!&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;よくある質問&quot;&gt;よくある質問&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;このセクションでは、上記の移行例でカバーされていないPDKの機能に関するガイダンスを提供します。&lt;/p&gt;
&lt;p&gt;PDKから移行する際の一般的なルールとして、PDK Monorepoとの類似性を考慮して、Nx Workspaceでプロジェクトを開始することをお勧めします。また、新しいタイプを構築する際の基本要素として、当社のジェネレーターを使用することをお勧めします。&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;workspace&amp;#x22;,&amp;#x22;positional&amp;#x22;:[&amp;#x22;workspace&amp;#x22;],&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;workspace&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Create your workspace&lt;/span&gt;&lt;code&gt;@aws/nx-workspace&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-1-0&quot; id=&quot;tab-1-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-1-1&quot; id=&quot;tab-1-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-1-2&quot; id=&quot;tab-1-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-1-3&quot; id=&quot;tab-1-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-1-0&quot; aria-labelledby=&quot;tab-1-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;my-project&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-1-1&quot; aria-labelledby=&quot;tab-1-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;my-project&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-1-2&quot; aria-labelledby=&quot;tab-1-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npm create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace&lt;/span&gt; &lt;span&gt;--&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;my-project&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-1-3&quot; aria-labelledby=&quot;tab-1-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bun create&lt;/span&gt; &lt;span&gt;@aws/nx-workspace&lt;/span&gt; &lt;span data-token-key=&quot;workspace&quot;&gt;my-project&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;cdk-graph&quot;&gt;CDK Graph&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.github.io/aws-pdk/developer_guides/cdk-graph/index.html&quot;&gt;CDK Graph&lt;/a&gt; builds graphs of your connected CDK resources, and provided two plugins:&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;diagram-plugin&quot;&gt;Diagram Plugin&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://aws.github.io/aws-pdk/developer_guides/cdk-graph-plugin-diagram/index.html&quot;&gt;CDK Graph Diagram Plugin&lt;/a&gt; generates AWS architecture diagrams from your CDK infrastructure.&lt;/p&gt;
&lt;p&gt;For a similar deterministic approach a viable alternative is &lt;a href=&quot;https://github.com/pistazie/cdk-dia&quot;&gt;CDK-Dia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With the advancements in Generative AI, many foundation models are capabile of creating high-quality diagrams from your CDK infrastructure. We recommend trying out the &lt;a href=&quot;https://github.com/awslabs/mcp/tree/main/src/aws-diagram-mcp-server&quot;&gt;AWS Diagram MCP Server&lt;/a&gt;. Check out &lt;a href=&quot;https://aws.amazon.com/blogs/machine-learning/build-aws-architecture-diagrams-using-amazon-q-cli-and-mcp/&quot;&gt;this blog post&lt;/a&gt; for a walkthrough.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;threat-composer-plugin&quot;&gt;Threat Composer Plugin&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://aws.github.io/aws-pdk/developer_guides/cdk-graph-plugin-threat-composer/index.html&quot;&gt;CDK Graph Threat Composer Plugin&lt;/a&gt; generates a starter &lt;a href=&quot;https://github.com/awslabs/threat-composer/&quot;&gt;Threat Composer&lt;/a&gt; threat model from your CDK code.&lt;/p&gt;
&lt;p&gt;This plugin worked by simply filtering a &lt;a href=&quot;https://github.com/aws/aws-pdk/tree/mainline/packages/cdk-graph-plugin-threat-composer/src/model-generator/base-model&quot;&gt;base threat model&lt;/a&gt; containing example threats, and filtering them based on the resources your stack made use of.&lt;/p&gt;
&lt;p&gt;If you’re interested in these specific example threats you can copy and filter the base threat model, or use it as context to help a foundation model generate a similar one.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;aws-arch&quot;&gt;AWS Arch&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.github.io/aws-pdk/developer_guides/aws-arch/index.html&quot;&gt;AWS Arch&lt;/a&gt; provided mappings between CloudFormation resources and their associated architecture icons for CDK Graph above.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://aws.amazon.com/architecture/icons/&quot;&gt;AWS Architecture Icons page&lt;/a&gt; for icon related resources. &lt;a href=&quot;https://diagrams.mingrammer.com/&quot;&gt;Diagrams&lt;/a&gt; also provides a way to build diagrams as code.&lt;/p&gt;
&lt;p&gt;If you were using this directly, consider forking the project and taking ownership!&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;pipeline&quot;&gt;Pipeline&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;PDK provided a &lt;a href=&quot;https://aws.github.io/aws-pdk/developer_guides/pipeline/index.html&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;PDKPipelineProject&lt;/code&gt;&lt;/a&gt; which set up a CDK infrastructure project and made use of a CDK construct which wrapped some &lt;a href=&quot;https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.pipelines-readme.html&quot;&gt;CDK Pipelines&lt;/a&gt; resources.&lt;/p&gt;
&lt;p&gt;To migrate from this, you can use the CDK Pipelines constructs directly. In practice however it is likely more straightforward to use something like GitHub actions or GitLab CI/CD, where you define &lt;a href=&quot;https://docs.aws.amazon.com/cdk/v2/guide/stages.html&quot;&gt;CDK Stages&lt;/a&gt; and run the deploy command for the appropiate stage directly.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;pdk-nag&quot;&gt;PDK Nag&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.github.io/aws-pdk/developer_guides/pdk-nag/index.html&quot;&gt;PDK Nag&lt;/a&gt; wraps &lt;a href=&quot;https://github.com/cdklabs/cdk-nag&quot;&gt;CDK Nag&lt;/a&gt;, and provides a set of &lt;a href=&quot;https://github.com/aws/aws-pdk/blob/mainline/packages/pdk-nag/src/packs/aws-prototyping-rules.ts&quot;&gt;rules specific to building prototypes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To migrate from PDK Nag, use CDK Nag directly. If you need the same set of rules you can create a “pack” of your own by following the &lt;a href=&quot;https://github.com/cdklabs/cdk-nag/blob/main/docs/NagPack.md&quot;&gt;documentation here&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;type-safe-api&quot;&gt;Type Safe API&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The most commonly used components from Type Safe API are covered in the example migration above, however there are other features, for which migration details are below.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;apis-modelled-with-openapi&quot;&gt;APIs Modelled with OpenAPI&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The Nx Plugin for AWS supports APIs modelled in Smithy, but not those modelled directly OpenAPI. The &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator&lt;/a&gt; is a good starting point which you can then modify. You can define your OpenAPI specification in the &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt; project’s &lt;code dir=&quot;auto&quot;&gt;src&lt;/code&gt; folder instead of Smithy, and update the &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt; project’s &lt;code dir=&quot;auto&quot;&gt;compile&lt;/code&gt; target to run your desired code generation tool for clients/servers. If your desired tools are on NPM, you can install them as dev dependencies to your Nx workspace and call them directly as Nx build targets.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;backend&quot;&gt;Backend&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;For type-safe backends modelled in OpenAPI, you can consider using one of the &lt;a href=&quot;https://openapi-generator.tech/docs/generators#server-generators&quot;&gt;OpenAPI Generator Server Generators&lt;/a&gt;. These won’t generate directly for AWS Lambda, but you can use the &lt;a href=&quot;https://github.com/awslabs/aws-lambda-web-adapter&quot;&gt;AWS Lambda Web Adapter&lt;/a&gt; to bridge the gap for a lot of them.&lt;/p&gt;
&lt;aside aria-label=&quot;Tip&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Tip&lt;/p&gt;&lt;div&gt;&lt;p&gt;For Python, the &lt;a href=&quot;https://openapi-generator.tech/docs/generators/python-fastapi&quot;&gt;python-fastapi&lt;/a&gt; generator could be used as a as a once-off tool to help migrate from Type Safe API to our &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/fastapi&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;py#fast-api&lt;/code&gt; generator&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h5 id=&quot;client&quot;&gt;Client&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;For TypeScript clients, you can use the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/react-website&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#website&lt;/code&gt; generator&lt;/a&gt; and &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/connection&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;connection&lt;/code&gt; generator&lt;/a&gt; with an example &lt;code dir=&quot;auto&quot;&gt;ts#api&lt;/code&gt; (with &lt;code dir=&quot;auto&quot;&gt;framework&lt;/code&gt; set to &lt;code dir=&quot;auto&quot;&gt;smithy&lt;/code&gt;) to see how clients are generated and integrated with a website. This configures build targets which generate clients by invoking our &lt;code dir=&quot;auto&quot;&gt;open-api#ts-client&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;open-api#ts-hooks&lt;/code&gt; generators. You can use these generators yourself by pointing them at your OpenAPI Specification.&lt;/p&gt;
&lt;p&gt;For other languages, you can also see if any of the generators from &lt;a href=&quot;https://openapi-generator.tech/docs/generators#client-generators&quot;&gt;OpenAPI Generator&lt;/a&gt; fit your needs.&lt;/p&gt;
&lt;p&gt;You can also build a bespoke generator by using the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/nx-generator&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#nx-generator&lt;/code&gt; generator&lt;/a&gt;. Refer that generator’s documentation for details about how to generate code from OpenAPI. You can use the &lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/tree/main/packages/nx-plugin/src/open-api/ts-client/files&quot;&gt;templates from the Nx Plugin for AWS&lt;/a&gt; as a starting point. You can also even refer to the &lt;a href=&quot;https://github.com/aws/aws-pdk/tree/mainline/packages/type-safe-api/scripts/type-safe-api/generators&quot;&gt;templates from the PDK codebase&lt;/a&gt; for more inspiration, noting that the data structure the templates operate on is a little different to the Nx Plugin for AWS.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;apis-modelled-with-typespec&quot;&gt;APIs Modelled with TypeSpec&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;For &lt;a href=&quot;https://typespec.io/&quot;&gt;TypeSpec&lt;/a&gt;, the above section for OpenAPI applies too. You can start by generating a &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt;&lt;/a&gt;, install the TypeSpec compiler and OpenAPI packages to your Nx workspace, and update the model project’s &lt;code dir=&quot;auto&quot;&gt;compile&lt;/code&gt; target to run &lt;code dir=&quot;auto&quot;&gt;tsp compile&lt;/code&gt; instead, ensuring it outputs an OpenAPI specification to the &lt;code dir=&quot;auto&quot;&gt;dist&lt;/code&gt; directory.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;backend-1&quot;&gt;Backend&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;The recommended approach would be to use the &lt;a href=&quot;https://typespec.io/docs/emitters/servers/http-server-js/reference/&quot;&gt;TypeSpec HTTP Server generator for JavaScript&lt;/a&gt; to generate your server code, since this works directly on your TypeSpec model.&lt;/p&gt;
&lt;p&gt;You can use the &lt;a href=&quot;https://github.com/awslabs/aws-lambda-web-adapter&quot;&gt;AWS Lambda Web Adapter&lt;/a&gt; for running the generated server on AWS Lambda.&lt;/p&gt;
&lt;p&gt;You can also use any of the above OpenAPI options.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;client-1&quot;&gt;Client&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;TypeSpec has its own code generators for clients in all three of Type Safe API’s supported languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://typespec.io/docs/emitters/clients/http-client-js/reference/&quot;&gt;TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typespec.io/docs/emitters/clients/http-client-python/reference/&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typespec.io/docs/emitters/clients/http-client-java/reference/&quot;&gt;Java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The above OpenAPI section also applies since TypeSpec can compile to OpenAPI.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;apis-modelled-with-smithy&quot;&gt;APIs Modelled with Smithy&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The above example migration outlines migrating to use the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator&lt;/a&gt;. This section covers the options for Python and Java backends and clients.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;backend-2&quot;&gt;Backend&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/smithy-lang/smithy-java&quot;&gt;Smithy code generator for Java&lt;/a&gt;. This has a Java server generator as well as &lt;a href=&quot;https://github.com/smithy-lang/smithy-java/tree/main/aws/integrations&quot;&gt;an adapter&lt;/a&gt; to run the generated Java server on AWS Lambda.&lt;/p&gt;
&lt;p&gt;Smithy doesn’t have a server generator for Python, so you will need to go via OpenAPI. Refer to the above section regarding &lt;a href=&quot;#apis-modelled-with-openapi&quot;&gt;APIs Modelled with OpenAPI&lt;/a&gt; for potential options.&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;client-2&quot;&gt;Client&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/smithy-lang/smithy-java&quot;&gt;Smithy code generator for Java&lt;/a&gt;. This has a Java client generator.&lt;/p&gt;
&lt;p&gt;For Python clients, you can check out &lt;a href=&quot;https://github.com/smithy-lang/smithy-python&quot;&gt;Smithy Python&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For TypeScript, check out &lt;a href=&quot;https://github.com/smithy-lang/smithy-typescript&quot;&gt;Smithy TypeScript&lt;/a&gt;, or use the same approach we’ve taken in &lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; by going via OpenAPI (we opted for this as it gives us consistency between tRPC, FastAPI and Smithy APIs via TanStack Query hooks).&lt;/p&gt;
&lt;div&gt;&lt;h5 id=&quot;smithy-shape-library&quot;&gt;Smithy Shape Library&lt;/h5&gt;&lt;/div&gt;
&lt;p&gt;Type Safe API provided a Projen project type named &lt;code dir=&quot;auto&quot;&gt;SmithyShapeLibraryProject&lt;/code&gt; which configured a project which contained Smithy models which could be reused by multiple Smithy-based APIs.&lt;/p&gt;
&lt;p&gt;The equivalent is the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/smithy-project&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;smithy#project&lt;/code&gt; generator&lt;/a&gt; with &lt;code dir=&quot;auto&quot;&gt;type&lt;/code&gt; set to &lt;code dir=&quot;auto&quot;&gt;shapes&lt;/code&gt;:&lt;/p&gt;
&lt;div data-command-card=&quot;&quot; data-config=&quot;{&amp;#x22;kind&amp;#x22;:&amp;#x22;generator&amp;#x22;,&amp;#x22;namespace&amp;#x22;:&amp;#x22;@aws/nx-plugin&amp;#x22;,&amp;#x22;generator&amp;#x22;:&amp;#x22;smithy#project&amp;#x22;,&amp;#x22;positional&amp;#x22;:[],&amp;#x22;noInteractive&amp;#x22;:false,&amp;#x22;order&amp;#x22;:[],&amp;#x22;prescribed&amp;#x22;:[&amp;#x22;name&amp;#x22;,&amp;#x22;type&amp;#x22;],&amp;#x22;options&amp;#x22;:[]}&quot;&gt;&lt;p&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.7&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M4 5.5h16a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 10.2 9.4 12.5 7 14.8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M12.4 15h4.2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Run this generator&lt;/span&gt;&lt;code&gt;@aws/nx-plugin:smithy#project&lt;/code&gt;&lt;/p&gt;&lt;starlight-tabs data-sync-key=&quot;generator-usage&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-32-0&quot; id=&quot;tab-32-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-32-1&quot; id=&quot;tab-32-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;VSCode&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-32-0&quot; aria-labelledby=&quot;tab-32-0&quot; role=&quot;tabpanel&quot;&gt;&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-33-0&quot; id=&quot;tab-33-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-33-1&quot; id=&quot;tab-33-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-33-2&quot; id=&quot;tab-33-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-33-3&quot; id=&quot;tab-33-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-33-0&quot; aria-labelledby=&quot;tab-33-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;pnpm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;pnpm nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:smithy#project&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;my-shapes&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;type&quot;&gt;&lt;span&gt;--type=&lt;/span&gt;&lt;span&gt;shapes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-33-1&quot; aria-labelledby=&quot;tab-33-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;yarn&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;yarn nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:smithy#project&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;my-shapes&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;type&quot;&gt;&lt;span&gt;--type=&lt;/span&gt;&lt;span&gt;shapes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-33-2&quot; aria-labelledby=&quot;tab-33-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;npm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;npx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:smithy#project&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;my-shapes&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;type&quot;&gt;&lt;span&gt;--type=&lt;/span&gt;&lt;span&gt;shapes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-33-3&quot; aria-labelledby=&quot;tab-33-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;code data-command-card-command=&quot;bun&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;$&lt;/span&gt; &lt;span&gt;bunx nx&lt;/span&gt; &lt;span&gt;g&lt;/span&gt; &lt;span&gt;@aws/nx-plugin:smithy#project&lt;/span&gt; &lt;span data-token-key=&quot;name&quot;&gt;&lt;span&gt;--name=&lt;/span&gt;&lt;span&gt;my-shapes&lt;/span&gt;&lt;/span&gt; &lt;span data-token-key=&quot;type&quot;&gt;&lt;span&gt;--type=&lt;/span&gt;&lt;span&gt;shapes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;button type=&quot;button&quot; data-command-card-copy=&quot;&quot; aria-label=&quot;Copy the command&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;polyline points=&quot;20 6 9 17 4 12&quot;&gt;&lt;/polyline&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-32-1&quot; aria-labelledby=&quot;tab-32-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;ol role=&quot;list&quot;&gt;&lt;li&gt;Install the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console&quot;&gt;Nx Console VSCode Plugin&lt;/a&gt; if you haven&apos;t already&lt;/li&gt;&lt;li&gt;Open the Nx Console in VSCode&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate (UI)&lt;/code&gt; in the &quot;Common Nx Commands&quot; section&lt;/li&gt;&lt;li&gt;Search for &lt;code&gt;@aws/nx-plugin - smithy#project&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Fill in the required parameters&lt;ul data-command-card-values=&quot;&quot;&gt;&lt;li&gt;&lt;b&gt;name:&lt;/b&gt; my-shapes&lt;/li&gt;&lt;li&gt;&lt;b&gt;type:&lt;/b&gt; shapes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click &lt;code&gt;Generate&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;&lt;/div&gt;
&lt;p&gt;Move the shapes from your &lt;code dir=&quot;auto&quot;&gt;SmithyShapeLibraryProject&lt;/code&gt; into the generated project’s &lt;code dir=&quot;auto&quot;&gt;src&lt;/code&gt; folder, then refer to the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/smithy-project#depending-on-a-shape-library&quot;&gt;Smithy project guide&lt;/a&gt; for how to wire the library up as a dependency of your API’s model.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;interceptors&quot;&gt;Interceptors&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Type Safe API provided the following default interceptors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logging, tracing and metrics interceptors using Powertools for AWS Lambda&lt;/li&gt;
&lt;li&gt;Try-catch interceptor for handling uncaught exceptions&lt;/li&gt;
&lt;li&gt;CORS interceptor for returning CORS headers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator instruments logging, tracing and metrics with Powertools for AWS Lambda using &lt;a href=&quot;https://middy.js.org/&quot;&gt;Middy&lt;/a&gt;. The behaviour of the try-catch interceptor is built in to the Smithy TypeScript SSDK, and CORS headers are added in &lt;code dir=&quot;auto&quot;&gt;handler.ts&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For logging, tracing and metrics interceptors in any language, use &lt;a href=&quot;https://github.com/aws-powertools/&quot;&gt;Powertools for AWS Lambda&lt;/a&gt; directly.&lt;/p&gt;
&lt;p&gt;For migrating custom interceptors, we recommend using the following libraries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TypeScript - &lt;a href=&quot;https://middy.js.org/&quot;&gt;Middy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python - &lt;a href=&quot;https://docs.powertools.aws.dev/lambda/python/latest/utilities/middleware_factory/&quot;&gt;Powertools for AWS Lambda Middleware Factory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java - Instrument methods before/after your business logic using &lt;a href=&quot;https://github.com/aws/aws-lambda-java-libs&quot;&gt;aws-lambda-java-libs&lt;/a&gt; for a simple approach, or consider &lt;a href=&quot;https://github.com/eclipse-aspectj/aspectj&quot;&gt;AspectJ&lt;/a&gt; for building your middleware as annotations.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h4 id=&quot;documentation-generation&quot;&gt;Documentation Generation&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Type Safe API provided documentation generation using Redocly CLI. This is very easy to add to an existing project once you’ve migrated it as above.&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Install the Redocly CLI&lt;/p&gt;
&lt;starlight-tabs data-sync-key=&quot;cli-command&quot;&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-34-0&quot; id=&quot;tab-34-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0 0v7.5h7.5V0H0Zm8.25 0v7.5h7.498V0H8.25Zm8.25 0v7.5H24V0h-7.5ZM8.25 8.25v7.5h7.498v-7.5H8.25Zm8.25 0v7.5H24v-7.5h-7.5ZM0 16.5V24h7.5v-7.5H0Zm8.25 0V24h7.498v-7.5H8.25Zm8.25 0V24H24v-7.5h-7.5Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;pnpm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-34-1&quot; id=&quot;tab-34-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6.729 21.545L6.729 21.545Q6.393 21.377 6.225 21.041L6.225 21.041Q6.099 20.915 6.078 20.915Q6.057 20.915 5.973 21.041Q5.889 21.167 5.826 21.419Q5.763 21.671 5.679 21.839L5.679 21.839Q5.385 22.805 4.839 23.141Q4.293 23.477 3.327 23.267L3.327 23.267Q3.075 23.267 2.529 23.015L2.529 23.015Q1.731 22.595 2.151 21.839L2.151 21.839Q2.151 21.755 2.214 21.629Q2.277 21.503 2.277 21.419L2.277 21.419Q1.563 21.419 1.353 20.789L1.353 20.789Q0.849 19.445 1.017 18.416Q1.185 17.387 2.151 16.421L2.151 16.421L2.235 16.253Q2.403 15.959 2.403 15.791L2.403 15.791Q2.403 14.363 2.697 13.313L2.697 13.313Q3.033 12.053 3.831 11.045L3.831 11.045Q4.503 10.163 5.427 9.617L5.427 9.617Q5.595 9.533 5.616 9.407Q5.637 9.281 5.553 9.071L5.553 9.071Q4.839 8.189 4.629 6.971L4.629 6.971Q4.545 6.635 4.671 6.215L4.671 6.215Q4.755 5.921 5.007 5.417L5.007 5.417L5.175 5.039Q5.427 4.745 5.553 4.745L5.553 4.745Q5.931 4.661 6.561 4.199L6.561 4.199L6.855 3.989Q8.157 2.645 10.131 2.645L10.131 2.645Q10.341 2.645 10.446 2.582Q10.551 2.519 10.551 2.393L10.551 2.393Q10.719 1.595 11.307 0.839L11.307 0.839L11.727 0.419Q11.937 0.209 12.168 0.230Q12.399 0.251 12.525 0.545L12.525 0.545Q12.777 1.007 13.155 1.847L13.155 1.847L13.407 2.393Q13.617 2.729 13.827 2.519L13.827 2.519Q14.331 2.309 14.499 2.288Q14.667 2.267 14.751 2.393Q14.835 2.519 15.003 3.065L15.003 3.065Q16.011 7.265 13.701 10.919L13.701 10.919Q13.617 11.045 13.428 11.318Q13.239 11.591 13.155 11.759Q13.071 11.927 13.092 12.053Q13.113 12.179 13.281 12.389L13.281 12.389Q14.163 13.145 14.751 14.195Q15.339 15.245 15.507 16.421L15.507 16.421Q15.717 17.891 15.507 19.319L15.507 19.319Q15.423 19.697 15.507 19.760Q15.591 19.823 15.927 19.739L15.927 19.739Q17.397 19.277 18.531 18.521L18.531 18.521L18.867 18.353Q19.623 17.891 20.043 17.723L20.043 17.723Q20.673 17.429 21.303 17.345L21.303 17.345L21.681 17.345Q22.101 17.261 22.374 17.366Q22.647 17.471 22.836 17.723Q23.025 17.975 23.025 18.269L23.025 18.269Q23.025 18.857 22.353 19.067L22.353 19.067Q20.631 19.403 18.804 20.726Q16.977 22.049 14.457 22.721L14.457 22.721Q14.373 22.721 14.205 22.805Q14.037 22.889 13.953 23.015L13.953 23.015Q13.659 23.225 13.323 23.309L13.323 23.309Q13.113 23.393 12.651 23.435L12.651 23.435L12.231 23.519L11.895 23.561Q9.375 23.771 8.031 23.771L8.031 23.771Q7.275 23.771 6.729 23.645L6.729 23.645Q5.973 23.393 5.805 22.889L5.805 22.889Q5.595 22.091 6.225 21.671L6.225 21.671Q6.351 21.671 6.519 21.608Q6.687 21.545 6.729 21.545Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;yarn&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-34-2&quot; id=&quot;tab-34-2&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M24 7.296L0 7.296L0 15.296L6.816 15.296L6.816 16.704L12.096 16.704L12.096 15.392L24 15.392L24 7.296ZM6.592 8.704L6.592 13.984L5.312 13.984L5.312 10.112L4 10.112L4 13.984L1.312 13.984L1.312 8.704L6.592 8.704ZM13.184 13.984L13.216 13.984L10.496 13.984L10.496 15.392L7.808 15.392L7.808 8.800L13.088 8.800Q13.216 10.400 13.184 13.984L13.184 13.984ZM22.592 8.704L22.592 13.984L21.312 13.984L21.312 10.112L20 10.112L20 13.984L18.592 13.984L18.592 10.112L17.312 10.112L17.312 13.984L14.592 13.984L14.592 8.704L22.592 8.704ZM11.904 12.704L11.904 10.112L10.592 10.112L10.592 12.704L11.904 12.704Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;npm&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-34-3&quot; id=&quot;tab-34-3&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M11.966 22.132c6.609 0 11.966-4.326 11.966-9.661 0-3.308-2.051-6.23-5.204-7.963-1.283-.713-2.291-1.353-3.13-1.885C14.018 1.619 13.043 1 11.966 1c-1.094 0-2.327.783-3.955 1.816a49.78 49.78 0 0 1-2.808 1.692C2.051 6.241 0 9.163 0 12.471c0 5.335 5.357 9.661 11.966 9.661Zm-1.397-17.83a5.885 5.885 0 0 0 .497-2.403c0-.144.201-.186.229-.028.656 2.775-.9 4.15-2.051 4.61-.124.048-.199-.12-.103-.208a5.747 5.747 0 0 0 1.428-1.971Zm2.052-.102a5.795 5.795 0 0 0-.78-2.3v-.015c-.068-.123.086-.263.185-.172 1.956 2.105 1.303 4.055.554 5.037-.082.102-.229-.003-.188-.126a5.837 5.837 0 0 0 .229-2.424Zm1.771-.559a5.709 5.709 0 0 0-1.607-1.801v-.014c-.112-.085-.024-.274.113-.218 2.588 1.084 2.766 3.171 2.452 4.395a.116.116 0 0 1-.13.09.11.11 0 0 1-.071-.045.118.118 0 0 1-.022-.083 5.863 5.863 0 0 0-.735-2.324ZM9.32 4.2c-.616.544-1.279.758-2.058.997-.116 0-.194-.078-.155-.18 1.747-.907 2.369-1.645 2.99-2.771 0 0 .155-.117.188.085 0 .303-.348 1.325-.965 1.869Zm4.931 11.205a2.95 2.95 0 0 1-.935 1.549 2.16 2.16 0 0 1-1.282.618 2.167 2.167 0 0 1-1.323-.618 2.95 2.95 0 0 1-.923-1.549.243.243 0 0 1 .064-.197.23.23 0 0 1 .192-.069h3.954a.227.227 0 0 1 .244.16c.01.035.014.07.009.106Zm-5.443-2.17a1.85 1.85 0 0 1-2.377-.244 1.969 1.969 0 0 1-.233-2.44c.207-.318.502-.565.846-.711a1.84 1.84 0 0 1 2.053.42c.264.27.443.616.515.99a1.98 1.98 0 0 1-.108 1.118c-.142.35-.384.653-.696.867Zm8.471.005a1.85 1.85 0 0 1-2.374-.252 1.956 1.956 0 0 1-.546-1.362c0-.383.11-.758.319-1.076.207-.318.502-.566.847-.711a1.84 1.84 0 0 1 1.09-.108c.366.076.702.261.965.533s.44.617.512.993a1.98 1.98 0 0 1-.113 1.118 1.922 1.922 0 0 1-.7.865Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;bun&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-34-0&quot; aria-labelledby=&quot;tab-34-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Dw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@redocly/cli&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-34-1&quot; aria-labelledby=&quot;tab-34-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-D&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@redocly/cli&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-34-2&quot; aria-labelledby=&quot;tab-34-2&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--legacy-peer-deps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-D&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@redocly/cli&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-34-3&quot; aria-labelledby=&quot;tab-34-3&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-D&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@redocly/cli&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;starlight-tabs-restore&gt;&lt;/starlight-tabs-restore&gt;&lt;/starlight-tabs&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a documentation generation target to your &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt; project using &lt;a href=&quot;https://redocly.com/docs/cli/commands/build-docs&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;redocly build-docs&lt;/code&gt;&lt;/a&gt;, for example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;model/project.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;documentation&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;outputs&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;{workspaceRoot}/dist/{projectRoot}/documentation&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nx:run-commands&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;redocly build-docs dist/packages/api/model/build/openapi/openapi.json --output=dist/packages/api/model/documentation/index.html&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;cwd&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;{workspaceRoot}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;dependsOn&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;compile&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also consider the &lt;a href=&quot;https://openapi-generator.tech/docs/generators#documentation-generators&quot;&gt;OpenAPI Generator documentation generators&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;mock-integrations&quot;&gt;Mock Integrations&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Type Safe API generated mocks for you within its generated infrastructure package.&lt;/p&gt;
&lt;p&gt;You can move to &lt;a href=&quot;https://github.com/json-schema-faker/json-schema-faker&quot;&gt;JSON Schema Faker&lt;/a&gt; which can create the mock data based on JSON Schemas. This can work directly on an OpenAPI specification, and has &lt;a href=&quot;https://github.com/oprogramador/json-schema-faker-cli&quot;&gt;a CLI&lt;/a&gt; which you could run as part of your &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt; project build.&lt;/p&gt;
&lt;p&gt;You can update your CDK infrastructure to read the JSON file output by JSON Schema Faker, and return the appropriate API Gateway &lt;a href=&quot;https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MockIntegration.html&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;MockIntegration&lt;/code&gt;&lt;/a&gt; for an integration, based on the generated &lt;code dir=&quot;auto&quot;&gt;metadata.gen.ts&lt;/code&gt; (assuming you used the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator&lt;/a&gt;).&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;mixed-language-backends&quot;&gt;Mixed Language Backends&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Type Safe API supported implementing APIs with a mixture of different languages in the backend. This can also be achieved by providing “overrides” to integrations when instantiating your API construct in CDK:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;application-stack.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pythonLambdaHandler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;PythonImplementation&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;runtime&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Runtime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PYTHON_3_12&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Api&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;MyApi&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;integrations&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Api&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;defaultIntegrations&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;withOverrides&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;integration&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LambdaIntegration&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pythonLambdaHandler&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pythonLambdaHandler&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You will need to “stub” your service/router for your service to compile if using the &lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; and the TypeScript Server SDK, eg:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;service.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ApiService&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;ServiceContext&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Echo&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Not Implemented`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;For type-safety for languages other than TypeScript, refer to the above “Backend” sections depending on your modelling language.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;input-validation&quot;&gt;Input Validation&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Type Safe API added native API Gateway validation for request bodies based on your OpenAPI specification since it used the &lt;a href=&quot;https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.SpecRestApi.html&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;SpecRestApi&lt;/code&gt;&lt;/a&gt; construct under the hood.&lt;/p&gt;
&lt;p&gt;With the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/ts-smithy-api&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#smithy-api&lt;/code&gt; generator&lt;/a&gt;, validation is performed by the Server SDK itself. This is the same for most server generators.&lt;/p&gt;
&lt;p&gt;If you would like to implement native API Gateway validation, you could do so by modifying &lt;code dir=&quot;auto&quot;&gt;packages/common/constructs/src/core/api/rest-api.ts&lt;/code&gt; to read the relevant JSON schema for each operation’s request body from your OpenAPI specification.&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;websocket-apis&quot;&gt;WebSocket APIs&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Unfortunately there is no straightforward migration path for Type Safe API’s websocket API using API Gateway and Lambda with model-driven API development. However, this section of the guide aims to at least offer a few ideas.&lt;/p&gt;
&lt;p&gt;Consider using &lt;a href=&quot;https://www.asyncapi.com/&quot;&gt;AsyncAPI&lt;/a&gt; to model your API instead of OpenAPI or TypeSpec since this is designed to handle asynchronous APIs. The &lt;a href=&quot;https://github.com/asyncapi/nodejs-template&quot;&gt;AsyncAPI NodeJS Template&lt;/a&gt; can generate a Node websocket backend which you could host on &lt;a href=&quot;https://docs.aws.amazon.com/ecs/&quot;&gt;ECS&lt;/a&gt; for example.&lt;/p&gt;
&lt;p&gt;You can also consider &lt;a href=&quot;https://docs.aws.amazon.com/appsync/latest/eventapi/event-api-welcome.html&quot;&gt;AppSync Events&lt;/a&gt; for infrastructure, and use &lt;a href=&quot;https://docs.powertools.aws.dev/lambda/typescript/latest/features/event-handler/appsync-events/&quot;&gt;Powertools&lt;/a&gt;. &lt;a href=&quot;https://aws.amazon.com/blogs/mobile/simplify-aws-appsync-events-integration-with-powertools-for-aws-lambda/&quot;&gt;This blog post&lt;/a&gt; is worth a read!&lt;/p&gt;
&lt;p&gt;Another option is to use GraphQL APIs with websockets on &lt;a href=&quot;https://aws.amazon.com/appsync/&quot;&gt;AppSync&lt;/a&gt;, for which we have a &lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/issues/154&quot;&gt;GitHub issue&lt;/a&gt; you can +1! Refer to the &lt;a href=&quot;https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html&quot;&gt;AppSync developer guide&lt;/a&gt; for details and links to sample projects.&lt;/p&gt;
&lt;p&gt;You can also consider rolling your own code generators which interpret the same vendor extensions as Type Safe API. Refer to the &lt;a href=&quot;#apis-modelled-with-openapi&quot;&gt;APIs Modelled with OpenAPI&lt;/a&gt; section for details around building custom OpenAPI-based code generators. You can find the templates Type Safe API uses for API Gateway Websocket API Lambda handlers &lt;a href=&quot;https://github.com/aws/aws-pdk/tree/mainline/packages/type-safe-api/scripts/type-safe-api/generators/typescript-async-runtime/templates&quot;&gt;here&lt;/a&gt;, and the client &lt;a href=&quot;https://github.com/aws/aws-pdk/blob/mainline/packages/type-safe-api/scripts/type-safe-api/generators/typescript-websocket-client/templates/client.ejs&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also consider migrating to use the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/trpc&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ts#trpc-api&lt;/code&gt; generator&lt;/a&gt; to use tRPC. At the time of writing we don’t yet have support for subscriptions/streaming but if this is something you need do add a +1 to our &lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/issues/194&quot;&gt;GitHub issue tracking this&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Smithy is protocol agnostic, but does not yet have support for the Websocket protocol, refer to &lt;a href=&quot;https://github.com/smithy-lang/smithy/issues/1505&quot;&gt;this GitHub issue tracking support&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;pythonまたはjavaでのインフラストラクチャ&quot;&gt;PythonまたはJavaでのインフラストラクチャ&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;PDK supported CDK infrastructure written in Python and Java. We do not support this in the Nx Plugin for AWS at the time of writing.&lt;/p&gt;
&lt;p&gt;The recommended path forward would be to either migrate your CDK infrastructure to TypeScript, or to use our generators and migrate the common constructs package to your desired language. You can use Generative AI to accelerate these kinds of migrations, for example &lt;a href=&quot;https://kiro.dev/cli/&quot;&gt;Kiro CLI&lt;/a&gt;. You can have an AI agent iterate on the migration until the synthesized CloudFormation templates are identical.&lt;/p&gt;
&lt;p&gt;The same applies for Type Safe API’s generated infrastructure in Python or Java - you can translate the generic &lt;code dir=&quot;auto&quot;&gt;rest-api.ts&lt;/code&gt; construct from the common constructs package, and implement your own simple metadata generator for your target language (refer to the &lt;a href=&quot;#apis-modelled-with-openapi&quot;&gt;APIs Modelled with OpenAPI&lt;/a&gt; section).&lt;/p&gt;
&lt;p&gt;You can use the &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/guides/python-project&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;py#project&lt;/code&gt; generator&lt;/a&gt; for a base Python project to add your CDK code to (and move over your &lt;code dir=&quot;auto&quot;&gt;cdk.json&lt;/code&gt; file, adding relevant targets). You can use Nx’s &lt;a href=&quot;https://nx.dev/technologies/java/introduction&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;@nx/gradle&lt;/code&gt;&lt;/a&gt; plugin for Java projects, or &lt;a href=&quot;https://github.com/gridatek/jnxplus/tree/main/packages/nx-maven&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;@jnxplus/nx-maven&lt;/code&gt;&lt;/a&gt; for Maven.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;projenの使用&quot;&gt;Projenの使用&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;PDK was built on top of &lt;a href=&quot;https://projen.io/&quot;&gt;Projen&lt;/a&gt;. Projen and Nx Generators have fairly fundamental differences meaning that while it is technically possible to combine them it is likely an anti-pattern. Projen manages project files as code such that they cannot be modified directly, whereas Nx generators vend project files once and then code can be freely modified.&lt;/p&gt;
&lt;p&gt;If you would like to continue to use Projen, you can implement your desired Projen project types yourself. To follow patterns from the Nx Plugin for AWS, you can run our generators or examine their source code on GitHub to see how your desired project types are constructed, and implement the relevant parts using Projen’s primitives.&lt;/p&gt;</content:encoded></item><item><title>Nx Plugin for AWS MCP Serverの紹介</title><link>https://awslabs.github.io/nx-plugin-for-aws/jp/blog/introducing-aws-nx-mcp/</link><guid isPermaLink="true">https://awslabs.github.io/nx-plugin-for-aws/jp/blog/introducing-aws-nx-mcp/</guid><description>決定論的なスキャフォールディングでバイブコーディングを加速</description><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;急速に進化するソフトウェア開発の環境において、AIアシスタントは私たちのコーディングの旅における貴重な協力者となっています。多くの開発者は、私たちが親しみを込めて「バイブコーディング」と呼ぶものを受け入れています。これは、人間の創造性とAIの支援との協調的なダンスです。新たに登場した実践と同様に、エキサイティングな利点と注目すべき課題の両方が伴います。この投稿では、AWSの製品とサービスを使用する際のAI支援開発体験を強化する Nx Plugin for AWS MCP Server を紹介します。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;バイブコーディングの台頭&quot;&gt;バイブコーディングの台頭&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;バイブコーディング、つまりAIアシスタントと協力してソフトウェアを構築する実践は、多くの組織がソフトウェア開発にアプローチする方法を変革しました。構築したいものを説明すると、AIアシスタントがコードとテストの記述、ビルドコマンドの実行、そして大小のタスクを完了するための協調的な反復を通じて、あなたのビジョンを実現するのを支援します。&lt;/p&gt;
&lt;p&gt;この協調的なアプローチは開発サイクルを大幅に加速しました。以前は手動で記述するのに数時間かかっていた複雑な実装が、多くの場合数分で完了できるようになりました。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;バイブコーディングの課題&quot;&gt;バイブコーディングの課題&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;その利点にもかかわらず、バイブコーディングにはフローを妨げ、フラストレーションにつながる落とし穴があります。AIツールはプロジェクト全体で一貫性のないパターンを生成する可能性があり、これは後々メンテナンスの頭痛の種となる可能性があります。具体的なガイダンスがなければ、AIは経験豊富な開発者が自然に組み込むであろう重要なAWS固有のベストプラクティスやセキュリティの考慮事項を見逃す可能性があります。&lt;/p&gt;
&lt;p&gt;明確なプロジェクト構造がなければ、AI支援コードは整理されず、メンテナンスが困難になる可能性があります。AIは、すでに確立されたソリューションがある問題に対してカスタム実装を作成し、不必要に車輪の再発明をする可能性があります。&lt;/p&gt;
&lt;p&gt;これらの課題は、特に単一のフレームワークの範囲内だけでなく、相互接続するさまざまなAWSサービスを扱う場合に、技術的負債、セキュリティの脆弱性、フラストレーションにつながる可能性があります。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;nx-plugin-for-aws&quot;&gt;Nx Plugin for AWS&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Nx Plugin for AWS は、Nxモノレポツールを使用してAWSアプリケーションを構築するための構造化された基盤を提供します。白紙のキャンバスから始める代わりに、プラグインはプロジェクト組織のための一貫したフレームワークを提供します。&lt;/p&gt;
&lt;p&gt;プラグインは、一般的なプロジェクトタイプのジェネレーターを通じて一貫したプロジェクトスキャフォールディングを保証し、コードベース全体の構造的整合性を維持します。AWSのベストプラクティスに従う事前設定されたテンプレートを組み込み、開発者が一般的な落とし穴やセキュリティの問題を回避するのに役立ちます。統合されたツールは、AWSアプリケーションのビルド、テスト、デプロイのための組み込みコマンドを提供し、ローカル開発サーバーを通じて開発ワークフローを合理化します。さらに、複雑なプロジェクトのためのNxの強力な依存関係管理を活用し、モノレポ管理を簡素化します。&lt;/p&gt;
&lt;p&gt;この構造を提供することで、Nx Plugin for AWS はAIアシスタントに作業するための明確な構造を与えます。パターンをゼロから発明するのではなく、AIアシスタントは確立された規約に従うことができ、より一貫性があり保守可能なコードベースにつながります。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;mcp-serverでaiを強化&quot;&gt;MCP ServerでAIを強化&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Model Context Protocol (MCP) は、AIアシスタントが外部ツールやリソースと対話できるようにするオープンスタンダードです。Nx Plugin for AWS MCP server は、Nx Plugin for AWS に関する専門知識でAIアシスタントの機能を拡張します。&lt;/p&gt;
&lt;p&gt;MCP server は、AWS開発に特化したベストプラクティス、利用可能なプロジェクト構造、実装パターンに関するコンテキスト情報を提供します。AIツールがワークスペースを作成し、ジェネレーターを実行して一般的なプロジェクトタイプをスキャフォールドできるようにします。このコンテキスト認識により、AIは確立されたパターンに沿った、一般的な落とし穴を回避する、より情報に基づいた提案を行うことができます。&lt;/p&gt;
&lt;p&gt;ベストプラクティスに沿わない、または存在しない機能を参照する可能性のあるコードを生成する代わりに、AIアシスタントはMCP server を活用してプロジェクトの基盤を築くことができます。その結果、プロジェクトのコアコンポーネントのための堅固な基盤から始め、AIを使用してビジネスロジックを埋めることができる、より決定論的で信頼性の高い開発体験が得られます。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;はじめに&quot;&gt;はじめに&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;より構造化され信頼性の高いAI支援AWS開発を探求することに興味がある場合は、Nx Plugin for AWS MCP Server を試してみてください。お気に入りのAIアシスタント（Kiro、Kiro CLI、Cline、Claude Codeなど）で、次のMCP Server設定を使用してセットアップできます：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;mcpServers&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;nx-plugin-for-aws&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;npx&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;-y&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@aws/nx-plugin-mcp&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;詳細な手順については、&lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/building-with-ai&quot;&gt;Building with AIガイド&lt;/a&gt;を参照してください。&lt;/p&gt;</content:encoded></item><item><title>@aws/nx-plugin へようこそ</title><link>https://awslabs.github.io/nx-plugin-for-aws/jp/blog/welcome/</link><guid isPermaLink="true">https://awslabs.github.io/nx-plugin-for-aws/jp/blog/welcome/</guid><pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ついにリリースです！🚀&lt;/p&gt;
&lt;p&gt;Nx Plugin for AWS は、AWS 上でフルスタックアプリケーションを構築およびデプロイするプロセスを簡素化するためのツールキットを提供する &lt;a href=&quot;https://nx.dev/&quot;&gt;Nx&lt;/a&gt; プラグインです。開発者にアプリケーションコードと IaC コードの両方について事前設定されたテンプレートを提供し、セットアップと設定に費やす時間を大幅に削減します。このプラグインは、カスタマイズの柔軟性を維持しながら、AWS サービス統合の複雑さを処理します。&lt;/p&gt;
&lt;p&gt;ユーザーは利用可能なジェネレーターのリストから必要なコンポーネントを選択し、設定オプションを提供するだけで、&lt;code dir=&quot;auto&quot;&gt;@aws/nx-plugin&lt;/code&gt; が必要なスターターコードを生成します。このツールキット内には、API、ウェブサイト、インフラストラクチャを作成できるいくつかのジェネレーターが存在し、さらに型安全なクライアントを使用してフロントエンドをバックエンドに統合する（AST 変換による既存ファイルの更新を含む！）などのより高度な処理も実行できます。&lt;/p&gt;
&lt;img src=&quot;https://awslabs.github.io/nx-plugin-for-aws/_astro/website-generator.BN0Uiv5h_1hNbea.gif&quot; alt=&quot;generator&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;600&quot;&gt;
&lt;p&gt;詳細については、プラグインの主要コンポーネントをすべてカバーし、使用方法の良い感触を得られる &lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/tutorials/dungeon-game/overview&quot;&gt;Dungeon Adventure チュートリアル&lt;/a&gt;から始めてください。&lt;/p&gt;
&lt;p&gt;皆様のフィードバックをお待ちしております。ご意見や次に見たい機能について、&lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/discussions&quot;&gt;ディスカッションを投稿&lt;/a&gt;したり、&lt;a href=&quot;https://github.com/awslabs/nx-plugin-for-aws/issues&quot;&gt;issue を作成&lt;/a&gt;したりすることをお気軽にどうぞ！&lt;/p&gt;
&lt;a href=&quot;https://awslabs.github.io/nx-plugin-for-aws/en/get_started/tutorials/dungeon-game/overview&quot;&gt;試してみる！&lt;/a&gt;</content:encoded></item></channel></rss>