From 211ab8e63d2056641ec4919a93bc2cfd1267a351 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 21:43:54 +0000 Subject: [PATCH] deploy: 773befffd1e2d66b7835784b52d07a31dc745ed0 --- 404.html | 4 +- assets/js/2693d1d3.e2f67253.js | 1 + assets/js/3cd0a4e8.f363e48a.js | 1 + assets/js/3e71c51e.bc63e446.js | 1 - assets/js/3faa3f93.02d03f8c.js | 1 + assets/js/5346779c.07b7fb0b.js | 1 - assets/js/5346779c.cd6667ae.js | 1 + .../js/{237.02cb92cf.js => 618.d250a315.js} | 2 +- assets/js/6acb28a5.c854b334.js | 1 + assets/js/7d4b0408.4c146063.js | 1 + assets/js/84b2f205.02b9e11a.js | 1 - assets/js/a8678e95.99ba5256.js | 1 - assets/js/aaa7fdeb.6efb89df.js | 1 + ...b363d.e7b8ad22.js => adf393e9.90c09dc4.js} | 2 +- assets/js/bbb724c6.8ff2b955.js | 1 - assets/js/dc8eeda6.383ce9d1.js | 1 - assets/js/f2e54508.3e7a1df5.js | 1 - assets/js/f2e54508.538d7ba3.js | 1 + assets/js/main.0be49dd0.js | 2 - assets/js/main.44f49a57.js | 2 + ...CENSE.txt => main.44f49a57.js.LICENSE.txt} | 0 assets/js/runtime~main.8ea3a067.js | 1 - assets/js/runtime~main.dde457c9.js | 1 + blog/archive/index.html | 4 +- blog/hello-world/index.html | 4 +- blog/index.html | 4 +- blog/tags/hello/index.html | 4 +- blog/tags/index.html | 4 +- docs/arsitektur/index.html | 4 +- docs/arsitektur/layering/index.html | 4 +- docs/intro/index.html | 4 +- docs/tutorial/{ => domain}/bekerja/index.html | 30 +++++--- .../{ => domain}/domain-testing/index.html | 12 ++-- docs/tutorial/domain/entity/index.html | 69 +++++++++++++++++++ docs/tutorial/domain/index.html | 67 ++---------------- .../{ => domain}/migrations/index.html | 16 ++--- docs/tutorial/{ => domain}/orm/index.html | 16 ++--- .../{ => domain}/repository/index.html | 16 ++--- docs/tutorial/index.html | 10 ++- index.html | 4 +- markdown-page/index.html | 4 +- sitemap.xml | 2 +- 42 files changed, 165 insertions(+), 142 deletions(-) create mode 100644 assets/js/2693d1d3.e2f67253.js create mode 100644 assets/js/3cd0a4e8.f363e48a.js delete mode 100644 assets/js/3e71c51e.bc63e446.js create mode 100644 assets/js/3faa3f93.02d03f8c.js delete mode 100644 assets/js/5346779c.07b7fb0b.js create mode 100644 assets/js/5346779c.cd6667ae.js rename assets/js/{237.02cb92cf.js => 618.d250a315.js} (94%) create mode 100644 assets/js/6acb28a5.c854b334.js create mode 100644 assets/js/7d4b0408.4c146063.js delete mode 100644 assets/js/84b2f205.02b9e11a.js delete mode 100644 assets/js/a8678e95.99ba5256.js create mode 100644 assets/js/aaa7fdeb.6efb89df.js rename assets/js/{785b363d.e7b8ad22.js => adf393e9.90c09dc4.js} (68%) delete mode 100644 assets/js/bbb724c6.8ff2b955.js delete mode 100644 assets/js/dc8eeda6.383ce9d1.js delete mode 100644 assets/js/f2e54508.3e7a1df5.js create mode 100644 assets/js/f2e54508.538d7ba3.js delete mode 100644 assets/js/main.0be49dd0.js create mode 100644 assets/js/main.44f49a57.js rename assets/js/{main.0be49dd0.js.LICENSE.txt => main.44f49a57.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.8ea3a067.js create mode 100644 assets/js/runtime~main.dde457c9.js rename docs/tutorial/{ => domain}/bekerja/index.html (76%) rename docs/tutorial/{ => domain}/domain-testing/index.html (74%) create mode 100644 docs/tutorial/domain/entity/index.html rename docs/tutorial/{ => domain}/migrations/index.html (55%) rename docs/tutorial/{ => domain}/orm/index.html (82%) rename docs/tutorial/{ => domain}/repository/index.html (82%) diff --git a/404.html b/404.html index 5d9e8c2..5dbc86a 100644 --- a/404.html +++ b/404.html @@ -5,8 +5,8 @@ Page Not Found | Doksli - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/2693d1d3.e2f67253.js b/assets/js/2693d1d3.e2f67253.js new file mode 100644 index 0000000..4702848 --- /dev/null +++ b/assets/js/2693d1d3.e2f67253.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[529],{5687:(a,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var e=i(4848),t=i(8453);const r={title:"Migrations"},s=void 0,o={id:"tutorial/domain/migrations",title:"Migrations",description:"Migrations adalah cara untuk mengelola perubahan skema database.",source:"@site/docs/03-tutorial/01-domain/04-migrations.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/migrations",permalink:"/doksli/docs/tutorial/domain/migrations",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/04-migrations.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Migrations"},sidebar:"tutorialSidebar",previous:{title:"Konfigurasi ORM",permalink:"/doksli/docs/tutorial/domain/orm"},next:{title:"Repository",permalink:"/doksli/docs/tutorial/domain/repository"}},l={},d=[{value:"Membuat Migrasi",id:"membuat-migrasi",level:2},{value:"Menjalankan Migrasi",id:"menjalankan-migrasi",level:2}];function u(a){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,t.R)(),...a.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(n.p,{children:"Migrations adalah cara untuk mengelola perubahan skema database."}),"\n",(0,e.jsx)(n.h2,{id:"membuat-migrasi",children:"Membuat Migrasi"}),"\n",(0,e.jsx)(n.p,{children:"Setelah memodifikasi file konfigurasi ORM, jalankan perintah berikut untuk\nmenghasilkan file migrasi:"}),"\n",(0,e.jsx)(n.pre,{children:(0,e.jsx)(n.code,{className:"language-bash",children:"$ make migrations-make\n"})}),"\n",(0,e.jsxs)(n.p,{children:["Perintah ini akan membuat file migrasi baru di direktori ",(0,e.jsx)(n.code,{children:"migrations/"}),". File\nmigrasi ini berisi perintah SQL untuk membuat, mengubah, atau menghapus tabel\natau kolom di database."]}),"\n",(0,e.jsxs)(n.p,{children:["Silakan cek isi file migrasi yang baru dibuat. Kadang perlu dilakukan\npenyesuaian manual, misalnya jika menambahkan kolom baru yang ",(0,e.jsx)(n.code,{children:"not null"}),", maka\nperlu diberikan nilai default. Atau dengan strategi membuat kolom baru dengan\n",(0,e.jsx)(n.code,{children:"null"}),", melakukan ",(0,e.jsx)(n.code,{children:"update"})," pada data yang sudah ada, lalu mengubah kolom menjadi\n",(0,e.jsx)(n.code,{children:"not null"}),"."]}),"\n",(0,e.jsx)(n.h2,{id:"menjalankan-migrasi",children:"Menjalankan Migrasi"}),"\n",(0,e.jsx)(n.p,{children:"Setelah file migrasi sudah disesuaikan, jalankan perintah berikut untuk\nmenjalankan migrasi:"}),"\n",(0,e.jsx)(n.pre,{children:(0,e.jsx)(n.code,{className:"language-bash",children:"$ make migrations-migrate\n"})})]})}function m(a={}){const{wrapper:n}={...(0,t.R)(),...a.components};return n?(0,e.jsx)(n,{...a,children:(0,e.jsx)(u,{...a})}):u(a)}},8453:(a,n,i)=>{i.d(n,{R:()=>s,x:()=>o});var e=i(6540);const t={},r=e.createContext(t);function s(a){const n=e.useContext(r);return e.useMemo((function(){return"function"==typeof a?a(n):{...n,...a}}),[n,a])}function o(a){let n;return n=a.disableParentContext?"function"==typeof a.components?a.components(t):a.components||t:s(a.components),e.createElement(r.Provider,{value:n},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/3cd0a4e8.f363e48a.js b/assets/js/3cd0a4e8.f363e48a.js new file mode 100644 index 0000000..62652b2 --- /dev/null +++ b/assets/js/3cd0a4e8.f363e48a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[237],{6098:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>r,toc:()=>p});var t=n(4848),o=n(8453);const s={title:"Bekerja Dengan Entity"},i=void 0,r={id:"tutorial/domain/bekerja",title:"Bekerja Dengan Entity",description:"Setelah membuat domain, mapping database, dan repositorynya, kita sudah bisa",source:"@site/docs/03-tutorial/01-domain/06-bekerja.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/bekerja",permalink:"/doksli/docs/tutorial/domain/bekerja",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/06-bekerja.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Bekerja Dengan Entity"},sidebar:"tutorialSidebar",previous:{title:"Repository",permalink:"/doksli/docs/tutorial/domain/repository"}},d={},p=[{value:"Membuat Post Baru dan Menyimpannya ke Database",id:"membuat-post-baru-dan-menyimpannya-ke-database",level:2},{value:"Mengambil Post dari Database",id:"mengambil-post-dari-database",level:2},{value:"Mengubah Post dan Menyimpannya ke Database",id:"mengubah-post-dan-menyimpannya-ke-database",level:2},{value:"Menghapus Post dari Database",id:"menghapus-post-dari-database",level:2},{value:"Melakukan Iterasi Terhadap Semua Post",id:"melakukan-iterasi-terhadap-semua-post",level:2}];function c(e){const a={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:"Setelah membuat domain, mapping database, dan repositorynya, kita sudah bisa\nbekerja dengan entity tersebut."}),"\n",(0,t.jsxs)(a.h2,{id:"membuat-post-baru-dan-menyimpannya-ke-database",children:["Membuat ",(0,t.jsx)(a.code,{children:"Post"})," Baru dan Menyimpannya ke Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\ORM\\EntityManagerInterface;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n$post = new Post('Title', 'Content');\n$postRepository->add($post);\n$entityManager->flush();\n"})}),"\n",(0,t.jsx)(a.admonition,{title:"Perbedaan Dengan Doctrine Standar",type:"caution",children:(0,t.jsxs)(a.p,{children:["Repository standar Doctrine menggunakan ",(0,t.jsx)(a.code,{children:"EntitymanagerInterface::persist()"}),",\nsedangkan repository kita bisa menggunakan ",(0,t.jsx)(a.code,{children:"Repository::add()"}),"."]})}),"\n",(0,t.jsxs)(a.h2,{id:"mengambil-post-dari-database",children:["Mengambil ",(0,t.jsx)(a.code,{children:"Post"})," dari Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\n\n/** @var PostRepository $postRepository */\n\n// $post akan null jika tidak ditemukan di database\n$post = $postRepository->get('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n\n// akan throw exception jika tidak ditemukan di database, dan otomatis\n// menjadi error 404 di browser\n$post = $postRepository->fetch('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n"})}),"\n",(0,t.jsx)(a.admonition,{title:"Perbedaan Dengan Doctrine Standar",type:"caution",children:(0,t.jsxs)(a.p,{children:["Repository standar Doctrine menggunakan ",(0,t.jsx)(a.code,{children:"find()"}),", sedangkan repository kita\nmenggunakan ",(0,t.jsx)(a.code,{children:"get()"})," dan ",(0,t.jsx)(a.code,{children:"fetch()"}),"."]})}),"\n",(0,t.jsxs)(a.h2,{id:"mengubah-post-dan-menyimpannya-ke-database",children:["Mengubah ",(0,t.jsx)(a.code,{children:"Post"})," dan Menyimpannya ke Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n$post = $postRepository->get('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n$post->setTitle('New Title');\n$post->setContent('New Content');\n$entityManager->flush();\n"})}),"\n",(0,t.jsxs)(a.h2,{id:"menghapus-post-dari-database",children:["Menghapus ",(0,t.jsx)(a.code,{children:"Post"})," dari Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\ORM\\EntityManagerInterface;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n// cara pertama\n$post = $postRepository->get('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n$postRepository->removeElement($post);\n$entityManager->flush();\n\n// cara kedua\n$postRepository->remove('91b2679e-47a5-11ef-b06f-8c8caa77b0f');\n$entityManager->flush();\n"})}),"\n",(0,t.jsx)(a.admonition,{title:"Perbedaan Dengan Doctrine Standar",type:"caution",children:(0,t.jsxs)(a.p,{children:["Repository standar Doctrine menggunakan ",(0,t.jsx)(a.code,{children:"remove()"}),", sedangkan repository kita\nmenggunakan ",(0,t.jsx)(a.code,{children:"removeElement()"}),"."]})}),"\n",(0,t.jsxs)(a.h2,{id:"melakukan-iterasi-terhadap-semua-post",children:["Melakukan Iterasi Terhadap Semua ",(0,t.jsx)(a.code,{children:"Post"})]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\ORM\\EntityManagerInterface;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n// cara langsung, akan mengambil semua data dari database sekaligus, dan\n// berpotensi out of memory jika data terlalu banyak:\n\nforeach ($postRepository as $post) {\n // lakukan sesuatu dengan $post\n}\n\n// menggunakan batch, akan mengambil data per halaman, dan tidak akan\n// mengalami out of memory:\n\nforeach ($postRepository->withItemsPerPage(1000)->getPages() as $page) {\n foreach ($page as $post) {\n // lakukan sesuatu dengan $post\n }\n\n $entityManager->clear();\n}\n"})}),"\n",(0,t.jsx)(a.admonition,{title:"Perbedaan Dengan Doctrine Standar",type:"caution",children:(0,t.jsxs)(a.p,{children:["Repository standar Doctrine menggunakan ",(0,t.jsx)(a.code,{children:"findAll()"}),", sedangkan repository kita\nadalah ",(0,t.jsx)(a.code,{children:"iterable"}),"-nya itu sendiri."]})})]})}function l(e={}){const{wrapper:a}={...(0,o.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,a,n)=>{n.d(a,{R:()=>i,x:()=>r});var t=n(6540);const o={},s=t.createContext(o);function i(e){const a=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e71c51e.bc63e446.js b/assets/js/3e71c51e.bc63e446.js deleted file mode 100644 index 93badc3..0000000 --- a/assets/js/3e71c51e.bc63e446.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[569],{7738:(a,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var i=n(4848),t=n(8453);const r={title:"Migrations"},s=void 0,o={id:"tutorial/migrations",title:"Migrations",description:"Migrations adalah cara untuk mengelola perubahan skema database.",source:"@site/docs/03-tutorial/04-migrations.md",sourceDirName:"03-tutorial",slug:"/tutorial/migrations",permalink:"/doksli/docs/tutorial/migrations",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/04-migrations.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Migrations"},sidebar:"tutorialSidebar",previous:{title:"Konfigurasi ORM",permalink:"/doksli/docs/tutorial/orm"},next:{title:"Repository",permalink:"/doksli/docs/tutorial/repository"}},l={},u=[{value:"Membuat Migrasi",id:"membuat-migrasi",level:2},{value:"Menjalankan Migrasi",id:"menjalankan-migrasi",level:2}];function d(a){const e={code:"code",h2:"h2",p:"p",pre:"pre",...(0,t.R)(),...a.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.p,{children:"Migrations adalah cara untuk mengelola perubahan skema database."}),"\n",(0,i.jsx)(e.h2,{id:"membuat-migrasi",children:"Membuat Migrasi"}),"\n",(0,i.jsx)(e.p,{children:"Setelah memodifikasi file konfigurasi ORM, jalankan perintah berikut untuk\nmenghasilkan file migrasi:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-bash",children:"$ make migrations-make\n"})}),"\n",(0,i.jsxs)(e.p,{children:["Perintah ini akan membuat file migrasi baru di direktori ",(0,i.jsx)(e.code,{children:"migrations/"}),". File\nmigrasi ini berisi perintah SQL untuk membuat, mengubah, atau menghapus tabel\natau kolom di database."]}),"\n",(0,i.jsxs)(e.p,{children:["Silakan cek isi file migrasi yang baru dibuat. Kadang perlu dilakukan\npenyesuaian manual, misalnya jika menambahkan kolom baru yang ",(0,i.jsx)(e.code,{children:"not null"}),", maka\nperlu diberikan nilai default. Atau dengan strategi membuat kolom baru dengan\n",(0,i.jsx)(e.code,{children:"null"}),", melakukan ",(0,i.jsx)(e.code,{children:"update"})," pada data yang sudah ada, lalu mengubah kolom menjadi\n",(0,i.jsx)(e.code,{children:"not null"}),"."]}),"\n",(0,i.jsx)(e.h2,{id:"menjalankan-migrasi",children:"Menjalankan Migrasi"}),"\n",(0,i.jsx)(e.p,{children:"Setelah file migrasi sudah disesuaikan, jalankan perintah berikut untuk\nmenjalankan migrasi:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-bash",children:"$ make migrations-migrate\n"})})]})}function m(a={}){const{wrapper:e}={...(0,t.R)(),...a.components};return e?(0,i.jsx)(e,{...a,children:(0,i.jsx)(d,{...a})}):d(a)}},8453:(a,e,n)=>{n.d(e,{R:()=>s,x:()=>o});var i=n(6540);const t={},r=i.createContext(t);function s(a){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function o(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(t):a.components||t:s(a.components),i.createElement(r.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/3faa3f93.02d03f8c.js b/assets/js/3faa3f93.02d03f8c.js new file mode 100644 index 0000000..6e469c9 --- /dev/null +++ b/assets/js/3faa3f93.02d03f8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[873],{3661:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var r=n(4848),i=n(8453),o=n(3514);const s={title:"Domain"},a=void 0,c={id:"tutorial/domain/index",title:"Domain",description:"Untuk tutorial ini, kita akan membuat aplikasi blog sederhana. Aplikasi ini",source:"@site/docs/03-tutorial/01-domain/index.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/",permalink:"/doksli/docs/tutorial/domain/",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/index.md",tags:[],version:"current",frontMatter:{title:"Domain"},sidebar:"tutorialSidebar",previous:{title:"Tutorial",permalink:"/doksli/docs/tutorial/"},next:{title:"Entity",permalink:"/doksli/docs/tutorial/domain/entity"}},l={},u=[];function d(e){const t={code:"code",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["Untuk tutorial ini, kita akan membuat aplikasi blog sederhana. Aplikasi ini\nterdiri dari dua entitas utama: ",(0,r.jsx)(t.code,{children:"Post"})," dan ",(0,r.jsx)(t.code,{children:"Comment"}),"."]}),"\n",(0,r.jsx)(o.A,{})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},3514:(e,t,n)=>{n.d(t,{A:()=>k});n(6540);var r=n(4164),i=n(1754),o=n(8774),s=n(5846),a=n(6654),c=n(1312),l=n(1107);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var d=n(4848);function m(e){let{href:t,children:n}=e;return(0,d.jsx)(o.A,{href:t,className:(0,r.A)("card padding--lg",u.cardContainer),children:n})}function p(e){let{href:t,icon:n,title:i,description:o}=e;return(0,d.jsxs)(m,{href:t,children:[(0,d.jsxs)(l.A,{as:"h2",className:(0,r.A)("text--truncate",u.cardTitle),title:i,children:[n," ",i]}),o&&(0,d.jsx)("p",{className:(0,r.A)("text--truncate",u.cardDescription),title:o,children:o})]})}function f(e){let{item:t}=e;const n=(0,i.Nr)(t),r=function(){const{selectMessage:e}=(0,s.W)();return t=>e(t,(0,c.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,d.jsx)(p,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??r(t.items.length)}):null}function h(e){let{item:t}=e;const n=(0,a.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,i.cC)(t.docId??void 0);return(0,d.jsx)(p,{href:t.href,icon:n,title:t.label,description:t.description??r?.description})}function x(e){let{item:t}=e;switch(t.type){case"link":return(0,d.jsx)(h,{item:t});case"category":return(0,d.jsx)(f,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const n=(0,i.$S)();return(0,d.jsx)(k,{items:n.items,className:t})}function k(e){const{items:t,className:n}=e;if(!t)return(0,d.jsx)(g,{...e});const o=(0,i.d1)(t);return(0,d.jsx)("section",{className:(0,r.A)("row",n),children:o.map(((e,t)=>(0,d.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,d.jsx)(x,{item:e})},t)))})}},5846:(e,t,n)=>{n.d(t,{W:()=>l});var r=n(6540),i=n(4586);const o=["zero","one","two","few","many","other"];function s(e){return o.filter((t=>e.includes(t)))}const a={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,i.A)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),a}}),[e])}function l(){const e=c();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const i=n.select(t),o=n.pluralForms.indexOf(i);return r[Math.min(o,r.length-1)]}(n,t,e)}}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var r=n(6540);const i={},o=r.createContext(i);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5346779c.07b7fb0b.js b/assets/js/5346779c.07b7fb0b.js deleted file mode 100644 index 8c7851e..0000000 --- a/assets/js/5346779c.07b7fb0b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[403],{912:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var r=n(4848),i=n(8453),o=n(3514);const s={title:"Tutorial"},a=void 0,l={id:"tutorial/index",title:"Tutorial",description:"Untuk tutorial ini, kita akan membuat aplikasi blog sederhana. Aplikasi ini",source:"@site/docs/03-tutorial/index.md",sourceDirName:"03-tutorial",slug:"/tutorial/",permalink:"/doksli/docs/tutorial/",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/index.md",tags:[],version:"current",frontMatter:{title:"Tutorial"},sidebar:"tutorialSidebar",previous:{title:"Arsitektur",permalink:"/doksli/docs/arsitektur/layering"},next:{title:"Domain",permalink:"/doksli/docs/tutorial/domain"}},c={},u=[];function d(e){const t={code:"code",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["Untuk tutorial ini, kita akan membuat aplikasi blog sederhana. Aplikasi ini\nterdiri dari dua entitas utama: ",(0,r.jsx)(t.code,{children:"Post"})," dan ",(0,r.jsx)(t.code,{children:"Comment"}),"."]}),"\n",(0,r.jsx)(o.A,{})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},3514:(e,t,n)=>{n.d(t,{A:()=>k});n(6540);var r=n(4164),i=n(1754),o=n(8774),s=n(5846),a=n(6654),l=n(1312),c=n(1107);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var d=n(4848);function m(e){let{href:t,children:n}=e;return(0,d.jsx)(o.A,{href:t,className:(0,r.A)("card padding--lg",u.cardContainer),children:n})}function p(e){let{href:t,icon:n,title:i,description:o}=e;return(0,d.jsxs)(m,{href:t,children:[(0,d.jsxs)(c.A,{as:"h2",className:(0,r.A)("text--truncate",u.cardTitle),title:i,children:[n," ",i]}),o&&(0,d.jsx)("p",{className:(0,r.A)("text--truncate",u.cardDescription),title:o,children:o})]})}function f(e){let{item:t}=e;const n=(0,i.Nr)(t),r=function(){const{selectMessage:e}=(0,s.W)();return t=>e(t,(0,l.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,d.jsx)(p,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??r(t.items.length)}):null}function h(e){let{item:t}=e;const n=(0,a.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,i.cC)(t.docId??void 0);return(0,d.jsx)(p,{href:t.href,icon:n,title:t.label,description:t.description??r?.description})}function x(e){let{item:t}=e;switch(t.type){case"link":return(0,d.jsx)(h,{item:t});case"category":return(0,d.jsx)(f,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const n=(0,i.$S)();return(0,d.jsx)(k,{items:n.items,className:t})}function k(e){const{items:t,className:n}=e;if(!t)return(0,d.jsx)(g,{...e});const o=(0,i.d1)(t);return(0,d.jsx)("section",{className:(0,r.A)("row",n),children:o.map(((e,t)=>(0,d.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,d.jsx)(x,{item:e})},t)))})}},5846:(e,t,n)=>{n.d(t,{W:()=>c});var r=n(6540),i=n(4586);const o=["zero","one","two","few","many","other"];function s(e){return o.filter((t=>e.includes(t)))}const a={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,i.A)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),a}}),[e])}function c(){const e=l();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const i=n.select(t),o=n.pluralForms.indexOf(i);return r[Math.min(o,r.length-1)]}(n,t,e)}}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var r=n(6540);const i={},o=r.createContext(i);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5346779c.cd6667ae.js b/assets/js/5346779c.cd6667ae.js new file mode 100644 index 0000000..2e0588f --- /dev/null +++ b/assets/js/5346779c.cd6667ae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[403],{912:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var r=n(4848),o=n(8453),i=n(3514);const s={title:"Tutorial"},c=void 0,l={id:"tutorial/index",title:"Tutorial",description:"",source:"@site/docs/03-tutorial/index.md",sourceDirName:"03-tutorial",slug:"/tutorial/",permalink:"/doksli/docs/tutorial/",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/index.md",tags:[],version:"current",frontMatter:{title:"Tutorial"},sidebar:"tutorialSidebar",previous:{title:"Arsitektur",permalink:"/doksli/docs/arsitektur/layering"},next:{title:"Domain",permalink:"/doksli/docs/tutorial/domain/"}},a={},u=[];function d(e){return(0,r.jsx)(i.A,{})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d()}},3514:(e,t,n)=>{n.d(t,{A:()=>k});n(6540);var r=n(4164),o=n(1754),i=n(8774),s=n(5846),c=n(6654),l=n(1312),a=n(1107);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var d=n(4848);function m(e){let{href:t,children:n}=e;return(0,d.jsx)(i.A,{href:t,className:(0,r.A)("card padding--lg",u.cardContainer),children:n})}function f(e){let{href:t,icon:n,title:o,description:i}=e;return(0,d.jsxs)(m,{href:t,children:[(0,d.jsxs)(a.A,{as:"h2",className:(0,r.A)("text--truncate",u.cardTitle),title:o,children:[n," ",o]}),i&&(0,d.jsx)("p",{className:(0,r.A)("text--truncate",u.cardDescription),title:i,children:i})]})}function p(e){let{item:t}=e;const n=(0,o.Nr)(t),r=function(){const{selectMessage:e}=(0,s.W)();return t=>e(t,(0,l.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,d.jsx)(f,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??r(t.items.length)}):null}function h(e){let{item:t}=e;const n=(0,c.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,o.cC)(t.docId??void 0);return(0,d.jsx)(f,{href:t.href,icon:n,title:t.label,description:t.description??r?.description})}function x(e){let{item:t}=e;switch(t.type){case"link":return(0,d.jsx)(h,{item:t});case"category":return(0,d.jsx)(p,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const n=(0,o.$S)();return(0,d.jsx)(k,{items:n.items,className:t})}function k(e){const{items:t,className:n}=e;if(!t)return(0,d.jsx)(g,{...e});const i=(0,o.d1)(t);return(0,d.jsx)("section",{className:(0,r.A)("row",n),children:i.map(((e,t)=>(0,d.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,d.jsx)(x,{item:e})},t)))})}},5846:(e,t,n)=>{n.d(t,{W:()=>a});var r=n(6540),o=n(4586);const i=["zero","one","two","few","many","other"];function s(e){return i.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,o.A)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function a(){const e=l();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const o=n.select(t),i=n.pluralForms.indexOf(o);return r[Math.min(i,r.length-1)]}(n,t,e)}}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>c});var r=n(6540);const o={},i=r.createContext(o);function s(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/237.02cb92cf.js b/assets/js/618.d250a315.js similarity index 94% rename from assets/js/237.02cb92cf.js rename to assets/js/618.d250a315.js index 0d12f6d..c5e5926 100644 --- a/assets/js/237.02cb92cf.js +++ b/assets/js/618.d250a315.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[237],{3363:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var i=n(4164),o=n(1312),s=n(1107),r=n(4848);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},2237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(6540);var i=n(1312),o=n(1213),s=n(781),r=n(3363),a=n(4848);function d(){const e=(0,i.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.be,{title:e}),(0,a.jsx)(s.A,{children:(0,a.jsx)(r.A,{})})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[618],{3363:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var i=n(4164),o=n(1312),s=n(1107),r=n(4848);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},2237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(6540);var i=n(1312),o=n(1213),s=n(781),r=n(3363),a=n(4848);function d(){const e=(0,i.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.be,{title:e}),(0,a.jsx)(s.A,{children:(0,a.jsx)(r.A,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/6acb28a5.c854b334.js b/assets/js/6acb28a5.c854b334.js new file mode 100644 index 0000000..d3b62a5 --- /dev/null +++ b/assets/js/6acb28a5.c854b334.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[211],{5667:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=t(4848),o=t(8453);const i={title:"Repository"},s=void 0,a={id:"tutorial/domain/repository",title:"Repository",description:"Repository pattern adalah pola design yang memberikan abstraksi untuk mengakses",source:"@site/docs/03-tutorial/01-domain/05-repository.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/repository",permalink:"/doksli/docs/tutorial/domain/repository",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/05-repository.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Repository"},sidebar:"tutorialSidebar",previous:{title:"Migrations",permalink:"/doksli/docs/tutorial/domain/migrations"},next:{title:"Bekerja Dengan Entity",permalink:"/doksli/docs/tutorial/domain/bekerja"}},p={},c=[{value:"Membuat Interface Repository",id:"membuat-interface-repository",level:2},{value:"Membuat Implementasi Repository",id:"membuat-implementasi-repository",level:2}];function m(e){const n={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Repository pattern adalah pola design yang memberikan abstraksi untuk mengakses\ndata. Kita menggunakan repository untuk mengambil dan menyimpan data ke dalam\ndatabase."}),"\n",(0,r.jsx)(n.p,{children:"Hal tersebut dilakukan melalui satu pintu. Keluar masuk entity dari dan ke\ndatabase dilakukan hanya melalui repository. Apabila ada perubahan cara\npenyimpanan data, hal tersebut mudah dilakukan karena hanya perlu mengubah\nimplementasi repository."}),"\n",(0,r.jsx)(n.h2,{id:"membuat-interface-repository",children:"Membuat Interface Repository"}),"\n",(0,r.jsx)(n.p,{children:"Pada arsitektur yang kita gunakan, repository berada di layer domain service.\nKarena repository berhubungan dengan infrastruktur, kita hanya akan membuat\ninterfacenya saja di layer domain service:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/DomainService/Repository/PostRepository.php"',children:"namespace App\\DomainService\\Repository;\n\nuse App\\Domain\\Entity\\Post;\nuse Rekalogika\\Contracts\\Collections\\Repository;\n\n/**\n * @extends Repository\n */\ninterface PostRepository extends Repository\n{\n}\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Kita selalu menggunakan string UUID untuk primary key. Dengan demikian, template\n",(0,r.jsx)(n.code,{children:"TKey"})," dalam interface repository selalu berupa ",(0,r.jsx)(n.code,{children:"string"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["Sedangkan untuk ",(0,r.jsx)(n.code,{children:"Comment"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/DomainService/Repository/CommentRepository.php"',children:"namespace App\\DomainService\\Repository;\n\nuse App\\Domain\\Entity\\Comment;\nuse Rekalogika\\Contracts\\Collections\\Repository;\n\n/**\n * @extends Repository\n */\ninterface CommentRepository extends Repository\n{\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"membuat-implementasi-repository",children:"Membuat Implementasi Repository"}),"\n",(0,r.jsx)(n.p,{children:"Setelah itu kita buatkan implementasinya."}),"\n",(0,r.jsxs)(n.p,{children:["Untuk ",(0,r.jsx)(n.code,{children:"Post"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/Infrastructure/Repository/PostRepository.php"',children:"namespace App\\Infrastructure\\Repository;\n\nuse App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\Common\\Collections\\Order;\nuse Doctrine\\Persistence\\ManagerRegistry;\nuse Rekalogika\\Collections\\ORM\\AbstractRepository;\n\n/**\n * @extends AbstractRepository\n */\nclass PostRepository extends AbstractRepository implements PostRepository\n{\n public function __construct(ManagerRegistry $registry)\n {\n parent::__construct(\n managerRegistry: $registry,\n class: Post::class,\n orderBy: ['id' => Order::Descending],\n );\n }\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Untuk ",(0,r.jsx)(n.code,{children:"Comment"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/Infrastructure/Repository/CommentRepository.php"',children:"namespace App\\Infrastructure\\Repository;\n\nuse App\\Domain\\Entity\\Comment;\nuse App\\DomainService\\Repository\\CommentRepository;\nuse Doctrine\\Common\\Collections\\Order;\nuse Doctrine\\Persistence\\ManagerRegistry;\nuse Rekalogika\\Collections\\ORM\\AbstractRepository;\n\n/**\n * @extends AbstractRepository\n */\nclass CommentRepository extends AbstractRepository implements CommentRepository\n{\n public function __construct(ManagerRegistry $registry)\n {\n parent::__construct(\n managerRegistry: $registry,\n class: Comment::class,\n orderBy: ['id' => Order::Descending],\n );\n }\n}\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var r=t(6540);const o={},i=r.createContext(o);function s(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d4b0408.4c146063.js b/assets/js/7d4b0408.4c146063.js new file mode 100644 index 0000000..240bf4e --- /dev/null +++ b/assets/js/7d4b0408.4c146063.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[968],{5381:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>m,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=t(4848),a=t(8453);const o={title:"Konfigurasi ORM"},s=void 0,r={id:"tutorial/domain/orm",title:"Konfigurasi ORM",description:"Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan",source:"@site/docs/03-tutorial/01-domain/03-orm.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/orm",permalink:"/doksli/docs/tutorial/domain/orm",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/03-orm.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Konfigurasi ORM"},sidebar:"tutorialSidebar",previous:{title:"Domain Testing",permalink:"/doksli/docs/tutorial/domain/domain-testing"},next:{title:"Migrations",permalink:"/doksli/docs/tutorial/domain/migrations"}},m={},d=[{value:"Konfigurasi Untuk Post",id:"konfigurasi-untuk-post",level:2},{value:"Konfigurasi Untuk Comment",id:"konfigurasi-untuk-comment",level:2}];function c(n){const e={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.p,{children:"Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan\ndata ke database. Untuk melakukan itu, kita membuat konfigurasi ORM Doctrine\ndalam bentuk XML."}),"\n",(0,i.jsxs)(e.h2,{id:"konfigurasi-untuk-post",children:["Konfigurasi Untuk ",(0,i.jsx)(e.code,{children:"Post"})]}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-xml",metastring:'title="config/doctrine/Post.orm.xml"',children:'\n\n\n\n \n\n \n\n \n\n \n\n \n \n\n \n\n'})}),"\n",(0,i.jsx)(e.admonition,{title:"Perbedaan Dengan Doctrine Standar",type:"caution",children:(0,i.jsx)(e.p,{children:"Umumnya, konfigurasi Doctrine akan mendefinisikan class repository. Namun kita\ntidak mendefinisikan repository di sini, karena kita akan menggunakan\nimplementasi repositori buatan kita sendiri."})}),"\n",(0,i.jsxs)(e.p,{children:["Di sini semua field-field adalah nama property dari class ",(0,i.jsx)(e.code,{children:"Post"}),", beserta\ndefinisinya di database."]}),"\n",(0,i.jsxs)(e.p,{children:["Doctrine akan secara otomatis memberikan nama tabel dan nama kolom yang sesuai\ndengan konvensi yang digunakan. Untuk sistem kita, Doctrine akan menggunakan\nsnake case dengan prefix ",(0,i.jsx)(e.code,{children:"t_"})," untuk nama tabel, sehingga untuk entity ",(0,i.jsx)(e.code,{children:"Post"}),"\nakan disimpan ke tabel ",(0,i.jsx)(e.code,{children:"t_post"}),"."]}),"\n",(0,i.jsxs)(e.p,{children:["Sedangkan untuk nama kolom menggunakan aturan sama, tetapi dengan prefix ",(0,i.jsx)(e.code,{children:"c_"}),".\nSehingga field ",(0,i.jsx)(e.code,{children:"title"})," akan disimpan ke kolom ",(0,i.jsx)(e.code,{children:"c_title"}),"."]}),"\n",(0,i.jsxs)(e.h2,{id:"konfigurasi-untuk-comment",children:["Konfigurasi Untuk ",(0,i.jsx)(e.code,{children:"Comment"})]}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-xml",metastring:'title="config/doctrine/Comment.orm.xml"',children:'\n\n\n\n \n\n \n\n \n\n \n \n\n \n'})})]})}function l(n={}){const{wrapper:e}={...(0,a.R)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(c,{...n})}):c(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>s,x:()=>r});var i=t(6540);const a={},o=i.createContext(a);function s(n){const e=i.useContext(o);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(a):n.components||a:s(n.components),i.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/84b2f205.02b9e11a.js b/assets/js/84b2f205.02b9e11a.js deleted file mode 100644 index dca131a..0000000 --- a/assets/js/84b2f205.02b9e11a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[938],{4290:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>m,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var i=t(4848),a=t(8453);const o={title:"Konfigurasi ORM"},s=void 0,r={id:"tutorial/orm",title:"Konfigurasi ORM",description:"Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan",source:"@site/docs/03-tutorial/03-orm.md",sourceDirName:"03-tutorial",slug:"/tutorial/orm",permalink:"/doksli/docs/tutorial/orm",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/03-orm.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Konfigurasi ORM"},sidebar:"tutorialSidebar",previous:{title:"Domain Testing",permalink:"/doksli/docs/tutorial/domain-testing"},next:{title:"Migrations",permalink:"/doksli/docs/tutorial/migrations"}},m={},c=[{value:"Konfigurasi Untuk Post",id:"konfigurasi-untuk-post",level:2},{value:"Konfigurasi Untuk Comment",id:"konfigurasi-untuk-comment",level:2}];function d(n){const e={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.p,{children:"Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan\ndata ke database. Untuk melakukan itu, kita membuat konfigurasi ORM Doctrine\ndalam bentuk XML."}),"\n",(0,i.jsxs)(e.h2,{id:"konfigurasi-untuk-post",children:["Konfigurasi Untuk ",(0,i.jsx)(e.code,{children:"Post"})]}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-xml",metastring:'title="config/doctrine/Post.orm.xml"',children:'\n\n\n\n \n\n \n\n \n\n \n\n \n \n\n \n\n'})}),"\n",(0,i.jsx)(e.admonition,{title:"Perbedaan Dengan Doctrine Standar",type:"caution",children:(0,i.jsx)(e.p,{children:"Umumnya, konfigurasi Doctrine akan mendefinisikan class repository. Namun kita\ntidak mendefinisikan repository di sini, karena kita akan menggunakan\nimplementasi repositori buatan kita sendiri."})}),"\n",(0,i.jsxs)(e.p,{children:["Di sini semua field-field adalah nama property dari class ",(0,i.jsx)(e.code,{children:"Post"}),", beserta\ndefinisinya di database."]}),"\n",(0,i.jsxs)(e.p,{children:["Doctrine akan secara otomatis memberikan nama tabel dan nama kolom yang sesuai\ndengan konvensi yang digunakan. Untuk sistem kita, Doctrine akan menggunakan\nsnake case dengan prefix ",(0,i.jsx)(e.code,{children:"t_"})," untuk nama tabel, sehingga untuk entity ",(0,i.jsx)(e.code,{children:"Post"}),"\nakan disimpan ke tabel ",(0,i.jsx)(e.code,{children:"t_post"}),"."]}),"\n",(0,i.jsxs)(e.p,{children:["Sedangkan untuk nama kolom menggunakan aturan sama, tetapi dengan prefix ",(0,i.jsx)(e.code,{children:"c_"}),".\nSehingga field ",(0,i.jsx)(e.code,{children:"title"})," akan disimpan ke kolom ",(0,i.jsx)(e.code,{children:"c_title"}),"."]}),"\n",(0,i.jsxs)(e.h2,{id:"konfigurasi-untuk-comment",children:["Konfigurasi Untuk ",(0,i.jsx)(e.code,{children:"Comment"})]}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-xml",metastring:'title="config/doctrine/Comment.orm.xml"',children:'\n\n\n\n \n\n \n\n \n\n \n \n\n \n'})})]})}function l(n={}){const{wrapper:e}={...(0,a.R)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(d,{...n})}):d(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>s,x:()=>r});var i=t(6540);const a={},o=i.createContext(a);function s(n){const e=i.useContext(o);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(a):n.components||a:s(n.components),i.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/a8678e95.99ba5256.js b/assets/js/a8678e95.99ba5256.js deleted file mode 100644 index a4f03d8..0000000 --- a/assets/js/a8678e95.99ba5256.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[258],{874:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var r=t(4848),s=t(8453);const o={title:"Repository"},i=void 0,a={id:"tutorial/repository",title:"Repository",description:"Repository pattern adalah pola design yang memberikan abstraksi untuk mengakses",source:"@site/docs/03-tutorial/05-repository.md",sourceDirName:"03-tutorial",slug:"/tutorial/repository",permalink:"/doksli/docs/tutorial/repository",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/05-repository.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Repository"},sidebar:"tutorialSidebar",previous:{title:"Migrations",permalink:"/doksli/docs/tutorial/migrations"},next:{title:"Bekerja Dengan Entity",permalink:"/doksli/docs/tutorial/bekerja"}},p={},c=[{value:"Membuat Interface Repository",id:"membuat-interface-repository",level:2},{value:"Membuat Implementasi Repository",id:"membuat-implementasi-repository",level:2}];function l(e){const n={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Repository pattern adalah pola design yang memberikan abstraksi untuk mengakses\ndata. Kita menggunakan repository untuk mengambil dan menyimpan data ke dalam\ndatabase."}),"\n",(0,r.jsx)(n.p,{children:"Hal tersebut dilakukan melalui satu pintu. Keluar masuk entity dari dan ke\ndatabase dilakukan hanya melalui repository. Apabila ada perubahan cara\npenyimpanan data, hal tersebut mudah dilakukan karena hanya perlu mengubah\nimplementasi repository."}),"\n",(0,r.jsx)(n.h2,{id:"membuat-interface-repository",children:"Membuat Interface Repository"}),"\n",(0,r.jsx)(n.p,{children:"Pada arsitektur yang kita gunakan, repository berada di layer domain service.\nKarena repository berhubungan dengan infrastruktur, kita hanya akan membuat\ninterfacenya saja di layer domain service:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/DomainService/Repository/PostRepository.php"',children:"namespace App\\DomainService\\Repository;\n\nuse App\\Domain\\Entity\\Post;\nuse Rekalogika\\Contracts\\Collections\\Repository;\n\n/**\n * @extends Repository\n */\ninterface PostRepository extends Repository\n{\n}\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Kita selalu menggunakan string UUID untuk primary key. Dengan demikian, template\n",(0,r.jsx)(n.code,{children:"TKey"})," dalam interface repository selalu berupa ",(0,r.jsx)(n.code,{children:"string"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["Sedangkan untuk ",(0,r.jsx)(n.code,{children:"Comment"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/DomainService/Repository/CommentRepository.php"',children:"namespace App\\DomainService\\Repository;\n\nuse App\\Domain\\Entity\\Comment;\nuse Rekalogika\\Contracts\\Collections\\Repository;\n\n/**\n * @extends Repository\n */\ninterface CommentRepository extends Repository\n{\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"membuat-implementasi-repository",children:"Membuat Implementasi Repository"}),"\n",(0,r.jsx)(n.p,{children:"Setelah itu kita buatkan implementasinya."}),"\n",(0,r.jsxs)(n.p,{children:["Untuk ",(0,r.jsx)(n.code,{children:"Post"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/Infrastructure/Repository/PostRepository.php"',children:"namespace App\\Infrastructure\\Repository;\n\nuse App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\Common\\Collections\\Order;\nuse Doctrine\\Persistence\\ManagerRegistry;\nuse Rekalogika\\Collections\\ORM\\AbstractRepository;\n\n/**\n * @extends AbstractRepository\n */\nclass PostRepository extends AbstractRepository implements PostRepository\n{\n public function __construct(ManagerRegistry $registry)\n {\n parent::__construct(\n managerRegistry: $registry,\n class: Post::class,\n orderBy: ['id' => Order::Descending],\n );\n }\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Untuk ",(0,r.jsx)(n.code,{children:"Comment"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-php",metastring:'title="src/Infrastructure/Repository/CommentRepository.php"',children:"namespace App\\Infrastructure\\Repository;\n\nuse App\\Domain\\Entity\\Comment;\nuse App\\DomainService\\Repository\\CommentRepository;\nuse Doctrine\\Common\\Collections\\Order;\nuse Doctrine\\Persistence\\ManagerRegistry;\nuse Rekalogika\\Collections\\ORM\\AbstractRepository;\n\n/**\n * @extends AbstractRepository\n */\nclass CommentRepository extends AbstractRepository implements CommentRepository\n{\n public function __construct(ManagerRegistry $registry)\n {\n parent::__construct(\n managerRegistry: $registry,\n class: Comment::class,\n orderBy: ['id' => Order::Descending],\n );\n }\n}\n"})})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var r=t(6540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aaa7fdeb.6efb89df.js b/assets/js/aaa7fdeb.6efb89df.js new file mode 100644 index 0000000..5c8ff5a --- /dev/null +++ b/assets/js/aaa7fdeb.6efb89df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[562],{4837:(t,n,e)=>{e.r(n),e.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=e(4848),s=e(8453);const o={title:"Domain Testing"},a=void 0,r={id:"tutorial/domain/domain-testing",title:"Domain Testing",description:"Setelah ada domain yang sudah diimplementasikan, kita buat unit test sederhana.",source:"@site/docs/03-tutorial/01-domain/02-domain-testing.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/domain-testing",permalink:"/doksli/docs/tutorial/domain/domain-testing",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/02-domain-testing.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Domain Testing"},sidebar:"tutorialSidebar",previous:{title:"Entity",permalink:"/doksli/docs/tutorial/domain/entity"},next:{title:"Konfigurasi ORM",permalink:"/doksli/docs/tutorial/domain/orm"}},d={},l=[];function u(t){const n={code:"code",p:"p",pre:"pre",...(0,s.R)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Setelah ada domain yang sudah diimplementasikan, kita buat unit test sederhana.\nBiasanya bisa dengan cepat dibuat dengan AI. Contoh:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-php",metastring:'title="tests/Domain/Entity/PostTest.php"',children:"namespace App\\Tests\\Domain\\Entity;\n\nuse App\\Domain\\Post;\nuse PHPUnit\\Framework\\TestCase;\n\nclass PostTest extends TestCase\n{\n public function testCreatePost(): void\n {\n $post = new Post('Title', 'Content');\n\n $this->assertEquals('Title', $post->getTitle());\n $this->assertEquals('Content', $post->getContent());\n }\n\n public function testUpdatePost(): void\n {\n $post = new Post('Title', 'Content');\n $post->setTitle('New Title');\n $post->setContent('New Content');\n\n $this->assertEquals('New Title', $post->getTitle());\n $this->assertEquals('New Content', $post->getContent());\n }\n\n // tbd\n}\n"})})]})}function c(t={}){const{wrapper:n}={...(0,s.R)(),...t.components};return n?(0,i.jsx)(n,{...t,children:(0,i.jsx)(u,{...t})}):u(t)}},8453:(t,n,e)=>{e.d(n,{R:()=>a,x:()=>r});var i=e(6540);const s={},o=i.createContext(s);function a(t){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof t?t(n):{...n,...t}}),[n,t])}function r(t){let n;return n=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:a(t.components),i.createElement(o.Provider,{value:n},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/785b363d.e7b8ad22.js b/assets/js/adf393e9.90c09dc4.js similarity index 68% rename from assets/js/785b363d.e7b8ad22.js rename to assets/js/adf393e9.90c09dc4.js index dff66c1..59f801c 100644 --- a/assets/js/785b363d.e7b8ad22.js +++ b/assets/js/adf393e9.90c09dc4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[81],{7230:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>r,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var a=t(4848),i=t(8453);const o={title:"Domain"},s=void 0,c={id:"tutorial/domain",title:"Domain",description:"Untuk memulai, pertama-tama kita perlu desain domain-nya. Komponen utama domain",source:"@site/docs/03-tutorial/01-domain.md",sourceDirName:"03-tutorial",slug:"/tutorial/domain",permalink:"/doksli/docs/tutorial/domain",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Domain"},sidebar:"tutorialSidebar",previous:{title:"Tutorial",permalink:"/doksli/docs/tutorial/"},next:{title:"Domain Testing",permalink:"/doksli/docs/tutorial/domain-testing"}},r={},l=[{value:"Entity Post",id:"entity-post",level:2},{value:"Entity Comment",id:"entity-comment",level:2},{value:"Relasi Pada Sisi Post",id:"relasi-pada-sisi-post",level:2},{value:"Relasi Pada Sisi Comment",id:"relasi-pada-sisi-comment",level:2}];function d(n){const e={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...n.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.p,{children:"Untuk memulai, pertama-tama kita perlu desain domain-nya. Komponen utama domain\nadalah entity dan value object. Bedanya, entity memiliki state, dan biasanya\nakan disimpan di database. Sedangkan value object tidak memiliki state."}),"\n",(0,a.jsx)(e.admonition,{type:"caution",children:(0,a.jsx)(e.p,{children:"Kita menggunakan paradigma DDD. Pada tahap ini kita tidak perlu memikirkan\nteknologi yang digunakan, seperti bagaimana menyimpan ke database dan\nsebagainya. Kita hanya perlu fokus pada model bisnisnya saja."})}),"\n",(0,a.jsxs)(e.h2,{id:"entity-post",children:["Entity ",(0,a.jsx)(e.code,{children:"Post"})]}),"\n",(0,a.jsxs)(e.p,{children:["Berikut contoh entity untuk ",(0,a.jsx)(e.code,{children:"Post"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",metastring:'title="src/Domain/Entity/Post.php"',children:"namespace App\\Domain\\Entity;\n\nuse Rekalogika\\CommonBundle\\Domain\\Entity\\AbstractAggregateRoot;\nuse Symfony\\Component\\Clock\\DatePoint;\n\nclass Post extends AbstractAggregateRoot\n{\n private \\DateTimeInterface $createdTime;\n private string $title;\n private string $content;\n\n public function __construct(\n string $title,\n string $content,\n ) {\n $this->title = $title;\n $this->createdTime = new DatePoint();\n }\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Terlihat bahwa class ini sudah bisa mewakili fungsi dasar dari blog post. Setiap\nblog post memiliki judul, konten, dan waktu pembuatan. Waktu pembuatan otomatis\ndibuat saat objek dibuat. Sedangkan terlihat ",(0,a.jsx)(e.code,{children:"title"})," dan ",(0,a.jsx)(e.code,{children:"content"})," adalah\nproperty yang wajib ada (tidak boleh kosong), dan harus ada saat objek pertama\nkali dibuat."]}),"\n",(0,a.jsx)(e.admonition,{type:"info",children:(0,a.jsxs)(e.p,{children:[(0,a.jsx)(e.code,{children:"DateTimeInterface"})," adalah interface dari semua objek waktu di PHP.\nImplementasi di PHP berupa ",(0,a.jsx)(e.code,{children:"DateTimeImmutable"})," dan ",(0,a.jsx)(e.code,{children:"DateTime"}),". Di sini kita\nmenggunakan ",(0,a.jsx)(e.code,{children:"DatePoint"})," dari Symfony Clock. Alasannya karena ",(0,a.jsx)(e.code,{children:"DatePoint"})," lebih\nmudah diuji daripada ",(0,a.jsx)(e.code,{children:"DateTimeImmutable"})," dan ",(0,a.jsx)(e.code,{children:"DateTime"}),"."]})}),"\n",(0,a.jsxs)(e.p,{children:["Properti ",(0,a.jsx)(e.code,{children:"createdTime"})," tidak boleh diubah setelah, hanya bisa dilihat, maka kita\njadikan ",(0,a.jsx)(e.code,{children:"readonly"})," dan hanya kita buatkan getternya, tidak perlu setter:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"class Post extends AbstractAggregateRoot\n{\n private readonly \\DateTimeInterface $createdTime;\n\n public function getCreatedTime(): \\DateTimeInterface\n {\n return $this->createdTime;\n }\n}\n"})}),"\n",(0,a.jsx)(e.admonition,{type:"info",children:(0,a.jsxs)(e.p,{children:["Objek ",(0,a.jsx)(e.code,{children:"DateTimeInterface"})," adalah salah satu contoh dari value object."]})}),"\n",(0,a.jsxs)(e.p,{children:["Karena ",(0,a.jsx)(e.code,{children:"title"})," dan ",(0,a.jsx)(e.code,{children:"content"})," boleh diubah setelah pos dibuat, maka kita buatkan\ngetter dan setternya:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"class Post extends AbstractAggregateRoot\n{\n public function getTitle(): string\n {\n return $this->title;\n }\n\n public function setTitle(string $title): void\n {\n $this->title = $title;\n }\n\n public function getContent(): string\n {\n return $this->content;\n }\n\n public function setContent(string $content): void\n {\n $this->content = $content;\n }\n}\n"})}),"\n",(0,a.jsxs)(e.h2,{id:"entity-comment",children:["Entity ",(0,a.jsx)(e.code,{children:"Comment"})]}),"\n",(0,a.jsx)(e.p,{children:"Karena setiap pos bisa memiliki komentar, maka kita buat entity komentar:"}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",metastring:'title="src/Domain/Entity/Comment.php"',children:"namespace App\\Domain\\Entity;\n\nuse Rekalogika\\CommonBundle\\Domain\\Entity\\AbstractEntity;\nuse Symfony\\Component\\Clock\\DatePoint;\n\nclass Comment extends AbstractEntity\n{\n private string $content;\n private readonly \\DateTimeInterface $createdTime;\n\n public function __construct(string $content)\n {\n $this->content = $content;\n $this->createdTime = new DatePoint();\n }\n\n public function getCreatedTime(): \\DateTimeInterface\n {\n return $this->createdTime;\n }\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Kurang lebih sama perilakunya dengan ",(0,a.jsx)(e.code,{children:"Post"}),". Komentar memiliki konten dan waktu."]}),"\n",(0,a.jsxs)(e.h2,{id:"relasi-pada-sisi-post",children:["Relasi Pada Sisi ",(0,a.jsx)(e.code,{children:"Post"})]}),"\n",(0,a.jsxs)(e.p,{children:["Karena setiap pos bisa memiliki beberapa komentar, maka kita perlu membuat\nrelasinya. Kita bisa membuat property ",(0,a.jsx)(e.code,{children:"comments"})," di ",(0,a.jsx)(e.code,{children:"Post"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"use Doctrine\\Common\\Collections\\Collection;\nuse Rekalogika\\Contracts\\Collections\\Recollection;\nuse Rekalogika\\Domain\\Collections\\ArrayCollection;\nuse Rekalogika\\Domain\\Collections\\RecollectionDecorator;\n\nclass Post extends AbstractAggregateRoot\n{\n /**\n * @var Collection\n */\n private Collection $comments;\n\n public function __construct(\n // ...\n ) {\n // ...\n $this->comments = new ArrayCollection();\n }\n\n public function addComment(Comment $comment): void\n {\n $this->getComments()->add($comment);\n $comment->setPost($this);\n }\n\n /**\n * @return Recollection\n */\n public function getComments(): Recollection\n {\n return RecollectionDecorator::create(\n collection: $this->insurables,\n indexBy: 'id',\n orderBy: ['id' => Order::Descending]\n );\n }\n\n public function removeComment(Comment $comment): void\n {\n if ($this->getComments()->removeElement($comment)) {\n if ($comment->getPost() === $this) {\n $comment->setPost(null);\n }\n }\n }\n}\n"})}),"\n",(0,a.jsx)(e.p,{children:"Yang perlu diperhatikan:"}),"\n",(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsxs)(e.li,{children:["Untuk menampung komentar, harus menggunakan tipe ",(0,a.jsx)(e.code,{children:"Collection"}),", tidak boleh\narray biasa."]}),"\n",(0,a.jsxs)(e.li,{children:["Di atasnya kita tambahkan ",(0,a.jsx)(e.code,{children:"@var Collection"})," untuk memberi tahu\nbahwa ",(0,a.jsx)(e.code,{children:"comments"})," adalah collection dari beberapa objek ",(0,a.jsx)(e.code,{children:"Comment"})," dengan key\nbertipe ",(0,a.jsx)(e.code,{children:"string"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(e.admonition,{title:"Perbedaan Dengan Symfony dan Doctrine Standard",type:"caution",children:[(0,a.jsxs)(e.p,{children:["Kita menggunakan ",(0,a.jsx)(e.code,{children:"ArrayCollection"})," versi kita, bukan yang dari Doctrine,\n",(0,a.jsx)(e.a,{href:"https://rekalogika.dev/collections/implementations/array-collection",children:"penjelasannya di\nsini"}),"."]}),(0,a.jsxs)(e.p,{children:["Untuk ",(0,a.jsx)(e.code,{children:"getComments()"}),", kita menggunakan ",(0,a.jsx)(e.code,{children:"RecollectionDecorator"}),", bukan plain\n",(0,a.jsx)(e.code,{children:"Collection"}),". Alasannya:"]}),(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsxs)(e.li,{children:["Mengimplementasikan ",(0,a.jsx)(e.code,{children:"PageableInterface"})," yang bisa digunakan langsung untuk\nbatch processing dan pagination"]}),"\n",(0,a.jsx)(e.li,{children:"Otomatis melakukan limit, sehingga tidak akan menghabiskan memori."}),"\n"]}),(0,a.jsxs)(e.p,{children:["Cek info lengkapnya ",(0,a.jsx)(e.a,{href:"https://rekalogika.dev/collections",children:"di sini"}),"."]}),(0,a.jsxs)(e.p,{children:["Yang mengakses ",(0,a.jsx)(e.code,{children:"$this->comments"})," hanyalah method ",(0,a.jsx)(e.code,{children:"getComments()"}),". Method lain\nharus menggunakan method ",(0,a.jsx)(e.code,{children:"getComments()"})," untuk mengakses data komentar. Ini kita\nlakukan untuk menghindari kesalahan pemrograman yang dapat mengakibatkan\nout-of-memory."]})]}),"\n",(0,a.jsxs)(e.h2,{id:"relasi-pada-sisi-comment",children:["Relasi Pada Sisi ",(0,a.jsx)(e.code,{children:"Comment"})]}),"\n",(0,a.jsxs)(e.p,{children:["Lalu untuk ",(0,a.jsx)(e.code,{children:"Comment"}),", kita bisa menambahkan property ",(0,a.jsx)(e.code,{children:"post"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"class Comment extends AbstractEntity\n{\n private ?Post $post = null;\n\n public function setPost(?Post $post): void\n {\n $this->post = $post;\n }\n\n public function getPost(): Post\n {\n return $this->post;\n }\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Jika ",(0,a.jsx)(e.code,{children:"$post"})," null, maka komentar tersebut tidak terhubung dengan pos manapun."]})]})}function m(n={}){const{wrapper:e}={...(0,i.R)(),...n.components};return e?(0,a.jsx)(e,{...n,children:(0,a.jsx)(d,{...n})}):d(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>s,x:()=>c});var a=t(6540);const i={},o=a.createContext(i);function s(n){const e=a.useContext(o);return a.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(i):n.components||i:s(n.components),a.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[911],{8076:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>r,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var a=t(4848),i=t(8453);const o={title:"Entity"},s=void 0,c={id:"tutorial/domain/entity",title:"Entity",description:"Untuk memulai, pertama-tama kita perlu desain domain-nya. Komponen utama domain",source:"@site/docs/03-tutorial/01-domain/01-entity.md",sourceDirName:"03-tutorial/01-domain",slug:"/tutorial/domain/entity",permalink:"/doksli/docs/tutorial/domain/entity",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/01-domain/01-entity.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Entity"},sidebar:"tutorialSidebar",previous:{title:"Domain",permalink:"/doksli/docs/tutorial/domain/"},next:{title:"Domain Testing",permalink:"/doksli/docs/tutorial/domain/domain-testing"}},r={},l=[{value:"Entity Post",id:"entity-post",level:2},{value:"Entity Comment",id:"entity-comment",level:2},{value:"Relasi Pada Sisi Post",id:"relasi-pada-sisi-post",level:2},{value:"Relasi Pada Sisi Comment",id:"relasi-pada-sisi-comment",level:2}];function d(n){const e={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...n.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.p,{children:"Untuk memulai, pertama-tama kita perlu desain domain-nya. Komponen utama domain\nadalah entity dan value object. Bedanya, entity memiliki state, dan biasanya\nakan disimpan di database. Sedangkan value object tidak memiliki state."}),"\n",(0,a.jsx)(e.admonition,{type:"caution",children:(0,a.jsx)(e.p,{children:"Kita menggunakan paradigma DDD. Pada tahap ini kita tidak perlu memikirkan\nteknologi yang digunakan, seperti bagaimana menyimpan ke database dan\nsebagainya. Kita hanya perlu fokus pada model bisnisnya saja."})}),"\n",(0,a.jsxs)(e.h2,{id:"entity-post",children:["Entity ",(0,a.jsx)(e.code,{children:"Post"})]}),"\n",(0,a.jsxs)(e.p,{children:["Berikut contoh entity untuk ",(0,a.jsx)(e.code,{children:"Post"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",metastring:'title="src/Domain/Entity/Post.php"',children:"namespace App\\Domain\\Entity;\n\nuse Rekalogika\\CommonBundle\\Domain\\Entity\\AbstractAggregateRoot;\nuse Symfony\\Component\\Clock\\DatePoint;\n\nclass Post extends AbstractAggregateRoot\n{\n private \\DateTimeInterface $createdTime;\n private string $title;\n private string $content;\n\n public function __construct(\n string $title,\n string $content,\n ) {\n $this->title = $title;\n $this->createdTime = new DatePoint();\n }\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Terlihat bahwa class ini sudah bisa mewakili fungsi dasar dari blog post. Setiap\nblog post memiliki judul, konten, dan waktu pembuatan. Waktu pembuatan otomatis\ndibuat saat objek dibuat. Sedangkan terlihat ",(0,a.jsx)(e.code,{children:"title"})," dan ",(0,a.jsx)(e.code,{children:"content"})," adalah\nproperty yang wajib ada (tidak boleh kosong), dan harus ada saat objek pertama\nkali dibuat."]}),"\n",(0,a.jsx)(e.admonition,{type:"info",children:(0,a.jsxs)(e.p,{children:[(0,a.jsx)(e.code,{children:"DateTimeInterface"})," adalah interface dari semua objek waktu di PHP.\nImplementasi di PHP berupa ",(0,a.jsx)(e.code,{children:"DateTimeImmutable"})," dan ",(0,a.jsx)(e.code,{children:"DateTime"}),". Di sini kita\nmenggunakan ",(0,a.jsx)(e.code,{children:"DatePoint"})," dari Symfony Clock. Alasannya karena ",(0,a.jsx)(e.code,{children:"DatePoint"})," lebih\nmudah diuji daripada ",(0,a.jsx)(e.code,{children:"DateTimeImmutable"})," dan ",(0,a.jsx)(e.code,{children:"DateTime"}),"."]})}),"\n",(0,a.jsxs)(e.p,{children:["Properti ",(0,a.jsx)(e.code,{children:"createdTime"})," tidak boleh diubah setelah, hanya bisa dilihat, maka kita\njadikan ",(0,a.jsx)(e.code,{children:"readonly"})," dan hanya kita buatkan getternya, tidak perlu setter:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"class Post extends AbstractAggregateRoot\n{\n private readonly \\DateTimeInterface $createdTime;\n\n public function getCreatedTime(): \\DateTimeInterface\n {\n return $this->createdTime;\n }\n}\n"})}),"\n",(0,a.jsx)(e.admonition,{type:"info",children:(0,a.jsxs)(e.p,{children:["Objek ",(0,a.jsx)(e.code,{children:"DateTimeInterface"})," adalah salah satu contoh dari value object."]})}),"\n",(0,a.jsxs)(e.p,{children:["Karena ",(0,a.jsx)(e.code,{children:"title"})," dan ",(0,a.jsx)(e.code,{children:"content"})," boleh diubah setelah pos dibuat, maka kita buatkan\ngetter dan setternya:"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"class Post extends AbstractAggregateRoot\n{\n public function getTitle(): string\n {\n return $this->title;\n }\n\n public function setTitle(string $title): void\n {\n $this->title = $title;\n }\n\n public function getContent(): string\n {\n return $this->content;\n }\n\n public function setContent(string $content): void\n {\n $this->content = $content;\n }\n}\n"})}),"\n",(0,a.jsxs)(e.h2,{id:"entity-comment",children:["Entity ",(0,a.jsx)(e.code,{children:"Comment"})]}),"\n",(0,a.jsx)(e.p,{children:"Karena setiap pos bisa memiliki komentar, maka kita buat entity komentar:"}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",metastring:'title="src/Domain/Entity/Comment.php"',children:"namespace App\\Domain\\Entity;\n\nuse Rekalogika\\CommonBundle\\Domain\\Entity\\AbstractEntity;\nuse Symfony\\Component\\Clock\\DatePoint;\n\nclass Comment extends AbstractEntity\n{\n private string $content;\n private readonly \\DateTimeInterface $createdTime;\n\n public function __construct(string $content)\n {\n $this->content = $content;\n $this->createdTime = new DatePoint();\n }\n\n public function getCreatedTime(): \\DateTimeInterface\n {\n return $this->createdTime;\n }\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Kurang lebih sama perilakunya dengan ",(0,a.jsx)(e.code,{children:"Post"}),". Komentar memiliki konten dan waktu."]}),"\n",(0,a.jsxs)(e.h2,{id:"relasi-pada-sisi-post",children:["Relasi Pada Sisi ",(0,a.jsx)(e.code,{children:"Post"})]}),"\n",(0,a.jsxs)(e.p,{children:["Karena setiap pos bisa memiliki beberapa komentar, maka kita perlu membuat\nrelasinya. Kita bisa membuat property ",(0,a.jsx)(e.code,{children:"comments"})," di ",(0,a.jsx)(e.code,{children:"Post"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"use Doctrine\\Common\\Collections\\Collection;\nuse Rekalogika\\Contracts\\Collections\\Recollection;\nuse Rekalogika\\Domain\\Collections\\ArrayCollection;\nuse Rekalogika\\Domain\\Collections\\RecollectionDecorator;\n\nclass Post extends AbstractAggregateRoot\n{\n /**\n * @var Collection\n */\n private Collection $comments;\n\n public function __construct(\n // ...\n ) {\n // ...\n $this->comments = new ArrayCollection();\n }\n\n public function addComment(Comment $comment): void\n {\n $this->getComments()->add($comment);\n $comment->setPost($this);\n }\n\n /**\n * @return Recollection\n */\n public function getComments(): Recollection\n {\n return RecollectionDecorator::create(\n collection: $this->insurables,\n indexBy: 'id',\n orderBy: ['id' => Order::Descending]\n );\n }\n\n public function removeComment(Comment $comment): void\n {\n if ($this->getComments()->removeElement($comment)) {\n if ($comment->getPost() === $this) {\n $comment->setPost(null);\n }\n }\n }\n}\n"})}),"\n",(0,a.jsx)(e.p,{children:"Yang perlu diperhatikan:"}),"\n",(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsxs)(e.li,{children:["Untuk menampung komentar, harus menggunakan tipe ",(0,a.jsx)(e.code,{children:"Collection"}),", tidak boleh\narray biasa."]}),"\n",(0,a.jsxs)(e.li,{children:["Di atasnya kita tambahkan ",(0,a.jsx)(e.code,{children:"@var Collection"})," untuk memberi tahu\nbahwa ",(0,a.jsx)(e.code,{children:"comments"})," adalah collection dari beberapa objek ",(0,a.jsx)(e.code,{children:"Comment"})," dengan key\nbertipe ",(0,a.jsx)(e.code,{children:"string"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(e.admonition,{title:"Perbedaan Dengan Symfony dan Doctrine Standar",type:"caution",children:[(0,a.jsxs)(e.p,{children:["Kita menggunakan ",(0,a.jsx)(e.code,{children:"ArrayCollection"})," versi kita, bukan yang dari Doctrine,\n",(0,a.jsx)(e.a,{href:"https://rekalogika.dev/collections/implementations/array-collection",children:"penjelasannya di\nsini"}),"."]}),(0,a.jsxs)(e.p,{children:["Untuk ",(0,a.jsx)(e.code,{children:"getComments()"}),", kita menggunakan ",(0,a.jsx)(e.code,{children:"RecollectionDecorator"}),", bukan plain\n",(0,a.jsx)(e.code,{children:"Collection"}),". Alasannya:"]}),(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsxs)(e.li,{children:["Mengimplementasikan ",(0,a.jsx)(e.code,{children:"PageableInterface"})," yang bisa digunakan langsung untuk\nbatch processing dan pagination"]}),"\n",(0,a.jsx)(e.li,{children:"Otomatis melakukan limit, sehingga tidak akan menghabiskan memori."}),"\n"]}),(0,a.jsxs)(e.p,{children:["Cek info lengkapnya ",(0,a.jsx)(e.a,{href:"https://rekalogika.dev/collections",children:"di sini"}),"."]}),(0,a.jsxs)(e.p,{children:["Yang mengakses ",(0,a.jsx)(e.code,{children:"$this->comments"})," hanyalah method ",(0,a.jsx)(e.code,{children:"getComments()"}),". Method lain\nharus menggunakan method ",(0,a.jsx)(e.code,{children:"getComments()"})," untuk mengakses data komentar. Ini kita\nlakukan untuk menghindari kesalahan pemrograman yang dapat mengakibatkan\nout-of-memory."]})]}),"\n",(0,a.jsxs)(e.h2,{id:"relasi-pada-sisi-comment",children:["Relasi Pada Sisi ",(0,a.jsx)(e.code,{children:"Comment"})]}),"\n",(0,a.jsxs)(e.p,{children:["Lalu untuk ",(0,a.jsx)(e.code,{children:"Comment"}),", kita bisa menambahkan property ",(0,a.jsx)(e.code,{children:"post"}),":"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-php",children:"class Comment extends AbstractEntity\n{\n private ?Post $post = null;\n\n public function setPost(?Post $post): void\n {\n $this->post = $post;\n }\n\n public function getPost(): Post\n {\n return $this->post;\n }\n}\n"})}),"\n",(0,a.jsxs)(e.p,{children:["Jika ",(0,a.jsx)(e.code,{children:"$post"})," null, maka komentar tersebut tidak terhubung dengan pos manapun."]})]})}function m(n={}){const{wrapper:e}={...(0,i.R)(),...n.components};return e?(0,a.jsx)(e,{...n,children:(0,a.jsx)(d,{...n})}):d(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>s,x:()=>c});var a=t(6540);const i={},o=a.createContext(i);function s(n){const e=a.useContext(o);return a.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(i):n.components||i:s(n.components),a.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbb724c6.8ff2b955.js b/assets/js/bbb724c6.8ff2b955.js deleted file mode 100644 index 187d2b3..0000000 --- a/assets/js/bbb724c6.8ff2b955.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[151],{1236:(t,n,e)=>{e.r(n),e.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var s=e(4848),i=e(8453);const o={title:"Domain Testing"},a=void 0,r={id:"tutorial/domain-testing",title:"Domain Testing",description:"Setelah ada domain yang sudah diimplementasikan, kita buat unit test sederhana.",source:"@site/docs/03-tutorial/02-domain-testing.md",sourceDirName:"03-tutorial",slug:"/tutorial/domain-testing",permalink:"/doksli/docs/tutorial/domain-testing",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/02-domain-testing.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Domain Testing"},sidebar:"tutorialSidebar",previous:{title:"Domain",permalink:"/doksli/docs/tutorial/domain"},next:{title:"Konfigurasi ORM",permalink:"/doksli/docs/tutorial/orm"}},d={},l=[];function u(t){const n={code:"code",p:"p",pre:"pre",...(0,i.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Setelah ada domain yang sudah diimplementasikan, kita buat unit test sederhana.\nBiasanya bisa dengan cepat dibuat dengan AI. Contoh:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-php",metastring:'title="tests/Domain/Entity/PostTest.php"',children:"namespace App\\Tests\\Domain\\Entity;\n\nuse App\\Domain\\Post;\nuse PHPUnit\\Framework\\TestCase;\n\nclass PostTest extends TestCase\n{\n public function testCreatePost(): void\n {\n $post = new Post('Title', 'Content');\n\n $this->assertEquals('Title', $post->getTitle());\n $this->assertEquals('Content', $post->getContent());\n }\n\n public function testUpdatePost(): void\n {\n $post = new Post('Title', 'Content');\n $post->setTitle('New Title');\n $post->setContent('New Content');\n\n $this->assertEquals('New Title', $post->getTitle());\n $this->assertEquals('New Content', $post->getContent());\n }\n\n // tbd\n}\n"})})]})}function c(t={}){const{wrapper:n}={...(0,i.R)(),...t.components};return n?(0,s.jsx)(n,{...t,children:(0,s.jsx)(u,{...t})}):u(t)}},8453:(t,n,e)=>{e.d(n,{R:()=>a,x:()=>r});var s=e(6540);const i={},o=s.createContext(i);function a(t){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof t?t(n):{...n,...t}}),[n,t])}function r(t){let n;return n=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:a(t.components),s.createElement(o.Provider,{value:n},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/dc8eeda6.383ce9d1.js b/assets/js/dc8eeda6.383ce9d1.js deleted file mode 100644 index 86fc35e..0000000 --- a/assets/js/dc8eeda6.383ce9d1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[83],{6333:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>p,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var t=n(4848),s=n(8453);const o={title:"Bekerja Dengan Entity"},i=void 0,r={id:"tutorial/bekerja",title:"Bekerja Dengan Entity",description:"Setelah membuat domain, mapping database, dan repositorynya, kita sudah bisa",source:"@site/docs/03-tutorial/06-bekerja.md",sourceDirName:"03-tutorial",slug:"/tutorial/bekerja",permalink:"/doksli/docs/tutorial/bekerja",draft:!1,unlisted:!1,editUrl:"https://github.com/rekalogika/doksli/edit/main/docs/03-tutorial/06-bekerja.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Bekerja Dengan Entity"},sidebar:"tutorialSidebar",previous:{title:"Repository",permalink:"/doksli/docs/tutorial/repository"}},p={},d=[{value:"Membuat Post Baru dan Menyimpannya ke Database",id:"membuat-post-baru-dan-menyimpannya-ke-database",level:2},{value:"Mengambil Post dari Database",id:"mengambil-post-dari-database",level:2},{value:"Mengubah Post dan Menyimpannya ke Database",id:"mengubah-post-dan-menyimpannya-ke-database",level:2},{value:"Menghapus Post dari Database",id:"menghapus-post-dari-database",level:2},{value:"Melakukan Iterasi Terhadap Semua Post",id:"melakukan-iterasi-terhadap-semua-post",level:2}];function c(e){const a={code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:"Setelah membuat domain, mapping database, dan repositorynya, kita sudah bisa\nbekerja dengan entity tersebut."}),"\n",(0,t.jsxs)(a.h2,{id:"membuat-post-baru-dan-menyimpannya-ke-database",children:["Membuat ",(0,t.jsx)(a.code,{children:"Post"})," Baru dan Menyimpannya ke Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\ORM\\EntityManagerInterface;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n$post = new Post('Title', 'Content');\n$postRepository->add($post);\n$entityManager->flush();\n"})}),"\n",(0,t.jsxs)(a.h2,{id:"mengambil-post-dari-database",children:["Mengambil ",(0,t.jsx)(a.code,{children:"Post"})," dari Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\n\n/** @var PostRepository $postRepository */\n\n// $post akan null jika tidak ditemukan di database\n$post = $postRepository->get('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n\n// akan throw exception jika tidak ditemukan di database, dan otomatis\n// menjadi error 404 di browser\n$post = $postRepository->fetch('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n"})}),"\n",(0,t.jsxs)(a.h2,{id:"mengubah-post-dan-menyimpannya-ke-database",children:["Mengubah ",(0,t.jsx)(a.code,{children:"Post"})," dan Menyimpannya ke Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n$post = $postRepository->get('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n$post->setTitle('New Title');\n$post->setContent('New Content');\n$entityManager->flush();\n"})}),"\n",(0,t.jsxs)(a.h2,{id:"menghapus-post-dari-database",children:["Menghapus ",(0,t.jsx)(a.code,{children:"Post"})," dari Database"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\Domain\\Entity\\Post;\nuse App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\ORM\\EntityManagerInterface;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n// cara pertama\n$post = $postRepository->get('91b2679e-47a5-11ef-b06f-8c8caab77b0f');\n$postRepository->removeElement($post);\n$entityManager->flush();\n\n// cara kedua\n$postRepository->remove('91b2679e-47a5-11ef-b06f-8c8caa77b0f');\n$entityManager->flush();\n"})}),"\n",(0,t.jsxs)(a.h2,{id:"melakukan-iterasi-terhadap-semua-post",children:["Melakukan Iterasi Terhadap Semua ",(0,t.jsx)(a.code,{children:"Post"})]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-php",children:"use App\\DomainService\\Repository\\PostRepository;\nuse Doctrine\\ORM\\EntityManagerInterface;\n\n/** @var PostRepository $postRepository */\n/** @var EntityManagerInterface $entityManager */\n\n// cara langsung, akan mengambil semua data dari database sekaligus, dan\n// berpotensi out of memory jika data terlalu banyak:\n\nforeach ($postRepository as $post) {\n // lakukan sesuatu dengan $post\n}\n\n// menggunakan batch, akan mengambil data per halaman, dan tidak akan\n// mengalami out of memory:\n\nforeach ($postRepository->withItemsPerPage(1000)->getPages() as $page) {\n foreach ($page as $post) {\n // lakukan sesuatu dengan $post\n }\n\n $entityManager->clear();\n}\n"})})]})}function l(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,a,n)=>{n.d(a,{R:()=>i,x:()=>r});var t=n(6540);const s={},o=t.createContext(s);function i(e){const a=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f2e54508.3e7a1df5.js b/assets/js/f2e54508.3e7a1df5.js deleted file mode 100644 index f0fb665..0000000 --- a/assets/js/f2e54508.3e7a1df5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[896],{9170:i=>{i.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Intro","href":"/doksli/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Arsitektur","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Arsitektur","href":"/doksli/docs/arsitektur/layering","docId":"arsitektur/layering","unlisted":false}],"href":"/doksli/docs/arsitektur/"},{"type":"category","label":"Tutorial","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Domain","href":"/doksli/docs/tutorial/domain","docId":"tutorial/domain","unlisted":false},{"type":"link","label":"Domain Testing","href":"/doksli/docs/tutorial/domain-testing","docId":"tutorial/domain-testing","unlisted":false},{"type":"link","label":"Konfigurasi ORM","href":"/doksli/docs/tutorial/orm","docId":"tutorial/orm","unlisted":false},{"type":"link","label":"Migrations","href":"/doksli/docs/tutorial/migrations","docId":"tutorial/migrations","unlisted":false},{"type":"link","label":"Repository","href":"/doksli/docs/tutorial/repository","docId":"tutorial/repository","unlisted":false},{"type":"link","label":"Bekerja Dengan Entity","href":"/doksli/docs/tutorial/bekerja","docId":"tutorial/bekerja","unlisted":false}],"href":"/doksli/docs/tutorial/"}]},"docs":{"arsitektur/index":{"id":"arsitektur/index","title":"Arsitektur","description":"","sidebar":"tutorialSidebar"},"arsitektur/layering":{"id":"arsitektur/layering","title":"Arsitektur","description":"Aplikasi didesain menggunakan DDD (domain-driven design) dan _onion","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Intro","description":"","sidebar":"tutorialSidebar"},"tutorial/bekerja":{"id":"tutorial/bekerja","title":"Bekerja Dengan Entity","description":"Setelah membuat domain, mapping database, dan repositorynya, kita sudah bisa","sidebar":"tutorialSidebar"},"tutorial/domain":{"id":"tutorial/domain","title":"Domain","description":"Untuk memulai, pertama-tama kita perlu desain domain-nya. Komponen utama domain","sidebar":"tutorialSidebar"},"tutorial/domain-testing":{"id":"tutorial/domain-testing","title":"Domain Testing","description":"Setelah ada domain yang sudah diimplementasikan, kita buat unit test sederhana.","sidebar":"tutorialSidebar"},"tutorial/index":{"id":"tutorial/index","title":"Tutorial","description":"Untuk tutorial ini, kita akan membuat aplikasi blog sederhana. Aplikasi ini","sidebar":"tutorialSidebar"},"tutorial/migrations":{"id":"tutorial/migrations","title":"Migrations","description":"Migrations adalah cara untuk mengelola perubahan skema database.","sidebar":"tutorialSidebar"},"tutorial/orm":{"id":"tutorial/orm","title":"Konfigurasi ORM","description":"Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan","sidebar":"tutorialSidebar"},"tutorial/repository":{"id":"tutorial/repository","title":"Repository","description":"Repository pattern adalah pola design yang memberikan abstraksi untuk mengakses","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/f2e54508.538d7ba3.js b/assets/js/f2e54508.538d7ba3.js new file mode 100644 index 0000000..c73456b --- /dev/null +++ b/assets/js/f2e54508.538d7ba3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[896],{9170:i=>{i.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Intro","href":"/doksli/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Arsitektur","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Arsitektur","href":"/doksli/docs/arsitektur/layering","docId":"arsitektur/layering","unlisted":false}],"href":"/doksli/docs/arsitektur/"},{"type":"category","label":"Tutorial","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Domain","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Entity","href":"/doksli/docs/tutorial/domain/entity","docId":"tutorial/domain/entity","unlisted":false},{"type":"link","label":"Domain Testing","href":"/doksli/docs/tutorial/domain/domain-testing","docId":"tutorial/domain/domain-testing","unlisted":false},{"type":"link","label":"Konfigurasi ORM","href":"/doksli/docs/tutorial/domain/orm","docId":"tutorial/domain/orm","unlisted":false},{"type":"link","label":"Migrations","href":"/doksli/docs/tutorial/domain/migrations","docId":"tutorial/domain/migrations","unlisted":false},{"type":"link","label":"Repository","href":"/doksli/docs/tutorial/domain/repository","docId":"tutorial/domain/repository","unlisted":false},{"type":"link","label":"Bekerja Dengan Entity","href":"/doksli/docs/tutorial/domain/bekerja","docId":"tutorial/domain/bekerja","unlisted":false}],"href":"/doksli/docs/tutorial/domain/"}],"href":"/doksli/docs/tutorial/"}]},"docs":{"arsitektur/index":{"id":"arsitektur/index","title":"Arsitektur","description":"","sidebar":"tutorialSidebar"},"arsitektur/layering":{"id":"arsitektur/layering","title":"Arsitektur","description":"Aplikasi didesain menggunakan DDD (domain-driven design) dan _onion","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Intro","description":"","sidebar":"tutorialSidebar"},"tutorial/domain/bekerja":{"id":"tutorial/domain/bekerja","title":"Bekerja Dengan Entity","description":"Setelah membuat domain, mapping database, dan repositorynya, kita sudah bisa","sidebar":"tutorialSidebar"},"tutorial/domain/domain-testing":{"id":"tutorial/domain/domain-testing","title":"Domain Testing","description":"Setelah ada domain yang sudah diimplementasikan, kita buat unit test sederhana.","sidebar":"tutorialSidebar"},"tutorial/domain/entity":{"id":"tutorial/domain/entity","title":"Entity","description":"Untuk memulai, pertama-tama kita perlu desain domain-nya. Komponen utama domain","sidebar":"tutorialSidebar"},"tutorial/domain/index":{"id":"tutorial/domain/index","title":"Domain","description":"Untuk tutorial ini, kita akan membuat aplikasi blog sederhana. Aplikasi ini","sidebar":"tutorialSidebar"},"tutorial/domain/migrations":{"id":"tutorial/domain/migrations","title":"Migrations","description":"Migrations adalah cara untuk mengelola perubahan skema database.","sidebar":"tutorialSidebar"},"tutorial/domain/orm":{"id":"tutorial/domain/orm","title":"Konfigurasi ORM","description":"Setelah pembuatan domain selesai, baru kita memikirkan bagaimana cara menyimpan","sidebar":"tutorialSidebar"},"tutorial/domain/repository":{"id":"tutorial/domain/repository","title":"Repository","description":"Repository pattern adalah pola design yang memberikan abstraksi untuk mengakses","sidebar":"tutorialSidebar"},"tutorial/index":{"id":"tutorial/index","title":"Tutorial","description":"","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/main.0be49dd0.js b/assets/js/main.0be49dd0.js deleted file mode 100644 index a4ef806..0000000 --- a/assets/js/main.0be49dd0.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.0be49dd0.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"01a85c17":[()=>Promise.all([n.e(869),n.e(209)]).then(n.bind(n,9158)),"@theme/BlogTagsListPage",9158],"045397af":[()=>n.e(406).then(n.bind(n,586)),"@site/docs/02-arsitektur/01-layering.md",586],17896441:[()=>Promise.all([n.e(869),n.e(538),n.e(401)]).then(n.bind(n,2447)),"@theme/DocItem",2447],"1f391b9e":[()=>Promise.all([n.e(869),n.e(538),n.e(61)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],28760537:[()=>Promise.all([n.e(869),n.e(769)]).then(n.bind(n,8499)),"@site/docs/02-arsitektur/index.md",8499],"36994c47":[()=>n.e(858).then(n.t.bind(n,5516,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",5516],"393be207":[()=>n.e(134).then(n.bind(n,633)),"@site/src/pages/markdown-page.md",633],"3e71c51e":[()=>n.e(569).then(n.bind(n,7738)),"@site/docs/03-tutorial/04-migrations.md",7738],"5346779c":[()=>Promise.all([n.e(869),n.e(403)]).then(n.bind(n,912)),"@site/docs/03-tutorial/index.md",912],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"6875c492":[()=>Promise.all([n.e(869),n.e(538),n.e(242),n.e(813)]).then(n.bind(n,3069)),"@theme/BlogTagsPostsPage",3069],"785b363d":[()=>n.e(81).then(n.bind(n,7230)),"@site/docs/03-tutorial/01-domain.md",7230],"814f3328":[()=>n.e(472).then(n.t.bind(n,5513,19)),"~blog/default/blog-post-list-prop-default.json",5513],"84b2f205":[()=>n.e(938).then(n.bind(n,4290)),"@site/docs/03-tutorial/03-orm.md",4290],"9e4087bc":[()=>n.e(711).then(n.bind(n,9331)),"@theme/BlogArchivePage",9331],a0df4889:[()=>n.e(291).then(n.t.bind(n,3961,19)),"@generated/docusaurus-plugin-content-blog/default/p/doksli-blog-tags-hello-506.json",3961],a6aa9e1f:[()=>Promise.all([n.e(869),n.e(538),n.e(242),n.e(643)]).then(n.bind(n,5124)),"@theme/BlogListPage",5124],a7456010:[()=>n.e(235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(98).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a8678e95:[()=>n.e(258).then(n.bind(n,874)),"@site/docs/03-tutorial/05-repository.md",874],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],aba21aa0:[()=>n.e(742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],acecf23e:[()=>n.e(903).then(n.t.bind(n,1912,19)),"~blog/default/blogMetadata-default.json",1912],b05f25d0:[()=>n.e(807).then(n.bind(n,223)),"@site/blog/2024-07-20-hello-world.md",223],bbb724c6:[()=>n.e(151).then(n.bind(n,1236)),"@site/docs/03-tutorial/02-domain-testing.md",1236],c22f1788:[()=>n.e(164).then(n.t.bind(n,9342,19)),"@generated/docusaurus-plugin-content-blog/default/p/doksli-blog-b51.json",9342],c4f5d8e4:[()=>Promise.all([n.e(869),n.e(634)]).then(n.bind(n,6467)),"@site/src/pages/index.js",6467],ccc49370:[()=>Promise.all([n.e(869),n.e(538),n.e(242),n.e(249)]).then(n.bind(n,3858)),"@theme/BlogPostPage",3858],dc8eeda6:[()=>n.e(83).then(n.bind(n,6333)),"@site/docs/03-tutorial/06-bekerja.md",6333],e5ceffa1:[()=>n.e(623).then(n.t.bind(n,7837,19)),"@generated/docusaurus-plugin-content-blog/default/p/doksli-blog-archive-dbb.json",7837],f2e54508:[()=>n.e(896).then(n.t.bind(n,9170,19)),"@generated/docusaurus-plugin-content-docs/default/p/doksli-docs-5eb.json",9170],f6d7b54b:[()=>n.e(1).then(n.t.bind(n,2920,19)),"@generated/docusaurus-plugin-content-blog/default/p/doksli-blog-tags-f6f.json",2920],f82fb5cb:[()=>n.e(861).then(n.bind(n,9393)),"@site/blog/2024-07-20-hello-world.md?truncated=true",9393],fed7d42c:[()=>n.e(54).then(n.bind(n,8121)),"@site/docs/01-intro.md",8121]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return a()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],g=(0,u.A)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:s,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const s=a.__props;return delete a.__props,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(o,{...a,...s,...n})})}})}const f=[{path:"/doksli/blog",component:d("/doksli/blog","e17"),exact:!0},{path:"/doksli/blog/archive",component:d("/doksli/blog/archive","f37"),exact:!0},{path:"/doksli/blog/hello-world",component:d("/doksli/blog/hello-world","08f"),exact:!0},{path:"/doksli/blog/tags",component:d("/doksli/blog/tags","c28"),exact:!0},{path:"/doksli/blog/tags/hello",component:d("/doksli/blog/tags/hello","2c4"),exact:!0},{path:"/doksli/markdown-page",component:d("/doksli/markdown-page","6db"),exact:!0},{path:"/doksli/docs",component:d("/doksli/docs","e32"),routes:[{path:"/doksli/docs",component:d("/doksli/docs","c12"),routes:[{path:"/doksli/docs",component:d("/doksli/docs","c41"),routes:[{path:"/doksli/docs/arsitektur/",component:d("/doksli/docs/arsitektur/","da8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/arsitektur/layering",component:d("/doksli/docs/arsitektur/layering","9a6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/intro",component:d("/doksli/docs/intro","1a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/",component:d("/doksli/docs/tutorial/","33d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/bekerja",component:d("/doksli/docs/tutorial/bekerja","e81"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/domain",component:d("/doksli/docs/tutorial/domain","440"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/domain-testing",component:d("/doksli/docs/tutorial/domain-testing","025"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/migrations",component:d("/doksli/docs/tutorial/migrations","0f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/orm",component:d("/doksli/docs/tutorial/orm","5d9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/doksli/docs/tutorial/repository",component:d("/doksli/docs/tutorial/repository","9a4"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/doksli/",component:d("/doksli/","504"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(545),i=n(4625),l=n(4784),s=n(8193);const u=[n(119),n(2649),n(6294),n(1043)];var c=n(8328),d=n(6347),f=n(2831),p=n(4848);function g(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5260),h=n(4586),y=n(6025),b=n(6342),v=n(1213),k=n(2131),w=n(4090),x=n(2967),S=n(440),E=n(1463);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.A)(),r=(0,k.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.applyTrailingSlash)((0,y.Ay)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function A(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:t,image:n}=(0,b.p)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.w})]}),n&&(0,p.jsx)(v.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(_,{}),(0,p.jsx)(E.A,{tag:x.Cy,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;var P=n(6125),N=n(6988),O=n(205);function j(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,O.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),j("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,f.u)(c.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?j("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=j("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(L,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(d.qh,{location:t,render:()=>e})})}}const D=I,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function $(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,p.jsx)(D,{location:e,children:G})}function K(){return(0,p.jsx)(V.A,{children:(0,p.jsx)(N.l,{children:(0,p.jsxs)(P.x,{children:[(0,p.jsxs)(g,{children:[(0,p.jsx)(H,{}),(0,p.jsx)(A,{}),(0,p.jsx)(U,{}),(0,p.jsx)(Y,{})]}),(0,p.jsx)(q,{})]})})})}var Q=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(6921);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,f.u)(c.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),R(e))},re=Object.freeze(ne);function ae(e){let{children:t}=e;return"hash"===l.default.future.experimental_router?(0,p.jsx)(i.I9,{children:t}):(0,p.jsx)(i.Kd,{children:t})}const oe=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(o.vd,{children:(0,p.jsx)(ae,{children:(0,p.jsx)(K,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(oe)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};R(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>f});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/doksli/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/doksli/docs","mainDocId":"intro","docs":[{"id":"arsitektur/index","path":"/doksli/docs/arsitektur/","sidebar":"tutorialSidebar"},{"id":"arsitektur/layering","path":"/doksli/docs/arsitektur/layering","sidebar":"tutorialSidebar"},{"id":"intro","path":"/doksli/docs/intro","sidebar":"tutorialSidebar"},{"id":"tutorial/bekerja","path":"/doksli/docs/tutorial/bekerja","sidebar":"tutorialSidebar"},{"id":"tutorial/domain","path":"/doksli/docs/tutorial/domain","sidebar":"tutorialSidebar"},{"id":"tutorial/domain-testing","path":"/doksli/docs/tutorial/domain-testing","sidebar":"tutorialSidebar"},{"id":"tutorial/index","path":"/doksli/docs/tutorial/","sidebar":"tutorialSidebar"},{"id":"tutorial/migrations","path":"/doksli/docs/tutorial/migrations","sidebar":"tutorialSidebar"},{"id":"tutorial/orm","path":"/doksli/docs/tutorial/orm","sidebar":"tutorialSidebar"},{"id":"tutorial/repository","path":"/doksli/docs/tutorial/repository","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/doksli/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"id","locales":["id"],"path":"i18n","currentLocale":"id","localeConfigs":{"id":{"label":"Indonesia","direction":"ltr","htmlLang":"id","calendar":"gregory","path":"id"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"}}}');var u=n(4848);const c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(c);function f(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(6540),a=n(8193),o=n(5260),i=n(440),l=n(781),s=n(3102),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function f(e){let{children:t}=e;return(0,u.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function p(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(f,{children:(0,u.jsxs)(m,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(l.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const g=e=>(0,u.jsx)(p,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??g)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),a=n(4625),o=n(440),i=n(4586),l=n(6654),s=n(8193),u=n(3427),c=n(6025),d=n(4848);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:k,baseUrl:w}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,c.hH)(),E=(0,u.A)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=f||p;const A=(0,l.A)(C),T=C?.replace("pathname://","");let P=void 0!==T?(N=T,y&&(e=>e.startsWith("/"))(N)?S(N):N):void 0;var N;"hash"===x&&P?.startsWith("./")&&(P=P?.slice(1)),P&&A&&(P=(0,o.applyTrailingSlash)(P,{trailingSlash:k,baseUrl:w}));const O=(0,r.useRef)(!1),j=n?a.k2:a.N_,L=s.A.canUseIntersectionObserver,R=(0,r.useRef)(),I=()=>{O.current||null==P||(window.docusaurus.preload(P),O.current=!0)};(0,r.useEffect)((()=>(!L&&A&&null!=P&&window.docusaurus.prefetch(P),()=>{L&&R.current&&R.current.disconnect()})),[R,P,L,A]);const D=P?.startsWith("#")??!1,F=!b.target||"_self"===b.target,M=!P||!A||!F;return h||!D&&M||E.collectLink(P),b.id&&E.collectAnchor(b.id),M?(0,d.jsx)("a",{ref:_,href:P,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(j,{...b,onMouseEnter:I,onTouchStart:I,innerRef:e=>{_.current=e,L&&e&&A&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),R.current.observe(e))},to:P,...n&&{isActive:m,activeClassName:g}})}const p=r.forwardRef(f)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>s});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>l,hH:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:e}=(0,a.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,l=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:l}=e;if(!r||r.startsWith("#")||(0,o.z)(r))return r;if("hash"===l)return r.startsWith("/")?`.${r}`:`./${r}`;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const s=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+s:s}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:l}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6803:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(3102);function o(){const e=r.useContext(a.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:l,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>m,vT:()=>f,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>g,jh:()=>p});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function g(e){const t=d(e);return l(t)}function m(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},2649:(e,t,n)=>{"use strict";var r=n(1765),a=n(4784);const o=/^diff-([\w-]+)/i,i=e=>{const t=[],n=[e];for(;n.length>0;){const e=n.pop();if("string"==typeof e)t.push(e);else if(Array.isArray(e))for(let t=e.length-1;t>=0;t--)n.push(e[t]);else n.push(e.content)}return t.join("")};const l=/^diff-([\w-]+)/i;!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((t=>{const r=l.exec(t);"php"===t&&n(9700),r?(e.languages.diff||console.error("prism-include-languages:","You need to import 'diff' language first to use 'diff-xxxx' languages"),e.languages[t]=e.languages.diff):n(4494)(`./prism-${t}`)})),function(e){e.hooks.add("after-tokenize",(function(t){let n,r;const a=t.language;if("diff"===a)return;{const t=o.exec(a);if(!t)return;if(n=t[1],r=e.languages[n],!r)return void console.error("prism-diff-highlight:",`You need to add language '${n}' to use '${a}'`)}const l=[];t.tokens.forEach((t=>{if("string"==typeof t)l.push(...e.tokenize(t,r));else if("unchanged"===t.type)l.push(...e.tokenize(i(t),r));else if(["deleted-sign","inserted-sign"].includes(t.type)){if(t.alias=["deleted-sign"===t.type?"diff-highlight-deleted":"diff-highlight-inserted"],t.content.length>1){const n=[];t.content.forEach((t=>{"prefix"===t.type?n.push(t):n.push(...e.tokenize(i(t),r))})),t.content=n}l.push(t)}else"coord"===t.type&&l.push(t)})),console.log(l),t.tokens=l}))}(e)}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),a=n(1312),o=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.A)(),{navbar:{hideOnScroll:f}}=(0,o.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const p=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",f?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>pt});var r=n(6540),a=n(4164),o=n(7489),i=n(1213),l=n(6347),s=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const g=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=p();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(m,{className:b.skipToContent})}var k=n(6342),w=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,k.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,k.p)(),{isActive:t,close:n}=(0,w.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:A.announcementBarPlaceholder}),(0,c.jsx)(C,{className:A.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var P=n(9876),N=n(3104);var O=n(9532),j=n(5600);const L=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,P.M)(),t=(0,j.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(L.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(L);if(!e)throw new O.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,j.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=D();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(5293),z=n(2303);function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,z.A)(),l=(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.A)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)($,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)(B,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function q(e){let{className:t}=e;const n=(0,k.p)().navbar.style,r=(0,k.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.G)();return r?null:(0,c.jsx)(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var G=n(3465);function Y(){return(0,c.jsx)(G.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,P.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Y,{}),(0,c.jsx)(q,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.Ay)(r),f=(0,X.Ay)(t),p=(0,X.Ay)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.A)(a),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,g&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return a?(0,c.jsx)(Z.A,{href:s?p:a,...u,...m}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...u,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),le=n(9169),se=n(4586);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.A)("navbar__link",o),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[u,d,g]),(0,c.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.A)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),p()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,c.jsx)(r,{...n})}var ge=n(2131);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.A)(n,be.navbarSearchContainer),children:t})}var ke=n(4070),we=n(1754);var xe=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.A)(),f=(0,ge.o)(),{search:p,hash:g}=(0,l.zy)(),m=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(pe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(me,{className:he}),h]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.A,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ke.zK)(r),i=(0,we.QB)(t,r),l=o?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>l||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ke.zK)(r),i=(0,we.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,we.Vd)(r)[0],i=t??o.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,l.zy)(),f=(0,ke.zK)(n),p=(0,ke.jh)(n),{savePreferredVersionName:g}=(0,xe.g1)(n),m=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...o],h=(0,we.Vd)(n)[0],y=t&&m.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,b=t&&m.length>1?void 0:Se(h).path;return m.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(pe,{...i,mobile:t,label:y,to:b,items:m,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function Ce(){const e=(0,P.M)(),t=(0,k.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,k.p)().navbar.items.length,t=D();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function Pe(){const e=(0,P.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(F,{header:(0,c.jsx)(Q,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Oe(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function je(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,k.p)(),i=(0,P.M)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Ne.navbarHideable,!d&&Ne.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Oe,{onClick:i.toggle}),(0,c.jsx)(Pe,{})]})}var Le=n(440);const Re={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function De(e){let{error:t}=e;const n=(0,Le.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Re.errorBoundaryError,children:n})}class Fe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function ze(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function $e(){const{toggle:e,shown:t}=(0,P.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const Be={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Fe,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(_e,{...e})},t)))})}function He(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ve(){const e=(0,P.M)(),t=(0,k.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(He,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)($e,{}),(0,c.jsx)(Y,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(q,{className:Be.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function We(){return(0,c.jsx)(je,{children:(0,c.jsx)(Ve,{})})}function qe(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,l=(0,X.Ay)(n),s=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?s:r}:{to:l},...i,children:[a,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function Ge(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(qe,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(Ge,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Ye,{column:e},t)))})}function Qe(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(qe,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Qe,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ke,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,k.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(ot,{style:a,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(at,{copyright:t})})}const lt=r.memo(it),st=(0,O.fM)([M.a,w.o,N.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(j.y_,{children:(0,c.jsx)(P.e,{children:(0,c.jsx)(R,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Ie,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(De,{error:t})})]})})})}const ft={mainWrapper:"mainWrapper_z2l0"};function pt(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(T,{}),(0,c.jsx)(We,{}),(0,c.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,ft.mainWrapper,r),children:(0,c.jsx)(o.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),l=n(1122),s=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Ay)(t.src),dark:(0,a.Ay)(t.srcDark||t.src)},i=(0,s.jsx)(l.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...f}=e,p=(0,a.Ay)(l?.href||"/"),g=n?"":t,m=l?.alt??g;return(0,s.jsxs)(r.A,{to:p,...f,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:m,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(5260),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,o.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>u});var r=n(6540),a=n(8193),o=n(205),i=n(3109),l=n(4848);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.A.canUseDOM)return e?c:d}function m(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),(0,l.jsx)(t,{ref:c,style:u?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(c.current,n),i?.(n))},className:s,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&u(t)}),[a,t]),a?(0,l.jsx)(m,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:m;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>m,o:()=>g});var r=n(6540),a=n(2303),o=n(679),i=n(9532),l=n(6342),s=n(4848);const u=(0,o.Wf)("docusaurus.announcement.dismiss"),c=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),f=e=>u.set(String(e)),p=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(p.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(679),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,g=e=>a.A.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{d.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>y,g1:()=>v});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),l=n(1754),s=n(9532),u=n(679),c=n(4848);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,u.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return(0,c.jsx)(g.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.C5?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(g);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>u});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>p,M:()=>g});var r=n(6540),a=n(5600),o=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342),c=n(4848);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=f();return(0,c.jsx)(d.Provider,{value:n,children:t})}function g(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>s,y_:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,l]=o,s=(0,a.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{d1:()=>A,Nr:()=>g,w8:()=>b,C5:()=>f,$S:()=>m,cC:()=>p,B5:()=>C,Vd:()=>S,QB:()=>_,fW:()=>E,OF:()=>x,Y:()=>k});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),l=n(5597),s=n(2252),u=n(6588);function c(e){return Array.from(new Set(e))}var d=n(9169);const f=!!i.Gy;function p(e){const t=(0,s.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function g(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=g(t);if(e)return e}}(e):void 0:e.href}function m(){const{pathname:e}=(0,a.zy)(),t=(0,u.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=w({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.ys)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function k(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function w(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?w({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>c([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,s.r)(),i=t.routes,l=i.find((e=>(0,a.B6)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.v)(i),sidebarName:u,sidebarItems:c}}function A(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!g(e)))}},1213:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>c,Jx:()=>p});var r=n(6540),a=n(4164),o=n(5260),i=n(6803),l=n(6025),s=n(4586);var u=n(4848);function c(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const c=function(e){const{siteConfig:t}=(0,s.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.hH)(),f=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.A,{children:[t&&(0,u.jsx)("title",{children:c}),t&&(0,u.jsx)("meta",{property:"og:title",content:c}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.A)(i,t);return(0,u.jsxs)(d.Provider,{value:l,children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("html",{className:l})}),n]})}function p(e){let{children:t}=e;const n=(0,i.A)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>c});var r=n(6540),a=n(205),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>u,gk:()=>p});var r=n(6540),a=n(8193),o=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(d()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(4586);const r="default";function a(e,t){return`docs-${e}-${t}`}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>u});n(6540);const r=JSON.parse('{"N":"localStorage","M":""}'),a=r.N;function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function i(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const a=i(t?.persistence);return null===a?s:{get:()=>{try{return a.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=a.getItem(n);a.setItem(n,e),o({key:n,oldValue:t,newValue:e,storage:a})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=a.getItem(n);a.removeItem(n),o({key:n,oldValue:e,newValue:null,storage:a})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===a&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,a.zy)(),u=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(2566);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),l="/"===i||i===r?i:(s=i,n?a(s):o(s));var s;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(2566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>k,TM:()=>C,yJ:()=>p,sC:()=>T,AO:()=>f});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,m(),k.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(k.entries[k.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=k.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=p(n);a&&a!==g&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5302:(e,t,n)=>{var r=n(4634);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var g=e[i],m=n[2],h=n[3],y=n[4],b=n[5],v=n[6],k=n[7];l&&(r.push(l),l="");var w=null!=m&&null!=g&&g!==m,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,_=y||b;r.push({name:h||o++,prefix:m||"",delimiter:E,optional:S,repeat:x,partial:w,asterisk:!!k,pattern:_?u(_):k?".*":"[^"+s(E)+"]+?"})}}return i{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i{!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(Prism)},3800:()=>{!function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars,e.languages.mustache=e.languages.handlebars}(Prism)},2514:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},7936:()=>{Prism.languages.liquid={comment:{pattern:/(^\{%\s*comment\s*%\})[\s\S]+(?=\{%\s*endcomment\s*%\}$)/,lookbehind:!0},delimiter:{pattern:/^\{(?:\{\{|[%\{])-?|-?(?:\}\}|[%\}])\}$/,alias:"punctuation"},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},keyword:/\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\b/,object:/\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\b/,function:[{pattern:/(\|\s*)\w+/,lookbehind:!0,alias:"filter"},{pattern:/(\.\s*)(?:first|last|size)/,lookbehind:!0}],boolean:/\b(?:false|nil|true)\b/,range:{pattern:/\.\./,alias:"operator"},number:/\b\d+(?:\.\d+)?\b/,operator:/[!=]=|<>|[<>]=?|[|?:=-]|\b(?:and|contains(?=\s)|or)\b/,punctuation:/[.,\[\]()]/,empty:{pattern:/\bempty\b/,alias:"keyword"}},Prism.hooks.add("before-tokenize",(function(e){var t=!1;Prism.languages["markup-templating"].buildPlaceholders(e,"liquid",/\{%\s*comment\s*%\}[\s\S]*?\{%\s*endcomment\s*%\}|\{(?:%[\s\S]*?%|\{\{[\s\S]*?\}\}|\{[\s\S]*?\})\}/g,(function(e){var n=/^\{%-?\s*(\w+)/.exec(e);if(n){var r=n[1];if("raw"===r&&!t)return t=!0,!0;if("endraw"===r)return t=!1,!0}return!t}))})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"liquid")}))},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),g=f.indexOf(p);if(g>-1){++a;var m=f.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(g+p.length),b=[];m&&b.push.apply(b,i([m])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},4312:()=>{Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},Prism.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,t){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},3554:()=>{!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,a=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,o=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:a,punctuation:o};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:a,punctuation:o}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},1369:()=>{Prism.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},Prism.hooks.add("before-tokenize",(function(e){if("twig"===e.language){Prism.languages["markup-templating"].buildPlaceholders(e,"twig",/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g)}})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"twig")}))},83:()=>{!function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism)},4494:(e,t,n)=>{var r={"./prism-bash":7022,"./prism-diff":7839,"./prism-handlebars":3800,"./prism-json":2514,"./prism-liquid":7936,"./prism-markup":4312,"./prism-php":3554,"./prism-twig":1369,"./prism-yaml":83};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4494},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n