From 472f036495edf7cda59e60a8d0103e3a4018bfe2 Mon Sep 17 00:00:00 2001 From: adimiko Date: Sun, 16 Feb 2025 20:49:05 +0000 Subject: [PATCH] deploy: 54d8d42a29d116a0ef11a98097305154d0af30fd --- 404.html | 8 ++++---- CNAME | 1 + assets/js/21f002cb.21432dba.js | 1 - assets/js/21f002cb.5da52f87.js | 1 + assets/js/393be207.3b21ade0.js | 1 + assets/js/393be207.e77f8def.js | 1 - assets/js/935f2afb.52439c33.js | 1 + assets/js/935f2afb.eefc9ecf.js | 1 - assets/js/a09c2993.638d7db6.js | 1 + assets/js/a09c2993.70c899fe.js | 1 - assets/js/b55eba63.2bc87412.js | 1 + assets/js/b55eba63.76717373.js | 1 - assets/js/ba2c8cce.4a2544a3.js | 1 - assets/js/ba2c8cce.5fde913d.js | 1 + assets/js/c33bd490.6e5e89fc.js | 1 - assets/js/c33bd490.d973f5e5.js | 1 + assets/js/c90fb1ce.7eee2cdc.js | 1 + assets/js/c90fb1ce.a860b664.js | 1 - assets/js/ccda9e39.1a0f03fd.js | 1 - assets/js/ccda9e39.c5bb4a90.js | 1 + assets/js/d589d3a7.a7bb3660.js | 1 + assets/js/d589d3a7.d43d14a7.js | 1 - assets/js/dac89b75.074bb8f2.js | 1 - assets/js/dac89b75.6d448805.js | 1 + assets/js/e970430a.bc9ba22a.js | 1 - assets/js/e970430a.da0c9c83.js | 1 + assets/js/main.1c357cd1.js | 2 -- assets/js/main.6d259ee6.js | 2 ++ ...ICENSE.txt => main.6d259ee6.js.LICENSE.txt} | 0 assets/js/runtime~main.06e45648.js | 1 - assets/js/runtime~main.4dc062bc.js | 1 + docs/getting-started/index.html | 10 +++++----- docs/inbox/index.html | 10 +++++----- docs/introduction/index.html | 18 +++++++++--------- docs/outbox/index.html | 10 +++++----- docs/samples/distributed-sample/index.html | 12 ++++++------ docs/samples/simple-sample/index.html | 12 ++++++------ docs/storage/entity-framework-core/index.html | 10 +++++----- docs/storage/in-memory/index.html | 10 +++++----- docs/transport/in-memory/index.html | 10 +++++----- docs/transport/kafka/index.html | 10 +++++----- index.html | 8 ++++---- markdown-page/index.html | 8 ++++---- sitemap.xml | 2 +- 44 files changed, 85 insertions(+), 84 deletions(-) create mode 100644 CNAME delete mode 100644 assets/js/21f002cb.21432dba.js create mode 100644 assets/js/21f002cb.5da52f87.js create mode 100644 assets/js/393be207.3b21ade0.js delete mode 100644 assets/js/393be207.e77f8def.js create mode 100644 assets/js/935f2afb.52439c33.js delete mode 100644 assets/js/935f2afb.eefc9ecf.js create mode 100644 assets/js/a09c2993.638d7db6.js delete mode 100644 assets/js/a09c2993.70c899fe.js create mode 100644 assets/js/b55eba63.2bc87412.js delete mode 100644 assets/js/b55eba63.76717373.js delete mode 100644 assets/js/ba2c8cce.4a2544a3.js create mode 100644 assets/js/ba2c8cce.5fde913d.js delete mode 100644 assets/js/c33bd490.6e5e89fc.js create mode 100644 assets/js/c33bd490.d973f5e5.js create mode 100644 assets/js/c90fb1ce.7eee2cdc.js delete mode 100644 assets/js/c90fb1ce.a860b664.js delete mode 100644 assets/js/ccda9e39.1a0f03fd.js create mode 100644 assets/js/ccda9e39.c5bb4a90.js create mode 100644 assets/js/d589d3a7.a7bb3660.js delete mode 100644 assets/js/d589d3a7.d43d14a7.js delete mode 100644 assets/js/dac89b75.074bb8f2.js create mode 100644 assets/js/dac89b75.6d448805.js delete mode 100644 assets/js/e970430a.bc9ba22a.js create mode 100644 assets/js/e970430a.da0c9c83.js delete mode 100644 assets/js/main.1c357cd1.js create mode 100644 assets/js/main.6d259ee6.js rename assets/js/{main.1c357cd1.js.LICENSE.txt => main.6d259ee6.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.06e45648.js create mode 100644 assets/js/runtime~main.4dc062bc.js diff --git a/404.html b/404.html index 707b88cb..bed57894 100644 --- a/404.html +++ b/404.html @@ -3,11 +3,11 @@ -Page Not Found | Transactional Box - - +Page Not Found | Transactional Box + + -
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.

+
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.

\ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..3193e91c --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +transactionalbox.com diff --git a/assets/js/21f002cb.21432dba.js b/assets/js/21f002cb.21432dba.js deleted file mode 100644 index 555246be..00000000 --- a/assets/js/21f002cb.21432dba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[407],{8257:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=t(4848),o=t(8453);const i={sidebar_position:1},s="InMemory",a={id:"transport/in-memory",title:"InMemory",description:"InMemory is registered as default transport.",source:"@site/docs/transport/in-memory.md",sourceDirName:"transport",slug:"/transport/in-memory",permalink:"/docs/transport/in-memory",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/transport/in-memory.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Entity Framework Core (Relational)",permalink:"/docs/storage/entity-framework-core"},next:{title:"Apache Kafka",permalink:"/docs/transport/kafka"}},d={},c=[{value:"Outbox",id:"outbox",level:2},{value:"Register",id:"register",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register",id:"register-1",level:3}];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"inmemory",children:"InMemory"}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"InMemory is registered as default transport."})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Intended only for testing and learning."})}),"\n",(0,r.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,r.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox();\n});\n\n"})}),"\n",(0,r.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,r.jsx)(n.h3,{id:"register-1",children:"Register"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox();\n});\n\n"})})]})}function m(e={}){const{wrapper:n}={...(0,o.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:()=>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/21f002cb.5da52f87.js b/assets/js/21f002cb.5da52f87.js new file mode 100644 index 00000000..1011ee9e --- /dev/null +++ b/assets/js/21f002cb.5da52f87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[407],{8257:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=t(4848),o=t(8453);const i={sidebar_position:1},s="InMemory",a={id:"transport/in-memory",title:"InMemory",description:"InMemory is registered as default transport.",source:"@site/docs/transport/in-memory.md",sourceDirName:"transport",slug:"/transport/in-memory",permalink:"/TransactionalBox/docs/transport/in-memory",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/transport/in-memory.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Entity Framework Core (Relational)",permalink:"/TransactionalBox/docs/storage/entity-framework-core"},next:{title:"Apache Kafka",permalink:"/TransactionalBox/docs/transport/kafka"}},d={},c=[{value:"Outbox",id:"outbox",level:2},{value:"Register",id:"register",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register",id:"register-1",level:3}];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"inmemory",children:"InMemory"}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"InMemory is registered as default transport."})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Intended only for testing and learning."})}),"\n",(0,r.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,r.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox();\n});\n\n"})}),"\n",(0,r.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,r.jsx)(n.h3,{id:"register-1",children:"Register"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox();\n});\n\n"})})]})}function m(e={}){const{wrapper:n}={...(0,o.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:()=>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/393be207.3b21ade0.js b/assets/js/393be207.3b21ade0.js new file mode 100644 index 00000000..ca64e561 --- /dev/null +++ b/assets/js/393be207.3b21ade0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[134],{6602:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var o=t(4848),a=t(8453);const r={title:"Markdown page example"},s="Markdown page example",c={type:"mdx",permalink:"/TransactionalBox/markdown-page",source:"@site/src/pages/markdown-page.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"},unlisted:!1},p={},d=[];function i(e){const n={h1:"h1",p:"p",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(6540);const a={},r=o.createContext(a);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/393be207.e77f8def.js b/assets/js/393be207.e77f8def.js deleted file mode 100644 index 0b56d956..00000000 --- a/assets/js/393be207.e77f8def.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[134],{6602:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var o=t(4848),a=t(8453);const r={title:"Markdown page example"},s="Markdown page example",p={type:"mdx",permalink:"/markdown-page",source:"@site/src/pages/markdown-page.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"},unlisted:!1},c={},d=[];function i(e){const n={h1:"h1",p:"p",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>p});var o=t(6540);const a={},r=o.createContext(a);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.52439c33.js b/assets/js/935f2afb.52439c33.js new file mode 100644 index 00000000..3daa709f --- /dev/null +++ b/assets/js/935f2afb.52439c33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/TransactionalBox/docs/introduction","docId":"introduction","unlisted":false},{"type":"link","label":"Getting Started","href":"/TransactionalBox/docs/getting-started","docId":"getting-started","unlisted":false},{"type":"link","label":"Outbox","href":"/TransactionalBox/docs/outbox","docId":"outbox","unlisted":false},{"type":"link","label":"Inbox","href":"/TransactionalBox/docs/inbox","docId":"inbox","unlisted":false},{"type":"category","label":"Storage","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"InMemory","href":"/TransactionalBox/docs/storage/in-memory","docId":"storage/in-memory","unlisted":false},{"type":"link","label":"Entity Framework Core (Relational)","href":"/TransactionalBox/docs/storage/entity-framework-core","docId":"storage/entity-framework-core","unlisted":false}]},{"type":"category","label":"Transport","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"InMemory","href":"/TransactionalBox/docs/transport/in-memory","docId":"transport/in-memory","unlisted":false},{"type":"link","label":"Apache Kafka","href":"/TransactionalBox/docs/transport/kafka","docId":"transport/kafka","unlisted":false}]},{"type":"category","label":"Samples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple Sample","href":"/TransactionalBox/docs/samples/simple-sample","docId":"samples/simple-sample","unlisted":false},{"type":"link","label":"Distributed Sample","href":"/TransactionalBox/docs/samples/distributed-sample","docId":"samples/distributed-sample","unlisted":false}]}]},"docs":{"getting-started":{"id":"getting-started","title":"Getting Started","description":"Let\'s discover TransactionalBox in less than 3 minutes.","sidebar":"tutorialSidebar"},"inbox":{"id":"inbox","title":"Inbox","description":"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages.","sidebar":"tutorialSidebar"},"introduction":{"id":"introduction","title":"Introduction","description":"Logo","sidebar":"tutorialSidebar"},"outbox":{"id":"outbox","title":"Outbox","description":"The outbox is responsible for adding messages to the storage and then adding at least once to the transport.","sidebar":"tutorialSidebar"},"samples/distributed-sample":{"id":"samples/distributed-sample","title":"Distributed Sample","description":"Distributed sample consists of four modules with two instances each. Example shows a simplified banking domain","sidebar":"tutorialSidebar"},"samples/simple-sample":{"id":"samples/simple-sample","title":"Simple Sample","description":"Simple sample consists of one module to help understand how transactional box works.","sidebar":"tutorialSidebar"},"storage/entity-framework-core":{"id":"storage/entity-framework-core","title":"Entity Framework Core (Relational)","description":"TransactionalBox is not responsible for configuring Entity Framework Core.","sidebar":"tutorialSidebar"},"storage/in-memory":{"id":"storage/in-memory","title":"InMemory","description":"InMemory is registered as default storage.","sidebar":"tutorialSidebar"},"transport/in-memory":{"id":"transport/in-memory","title":"InMemory","description":"InMemory is registered as default transport.","sidebar":"tutorialSidebar"},"transport/kafka":{"id":"transport/kafka","title":"Apache Kafka","description":"Install package","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.eefc9ecf.js b/assets/js/935f2afb.eefc9ecf.js deleted file mode 100644 index dcbe903a..00000000 --- a/assets/js/935f2afb.eefc9ecf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/docs/introduction","docId":"introduction","unlisted":false},{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"getting-started","unlisted":false},{"type":"link","label":"Outbox","href":"/docs/outbox","docId":"outbox","unlisted":false},{"type":"link","label":"Inbox","href":"/docs/inbox","docId":"inbox","unlisted":false},{"type":"category","label":"Storage","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"InMemory","href":"/docs/storage/in-memory","docId":"storage/in-memory","unlisted":false},{"type":"link","label":"Entity Framework Core (Relational)","href":"/docs/storage/entity-framework-core","docId":"storage/entity-framework-core","unlisted":false}]},{"type":"category","label":"Transport","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"InMemory","href":"/docs/transport/in-memory","docId":"transport/in-memory","unlisted":false},{"type":"link","label":"Apache Kafka","href":"/docs/transport/kafka","docId":"transport/kafka","unlisted":false}]},{"type":"category","label":"Samples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple Sample","href":"/docs/samples/simple-sample","docId":"samples/simple-sample","unlisted":false},{"type":"link","label":"Distributed Sample","href":"/docs/samples/distributed-sample","docId":"samples/distributed-sample","unlisted":false}]}]},"docs":{"getting-started":{"id":"getting-started","title":"Getting Started","description":"Let\'s discover TransactionalBox in less than 3 minutes.","sidebar":"tutorialSidebar"},"inbox":{"id":"inbox","title":"Inbox","description":"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages.","sidebar":"tutorialSidebar"},"introduction":{"id":"introduction","title":"Introduction","description":"Logo","sidebar":"tutorialSidebar"},"outbox":{"id":"outbox","title":"Outbox","description":"The outbox is responsible for adding messages to the storage and then adding at least once to the transport.","sidebar":"tutorialSidebar"},"samples/distributed-sample":{"id":"samples/distributed-sample","title":"Distributed Sample","description":"Distributed sample consists of four modules with two instances each. Example shows a simplified banking domain","sidebar":"tutorialSidebar"},"samples/simple-sample":{"id":"samples/simple-sample","title":"Simple Sample","description":"Simple sample consists of one module to help understand how transactional box works.","sidebar":"tutorialSidebar"},"storage/entity-framework-core":{"id":"storage/entity-framework-core","title":"Entity Framework Core (Relational)","description":"TransactionalBox is not responsible for configuring Entity Framework Core.","sidebar":"tutorialSidebar"},"storage/in-memory":{"id":"storage/in-memory","title":"InMemory","description":"InMemory is registered as default storage.","sidebar":"tutorialSidebar"},"transport/in-memory":{"id":"transport/in-memory","title":"InMemory","description":"InMemory is registered as default transport.","sidebar":"tutorialSidebar"},"transport/kafka":{"id":"transport/kafka","title":"Apache Kafka","description":"Install package","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a09c2993.638d7db6.js b/assets/js/a09c2993.638d7db6.js new file mode 100644 index 00000000..613857e0 --- /dev/null +++ b/assets/js/a09c2993.638d7db6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[899],{1456:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(4848),o=s(8453);const i={sidebar_position:1},r="Introduction",a={id:"introduction",title:"Introduction",description:"Logo",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/TransactionalBox/docs/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/introduction.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/TransactionalBox/docs/getting-started"}},d={},c=[{value:"\ud83c\udff0 Architecture",id:"european_castle-architecture",level:2},{value:"Outbox",id:"outbox",level:3},{value:"Inbox",id:"inbox",level:3},{value:"Terms",id:"terms",level:2}];function l(e){const n={admonition:"admonition",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Logo",src:s(798).A+"",width:"1280",height:"640"})})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Transactional box is an implementation of the outbox and inbox pattern in .NET."}),(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.strong,{children:"Ensures reliable network communication (eventual consistency) between services."})]}),"\n",(0,t.jsxs)(n.p,{children:["All complexity is taken over by the transactional box and simplifies communication between services to the maximum extent possible.",(0,t.jsx)(n.br,{}),"\n","It is designed for a low entry threshold and quick learning."]}),"\n",(0,t.jsx)(n.p,{children:"Examples of problems that occur during network communication:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Lost message"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Amount was taken from bank account and transfer was never executed."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"The same message was processed again"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Transfer was ordered and amount was debited from bank account twice."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Unavailable service"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Transfer order attempt fails."})}),"\n",(0,t.jsxs)(n.h2,{id:"european_castle-architecture",children:["\ud83c\udff0"," Architecture"]}),"\n",(0,t.jsx)(n.p,{children:"The transactional box consists of two basic components.\nThe following diagrams show the basic flow (omits details).\nThey are designed to provide a general understanding of how transactional box works."}),"\n",(0,t.jsx)(n.h3,{id:"outbox",children:"Outbox"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The outbox is responsible for adding messages to the storage and then adding at least once to the transport."})}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"AddToOutbox",src:s(4560).A+"",width:"557",height:"392"})})}),"\n",(0,t.jsxs)(n.p,{children:["In one transaction you save message to outbox and result of business operation. In this way, you can ensure all or nothing. After correctly transaction commited, execute the ",(0,t.jsx)(n.code,{children:"TransactionCommitted"})," method on ",(0,t.jsx)(n.code,{children:"IOutbox"}),"."]}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"AddToOutbox",src:s(4376).A+"",width:"771",height:"347"})})}),"\n",(0,t.jsx)(n.p,{children:"After hook, outbox marks and gets messages from storage. Then adds them to the transport and marks as processed."}),"\n",(0,t.jsx)(n.h3,{id:"inbox",children:"Inbox"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages."})}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Inbox",src:s(4769).A+"",width:"1782",height:"668"})})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Inbox gets messages from transport and adds to storage."}),"\n",(0,t.jsx)(n.li,{children:"In a separate process, Inbox will get messages and process them."}),"\n",(0,t.jsx)(n.li,{children:"Then processed messages are clean up."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"terms",children:"Terms"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"OutboxMessage"})})," - message that is added to the outbox and then converted to ",(0,t.jsx)(n.code,{children:"TransportMessage"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"TransportMessage"})})," - object transporting collections of messages of the same type (created on the basis of ",(0,t.jsx)(n.code,{children:"OutboxMessages"}),"). It is sent at least once."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"InboxMessage"})})," - created on the basis of ",(0,t.jsx)(n.code,{children:"TransportMessage"})," and stored in the inbox. It is then processed."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"IdempotentInboxKey"})})," - incoming message identifier. It is needed for deduplication."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},4560:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/AddToOutbox-b622001d4a28560e925edbccb89ca7ca.png"},4376:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/AddToTransport-2bdb97483c582bacb63415c782179277.png"},4769:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/inbox-5630c7c0088ce6d371a5ed785954435c.png"},798:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/rounded-social-logo-8b9da6428b0265a2a74a9757231b8de7.png"},8453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>a});var t=s(6540);const o={},i=t.createContext(o);function r(e){const n=t.useContext(i);return t.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:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a09c2993.70c899fe.js b/assets/js/a09c2993.70c899fe.js deleted file mode 100644 index 163b35fc..00000000 --- a/assets/js/a09c2993.70c899fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[899],{1456:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(4848),o=s(8453);const i={sidebar_position:1},r="Introduction",a={id:"introduction",title:"Introduction",description:"Logo",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/docs/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/introduction.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/docs/getting-started"}},d={},c=[{value:"\ud83c\udff0 Architecture",id:"european_castle-architecture",level:2},{value:"Outbox",id:"outbox",level:3},{value:"Inbox",id:"inbox",level:3},{value:"Terms",id:"terms",level:2}];function l(e){const n={admonition:"admonition",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Logo",src:s(798).A+"",width:"1280",height:"640"})})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Transactional box is an implementation of the outbox and inbox pattern in .NET."}),(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.strong,{children:"Ensures reliable network communication (eventual consistency) between services."})]}),"\n",(0,t.jsxs)(n.p,{children:["All complexity is taken over by the transactional box and simplifies communication between services to the maximum extent possible.",(0,t.jsx)(n.br,{}),"\n","It is designed for a low entry threshold and quick learning."]}),"\n",(0,t.jsx)(n.p,{children:"Examples of problems that occur during network communication:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Lost message"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Amount was taken from bank account and transfer was never executed."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"The same message was processed again"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Transfer was ordered and amount was debited from bank account twice."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Unavailable service"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Transfer order attempt fails."})}),"\n",(0,t.jsxs)(n.h2,{id:"european_castle-architecture",children:["\ud83c\udff0"," Architecture"]}),"\n",(0,t.jsx)(n.p,{children:"The transactional box consists of two basic components.\nThe following diagrams show the basic flow (omits details).\nThey are designed to provide a general understanding of how transactional box works."}),"\n",(0,t.jsx)(n.h3,{id:"outbox",children:"Outbox"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The outbox is responsible for adding messages to the storage and then adding at least once to the transport."})}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"AddToOutbox",src:s(4560).A+"",width:"557",height:"392"})})}),"\n",(0,t.jsxs)(n.p,{children:["In one transaction you save message to outbox and result of business operation. In this way, you can ensure all or nothing. After correctly transaction commited, execute the ",(0,t.jsx)(n.code,{children:"TransactionCommitted"})," method on ",(0,t.jsx)(n.code,{children:"IOutbox"}),"."]}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"AddToOutbox",src:s(4376).A+"",width:"771",height:"347"})})}),"\n",(0,t.jsx)(n.p,{children:"After hook, outbox marks and gets messages from storage. Then adds them to the transport and marks as processed."}),"\n",(0,t.jsx)(n.h3,{id:"inbox",children:"Inbox"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages."})}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Inbox",src:s(4769).A+"",width:"1782",height:"668"})})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Inbox gets messages from transport and adds to storage."}),"\n",(0,t.jsx)(n.li,{children:"In a separate process, Inbox will get messages and process them."}),"\n",(0,t.jsx)(n.li,{children:"Then processed messages are clean up."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"terms",children:"Terms"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"OutboxMessage"})})," - message that is added to the outbox and then converted to ",(0,t.jsx)(n.code,{children:"TransportMessage"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"TransportMessage"})})," - object transporting collections of messages of the same type (created on the basis of ",(0,t.jsx)(n.code,{children:"OutboxMessages"}),"). It is sent at least once."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"InboxMessage"})})," - created on the basis of ",(0,t.jsx)(n.code,{children:"TransportMessage"})," and stored in the inbox. It is then processed."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"IdempotentInboxKey"})})," - incoming message identifier. It is needed for deduplication."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},4560:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/AddToOutbox-b622001d4a28560e925edbccb89ca7ca.png"},4376:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/AddToTransport-2bdb97483c582bacb63415c782179277.png"},4769:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/inbox-5630c7c0088ce6d371a5ed785954435c.png"},798:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/rounded-social-logo-8b9da6428b0265a2a74a9757231b8de7.png"},8453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>a});var t=s(6540);const o={},i=t.createContext(o);function r(e){const n=t.useContext(i);return t.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:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b55eba63.2bc87412.js b/assets/js/b55eba63.2bc87412.js new file mode 100644 index 00000000..8115740a --- /dev/null +++ b/assets/js/b55eba63.2bc87412.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[240],{1286:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=t(4848),r=t(8453);const s={sidebar_position:2},o="Apache Kafka",i={id:"transport/kafka",title:"Apache Kafka",description:"Install package",source:"@site/docs/transport/kafka.md",sourceDirName:"transport",slug:"/transport/kafka",permalink:"/TransactionalBox/docs/transport/kafka",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/transport/kafka.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"InMemory",permalink:"/TransactionalBox/docs/transport/in-memory"},next:{title:"Simple Sample",permalink:"/TransactionalBox/docs/samples/simple-sample"}},c={},l=[{value:"Install package",id:"install-package",level:2},{value:"Outbox",id:"outbox",level:2},{value:"Register",id:"register",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register",id:"register-1",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",pre:"pre",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"apache-kafka",children:"Apache Kafka"}),"\n",(0,a.jsx)(n.h2,{id:"install-package",children:"Install package"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"dotnet add package TransactionalBox.Kafka\n"})}),"\n",(0,a.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,a.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox(\n storage => ...,\n transport => transport.UseKafka(settings => settings.BootstrapServers = bootstrapServers)\n );\n});\n\n"})}),"\n",(0,a.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,a.jsx)(n.h3,{id:"register-1",children:"Register"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox(\n storage => ...,\n transport => transport.UseKafka(settings => settings.BootstrapServers = bootstrapServers)\n );\n});\n\n"})})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>i});var a=t(6540);const r={},s=a.createContext(r);function o(e){const n=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b55eba63.76717373.js b/assets/js/b55eba63.76717373.js deleted file mode 100644 index 7e1e6ac9..00000000 --- a/assets/js/b55eba63.76717373.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[240],{1286:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(4848),r=n(8453);const s={sidebar_position:2},o="Apache Kafka",i={id:"transport/kafka",title:"Apache Kafka",description:"Install package",source:"@site/docs/transport/kafka.md",sourceDirName:"transport",slug:"/transport/kafka",permalink:"/docs/transport/kafka",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/transport/kafka.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"InMemory",permalink:"/docs/transport/in-memory"},next:{title:"Simple Sample",permalink:"/docs/samples/simple-sample"}},c={},l=[{value:"Install package",id:"install-package",level:2},{value:"Outbox",id:"outbox",level:2},{value:"Register",id:"register",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register",id:"register-1",level:3}];function d(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",pre:"pre",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"apache-kafka",children:"Apache Kafka"}),"\n",(0,a.jsx)(t.h2,{id:"install-package",children:"Install package"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-csharp",children:"dotnet add package TransactionalBox.Kafka\n"})}),"\n",(0,a.jsx)(t.h2,{id:"outbox",children:"Outbox"}),"\n",(0,a.jsx)(t.h3,{id:"register",children:"Register"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox(\n storage => ...,\n transport => transport.UseKafka(settings => settings.BootstrapServers = bootstrapServers)\n );\n});\n\n"})}),"\n",(0,a.jsx)(t.h2,{id:"inbox",children:"Inbox"}),"\n",(0,a.jsx)(t.h3,{id:"register-1",children:"Register"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox(\n storage => ...,\n transport => transport.UseKafka(settings => settings.BootstrapServers = bootstrapServers)\n );\n});\n\n"})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>i});var a=n(6540);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba2c8cce.4a2544a3.js b/assets/js/ba2c8cce.4a2544a3.js deleted file mode 100644 index 2d09cc5a..00000000 --- a/assets/js/ba2c8cce.4a2544a3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[938],{1354:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var n=t(4848),i=t(8453);const o={sidebar_position:2},r="Distributed Sample",a={id:"samples/distributed-sample",title:"Distributed Sample",description:"Distributed sample consists of four modules with two instances each. Example shows a simplified banking domain",source:"@site/docs/samples/distributed-sample.md",sourceDirName:"samples",slug:"/samples/distributed-sample",permalink:"/docs/samples/distributed-sample",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/samples/distributed-sample.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Simple Sample",permalink:"/docs/samples/simple-sample"}},d={},l=[];function c(e){const s={admonition:"admonition",br:"br",code:"code",h1:"h1",img:"img",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"distributed-sample",children:"Distributed Sample"}),"\n",(0,n.jsx)(s.p,{children:"Distributed sample consists of four modules with two instances each. Example shows a simplified banking domain"}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsx)(s.p,{children:"Docker is required."})}),"\n",(0,n.jsxs)(s.p,{children:["Clone repo and open ",(0,n.jsx)(s.code,{children:"TransactionalBox.sln"})," via Visual Studio. Set the ",(0,n.jsx)(s.code,{children:"Bank"})," as startup and then run."]}),"\n",(0,n.jsxs)(s.p,{children:["Run browser and open below links:",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"CustomerRegistrations:"})," ",(0,n.jsx)(s.code,{children:"https://localhost:1000/swagger/index.html"}),(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"Customers"}),": ",(0,n.jsx)(s.code,{children:"https://localhost:2000/swagger/index.html"}),(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"BankAccounts:"})," ",(0,n.jsx)(s.code,{children:"https://localhost:3000/swagger/index.html"}),(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"Loans:"})," ",(0,n.jsx)(s.code,{children:"https://localhost:4000/swagger/index.html"})]}),"\n",(0,n.jsx)("div",{align:"center",children:(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"distributed-sample",src:t(6859).A+"",width:"1555",height:"981"})})}),"\n",(0,n.jsxs)(s.p,{children:["Don't forget to use break points to learn.",(0,n.jsx)(s.br,{}),"\n","Have fun ","\ud83d\ude03","!"]})]})}function p(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},6859:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/distributed-sample-d0e48cbc7a92c2e35649423f9e0510f5.png"},8453:(e,s,t)=>{t.d(s,{R:()=>r,x:()=>a});var n=t(6540);const i={},o=n.createContext(i);function r(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba2c8cce.5fde913d.js b/assets/js/ba2c8cce.5fde913d.js new file mode 100644 index 00000000..407a1e00 --- /dev/null +++ b/assets/js/ba2c8cce.5fde913d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[938],{1354:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var n=t(4848),i=t(8453);const o={sidebar_position:2},r="Distributed Sample",a={id:"samples/distributed-sample",title:"Distributed Sample",description:"Distributed sample consists of four modules with two instances each. Example shows a simplified banking domain",source:"@site/docs/samples/distributed-sample.md",sourceDirName:"samples",slug:"/samples/distributed-sample",permalink:"/TransactionalBox/docs/samples/distributed-sample",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/samples/distributed-sample.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Simple Sample",permalink:"/TransactionalBox/docs/samples/simple-sample"}},d={},l=[];function c(e){const s={admonition:"admonition",br:"br",code:"code",h1:"h1",img:"img",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"distributed-sample",children:"Distributed Sample"}),"\n",(0,n.jsx)(s.p,{children:"Distributed sample consists of four modules with two instances each. Example shows a simplified banking domain"}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsx)(s.p,{children:"Docker is required."})}),"\n",(0,n.jsxs)(s.p,{children:["Clone repo and open ",(0,n.jsx)(s.code,{children:"TransactionalBox.sln"})," via Visual Studio. Set the ",(0,n.jsx)(s.code,{children:"Bank"})," as startup and then run."]}),"\n",(0,n.jsxs)(s.p,{children:["Run browser and open below links:",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"CustomerRegistrations:"})," ",(0,n.jsx)(s.code,{children:"https://localhost:1000/swagger/index.html"}),(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"Customers"}),": ",(0,n.jsx)(s.code,{children:"https://localhost:2000/swagger/index.html"}),(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"BankAccounts:"})," ",(0,n.jsx)(s.code,{children:"https://localhost:3000/swagger/index.html"}),(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.strong,{children:"Loans:"})," ",(0,n.jsx)(s.code,{children:"https://localhost:4000/swagger/index.html"})]}),"\n",(0,n.jsx)("div",{align:"center",children:(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"distributed-sample",src:t(6859).A+"",width:"1555",height:"981"})})}),"\n",(0,n.jsxs)(s.p,{children:["Don't forget to use break points to learn.",(0,n.jsx)(s.br,{}),"\n","Have fun ","\ud83d\ude03","!"]})]})}function p(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},6859:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/distributed-sample-d0e48cbc7a92c2e35649423f9e0510f5.png"},8453:(e,s,t)=>{t.d(s,{R:()=>r,x:()=>a});var n=t(6540);const i={},o=n.createContext(i);function r(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c33bd490.6e5e89fc.js b/assets/js/c33bd490.6e5e89fc.js deleted file mode 100644 index 03d929d0..00000000 --- a/assets/js/c33bd490.6e5e89fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[797],{853:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var o=t(4848),r=t(8453);const i={sidebar_position:1},s="InMemory",a={id:"storage/in-memory",title:"InMemory",description:"InMemory is registered as default storage.",source:"@site/docs/storage/in-memory.md",sourceDirName:"storage",slug:"/storage/in-memory",permalink:"/docs/storage/in-memory",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/storage/in-memory.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Inbox",permalink:"/docs/inbox"},next:{title:"Entity Framework Core (Relational)",permalink:"/docs/storage/entity-framework-core"}},d={},c=[{value:"Outbox",id:"outbox",level:2},{value:"Register",id:"register",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register",id:"register-1",level:3}];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"inmemory",children:"InMemory"}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"InMemory is registered as default storage."})}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsx)(n.p,{children:"Intended only for testing and learning."})}),"\n",(0,o.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,o.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox();\n});\n\n"})}),"\n",(0,o.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,o.jsx)(n.h3,{id:"register-1",children:"Register"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox();\n});\n\n"})})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(6540);const r={},i=o.createContext(r);function s(e){const n=o.useContext(i);return o.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(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c33bd490.d973f5e5.js b/assets/js/c33bd490.d973f5e5.js new file mode 100644 index 00000000..35741daf --- /dev/null +++ b/assets/js/c33bd490.d973f5e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[797],{853:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var o=t(4848),r=t(8453);const i={sidebar_position:1},s="InMemory",a={id:"storage/in-memory",title:"InMemory",description:"InMemory is registered as default storage.",source:"@site/docs/storage/in-memory.md",sourceDirName:"storage",slug:"/storage/in-memory",permalink:"/TransactionalBox/docs/storage/in-memory",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/storage/in-memory.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Inbox",permalink:"/TransactionalBox/docs/inbox"},next:{title:"Entity Framework Core (Relational)",permalink:"/TransactionalBox/docs/storage/entity-framework-core"}},d={},c=[{value:"Outbox",id:"outbox",level:2},{value:"Register",id:"register",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register",id:"register-1",level:3}];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"inmemory",children:"InMemory"}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"InMemory is registered as default storage."})}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsx)(n.p,{children:"Intended only for testing and learning."})}),"\n",(0,o.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,o.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox();\n});\n\n"})}),"\n",(0,o.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,o.jsx)(n.h3,{id:"register-1",children:"Register"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox();\n});\n\n"})})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(6540);const r={},i=o.createContext(r);function s(e){const n=o.useContext(i);return o.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(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c90fb1ce.7eee2cdc.js b/assets/js/c90fb1ce.7eee2cdc.js new file mode 100644 index 00000000..fd377ce2 --- /dev/null +++ b/assets/js/c90fb1ce.7eee2cdc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[670],{5230:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>r,metadata:()=>o,toc:()=>a});var i=s(4848),t=s(8453);const r={sidebar_position:4},d="Inbox",o={id:"inbox",title:"Inbox",description:"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages.",source:"@site/docs/inbox.md",sourceDirName:".",slug:"/inbox",permalink:"/TransactionalBox/docs/inbox",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/inbox.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Outbox",permalink:"/TransactionalBox/docs/outbox"},next:{title:"InMemory",permalink:"/TransactionalBox/docs/storage/in-memory"}},l={},a=[{value:"Inbox Message",id:"inbox-message",level:3},{value:"Inbox Definition",id:"inbox-definition",level:3},{value:"Handling message in inbox handler",id:"handling-message-in-inbox-handler",level:3},{value:"Storage",id:"storage",level:2},{value:"Transport",id:"transport",level:2},{value:"Settings",id:"settings",level:2},{value:"AddMessagesToInboxSettings",id:"addmessagestoinboxsettings",level:3},{value:"CleanUpInboxSettings",id:"cleanupinboxsettings",level:3},{value:"CleanUpIdempotencyKeysSettings",id:"cleanupidempotencykeyssettings",level:3},{value:"ConfigureDeserialization",id:"configuredeserialization",level:3}];function c(e){const n={admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"inbox",children:"Inbox"}),"\n",(0,i.jsx)(n.p,{children:"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"You can run inbox as a standalone service. You add reference to shared assemblies, but deploy as separate services.\nThis way, processing in inbox does not affect the performance of your service."})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:'builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox(\n storage => ...,\n transport => ...,\n settings => ...,\n assembly => ...\n );\n},\nsettings => settings.ServiceId = "ServiceName");\n'})}),"\n",(0,i.jsx)(n.h3,{id:"inbox-message",children:"Inbox Message"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Inbox message class name must be unique per service."})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:"public class CreateCustomerCommandMessage : InboxMessage\n{\n public Guid Id { get; init; }\n\n public string FirstName { get; init; }\n\n public string LastName { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"inbox-definition",children:"Inbox Definition"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["You do not need to define a inbox definition for each message.",(0,i.jsx)(n.br,{}),"\n","Listens by default for incoming messages to the current service (does not listen on events).",(0,i.jsx)(n.br,{}),"\n","If you want to listen for events, you need to define the ",(0,i.jsx)(n.code,{children:"PublishedBy"})," property."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:'public class CreatedCustomerEventMessageDefinition : InboxDefinition\n{\n public CreatedCustomerEventMessageDefinition() \n {\n PublishedBy = "Customers";\n }\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"handling-message-in-inbox-handler",children:"Handling message in inbox handler"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Each ",(0,i.jsx)(n.code,{children:"InboxMessage"})," must have a ",(0,i.jsx)(n.code,{children:"IInboxHandler"})," declared."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:"public class CreatedCustomerEventMessageHandler : IInboxHandler\n{\n ...\n \n public async Task Handle(CreatedCustomerEventMessage message, IExecutionContext executionContext)\n {\n // Your logic\n }\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Options"})})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"In Memory (Default)"})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"Entity Framework Core (Relational)"})})]}),"\n",(0,i.jsx)(n.h2,{id:"transport",children:"Transport"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Options"})})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"In Memory (Default)"})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"Apache Kafka "})})]}),"\n",(0,i.jsx)(n.h2,{id:"settings",children:"Settings"}),"\n",(0,i.jsx)(n.h3,{id:"addmessagestoinboxsettings",children:"AddMessagesToInboxSettings"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Type"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Default Value"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Description"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"DefaultTimeToLiveIdempotencyKey"}),(0,i.jsx)("td",{children:"TimeSpan"}),(0,i.jsx)("td",{children:"7 days"}),(0,i.jsx)("td",{children:"Default time to live idempotency key. After the time expires, the key will be removed."})]})]}),"\n",(0,i.jsx)(n.h3,{id:"cleanupinboxsettings",children:"CleanUpInboxSettings"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Type"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Default Value"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Description"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"MaxBatchSize"}),(0,i.jsx)("td",{children:"int"}),(0,i.jsx)("td",{children:"10000"}),(0,i.jsx)("td",{children:"Maximum number of messages to clean up per job."})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"IsEnabled"}),(0,i.jsx)("td",{children:"bool"}),(0,i.jsx)("td",{children:"true"}),(0,i.jsx)("td",{children:"Value responsible for whether the cleaning process is enabled."})]})]}),"\n",(0,i.jsx)(n.h3,{id:"cleanupidempotencykeyssettings",children:"CleanUpIdempotencyKeysSettings"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Type"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Default Value"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Description"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"MaxBatchSize"}),(0,i.jsx)("td",{children:"int"}),(0,i.jsx)("td",{children:"10000"}),(0,i.jsx)("td",{children:"Maximum number of idepotency keys to clean up per job."})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"Period"}),(0,i.jsx)("td",{children:"TimeSpan"}),(0,i.jsx)("td",{children:"1 hour"}),(0,i.jsx)("td",{children:"Time interval between cleaning idepotency keys."})]})]}),"\n",(0,i.jsx)(n.h3,{id:"configuredeserialization",children:"ConfigureDeserialization"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Extension"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"System.Text.Json (Default)"}),(0,i.jsx)("td",{children:"UseSystemTextJson()"})]})]})]})}function x(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>o});var i=s(6540);const t={},r=i.createContext(t);function d(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c90fb1ce.a860b664.js b/assets/js/c90fb1ce.a860b664.js deleted file mode 100644 index 41281f47..00000000 --- a/assets/js/c90fb1ce.a860b664.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[670],{5230:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>r,metadata:()=>o,toc:()=>a});var i=s(4848),t=s(8453);const r={sidebar_position:4},d="Inbox",o={id:"inbox",title:"Inbox",description:"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages.",source:"@site/docs/inbox.md",sourceDirName:".",slug:"/inbox",permalink:"/docs/inbox",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/inbox.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Outbox",permalink:"/docs/outbox"},next:{title:"InMemory",permalink:"/docs/storage/in-memory"}},l={},a=[{value:"Inbox Message",id:"inbox-message",level:3},{value:"Inbox Definition",id:"inbox-definition",level:3},{value:"Handling message in inbox handler",id:"handling-message-in-inbox-handler",level:3},{value:"Storage",id:"storage",level:2},{value:"Transport",id:"transport",level:2},{value:"Settings",id:"settings",level:2},{value:"AddMessagesToInboxSettings",id:"addmessagestoinboxsettings",level:3},{value:"CleanUpInboxSettings",id:"cleanupinboxsettings",level:3},{value:"CleanUpIdempotencyKeysSettings",id:"cleanupidempotencykeyssettings",level:3},{value:"ConfigureDeserialization",id:"configuredeserialization",level:3}];function c(e){const n={admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"inbox",children:"Inbox"}),"\n",(0,i.jsx)(n.p,{children:"The inbox is responsible for getting messages from the transport and adding them to the storage, and then processes these messages."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"You can run inbox as a standalone service. You add reference to shared assemblies, but deploy as separate services.\nThis way, processing in inbox does not affect the performance of your service."})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:'builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox(\n storage => ...,\n transport => ...,\n settings => ...,\n assembly => ...\n );\n},\nsettings => settings.ServiceId = "ServiceName");\n'})}),"\n",(0,i.jsx)(n.h3,{id:"inbox-message",children:"Inbox Message"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Inbox message class name must be unique per service."})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:"public class CreateCustomerCommandMessage : InboxMessage\n{\n public Guid Id { get; init; }\n\n public string FirstName { get; init; }\n\n public string LastName { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"inbox-definition",children:"Inbox Definition"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["You do not need to define a inbox definition for each message.",(0,i.jsx)(n.br,{}),"\n","Listens by default for incoming messages to the current service (does not listen on events).",(0,i.jsx)(n.br,{}),"\n","If you want to listen for events, you need to define the ",(0,i.jsx)(n.code,{children:"PublishedBy"})," property."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:'public class CreatedCustomerEventMessageDefinition : InboxDefinition\n{\n public CreatedCustomerEventMessageDefinition() \n {\n PublishedBy = "Customers";\n }\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"handling-message-in-inbox-handler",children:"Handling message in inbox handler"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Each ",(0,i.jsx)(n.code,{children:"InboxMessage"})," must have a ",(0,i.jsx)(n.code,{children:"IInboxHandler"})," declared."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-csharp",children:"public class CreatedCustomerEventMessageHandler : IInboxHandler\n{\n ...\n \n public async Task Handle(CreatedCustomerEventMessage message, IExecutionContext executionContext)\n {\n // Your logic\n }\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Options"})})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"In Memory (Default)"})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"Entity Framework Core (Relational)"})})]}),"\n",(0,i.jsx)(n.h2,{id:"transport",children:"Transport"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Options"})})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"In Memory (Default)"})}),(0,i.jsx)("tr",{children:(0,i.jsx)("td",{children:"Apache Kafka "})})]}),"\n",(0,i.jsx)(n.h2,{id:"settings",children:"Settings"}),"\n",(0,i.jsx)(n.h3,{id:"addmessagestoinboxsettings",children:"AddMessagesToInboxSettings"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Type"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Default Value"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Description"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"DefaultTimeToLiveIdempotencyKey"}),(0,i.jsx)("td",{children:"TimeSpan"}),(0,i.jsx)("td",{children:"7 days"}),(0,i.jsx)("td",{children:"Default time to live idempotency key. After the time expires, the key will be removed."})]})]}),"\n",(0,i.jsx)(n.h3,{id:"cleanupinboxsettings",children:"CleanUpInboxSettings"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Type"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Default Value"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Description"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"MaxBatchSize"}),(0,i.jsx)("td",{children:"int"}),(0,i.jsx)("td",{children:"10000"}),(0,i.jsx)("td",{children:"Maximum number of messages to clean up per job."})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"IsEnabled"}),(0,i.jsx)("td",{children:"bool"}),(0,i.jsx)("td",{children:"true"}),(0,i.jsx)("td",{children:"Value responsible for whether the cleaning process is enabled."})]})]}),"\n",(0,i.jsx)(n.h3,{id:"cleanupidempotencykeyssettings",children:"CleanUpIdempotencyKeysSettings"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Type"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Default Value"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Description"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"MaxBatchSize"}),(0,i.jsx)("td",{children:"int"}),(0,i.jsx)("td",{children:"10000"}),(0,i.jsx)("td",{children:"Maximum number of idepotency keys to clean up per job."})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"Period"}),(0,i.jsx)("td",{children:"TimeSpan"}),(0,i.jsx)("td",{children:"1 hour"}),(0,i.jsx)("td",{children:"Time interval between cleaning idepotency keys."})]})]}),"\n",(0,i.jsx)(n.h3,{id:"configuredeserialization",children:"ConfigureDeserialization"}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Name"})}),(0,i.jsx)("td",{children:(0,i.jsx)("b",{children:"Extension"})})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:"System.Text.Json (Default)"}),(0,i.jsx)("td",{children:"UseSystemTextJson()"})]})]})]})}function x(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>o});var i=s(6540);const t={},r=i.createContext(t);function d(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccda9e39.1a0f03fd.js b/assets/js/ccda9e39.1a0f03fd.js deleted file mode 100644 index 4b88185b..00000000 --- a/assets/js/ccda9e39.1a0f03fd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[686],{1973:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var t=n(4848),o=n(8453);const i={sidebar_position:1},a="Simple Sample",r={id:"samples/simple-sample",title:"Simple Sample",description:"Simple sample consists of one module to help understand how transactional box works.",source:"@site/docs/samples/simple-sample.md",sourceDirName:"samples",slug:"/samples/simple-sample",permalink:"/docs/samples/simple-sample",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/samples/simple-sample.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Apache Kafka",permalink:"/docs/transport/kafka"},next:{title:"Distributed Sample",permalink:"/docs/samples/distributed-sample"}},l={},p=[];function c(e){const s={admonition:"admonition",br:"br",code:"code",h1:"h1",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"simple-sample",children:"Simple Sample"}),"\n",(0,t.jsx)(s.p,{children:"Simple sample consists of one module to help understand how transactional box works."}),"\n",(0,t.jsx)(s.admonition,{type:"info",children:(0,t.jsx)(s.p,{children:"Docker is required."})}),"\n",(0,t.jsxs)(s.p,{children:["Clone repo and open ",(0,t.jsx)(s.code,{children:"TransactionalBox.sln"})," via Visual Studio. Set the ",(0,t.jsx)(s.code,{children:"TransactionalBox.Sample.WebApi"})," as startup and then run. You should see the following view."]}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"simple-sample",src:n(6368).A+"",width:"703",height:"540"})})}),"\n",(0,t.jsxs)(s.p,{children:["Don't forget to use break points to learn.",(0,t.jsx)(s.br,{}),"\n","Have fun ","\ud83d\ude03","!"]})]})}function m(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},6368:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/simple-sample-baff57a099ff272d31fff9925eec5f77.png"},8453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>r});var t=n(6540);const o={},i=t.createContext(o);function a(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccda9e39.c5bb4a90.js b/assets/js/ccda9e39.c5bb4a90.js new file mode 100644 index 00000000..646a3864 --- /dev/null +++ b/assets/js/ccda9e39.c5bb4a90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[686],{1973:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var t=s(4848),o=s(8453);const i={sidebar_position:1},a="Simple Sample",r={id:"samples/simple-sample",title:"Simple Sample",description:"Simple sample consists of one module to help understand how transactional box works.",source:"@site/docs/samples/simple-sample.md",sourceDirName:"samples",slug:"/samples/simple-sample",permalink:"/TransactionalBox/docs/samples/simple-sample",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/samples/simple-sample.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Apache Kafka",permalink:"/TransactionalBox/docs/transport/kafka"},next:{title:"Distributed Sample",permalink:"/TransactionalBox/docs/samples/distributed-sample"}},l={},p=[];function c(e){const n={admonition:"admonition",br:"br",code:"code",h1:"h1",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"simple-sample",children:"Simple Sample"}),"\n",(0,t.jsx)(n.p,{children:"Simple sample consists of one module to help understand how transactional box works."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Docker is required."})}),"\n",(0,t.jsxs)(n.p,{children:["Clone repo and open ",(0,t.jsx)(n.code,{children:"TransactionalBox.sln"})," via Visual Studio. Set the ",(0,t.jsx)(n.code,{children:"TransactionalBox.Sample.WebApi"})," as startup and then run. You should see the following view."]}),"\n",(0,t.jsx)("div",{align:"center",children:(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"simple-sample",src:s(6368).A+"",width:"703",height:"540"})})}),"\n",(0,t.jsxs)(n.p,{children:["Don't forget to use break points to learn.",(0,t.jsx)(n.br,{}),"\n","Have fun ","\ud83d\ude03","!"]})]})}function m(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},6368:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/simple-sample-baff57a099ff272d31fff9925eec5f77.png"},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>r});var t=s(6540);const o={},i=t.createContext(o);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d589d3a7.a7bb3660.js b/assets/js/d589d3a7.a7bb3660.js new file mode 100644 index 00000000..5ddac3a7 --- /dev/null +++ b/assets/js/d589d3a7.a7bb3660.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[924],{8578:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=s(4848),t=s(8453);const i={sidebar_position:2},o="Getting Started",l={id:"getting-started",title:"Getting Started",description:"Let's discover TransactionalBox in less than 3 minutes.",source:"@site/docs/getting-started.md",sourceDirName:".",slug:"/getting-started",permalink:"/TransactionalBox/docs/getting-started",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/getting-started.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/TransactionalBox/docs/introduction"},next:{title:"Outbox",permalink:"/TransactionalBox/docs/outbox"}},r={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Install packages",id:"install-packages",level:3},{value:"Register",id:"register",level:3},{value:"Usage",id:"usage",level:2},{value:"Outbox",id:"outbox",level:3},{value:"Declare outbox message",id:"declare-outbox-message",level:4},{value:"Add message to outbox",id:"add-message-to-outbox",level:4},{value:"Inbox",id:"inbox",level:3},{value:"Declare inbox message",id:"declare-inbox-message",level:4},{value:"Handle message",id:"handle-message",level:4},{value:"Summary",id:"summary",level:2}];function c(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,a.jsxs)(n.p,{children:["Let's discover ",(0,a.jsx)(n.strong,{children:"TransactionalBox in less than 3 minutes"}),".\nExample shows in-memory implementation."]}),"\n",(0,a.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsx)(n.h3,{id:"install-packages",children:"Install packages"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"dotnet add package TransactionalBox\n"})}),"\n",(0,a.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"using TransactionalBox;\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:'builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox();\n\n x.AddInbox();\n},\nsettings => settings.ServiceId = "ServiceName");\n'})}),"\n",(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsx)(n.h3,{id:"outbox",children:"Outbox"}),"\n",(0,a.jsx)(n.h4,{id:"declare-outbox-message",children:"Declare outbox message"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"public sealed class ExampleMessage : OutboxMessage\n{\n public string Name { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,a.jsx)(n.h4,{id:"add-message-to-outbox",children:"Add message to outbox"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:'public sealed class AddMessageToOutbox\n{\n private readonly IOutbox _outbox;\n\n public AddMessageToOutbox(IOutbox outbox) \n {\n _outbox = outbox;\n }\n\n public async Task Example()\n {\n var message = new ExampleMessage()\n {\n Name = "Name",\n Age = 25,\n };\n\n await _outbox.Add(message);\n await _outbox.TransactionCommited();\n }\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"inbox",children:"Inbox"}),"\n",(0,a.jsx)(n.h4,{id:"declare-inbox-message",children:"Declare inbox message"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"public sealed class ExampleMessage : InboxMessage\n{\n public string Name { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,a.jsx)(n.h4,{id:"handle-message",children:"Handle message"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"internal sealed class ExampleMessageHandler : IInboxHandler\n{\n public async Task Handle(ExampleMessage message, IExecutionContext executionContext)\n {\n // Your Logic\n }\n}\n"})}),"\n",(0,a.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,a.jsxs)(n.p,{children:["Follow the workflow of your code with breakpoints. Enjoy learning ","\ud83d\ude1c","."]})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var a=s(6540);const t={},i=a.createContext(t);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d589d3a7.d43d14a7.js b/assets/js/d589d3a7.d43d14a7.js deleted file mode 100644 index 336d8ec1..00000000 --- a/assets/js/d589d3a7.d43d14a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[924],{8578:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=s(4848),t=s(8453);const i={sidebar_position:2},o="Getting Started",l={id:"getting-started",title:"Getting Started",description:"Let's discover TransactionalBox in less than 3 minutes.",source:"@site/docs/getting-started.md",sourceDirName:".",slug:"/getting-started",permalink:"/docs/getting-started",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/getting-started.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/docs/introduction"},next:{title:"Outbox",permalink:"/docs/outbox"}},r={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Install packages",id:"install-packages",level:3},{value:"Register",id:"register",level:3},{value:"Usage",id:"usage",level:2},{value:"Outbox",id:"outbox",level:3},{value:"Declare outbox message",id:"declare-outbox-message",level:4},{value:"Add message to outbox",id:"add-message-to-outbox",level:4},{value:"Inbox",id:"inbox",level:3},{value:"Declare inbox message",id:"declare-inbox-message",level:4},{value:"Handle message",id:"handle-message",level:4},{value:"Summary",id:"summary",level:2}];function c(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,a.jsxs)(n.p,{children:["Let's discover ",(0,a.jsx)(n.strong,{children:"TransactionalBox in less than 3 minutes"}),".\nExample shows in-memory implementation."]}),"\n",(0,a.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsx)(n.h3,{id:"install-packages",children:"Install packages"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"dotnet add package TransactionalBox\n"})}),"\n",(0,a.jsx)(n.h3,{id:"register",children:"Register"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"using TransactionalBox;\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:'builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox();\n\n x.AddInbox();\n},\nsettings => settings.ServiceId = "ServiceName");\n'})}),"\n",(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsx)(n.h3,{id:"outbox",children:"Outbox"}),"\n",(0,a.jsx)(n.h4,{id:"declare-outbox-message",children:"Declare outbox message"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"public sealed class ExampleMessage : OutboxMessage\n{\n public string Name { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,a.jsx)(n.h4,{id:"add-message-to-outbox",children:"Add message to outbox"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:'public sealed class AddMessageToOutbox\n{\n private readonly IOutbox _outbox;\n\n public AddMessageToOutbox(IOutbox outbox) \n {\n _outbox = outbox;\n }\n\n public async Task Example()\n {\n var message = new ExampleMessage()\n {\n Name = "Name",\n Age = 25,\n };\n\n await _outbox.Add(message);\n await _outbox.TransactionCommited();\n }\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"inbox",children:"Inbox"}),"\n",(0,a.jsx)(n.h4,{id:"declare-inbox-message",children:"Declare inbox message"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"public sealed class ExampleMessage : InboxMessage\n{\n public string Name { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,a.jsx)(n.h4,{id:"handle-message",children:"Handle message"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:"internal sealed class ExampleMessageHandler : IInboxHandler\n{\n public async Task Handle(ExampleMessage message, IExecutionContext executionContext)\n {\n // Your Logic\n }\n}\n"})}),"\n",(0,a.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,a.jsxs)(n.p,{children:["Follow the workflow of your code with breakpoints. Enjoy learning ","\ud83d\ude1c","."]})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var a=s(6540);const t={},i=a.createContext(t);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dac89b75.074bb8f2.js b/assets/js/dac89b75.074bb8f2.js deleted file mode 100644 index 4d2ec93d..00000000 --- a/assets/js/dac89b75.074bb8f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[954],{7642:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>x,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var r=o(4848),t=o(8453);const i={sidebar_position:2},a="Entity Framework Core (Relational)",d={id:"storage/entity-framework-core",title:"Entity Framework Core (Relational)",description:"TransactionalBox is not responsible for configuring Entity Framework Core.",source:"@site/docs/storage/entity-framework-core.md",sourceDirName:"storage",slug:"/storage/entity-framework-core",permalink:"/docs/storage/entity-framework-core",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/storage/entity-framework-core.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"InMemory",permalink:"/docs/storage/in-memory"},next:{title:"InMemory",permalink:"/docs/transport/in-memory"}},s={},l=[{value:"Install package",id:"install-package",level:2},{value:"Outbox",id:"outbox",level:2},{value:"Register Entity Framework Core as outbox storage",id:"register-entity-framework-core-as-outbox-storage",level:3},{value:"Add Outbox to ModelBuilder",id:"add-outbox-to-modelbuilder",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register Entity Framework Core as inbox storage",id:"register-entity-framework-core-as-inbox-storage",level:3},{value:"Add Inbox to ModelBuilder",id:"add-inbox-to-modelbuilder",level:3}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"entity-framework-core-relational",children:"Entity Framework Core (Relational)"}),"\n",(0,r.jsxs)(n.p,{children:["TransactionalBox is not responsible for configuring Entity Framework Core.\nAll it needs is to use the already existing ",(0,r.jsx)(n.code,{children:"DbContext"})," and add the model to the ",(0,r.jsx)(n.code,{children:"ModelBuilder"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Transactional box add messages to your ",(0,r.jsx)(n.code,{children:"DbContext"}),".\nYou need to invoke ",(0,r.jsx)(n.code,{children:"SaveChangesAsync()"})," on ",(0,r.jsx)(n.code,{children:"DbContext"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Remember, all changes need to be in one transaction.\nUsing ",(0,r.jsx)(n.code,{children:"ExecuteUpdate"})," or ",(0,r.jsx)(n.code,{children:"ExecuteDelete"})," you need to create own transaction."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"AddDbContexPoll"})," when configuring Entity Framework Core."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddDbContextPool(x => x.Use...(connectionString));\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"install-package",children:"Install package"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"dotnet add package TransactionalBox.EntityFrameworkCore\n"})}),"\n",(0,r.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,r.jsx)(n.h3,{id:"register-entity-framework-core-as-outbox-storage",children:"Register Entity Framework Core as outbox storage"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox(storage => storage.UseEntityFrameworkCore());\n});\n\n"})}),"\n",(0,r.jsx)(n.h3,{id:"add-outbox-to-modelbuilder",children:"Add Outbox to ModelBuilder"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"public class SampleDbContext : DbContext\n{\n ...\n protected override void OnModelCreating(ModelBuilder modelBuilder)\n {\n modelBuilder.AddOutbox();\n }\n ...\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,r.jsx)(n.h3,{id:"register-entity-framework-core-as-inbox-storage",children:"Register Entity Framework Core as inbox storage"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox(storage => storage.UseEntityFrameworkCore());\n});\n\n"})}),"\n",(0,r.jsx)(n.h3,{id:"add-inbox-to-modelbuilder",children:"Add Inbox to ModelBuilder"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"public class SampleDbContext : DbContext\n{\n ...\n protected override void OnModelCreating(ModelBuilder modelBuilder)\n {\n modelBuilder.AddInbox();\n }\n ...\n}\n"})})]})}function x(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>a,x:()=>d});var r=o(6540);const t={},i=r.createContext(t);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dac89b75.6d448805.js b/assets/js/dac89b75.6d448805.js new file mode 100644 index 00000000..4d5c3324 --- /dev/null +++ b/assets/js/dac89b75.6d448805.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[954],{7642:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>x,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var r=o(4848),t=o(8453);const i={sidebar_position:2},a="Entity Framework Core (Relational)",d={id:"storage/entity-framework-core",title:"Entity Framework Core (Relational)",description:"TransactionalBox is not responsible for configuring Entity Framework Core.",source:"@site/docs/storage/entity-framework-core.md",sourceDirName:"storage",slug:"/storage/entity-framework-core",permalink:"/TransactionalBox/docs/storage/entity-framework-core",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/storage/entity-framework-core.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"InMemory",permalink:"/TransactionalBox/docs/storage/in-memory"},next:{title:"InMemory",permalink:"/TransactionalBox/docs/transport/in-memory"}},s={},l=[{value:"Install package",id:"install-package",level:2},{value:"Outbox",id:"outbox",level:2},{value:"Register Entity Framework Core as outbox storage",id:"register-entity-framework-core-as-outbox-storage",level:3},{value:"Add Outbox to ModelBuilder",id:"add-outbox-to-modelbuilder",level:3},{value:"Inbox",id:"inbox",level:2},{value:"Register Entity Framework Core as inbox storage",id:"register-entity-framework-core-as-inbox-storage",level:3},{value:"Add Inbox to ModelBuilder",id:"add-inbox-to-modelbuilder",level:3}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"entity-framework-core-relational",children:"Entity Framework Core (Relational)"}),"\n",(0,r.jsxs)(n.p,{children:["TransactionalBox is not responsible for configuring Entity Framework Core.\nAll it needs is to use the already existing ",(0,r.jsx)(n.code,{children:"DbContext"})," and add the model to the ",(0,r.jsx)(n.code,{children:"ModelBuilder"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Transactional box add messages to your ",(0,r.jsx)(n.code,{children:"DbContext"}),".\nYou need to invoke ",(0,r.jsx)(n.code,{children:"SaveChangesAsync()"})," on ",(0,r.jsx)(n.code,{children:"DbContext"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Remember, all changes need to be in one transaction.\nUsing ",(0,r.jsx)(n.code,{children:"ExecuteUpdate"})," or ",(0,r.jsx)(n.code,{children:"ExecuteDelete"})," you need to create own transaction."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"AddDbContexPoll"})," when configuring Entity Framework Core."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddDbContextPool(x => x.Use...(connectionString));\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"install-package",children:"Install package"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"dotnet add package TransactionalBox.EntityFrameworkCore\n"})}),"\n",(0,r.jsx)(n.h2,{id:"outbox",children:"Outbox"}),"\n",(0,r.jsx)(n.h3,{id:"register-entity-framework-core-as-outbox-storage",children:"Register Entity Framework Core as outbox storage"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox(storage => storage.UseEntityFrameworkCore());\n});\n\n"})}),"\n",(0,r.jsx)(n.h3,{id:"add-outbox-to-modelbuilder",children:"Add Outbox to ModelBuilder"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"public class SampleDbContext : DbContext\n{\n ...\n protected override void OnModelCreating(ModelBuilder modelBuilder)\n {\n modelBuilder.AddOutbox();\n }\n ...\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"inbox",children:"Inbox"}),"\n",(0,r.jsx)(n.h3,{id:"register-entity-framework-core-as-inbox-storage",children:"Register Entity Framework Core as inbox storage"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"builder.Services.AddTransactionalBox(x =>\n{\n x.AddInbox(storage => storage.UseEntityFrameworkCore());\n});\n\n"})}),"\n",(0,r.jsx)(n.h3,{id:"add-inbox-to-modelbuilder",children:"Add Inbox to ModelBuilder"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-csharp",children:"public class SampleDbContext : DbContext\n{\n ...\n protected override void OnModelCreating(ModelBuilder modelBuilder)\n {\n modelBuilder.AddInbox();\n }\n ...\n}\n"})})]})}function x(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>a,x:()=>d});var r=o(6540);const t={},i=r.createContext(t);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e970430a.bc9ba22a.js b/assets/js/e970430a.bc9ba22a.js deleted file mode 100644 index efdd4e67..00000000 --- a/assets/js/e970430a.bc9ba22a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[770],{861:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>x,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=t(4848),i=t(8453);const r={sidebar_position:3},o="Outbox",d={id:"outbox",title:"Outbox",description:"The outbox is responsible for adding messages to the storage and then adding at least once to the transport.",source:"@site/docs/outbox.md",sourceDirName:".",slug:"/outbox",permalink:"/docs/outbox",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/outbox.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/getting-started"},next:{title:"Inbox",permalink:"/docs/inbox"}},a={},l=[{value:"Outbox Message",id:"outbox-message",level:3},{value:"Outbox Definition",id:"outbox-definition",level:3},{value:"Adding a message to the outbox",id:"adding-a-message-to-the-outbox",level:3},{value:"Storage",id:"storage",level:2},{value:"Transport",id:"transport",level:2},{value:"Settings",id:"settings",level:2},{value:"AddMessagesToTransportSettings",id:"addmessagestotransportsettings",level:3},{value:"CleanUpOutboxSettings",id:"cleanupoutboxsettings",level:3},{value:"ConfigureSerialization",id:"configureserialization",level:3},{value:"ConfigureCompression",id:"configurecompression",level:3}];function c(e){const n={admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"outbox",children:"Outbox"}),"\n",(0,s.jsx)(n.p,{children:"The outbox is responsible for adding messages to the storage and then adding at least once to the transport."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:'builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox(\n storage => ...,\n transport => ...,\n settings => ...,\n assembly => ...\n );\n},\nsettings => settings.ServiceId = "ServiceName");\n'})}),"\n",(0,s.jsx)(n.h3,{id:"outbox-message",children:"Outbox Message"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Outbox message class name must be unique per service."})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"public class CreateCustomerCommandMessage : OutboxMessage\n{\n public Guid Id { get; init; }\n\n public string FirstName { get; init; }\n\n public string LastName { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"outbox-definition",children:"Outbox Definition"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["You do not need to define a outbox definition for each message.",(0,s.jsx)(n.br,{}),"\n","By default, the message will be published because receiver is not indicated."]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:'internal class CreateCustomerCommandMessageDefinition : OutboxDefinition\n{\n public CreateCustomerCommandMessageDefinition() \n {\n Receiver = "Customers";\n }\n}\n\n'})}),"\n",(0,s.jsx)(n.h3,{id:"adding-a-message-to-the-outbox",children:"Adding a message to the outbox"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"\n// Add in the same transaction the result of the business operation and message to outbox\n\nawait outbox.Add(message);\n\n// Commit transaction\n\n// After transaction is successfully commited, execute the following method\nawait outbox.TransactionCommited();\n\n"})}),"\n",(0,s.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Options"})})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"In Memory (Default)"})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"Entity Framework Core (Relational)"})})]}),"\n",(0,s.jsx)(n.h2,{id:"transport",children:"Transport"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Options"})})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"In Memory (Default)"})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"Apache Kafka "})})]}),"\n",(0,s.jsx)(n.h2,{id:"settings",children:"Settings"}),"\n",(0,s.jsx)(n.h3,{id:"addmessagestotransportsettings",children:"AddMessagesToTransportSettings"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Type"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Default Value"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Description"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"MaxBatchSize"}),(0,s.jsx)("td",{children:"int"}),(0,s.jsx)("td",{children:"5000"}),(0,s.jsx)("td",{children:"Maximum number of processing messages per job."})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"LockTimeout"}),(0,s.jsx)("td",{children:"TimeSpan"}),(0,s.jsx)("td",{children:"10 seconds"}),(0,s.jsx)("td",{children:"Time to live for message blocking."})]})]}),"\n",(0,s.jsx)(n.h3,{id:"cleanupoutboxsettings",children:"CleanUpOutboxSettings"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Type"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Default Value"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Description"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"MaxBatchSize"}),(0,s.jsx)("td",{children:"int"}),(0,s.jsx)("td",{children:"10000"}),(0,s.jsx)("td",{children:"Maximum number of messages to clean up per job."})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"IsEnabled"}),(0,s.jsx)("td",{children:"bool"}),(0,s.jsx)("td",{children:"true"}),(0,s.jsx)("td",{children:"Value responsible for whether the cleaning process is enabled."})]})]}),"\n",(0,s.jsx)(n.h3,{id:"configureserialization",children:"ConfigureSerialization"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Extension"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"System.Text.Json (Default)"}),(0,s.jsx)("td",{children:"UseSystemTextJson()"})]})]}),"\n",(0,s.jsx)(n.h3,{id:"configurecompression",children:"ConfigureCompression"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Extension"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"No compression (Default)"}),(0,s.jsx)("td",{children:"UseNoCompression()"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"Brotli"}),(0,s.jsx)("td",{children:"UseBrotli()"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"GZip"}),(0,s.jsx)("td",{children:"UseGZip()"})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>d});var s=t(6540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e970430a.da0c9c83.js b/assets/js/e970430a.da0c9c83.js new file mode 100644 index 00000000..0d19e124 --- /dev/null +++ b/assets/js/e970430a.da0c9c83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[770],{861:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>x,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=t(4848),i=t(8453);const r={sidebar_position:3},o="Outbox",d={id:"outbox",title:"Outbox",description:"The outbox is responsible for adding messages to the storage and then adding at least once to the transport.",source:"@site/docs/outbox.md",sourceDirName:".",slug:"/outbox",permalink:"/TransactionalBox/docs/outbox",draft:!1,unlisted:!1,editUrl:"https://github.com/adimiko/TransactionalBox/tree/main/documentation/docs/outbox.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/TransactionalBox/docs/getting-started"},next:{title:"Inbox",permalink:"/TransactionalBox/docs/inbox"}},a={},l=[{value:"Outbox Message",id:"outbox-message",level:3},{value:"Outbox Definition",id:"outbox-definition",level:3},{value:"Adding a message to the outbox",id:"adding-a-message-to-the-outbox",level:3},{value:"Storage",id:"storage",level:2},{value:"Transport",id:"transport",level:2},{value:"Settings",id:"settings",level:2},{value:"AddMessagesToTransportSettings",id:"addmessagestotransportsettings",level:3},{value:"CleanUpOutboxSettings",id:"cleanupoutboxsettings",level:3},{value:"ConfigureSerialization",id:"configureserialization",level:3},{value:"ConfigureCompression",id:"configurecompression",level:3}];function c(e){const n={admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"outbox",children:"Outbox"}),"\n",(0,s.jsx)(n.p,{children:"The outbox is responsible for adding messages to the storage and then adding at least once to the transport."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:'builder.Services.AddTransactionalBox(x =>\n{\n x.AddOutbox(\n storage => ...,\n transport => ...,\n settings => ...,\n assembly => ...\n );\n},\nsettings => settings.ServiceId = "ServiceName");\n'})}),"\n",(0,s.jsx)(n.h3,{id:"outbox-message",children:"Outbox Message"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Outbox message class name must be unique per service."})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"public class CreateCustomerCommandMessage : OutboxMessage\n{\n public Guid Id { get; init; }\n\n public string FirstName { get; init; }\n\n public string LastName { get; init; }\n\n public int Age { get; init; }\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"outbox-definition",children:"Outbox Definition"}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["You do not need to define a outbox definition for each message.",(0,s.jsx)(n.br,{}),"\n","By default, the message will be published because receiver is not indicated."]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:'internal class CreateCustomerCommandMessageDefinition : OutboxDefinition\n{\n public CreateCustomerCommandMessageDefinition() \n {\n Receiver = "Customers";\n }\n}\n\n'})}),"\n",(0,s.jsx)(n.h3,{id:"adding-a-message-to-the-outbox",children:"Adding a message to the outbox"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"\n// Add in the same transaction the result of the business operation and message to outbox\n\nawait outbox.Add(message);\n\n// Commit transaction\n\n// After transaction is successfully commited, execute the following method\nawait outbox.TransactionCommited();\n\n"})}),"\n",(0,s.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Options"})})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"In Memory (Default)"})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"Entity Framework Core (Relational)"})})]}),"\n",(0,s.jsx)(n.h2,{id:"transport",children:"Transport"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Options"})})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"In Memory (Default)"})}),(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:"Apache Kafka "})})]}),"\n",(0,s.jsx)(n.h2,{id:"settings",children:"Settings"}),"\n",(0,s.jsx)(n.h3,{id:"addmessagestotransportsettings",children:"AddMessagesToTransportSettings"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Type"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Default Value"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Description"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"MaxBatchSize"}),(0,s.jsx)("td",{children:"int"}),(0,s.jsx)("td",{children:"5000"}),(0,s.jsx)("td",{children:"Maximum number of processing messages per job."})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"LockTimeout"}),(0,s.jsx)("td",{children:"TimeSpan"}),(0,s.jsx)("td",{children:"10 seconds"}),(0,s.jsx)("td",{children:"Time to live for message blocking."})]})]}),"\n",(0,s.jsx)(n.h3,{id:"cleanupoutboxsettings",children:"CleanUpOutboxSettings"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Type"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Default Value"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Description"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"MaxBatchSize"}),(0,s.jsx)("td",{children:"int"}),(0,s.jsx)("td",{children:"10000"}),(0,s.jsx)("td",{children:"Maximum number of messages to clean up per job."})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"IsEnabled"}),(0,s.jsx)("td",{children:"bool"}),(0,s.jsx)("td",{children:"true"}),(0,s.jsx)("td",{children:"Value responsible for whether the cleaning process is enabled."})]})]}),"\n",(0,s.jsx)(n.h3,{id:"configureserialization",children:"ConfigureSerialization"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Extension"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"System.Text.Json (Default)"}),(0,s.jsx)("td",{children:"UseSystemTextJson()"})]})]}),"\n",(0,s.jsx)(n.h3,{id:"configurecompression",children:"ConfigureCompression"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Name"})}),(0,s.jsx)("td",{children:(0,s.jsx)("b",{children:"Extension"})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"No compression (Default)"}),(0,s.jsx)("td",{children:"UseNoCompression()"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"Brotli"}),(0,s.jsx)("td",{children:"UseBrotli()"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"GZip"}),(0,s.jsx)("td",{children:"UseGZip()"})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>d});var s=t(6540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.1c357cd1.js b/assets/js/main.1c357cd1.js deleted file mode 100644 index 8cf42a40..00000000 --- a/assets/js/main.1c357cd1.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.1c357cd1.js.LICENSE.txt */ -(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={17896441:[()=>Promise.all([n.e(869),n.e(674),n.e(401)]).then(n.bind(n,242)),"@theme/DocItem",242],"1f391b9e":[()=>Promise.all([n.e(869),n.e(674),n.e(61)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"21f002cb":[()=>n.e(407).then(n.bind(n,8257)),"@site/docs/transport/in-memory.md",8257],"393be207":[()=>n.e(134).then(n.bind(n,6602)),"@site/src/pages/markdown-page.md",6602],"58e8309c":[()=>n.e(678).then(n.t.bind(n,1966,19)),"/home/runner/work/TransactionalBox/TransactionalBox/documentation/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"8d3c673f":[()=>n.e(971).then(n.t.bind(n,4061,19)),"/home/runner/work/TransactionalBox/TransactionalBox/documentation/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",4061],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],a09c2993:[()=>n.e(899).then(n.bind(n,1456)),"@site/docs/introduction.md",1456],a7bd4aaa:[()=>n.e(98).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],b55eba63:[()=>n.e(240).then(n.bind(n,1286)),"@site/docs/transport/kafka.md",1286],ba2c8cce:[()=>n.e(938).then(n.bind(n,1354)),"@site/docs/samples/distributed-sample.md",1354],c33bd490:[()=>n.e(797).then(n.bind(n,853)),"@site/docs/storage/in-memory.md",853],c4f5d8e4:[()=>Promise.all([n.e(869),n.e(634)]).then(n.bind(n,2991)),"@site/src/pages/index.js",2991],c90fb1ce:[()=>n.e(670).then(n.bind(n,5230)),"@site/docs/inbox.md",5230],ccda9e39:[()=>n.e(686).then(n.bind(n,1973)),"@site/docs/samples/simple-sample.md",1973],d589d3a7:[()=>n.e(924).then(n.bind(n,8578)),"@site/docs/getting-started.md",8578],dac89b75:[()=>n.e(954).then(n.bind(n,7642)),"@site/docs/storage/entity-framework-core.md",7642],e970430a:[()=>n.e(770).then(n.bind(n,861)),"@site/docs/outbox.md",861]};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={},p=[],f=[],m=(0,u.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:s,loader:d,modules:p,webpack:()=>f,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;return delete a.__context,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(o,{...a,...n})})}})}const p=[{path:"/markdown-page",component:d("/markdown-page","cda"),exact:!0},{path:"/docs",component:d("/docs","dda"),routes:[{path:"/docs",component:d("/docs","fa3"),routes:[{path:"/docs",component:d("/docs","240"),routes:[{path:"/docs/getting-started",component:d("/docs/getting-started","a24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/inbox",component:d("/docs/inbox","350"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/introduction",component:d("/docs/introduction","457"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/outbox",component:d("/docs/outbox","b9f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/samples/distributed-sample",component:d("/docs/samples/distributed-sample","f2f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/samples/simple-sample",component:d("/docs/samples/simple-sample","b51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/storage/entity-framework-core",component:d("/docs/storage/entity-framework-core","322"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/storage/in-memory",component:d("/docs/storage/in-memory","8ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/transport/in-memory",component:d("/docs/transport/in-memory","ef2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/transport/kafka",component:d("/docs/transport/kafka","e92"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","de9"),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(4625),i=n(545),l=n(8193);const s=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),c=n(6347),d=n(2831),p=n(4848);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5260),g=n(4586),h=n(6025),y=n(6342),b=n(1003),v=n(2131),w=n(4090),k=n(2967),x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,v.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,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,c.zy)();return e+(0,x.applyTrailingSlash)((0,h.A)(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,g.A)(),{metadata:t,image:n}=(0,y.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)(b.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.A,{tag:k.Cy,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const _=new Map;function T(e){if(_.has(e.pathname))return{...e,pathname:_.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return _.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return _.set(e.pathname,t),{...e,pathname:t}}var j=n(6125),N=n(6988),L=n(205);function R(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 P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.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}),R("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?R("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=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(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)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(c.qh,{location:t,render:()=>e})})}}const I=D,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(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(/{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 Y=n(6921);const Z=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.u)(u.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,Y.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),O(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.vd,{children:(0,p.jsx)(o.Kd,{children:(0,p.jsx)(W,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};O(window.location.pathname).then(l)}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"introduction","docs":[{"id":"getting-started","path":"/docs/getting-started","sidebar":"tutorialSidebar"},{"id":"inbox","path":"/docs/inbox","sidebar":"tutorialSidebar"},{"id":"introduction","path":"/docs/introduction","sidebar":"tutorialSidebar"},{"id":"outbox","path":"/docs/outbox","sidebar":"tutorialSidebar"},{"id":"samples/distributed-sample","path":"/docs/samples/distributed-sample","sidebar":"tutorialSidebar"},{"id":"samples/simple-sample","path":"/docs/samples/simple-sample","sidebar":"tutorialSidebar"},{"id":"storage/entity-framework-core","path":"/docs/storage/entity-framework-core","sidebar":"tutorialSidebar"},{"id":"storage/in-memory","path":"/docs/storage/in-memory","sidebar":"tutorialSidebar"},{"id":"transport/in-memory","path":"/docs/transport/in-memory","sidebar":"tutorialSidebar"},{"id":"transport/kafka","path":"/docs/transport/kafka","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/introduction","label":"introduction"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"}}}');var u=n(4848);const c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(c);function p(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:()=>f});var r=n(6540),a=n(8193),o=n(5260),i=n(440),l=n(781),s=n(4848);function u(e){let{error:t,tryAgain:n}=e;return(0,s.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,s.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,s.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,s.jsx)(c,{error:t})]})}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)(f,{fallback:()=>(0,s.jsx)(u,{error:t,tryAgain:n}),children:[(0,s.jsx)(o.A,{children:(0,s.jsx)("title",{children:"Page Error"})}),(0,s.jsx)(l.A,{children:(0,s.jsx)(u,{error:t,tryAgain:n})})]})}const p=e=>(0,s.jsx)(d,{...e});class f 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??p)(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:()=>f});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 p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.A)(),{withBaseUrl:k}=(0,c.h)(),x=(0,u.A)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const C=(0,l.A)(E),A=E?.replace("pathname://","");let _=void 0!==A?(T=A,y&&(e=>e.startsWith("/"))(T)?k(T):T):void 0;var T;_&&C&&(_=(0,o.applyTrailingSlash)(_,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),N=n?a.k2:a.N_,L=s.A.canUseIntersectionObserver,R=(0,r.useRef)(),P=()=>{j.current||null==_||(window.docusaurus.preload(_),j.current=!0)};(0,r.useEffect)((()=>(!L&&C&&null!=_&&window.docusaurus.prefetch(_),()=>{L&&R.current&&R.current.disconnect()})),[R,_,L,C]);const O=_?.startsWith("#")??!1,D=!b.target||"_self"===b.target,I=!_||!C||!D||O;return h||!O&&I||x.collectLink(_),b.id&&x.collectAnchor(b.id),I?(0,d.jsx)("a",{ref:S,href:_,...E&&!C&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(N,{...b,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,L&&e&&C&&(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!=_&&window.docusaurus.prefetch(_))}))})),R.current.observe(e))},to:_,...n&&{isActive:g,activeClassName:m}})}const f=r.forwardRef(p)},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,{A:()=>l,h:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.A)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.z)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}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},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:()=>g,vT:()=>p,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});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=>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});function p(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 f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(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()}}},6134:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(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:p}}=(0,o.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(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",p?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,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:()=>ft});var r=n(6540),a=n(4164),o=n(7489),i=n(1003),l=n(6347),s=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){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&&p(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(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 g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,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)(g,{className:b.skipToContent})}var w=n(6342),k=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 C={content:"content_knG7"};function A(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.A)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const _={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.Mj)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:_.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:_.announcementBarPlaceholder}),(0,c.jsx)(A,{className:_.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:_.announcementBarClose})]})}var j=n(9876),N=n(3104);var L=n(9532),R=n(5600);const P=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,R.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.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)(P.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(P);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:D(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=I();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 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:"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 $(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 q(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)(B,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.G)();return r?null:(0,c.jsx)(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var W=n(3465);function Q(){return(0,c.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.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 Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Q,{}),(0,c.jsx)(V,{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.A)(r),p=(0,X.A)(t),f=(0,X.A)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.A)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,m&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return a?(0,c.jsx)(Z.A,{href:s?f:a,...u,...g}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...g})}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)(Ce,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(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:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":p}),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(),f()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ce,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,c.jsx)(r,{...n})}var me=n(2131);function ge(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 we=n(4070),ke=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)(),p=(0,me.o)(),{search:f,hash:m}=(0,l.zy)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${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)(fe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ge,{className:he}),h]}),items:g})},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:fe,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,we.zK)(r),i=(0,ke.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,we.zK)(r),i=(0,ke.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,ke.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)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),g=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],h=(0,ke.Vd)(n)[0],y=t&&g.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&&g.length>1?void 0:Se(h).path;return g.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function Ce(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 Ae(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ce,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function _e(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,w.p)().navbar.items.length,t=I();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(_e,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.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)(Y,{}),primaryMenu:(0,c.jsx)(Ae,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,j.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)(Le,{onClick:i.toggle}),(0,c.jsx)(je,{})]})}var Pe=n(440);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(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 Ie(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Oe.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 Be(){const{toggle:e,shown:t}=(0,j.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 $e={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)(Ce,{...e})},t)))})}function qe(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 He(){const e=(0,j.M)(),t=(0,w.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)(qe,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(Q,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(V,{className:$e.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function Ge(){return(0,c.jsx)(Re,{children:(0,c.jsx)(He,{})})}function Ve(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,l=(0,X.A)(n),s=(0,X.A)(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 We(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)(Ve,{item:t})},t.href??t.to)}function Qe(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)(We,{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)(Qe,{column:e},t)))})}function Ye(){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)(Ve,{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)(Ye,{})]},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.h)(),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,w.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,L.fM)([M.a,k.oq,N.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(R.y_,{children:(0,c.jsx)(j.e,{children:(0,c.jsx)(O,{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)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(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)(Ge,{}),(0,c.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,pt.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.A)(t.src),dark:(0,a.A)(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,...p}=e,f=(0,a.A)(l?.href||"/"),m=n?"":t,g=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:g,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 p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(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 p(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 m(e){if(!a.A.canUseDOM)return e?c:d}function g(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 f({collapsibleRef:c,collapsed:n,animation:o}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(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)(g,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>g,oq:()=>m});var r=n(6540),a=n(2303),o=n(9466),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(),p=e=>u.set(String(e)),f=r.createContext(null);function m(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)((()=>{p(!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&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(f);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(9466),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(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)(m(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&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(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===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.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(9466),c=n(4848);const d=e=>`docs-preferred-version-${e}`,p={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()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.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){p.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,c.jsx)(m.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)(m);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:()=>f,M:()=>m});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 p(){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 f(e){let{children:t}=e;const n=p();return(0,c.jsx)(d.Provider,{value:n,children:t})}function m(){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:{}}},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,{Nr:()=>f,w8:()=>h,C5:()=>p,B5:()=>E,Vd:()=>k,QB:()=>S,fW:()=>x,OF:()=>w,Y:()=>b});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 p=!!i.Gy;function f(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=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,d.ys)(e,t),g=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||g(e.items,t))}function y(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||h(e,t);default:return!0}}function b(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function v(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 w(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(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 x(e,t){const n=k(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 S(e,t){const n=k(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 E(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}}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),a=n(4164),o=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.h)(),p=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.A,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,a.A)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.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:()=>p,Tv:()=>u,gk:()=>f});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 p(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 f(){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}`}},9466:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>s});n(6540);const r="localStorage";function a(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 o(e){if(void 0===e&&(e=r),"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,i||(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),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){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}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},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)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,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.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}});var o=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>A,yJ:()=>f,sC:()=>T,AO:()=>p});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;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};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 p(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 f(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 m(){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=f(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.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,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=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))&&f(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&&f(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:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(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=f,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;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],p=n[1],f=n.index;if(l+=e.slice(i,f),i=f+d.length,p)l+=p[1];else{var m=e[i],g=n[2],h=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=m&&m!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,C=y||b;r.push({name:h||o++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:C?u(C):w?".*":"[^"+s(E)+"]+?"})}}return i{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),a=n(8380),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),o.add(e)}))}i.silent=!1,e.exports=i},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],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];g&&b.push.apply(b,i([g])),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)},8692:(e,t,n)=>{var r={"./":8722};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=8692},3157:(e,t,n)=>{var r={"./":8722};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=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;a(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},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