diff --git a/404.html b/404.html index f40509508..3db08ca67 100644 --- a/404.html +++ b/404.html @@ -10,8 +10,8 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

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

diff --git a/assets/js/0c516743.295eedab.js b/assets/js/0c516743.295eedab.js new file mode 100644 index 000000000..dcb98b838 --- /dev/null +++ b/assets/js/0c516743.295eedab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[3136],{9294:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>d,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var t=n(4848),s=n(8453),i=n(6025),c=n(2017);const o={id:"infrastructure_netcore",title:".NET - Azure Infrastructure",sidebar_label:"Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","azure","azure container registry","azure kubernetes service","application insights","cosmos db","deployment"]},d=void 0,l={id:"workloads/azure/backend/netcore/infrastructure_netcore",title:".NET - Azure Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",source:"@site/docs/workloads/azure/backend/netcore/infrastructure_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/infrastructure_netcore",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"infrastructure_netcore",title:".NET - Azure Infrastructure",sidebar_label:"Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","azure","azure container registry","azure kubernetes service","application insights","cosmos db","deployment"]},sidebar:"docs",previous:{title:"Functionally Testing the API",permalink:"/docs/workloads/azure/backend/netcore/testing/functional_testing_netcore"},next:{title:"Pipeline",permalink:"/docs/workloads/azure/backend/netcore/pipeline_netcore"}},a={},u=[{value:"Overview",id:"overview",level:2},{value:"Diagram",id:"diagram",level:3},{value:"Resource List",id:"resource-list",level:3},{value:"Deploying",id:"deploying",level:2},{value:"Pipelines",id:"pipelines",level:3}];function h(e){const r={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(r.p,{children:"This page present the high level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS."}),"\n",(0,t.jsx)(c.A,{url:"https://www.youtube.com/watch?v=G8FW-djEDDY"}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsxs)(r.strong,{children:["This page assumes that the core infrastructure has already been provisioned. Instructions and additional information on the core infrastructure can be found ",(0,t.jsx)(r.a,{href:"/docs/infrastructure/azure/core_infrastructure",children:"here"})]})}),"\n",(0,t.jsx)(r.p,{children:"Both the diagram and resource list below are for a single environment."}),"\n",(0,t.jsx)(r.h3,{id:"diagram",children:"Diagram"}),"\n",(0,t.jsx)("img",{alt:"Azure .NET API Infrastructure",src:(0,i.Ay)("img/azure_rest_api_infrastructure.png")}),"\n",(0,t.jsx)(r.h3,{id:"resource-list",children:"Resource List"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Resource"}),(0,t.jsx)(r.th,{children:"Description"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["Resource Group - Core ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Used to logically group core infrastructure"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["AKS ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Azure Kubernetes Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Public DNS Record"}),(0,t.jsx)(r.td,{children:"DNS record pointing Ingress (via application gateway***** and internal load balancer*****)"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["ACR ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Azure Container Registry"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["Namespace: ",(0,t.jsx)(r.code,{children:"{env}-api"})]}),(0,t.jsx)(r.td,{children:"Kubernetes namespace for the environment"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Ingress"}),(0,t.jsx)(r.td,{children:"Kubernetes Ingress to handle routing to Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Service"}),(0,t.jsx)(r.td,{children:"Kubernetes Service to handle routing to Deployment Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Deployment"}),(0,t.jsx)(r.td,{children:"Kubernetes Deployment for managing Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Resource Group - API"}),(0,t.jsx)(r.td,{children:"Used to logically group API specific infrastructure"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Cosmos DB"}),(0,t.jsx)(r.td,{children:"Azure managed NoSQL database"})]})]})]}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"*"})," ",(0,t.jsx)(r.em,{children:"Resource is created by the core infrastructure deployment."})]}),"\n",(0,t.jsx)(r.h2,{id:"deploying",children:"Deploying"}),"\n",(0,t.jsxs)(r.p,{children:["All infrastructure is deployed using ",(0,t.jsx)(r.a,{href:"https://www.terraform.io/",children:"Terraform"})," that is included with the generated code."]}),"\n",(0,t.jsx)(r.h3,{id:"pipelines",children:"Pipelines"}),"\n",(0,t.jsx)(r.p,{children:"The following pipelines are currently supported for automating the deployment:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/docs/workloads/azure/backend/netcore/pipeline_netcore",children:"Azure DevOps"})}),"\n"]})]})}function p(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},2017:(e,r,n)=>{n.d(r,{A:()=>l});n(6540);var t=n(3554),s=n.n(t);const i="playerSection_SVZU",c="playerWrapper_cclc",o="player_oSQx";var d=n(4848);const l=function(e){let{url:r}=e;return(0,d.jsx)("div",{className:i,children:(0,d.jsx)("div",{className:c,children:(0,d.jsx)(s(),{className:o,url:r,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var t=n(6540);const s={},i=t.createContext(s);function c(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c516743.4bcf3bfa.js b/assets/js/0c516743.4bcf3bfa.js deleted file mode 100644 index f26e82b63..000000000 --- a/assets/js/0c516743.4bcf3bfa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[3136],{9294:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>a});var t=n(4848),s=n(8453),i=n(6025);const c={id:"infrastructure_netcore",title:".NET - Azure Infrastructure",sidebar_label:"Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","azure","azure container registry","azure kubernetes service","application insights","cosmos db","deployment"]},o=void 0,d={id:"workloads/azure/backend/netcore/infrastructure_netcore",title:".NET - Azure Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",source:"@site/docs/workloads/azure/backend/netcore/infrastructure_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/infrastructure_netcore",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"infrastructure_netcore",title:".NET - Azure Infrastructure",sidebar_label:"Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","azure","azure container registry","azure kubernetes service","application insights","cosmos db","deployment"]},sidebar:"docs",previous:{title:"Functionally Testing the API",permalink:"/docs/workloads/azure/backend/netcore/testing/functional_testing_netcore"},next:{title:"Pipeline",permalink:"/docs/workloads/azure/backend/netcore/pipeline_netcore"}},l={},a=[{value:"Overview",id:"overview",level:2},{value:"Diagram",id:"diagram",level:3},{value:"Resource List",id:"resource-list",level:3},{value:"Deploying",id:"deploying",level:2},{value:"Pipelines",id:"pipelines",level:3}];function u(e){const r={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(r.p,{children:"This page present the high level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS."}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsxs)(r.strong,{children:["This page assumes that the core infrastructure has already been provisioned. Instructions and additional information on the core infrastructure can be found ",(0,t.jsx)(r.a,{href:"/docs/infrastructure/azure/core_infrastructure",children:"here"})]})}),"\n",(0,t.jsx)(r.p,{children:"Both the diagram and resource list below are for a single environment."}),"\n",(0,t.jsx)(r.h3,{id:"diagram",children:"Diagram"}),"\n",(0,t.jsx)("img",{alt:"Azure .NET API Infrastructure",src:(0,i.Ay)("img/azure_rest_api_infrastructure.png")}),"\n",(0,t.jsx)(r.h3,{id:"resource-list",children:"Resource List"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Resource"}),(0,t.jsx)(r.th,{children:"Description"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["Resource Group - Core ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Used to logically group core infrastructure"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["AKS ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Azure Kubernetes Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Public DNS Record"}),(0,t.jsx)(r.td,{children:"DNS record pointing Ingress (via application gateway***** and internal load balancer*****)"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["ACR ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Azure Container Registry"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["Namespace: ",(0,t.jsx)(r.code,{children:"{env}-api"})]}),(0,t.jsx)(r.td,{children:"Kubernetes namespace for the environment"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Ingress"}),(0,t.jsx)(r.td,{children:"Kubernetes Ingress to handle routing to Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Service"}),(0,t.jsx)(r.td,{children:"Kubernetes Service to handle routing to Deployment Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Deployment"}),(0,t.jsx)(r.td,{children:"Kubernetes Deployment for managing Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Resource Group - API"}),(0,t.jsx)(r.td,{children:"Used to logically group API specific infrastructure"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Cosmos DB"}),(0,t.jsx)(r.td,{children:"Azure managed NoSQL database"})]})]})]}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"*"})," ",(0,t.jsx)(r.em,{children:"Resource is created by the core infrastructure deployment."})]}),"\n",(0,t.jsx)(r.h2,{id:"deploying",children:"Deploying"}),"\n",(0,t.jsxs)(r.p,{children:["All infrastructure is deployed using ",(0,t.jsx)(r.a,{href:"https://www.terraform.io/",children:"Terraform"})," that is included with the generated code."]}),"\n",(0,t.jsx)(r.h3,{id:"pipelines",children:"Pipelines"}),"\n",(0,t.jsx)(r.p,{children:"The following pipelines are currently supported for automating the deployment:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/docs/workloads/azure/backend/netcore/pipeline_netcore",children:"Azure DevOps"})}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var t=n(6540);const s={},i=t.createContext(s);function c(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a451233.647c0970.js b/assets/js/1a451233.647c0970.js new file mode 100644 index 000000000..e07c67b36 --- /dev/null +++ b/assets/js/1a451233.647c0970.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[7207],{7049:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>c,default:()=>j,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var r=t(4848),s=t(8453),o=t(1470),i=t(9365),a=t(2017);const l={id:"build_and_run_project_netcore",title:"Build & Run REST API with CQRS",sidebar_label:"Build & Run REST API with CQRS",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application with CQRS",keywords:[".net core","rest api","cqrs","azure","application insights","cosmos db","aws sns","build","run","application"]},c=void 0,d={id:"workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",title:"Build & Run REST API with CQRS",description:"Build and Run .NET Core REST API application with CQRS",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api_cqrs",slug:"/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"build_and_run_project_netcore",title:"Build & Run REST API with CQRS",sidebar_label:"Build & Run REST API with CQRS",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application with CQRS",keywords:[".net core","rest api","cqrs","azure","application insights","cosmos db","aws sns","build","run","application"]},sidebar:"docs",previous:{title:"Configure REST API with CQRS project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore"},next:{title:"Architecture Overview",permalink:"/docs/workloads/azure/backend/netcore/architecture/architecture_overview_netcore"}},h={},u=[{value:"Build and Run REST API with CQRS",id:"build-and-run-rest-api-with-cqrs",level:2},{value:"Building and Running",id:"building-and-running",level:3},{value:"Verify that the application has started",id:"verify-that-the-application-has-started",level:3}];function p(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"build-and-run-rest-api-with-cqrs",children:"Build and Run REST API with CQRS"}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(n.p,{children:"You can run the API created by the templates either locally or in a Docker container."}),"\n",(0,r.jsx)(n.admonition,{title:"Project Configuration",type:"note",children:(0,r.jsxs)(n.p,{children:["Depending on the options selected when creating the CQRS API, additional configuration may be required.\nbefore running the project. It is important to complete the ",(0,r.jsx)(n.a,{href:"https://stacks.ensono.com/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore",children:"Configure REST API with CQRS project"})," section of this guide before building and running the project."]})}),"\n",(0,r.jsx)(n.h3,{id:"building-and-running",children:"Building and Running"}),"\n",(0,r.jsx)(a.A,{url:"https://www.youtube.com/watch?v=-kKWzRE6ahQ"}),"\n",(0,r.jsxs)(t,{open:!0,children:[(0,r.jsx)("summary",{children:"Build and run locally"}),(0,r.jsx)("div",{children:(0,r.jsxs)(o.A,{groupId:"operating-systems",defaultValue:"windows",values:[{label:"Windows",value:"windows"},{label:"Mac and Linux",value:"mac-and-linux"}],children:[(0,r.jsxs)(i.A,{value:"windows",children:[(0,r.jsxs)(n.p,{children:["The following example shows how to build and run the Stacks CQRS API solution. In this example, the solution is located in the ",(0,r.jsx)(n.em,{children:"c:\\dev"})," directory, and the project is named ",(0,r.jsx)(n.em,{children:"Company.Project"}),". If you have chose a different directory or project name when creating your solution, adjust the commands accordingly."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Open a terminal."}),(0,r.jsx)(n.br,{}),"\n","You can use either Command Prompt or PowerShell."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change your directory to the API project directory. In this example, the solution was created in the ",(0,r.jsx)(n.em,{children:"c:\\dev"})," folder and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"cd c:\\dev\\company.project\\src\\cqrs\\src\\api\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the solution"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"dotnet build"})," command to build the solution in this directory."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"dotnet build\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the API project."}),(0,r.jsx)(n.br,{}),"\n","Finally, use the ",(0,r.jsx)(n.code,{children:"dotnet run"})," command to start the API project.",(0,r.jsx)(n.br,{}),"\n","Replace ",(0,r.jsx)(n.em,{children:"Company.Project"})," with your project's name."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"dotnet run --project Company.Project.API/Company.Project.API.csproj\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(n.admonition,{title:"Potential issue when running on Windows.",type:"note",children:[(0,r.jsxs)(n.p,{children:["If your folder structure is too deep, you may encounter a build failure. This issue arises due to our dependency on ",(0,r.jsx)(n.a,{href:"https://docs.pact.io/",children:"Pact"})," for contract testing. The error will looks like this: -"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"Error MSB3491 Path: File exceeds the OS max path limit. The fully qualified file name must be less than 260 characters.\n"})}),(0,r.jsx)(n.p,{children:"There are two fixes for this issue: -"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell#enable-long-paths-in-windows-10-version-1607-and-later",children:"Enable long file paths on Windows."})}),"\n",(0,r.jsx)(n.li,{children:"Create your folder at a higher level, so that paths won't exceed 260 characters."}),"\n"]})]})]}),(0,r.jsxs)(i.A,{value:"mac-and-linux",children:[(0,r.jsxs)(n.p,{children:["Below is an example of how to build and run the Stacks CQRS API solution. In this example, the solution is located in a folder called ",(0,r.jsx)(n.em,{children:"dev"})," in the home directory, and the project is named ",(0,r.jsx)(n.em,{children:"Company.Project"}),". If you have used a different directory or project name, adjust the commands accordingly."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Open a terminal."})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change to the API project directory within the solution. In this example, the solution was created in a folder called ",(0,r.jsx)(n.em,{children:"dev"})," inside ",(0,r.jsx)(n.em,{children:"anneexample"}),"'s home directory and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd ~/users/anneexample/dev/company.project/src/cqrs/src/api\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the solution"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"dotnet build"})," command to build the solution in this directory."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"dotnet build\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the API project."}),(0,r.jsx)(n.br,{}),"\n","Finally, use the ",(0,r.jsx)(n.code,{children:"dotnet run"})," command to start the API project.",(0,r.jsx)(n.br,{}),"\n","Replace ",(0,r.jsx)(n.em,{children:"Company.Project"})," with your actual project name."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"dotnet run --project Company.Project.API/Company.Project.API.csproj\n"})}),"\n"]}),"\n"]})]})]})})]}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"Build and run in a Docker container"}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(o.A,{groupId:"operating-systems",defaultValue:"windows",values:[{label:"Windows",value:"windows"},{label:"Mac and Linux",value:"mac-and-linux"}],children:[(0,r.jsxs)(i.A,{value:"windows",children:[(0,r.jsxs)(n.p,{children:["The following example shows how to build and run the Stacks CQRS API solution. In this example, the solution is located in the ",(0,r.jsx)(n.em,{children:"c:\\dev"})," directory, and the project is named ",(0,r.jsx)(n.em,{children:"Company.Project"}),". If you have used a different directory or project name, adjust the commands accordingly."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Open a terminal."}),(0,r.jsx)(n.br,{}),"\n","You can use either Command Prompt or PowerShell."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change to the project's root directory within the solution. In this example, the solution was created in ",(0,r.jsx)(n.em,{children:"c:\\dev"})," and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"cd c:\\dev\\company.project\\\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the Docker Image"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker build"})," command to build the Docker image from the Dockerfile in this folder."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"docker build -t dotnet-api -f src/cqrs/src/api/Dockerfile --build-arg self_repo_src=src/cqrs/src/api .\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the Docker Image."}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker run"})," command to start a container from the image that we just built. Use one of the commands below, bt you will need to change the ",(0,r.jsx)(n.code,{children:"--mount"})," switch so that it matches the path to your appsettings.json. You will also need to provide the values of the environment variables that you made a note of in the previous section and delete the environment variables that you are not using."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",metastring:'title="Command Line"',children:"docker run -p 5000:8080 ^\n--mount type=bind,source=C:/dev/company.project/src/cqrs/src/api/company.project.API/appsettings.json,target=/app/config/appsettings.json ^\n-e COSMOSDB_KEY=your-key ^\n-e EVENTHUB_CONNECTIONSTRING=your-aeh-connection-string ^\n-e SERVICEBUS_CONNECTIONSTRING=your-asb-connection-string ^\n-e STORAGE_CONNECTIONSTRING=your-aeh-storage-connection-string ^\n-e TOPIC_ARN=your-aws-sns-topic-arn ^\ndotnet-api:latest\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",metastring:'title="PowerShell"',children:"docker run -p 5000:8080 `\n--mount type=bind,source=C:/dev/company.project/src/cqrs/src/api/company.project.API/appsettings.json,target=/app/config/appsettings.json `\n-e COSMOSDB_KEY=your-key `\n-e EVENTHUB_CONNECTIONSTRING=your-aeh-connection-string `\n-e SERVICEBUS_CONNECTIONSTRING=your-asb-connection-string `\n-e STORAGE_CONNECTIONSTRING=your-aeh-storage-connection-string `\n-e TOPIC_ARN=your-aws-sns-topic-arn `\ndotnet-api:latest\n"})}),"\n"]}),"\n"]})]}),(0,r.jsx)(i.A,{value:"mac-and-linux",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.strong,{children:"Terminal"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change to the API project directory within the solution. In this example, the solution was created in a folder called ",(0,r.jsx)(n.em,{children:"dev"})," inside ",(0,r.jsx)(n.em,{children:"anneexample"}),"'s home directory and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd ~/users/anneexample/dev/company.project\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the Docker Image"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker build"})," command to build the Docker image from the Dockerfile in this folder."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:" docker build -t dotnet-api -f src/cqrs/src/api/Dockerfile --build-arg self_repo_src=src/cqrs/src/api .\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the Docker Image."}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker run"})," command to start a container from the image that we just built. Use one of the commands below, bt you will need to change the ",(0,r.jsx)(n.code,{children:"--mount"})," switch so that it matches the path to your appsettings.json. You will also need to provide the values of the environment variables that you made a note of in the previous section and delete the environment variables that you are not using."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 5000:8080 \\\n--mount type=bind,source=C:/dev/company.project/src/cqrs/src/api/company.project.API/appsettings.json,target=/app/config/appsettings.json\\\n-e COSMOSDB_KEY=your-key \\\n-e SERVICEBUS_CONNECTIONSTRING=your-asb-connection-string \\\n-e EVENTHUB_CONNECTIONSTRING=your-aeh-connection-string \\\n-e STORAGE_CONNECTIONSTRING=your-aeh-storage-connection-string \\\ndotnet-api:latest\n"})}),"\n"]}),"\n"]})})]}),(0,r.jsxs)(n.admonition,{title:"Environment Variables",type:"note",children:[(0,r.jsxs)(n.p,{children:["When running the Docker container, you need to pass your environment variables using the ",(0,r.jsx)(n.code,{children:"-e"})," switch. The commands above show every environment variable. You should replace the placeholders with actual secrets that you made a note of when you followed the ",(0,r.jsx)(n.a,{href:"https://stacks.ensono.com/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore",children:"Configure REST API with CQRS project"})," step of this guide and remove the environment variables that you are not using."]}),(0,r.jsx)(n.p,{children:"The table below describes each environment variable."}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Environment Variable name"}),(0,r.jsx)(n.th,{children:"Environment Variable required when..."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"COSMOSDB_KEY"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"Cosmos DB"})," is your database service."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"EVENTHUB_CONNECTIONSTRING"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"Azure Event Hubs"})," is your messaging service."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"SERVICEBUS_CONNECTIONSTRING"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"Azure Service Bus"})," is your messaging service."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"TOPIC_ARN"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"AWS SNS"})," is your messaging service."]})]})]})]})]}),(0,r.jsx)(n.admonition,{title:"appsettings.json",type:"note",children:(0,r.jsxs)(n.p,{children:["Note that we mount the ",(0,r.jsx)(n.strong,{children:"appsettings.json"})," file when running locally, but we do not do this when the full project is deployed to Azure. This is because when the project is deployed to Azure, the build process will perform the substitution."]})})]})]}),"\n",(0,r.jsx)(n.h3,{id:"verify-that-the-application-has-started",children:"Verify that the application has started"}),"\n",(0,r.jsx)(n.admonition,{title:"Relationship between domain and path",type:"note",children:(0,r.jsxs)(n.p,{children:["If you changed the domain object name during project creation, the URL path will reflect that change. For example, if your domain object is named ",(0,r.jsx)(n.code,{children:"foo"}),", the path will be ",(0,r.jsx)(n.code,{children:"../v1/foo"})," instead of ",(0,r.jsx)(n.code,{children:"../v1/menu"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["Browse to ",(0,r.jsx)(n.a,{href:"http://localhost:5000/v1/menu",children:"http://localhost:5000/v1/menu"}),".",(0,r.jsx)(n.br,{}),"\n","This should return a valid JSON response."]}),"\n",(0,r.jsxs)(n.p,{children:["The application configuration uses Swagger/OAS3 to represent the API endpoints. The Swagger UI can be viewed by directing your\nbrowser to ",(0,r.jsx)(n.a,{href:"http://localhost:5000/swagger/index.html",children:"http://localhost:5000/swagger/index.html"}),"."]})]})}function j(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},9365:(e,n,t)=>{t.d(n,{A:()=>i});t(6540);var r=t(4164);const s={tabItem:"tabItem_Ymn6"};var o=t(4848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,i),hidden:t,children:n})}},1470:(e,n,t)=>{t.d(n,{A:()=>v});var r=t(6540),s=t(4164),o=t(3104),i=t(6347),a=t(205),l=t(7485),c=t(1682),d=t(679);function h(e){var n,t;return null!=(n=null==(t=r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:t.filter(Boolean))?n:[]}function u(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=null!=n?n:function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error('Docusaurus error: Duplicate values "'+n.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:t}=e;const s=(0,i.W6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:n,groupId:t});return[(0,l.aZ)(o),(0,r.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=u(e),[i,l]=(0,r.useState)((()=>function(e){var n;let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error('Docusaurus error: The has a defaultValue "'+t+'" but none of its children has the corresponding value. Available values are: '+r.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return t}const s=null!=(n=r.find((e=>e.default)))?n:r[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:o}))),[c,h]=j({queryString:t,groupId:s}),[m,x]=function(e){let{groupId:n}=e;const t=function(e){return e?"docusaurus.tab."+e:null}(n),[s,o]=(0,d.Dv)(t);return[s,(0,r.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:s}),b=(()=>{const e=null!=c?c:m;return p({value:e,tabValues:o})?e:null})();(0,a.A)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error("Can't select invalid tab value="+e);l(e),h(e),x(e)}),[h,x,o]),tabValues:o}}var x=t(2303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(4848);function f(e){let{className:n,block:t,selectedValue:r,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),s=a[t].value;s!==r&&(c(n),i(s))},h=e=>{var n;let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{var r;const n=l.indexOf(e.currentTarget)+1;t=null!=(r=l[n])?r:l[0];break}case"ArrowLeft":{var s;const n=l.indexOf(e.currentTarget)-1;t=null!=(s=l[n])?s:l[l.length-1];break}}null==(n=t)||n.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:a.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...o,className:(0,s.A)("tabs__item",b.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===n}),children:null!=t?t:n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:o}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===o));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function w(e){const n=m(e);return(0,g.jsxs)("div",{className:(0,s.A)("tabs-container",b.tabList),children:[(0,g.jsx)(f,{...n,...e}),(0,g.jsx)(y,{...n,...e})]})}function v(e){const n=(0,x.A)();return(0,g.jsx)(w,{...e,children:h(e.children)},String(n))}},2017:(e,n,t)=>{t.d(n,{A:()=>c});t(6540);var r=t(3554),s=t.n(r);const o="playerSection_SVZU",i="playerWrapper_cclc",a="player_oSQx";var l=t(4848);const c=function(e){let{url:n}=e;return(0,l.jsx)("div",{className:o,children:(0,l.jsx)("div",{className:i,children:(0,l.jsx)(s(),{className:a,url:n,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var r=t(6540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a451233.bcae360f.js b/assets/js/1a451233.bcae360f.js deleted file mode 100644 index b641fcbbd..000000000 --- a/assets/js/1a451233.bcae360f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[7207],{7049:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var r=t(4848),s=t(8453),o=t(1470),i=t(9365);const a={id:"build_and_run_project_netcore",title:"Build & Run REST API with CQRS",sidebar_label:"Build & Run REST API with CQRS",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application with CQRS",keywords:[".net core","rest api","cqrs","azure","application insights","cosmos db","aws sns","build","run","application"]},l=void 0,c={id:"workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",title:"Build & Run REST API with CQRS",description:"Build and Run .NET Core REST API application with CQRS",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api_cqrs",slug:"/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"build_and_run_project_netcore",title:"Build & Run REST API with CQRS",sidebar_label:"Build & Run REST API with CQRS",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application with CQRS",keywords:[".net core","rest api","cqrs","azure","application insights","cosmos db","aws sns","build","run","application"]},sidebar:"docs",previous:{title:"Configure REST API with CQRS project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore"},next:{title:"Architecture Overview",permalink:"/docs/workloads/azure/backend/netcore/architecture/architecture_overview_netcore"}},d={},h=[{value:"Build and Run REST API with CQRS",id:"build-and-run-rest-api-with-cqrs",level:2},{value:"Building and Running",id:"building-and-running",level:3},{value:"Verify that the application has started",id:"verify-that-the-application-has-started",level:3}];function u(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"build-and-run-rest-api-with-cqrs",children:"Build and Run REST API with CQRS"}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(n.p,{children:"You can run the API created by the templates either locally or in a Docker container."}),"\n",(0,r.jsx)(n.admonition,{title:"Project Configuration",type:"note",children:(0,r.jsxs)(n.p,{children:["Depending on the options selected when creating the CQRS API, additional configuration may be required.\nbefore running the project. It is important to complete the ",(0,r.jsx)(n.a,{href:"https://stacks.ensono.com/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore",children:"Configure REST API with CQRS project"})," section of this guide before building and running the project."]})}),"\n",(0,r.jsx)(n.h3,{id:"building-and-running",children:"Building and Running"}),"\n",(0,r.jsxs)(t,{open:!0,children:[(0,r.jsx)("summary",{children:"Build and run locally"}),(0,r.jsx)("div",{children:(0,r.jsxs)(o.A,{groupId:"operating-systems",defaultValue:"windows",values:[{label:"Windows",value:"windows"},{label:"Mac and Linux",value:"mac-and-linux"}],children:[(0,r.jsxs)(i.A,{value:"windows",children:[(0,r.jsxs)(n.p,{children:["The following example shows how to build and run the Stacks CQRS API solution. In this example, the solution is located in the ",(0,r.jsx)(n.em,{children:"c:\\dev"})," directory, and the project is named ",(0,r.jsx)(n.em,{children:"Company.Project"}),". If you have chose a different directory or project name when creating your solution, adjust the commands accordingly."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Open a terminal."}),(0,r.jsx)(n.br,{}),"\n","You can use either Command Prompt or PowerShell."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change your directory to the API project directory. In this example, the solution was created in the ",(0,r.jsx)(n.em,{children:"c:\\dev"})," folder and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"cd c:\\dev\\company.project\\src\\cqrs\\src\\api\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the solution"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"dotnet build"})," command to build the solution in this directory."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"dotnet build\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the API project."}),(0,r.jsx)(n.br,{}),"\n","Finally, use the ",(0,r.jsx)(n.code,{children:"dotnet run"})," command to start the API project.",(0,r.jsx)(n.br,{}),"\n","Replace ",(0,r.jsx)(n.em,{children:"Company.Project"})," with your project's name."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"dotnet run --project Company.Project.API/Company.Project.API.csproj\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(n.admonition,{title:"Potential issue when running on Windows.",type:"note",children:[(0,r.jsxs)(n.p,{children:["If your folder structure is too deep, you may encounter a build failure. This issue arises due to our dependency on ",(0,r.jsx)(n.a,{href:"https://docs.pact.io/",children:"Pact"})," for contract testing. The error will looks like this: -"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"Error MSB3491 Path: File exceeds the OS max path limit. The fully qualified file name must be less than 260 characters.\n"})}),(0,r.jsx)(n.p,{children:"There are two fixes for this issue: -"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell#enable-long-paths-in-windows-10-version-1607-and-later",children:"Enable long file paths on Windows."})}),"\n",(0,r.jsx)(n.li,{children:"Create your folder at a higher level, so that paths won't exceed 260 characters."}),"\n"]})]})]}),(0,r.jsxs)(i.A,{value:"mac-and-linux",children:[(0,r.jsxs)(n.p,{children:["Below is an example of how to build and run the Stacks CQRS API solution. In this example, the solution is located in a folder called ",(0,r.jsx)(n.em,{children:"dev"})," in the home directory, and the project is named ",(0,r.jsx)(n.em,{children:"Company.Project"}),". If you have used a different directory or project name, adjust the commands accordingly."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Open a terminal."})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change to the API project directory within the solution. In this example, the solution was created in a folder called ",(0,r.jsx)(n.em,{children:"dev"})," inside ",(0,r.jsx)(n.em,{children:"anneexample"}),"'s home directory and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd ~/users/anneexample/dev/company.project/src/cqrs/src/api\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the solution"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"dotnet build"})," command to build the solution in this directory."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"dotnet build\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the API project."}),(0,r.jsx)(n.br,{}),"\n","Finally, use the ",(0,r.jsx)(n.code,{children:"dotnet run"})," command to start the API project.",(0,r.jsx)(n.br,{}),"\n","Replace ",(0,r.jsx)(n.em,{children:"Company.Project"})," with your actual project name."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"dotnet run --project Company.Project.API/Company.Project.API.csproj\n"})}),"\n"]}),"\n"]})]})]})})]}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"Build and run in a Docker container"}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(o.A,{groupId:"operating-systems",defaultValue:"windows",values:[{label:"Windows",value:"windows"},{label:"Mac and Linux",value:"mac-and-linux"}],children:[(0,r.jsxs)(i.A,{value:"windows",children:[(0,r.jsxs)(n.p,{children:["The following example shows how to build and run the Stacks CQRS API solution. In this example, the solution is located in the ",(0,r.jsx)(n.em,{children:"c:\\dev"})," directory, and the project is named ",(0,r.jsx)(n.em,{children:"Company.Project"}),". If you have used a different directory or project name, adjust the commands accordingly."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Open a terminal."}),(0,r.jsx)(n.br,{}),"\n","You can use either Command Prompt or PowerShell."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change to the project's root directory within the solution. In this example, the solution was created in ",(0,r.jsx)(n.em,{children:"c:\\dev"})," and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"cd c:\\dev\\company.project\\\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the Docker Image"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker build"})," command to build the Docker image from the Dockerfile in this folder."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:"docker build -t dotnet-api -f src/cqrs/src/api/Dockerfile --build-arg self_repo_src=src/cqrs/src/api .\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the Docker Image."}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker run"})," command to start a container from the image that we just built. Use one of the commands below, bt you will need to change the ",(0,r.jsx)(n.code,{children:"--mount"})," switch so that it matches the path to your appsettings.json. You will also need to provide the values of the environment variables that you made a note of in the previous section and delete the environment variables that you are not using."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",metastring:'title="Command Line"',children:"docker run -p 5000:8080 ^\n--mount type=bind,source=C:/dev/company.project/src/cqrs/src/api/company.project.API/appsettings.json,target=/app/config/appsettings.json ^\n-e COSMOSDB_KEY=your-key ^\n-e EVENTHUB_CONNECTIONSTRING=your-aeh-connection-string ^\n-e SERVICEBUS_CONNECTIONSTRING=your-asb-connection-string ^\n-e STORAGE_CONNECTIONSTRING=your-aeh-storage-connection-string ^\n-e TOPIC_ARN=your-aws-sns-topic-arn ^\ndotnet-api:latest\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",metastring:'title="PowerShell"',children:"docker run -p 5000:8080 `\n--mount type=bind,source=C:/dev/company.project/src/cqrs/src/api/company.project.API/appsettings.json,target=/app/config/appsettings.json `\n-e COSMOSDB_KEY=your-key `\n-e EVENTHUB_CONNECTIONSTRING=your-aeh-connection-string `\n-e SERVICEBUS_CONNECTIONSTRING=your-asb-connection-string `\n-e STORAGE_CONNECTIONSTRING=your-aeh-storage-connection-string `\n-e TOPIC_ARN=your-aws-sns-topic-arn `\ndotnet-api:latest\n"})}),"\n"]}),"\n"]})]}),(0,r.jsx)(i.A,{value:"mac-and-linux",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.strong,{children:"Terminal"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Navigate to the project directory."}),(0,r.jsx)(n.br,{}),"\n","Change to the API project directory within the solution. In this example, the solution was created in a folder called ",(0,r.jsx)(n.em,{children:"dev"})," inside ",(0,r.jsx)(n.em,{children:"anneexample"}),"'s home directory and was named ",(0,r.jsx)(n.em,{children:"Company.Project"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd ~/users/anneexample/dev/company.project\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build the Docker Image"}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker build"})," command to build the Docker image from the Dockerfile in this folder."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bat",children:" docker build -t dotnet-api -f src/cqrs/src/api/Dockerfile --build-arg self_repo_src=src/cqrs/src/api .\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run the Docker Image."}),(0,r.jsx)(n.br,{}),"\n","Use the ",(0,r.jsx)(n.code,{children:"docker run"})," command to start a container from the image that we just built. Use one of the commands below, bt you will need to change the ",(0,r.jsx)(n.code,{children:"--mount"})," switch so that it matches the path to your appsettings.json. You will also need to provide the values of the environment variables that you made a note of in the previous section and delete the environment variables that you are not using."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 5000:8080 \\\n--mount type=bind,source=C:/dev/company.project/src/cqrs/src/api/company.project.API/appsettings.json,target=/app/config/appsettings.json\\\n-e COSMOSDB_KEY=your-key \\\n-e SERVICEBUS_CONNECTIONSTRING=your-asb-connection-string \\\n-e EVENTHUB_CONNECTIONSTRING=your-aeh-connection-string \\\n-e STORAGE_CONNECTIONSTRING=your-aeh-storage-connection-string \\\ndotnet-api:latest\n"})}),"\n"]}),"\n"]})})]}),(0,r.jsxs)(n.admonition,{title:"Environment Variables",type:"note",children:[(0,r.jsxs)(n.p,{children:["When running the Docker container, you need to pass your environment variables using the ",(0,r.jsx)(n.code,{children:"-e"})," switch. The commands above show every environment variable. You should replace the placeholders with actual secrets that you made a note of when you followed the ",(0,r.jsx)(n.a,{href:"https://stacks.ensono.com/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore",children:"Configure REST API with CQRS project"})," step of this guide and remove the environment variables that you are not using."]}),(0,r.jsx)(n.p,{children:"The table below describes each environment variable."}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Environment Variable name"}),(0,r.jsx)(n.th,{children:"Environment Variable required when..."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"COSMOSDB_KEY"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"Cosmos DB"})," is your database service."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"EVENTHUB_CONNECTIONSTRING"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"Azure Event Hubs"})," is your messaging service."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"SERVICEBUS_CONNECTIONSTRING"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"Azure Service Bus"})," is your messaging service."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"TOPIC_ARN"}),(0,r.jsxs)(n.td,{children:["When ",(0,r.jsx)(n.em,{children:"AWS SNS"})," is your messaging service."]})]})]})]})]}),(0,r.jsx)(n.admonition,{title:"appsettings.json",type:"note",children:(0,r.jsxs)(n.p,{children:["Note that we mount the ",(0,r.jsx)(n.strong,{children:"appsettings.json"})," file when running locally, but we do not do this when the full project is deployed to Azure. This is because when the project is deployed to Azure, the build process will perform the substitution."]})})]})]}),"\n",(0,r.jsx)(n.h3,{id:"verify-that-the-application-has-started",children:"Verify that the application has started"}),"\n",(0,r.jsx)(n.admonition,{title:"Relationship between domain and path",type:"note",children:(0,r.jsxs)(n.p,{children:["If you changed the domain object name during project creation, the URL path will reflect that change. For example, if your domain object is named ",(0,r.jsx)(n.code,{children:"foo"}),", the path will be ",(0,r.jsx)(n.code,{children:"../v1/foo"})," instead of ",(0,r.jsx)(n.code,{children:"../v1/menu"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["Browse to ",(0,r.jsx)(n.a,{href:"http://localhost:5000/v1/menu",children:"http://localhost:5000/v1/menu"}),".",(0,r.jsx)(n.br,{}),"\n","This should return a valid JSON response."]}),"\n",(0,r.jsxs)(n.p,{children:["The application configuration uses Swagger/OAS3 to represent the API endpoints. The Swagger UI can be viewed by directing your\nbrowser to ",(0,r.jsx)(n.a,{href:"http://localhost:5000/swagger/index.html",children:"http://localhost:5000/swagger/index.html"}),"."]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},9365:(e,n,t)=>{t.d(n,{A:()=>i});t(6540);var r=t(4164);const s={tabItem:"tabItem_Ymn6"};var o=t(4848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,i),hidden:t,children:n})}},1470:(e,n,t)=>{t.d(n,{A:()=>v});var r=t(6540),s=t(4164),o=t(3104),i=t(6347),a=t(205),l=t(7485),c=t(1682),d=t(679);function h(e){var n,t;return null!=(n=null==(t=r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:t.filter(Boolean))?n:[]}function u(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=null!=n?n:function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error('Docusaurus error: Duplicate values "'+n.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:t}=e;const s=(0,i.W6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:n,groupId:t});return[(0,l.aZ)(o),(0,r.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=u(e),[i,l]=(0,r.useState)((()=>function(e){var n;let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error('Docusaurus error: The has a defaultValue "'+t+'" but none of its children has the corresponding value. Available values are: '+r.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return t}const s=null!=(n=r.find((e=>e.default)))?n:r[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:o}))),[c,h]=j({queryString:t,groupId:s}),[m,x]=function(e){let{groupId:n}=e;const t=function(e){return e?"docusaurus.tab."+e:null}(n),[s,o]=(0,d.Dv)(t);return[s,(0,r.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:s}),b=(()=>{const e=null!=c?c:m;return p({value:e,tabValues:o})?e:null})();(0,a.A)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error("Can't select invalid tab value="+e);l(e),h(e),x(e)}),[h,x,o]),tabValues:o}}var x=t(2303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(4848);function f(e){let{className:n,block:t,selectedValue:r,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),s=a[t].value;s!==r&&(c(n),i(s))},h=e=>{var n;let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{var r;const n=l.indexOf(e.currentTarget)+1;t=null!=(r=l[n])?r:l[0];break}case"ArrowLeft":{var s;const n=l.indexOf(e.currentTarget)-1;t=null!=(s=l[n])?s:l[l.length-1];break}}null==(n=t)||n.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:a.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...o,className:(0,s.A)("tabs__item",b.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===n}),children:null!=t?t:n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:o}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===o));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function w(e){const n=m(e);return(0,g.jsxs)("div",{className:(0,s.A)("tabs-container",b.tabList),children:[(0,g.jsx)(f,{...n,...e}),(0,g.jsx)(y,{...n,...e})]})}function v(e){const n=(0,x.A)();return(0,g.jsx)(w,{...e,children:h(e.children)},String(n))}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var r=t(6540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3554.ec0bc887.js b/assets/js/3554.ec0bc887.js new file mode 100644 index 000000000..effd5fe73 --- /dev/null +++ b/assets/js/3554.ec0bc887.js @@ -0,0 +1 @@ +(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[3554],{4744:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===r}(e)}(e)};var r="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function a(e,t){return!1!==t.clone&&t.isMergeableObject(e)?s((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function n(e,t,r){return e.concat(t).map((function(e){return a(e,r)}))}function o(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(r){return!1}}function l(e,t,r){var n={};return r.isMergeableObject(e)&&o(e).forEach((function(t){n[t]=a(e[t],r)})),o(t).forEach((function(o){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,o)||(i(e,o)&&r.isMergeableObject(t[o])?n[o]=function(e,t){if(!t.customMerge)return s;var r=t.customMerge(e);return"function"==typeof r?r:s}(o,r)(e[o],t[o],r):n[o]=a(t[o],r))})),n}function s(e,r,o){(o=o||{}).arrayMerge=o.arrayMerge||n,o.isMergeableObject=o.isMergeableObject||t,o.cloneUnlessOtherwiseSpecified=a;var i=Array.isArray(r);return i===Array.isArray(e)?i?o.arrayMerge(e,r,o):l(e,r,o):a(r,o)}s.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,r){return s(e,r,t)}),{})};var u=s;e.exports=u},6147:e=>{function t(e,t){e.onload=function(){this.onerror=this.onload=null,t(null,e)},e.onerror=function(){this.onerror=this.onload=null,t(new Error("Failed to load "+this.src),e)}}function r(e,t){e.onreadystatechange=function(){"complete"!=this.readyState&&"loaded"!=this.readyState||(this.onreadystatechange=null,t(null,e))}}e.exports=function(e,a,n){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("script");"function"==typeof a&&(n=a,a={}),a=a||{},n=n||function(){},i.type=a.type||"text/javascript",i.charset=a.charset||"utf8",i.async=!("async"in a)||!!a.async,i.src=e,a.attrs&&function(e,t){for(var r in t)e.setAttribute(r,t[r])}(i,a.attrs),a.text&&(i.text=""+a.text),("onload"in i?t:r)(i,n),i.onload||t(i,n),o.appendChild(i)}},1811:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var a=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function n(e,t){if(e.length!==t.length)return!1;for(var r=0;r{var a,n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))u.call(e,n)||n===r||o(e,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return e},d=(e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),p=(e,t,r)=>(((e,t,r)=>{t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),y={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(y,{default:()=>P}),e.exports=(a=y,c(o({},"__esModule",{value:!0}),a));var h=d(r(6540)),f=d(r(115)),m=r(7604),b=r(5635);class P extends h.Component{constructor(){super(...arguments),p(this,"mounted",!1),p(this,"isReady",!1),p(this,"isPlaying",!1),p(this,"isLoading",!0),p(this,"loadOnReady",null),p(this,"startOnPlay",!0),p(this,"seekOnPlay",null),p(this,"onDurationCalled",!1),p(this,"handlePlayerMount",(e=>{this.player||(this.player=e,this.player.load(this.props.url)),this.progress()})),p(this,"getInternalPlayer",(e=>this.player?this.player[e]:null)),p(this,"progress",(()=>{if(this.props.url&&this.player&&this.isReady){const e=this.getCurrentTime()||0,t=this.getSecondsLoaded(),r=this.getDuration();if(r){const a={playedSeconds:e,played:e/r};null!==t&&(a.loadedSeconds=t,a.loaded=t/r),a.playedSeconds===this.prevPlayed&&a.loadedSeconds===this.prevLoaded||this.props.onProgress(a),this.prevPlayed=a.playedSeconds,this.prevLoaded=a.loadedSeconds}}this.progressTimeout=setTimeout(this.progress,this.props.progressFrequency||this.props.progressInterval)})),p(this,"handleReady",(()=>{if(!this.mounted)return;this.isReady=!0,this.isLoading=!1;const{onReady:e,playing:t,volume:r,muted:a}=this.props;e(),a||null===r||this.player.setVolume(r),this.loadOnReady?(this.player.load(this.loadOnReady,!0),this.loadOnReady=null):t&&this.player.play(),this.handleDurationCheck()})),p(this,"handlePlay",(()=>{this.isPlaying=!0,this.isLoading=!1;const{onStart:e,onPlay:t,playbackRate:r}=this.props;this.startOnPlay&&(this.player.setPlaybackRate&&1!==r&&this.player.setPlaybackRate(r),e(),this.startOnPlay=!1),t(),this.seekOnPlay&&(this.seekTo(this.seekOnPlay),this.seekOnPlay=null),this.handleDurationCheck()})),p(this,"handlePause",(e=>{this.isPlaying=!1,this.isLoading||this.props.onPause(e)})),p(this,"handleEnded",(()=>{const{activePlayer:e,loop:t,onEnded:r}=this.props;e.loopOnEnded&&t&&this.seekTo(0),t||(this.isPlaying=!1,r())})),p(this,"handleError",((...e)=>{this.isLoading=!1,this.props.onError(...e)})),p(this,"handleDurationCheck",(()=>{clearTimeout(this.durationCheckTimeout);const e=this.getDuration();e?this.onDurationCalled||(this.props.onDuration(e),this.onDurationCalled=!0):this.durationCheckTimeout=setTimeout(this.handleDurationCheck,100)})),p(this,"handleLoaded",(()=>{this.isLoading=!1}))}componentDidMount(){this.mounted=!0}componentWillUnmount(){clearTimeout(this.progressTimeout),clearTimeout(this.durationCheckTimeout),this.isReady&&this.props.stopOnUnmount&&(this.player.stop(),this.player.disablePIP&&this.player.disablePIP()),this.mounted=!1}componentDidUpdate(e){if(!this.player)return;const{url:t,playing:r,volume:a,muted:n,playbackRate:o,pip:i,loop:l,activePlayer:s,disableDeferredLoading:u}=this.props;if(!(0,f.default)(e.url,t)){if(this.isLoading&&!s.forceLoad&&!u&&!(0,b.isMediaStream)(t))return console.warn(`ReactPlayer: the attempt to load ${t} is being deferred until the player has loaded`),void(this.loadOnReady=t);this.isLoading=!0,this.startOnPlay=!0,this.onDurationCalled=!1,this.player.load(t,this.isReady)}e.playing||!r||this.isPlaying||this.player.play(),e.playing&&!r&&this.isPlaying&&this.player.pause(),!e.pip&&i&&this.player.enablePIP&&this.player.enablePIP(),e.pip&&!i&&this.player.disablePIP&&this.player.disablePIP(),e.volume!==a&&null!==a&&this.player.setVolume(a),e.muted!==n&&(n?this.player.mute():(this.player.unmute(),null!==a&&setTimeout((()=>this.player.setVolume(a))))),e.playbackRate!==o&&this.player.setPlaybackRate&&this.player.setPlaybackRate(o),e.loop!==l&&this.player.setLoop&&this.player.setLoop(l)}getDuration(){return this.isReady?this.player.getDuration():null}getCurrentTime(){return this.isReady?this.player.getCurrentTime():null}getSecondsLoaded(){return this.isReady?this.player.getSecondsLoaded():null}seekTo(e,t,r){if(!this.isReady)return void(0!==e&&(this.seekOnPlay=e,setTimeout((()=>{this.seekOnPlay=null}),5e3)));if(t?"fraction"===t:e>0&&e<1){const t=this.player.getDuration();return t?void this.player.seekTo(t*e,r):void console.warn("ReactPlayer: could not seek using fraction \u2013\xa0duration not yet available")}this.player.seekTo(e,r)}render(){const e=this.props.activePlayer;return e?h.default.createElement(e,{...this.props,onMount:this.handlePlayerMount,onReady:this.handleReady,onPlay:this.handlePlay,onPause:this.handlePause,onEnded:this.handleEnded,onLoaded:this.handleLoaded,onError:this.handleError}):null}}p(P,"displayName","Player"),p(P,"propTypes",m.propTypes),p(P,"defaultProps",m.defaultProps)},5580:(e,t,r)=>{var a,n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))u.call(e,n)||n===r||o(e,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return e},d=(e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),p=(e,t,r)=>(((e,t,r)=>{t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),y={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(y,{createReactPlayer:()=>S}),e.exports=(a=y,c(o({},"__esModule",{value:!0}),a));var h=d(r(6540)),f=d(r(4744)),m=d(r(1811)),b=d(r(115)),P=r(7604),g=r(5635),w=d(r(8021));const v=(0,g.lazy)((()=>r.e(6353).then(r.t.bind(r,6734,23)))),O="undefined"!=typeof window&&window.document&&"undefined"!=typeof document,k=void 0!==r.g&&r.g.window&&r.g.window.document,_=Object.keys(P.propTypes),T=O||k?h.Suspense:()=>null,j=[],S=(e,t)=>{var r;return r=class extends h.Component{constructor(){super(...arguments),p(this,"state",{showPreview:!!this.props.light}),p(this,"references",{wrapper:e=>{this.wrapper=e},player:e=>{this.player=e}}),p(this,"handleClickPreview",(e=>{this.setState({showPreview:!1}),this.props.onClickPreview(e)})),p(this,"showPreview",(()=>{this.setState({showPreview:!0})})),p(this,"getDuration",(()=>this.player?this.player.getDuration():null)),p(this,"getCurrentTime",(()=>this.player?this.player.getCurrentTime():null)),p(this,"getSecondsLoaded",(()=>this.player?this.player.getSecondsLoaded():null)),p(this,"getInternalPlayer",((e="player")=>this.player?this.player.getInternalPlayer(e):null)),p(this,"seekTo",((e,t,r)=>{if(!this.player)return null;this.player.seekTo(e,t,r)})),p(this,"handleReady",(()=>{this.props.onReady(this)})),p(this,"getActivePlayer",(0,m.default)((r=>{for(const t of[...j,...e])if(t.canPlay(r))return t;return t||null}))),p(this,"getConfig",(0,m.default)(((e,t)=>{const{config:r}=this.props;return f.default.all([P.defaultProps.config,P.defaultProps.config[t]||{},r,r[t]||{}])}))),p(this,"getAttributes",(0,m.default)((e=>(0,g.omit)(this.props,_)))),p(this,"renderActivePlayer",(e=>{if(!e)return null;const t=this.getActivePlayer(e);if(!t)return null;const r=this.getConfig(e,t.key);return h.default.createElement(w.default,{...this.props,key:t.key,ref:this.references.player,config:r,activePlayer:t.lazyPlayer||t,onReady:this.handleReady})}))}shouldComponentUpdate(e,t){return!(0,b.default)(this.props,e)||!(0,b.default)(this.state,t)}componentDidUpdate(e){const{light:t}=this.props;!e.light&&t&&this.setState({showPreview:!0}),e.light&&!t&&this.setState({showPreview:!1})}renderPreview(e){if(!e)return null;const{light:t,playIcon:r,previewTabIndex:a,oEmbedUrl:n,previewAriaLabel:o}=this.props;return h.default.createElement(v,{url:e,light:t,playIcon:r,previewTabIndex:a,previewAriaLabel:o,oEmbedUrl:n,onClick:this.handleClickPreview})}render(){const{url:e,style:t,width:r,height:a,fallback:n,wrapper:o}=this.props,{showPreview:i}=this.state,l=this.getAttributes(e),s="string"==typeof o?this.references.wrapper:void 0;return h.default.createElement(o,{ref:s,style:{...t,width:r,height:a},...l},h.default.createElement(T,{fallback:n},i?this.renderPreview(e):this.renderActivePlayer(e)))}},p(r,"displayName","ReactPlayer"),p(r,"propTypes",P.propTypes),p(r,"defaultProps",P.defaultProps),p(r,"addCustomPlayer",(e=>{j.push(e)})),p(r,"removeCustomPlayers",(()=>{j.length=0})),p(r,"canPlay",(t=>{for(const r of[...j,...e])if(r.canPlay(t))return!0;return!1})),p(r,"canEnablePIP",(t=>{for(const r of[...j,...e])if(r.canEnablePIP&&r.canEnablePIP(t))return!0;return!1})),r}},3554:(e,t,r)=>{var a,n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))u.call(e,n)||n===r||o(e,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return e},d={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(d,{default:()=>f}),e.exports=(a=d,c(o({},"__esModule",{value:!0}),a));var p=((e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)))(r(7015)),y=r(5580);const h=p.default[p.default.length-1];var f=(0,y.createReactPlayer)(p.default,h)},327:(e,t,r)=>{var a,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,s={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(s,{AUDIO_EXTENSIONS:()=>_,DASH_EXTENSIONS:()=>S,FLV_EXTENSIONS:()=>E,HLS_EXTENSIONS:()=>j,MATCH_URL_DAILYMOTION:()=>w,MATCH_URL_FACEBOOK:()=>h,MATCH_URL_FACEBOOK_WATCH:()=>f,MATCH_URL_KALTURA:()=>k,MATCH_URL_MIXCLOUD:()=>v,MATCH_URL_MUX:()=>y,MATCH_URL_SOUNDCLOUD:()=>d,MATCH_URL_STREAMABLE:()=>m,MATCH_URL_TWITCH_CHANNEL:()=>g,MATCH_URL_TWITCH_VIDEO:()=>P,MATCH_URL_VIDYARD:()=>O,MATCH_URL_VIMEO:()=>p,MATCH_URL_WISTIA:()=>b,MATCH_URL_YOUTUBE:()=>c,VIDEO_EXTENSIONS:()=>T,canPlay:()=>I}),e.exports=(a=s,((e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))l.call(e,s)||s===r||n(e,s,{get:()=>t[s],enumerable:!(a=o(t,s))||a.enumerable});return e})(n({},"__esModule",{value:!0}),a));var u=r(5635);const c=/(?:youtu\.be\/|youtube(?:-nocookie|education)?\.com\/(?:embed\/|v\/|watch\/|watch\?v=|watch\?.+&v=|shorts\/|live\/))((\w|-){11})|youtube\.com\/playlist\?list=|youtube\.com\/user\//,d=/(?:soundcloud\.com|snd\.sc)\/[^.]+$/,p=/vimeo\.com\/(?!progressive_redirect).+/,y=/stream\.mux\.com\/(?!\w+\.m3u8)(\w+)/,h=/^https?:\/\/(www\.)?facebook\.com.*\/(video(s)?|watch|story)(\.php?|\/).+$/,f=/^https?:\/\/fb\.watch\/.+$/,m=/streamable\.com\/([a-z0-9]+)$/,b=/(?:wistia\.(?:com|net)|wi\.st)\/(?:medias|embed)\/(?:iframe\/)?([^?]+)/,P=/(?:www\.|go\.)?twitch\.tv\/videos\/(\d+)($|\?)/,g=/(?:www\.|go\.)?twitch\.tv\/([a-zA-Z0-9_]+)($|\?)/,w=/^(?:(?:https?):)?(?:\/\/)?(?:www\.)?(?:(?:dailymotion\.com(?:\/embed)?\/video)|dai\.ly)\/([a-zA-Z0-9]+)(?:_[\w_-]+)?(?:[\w.#_-]+)?/,v=/mixcloud\.com\/([^/]+\/[^/]+)/,O=/vidyard.com\/(?:watch\/)?([a-zA-Z0-9-_]+)/,k=/^https?:\/\/[a-zA-Z]+\.kaltura.(com|org)\/p\/([0-9]+)\/sp\/([0-9]+)00\/embedIframeJs\/uiconf_id\/([0-9]+)\/partner_id\/([0-9]+)(.*)entry_id.([a-zA-Z0-9-_].*)$/,_=/\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\?)/i,T=/\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i,j=/\.(m3u8)($|\?)/i,S=/\.(mpd)($|\?)/i,E=/\.(flv)($|\?)/i,C=e=>{if(e instanceof Array){for(const t of e){if("string"==typeof t&&C(t))return!0;if(C(t.src))return!0}return!1}return!(!(0,u.isMediaStream)(e)&&!(0,u.isBlobUrl)(e))||(_.test(e)||T.test(e)||j.test(e)||S.test(e)||E.test(e))},I={youtube:e=>e instanceof Array?e.every((e=>c.test(e))):c.test(e),soundcloud:e=>d.test(e)&&!_.test(e),vimeo:e=>p.test(e)&&!T.test(e)&&!j.test(e),mux:e=>y.test(e),facebook:e=>h.test(e)||f.test(e),streamable:e=>m.test(e),wistia:e=>b.test(e),twitch:e=>P.test(e)||g.test(e),dailymotion:e=>w.test(e),mixcloud:e=>v.test(e),vidyard:e=>O.test(e),kaltura:e=>k.test(e),file:C}},7015:(e,t,r)=>{Object.create;var a,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,l=(Object.getPrototypeOf,Object.prototype.hasOwnProperty),s=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))l.call(e,s)||s===r||n(e,s,{get:()=>t[s],enumerable:!(a=o(t,s))||a.enumerable});return e},u={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(u,{default:()=>p}),e.exports=(a=u,s(n({},"__esModule",{value:!0}),a));var c=r(5635),d=r(327),p=[{key:"youtube",name:"YouTube",canPlay:d.canPlay.youtube,lazyPlayer:(0,c.lazy)((()=>r.e(8446).then(r.t.bind(r,2910,23))))},{key:"soundcloud",name:"SoundCloud",canPlay:d.canPlay.soundcloud,lazyPlayer:(0,c.lazy)((()=>r.e(9979).then(r.t.bind(r,3127,23))))},{key:"vimeo",name:"Vimeo",canPlay:d.canPlay.vimeo,lazyPlayer:(0,c.lazy)((()=>r.e(6173).then(r.t.bind(r,1423,23))))},{key:"mux",name:"Mux",canPlay:d.canPlay.mux,lazyPlayer:(0,c.lazy)((()=>r.e(2723).then(r.t.bind(r,7553,23))))},{key:"facebook",name:"Facebook",canPlay:d.canPlay.facebook,lazyPlayer:(0,c.lazy)((()=>r.e(6887).then(r.t.bind(r,1343,23))))},{key:"streamable",name:"Streamable",canPlay:d.canPlay.streamable,lazyPlayer:(0,c.lazy)((()=>r.e(7627).then(r.t.bind(r,9643,23))))},{key:"wistia",name:"Wistia",canPlay:d.canPlay.wistia,lazyPlayer:(0,c.lazy)((()=>r.e(9340).then(r.t.bind(r,3330,23))))},{key:"twitch",name:"Twitch",canPlay:d.canPlay.twitch,lazyPlayer:(0,c.lazy)((()=>r.e(2042).then(r.t.bind(r,1400,23))))},{key:"dailymotion",name:"DailyMotion",canPlay:d.canPlay.dailymotion,lazyPlayer:(0,c.lazy)((()=>r.e(6328).then(r.t.bind(r,9348,23))))},{key:"mixcloud",name:"Mixcloud",canPlay:d.canPlay.mixcloud,lazyPlayer:(0,c.lazy)((()=>r.e(7570).then(r.t.bind(r,3276,23))))},{key:"vidyard",name:"Vidyard",canPlay:d.canPlay.vidyard,lazyPlayer:(0,c.lazy)((()=>r.e(3392).then(r.t.bind(r,3552,23))))},{key:"kaltura",name:"Kaltura",canPlay:d.canPlay.kaltura,lazyPlayer:(0,c.lazy)((()=>r.e(6463).then(r.t.bind(r,7945,23))))},{key:"file",name:"FilePlayer",canPlay:d.canPlay.file,canEnablePIP:e=>d.canPlay.file(e)&&(document.pictureInPictureEnabled||(0,c.supportsWebKitPresentationMode)())&&!d.AUDIO_EXTENSIONS.test(e),lazyPlayer:(0,c.lazy)((()=>r.e(7458).then(r.t.bind(r,688,23))))}]},7604:(e,t,r)=>{var a,n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))u.call(e,n)||n===r||o(e,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return e},d={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(d,{defaultProps:()=>_,propTypes:()=>O}),e.exports=(a=d,c(o({},"__esModule",{value:!0}),a));var p=((e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)))(r(5556));const{string:y,bool:h,number:f,array:m,oneOfType:b,shape:P,object:g,func:w,node:v}=p.default,O={url:b([y,m,g]),playing:h,loop:h,controls:h,volume:f,muted:h,playbackRate:f,width:b([y,f]),height:b([y,f]),style:g,progressInterval:f,playsinline:h,pip:h,stopOnUnmount:h,light:b([h,y,g]),playIcon:v,previewTabIndex:f,previewAriaLabel:y,fallback:v,oEmbedUrl:y,wrapper:b([y,w,P({render:w.isRequired})]),config:P({soundcloud:P({options:g}),youtube:P({playerVars:g,embedOptions:g,onUnstarted:w}),facebook:P({appId:y,version:y,playerId:y,attributes:g}),dailymotion:P({params:g}),vimeo:P({playerOptions:g,title:y}),mux:P({attributes:g,version:y}),file:P({attributes:g,tracks:m,forceVideo:h,forceAudio:h,forceHLS:h,forceSafariHLS:h,forceDisableHls:h,forceDASH:h,forceFLV:h,hlsOptions:g,hlsVersion:y,dashVersion:y,flvVersion:y}),wistia:P({options:g,playerId:y,customControls:m}),mixcloud:P({options:g}),twitch:P({options:g,playerId:y}),vidyard:P({options:g})}),onReady:w,onStart:w,onPlay:w,onPause:w,onBuffer:w,onBufferEnd:w,onEnded:w,onError:w,onDuration:w,onSeek:w,onPlaybackRateChange:w,onPlaybackQualityChange:w,onProgress:w,onClickPreview:w,onEnablePIP:w,onDisablePIP:w},k=()=>{},_={playing:!1,loop:!1,controls:!1,volume:null,muted:!1,playbackRate:1,width:"640px",height:"360px",style:{},progressInterval:1e3,playsinline:!1,pip:!1,stopOnUnmount:!0,light:!1,fallback:null,wrapper:"div",previewTabIndex:0,previewAriaLabel:"",oEmbedUrl:"https://noembed.com/embed?url={url}",config:{soundcloud:{options:{visual:!0,buying:!1,liking:!1,download:!1,sharing:!1,show_comments:!1,show_playcount:!1}},youtube:{playerVars:{playsinline:1,showinfo:0,rel:0,iv_load_policy:3,modestbranding:1},embedOptions:{},onUnstarted:k},facebook:{appId:"1309697205772819",version:"v3.3",playerId:null,attributes:{}},dailymotion:{params:{api:1,"endscreen-enable":!1}},vimeo:{playerOptions:{autopause:!1,byline:!1,portrait:!1,title:!1},title:null},mux:{attributes:{},version:"2"},file:{attributes:{},tracks:[],forceVideo:!1,forceAudio:!1,forceHLS:!1,forceDASH:!1,forceFLV:!1,hlsOptions:{},hlsVersion:"1.1.4",dashVersion:"3.1.3",flvVersion:"1.5.0",forceDisableHls:!1},wistia:{options:{},playerId:null,customControls:null},mixcloud:{options:{hide_cover:1}},twitch:{options:{},playerId:null},vidyard:{options:{}}},onReady:k,onStart:k,onPlay:k,onPause:k,onBuffer:k,onBufferEnd:k,onEnded:k,onError:k,onDuration:k,onSeek:k,onPlaybackRateChange:k,onPlaybackQualityChange:k,onProgress:k,onClickPreview:k,onEnablePIP:k,onDisablePIP:k}},5635:(e,t,r)=>{var a,n=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of l(t))u.call(e,n)||n===r||o(e,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return e},d=(e,t,r)=>(r=null!=e?n(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),p={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(p,{callPlayer:()=>A,getConfig:()=>C,getSDK:()=>E,isBlobUrl:()=>M,isMediaStream:()=>R,lazy:()=>m,omit:()=>I,parseEndTime:()=>k,parseStartTime:()=>O,queryString:()=>T,randomString:()=>_,supportsWebKitPresentationMode:()=>L}),e.exports=(a=p,c(o({},"__esModule",{value:!0}),a));var y=d(r(6540)),h=d(r(6147)),f=d(r(4744));const m=e=>y.default.lazy((async()=>{const t=await e();return"function"==typeof t.default?t:t.default})),b=/[?&#](?:start|t)=([0-9hms]+)/,P=/[?&#]end=([0-9hms]+)/,g=/(\d+)(h|m|s)/g,w=/^\d+$/;function v(e,t){if(e instanceof Array)return;const r=e.match(t);if(r){const e=r[1];if(e.match(g))return function(e){let t=0,r=g.exec(e);for(;null!==r;){const[,a,n]=r;"h"===n&&(t+=60*parseInt(a,10)*60),"m"===n&&(t+=60*parseInt(a,10)),"s"===n&&(t+=parseInt(a,10)),r=g.exec(e)}return t}(e);if(w.test(e))return parseInt(e)}}function O(e){return v(e,b)}function k(e){return v(e,P)}function _(){return Math.random().toString(36).substr(2,5)}function T(e){return Object.keys(e).map((t=>`${t}=${e[t]}`)).join("&")}function j(e){return window[e]?window[e]:window.exports&&window.exports[e]?window.exports[e]:window.module&&window.module.exports&&window.module.exports[e]?window.module.exports[e]:null}const S={},E=function(e){0;return e}((function(e,t,r=null,a=()=>!0,n=h.default){const o=j(t);return o&&a(o)?Promise.resolve(o):new Promise(((a,o)=>{if(S[e])return void S[e].push({resolve:a,reject:o});S[e]=[{resolve:a,reject:o}];const i=t=>{S[e].forEach((e=>e.resolve(t)))};if(r){const e=window[r];window[r]=function(){e&&e(),i(j(t))}}n(e,(a=>{a?(S[e].forEach((e=>e.reject(a))),S[e]=null):r||i(j(t))}))}))}));function C(e,t){return(0,f.default)(t.config,e.config)}function I(e,...t){const r=[].concat(...t),a={},n=Object.keys(e);for(const o of n)-1===r.indexOf(o)&&(a[o]=e[o]);return a}function A(e,...t){if(!this.player||!this.player[e]){let t=`ReactPlayer: ${this.constructor.displayName} player could not call %c${e}%c \u2013 `;return this.player?this.player[e]||(t+="The method was not available"):t+="The player was not available",console.warn(t,"font-weight: bold",""),null}return this.player[e](...t)}function R(e){return"undefined"!=typeof window&&void 0!==window.MediaStream&&e instanceof window.MediaStream}function M(e){return/^blob:/.test(e)}function L(e=document.createElement("video")){const t=!1===/iPhone|iPod/.test(navigator.userAgent);return e.webkitSupportsPresentationMode&&"function"==typeof e.webkitSetPresentationMode&&t}}}]); \ No newline at end of file diff --git a/assets/js/3deea674.2623d7aa.js b/assets/js/3deea674.2623d7aa.js new file mode 100644 index 000000000..1788b1945 --- /dev/null +++ b/assets/js/3deea674.2623d7aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[9260],{2769:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var s=n(4848),i=n(8453),o=n(9557),r=n(2017);const a={id:"introduction_netcore",title:"Introduction to the .NET 8 REST API application",sidebar_label:"Introduction",hide_title:!1,hide_table_of_contents:!0,description:"Introduction to .NET 8 REST API application with CQRS",keywords:[".net core","rest api","cqrs","showcase","azure","application insights","cosmos db"]},c=void 0,l={id:"workloads/azure/backend/netcore/introduction_netcore",title:"Introduction to the .NET 8 REST API application",description:"Introduction to .NET 8 REST API application with CQRS",source:"@site/docs/workloads/azure/backend/netcore/introduction_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/introduction_netcore",permalink:"/docs/workloads/azure/backend/netcore/introduction_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"introduction_netcore",title:"Introduction to the .NET 8 REST API application",sidebar_label:"Introduction",hide_title:!1,hide_table_of_contents:!0,description:"Introduction to .NET 8 REST API application with CQRS",keywords:[".net core","rest api","cqrs","showcase","azure","application insights","cosmos db"]},sidebar:"docs",previous:{title:"REST API testing with Serenity",permalink:"/docs/workloads/azure/backend/java/testing/execute_serenity_api_tests"},next:{title:"Requirements",permalink:"/docs/workloads/azure/backend/netcore/requirements_netcore"}},d={},h=[{value:"Introduction to the .NET 8 REST API Application",id:"introduction-to-the-net-8-rest-api-application",level:2},{value:"What is This Project?",id:"what-is-this-project",level:3},{value:"What Does the API Do?",id:"what-does-the-api-do",level:3},{value:"How is the Project Hosted?",id:"how-is-the-project-hosted",level:3},{value:"Example JSON Response",id:"example-json-response",level:3},{value:"Try It Yourself",id:"try-it-yourself",level:3},{value:"Customizing the Template",id:"customizing-the-template",level:3}];function p(e){const t={code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"introduction-to-the-net-8-rest-api-application",children:"Introduction to the .NET 8 REST API Application"}),"\n",(0,s.jsx)(t.p,{children:"This document introduces a sample .NET 8 REST API project. It uses a simple restaurant menu app as an example to demonstrate important concepts."}),"\n",(0,s.jsx)(t.h3,{id:"what-is-this-project",children:"What is This Project?"}),"\n",(0,s.jsxs)(t.p,{children:["The project is part of ",(0,s.jsx)(t.strong,{children:"Ensono Stacks"}),", a collection of sample applications built in .NET 8. These examples help you get started quickly with common scenarios in building web APIs. There are three types of projects you can choose from:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Simple Web API"}),": A basic setup to create APIs that respond to requests."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Web API with CQRS"}),": A more advanced API setup to handle data in a more structured way."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ServiceBus Worker"}),": A simple project that sends messages to a Service Bus (a system used to pass messages between different apps)."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ServiceBus Listener"}),": A simple project that receives messages from a Service Bus."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"CosmosDb Worker"}),": A project that tracks changes in a ",(0,s.jsx)(t.strong,{children:"Cosmos DB"})," (a cloud database) and sends updates to a Service Bus."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"EventHub Listener"}),": A project that receives messages from an ",(0,s.jsx)(t.strong,{children:"Event Hub"})," (a system used for handling streams of data)."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"These projects use good coding practices to help developers build their apps faster and more efficiently."}),"\n",(0,s.jsx)(t.h3,{id:"what-does-the-api-do",children:"What Does the API Do?"}),"\n",(0,s.jsxs)(t.p,{children:["In this example, the API is for a ",(0,s.jsx)(t.strong,{children:"restaurant menu system"}),". Users can:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Create"}),", ",(0,s.jsx)(t.strong,{children:"update"}),", or ",(0,s.jsx)(t.strong,{children:"delete"})," a ",(0,s.jsx)(t.strong,{children:"Menu"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Each Menu contains ",(0,s.jsx)(t.strong,{children:"Categories"}),' (like "Main Course", "Drinks", etc.).']}),"\n",(0,s.jsxs)(t.li,{children:["Each Category has ",(0,s.jsx)(t.strong,{children:"Items"}),' (like "Lasagna", "Pasta", etc.).']}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The API gives an interface for doing all these operations through HTTP requests."}),"\n",(0,s.jsx)(t.h3,{id:"how-is-the-project-hosted",children:"How is the Project Hosted?"}),"\n",(0,s.jsxs)(t.p,{children:["The project is hosted on ",(0,s.jsx)(t.strong,{children:"Azure"})," and uses ",(0,s.jsx)(t.strong,{children:"Application Insights"})," to monitor performance. This means the project is set up to run in the cloud and can be easily scaled."]}),"\n",(0,s.jsx)(t.h3,{id:"example-json-response",children:"Example JSON Response"}),"\n",(0,s.jsx)(t.p,{children:"Here's an example of what the API might return when you ask for menu details:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'{\n "id": "296b3d1e-c8f0-4958-8138-bf191f633cbc",\n "restaurantId": "a6f6a3e0-7a4c-4c0a-b7cf-6115b624c2e7",\n "name": "Restaurant Menu",\n "description": "Restaurant Menu Description",\n "categories": [\n {\n "id": "ab6df204-572b-46ef-b5b5-75a6a6b47882",\n "name": "Main Menus",\n "description": "Main meals",\n "items": [\n {\n "id": "5a63d477-11a6-454b-902e-f3794b723f0e",\n "name": "Lasagna",\n "description": "Pasta Item",\n "price": 13.56,\n "available": true\n }\n ]\n }\n ],\n "enabled": true\n}\n'})}),"\n",(0,s.jsx)(t.p,{children:"In this example:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:'The menu has categories like "Main Menus".'}),"\n",(0,s.jsx)(t.li,{children:'Inside each category, there are items, like "Lasagna" with details like price and availability.'}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"try-it-yourself",children:"Try It Yourself"}),"\n",(0,s.jsx)(t.p,{children:"Install the package and have a go:"}),"\n",(0,s.jsx)(r.A,{url:"https://www.youtube.com/watch?v=H6eaa8ukhq4"}),"\n",(0,s.jsx)(t.h3,{id:"customizing-the-template",children:"Customizing the Template"}),"\n",(0,s.jsx)(t.p,{children:"Although this example uses a restaurant, you can easily change the project to suit other types of data. The project templates are modular, meaning you can add or remove parts depending on what your project needs."}),"\n",(0,s.jsx)(o.A,{prev:!0})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},9557:(e,t,n)=>{n.d(t,{A:()=>o});var s=n(6540),i=n(4848);const o=e=>{let{next:t,prev:n}=e;return s.useEffect((()=>{if(t){const e=document.querySelector("div.pagination-nav__item.pagination-nav__item--next>a");e&&e.style&&(e.style.display="none")}if(n){const e=document.querySelector("div.pagination-nav__item>a");e&&e.style&&(e.style.display="none")}})),(0,i.jsx)("div",{})}},2017:(e,t,n)=>{n.d(t,{A:()=>l});n(6540);var s=n(3554),i=n.n(s);const o="playerSection_SVZU",r="playerWrapper_cclc",a="player_oSQx";var c=n(4848);const l=function(e){let{url:t}=e;return(0,c.jsx)("div",{className:o,children:(0,c.jsx)("div",{className:r,children:(0,c.jsx)(i(),{className:a,url:t,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(6540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3deea674.708ab60d.js b/assets/js/3deea674.708ab60d.js deleted file mode 100644 index 822b992b7..000000000 --- a/assets/js/3deea674.708ab60d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[9260],{2769:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var s=n(4848),i=n(8453),o=n(9557);const r={id:"introduction_netcore",title:"Introduction to the .NET 8 REST API application",sidebar_label:"Introduction",hide_title:!1,hide_table_of_contents:!0,description:"Introduction to .NET 8 REST API application with CQRS",keywords:[".net core","rest api","cqrs","showcase","azure","application insights","cosmos db"]},a=void 0,c={id:"workloads/azure/backend/netcore/introduction_netcore",title:"Introduction to the .NET 8 REST API application",description:"Introduction to .NET 8 REST API application with CQRS",source:"@site/docs/workloads/azure/backend/netcore/introduction_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/introduction_netcore",permalink:"/docs/workloads/azure/backend/netcore/introduction_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"introduction_netcore",title:"Introduction to the .NET 8 REST API application",sidebar_label:"Introduction",hide_title:!1,hide_table_of_contents:!0,description:"Introduction to .NET 8 REST API application with CQRS",keywords:[".net core","rest api","cqrs","showcase","azure","application insights","cosmos db"]},sidebar:"docs",previous:{title:"REST API testing with Serenity",permalink:"/docs/workloads/azure/backend/java/testing/execute_serenity_api_tests"},next:{title:"Requirements",permalink:"/docs/workloads/azure/backend/netcore/requirements_netcore"}},l={},d=[{value:"Introduction to the .NET 8 REST API Application",id:"introduction-to-the-net-8-rest-api-application",level:2},{value:"What is This Project?",id:"what-is-this-project",level:3},{value:"What Does the API Do?",id:"what-does-the-api-do",level:3},{value:"How is the Project Hosted?",id:"how-is-the-project-hosted",level:3},{value:"Example JSON Response",id:"example-json-response",level:3},{value:"Try It Yourself",id:"try-it-yourself",level:3},{value:"Customizing the Template",id:"customizing-the-template",level:3}];function h(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"introduction-to-the-net-8-rest-api-application",children:"Introduction to the .NET 8 REST API Application"}),"\n",(0,s.jsx)(t.p,{children:"This document introduces a sample .NET 8 REST API project. It uses a simple restaurant menu app as an example to demonstrate important concepts."}),"\n",(0,s.jsx)(t.h3,{id:"what-is-this-project",children:"What is This Project?"}),"\n",(0,s.jsxs)(t.p,{children:["The project is part of ",(0,s.jsx)(t.strong,{children:"Ensono Stacks"}),", a collection of sample applications built in .NET 8. These examples help you get started quickly with common scenarios in building web APIs. There are three types of projects you can choose from:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Simple Web API"}),": A basic setup to create APIs that respond to requests."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Web API with CQRS"}),": A more advanced API setup to handle data in a more structured way."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ServiceBus Worker"}),": A simple project that sends messages to a Service Bus (a system used to pass messages between different apps)."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"ServiceBus Listener"}),": A simple project that receives messages from a Service Bus."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"CosmosDb Worker"}),": A project that tracks changes in a ",(0,s.jsx)(t.strong,{children:"Cosmos DB"})," (a cloud database) and sends updates to a Service Bus."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"EventHub Listener"}),": A project that receives messages from an ",(0,s.jsx)(t.strong,{children:"Event Hub"})," (a system used for handling streams of data)."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"These projects use good coding practices to help developers build their apps faster and more efficiently."}),"\n",(0,s.jsx)(t.h3,{id:"what-does-the-api-do",children:"What Does the API Do?"}),"\n",(0,s.jsxs)(t.p,{children:["In this example, the API is for a ",(0,s.jsx)(t.strong,{children:"restaurant menu system"}),". Users can:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Create"}),", ",(0,s.jsx)(t.strong,{children:"update"}),", or ",(0,s.jsx)(t.strong,{children:"delete"})," a ",(0,s.jsx)(t.strong,{children:"Menu"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Each Menu contains ",(0,s.jsx)(t.strong,{children:"Categories"}),' (like "Main Course", "Drinks", etc.).']}),"\n",(0,s.jsxs)(t.li,{children:["Each Category has ",(0,s.jsx)(t.strong,{children:"Items"}),' (like "Lasagna", "Pasta", etc.).']}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The API gives an interface for doing all these operations through HTTP requests."}),"\n",(0,s.jsx)(t.h3,{id:"how-is-the-project-hosted",children:"How is the Project Hosted?"}),"\n",(0,s.jsxs)(t.p,{children:["The project is hosted on ",(0,s.jsx)(t.strong,{children:"Azure"})," and uses ",(0,s.jsx)(t.strong,{children:"Application Insights"})," to monitor performance. This means the project is set up to run in the cloud and can be easily scaled."]}),"\n",(0,s.jsx)(t.h3,{id:"example-json-response",children:"Example JSON Response"}),"\n",(0,s.jsx)(t.p,{children:"Here's an example of what the API might return when you ask for menu details:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'{\n "id": "296b3d1e-c8f0-4958-8138-bf191f633cbc",\n "restaurantId": "a6f6a3e0-7a4c-4c0a-b7cf-6115b624c2e7",\n "name": "Restaurant Menu",\n "description": "Restaurant Menu Description",\n "categories": [\n {\n "id": "ab6df204-572b-46ef-b5b5-75a6a6b47882",\n "name": "Main Menus",\n "description": "Main meals",\n "items": [\n {\n "id": "5a63d477-11a6-454b-902e-f3794b723f0e",\n "name": "Lasagna",\n "description": "Pasta Item",\n "price": 13.56,\n "available": true\n }\n ]\n }\n ],\n "enabled": true\n}\n'})}),"\n",(0,s.jsx)(t.p,{children:"In this example:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:'The menu has categories like "Main Menus".'}),"\n",(0,s.jsx)(t.li,{children:'Inside each category, there are items, like "Lasagna" with details like price and availability.'}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"try-it-yourself",children:"Try It Yourself"}),"\n",(0,s.jsxs)(t.p,{children:["You can try out a demo version of this API ",(0,s.jsx)(t.a,{href:"insert-link-here",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"customizing-the-template",children:"Customizing the Template"}),"\n",(0,s.jsx)(t.p,{children:"Although this example uses a restaurant, you can easily change the project to suit other types of data. The project templates are modular, meaning you can add or remove parts depending on what your project needs."}),"\n",(0,s.jsx)(o.A,{prev:!0})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},9557:(e,t,n)=>{n.d(t,{A:()=>o});var s=n(6540),i=n(4848);const o=e=>{let{next:t,prev:n}=e;return s.useEffect((()=>{if(t){const e=document.querySelector("div.pagination-nav__item.pagination-nav__item--next>a");e&&e.style&&(e.style.display="none")}if(n){const e=document.querySelector("div.pagination-nav__item>a");e&&e.style&&(e.style.display="none")}})),(0,i.jsx)("div",{})}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(6540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/552b4366.bfbd6824.js b/assets/js/552b4366.bfbd6824.js deleted file mode 100644 index 8e60ccb07..000000000 --- a/assets/js/552b4366.bfbd6824.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[4550],{7963:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>s});var i=t(4848),r=t(8453);const o={id:"build_and_run_project_netcore",title:"Build & Run REST API",sidebar_label:"Build & Run REST API",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application",keywords:[".net core","rest api","azure","application insights","build","run","application"]},l=void 0,a={id:"workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",title:"Build & Run REST API",description:"Build and Run .NET Core REST API application",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api",slug:"/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"build_and_run_project_netcore",title:"Build & Run REST API",sidebar_label:"Build & Run REST API",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application",keywords:[".net core","rest api","azure","application insights","build","run","application"]},sidebar:"docs",previous:{title:"Create REST API project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore"},next:{title:"Create REST API with CQRS project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore"}},c={},s=[{value:"Build and Run the Application",id:"build-and-run-the-application",level:2},{value:"Build and Run Locally",id:"build-and-run-locally",level:3},{value:"Instructions",id:"instructions",level:4},{value:"Build and Run in Docker Container",id:"build-and-run-in-docker-container",level:3},{value:"Instructions for Docker",id:"instructions-for-docker",level:4},{value:"Verify that the Application Has Started",id:"verify-that-the-application-has-started",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"build-and-run-the-application",children:"Build and Run the Application"}),"\n",(0,i.jsx)(n.p,{children:"The API can be configured to run locally or in a Docker container."}),"\n",(0,i.jsx)(n.h3,{id:"build-and-run-locally",children:"Build and Run Locally"}),"\n",(0,i.jsx)(n.h4,{id:"instructions",children:"Instructions"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.strong,{children:"Command Prompt"})," or ",(0,i.jsx)(n.strong,{children:"PowerShell"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Navigate to the ",(0,i.jsx)(n.code,{children:"/simple-api/src/api"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the following command to build the project:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"dotnet build\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the following command to start the project:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"dotnet run --project xxENSONOxx.xxSTACKSxx.API/xxENSONOxx.xxSTACKSxx.API.csproj\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"build-and-run-in-docker-container",children:"Build and Run in Docker Container"}),"\n",(0,i.jsx)(n.h4,{id:"instructions-for-docker",children:"Instructions for Docker"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Open your ",(0,i.jsx)(n.strong,{children:"terminal"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Navigate to the ",(0,i.jsx)(n.code,{children:"/simple-api/src/api"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the following command to build a Docker image:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"docker build -t dotnet-api .\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This uses the ",(0,i.jsx)(n.strong,{children:"Dockerfile"})," in this folder to generate the Docker image."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"After the Docker image is created, run the following command to start the Docker container:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"docker run -p 5000:80 --mount type=bind,source=/path/to/PROJECT-NAME/simple-api/src/api/xxENSONOxx.xxSTACKSxx.API/appsettings.json,target=/app/config/appsettings.json\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"verify-that-the-application-has-started",children:"Verify that the Application Has Started"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Open your web browser."}),"\n",(0,i.jsxs)(n.li,{children:["Go to ",(0,i.jsx)(n.a,{href:"http://localhost:5000/v1/menu",children:"http://localhost:5000/v1/menu"}),". This should return a valid JSON response."]}),"\n",(0,i.jsxs)(n.li,{children:["To view the Open API UI, go to ",(0,i.jsx)(n.a,{href:"http://localhost:5000/swagger/index.html",children:"http://localhost:5000/swagger/index.html"}),".\nThis will show the API endpoints."]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Note",type:"note",children:(0,i.jsxs)(n.p,{children:["If you have changed the domain (originally ",(0,i.jsx)(n.code,{children:"Menu"}),"), the path will reflect that change. For example, if your domain\nis ",(0,i.jsx)(n.code,{children:"Foo"}),", then the path will be ",(0,i.jsx)(n.code,{children:"../v1/foo"})," instead of ",(0,i.jsx)(n.code,{children:"../v1/menu"}),"."]})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>a});var i=t(6540);const r={},o=i.createContext(r);function l(e){const n=i.useContext(o);return i.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:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/552b4366.d3df09dc.js b/assets/js/552b4366.d3df09dc.js new file mode 100644 index 000000000..661860f95 --- /dev/null +++ b/assets/js/552b4366.d3df09dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[4550],{7963:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>c,toc:()=>d});var i=t(4848),r=t(8453),o=t(2017);const l={id:"build_and_run_project_netcore",title:"Build & Run REST API",sidebar_label:"Build & Run REST API",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application",keywords:[".net core","rest api","azure","application insights","build","run","application"]},a=void 0,c={id:"workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",title:"Build & Run REST API",description:"Build and Run .NET Core REST API application",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api",slug:"/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"build_and_run_project_netcore",title:"Build & Run REST API",sidebar_label:"Build & Run REST API",hide_title:!0,hide_table_of_contents:!0,description:"Build and Run .NET Core REST API application",keywords:[".net core","rest api","azure","application insights","build","run","application"]},sidebar:"docs",previous:{title:"Create REST API project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore"},next:{title:"Create REST API with CQRS project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore"}},s={},d=[{value:"Build and Run the Application",id:"build-and-run-the-application",level:2},{value:"Build and Run Locally",id:"build-and-run-locally",level:3},{value:"Instructions",id:"instructions",level:4},{value:"Build and Run in Docker Container",id:"build-and-run-in-docker-container",level:3},{value:"Instructions for Docker",id:"instructions-for-docker",level:4},{value:"Verify that the Application Has Started",id:"verify-that-the-application-has-started",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"build-and-run-the-application",children:"Build and Run the Application"}),"\n",(0,i.jsx)(n.p,{children:"The API can be configured to run locally or in a Docker container."}),"\n",(0,i.jsx)(o.A,{url:"https://www.youtube.com/watch?v=jzIm69yiV20"}),"\n",(0,i.jsx)(o.A,{url:"https://www.youtube.com/watch?v=9ehY96znRR0"}),"\n",(0,i.jsx)(n.h3,{id:"build-and-run-locally",children:"Build and Run Locally"}),"\n",(0,i.jsx)(n.h4,{id:"instructions",children:"Instructions"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.strong,{children:"Command Prompt"})," or ",(0,i.jsx)(n.strong,{children:"PowerShell"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Navigate to the ",(0,i.jsx)(n.code,{children:"/simple-api/src/api"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the following command to build the project:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"dotnet build\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the following command to start the project:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"dotnet run --project xxENSONOxx.xxSTACKSxx.API/xxENSONOxx.xxSTACKSxx.API.csproj\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"build-and-run-in-docker-container",children:"Build and Run in Docker Container"}),"\n",(0,i.jsx)(n.h4,{id:"instructions-for-docker",children:"Instructions for Docker"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Open your ",(0,i.jsx)(n.strong,{children:"terminal"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Navigate to the ",(0,i.jsx)(n.code,{children:"/simple-api/src/api"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the following command to build a Docker image:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"docker build -t dotnet-api .\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This uses the ",(0,i.jsx)(n.strong,{children:"Dockerfile"})," in this folder to generate the Docker image."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"After the Docker image is created, run the following command to start the Docker container:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"docker run -p 5000:80 --mount type=bind,source=/path/to/PROJECT-NAME/simple-api/src/api/xxENSONOxx.xxSTACKSxx.API/appsettings.json,target=/app/config/appsettings.json\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"verify-that-the-application-has-started",children:"Verify that the Application Has Started"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Open your web browser."}),"\n",(0,i.jsxs)(n.li,{children:["Go to ",(0,i.jsx)(n.a,{href:"http://localhost:5000/v1/menu",children:"http://localhost:5000/v1/menu"}),". This should return a valid JSON response."]}),"\n",(0,i.jsxs)(n.li,{children:["To view the Open API UI, go to ",(0,i.jsx)(n.a,{href:"http://localhost:5000/swagger/index.html",children:"http://localhost:5000/swagger/index.html"}),".\nThis will show the API endpoints."]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Note",type:"note",children:(0,i.jsxs)(n.p,{children:["If you have changed the domain (originally ",(0,i.jsx)(n.code,{children:"Menu"}),"), the path will reflect that change. For example, if your domain\nis ",(0,i.jsx)(n.code,{children:"Foo"}),", then the path will be ",(0,i.jsx)(n.code,{children:"../v1/foo"})," instead of ",(0,i.jsx)(n.code,{children:"../v1/menu"}),"."]})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},2017:(e,n,t)=>{t.d(n,{A:()=>s});t(6540);var i=t(3554),r=t.n(i);const o="playerSection_SVZU",l="playerWrapper_cclc",a="player_oSQx";var c=t(4848);const s=function(e){let{url:n}=e;return(0,c.jsx)("div",{className:o,children:(0,c.jsx)("div",{className:l,children:(0,c.jsx)(r(),{className:a,url:n,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>a});var i=t(6540);const r={},o=i.createContext(r);function l(e){const n=i.useContext(o);return i.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:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5daba60d.7d067179.js b/assets/js/5daba60d.7d067179.js deleted file mode 100644 index 908fcc17a..000000000 --- a/assets/js/5daba60d.7d067179.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[8424],{605:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var r=n(4848),a=n(8453);const i={id:"create_project_netcore",title:"Create REST API project",hide_title:!0,sidebar_label:"Create REST API project",hide_table_of_contents:!0,description:"Create .NET Core REST API application from a template",keywords:[".net core","rest api","example","template","azure","application insights","build","run","application","configure","docker","tests","github"]},l=void 0,o={id:"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",title:"Create REST API project",description:"Create .NET Core REST API application from a template",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api",slug:"/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"create_project_netcore",title:"Create REST API project",hide_title:!0,sidebar_label:"Create REST API project",hide_table_of_contents:!0,description:"Create .NET Core REST API application from a template",keywords:[".net core","rest api","example","template","azure","application insights","build","run","application","configure","docker","tests","github"]},sidebar:"docs",previous:{title:"Requirements",permalink:"/docs/workloads/azure/backend/netcore/requirements_netcore"},next:{title:"Build & Run REST API",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore"}},c={},s=[{value:"Create a project using the Nuget template package",id:"create-a-project-using-the-nuget-template-package",level:2},{value:"Install the package",id:"install-the-package",level:3},{value:"Create a new project",id:"create-a-new-project",level:3},{value:"Uninstalling a template",id:"uninstalling-a-template",level:3},{value:"Template parameter details",id:"template-parameter-details",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"create-a-project-using-the-nuget-template-package",children:"Create a project using the Nuget template package"}),"\n",(0,r.jsx)(t.h3,{id:"install-the-package",children:"Install the package"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Go to the ",(0,r.jsx)(t.a,{href:"https://www.nuget.org/packages/Ensono.Stacks.Templates/",children:"Ensono.Stacks.Templates package page on Nuget"}),"."]}),"\n",(0,r.jsx)(t.li,{children:"Copy the command displayed on the page to install the latest version of the package."}),"\n",(0,r.jsx)(t.li,{children:"Open your terminal and run the copied command. For example:"}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"dotnet new install Ensono.Stacks.Templates\n"})}),"\n",(0,r.jsx)(t.h3,{id:"create-a-new-project",children:"Create a new project"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Open your terminal."}),"\n",(0,r.jsx)(t.li,{children:"Navigate to the folder where you want to create the new project."}),"\n",(0,r.jsx)(t.li,{children:"Run the following command to create the project:"}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"dotnet new stacks-webapi -n Company.Project -do YourDomain --cloudProvider Azure\n"})}),"\n",(0,r.jsxs)(t.p,{children:["This command will create a folder and a repository called ",(0,r.jsx)(t.code,{children:"Company.Project"})," with DevOps build pipelines ready for Azure\nDevOps."]}),"\n",(0,r.jsx)(t.h3,{id:"uninstalling-a-template",children:"Uninstalling a template"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Open your terminal."}),"\n",(0,r.jsx)(t.li,{children:"Run the following command to uninstall the template pack:"}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"dotnet new uninstall Ensono.Stacks.Templates\n"})}),"\n",(0,r.jsx)(t.h3,{id:"template-parameter-details",children:"Template parameter details"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-n|--name"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Sets the project name."}),"\n",(0,r.jsx)(t.li,{children:"If you do not provide this parameter, the project name will be the same as the folder where you run the command."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-do|--domain"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Sets the name of the aggregate root object. This is also the name of the collection within the CosmosDB instance."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-o|--output"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Sets the path where the project will be created."}),"\n",(0,r.jsx)(t.li,{children:"If you do not provide this parameter, a new folder will be created."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-c|--cloudProvider"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Configures which cloud provider to use."}),"\n",(0,r.jsxs)(t.li,{children:["Accepted values: ",(0,r.jsx)(t.code,{children:"Azure"}),", ",(0,r.jsx)(t.code,{children:"AWS"}),", ",(0,r.jsx)(t.code,{children:"GCP"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-cicd|--cicdProvider"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Configures which CI/CD provider templates to use."}),"\n",(0,r.jsxs)(t.li,{children:["Accepted values: ",(0,r.jsx)(t.code,{children:"AZDO"}),", ",(0,r.jsx)(t.code,{children:"GHA"}),", ",(0,r.jsx)(t.code,{children:"None"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{title:"Note",type:"note",children:(0,r.jsx)(t.p,{children:"For additional information use the --help flag."})})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>o});var r=n(6540);const a={},i=r.createContext(a);function l(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5daba60d.eea16e81.js b/assets/js/5daba60d.eea16e81.js new file mode 100644 index 000000000..0a8855c7c --- /dev/null +++ b/assets/js/5daba60d.eea16e81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[8424],{605:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var r=n(4848),a=n(8453),l=n(2017);const i={id:"create_project_netcore",title:"Create REST API project",hide_title:!0,sidebar_label:"Create REST API project",hide_table_of_contents:!0,description:"Create .NET Core REST API application from a template",keywords:[".net core","rest api","example","template","azure","application insights","build","run","application","configure","docker","tests","github"]},c=void 0,o={id:"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",title:"Create REST API project",description:"Create .NET Core REST API application from a template",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api",slug:"/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"create_project_netcore",title:"Create REST API project",hide_title:!0,sidebar_label:"Create REST API project",hide_table_of_contents:!0,description:"Create .NET Core REST API application from a template",keywords:[".net core","rest api","example","template","azure","application insights","build","run","application","configure","docker","tests","github"]},sidebar:"docs",previous:{title:"Requirements",permalink:"/docs/workloads/azure/backend/netcore/requirements_netcore"},next:{title:"Build & Run REST API",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore"}},s={},d=[{value:"Create a project using the Nuget template package",id:"create-a-project-using-the-nuget-template-package",level:2},{value:"Install the package",id:"install-the-package",level:3},{value:"Create a new project",id:"create-a-new-project",level:3},{value:"Uninstalling a template",id:"uninstalling-a-template",level:3},{value:"Template parameter details",id:"template-parameter-details",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"create-a-project-using-the-nuget-template-package",children:"Create a project using the Nuget template package"}),"\n",(0,r.jsx)(t.h3,{id:"install-the-package",children:"Install the package"}),"\n",(0,r.jsx)(l.A,{url:"https://www.youtube.com/watch?v=H6eaa8ukhq4"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Go to the ",(0,r.jsx)(t.a,{href:"https://www.nuget.org/packages/Ensono.Stacks.Templates/",children:"Ensono.Stacks.Templates package page on Nuget"}),"."]}),"\n",(0,r.jsx)(t.li,{children:"Copy the command displayed on the page to install the latest version of the package."}),"\n",(0,r.jsx)(t.li,{children:"Open your terminal and run the copied command. For example:"}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"dotnet new install Ensono.Stacks.Templates\n"})}),"\n",(0,r.jsx)(t.h3,{id:"create-a-new-project",children:"Create a new project"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Open your terminal."}),"\n",(0,r.jsx)(t.li,{children:"Navigate to the folder where you want to create the new project."}),"\n",(0,r.jsx)(t.li,{children:"Run the following command to create the project:"}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"dotnet new stacks-webapi -n Company.Project -do YourDomain --cloudProvider Azure\n"})}),"\n",(0,r.jsxs)(t.p,{children:["This command will create a folder and a repository called ",(0,r.jsx)(t.code,{children:"Company.Project"})," with DevOps build pipelines ready for Azure\nDevOps."]}),"\n",(0,r.jsx)(t.h3,{id:"uninstalling-a-template",children:"Uninstalling a template"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Open your terminal."}),"\n",(0,r.jsx)(t.li,{children:"Run the following command to uninstall the template pack:"}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"dotnet new uninstall Ensono.Stacks.Templates\n"})}),"\n",(0,r.jsx)(t.h3,{id:"template-parameter-details",children:"Template parameter details"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-n|--name"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Sets the project name."}),"\n",(0,r.jsx)(t.li,{children:"If you do not provide this parameter, the project name will be the same as the folder where you run the command."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-do|--domain"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Sets the name of the aggregate root object. This is also the name of the collection within the CosmosDB instance."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-o|--output"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Sets the path where the project will be created."}),"\n",(0,r.jsx)(t.li,{children:"If you do not provide this parameter, a new folder will be created."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-c|--cloudProvider"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Configures which cloud provider to use."}),"\n",(0,r.jsxs)(t.li,{children:["Accepted values: ",(0,r.jsx)(t.code,{children:"Azure"}),", ",(0,r.jsx)(t.code,{children:"AWS"}),", ",(0,r.jsx)(t.code,{children:"GCP"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"-cicd|--cicdProvider"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Configures which CI/CD provider templates to use."}),"\n",(0,r.jsxs)(t.li,{children:["Accepted values: ",(0,r.jsx)(t.code,{children:"AZDO"}),", ",(0,r.jsx)(t.code,{children:"GHA"}),", ",(0,r.jsx)(t.code,{children:"None"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{title:"Note",type:"note",children:(0,r.jsx)(t.p,{children:"For additional information use the --help flag."})})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},2017:(e,t,n)=>{n.d(t,{A:()=>s});n(6540);var r=n(3554),a=n.n(r);const l="playerSection_SVZU",i="playerWrapper_cclc",c="player_oSQx";var o=n(4848);const s=function(e){let{url:t}=e;return(0,o.jsx)("div",{className:l,children:(0,o.jsx)("div",{className:i,children:(0,o.jsx)(a(),{className:c,url:t,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>c});var r=n(6540);const a={},l=r.createContext(a);function i(e){const t=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/95bab7f5.c047ebb2.js b/assets/js/95bab7f5.c047ebb2.js new file mode 100644 index 000000000..7668ca61b --- /dev/null +++ b/assets/js/95bab7f5.c047ebb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[6752],{4463:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=t(4848),r=t(8453),i=t(2017);const o={id:"create_project_netcore",title:"Create REST API with CQRS project",hide_title:!0,sidebar_label:"Create REST API with CQRS project",hide_table_of_contents:!0,description:"Create .NET Core REST API application with CQRS from a template",keywords:[".net core","rest api","cqrs","example","template","azure","application insights","cosmos db","build","run","application","configure","docker","tests","github"]},a=void 0,l={id:"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",title:"Create REST API with CQRS project",description:"Create .NET Core REST API application with CQRS from a template",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api_cqrs",slug:"/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"create_project_netcore",title:"Create REST API with CQRS project",hide_title:!0,sidebar_label:"Create REST API with CQRS project",hide_table_of_contents:!0,description:"Create .NET Core REST API application with CQRS from a template",keywords:[".net core","rest api","cqrs","example","template","azure","application insights","cosmos db","build","run","application","configure","docker","tests","github"]},sidebar:"docs",previous:{title:"Build & Run REST API",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore"},next:{title:"Configure REST API with CQRS project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore"}},c={},d=[{value:"Create a project using the Nuget template package",id:"create-a-project-using-the-nuget-template-package",level:2},{value:"Install the package",id:"install-the-package",level:3},{value:"Create a new project",id:"create-a-new-project",level:3},{value:"The Stacks Web API Template",id:"the-stacks-web-api-template",level:4},{value:"The Stacks Web API with CQRS Template",id:"the-stacks-web-api-with-cqrs-template",level:4},{value:"The Stacks Background Worker Template",id:"the-stacks-background-worker-template",level:4},{value:"The Stacks Azure Function: Cosmos DB Worker Template",id:"the-stacks-azure-function-cosmos-db-worker-template",level:4},{value:"The Stacks Azure Function: Event Hub Listener Template",id:"the-stacks-azure-function--event-hub-listener-template",level:4},{value:"Stacks Azure Function: Azure Service Bus Listener",id:"stacks-azure-function--azure-service-bus-listener",level:4},{value:"Template Parameters",id:"template-parameters",level:4},{value:"Uninstalling the templates",id:"uninstalling-the-templates",level:3}];function h(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"create-a-project-using-the-nuget-template-package",children:"Create a project using the Nuget template package"}),"\n",(0,s.jsx)(n.h3,{id:"install-the-package",children:"Install the package"}),"\n",(0,s.jsx)(i.A,{url:"https://www.youtube.com/watch?v=H6eaa8ukhq4"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to the ",(0,s.jsx)(n.a,{href:"https://www.nuget.org/packages/Ensono.Stacks.Templates/",children:"Ensono.Stacks.Templates package page on Nuget"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Copy the installation command shown on the page."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your terminal and run the command from Step 2. An example of the command is shown below."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"dotnet new install Ensono.Stacks.Templates\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"create-a-new-project",children:"Create a new project"}),"\n",(0,s.jsx)(n.p,{children:"Once the Stacks Template package has finished installing, you will have the following templates to use as starting points for your projects: -"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Web API"}),": A web API built with controllers."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Web API with CQRS"}),": A web API built with controllers that uses the CQRS pattern."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"ServiceBus Worker"}),": A background worker that monitors an Azure Service Bus and responds when a message is received."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Azure Function: CosmosDb Worker"}),": An Azure Function that sends a message to an Azure Service Bus, when an item is created in a Cosmos DB."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Azure Function: EventHub Listener"}),": An Azure Function that monitors an Azure Event Hub and responds when a message is received."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Azure Function: ServiceBus Listener"}),": An Azure Function that monitors an Azure Service Bus and responds when a message is received."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"These templates include automated testing and build pipelines, so they are ready for deployment to cloud providers. To create a solution from one of these templates, please follow the relevant guide below."}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-web-api-template",children:"The Stacks Web API Template"}),"\n",(0,s.jsx)(n.p,{children:"This template will create a simple Web API solution that is built with ASP .NET Controllers. It includes authentication, authorization, middleware for managing exceptions and middleware to assign or preserve correlation IDs."}),"\n",(0,s.jsx)(n.p,{children:"To create a Stacks Simple Web API solution: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create a Stacks Web API solution"',children:"dotnet new stacks-webapi --name Company.Project --domain Menu --cloudProvider Azure\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample domain object called ",(0,s.jsx)(n.code,{children:"menu"})," and DevOps build pipelines for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-web-api-with-cqrs-template",children:"The Stacks Web API with CQRS Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template extends the Stacks Web API template. It includes all the features of the Web API template and has been extended to implement the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs",children:"Command Query Responsibility Segregation architectural pattern"}),". Example commands and queries are included in the solution to demonstrate how the CQRS pattern works."]}),"\n",(0,s.jsx)(n.p,{children:"To create a Stacks Web API with CQRS solution: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Run",metastring:'the command to create a Stacks Web API solution"',children:"dotnet new stacks-cqrs --name Company.Project --domain Menu --database CosmosDb --eventPublisher ServiceBus --cloudProvider Azure\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample domain object called ",(0,s.jsx)(n.code,{children:"menu"}),". The solution will use CosmosDB for its database and publish events to Azure Service Bus. A DevOps build pipeline will also be created for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-background-worker-template",children:"The Stacks Background Worker Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template will create a solution for a Background Worker that monitors an ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/service-bus-messaging/",children:"Azure Service Bus"}),". When an Event is published to the Service Bus that the worker has subscribed to, it will respond by executing the appropriate Event Handler. The solution contains several events and their handlers to serve as examples."]}),"\n",(0,s.jsx)(n.p,{children:"To create a Stacks Background Worker: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create a Stacks Background Worker solution"',children:"dotnet new stacks-asb-worker --name Company.Project --domain Menu\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample domain object called ",(0,s.jsx)(n.code,{children:"menu"})," and a DevOps build pipeline for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-azure-function-cosmos-db-worker-template",children:"The Stacks Azure Function: Cosmos DB Worker Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template will create a solution for an Azure Function triggered by the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2-trigger",children:"Azure Cosmos DB change feed trigger"}),". When an item is either created or updated in a Cosmos DB container, the Azure Function will trigger. The Function will publish a message to an Azure Service Bus to notify subscribers that an item has either been created or updated in the Cosmos DB container."]}),"\n",(0,s.jsx)(n.p,{children:"To create an Azure Function Cosmos DB Worker: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create an Azure Function Cosmos DB Worker solution"',children:"dotnet new stacks-az-func-cosmosdb-worker --name Company.Project\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," and a DevOps build pipeline for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-azure-function--event-hub-listener-template",children:"The Stacks Azure Function: Event Hub Listener Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template will create a solution for an Azure Function that uses the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs-trigger",children:"Azure Event Hub Trigger"}),". When a new event is published to the Event Hub that the function is monitoring, the function will trigger. The function will receive the event, deserializes it to an object and write a log message that it has received a message."]}),"\n",(0,s.jsx)(n.p,{children:"To create an Azure Function Event Hub Listener: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create an Azure Function Event Hub Listener solution"',children:"dotnet new stacks-az-func-aeh-listener --name Company.Project --domain Menu\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample event for when a ",(0,s.jsx)(n.code,{children:"menu"})," is created and a DevOps build pipeline for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"stacks-azure-function--azure-service-bus-listener",children:"Stacks Azure Function: Azure Service Bus Listener"}),"\n",(0,s.jsxs)(n.p,{children:["This is a template for an Azure Function that uses the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger",children:"Azure Service Bus Trigger"}),". When a new message is published to an Azure Service Bus that the function has subscribed to, the function will trigger. The function will receive the message, deserializes it to an object and write a log that it has received a message."]}),"\n",(0,s.jsx)(n.p,{children:"To create an Azure Service Bus Listener: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Open your command line or terminal."}),"\n",(0,s.jsx)(n.li,{children:"Change to the directory to where you would like to create your solution."}),"\n",(0,s.jsxs)(n.li,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create an Azure Function Service Bus Listener solution"',children:"dotnet new stacks-az-func-asb-listener --name Company.Project --domain Menu\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample event for when a ",(0,s.jsx)(n.code,{children:"menu"})," is created and a DevOps build pipeline for Microsoft Azure."]}),"\n",(0,s.jsx)(n.h4,{id:"template-parameters",children:"Template Parameters"}),"\n",(0,s.jsxs)(n.admonition,{title:"Template parameter details",type:"note",children:[(0,s.jsxs)(n.p,{children:["A description of the parameters used in the examples above are shown below.",(0,s.jsx)(n.br,{}),"\n","Please note that some templates may only offer a subset of the parameters shown."]}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-n | --name"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sets the project name."}),"\n",(0,s.jsx)(n.li,{children:"If you do not provide this parameter, the project name will be the same as the folder where you run the command."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-do | --domain"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sets the name of the sample domain model's aggregate root object for API templates."}),"\n",(0,s.jsx)(n.li,{children:"Sets the name the sample events that are created for for listener templates."}),"\n",(0,s.jsx)(n.li,{children:"Sets the name of the CosmosDB collection if Cosmos DB is chosen for a database."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-db | --database"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Configures which database provider will be used.","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Choices: -"}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"CosmosDb"})," for Microsoft Azure CosmosDB,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"DynamoDb"})," for Amazon Web Services DynamoDB,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"InMemoryDb"})," for an in memory 'database'. For demonstration, not suitable for production."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-e | --eventPublisher"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Configures which messaging service will be used."}),"\n",(0,s.jsxs)(n.li,{children:["Choices: -","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"AwsSns"})," for Amazon Web Services Simple Notification Service,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"EventHub"})," for Microsoft Azure Event Hub,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"ServiceBus"})," for Microsoft Azure Event Hub,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"None"})," to not include an event publisher."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-o | --output"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sets the path where the project will be created."}),"\n",(0,s.jsx)(n.li,{children:"If you do not provide this parameter, a new folder will be created."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-cp | --cloudProvider"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Configures which cloud provider to use."}),"\n",(0,s.jsxs)(n.li,{children:["Choices: -","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"AWS"})," for Amazon Web Services,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Azure"})," for Microsoft Azure,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GCP"})," for Google Cloud PLatform."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-cicd | --cicdProvider"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Configures which CI/CD provider templates to use."}),"\n",(0,s.jsxs)(n.li,{children:["Choices: -","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"AZDO"})," for Microsoft Azure DevOps,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GHA"})," for GitHub Actions,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"None"})," to not include CI/CD pipelines."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]})]}),"\n",(0,s.jsx)(n.h3,{id:"uninstalling-the-templates",children:"Uninstalling the templates"}),"\n",(0,s.jsx)(n.p,{children:"To remove the Stacks templates from your machine, uninstall the NuGet package by running the following command"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="To uninstall package execute the following command"',children:"dotnet new uninstall Ensono.Stacks.Templates\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},2017:(e,n,t)=>{t.d(n,{A:()=>c});t(6540);var s=t(3554),r=t.n(s);const i="playerSection_SVZU",o="playerWrapper_cclc",a="player_oSQx";var l=t(4848);const c=function(e){let{url:n}=e;return(0,l.jsx)("div",{className:i,children:(0,l.jsx)("div",{className:o,children:(0,l.jsx)(r(),{className:a,url:n,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(6540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.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:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/95bab7f5.eb4ddf5f.js b/assets/js/95bab7f5.eb4ddf5f.js deleted file mode 100644 index 2446784c0..000000000 --- a/assets/js/95bab7f5.eb4ddf5f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[6752],{4463:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=t(4848),r=t(8453);const i={id:"create_project_netcore",title:"Create REST API with CQRS project",hide_title:!0,sidebar_label:"Create REST API with CQRS project",hide_table_of_contents:!0,description:"Create .NET Core REST API application with CQRS from a template",keywords:[".net core","rest api","cqrs","example","template","azure","application insights","cosmos db","build","run","application","configure","docker","tests","github"]},o=void 0,a={id:"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",title:"Create REST API with CQRS project",description:"Create .NET Core REST API application with CQRS from a template",source:"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore.md",sourceDirName:"workloads/azure/backend/netcore/quickstart/web_api_cqrs",slug:"/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"create_project_netcore",title:"Create REST API with CQRS project",hide_title:!0,sidebar_label:"Create REST API with CQRS project",hide_table_of_contents:!0,description:"Create .NET Core REST API application with CQRS from a template",keywords:[".net core","rest api","cqrs","example","template","azure","application insights","cosmos db","build","run","application","configure","docker","tests","github"]},sidebar:"docs",previous:{title:"Build & Run REST API",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore"},next:{title:"Configure REST API with CQRS project",permalink:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore"}},l={},c=[{value:"Create a project using the NuGet package",id:"create-a-project-using-the-nuget-package",level:2},{value:"Install the package",id:"install-the-package",level:2},{value:"Create a new project",id:"create-a-new-project",level:3},{value:"The Stacks Web API Template",id:"the-stacks-web-api-template",level:4},{value:"The Stacks Web API with CQRS Template",id:"the-stacks-web-api-with-cqrs-template",level:4},{value:"The Stacks Background Worker Template",id:"the-stacks-background-worker-template",level:4},{value:"The Stacks Azure Function: Cosmos DB Worker Template",id:"the-stacks-azure-function-cosmos-db-worker-template",level:4},{value:"The Stacks Azure Function: Event Hub Listener Template",id:"the-stacks-azure-function--event-hub-listener-template",level:4},{value:"Stacks Azure Function: Azure Service Bus Listener",id:"stacks-azure-function--azure-service-bus-listener",level:4},{value:"Template Parameters",id:"template-parameters",level:4},{value:"Uninstalling the templates",id:"uninstalling-the-templates",level:3}];function d(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"create-a-project-using-the-nuget-package",children:"Create a project using the NuGet package"}),"\n",(0,s.jsx)(n.h2,{id:"install-the-package",children:"Install the package"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to the ",(0,s.jsx)(n.a,{href:"https://www.nuget.org/packages/Ensono.Stacks.Templates/",children:"Ensono.Stacks.Templates package page on Nuget"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Copy the installation command shown on the page."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your terminal and run the command from Step 2. An example of the command is shown below."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"dotnet new install Ensono.Stacks.Templates\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"create-a-new-project",children:"Create a new project"}),"\n",(0,s.jsx)(n.p,{children:"Once the Stacks Template package has finished installing, you will have the following templates to use as starting points for your projects: -"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Web API"}),": A web API built with controllers."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Web API with CQRS"}),": A web API built with controllers that uses the CQRS pattern."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"ServiceBus Worker"}),": A background worker that monitors an Azure Service Bus and responds when a message is received."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Azure Function: CosmosDb Worker"}),": An Azure Function that sends a message to an Azure Service Bus, when an item is created in a Cosmos DB."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Azure Function: EventHub Listener"}),": An Azure Function that monitors an Azure Event Hub and responds when a message is received."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Azure Function: ServiceBus Listener"}),": An Azure Function that monitors an Azure Service Bus and responds when a message is received."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"These templates include automated testing and build pipelines, so they are ready for deployment to cloud providers. To create a solution from one of these templates, please follow the relevant guide below."}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-web-api-template",children:"The Stacks Web API Template"}),"\n",(0,s.jsx)(n.p,{children:"This template will create a simple Web API solution that is built with ASP .NET Controllers. It includes authentication, authorization, middleware for managing exceptions and middleware to assign or preserve correlation IDs."}),"\n",(0,s.jsx)(n.p,{children:"To create a Stacks Simple Web API solution: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create a Stacks Web API solution"',children:"dotnet new stacks-webapi --name Company.Project --domain Menu --cloudProvider Azure\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample domain object called ",(0,s.jsx)(n.code,{children:"menu"})," and DevOps build pipelines for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-web-api-with-cqrs-template",children:"The Stacks Web API with CQRS Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template extends the Stacks Web API template. It includes all the features of the Web API template and has been extended to implement the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs",children:"Command Query Responsibility Segregation architectural pattern"}),". Example commands and queries are included in the solution to demonstrate how the CQRS pattern works."]}),"\n",(0,s.jsx)(n.p,{children:"To create a Stacks Web API with CQRS solution: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Run",metastring:'the command to create a Stacks Web API solution"',children:"dotnet new stacks-cqrs --name Company.Project --domain Menu --database CosmosDb --eventPublisher ServiceBus --cloudProvider Azure\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample domain object called ",(0,s.jsx)(n.code,{children:"menu"}),". The solution will use CosmosDB for its database and publish events to Azure Service Bus. A DevOps build pipeline will also be created for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-background-worker-template",children:"The Stacks Background Worker Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template will create a solution for a Background Worker that monitors an ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/service-bus-messaging/",children:"Azure Service Bus"}),". When an Event is published to the Service Bus that the worker has subscribed to, it will respond by executing the appropriate Event Handler. The solution contains several events and their handlers to serve as examples."]}),"\n",(0,s.jsx)(n.p,{children:"To create a Stacks Background Worker: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create a Stacks Background Worker solution"',children:"dotnet new stacks-asb-worker --name Company.Project --domain Menu\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample domain object called ",(0,s.jsx)(n.code,{children:"menu"})," and a DevOps build pipeline for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-azure-function-cosmos-db-worker-template",children:"The Stacks Azure Function: Cosmos DB Worker Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template will create a solution for an Azure Function triggered by the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2-trigger",children:"Azure Cosmos DB change feed trigger"}),". When an item is either created or updated in a Cosmos DB container, the Azure Function will trigger. The Function will publish a message to an Azure Service Bus to notify subscribers that an item has either been created or updated in the Cosmos DB container."]}),"\n",(0,s.jsx)(n.p,{children:"To create an Azure Function Cosmos DB Worker: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create an Azure Function Cosmos DB Worker solution"',children:"dotnet new stacks-az-func-cosmosdb-worker --name Company.Project\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," and a DevOps build pipeline for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"the-stacks-azure-function--event-hub-listener-template",children:"The Stacks Azure Function: Event Hub Listener Template"}),"\n",(0,s.jsxs)(n.p,{children:["This template will create a solution for an Azure Function that uses the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs-trigger",children:"Azure Event Hub Trigger"}),". When a new event is published to the Event Hub that the function is monitoring, the function will trigger. The function will receive the event, deserializes it to an object and write a log message that it has received a message."]}),"\n",(0,s.jsx)(n.p,{children:"To create an Azure Function Event Hub Listener: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Open your command line or terminal."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change to the directory to where you would like to create your solution."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create an Azure Function Event Hub Listener solution"',children:"dotnet new stacks-az-func-aeh-listener --name Company.Project --domain Menu\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample event for when a ",(0,s.jsx)(n.code,{children:"menu"})," is created and a DevOps build pipeline for Microsoft Azure."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"stacks-azure-function--azure-service-bus-listener",children:"Stacks Azure Function: Azure Service Bus Listener"}),"\n",(0,s.jsxs)(n.p,{children:["This is a template for an Azure Function that uses the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger",children:"Azure Service Bus Trigger"}),". When a new message is published to an Azure Service Bus that the function has subscribed to, the function will trigger. The function will receive the message, deserializes it to an object and write a log that it has received a message."]}),"\n",(0,s.jsx)(n.p,{children:"To create an Azure Service Bus Listener: -"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Open your command line or terminal."}),"\n",(0,s.jsx)(n.li,{children:"Change to the directory to where you would like to create your solution."}),"\n",(0,s.jsxs)(n.li,{children:["Run the following command, replacing the parameter values with your choices.",(0,s.jsx)(n.br,{}),"\n","For a description of each parameter and the options available, please scroll to the end of this section."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Run the command to create an Azure Function Service Bus Listener solution"',children:"dotnet new stacks-az-func-asb-listener --name Company.Project --domain Menu\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example command will create a folder and a solution called ",(0,s.jsx)(n.code,{children:"Company.Project"})," with a sample event for when a ",(0,s.jsx)(n.code,{children:"menu"})," is created and a DevOps build pipeline for Microsoft Azure."]}),"\n",(0,s.jsx)(n.h4,{id:"template-parameters",children:"Template Parameters"}),"\n",(0,s.jsxs)(n.admonition,{title:"Template parameter details",type:"note",children:[(0,s.jsxs)(n.p,{children:["A description of the parameters used in the examples above are shown below.",(0,s.jsx)(n.br,{}),"\n","Please note that some templates may only offer a subset of the parameters shown."]}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-n | --name"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sets the project name."}),"\n",(0,s.jsx)(n.li,{children:"If you do not provide this parameter, the project name will be the same as the folder where you run the command."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-do | --domain"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sets the name of the sample domain model's aggregate root object for API templates."}),"\n",(0,s.jsx)(n.li,{children:"Sets the name the sample events that are created for for listener templates."}),"\n",(0,s.jsx)(n.li,{children:"Sets the name of the CosmosDB collection if Cosmos DB is chosen for a database."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-db | --database"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Configures which database provider will be used.","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Choices: -"}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"CosmosDb"})," for Microsoft Azure CosmosDB,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"DynamoDb"})," for Amazon Web Services DynamoDB,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"InMemoryDb"})," for an in memory 'database'. For demonstration, not suitable for production."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-e | --eventPublisher"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Configures which messaging service will be used."}),"\n",(0,s.jsxs)(n.li,{children:["Choices: -","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"AwsSns"})," for Amazon Web Services Simple Notification Service,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"EventHub"})," for Microsoft Azure Event Hub,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"ServiceBus"})," for Microsoft Azure Event Hub,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"None"})," to not include an event publisher."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-o | --output"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sets the path where the project will be created."}),"\n",(0,s.jsx)(n.li,{children:"If you do not provide this parameter, a new folder will be created."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-cp | --cloudProvider"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Configures which cloud provider to use."}),"\n",(0,s.jsxs)(n.li,{children:["Choices: -","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"AWS"})," for Amazon Web Services,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Azure"})," for Microsoft Azure,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GCP"})," for Google Cloud PLatform."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"-cicd | --cicdProvider"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Configures which CI/CD provider templates to use."}),"\n",(0,s.jsxs)(n.li,{children:["Choices: -","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"AZDO"})," for Microsoft Azure DevOps,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GHA"})," for GitHub Actions,"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"None"})," to not include CI/CD pipelines."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]})]}),"\n",(0,s.jsx)(n.h3,{id:"uninstalling-the-templates",children:"Uninstalling the templates"}),"\n",(0,s.jsx)(n.p,{children:"To remove the Stacks templates from your machine, uninstall the NuGet package by running the following command"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="To uninstall package execute the following command"',children:"dotnet new uninstall Ensono.Stacks.Templates\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(6540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.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:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.0ebf2109.js b/assets/js/c4f5d8e4.0ebf2109.js deleted file mode 100644 index 65be72f3c..000000000 --- a/assets/js/c4f5d8e4.0ebf2109.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[253],{7381:(e,t,o)=>{o.r(t),o.d(t,{default:()=>pe});var s=o(6540),a=o(1922),n=o(4586),r=o(4164),i=o(8774),c=o(6025);const l="wrapper_Cuey",d="container_j7En",u="imageWrapper_MISJ",m="textWrapper_U_hS",p="getStartedLink_j_pa",h={section:"section_rC2D",buttons:"buttons_pzbO",primaryColour:"primaryColour_tkb9",textCenter:"textCenter_LniS"};var g=o(4848);const{contribute:{title:k,link:b,description:j,img:v,buttonText:x}}={contribute:{title:"Contribute to Ensono Stacks",link:"contributions",description:"As an open source project, you can be a part of the Github community shaping Ensono Stacks",img:"/img/icons/ensono-icon_puzzle-v_0222.png",buttonText:"Contribute"}},w=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsx)("div",{className:d,children:(0,g.jsxs)("section",{className:h.section,children:[(0,g.jsxs)("div",{className:l,children:[(0,g.jsx)("div",{className:u,children:(0,g.jsx)("img",{src:v})}),(0,g.jsxs)("div",{className:m,children:[(0,g.jsx)("h3",{children:k}),(0,g.jsx)("p",{children:j})]})]}),(0,g.jsx)("div",{className:p,children:(0,g.jsx)(i.A,{className:(0,r.A)("button button button--primary button--lg",h.getStarted),to:b.startsWith("http")?b:e+b,children:x})})]})})},f="ensonoStacksImageContainer_gXSw",_="wrapperImage_Sh1z",A="stacksLogo__NgH",S="wrapper_BjDL",y="headingWrapper_JBTP",{title:N,description:z,buttonText:C,logo:T,image:E}={title:"Ensono Stacks",description:"Making digital transformation easier and more reliable.",buttonText:"Show me how",logo:{url:"/img/icons/stacks-logo.svg",alt:"Ensono Stacks Icon"},image:{alt:"Ensono Image"}},W=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsxs)("div",{className:f,children:[(0,g.jsx)("div",{className:_,children:(0,g.jsx)("img",{src:(0,c.Ay)("img/stacks-banner.png"),alt:E.alt})}),(0,g.jsx)("div",{className:y,children:(0,g.jsxs)("div",{className:S,children:[(0,g.jsxs)("div",{className:A,children:[(0,g.jsx)("img",{src:T.url,alt:T.alt}),(0,g.jsx)("h2",{children:N})]}),(0,g.jsx)("p",{children:z}),(0,g.jsx)(i.A,{className:"button button--primary button--lg",to:e,children:C})]})})]})},I="feature_VLYB",P="testing_AvT2",M="imageWrapper_n5B6",L="features__AwJ",R="button_Is71",{features:B}={features:[{title:"Infrastructure",link:"infrastructure/azure/core_infrastructure",description:"Find out how to configure your cloud provider and other core infrastructure to make Ensono Stacks work for you.",img:"/img/icons/ensono-icon_host-v_0222.png",buttonText:"Show me"},{title:"Testing",link:"testing/testing_overview",description:"Get Started with Testing - Explore Ensono Stacks' pre-configured frameworks for performance, accessibility, UI, API, and more.",img:"/img/icons/ensono-icon_symbol-checkmark-v_0222.png",buttonText:"Show me"}]},F=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsx)("section",{className:h.section,children:(0,g.jsx)("div",{className:L,children:B.map(((t,o)=>(0,g.jsxs)("div",{className:(0,r.A)(I),children:[(0,g.jsxs)("div",{className:P,children:[(0,g.jsx)("div",{className:M,children:(0,g.jsx)("img",{src:t.img})}),(0,g.jsxs)("div",{children:[(0,g.jsx)("h3",{children:t.title}),(0,g.jsx)("p",{children:t.description})]})]}),(0,g.jsx)("div",{className:h.buttons+" "+R,children:(0,g.jsx)(i.A,{className:(0,r.A)("button button--primary button--lg"),to:""+e+t.link,children:t.buttonText})})]},o)))})})},q="intro_lUkf",D="introductionSection_U2Cy",J={title:(0,g.jsxs)(g.Fragment,{children:["Ensono Stacks is the ",(0,g.jsx)("span",{className:h.primaryColour,children:"cloud-native software factory"})," for digital transformations that work."]}),benefitsList:["Increase project predictability with reliable, tried and tested code.","Slash configuration time and speeds up deployment.","An ever-growing calalogue of workload templates, package management and example implementations.","A solid foundation for you to springboard into build."],buttonText:"Tell me more"},{title:Q,benefitsList:O,buttonText:U}=J,G=()=>(0,g.jsx)("div",{className:h.section,children:(0,g.jsxs)("div",{className:D,children:[(0,g.jsxs)("div",{className:q,children:[(0,g.jsx)("h2",{className:"margin-bottom--lg",children:Q}),(0,g.jsx)("ul",{children:O.map(((e,t)=>(0,g.jsx)("li",{children:e},t)))}),(0,g.jsx)("div",{className:h.buttons,children:(0,g.jsx)(i.A,{className:"button button--primary button--lg",to:"https://www.ensono.com/offerings/ensono-stacks-revolutionizing-business-approaches-for-future-growth/",children:U})})]}),(0,g.jsx)(me,{})]})});var X=o(1510);const Y="containerSelects_PpmM",H="disabledButton_dXfz",K="pickerContainer__HaS",{languageAndFramework:V,solutionArchitecture:Z,cloudProvider:$,optionMapper:ee}={languageAndFramework:{placeholder:"Select Language/Framework"},solutionArchitecture:{placeholder:"Select Solution Architecture"},cloudProvider:{placeholder:"Select Cloud Provider"},optionMapper:{"C# / .NET Core":{"REST Web API":{"Microsoft Azure [Azure]":"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore","Amazon Web Services [AWS]":"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore"},"REST Web API with CQRS":{"Microsoft Azure [Azure]":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore","Amazon Web Services [AWS]":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore"}},"Java Spring Boot":{"REST Web API":{"Microsoft Azure [Azure]":"workloads/common/backend/java/intro_java"},"REST Web API with CQRS":{"Microsoft Azure [Azure]":"workloads/common/backend/java/intro_java"},"REST Web API with CQRS and Events":{"Microsoft Azure [Azure]":"workloads/common/backend/java/intro_java"}},"Typescript / Nx":{"Server Side Rendered Web Application":{"Microsoft Azure [Azure]":"nx/nx_stacks"}},"Python / Spark":{"Data Lakehouse Platform":{"Microsoft Azure [Azure]":"workloads/azure/data/intro_data_azure"}}}},te=()=>{const[e,t]=(0,s.useState)(void 0),[o,a]=(0,s.useState)(void 0),[n,l]=(0,s.useState)(void 0),[d,u]=(0,s.useState)(!1),m=(0,c.Ay)("docs/"),p=Object.keys(ee).map((e=>({value:ee[e],label:e}))),k=e&&"object"==typeof e.value?Object.keys(e.value).map((t=>({value:e.value[t],label:t}))):[],b=o&&"object"==typeof o.value?Object.keys(o.value).map((e=>({value:o.value[e],label:e}))):[],j=e=>({...e,borderRadius:0,colors:{...e.colors,primary50:"#f4f4f4",primary25:"#f4f4f4",primary:"#6941EB"}});return(0,g.jsx)("div",{className:"container "+K,children:(0,g.jsxs)("div",{className:(0,r.A)("col","col--12",Y),children:[(0,g.jsx)(X.Ay,{placeholder:V.placeholder,value:e,onChange:e=>{t(e),a(null),u("object"!=typeof e.value)},options:p,theme:e=>j(e)}),k.length>0&&(0,g.jsx)(X.Ay,{placeholder:Z.placeholder,value:o,onChange:e=>{a(e),l(null),u(!1)},options:k||[],theme:e=>j(e)}),b.length>0&&(0,g.jsx)(X.Ay,{placeholder:$.placeholder,value:n,onChange:e=>{l(e),u(!0)},options:b||[],theme:e=>j(e)}),(0,g.jsx)("div",{className:h.buttons+" margin-top--md",children:(0,g.jsx)(i.A,{className:(0,r.A)("button button--primary button--lg",d?"":H),to:d?m+(n?n.value:e?e.value:""):"",disabled:!d,children:"Let's go!"})})]})})};const oe="section_z9Q7",se="techListContainer_GQ9i",ae="techListWrapper_zYhq",{title:ne,technologiesSupported:re}={title:"Technologies supported by Ensono Stacks",technologiesSupported:[{logo:"aws.svg",name:"AWS",link:"https://aws.amazon.com/"},{logo:"microsoft-azure.svg",name:"Microsoft Azure",link:"https://azure.microsoft.com/"},{logo:"kubernetes.svg",name:"Kubernetes",link:"https://kubernetes.io/"},{logo:"terraform.svg",name:"Terraform",link:"https://www.terraform.io/"},{logo:"docker.svg",name:"Docker",link:"https://www.docker.com/"},{logo:"dotnet.svg",name:".NET",link:"https://dotnet.microsoft.com/"},{logo:"nx.svg",name:"NX",link:"https://nx.dev/"},{logo:"nextjs.svg",name:"NextJS",link:"https://nextjs.org/"},{logo:"spring-boot.svg",name:"Spring Boot",link:"https://spring.io/"},{logo:"azure-data-factory.svg",name:"Azure Data Factory",link:"https://azure.microsoft.com/products/data-factory"},{logo:"delta-lake.svg",name:"Delta lake",link:"https://delta.io/"},{logo:"databricks.svg",name:"Databricks",link:"https://www.databricks.com/"},{logo:"java.svg",name:"Java",link:"https://www.java.com/"},{logo:"csharp.svg",name:"C#",link:"https://dotnet.microsoft.com/languages/csharp"},{logo:"typescript.svg",name:"Typescript",link:"https://www.typescriptlang.org/"},{logo:"python.svg",name:"Python",link:"https://www.python.org/"}]},ie=()=>(0,g.jsx)("div",{className:se,children:(0,g.jsxs)("section",{className:h.section+" "+oe,children:[(0,g.jsx)("h2",{className:h.textCenter+" margin-bottom--lg",children:ne}),(0,g.jsx)("div",{className:ae,children:re.map((e=>{const{name:t,logo:o,link:s}=e,a="/img/icons/technologies-supported/"+o;return(0,g.jsx)("a",{href:s,target:"_blank",children:(0,g.jsx)("img",{src:a,alt:t})},t)}))})]})}),ce="heroBanner_kYWS",le={title:"What can you do with Ensono Stacks?",description:e=>(0,g.jsxs)(g.Fragment,{children:["Choose a ",(0,g.jsx)("a",{href:e,children:" workload"})," below and you can be up-and-running with a project in less than an hour:"]})},{title:de,description:ue}=le,me=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsxs)("div",{className:ce,id:"stacks-selector",children:[(0,g.jsx)("h3",{children:de}),(0,g.jsx)("p",{children:ue(e)}),(0,g.jsx)("div",{className:h.buttons,children:(0,g.jsx)(te,{})})]})};const pe=function(){const e=(0,n.A)(),{siteConfig:t={}}=e;return(0,g.jsx)(a.A,{title:t.title,description:t.customFields.description,keywords:t.customFields.keywords,children:(0,g.jsxs)("main",{children:[(0,g.jsx)(W,{}),(0,g.jsx)(G,{}),(0,g.jsx)(ie,{}),(0,g.jsx)(F,{}),(0,g.jsx)(w,{})]})})}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.99d01386.js b/assets/js/c4f5d8e4.99d01386.js new file mode 100644 index 000000000..6456f2637 --- /dev/null +++ b/assets/js/c4f5d8e4.99d01386.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[253],{2017:(e,t,o)=>{o.d(t,{A:()=>l});o(6540);var s=o(3554),a=o.n(s);const r="playerSection_SVZU",n="playerWrapper_cclc",i="player_oSQx";var c=o(4848);const l=function(e){let{url:t}=e;return(0,c.jsx)("div",{className:r,children:(0,c.jsx)("div",{className:n,children:(0,c.jsx)(a(),{className:i,url:t,controls:!0,width:"100%",height:"100%",config:{}})})})}},7643:(e,t,o)=>{o.r(t),o.d(t,{default:()=>pe});var s=o(6540),a=o(1922),r=o(4586),n=o(4164),i=o(8774),c=o(6025);const l="wrapper_Cuey",d="container_j7En",u="imageWrapper_MISJ",m="textWrapper_U_hS",p="getStartedLink_j_pa",h={section:"section_rC2D",buttons:"buttons_pzbO",primaryColour:"primaryColour_tkb9",textCenter:"textCenter_LniS"};var g=o(4848);const{contribute:{title:k,link:b,description:j,img:v,buttonText:x}}={contribute:{title:"Contribute to Ensono Stacks",link:"contributions",description:"As an open source project, you can be a part of the Github community shaping Ensono Stacks",img:"/img/icons/ensono-icon_puzzle-v_0222.png",buttonText:"Contribute"}},w=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsx)("div",{className:d,children:(0,g.jsxs)("section",{className:h.section,children:[(0,g.jsxs)("div",{className:l,children:[(0,g.jsx)("div",{className:u,children:(0,g.jsx)("img",{src:v})}),(0,g.jsxs)("div",{className:m,children:[(0,g.jsx)("h3",{children:k}),(0,g.jsx)("p",{children:j})]})]}),(0,g.jsx)("div",{className:p,children:(0,g.jsx)(i.A,{className:(0,n.A)("button button button--primary button--lg",h.getStarted),to:b.startsWith("http")?b:e+b,children:x})})]})})},f="ensonoStacksImageContainer_gXSw",_="wrapperImage_Sh1z",A="stacksLogo__NgH",S="wrapper_BjDL",y="headingWrapper_JBTP",{title:N,description:z,buttonText:C,logo:T,image:E}={title:"Ensono Stacks",description:"Making digital transformation easier and more reliable.",buttonText:"Show me how",logo:{url:"/img/icons/stacks-logo.svg",alt:"Ensono Stacks Icon"},image:{alt:"Ensono Image"}},W=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsxs)("div",{className:f,children:[(0,g.jsx)("div",{className:_,children:(0,g.jsx)("img",{src:(0,c.Ay)("img/stacks-banner.png"),alt:E.alt})}),(0,g.jsx)("div",{className:y,children:(0,g.jsxs)("div",{className:S,children:[(0,g.jsxs)("div",{className:A,children:[(0,g.jsx)("img",{src:T.url,alt:T.alt}),(0,g.jsx)("h2",{children:N})]}),(0,g.jsx)("p",{children:z}),(0,g.jsx)(i.A,{className:"button button--primary button--lg",to:e,children:C})]})})]})},I="feature_VLYB",P="testing_AvT2",M="imageWrapper_n5B6",L="features__AwJ",R="button_Is71",{features:B}={features:[{title:"Infrastructure",link:"infrastructure/azure/core_infrastructure",description:"Find out how to configure your cloud provider and other core infrastructure to make Ensono Stacks work for you.",img:"/img/icons/ensono-icon_host-v_0222.png",buttonText:"Show me"},{title:"Testing",link:"testing/testing_overview",description:"Get Started with Testing - Explore Ensono Stacks' pre-configured frameworks for performance, accessibility, UI, API, and more.",img:"/img/icons/ensono-icon_symbol-checkmark-v_0222.png",buttonText:"Show me"}]},F=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsx)("section",{className:h.section,children:(0,g.jsx)("div",{className:L,children:B.map(((t,o)=>(0,g.jsxs)("div",{className:(0,n.A)(I),children:[(0,g.jsxs)("div",{className:P,children:[(0,g.jsx)("div",{className:M,children:(0,g.jsx)("img",{src:t.img})}),(0,g.jsxs)("div",{children:[(0,g.jsx)("h3",{children:t.title}),(0,g.jsx)("p",{children:t.description})]})]}),(0,g.jsx)("div",{className:h.buttons+" "+R,children:(0,g.jsx)(i.A,{className:(0,n.A)("button button--primary button--lg"),to:""+e+t.link,children:t.buttonText})})]},o)))})})},q="intro_lUkf",D="introductionSection_U2Cy",J={title:(0,g.jsxs)(g.Fragment,{children:["Ensono Stacks is the ",(0,g.jsx)("span",{className:h.primaryColour,children:"cloud-native software factory"})," for digital transformations that work."]}),benefitsList:["Increase project predictability with reliable, tried and tested code.","Slash configuration time and speeds up deployment.","An ever-growing calalogue of workload templates, package management and example implementations.","A solid foundation for you to springboard into build."],buttonText:"Tell me more"},{title:Q,benefitsList:U,buttonText:O}=J,G=()=>(0,g.jsx)("div",{className:h.section,children:(0,g.jsxs)("div",{className:D,children:[(0,g.jsxs)("div",{className:q,children:[(0,g.jsx)("h2",{className:"margin-bottom--lg",children:Q}),(0,g.jsx)("ul",{children:U.map(((e,t)=>(0,g.jsx)("li",{children:e},t)))}),(0,g.jsx)("div",{className:h.buttons,children:(0,g.jsx)(i.A,{className:"button button--primary button--lg",to:"https://www.ensono.com/offerings/ensono-stacks-revolutionizing-business-approaches-for-future-growth/",children:O})})]}),(0,g.jsx)(me,{})]})});var X=o(1510);const Y="containerSelects_PpmM",H="disabledButton_dXfz",V="pickerContainer__HaS",{languageAndFramework:K,solutionArchitecture:Z,cloudProvider:$,optionMapper:ee}={languageAndFramework:{placeholder:"Select Language/Framework"},solutionArchitecture:{placeholder:"Select Solution Architecture"},cloudProvider:{placeholder:"Select Cloud Provider"},optionMapper:{"C# / .NET Core":{"REST Web API":{"Microsoft Azure [Azure]":"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore","Amazon Web Services [AWS]":"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore"},"REST Web API with CQRS":{"Microsoft Azure [Azure]":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore","Amazon Web Services [AWS]":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore"}},"Java Spring Boot":{"REST Web API":{"Microsoft Azure [Azure]":"workloads/common/backend/java/intro_java"},"REST Web API with CQRS":{"Microsoft Azure [Azure]":"workloads/common/backend/java/intro_java"},"REST Web API with CQRS and Events":{"Microsoft Azure [Azure]":"workloads/common/backend/java/intro_java"}},"Typescript / Nx":{"Server Side Rendered Web Application":{"Microsoft Azure [Azure]":"nx/nx_stacks"}},"Python / Spark":{"Data Lakehouse Platform":{"Microsoft Azure [Azure]":"workloads/azure/data/intro_data_azure"}}}},te=()=>{const[e,t]=(0,s.useState)(void 0),[o,a]=(0,s.useState)(void 0),[r,l]=(0,s.useState)(void 0),[d,u]=(0,s.useState)(!1),m=(0,c.Ay)("docs/"),p=Object.keys(ee).map((e=>({value:ee[e],label:e}))),k=e&&"object"==typeof e.value?Object.keys(e.value).map((t=>({value:e.value[t],label:t}))):[],b=o&&"object"==typeof o.value?Object.keys(o.value).map((e=>({value:o.value[e],label:e}))):[],j=e=>({...e,borderRadius:0,colors:{...e.colors,primary50:"#f4f4f4",primary25:"#f4f4f4",primary:"#6941EB"}});return(0,g.jsx)("div",{className:"container "+V,children:(0,g.jsxs)("div",{className:(0,n.A)("col","col--12",Y),children:[(0,g.jsx)(X.Ay,{placeholder:K.placeholder,value:e,onChange:e=>{t(e),a(null),u("object"!=typeof e.value)},options:p,theme:e=>j(e)}),k.length>0&&(0,g.jsx)(X.Ay,{placeholder:Z.placeholder,value:o,onChange:e=>{a(e),l(null),u(!1)},options:k||[],theme:e=>j(e)}),b.length>0&&(0,g.jsx)(X.Ay,{placeholder:$.placeholder,value:r,onChange:e=>{l(e),u(!0)},options:b||[],theme:e=>j(e)}),(0,g.jsx)("div",{className:h.buttons+" margin-top--md",children:(0,g.jsx)(i.A,{className:(0,n.A)("button button--primary button--lg",d?"":H),to:d?m+(r?r.value:e?e.value:""):"",disabled:!d,children:"Let's go!"})})]})})};o(2017);const oe="section_z9Q7",se="techListContainer_GQ9i",ae="techListWrapper_zYhq",{title:re,technologiesSupported:ne}={title:"Technologies supported by Ensono Stacks",technologiesSupported:[{logo:"aws.svg",name:"AWS",link:"https://aws.amazon.com/"},{logo:"microsoft-azure.svg",name:"Microsoft Azure",link:"https://azure.microsoft.com/"},{logo:"kubernetes.svg",name:"Kubernetes",link:"https://kubernetes.io/"},{logo:"terraform.svg",name:"Terraform",link:"https://www.terraform.io/"},{logo:"docker.svg",name:"Docker",link:"https://www.docker.com/"},{logo:"dotnet.svg",name:".NET",link:"https://dotnet.microsoft.com/"},{logo:"nx.svg",name:"NX",link:"https://nx.dev/"},{logo:"nextjs.svg",name:"NextJS",link:"https://nextjs.org/"},{logo:"spring-boot.svg",name:"Spring Boot",link:"https://spring.io/"},{logo:"azure-data-factory.svg",name:"Azure Data Factory",link:"https://azure.microsoft.com/products/data-factory"},{logo:"delta-lake.svg",name:"Delta lake",link:"https://delta.io/"},{logo:"databricks.svg",name:"Databricks",link:"https://www.databricks.com/"},{logo:"java.svg",name:"Java",link:"https://www.java.com/"},{logo:"csharp.svg",name:"C#",link:"https://dotnet.microsoft.com/languages/csharp"},{logo:"typescript.svg",name:"Typescript",link:"https://www.typescriptlang.org/"},{logo:"python.svg",name:"Python",link:"https://www.python.org/"}]},ie=()=>(0,g.jsx)("div",{className:se,children:(0,g.jsxs)("section",{className:h.section+" "+oe,children:[(0,g.jsx)("h2",{className:h.textCenter+" margin-bottom--lg",children:re}),(0,g.jsx)("div",{className:ae,children:ne.map((e=>{const{name:t,logo:o,link:s}=e,a="/img/icons/technologies-supported/"+o;return(0,g.jsx)("a",{href:s,target:"_blank",children:(0,g.jsx)("img",{src:a,alt:t})},t)}))})]})}),ce="heroBanner_kYWS",le={title:"What can you do with Ensono Stacks?",description:e=>(0,g.jsxs)(g.Fragment,{children:["Choose a ",(0,g.jsx)("a",{href:e,children:" workload"})," below and you can be up-and-running with a project in less than an hour:"]})},{title:de,description:ue}=le,me=()=>{const e=(0,c.Ay)("docs/");return(0,g.jsxs)("div",{className:ce,id:"stacks-selector",children:[(0,g.jsx)("h3",{children:de}),(0,g.jsx)("p",{children:ue(e)}),(0,g.jsx)("div",{className:h.buttons,children:(0,g.jsx)(te,{})})]})};const pe=function(){const e=(0,r.A)(),{siteConfig:t={}}=e;return(0,g.jsx)(a.A,{title:t.title,description:t.customFields.description,keywords:t.customFields.keywords,children:(0,g.jsxs)("main",{children:[(0,g.jsx)(W,{}),(0,g.jsx)(G,{}),(0,g.jsx)(ie,{}),(0,g.jsx)(F,{}),(0,g.jsx)(w,{})]})})}}}]); \ No newline at end of file diff --git a/assets/js/e45d8111.27e8b80b.js b/assets/js/e45d8111.27e8b80b.js new file mode 100644 index 000000000..6dd30d4fc --- /dev/null +++ b/assets/js/e45d8111.27e8b80b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[1616],{9948:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>h});var t=n(4848),s=n(8453),i=n(6025),c=n(2017);const o={id:"infrastructure_aws_netcore",title:".NET - AWS Infrastructure",sidebar_label:"AWS Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","aws","elastic container registry","elastic kubernetes service","dynamodb","deployment"]},l=void 0,a={id:"workloads/azure/backend/netcore/infrastructure_aws_netcore",title:".NET - AWS Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",source:"@site/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/infrastructure_aws_netcore",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"infrastructure_aws_netcore",title:".NET - AWS Infrastructure",sidebar_label:"AWS Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","aws","elastic container registry","elastic kubernetes service","dynamodb","deployment"]},sidebar:"docs",previous:{title:"Pipeline",permalink:"/docs/workloads/azure/backend/netcore/pipeline_netcore"},next:{title:"AWS/GHA Pipeline",permalink:"/docs/workloads/azure/backend/netcore/pipeline_gha_netcore"}},d={},h=[{value:"Overview",id:"overview",level:2},{value:"Diagram",id:"diagram",level:3},{value:"Resource List",id:"resource-list",level:3},{value:"Deploying",id:"deploying",level:2},{value:"Pipelines",id:"pipelines",level:3}];function u(e){const r={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(r.p,{children:"This page present the high level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS."}),"\n",(0,t.jsx)(c.A,{url:"https://www.youtube.com/watch?v=G8FW-djEDDY"}),"\n",(0,t.jsx)(r.p,{children:"Both the diagram and resource list below are for a single environment."}),"\n",(0,t.jsx)(r.h3,{id:"diagram",children:"Diagram"}),"\n",(0,t.jsx)("img",{alt:"AWS .NET API Infrastructure",src:(0,i.Ay)("img/aws_rest_api_infrastructure.png")}),"\n",(0,t.jsx)(r.h3,{id:"resource-list",children:"Resource List"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Resource"}),(0,t.jsx)(r.th,{children:"Description"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["EKS ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Amazon Elastic Kubernetes Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Public DNS Record"}),(0,t.jsxs)(r.td,{children:["DNS record pointing Ingress (via application load balancer ",(0,t.jsx)(r.strong,{children:"*"})," and internal load balancer ",(0,t.jsx)(r.strong,{children:"*"}),")"]})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["ECR ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Elastic Container Registry"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["Namespace: ",(0,t.jsx)(r.code,{children:"{env}-api"})]}),(0,t.jsx)(r.td,{children:"Kubernetes namespace for the environment"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Ingress"}),(0,t.jsx)(r.td,{children:"Kubernetes Ingress to handle routing to Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Service"}),(0,t.jsx)(r.td,{children:"Kubernetes Service to handle routing to Deployment Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Deployment"}),(0,t.jsx)(r.td,{children:"Kubernetes Deployment for managing Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"DynamoDB"}),(0,t.jsx)(r.td,{children:"Amazon managed NoSQL database"})]})]})]}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"*"})," ",(0,t.jsx)(r.em,{children:"Resource is created by the core infrastructure deployment."})]}),"\n",(0,t.jsx)(r.h2,{id:"deploying",children:"Deploying"}),"\n",(0,t.jsxs)(r.p,{children:["All infrastructure is deployed using ",(0,t.jsx)(r.a,{href:"https://www.terraform.io/",children:"Terraform"})," that is included with the generated code."]}),"\n",(0,t.jsx)(r.h3,{id:"pipelines",children:"Pipelines"}),"\n",(0,t.jsx)(r.p,{children:"The following pipelines are currently supported for automating the deployment:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/docs/workloads/azure/backend/netcore/pipeline_gha_netcore",children:"GitHub Action"})}),"\n"]})]})}function p(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},2017:(e,r,n)=>{n.d(r,{A:()=>a});n(6540);var t=n(3554),s=n.n(t);const i="playerSection_SVZU",c="playerWrapper_cclc",o="player_oSQx";var l=n(4848);const a=function(e){let{url:r}=e;return(0,l.jsx)("div",{className:i,children:(0,l.jsx)("div",{className:c,children:(0,l.jsx)(s(),{className:o,url:r,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var t=n(6540);const s={},i=t.createContext(s);function c(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e45d8111.da91ba94.js b/assets/js/e45d8111.da91ba94.js deleted file mode 100644 index f4a954ada..000000000 --- a/assets/js/e45d8111.da91ba94.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[1616],{9948:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>c,metadata:()=>d,toc:()=>a});var t=n(4848),s=n(8453),i=n(6025);const c={id:"infrastructure_aws_netcore",title:".NET - AWS Infrastructure",sidebar_label:"AWS Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","aws","elastic container registry","elastic kubernetes service","dynamodb","deployment"]},o=void 0,d={id:"workloads/azure/backend/netcore/infrastructure_aws_netcore",title:".NET - AWS Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",source:"@site/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/infrastructure_aws_netcore",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"infrastructure_aws_netcore",title:".NET - AWS Infrastructure",sidebar_label:"AWS Infrastructure",description:"High level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS.",keywords:[".net","rest api","cqrs","pipeline","aws","elastic container registry","elastic kubernetes service","dynamodb","deployment"]},sidebar:"docs",previous:{title:"Pipeline",permalink:"/docs/workloads/azure/backend/netcore/pipeline_netcore"},next:{title:"AWS/GHA Pipeline",permalink:"/docs/workloads/azure/backend/netcore/pipeline_gha_netcore"}},l={},a=[{value:"Overview",id:"overview",level:2},{value:"Diagram",id:"diagram",level:3},{value:"Resource List",id:"resource-list",level:3},{value:"Deploying",id:"deploying",level:2},{value:"Pipelines",id:"pipelines",level:3}];function h(e){const r={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(r.p,{children:"This page present the high level design of the reference implementation of the .NET Ensono Stacks REST API with CQRS."}),"\n",(0,t.jsx)(r.p,{children:"Both the diagram and resource list below are for a single environment."}),"\n",(0,t.jsx)(r.h3,{id:"diagram",children:"Diagram"}),"\n",(0,t.jsx)("img",{alt:"AWS .NET API Infrastructure",src:(0,i.Ay)("img/aws_rest_api_infrastructure.png")}),"\n",(0,t.jsx)(r.h3,{id:"resource-list",children:"Resource List"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Resource"}),(0,t.jsx)(r.th,{children:"Description"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["EKS ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Amazon Elastic Kubernetes Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Public DNS Record"}),(0,t.jsxs)(r.td,{children:["DNS record pointing Ingress (via application load balancer ",(0,t.jsx)(r.strong,{children:"*"})," and internal load balancer ",(0,t.jsx)(r.strong,{children:"*"}),")"]})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["ECR ",(0,t.jsx)(r.strong,{children:"*"})]}),(0,t.jsx)(r.td,{children:"Elastic Container Registry"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsxs)(r.td,{children:["Namespace: ",(0,t.jsx)(r.code,{children:"{env}-api"})]}),(0,t.jsx)(r.td,{children:"Kubernetes namespace for the environment"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Ingress"}),(0,t.jsx)(r.td,{children:"Kubernetes Ingress to handle routing to Service"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Service"}),(0,t.jsx)(r.td,{children:"Kubernetes Service to handle routing to Deployment Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Deployment"}),(0,t.jsx)(r.td,{children:"Kubernetes Deployment for managing Pods"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"DynamoDB"}),(0,t.jsx)(r.td,{children:"Amazon managed NoSQL database"})]})]})]}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"*"})," ",(0,t.jsx)(r.em,{children:"Resource is created by the core infrastructure deployment."})]}),"\n",(0,t.jsx)(r.h2,{id:"deploying",children:"Deploying"}),"\n",(0,t.jsxs)(r.p,{children:["All infrastructure is deployed using ",(0,t.jsx)(r.a,{href:"https://www.terraform.io/",children:"Terraform"})," that is included with the generated code."]}),"\n",(0,t.jsx)(r.h3,{id:"pipelines",children:"Pipelines"}),"\n",(0,t.jsx)(r.p,{children:"The following pipelines are currently supported for automating the deployment:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/docs/workloads/azure/backend/netcore/pipeline_gha_netcore",children:"GitHub Action"})}),"\n"]})]})}function u(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},8453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var t=n(6540);const s={},i=t.createContext(s);function c(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f25e5da0.33b8ec29.js b/assets/js/f25e5da0.33b8ec29.js new file mode 100644 index 000000000..14b8f356c --- /dev/null +++ b/assets/js/f25e5da0.33b8ec29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[7097],{4319:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>d,toc:()=>p});var n=r(4848),t=r(8453),l=r(6025),s=r(2017);const a={id:"pipeline_netcore",title:".NET - Azure DevOps Pipeline",sidebar_label:"Pipeline",description:"How to configure Azure DevOps Pipeline for .NET",keywords:[".net","azure devops","configure","pipeline","setting up","template","build"]},c=void 0,d={id:"workloads/azure/backend/netcore/pipeline_netcore",title:".NET - Azure DevOps Pipeline",description:"How to configure Azure DevOps Pipeline for .NET",source:"@site/docs/workloads/azure/backend/netcore/pipeline_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/pipeline_netcore",permalink:"/docs/workloads/azure/backend/netcore/pipeline_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"pipeline_netcore",title:".NET - Azure DevOps Pipeline",sidebar_label:"Pipeline",description:"How to configure Azure DevOps Pipeline for .NET",keywords:[".net","azure devops","configure","pipeline","setting up","template","build"]},sidebar:"docs",previous:{title:"Infrastructure",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_netcore"},next:{title:"AWS Infrastructure",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore"}},o={},p=[{value:"Pipeline Diagram",id:"pipeline-diagram",level:2},{value:"Feature branch -> Dev sequence",id:"feature-branch---dev-sequence",level:3},{value:"Main branch -> Production sequence",id:"main-branch---production-sequence",level:3},{value:"Setting up Azure DevOps",id:"setting-up-azure-devops",level:2},{value:"Variables",id:"variables",level:3},{value:"Azure Credentials",id:"azure-credentials",level:4},{value:"Application Specific",id:"application-specific",level:4},{value:"Create the pipeline",id:"create-the-pipeline",level:3}];function h(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"The pipeline will automate provisioning and updating the .NET REST API with CQRS infrastructure in Azure."}),"\n",(0,n.jsx)(s.A,{url:"https://www.youtube.com/watch?v=G8FW-djEDDY"}),"\n",(0,n.jsx)(i.h2,{id:"pipeline-diagram",children:"Pipeline Diagram"}),"\n",(0,n.jsx)(i.h3,{id:"feature-branch---dev-sequence",children:"Feature branch -> Dev sequence"}),"\n",(0,n.jsx)("img",{alt:"Dev .NET REST API - Azure DevOps Pipeline",src:(0,l.Ay)("img/netcore_pipeline_dev.png")}),"\n",(0,n.jsx)(i.h3,{id:"main-branch---production-sequence",children:"Main branch -> Production sequence"}),"\n",(0,n.jsx)("img",{alt:"Prod .NET REST API - Azure DevOps Pipeline",src:(0,l.Ay)("img/netcore_pipeline_prod.png")}),"\n",(0,n.jsx)(i.h2,{id:"setting-up-azure-devops",children:"Setting up Azure DevOps"}),"\n",(0,n.jsx)(i.h3,{id:"variables",children:"Variables"}),"\n",(0,n.jsxs)(i.p,{children:["A variable file located at ",(0,n.jsx)(i.code,{children:"build/azDevOps/azure/ci-vars.yml"})," will contain the majority of the variables required for the pipeline. ",(0,n.jsx)(i.strong,{children:"This file should be manually checked and updated where required before first deployment"}),". If the project was generated using the Stacks CLI then the file will be updated with the information provided."]}),"\n",(0,n.jsxs)(i.p,{children:["Variable groups will need creating for storing some sensitive variables to be used by the pipeline. Instructions for creating a variable group can be found ",(0,n.jsx)(i.a,{href:"https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=classic#create-a-variable-group",children:"here"}),". Two variable groups are used by default, one for Azure credentials and one for any application specific variables."]}),"\n",(0,n.jsx)(i.h4,{id:"azure-credentials",children:"Azure Credentials"}),"\n",(0,n.jsxs)(i.p,{children:["Create a variable group called ",(0,n.jsx)(i.code,{children:"azure-sp-creds"}),", add a description and make sure the ",(0,n.jsx)(i.strong,{children:"Allow access to all pipelines"})," option is checked."]}),"\n",(0,n.jsx)(i.p,{children:"Add the following variables:"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Variable Name"}),(0,n.jsx)(i.th,{children:"Description"}),(0,n.jsx)(i.th,{children:"Required for"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_CLIENT_ID"}),(0,n.jsx)(i.td,{children:"Azure Service Principal Client ID"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_CLIENT_SECRET"}),(0,n.jsx)(i.td,{children:"Azure Service Principal Client Secret"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_SUBSCRIPTION_ID"}),(0,n.jsx)(i.td,{children:"Azure Subscription ID"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_TENANT_ID"}),(0,n.jsx)(i.td,{children:"Azure Tenant ID"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]})]})]}),"\n",(0,n.jsx)(i.h4,{id:"application-specific",children:"Application Specific"}),"\n",(0,n.jsxs)(i.p,{children:["Create a the variable group, add a description and make sure the ",(0,n.jsx)(i.strong,{children:"Allow access to all pipelines"})," option is checked. Update the ",(0,n.jsx)(i.code,{children:"- group: replaceme"})," in the ",(0,n.jsx)(i.code,{children:"build/azDevOps/azure/ci-vars.yml"})," file to match the name of your variable group."]}),"\n",(0,n.jsx)(i.p,{children:"Add the following variables:"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Variable Name"}),(0,n.jsx)(i.th,{children:"Description"}),(0,n.jsx)(i.th,{children:"Required for"})]})}),(0,n.jsx)(i.tbody,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"SONAR_TOKEN"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"https://sonarcloud.io/",children:"SonarCloud Token"})}),(0,n.jsx)(i.td,{children:"Static Code Analysis"})]})})]}),"\n",(0,n.jsx)(i.h3,{id:"create-the-pipeline",children:"Create the pipeline"}),"\n",(0,n.jsx)(i.p,{children:"Follow the steps below to create the pipeline and trigger the initial run."}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["In the pipelines section of Azure DevOps, select ",(0,n.jsx)(i.strong,{children:"New Pipeline"}),"."]}),"\n",(0,n.jsx)(i.li,{children:"Select your repository."}),"\n",(0,n.jsxs)(i.li,{children:["Select the ",(0,n.jsx)(i.strong,{children:"Existing Azure Pipelines YAML files"})," option and enter the path ",(0,n.jsx)(i.code,{children:"build/azDevops/azure/ci.yml"})]}),"\n",(0,n.jsx)(i.li,{children:"Click run and wait for the pipeline to complete."}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},2017:(e,i,r)=>{r.d(i,{A:()=>d});r(6540);var n=r(3554),t=r.n(n);const l="playerSection_SVZU",s="playerWrapper_cclc",a="player_oSQx";var c=r(4848);const d=function(e){let{url:i}=e;return(0,c.jsx)("div",{className:l,children:(0,c.jsx)("div",{className:s,children:(0,c.jsx)(t(),{className:a,url:i,controls:!0,width:"100%",height:"100%",config:{}})})})}},8453:(e,i,r)=>{r.d(i,{R:()=>s,x:()=>a});var n=r(6540);const t={},l=n.createContext(t);function s(e){const i=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f25e5da0.ac3b4480.js b/assets/js/f25e5da0.ac3b4480.js deleted file mode 100644 index 5c9aa3427..000000000 --- a/assets/js/f25e5da0.ac3b4480.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[7097],{4319:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>o});var n=r(4848),t=r(8453),l=r(6025);const s={id:"pipeline_netcore",title:".NET - Azure DevOps Pipeline",sidebar_label:"Pipeline",description:"How to configure Azure DevOps Pipeline for .NET",keywords:[".net","azure devops","configure","pipeline","setting up","template","build"]},a=void 0,c={id:"workloads/azure/backend/netcore/pipeline_netcore",title:".NET - Azure DevOps Pipeline",description:"How to configure Azure DevOps Pipeline for .NET",source:"@site/docs/workloads/azure/backend/netcore/pipeline_netcore.md",sourceDirName:"workloads/azure/backend/netcore",slug:"/workloads/azure/backend/netcore/pipeline_netcore",permalink:"/docs/workloads/azure/backend/netcore/pipeline_netcore",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"pipeline_netcore",title:".NET - Azure DevOps Pipeline",sidebar_label:"Pipeline",description:"How to configure Azure DevOps Pipeline for .NET",keywords:[".net","azure devops","configure","pipeline","setting up","template","build"]},sidebar:"docs",previous:{title:"Infrastructure",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_netcore"},next:{title:"AWS Infrastructure",permalink:"/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore"}},d={},o=[{value:"Pipeline Diagram",id:"pipeline-diagram",level:2},{value:"Feature branch -> Dev sequence",id:"feature-branch---dev-sequence",level:3},{value:"Main branch -> Production sequence",id:"main-branch---production-sequence",level:3},{value:"Setting up Azure DevOps",id:"setting-up-azure-devops",level:2},{value:"Variables",id:"variables",level:3},{value:"Azure Credentials",id:"azure-credentials",level:4},{value:"Application Specific",id:"application-specific",level:4},{value:"Create the pipeline",id:"create-the-pipeline",level:3}];function p(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"The pipeline will automate provisioning and updating the .NET REST API with CQRS infrastructure in Azure."}),"\n",(0,n.jsx)(i.h2,{id:"pipeline-diagram",children:"Pipeline Diagram"}),"\n",(0,n.jsx)(i.h3,{id:"feature-branch---dev-sequence",children:"Feature branch -> Dev sequence"}),"\n",(0,n.jsx)("img",{alt:"Dev .NET REST API - Azure DevOps Pipeline",src:(0,l.Ay)("img/netcore_pipeline_dev.png")}),"\n",(0,n.jsx)(i.h3,{id:"main-branch---production-sequence",children:"Main branch -> Production sequence"}),"\n",(0,n.jsx)("img",{alt:"Prod .NET REST API - Azure DevOps Pipeline",src:(0,l.Ay)("img/netcore_pipeline_prod.png")}),"\n",(0,n.jsx)(i.h2,{id:"setting-up-azure-devops",children:"Setting up Azure DevOps"}),"\n",(0,n.jsx)(i.h3,{id:"variables",children:"Variables"}),"\n",(0,n.jsxs)(i.p,{children:["A variable file located at ",(0,n.jsx)(i.code,{children:"build/azDevOps/azure/ci-vars.yml"})," will contain the majority of the variables required for the pipeline. ",(0,n.jsx)(i.strong,{children:"This file should be manually checked and updated where required before first deployment"}),". If the project was generated using the Stacks CLI then the file will be updated with the information provided."]}),"\n",(0,n.jsxs)(i.p,{children:["Variable groups will need creating for storing some sensitive variables to be used by the pipeline. Instructions for creating a variable group can be found ",(0,n.jsx)(i.a,{href:"https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=classic#create-a-variable-group",children:"here"}),". Two variable groups are used by default, one for Azure credentials and one for any application specific variables."]}),"\n",(0,n.jsx)(i.h4,{id:"azure-credentials",children:"Azure Credentials"}),"\n",(0,n.jsxs)(i.p,{children:["Create a variable group called ",(0,n.jsx)(i.code,{children:"azure-sp-creds"}),", add a description and make sure the ",(0,n.jsx)(i.strong,{children:"Allow access to all pipelines"})," option is checked."]}),"\n",(0,n.jsx)(i.p,{children:"Add the following variables:"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Variable Name"}),(0,n.jsx)(i.th,{children:"Description"}),(0,n.jsx)(i.th,{children:"Required for"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_CLIENT_ID"}),(0,n.jsx)(i.td,{children:"Azure Service Principal Client ID"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_CLIENT_SECRET"}),(0,n.jsx)(i.td,{children:"Azure Service Principal Client Secret"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_SUBSCRIPTION_ID"}),(0,n.jsx)(i.td,{children:"Azure Subscription ID"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ARM_TENANT_ID"}),(0,n.jsx)(i.td,{children:"Azure Tenant ID"}),(0,n.jsx)(i.td,{children:"Terraform and application deployment"})]})]})]}),"\n",(0,n.jsx)(i.h4,{id:"application-specific",children:"Application Specific"}),"\n",(0,n.jsxs)(i.p,{children:["Create a the variable group, add a description and make sure the ",(0,n.jsx)(i.strong,{children:"Allow access to all pipelines"})," option is checked. Update the ",(0,n.jsx)(i.code,{children:"- group: replaceme"})," in the ",(0,n.jsx)(i.code,{children:"build/azDevOps/azure/ci-vars.yml"})," file to match the name of your variable group."]}),"\n",(0,n.jsx)(i.p,{children:"Add the following variables:"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Variable Name"}),(0,n.jsx)(i.th,{children:"Description"}),(0,n.jsx)(i.th,{children:"Required for"})]})}),(0,n.jsx)(i.tbody,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"SONAR_TOKEN"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"https://sonarcloud.io/",children:"SonarCloud Token"})}),(0,n.jsx)(i.td,{children:"Static Code Analysis"})]})})]}),"\n",(0,n.jsx)(i.h3,{id:"create-the-pipeline",children:"Create the pipeline"}),"\n",(0,n.jsx)(i.p,{children:"Follow the steps below to create the pipeline and trigger the initial run."}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["In the pipelines section of Azure DevOps, select ",(0,n.jsx)(i.strong,{children:"New Pipeline"}),"."]}),"\n",(0,n.jsx)(i.li,{children:"Select your repository."}),"\n",(0,n.jsxs)(i.li,{children:["Select the ",(0,n.jsx)(i.strong,{children:"Existing Azure Pipelines YAML files"})," option and enter the path ",(0,n.jsx)(i.code,{children:"build/azDevops/azure/ci.yml"})]}),"\n",(0,n.jsx)(i.li,{children:"Click run and wait for the pipeline to complete."}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},8453:(e,i,r)=>{r.d(i,{R:()=>s,x:()=>a});var n=r(6540);const t={},l=n.createContext(t);function s(e){const i=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.75dddb2d.js b/assets/js/main.75dddb2d.js new file mode 100644 index 000000000..0227a2aaf --- /dev/null +++ b/assets/js/main.75dddb2d.js @@ -0,0 +1,2 @@ +/*! For license information please see main.75dddb2d.js.LICENSE.txt */ +(self.webpackChunkstacks=self.webpackChunkstacks||[]).push([[8792],{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={"0058b4c6":[()=>n.e(849).then(n.t.bind(n,6164,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",6164],"027fc7cc":[()=>n.e(3774).then(n.bind(n,7539)),"@site/docs/workloads/azure/data/getting_started/shared_resources_deployment_azure.md",7539],"02aa6397":[()=>n.e(6734).then(n.bind(n,3734)),"@site/docs/testing/testing_overview.md",3734],"030f8d28":[()=>Promise.all([n.e(1869),n.e(1e3)]).then(n.bind(n,8886)),"@site/docs/workloads/azure/backend/java/testing/testing_java.md",8886],"03388d76":[()=>n.e(7074).then(n.bind(n,4995)),"@site/docs/workloads/common/backend/java/architecture/dependency_commons_java.md",4995],"04f9d5a5":[()=>n.e(471).then(n.bind(n,7096)),"@site/docs/testing/testing_in_nx/frontend_testing_in_nx.md",7096],"0991a5c5":[()=>n.e(6726).then(n.bind(n,9542)),"@site/docs/workloads/azure/backend/java/architecture/dependency_servicebus_java.md",9542],"0a728393":[()=>n.e(4738).then(n.bind(n,4909)),"@site/docs/workloads/azure/data/getting_started/requirements_data_azure.md",4909],"0a7a1cb8":[()=>n.e(412).then(n.bind(n,7644)),"@site/docs/stackscli/project_settings.mdx",7644],"0bfd7576":[()=>n.e(2764).then(n.bind(n,41)),"@site/docs/workloads/azure/data/getting_started/ingest_pipeline_deployment_azure.md",41],"0c516743":[()=>Promise.all([n.e(1869),n.e(3554),n.e(3136)]).then(n.bind(n,9294)),"@site/docs/workloads/azure/backend/netcore/infrastructure_netcore.md",9294],"10d871ba":[()=>n.e(3755).then(n.bind(n,2941)),"@site/docs/getting_started/logger/winston.md",2941],"1581399b":[()=>n.e(1497).then(n.bind(n,6743)),"@site/docs/getting_started/azure-container-app/ACA.md",6743],16856501:[()=>n.e(9845).then(n.bind(n,6359)),"@site/docs/workloads/azure/backend/java/pipeline_java.md",6359],17896441:[()=>Promise.all([n.e(1869),n.e(8401)]).then(n.bind(n,2391)),"@theme/DocItem",2391],"17b46bf9":[()=>n.e(9750).then(n.bind(n,1669)),"@site/docs/workloads/azure/data/data_engineering/data_engineering_intro_azure.md",1669],"1898535d":[()=>n.e(7504).then(n.bind(n,9512)),"@site/docs/getting_started/playwright/visual-regression.md",9512],"1a451233":[()=>Promise.all([n.e(1869),n.e(3554),n.e(7207)]).then(n.bind(n,7049)),"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore.md",7049],"1a7bc6f2":[()=>Promise.all([n.e(1869),n.e(4205)]).then(n.bind(n,8741)),"@site/docs/getting_started/logger/plugin-information.md",8741],"1b8235d9":[()=>n.e(9157).then(n.bind(n,1024)),"@site/docs/getting_started/azure-react/generator-app-insights-web.md",1024],"1cced86e":[()=>n.e(1800).then(n.bind(n,98)),"@site/docs/workloads/azure/data/intro_data_azure.md",98],"1d79b670":[()=>Promise.all([n.e(1869),n.e(7489)]).then(n.bind(n,7694)),"@site/docs/testing/testing_in_nx/playwright_nx.md",7694],"1d9a586d":[()=>n.e(4723).then(n.bind(n,2224)),"@site/docs/getting_started/next/storybook.md",2224],"1e1575f9":[()=>n.e(4560).then(n.bind(n,8220)),"@site/docs/getting_started/azure-node/app-insights.md",8220],"2266d79a":[()=>n.e(1990).then(n.bind(n,5263)),"@site/docs/workloads/azure/data/data_engineering/stacks_data_utilities.md",5263],"22f8ff62":[()=>n.e(7357).then(n.bind(n,7589)),"@site/docs/workloads/azure/data/architecture/architecture_data_azure.md",7589],25952044:[()=>n.e(7632).then(n.bind(n,5450)),"@site/docs/nextjs/authentication.md",5450],"2a024341":[()=>n.e(9876).then(n.bind(n,5377)),"@site/docs/workloads/azure/data/getting_started/example_data_source.md",5377],"2e66a542":[()=>n.e(1988).then(n.bind(n,8536)),"@site/docs/workloads/azure/backend/netcore/architecture/data_storage_comsosdb_netcore.md",8536],"2e843c24":[()=>Promise.all([n.e(1869),n.e(2468)]).then(n.bind(n,2321)),"@site/docs/getting_started/setup.md",2321],"30b4305c":[()=>n.e(6169).then(n.bind(n,4337)),"@site/docs/workloads/azure/data/data_engineering/datastacks.md",4337],"3134a503":[()=>n.e(2323).then(n.bind(n,1057)),"@site/docs/workloads/azure/backend/netcore/architecture/operations_events_exceptions_correlation_netcore.md",1057],"3556501c":[()=>Promise.all([n.e(1869),n.e(5281)]).then(n.bind(n,7829)),"@site/docs/getting_started/create-stacks-workspace/plugin-information.md",7829],38121634:[()=>n.e(1059).then(n.bind(n,5383)),"@site/docs/workloads/azure/backend/netcore/architecture/repository_overview_netcore.md",5383],"3aa552ac":[()=>n.e(6404).then(n.bind(n,9539)),"@site/docs/workloads/azure/backend/java/architecture/dependency_cosmos_java.md",9539],"3c29e2ef":[()=>n.e(1634).then(n.bind(n,4142)),"@site/docs/contributions.md",4142],"3dbbb6bc":[()=>n.e(8431).then(n.bind(n,4357)),"@site/docs/code_of_conduct.md",4357],"3deea674":[()=>Promise.all([n.e(1869),n.e(3554),n.e(9260)]).then(n.bind(n,2769)),"@site/docs/workloads/azure/backend/netcore/introduction_netcore.md",2769],40932100:[()=>n.e(9280).then(n.bind(n,2721)),"@site/docs/infrastructure/introduction.md",2721],"4125fe19":[()=>n.e(956).then(n.bind(n,7905)),"@site/docs/workloads/common/backend/java/architecture/dependency_api_java.md",7905],"413c892d":[()=>n.e(8579).then(n.bind(n,227)),"@site/docs/workloads/azure/data/getting_started/generate_project.md",227],"414e16ac":[()=>n.e(274).then(n.bind(n,338)),"@site/docs/infrastructure/azure/core_infrastructure.md",338],"47211b0b":[()=>n.e(6899).then(n.bind(n,1924)),"@site/docs/workloads/azure/data/data_engineering/data_processing.md",1924],48518084:[()=>n.e(7329).then(n.bind(n,5116)),"@site/docs/workloads/common/backend/java/architecture/web_api/architecture_java.md",5116],"48b3647b":[()=>n.e(7283).then(n.bind(n,6006)),"@site/docs/getting_started/playwright/init.md",6006],"495e2f71":[()=>Promise.all([n.e(1869),n.e(1704)]).then(n.bind(n,1159)),"@site/docs/testing/testing_in_nx/playwright_visual_testing.md",1159],"4ae6a656":[()=>n.e(8583).then(n.bind(n,1277)),"@site/docs/getting_started/rest-client/openapi-client.md",1277],"4d6fbf4e":[()=>n.e(8106).then(n.bind(n,2917)),"@site/docs/workloads/common/backend/java/architecture/java_cqrs/architecture_java_cqrs.md",2917],"4efdedf0":[()=>n.e(3893).then(n.bind(n,7321)),"@site/docs/getting_started/rest-client/client-endpoint.md",7321],"503b97f0":[()=>n.e(6537).then(n.bind(n,4241)),"@site/docs/workloads/common/backend/java/architecture/dependency_messaging_java.md",4241],"517d9d17":[()=>n.e(8835).then(n.bind(n,3808)),"@site/docs/stackscli/examples.mdx",3808],"54d77e99":[()=>Promise.all([n.e(1869),n.e(4713)]).then(n.bind(n,7580)),"@site/docs/linting/eslint.md",7580],"552b4366":[()=>Promise.all([n.e(1869),n.e(3554),n.e(4550)]).then(n.bind(n,7963)),"@site/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore.md",7963],"560e98d8":[()=>n.e(2444).then(n.bind(n,872)),"@site/docs/infrastructure/azure/pipelines/azure_devops.md",872],"597e0d5c":[()=>n.e(7389).then(n.bind(n,4774)),"@site/docs/getting_started/workspace/init.md",4774],"5ab30b4c":[()=>n.e(3805).then(n.bind(n,5495)),"@site/docs/workloads/azure/backend/netcore/security_netcore.md",5495],"5daba60d":[()=>Promise.all([n.e(1869),n.e(3554),n.e(8424)]).then(n.bind(n,605)),"@site/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore.md",605],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5ff780a4":[()=>Promise.all([n.e(1869),n.e(5252)]).then(n.bind(n,226)),"@site/docs/getting_started/next/plugin-information.md",226],"63a3aa1c":[()=>Promise.all([n.e(1869),n.e(2736)]).then(n.bind(n,5932)),"@site/docs/workloads/common/backend/java/maven_spring_profiles.md",5932],"6480fb11":[()=>Promise.all([n.e(1869),n.e(1695)]).then(n.bind(n,3378)),"@site/docs/module_federation/nextjs_plugin.md",3378],"6916e1c4":[()=>n.e(8942).then(n.bind(n,3398)),"@site/docs/workloads/azure/data/getting_started/fabric_deployment_guide.md",3398],"6a2b67c4":[()=>Promise.all([n.e(1869),n.e(6004)]).then(n.bind(n,1712)),"@site/docs/getting_started/azure-react/plugin-information.md",1712],"6c94c7d9":[()=>n.e(602).then(n.bind(n,986)),"@site/docs/getting_started/playwright/accessibility.md",986],"6e3d5508":[()=>n.e(812).then(n.bind(n,8598)),"@site/docs/getting_started/next/next-auth.md",8598],"6eb83d4b":[()=>Promise.all([n.e(1869),n.e(3661)]).then(n.bind(n,19)),"@site/docs/getting_started/azure-node/plugin-information.md",19],"737482c1":[()=>n.e(194).then(n.bind(n,9454)),"@site/docs/workloads/azure/backend/netcore/architecture/project_structure/simple_api_netcore.md",9454],"745b4260":[()=>n.e(6395).then(n.bind(n,55)),"@site/docs/nextjs/infrastructure.md",55],"78d23669":[()=>n.e(9744).then(n.bind(n,9809)),"@site/docs/workloads/azure/data/architecture/infrastructure_data_azure.md",9809],"7a7ae05b":[()=>n.e(8757).then(n.bind(n,544)),"@site/docs/testing/contract_testing_pact.md",544],"7ccc2f3a":[()=>n.e(2663).then(n.bind(n,4709)),"@site/docs/workloads/common/backend/java/intro_java.md",4709],"7ebfd7b0":[()=>Promise.all([n.e(1869),n.e(218)]).then(n.bind(n,4128)),"@site/docs/getting_started/plugin-name/plugin-information.md",4128],"7f2c8919":[()=>n.e(5734).then(n.bind(n,2859)),"@site/docs/workloads/common/backend/java/architecture/java_cqrs/structure_java_cqrs.md",2859],"80a64d00":[()=>n.e(7434).then(n.bind(n,8656)),"@site/docs/workloads/azure/data/getting_started/core_data_platform_deployment_azure.md",8656],"80b9a969":[()=>n.e(9037).then(n.bind(n,7275)),"@site/docs/workloads/common/backend/java/architecture/dependency_parent_java.md",7275],"84c0bcc1":[()=>n.e(847).then(n.bind(n,1042)),"@site/docs/stackscli/about.md",1042],85707196:[()=>n.e(1982).then(n.bind(n,3269)),"@site/docs/workloads/aws/backend/java/architecture/dependency_dynamodb_java.md",3269],"89a733e8":[()=>n.e(5199).then(n.bind(n,4526)),"@site/docs/workloads/azure/data/getting_started/processing_pipeline_deployment_azure.md",4526],"89abd613":[()=>n.e(4285).then(n.bind(n,2252)),"@site/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_netcore.md",2252],"8a7a0add":[()=>n.e(6823).then(n.bind(n,1660)),"@site/docs/workloads/common/backend/java/architecture/web_api/structure_java.md",1660],"8eac0476":[()=>n.e(6637).then(n.bind(n,3913)),"@site/docs/workloads/azure/backend/netcore/requirments_netcore.md",3913],"8f488a34":[()=>n.e(5417).then(n.bind(n,3936)),"@site/docs/getting_started/next/init.md",3936],"926a518c":[()=>n.e(2564).then(n.bind(n,1653)),"@site/docs/getting_started/rest-client/http-client.md",1653],"94993bad":[()=>n.e(1206).then(n.bind(n,7650)),"@site/docs/workloads/azure/data/getting_started/dev_quickstart_data_azure.md",7650],"95bab7f5":[()=>Promise.all([n.e(1869),n.e(3554),n.e(6752)]).then(n.bind(n,4463)),"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore.md",4463],"9803c769":[()=>n.e(2634).then(n.bind(n,9792)),"@site/docs/infrastructure/aws/pipelines/github_actions.md",9792],"98b2166d":[()=>n.e(1671).then(n.bind(n,7498)),"@site/docs/workloads/azure/backend/netcore/logging_netcore.md",7498],"9dd93029":[()=>n.e(3579).then(n.bind(n,17)),"@site/docs/getting_started/playwright/executor.md",17],a3e00ebe:[()=>Promise.all([n.e(1869),n.e(3178)]).then(n.bind(n,73)),"@site/docs/testing/testing_in_nx/playwright_accessibility_testing.md",73],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,1723)),"@theme/DocVersionRoot",1723],a7fa594d:[()=>Promise.all([n.e(1869),n.e(5650)]).then(n.bind(n,8653)),"@site/docs/workloads/azure/backend/java/testing/execute_serenity_api_tests.md",8653],a8d96c67:[()=>n.e(1225).then(n.bind(n,62)),"@site/docs/workloads/azure/backend/netcore/testing/functional_testing_netcore.md",62],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,1377)),"@theme/DocRoot",1377],aa0e6060:[()=>n.e(1824).then(n.bind(n,6036)),"@site/docs/infrastructure/aws/core_infrastructure.md",6036],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],ad98f8ba:[()=>n.e(8910).then(n.bind(n,9482)),"@site/docs/workloads/common/backend/java/architecture/maven_modules_java.md",9482],ae739112:[()=>n.e(7752).then(n.bind(n,4170)),"@site/docs/workloads/aws/backend/java/define_aws_secrets_java.md",4170],aee0b240:[()=>n.e(6242).then(n.bind(n,6028)),"@site/docs/getting_started/rest-client/bump-version.md",6028],b05ee991:[()=>n.e(1995).then(n.bind(n,7796)),"@site/docs/developer/java/patterns/java_mapstruct_mapping.md",7796],b078c0fc:[()=>n.e(6228).then(n.bind(n,5632)),"@site/docs/stackscli/runtime_config.mdx",5632],b5048ac6:[()=>Promise.all([n.e(1869),n.e(6954)]).then(n.bind(n,6993)),"@site/docs/testing/testing_in_nx/playwright_visual_testing_applitools.md",6993],b5831b65:[()=>n.e(2637).then(n.bind(n,2562)),"@site/docs/workloads/workloads.md",2562],b7dde44d:[()=>Promise.all([n.e(1869),n.e(6597)]).then(n.bind(n,9616)),"@site/docs/nx/nx_monorepo.md",9616],ba7b83c5:[()=>Promise.all([n.e(1869),n.e(9564)]).then(n.bind(n,9452)),"@site/docs/getting_started/workspace/plugin-information.md",9452],bc4707c8:[()=>n.e(7303).then(n.bind(n,4003)),"@site/docs/workloads/aws/backend/java/setting_up_dynamodb_locally_java.md",4003],bc5ee593:[()=>n.e(8438).then(n.bind(n,552)),"@site/docs/workloads/aws/backend/java/architecture/dependency_sqs_java.md",552],bc6da52b:[()=>n.e(5370).then(n.bind(n,7610)),"@site/docs/workloads/common/backend/java/architecture/dependency_cqrs_java.md",7610],c377a04b:[()=>n.e(3361).then(n.bind(n,8321)),"@site/docs/index.md",8321],c44fafdd:[()=>n.e(2681).then(n.bind(n,7528)),"@site/docs/testing/performance_testing_gatling.md",7528],c4f5d8e4:[()=>Promise.all([n.e(1869),n.e(3554),n.e(1510),n.e(253)]).then(n.bind(n,7643)),"@site/src/pages/index.js",7643],c6a10652:[()=>n.e(7925).then(n.bind(n,6267)),"@site/docs/workloads/azure/data/data_engineering/ingest_data_azure.md",6267],c99510ac:[()=>Promise.all([n.e(1869),n.e(1702)]).then(n.bind(n,2469)),"@site/docs/workloads/azure/backend/java/requirements_java.md",2469],c9b058cf:[()=>Promise.all([n.e(1869),n.e(5041)]).then(n.bind(n,4012)),"@site/docs/getting_started/playwright/plugin-information.md",4012],ccfef88a:[()=>n.e(7169).then(n.bind(n,7567)),"@site/docs/developer/developer_patterns_readme.md",7567],cd507b8a:[()=>n.e(4907).then(n.bind(n,3655)),"@site/docs/stackscli/troubleshooting.mdx",3655],cd8bc9d6:[()=>n.e(4918).then(n.bind(n,1585)),"@site/docs/workloads/azure/data/data_engineering/testing_data_azure.md",1585],d21d2c84:[()=>n.e(2195).then(n.bind(n,1859)),"@site/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_ui_netcore.md",1859],d778a53f:[()=>n.e(2944).then(n.bind(n,3327)),"@site/docs/developer/java/patterns/java_swagger_annotations.md",3327],d7d4d92f:[()=>Promise.all([n.e(1869),n.e(3237)]).then(n.bind(n,8339)),"@site/docs/workloads/common/backend/java/ide_java.md",8339],d93ebc52:[()=>n.e(9818).then(n.bind(n,8714)),"@site/docs/getting_started/azure-node/app-insights-deployment.md",8714],da080250:[()=>n.e(3199).then(n.bind(n,8546)),"@site/docs/workloads/azure/data/getting_started/getting_started.md",8546],da4127da:[()=>n.e(7599).then(n.bind(n,4680)),"@site/docs/getting_started/plugin-name/executor-generator-template.md",4680],dd34129c:[()=>Promise.all([n.e(1869),n.e(1027)]).then(n.bind(n,4309)),"@site/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore.md",4309],df639352:[()=>n.e(3285).then(n.bind(n,6613)),"@site/docs/workloads/azure/backend/netcore/architecture/testing/testing_scope_netcore.md",6613],df83160f:[()=>n.e(4777).then(n.bind(n,2256)),"@site/docs/stackscli/usage.mdx",2256],e197774f:[()=>Promise.all([n.e(1869),n.e(3641)]).then(n.bind(n,2561)),"@site/docs/getting_started/rest-client/plugin-information.md",2561],e214a2c6:[()=>Promise.all([n.e(1869),n.e(7443)]).then(n.bind(n,9600)),"@site/docs/workloads/azure/backend/java/setting_up_cosmos_db_locally_java.md",9600],e45d8111:[()=>Promise.all([n.e(1869),n.e(3554),n.e(1616)]).then(n.bind(n,9948)),"@site/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore.md",9948],e747ec83:[()=>n.e(7051).then(n.bind(n,5077)),"@site/docs/glossary.md",5077],e8d03bd3:[()=>Promise.all([n.e(1869),n.e(7736)]).then(n.bind(n,6552)),"@site/docs/storybook/storybook_stacks.md",6552],eac4a6d2:[()=>n.e(9631).then(n.bind(n,4427)),"@site/docs/developer/java/patterns/java_app_layering.md",4427],eedf6952:[()=>n.e(1349).then(n.bind(n,7398)),"@site/docs/workloads/azure/backend/netcore/pipeline_gha_netcore.md",7398],ef434f98:[()=>n.e(8568).then(n.bind(n,781)),"@site/docs/assets/README.md",781],effe3c52:[()=>n.e(8622).then(n.bind(n,9140)),"@site/docs/workloads/azure/backend/netcore/architecture/project_structure/cqrs_netcore.md",9140],f208b0b5:[()=>n.e(9614).then(n.bind(n,6653)),"@site/docs/workloads/common/backend/java/scaffolding_java.md",6653],f25e5da0:[()=>Promise.all([n.e(1869),n.e(3554),n.e(7097)]).then(n.bind(n,4319)),"@site/docs/workloads/azure/backend/netcore/pipeline_netcore.md",4319],f35e5402:[()=>n.e(2749).then(n.bind(n,9741)),"@site/docs/workloads/azure/backend/netcore/architecture/project_structure/functions_and_worker_netcore.md",9741],f388282e:[()=>n.e(1455).then(n.bind(n,7950)),"@site/docs/workloads/azure/backend/netcore/architecture/architecture_overview_netcore.md",7950],f5417503:[()=>n.e(5602).then(n.bind(n,8030)),"@site/docs/workloads/azure/data/data_engineering/data_quality_azure.md",8030],f6fe5f12:[()=>n.e(8656).then(n.bind(n,3232)),"@site/docs/workloads/aws/backend/java/setting_up_xray_daemon_locally_java.md",3232],fa2c107f:[()=>n.e(1421).then(n.bind(n,6212)),"@site/docs/workloads/azure/backend/java/infrastructure_java.md",6212],fc270d06:[()=>n.e(153).then(n.bind(n,3763)),"@site/docs/getting_started_dev.md",3763],fd50f223:[()=>Promise.all([n.e(1869),n.e(6083)]).then(n.bind(n,3806)),"@site/docs/workloads/azure/backend/java/quickstart_java.md",3806],fdd1b509:[()=>n.e(4810).then(n.bind(n,4650)),"@site/docs/workloads/azure/data/architecture/security_data_azure.md",4650]};var s=n(4848);function c(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.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,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.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,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var l=n(6921),u=n(3102);function d(e,t){if("*"===e)return a()({loading:c,loader:()=>Promise.all([n.e(1869),n.e(2237)]).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[e+"-"+t],d={},p=[],f=[],m=(0,l.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:c,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 s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const c=a.__props;return delete a.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(o,{...a,...c,...n})})}})}const p=[{path:"/docs",component:d("/docs","c65"),routes:[{path:"/docs",component:d("/docs","ba1"),routes:[{path:"/docs",component:d("/docs","146"),routes:[{path:"/docs",component:d("/docs","d78"),exact:!0,sidebar:"docs"},{path:"/docs/assets",component:d("/docs/assets","716"),exact:!0},{path:"/docs/code_of_conduct",component:d("/docs/code_of_conduct","d02"),exact:!0,sidebar:"docs"},{path:"/docs/contributions",component:d("/docs/contributions","de6"),exact:!0,sidebar:"docs"},{path:"/docs/developer/developer_patterns_readme",component:d("/docs/developer/developer_patterns_readme","66d"),exact:!0,sidebar:"docs"},{path:"/docs/developer/java/patterns/java_app_layering",component:d("/docs/developer/java/patterns/java_app_layering","943"),exact:!0,sidebar:"docs"},{path:"/docs/developer/java/patterns/java_mapstruct_mapping",component:d("/docs/developer/java/patterns/java_mapstruct_mapping","266"),exact:!0,sidebar:"docs"},{path:"/docs/developer/java/patterns/java_swagger_annotations",component:d("/docs/developer/java/patterns/java_swagger_annotations","525"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started_dev",component:d("/docs/getting_started_dev","bf5"),exact:!0},{path:"/docs/getting_started/azure-container-app/azure-container-apps",component:d("/docs/getting_started/azure-container-app/azure-container-apps","dc3"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/azure-node/app-insights",component:d("/docs/getting_started/azure-node/app-insights","0d1"),exact:!0},{path:"/docs/getting_started/azure-node/app-insights-deployment",component:d("/docs/getting_started/azure-node/app-insights-deployment","b62"),exact:!0},{path:"/docs/getting_started/azure-node/ensono-stacks-azure-node",component:d("/docs/getting_started/azure-node/ensono-stacks-azure-node","e68"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/azure-react/ensono-stacks-azure-react",component:d("/docs/getting_started/azure-react/ensono-stacks-azure-react","c7f"),exact:!0},{path:"/docs/getting_started/azure-react/generator-app-insights-web",component:d("/docs/getting_started/azure-react/generator-app-insights-web","5ad"),exact:!0},{path:"/docs/getting_started/create-stacks-workspace/ensono-stacks-create-stacks-workspace",component:d("/docs/getting_started/create-stacks-workspace/ensono-stacks-create-stacks-workspace","cde"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/logger/ensono-stacks-logger",component:d("/docs/getting_started/logger/ensono-stacks-logger","dd7"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/logger/winston",component:d("/docs/getting_started/logger/winston","c09"),exact:!0},{path:"/docs/getting_started/next/ensono-stacks-next",component:d("/docs/getting_started/next/ensono-stacks-next","6e2"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/next/init",component:d("/docs/getting_started/next/init","e7e"),exact:!0},{path:"/docs/getting_started/next/next-auth",component:d("/docs/getting_started/next/next-auth","3fc"),exact:!0},{path:"/docs/getting_started/next/storybook",component:d("/docs/getting_started/next/storybook","226"),exact:!0},{path:"/docs/getting_started/playwright/accessibility",component:d("/docs/getting_started/playwright/accessibility","dac"),exact:!0},{path:"/docs/getting_started/playwright/ensono-stacks-playwright",component:d("/docs/getting_started/playwright/ensono-stacks-playwright","de7"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/playwright/executor",component:d("/docs/getting_started/playwright/executor","503"),exact:!0},{path:"/docs/getting_started/playwright/init",component:d("/docs/getting_started/playwright/init","08a"),exact:!0},{path:"/docs/getting_started/playwright/visual-regression",component:d("/docs/getting_started/playwright/visual-regression","087"),exact:!0},{path:"/docs/getting_started/plugin-name/ensono-stacks-[plugin-name]",component:d("/docs/getting_started/plugin-name/ensono-stacks-[plugin-name]","24a"),exact:!0},{path:"/docs/getting_started/plugin-name/executor-generator-template",component:d("/docs/getting_started/plugin-name/executor-generator-template","ccd"),exact:!0},{path:"/docs/getting_started/rest-client/bump-version",component:d("/docs/getting_started/rest-client/bump-version","c9d"),exact:!0},{path:"/docs/getting_started/rest-client/client-endpoint",component:d("/docs/getting_started/rest-client/client-endpoint","33f"),exact:!0},{path:"/docs/getting_started/rest-client/ensono-stacks-rest-client",component:d("/docs/getting_started/rest-client/ensono-stacks-rest-client","954"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/rest-client/http-client",component:d("/docs/getting_started/rest-client/http-client","088"),exact:!0},{path:"/docs/getting_started/rest-client/openapi-client",component:d("/docs/getting_started/rest-client/openapi-client","c1a"),exact:!0},{path:"/docs/getting_started/setup",component:d("/docs/getting_started/setup","529"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/workspace/ensono-stacks-workspace",component:d("/docs/getting_started/workspace/ensono-stacks-workspace","809"),exact:!0,sidebar:"docs"},{path:"/docs/getting_started/workspace/init",component:d("/docs/getting_started/workspace/init","caf"),exact:!0},{path:"/docs/glossary",component:d("/docs/glossary","12d"),exact:!0},{path:"/docs/infrastructure/aws/core_infrastructure_aws",component:d("/docs/infrastructure/aws/core_infrastructure_aws","cdf"),exact:!0,sidebar:"docs"},{path:"/docs/infrastructure/aws/pipelines/github_actions",component:d("/docs/infrastructure/aws/pipelines/github_actions","96b"),exact:!0,sidebar:"docs"},{path:"/docs/infrastructure/azure/core_infrastructure",component:d("/docs/infrastructure/azure/core_infrastructure","8b5"),exact:!0,sidebar:"docs"},{path:"/docs/infrastructure/azure/pipelines/azure_devops",component:d("/docs/infrastructure/azure/pipelines/azure_devops","094"),exact:!0,sidebar:"docs"},{path:"/docs/infrastructure/introduction",component:d("/docs/infrastructure/introduction","6ed"),exact:!0,sidebar:"docs"},{path:"/docs/linting/eslint",component:d("/docs/linting/eslint","fb7"),exact:!0,sidebar:"docs"},{path:"/docs/module_federation/nextjs_plugin",component:d("/docs/module_federation/nextjs_plugin","289"),exact:!0,sidebar:"docs"},{path:"/docs/nextjs/authentication",component:d("/docs/nextjs/authentication","cbe"),exact:!0,sidebar:"docs"},{path:"/docs/nextjs/infrastructure",component:d("/docs/nextjs/infrastructure","b5c"),exact:!0,sidebar:"docs"},{path:"/docs/nx/nx_stacks",component:d("/docs/nx/nx_stacks","1c9"),exact:!0,sidebar:"docs"},{path:"/docs/stackscli/about",component:d("/docs/stackscli/about","bbb"),exact:!0,sidebar:"docs"},{path:"/docs/stackscli/examples",component:d("/docs/stackscli/examples","587"),exact:!0},{path:"/docs/stackscli/project_settings",component:d("/docs/stackscli/project_settings","fe8"),exact:!0},{path:"/docs/stackscli/runtime_config",component:d("/docs/stackscli/runtime_config","3cb"),exact:!0},{path:"/docs/stackscli/troubleshooting",component:d("/docs/stackscli/troubleshooting","fc4"),exact:!0},{path:"/docs/stackscli/usage",component:d("/docs/stackscli/usage","011"),exact:!0},{path:"/docs/storybook/storybook_stacks",component:d("/docs/storybook/storybook_stacks","744"),exact:!0,sidebar:"docs"},{path:"/docs/testing/contract_testing_pact",component:d("/docs/testing/contract_testing_pact","7db"),exact:!0,sidebar:"docs"},{path:"/docs/testing/performance_testing_gatling",component:d("/docs/testing/performance_testing_gatling","742"),exact:!0,sidebar:"docs"},{path:"/docs/testing/testing_in_nx/frontend_testing_in_nx",component:d("/docs/testing/testing_in_nx/frontend_testing_in_nx","9ea"),exact:!0,sidebar:"docs"},{path:"/docs/testing/testing_in_nx/playwright_accessibility_testing",component:d("/docs/testing/testing_in_nx/playwright_accessibility_testing","eaf"),exact:!0,sidebar:"docs"},{path:"/docs/testing/testing_in_nx/playwright_visual_testing",component:d("/docs/testing/testing_in_nx/playwright_visual_testing","4a0"),exact:!0,sidebar:"docs"},{path:"/docs/testing/testing_in_nx/playwright_visual_testing_applitools_eyes",component:d("/docs/testing/testing_in_nx/playwright_visual_testing_applitools_eyes","6fd"),exact:!0,sidebar:"docs"},{path:"/docs/testing/testing_in_nx/testing_with_playwright",component:d("/docs/testing/testing_in_nx/testing_with_playwright","e1a"),exact:!0,sidebar:"docs"},{path:"/docs/testing/testing_overview",component:d("/docs/testing/testing_overview","b1a"),exact:!0,sidebar:"docs"},{path:"/docs/workloads",component:d("/docs/workloads","6e5"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/aws/backend/java/architecture/dependency_dynamodb_java",component:d("/docs/workloads/aws/backend/java/architecture/dependency_dynamodb_java","93f"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/aws/backend/java/architecture/dependency_sqs_java",component:d("/docs/workloads/aws/backend/java/architecture/dependency_sqs_java","d5e"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/aws/backend/java/define_aws_secrets_java",component:d("/docs/workloads/aws/backend/java/define_aws_secrets_java","827"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/aws/backend/java/setting_up_dynamodb_locally_java",component:d("/docs/workloads/aws/backend/java/setting_up_dynamodb_locally_java","335"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/aws/backend/java/setting_up_xray_daemon_locally_java",component:d("/docs/workloads/aws/backend/java/setting_up_xray_daemon_locally_java","3ca"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/architecture/dependency_cosmos_java",component:d("/docs/workloads/azure/backend/java/architecture/dependency_cosmos_java","8e9"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/architecture/dependency_servicebus_java",component:d("/docs/workloads/azure/backend/java/architecture/dependency_servicebus_java","fac"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/infrastructure_java",component:d("/docs/workloads/azure/backend/java/infrastructure_java","ee8"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/pipeline_java",component:d("/docs/workloads/azure/backend/java/pipeline_java","ce4"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/quickstart_java",component:d("/docs/workloads/azure/backend/java/quickstart_java","251"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/requirements_java",component:d("/docs/workloads/azure/backend/java/requirements_java","c48"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/setting_up_cosmos_db_locally_java",component:d("/docs/workloads/azure/backend/java/setting_up_cosmos_db_locally_java","589"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/testing/execute_serenity_api_tests",component:d("/docs/workloads/azure/backend/java/testing/execute_serenity_api_tests","a7f"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/java/testing/testing_java",component:d("/docs/workloads/azure/backend/java/testing/testing_java","f85"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/architecture_overview_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/architecture_overview_netcore","fb9"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/data_storage_cosmosdb_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/data_storage_cosmosdb_netcore","444"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/operations_events_exceptions_correlation_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/operations_events_exceptions_correlation_netcore","61d"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_cqrs",component:d("/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_cqrs","2c7"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_function_worker",component:d("/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_function_worker","653"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_simple_api",component:d("/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_simple_api","07e"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/repository_overview_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/repository_overview_netcore","c5f"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_netcore","431"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_ui_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_ui_netcore","436"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/architecture/testing/testing_scope_netcore",component:d("/docs/workloads/azure/backend/netcore/architecture/testing/testing_scope_netcore","052"),exact:!0},{path:"/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore",component:d("/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore","8ac"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/infrastructure_netcore",component:d("/docs/workloads/azure/backend/netcore/infrastructure_netcore","2c8"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/introduction_netcore",component:d("/docs/workloads/azure/backend/netcore/introduction_netcore","959"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/logging_netcore",component:d("/docs/workloads/azure/backend/netcore/logging_netcore","671"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/pipeline_gha_netcore",component:d("/docs/workloads/azure/backend/netcore/pipeline_gha_netcore","8e1"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/pipeline_netcore",component:d("/docs/workloads/azure/backend/netcore/pipeline_netcore","5b2"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore",component:d("/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore","64a"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore",component:d("/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore","025"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore",component:d("/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore","daf"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore",component:d("/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore","e2b"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore",component:d("/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore","df8"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/requirements_netcore",component:d("/docs/workloads/azure/backend/netcore/requirements_netcore","dc8"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/security_netcore",component:d("/docs/workloads/azure/backend/netcore/security_netcore","f9e"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/backend/netcore/testing/functional_testing_netcore",component:d("/docs/workloads/azure/backend/netcore/testing/functional_testing_netcore","add"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/architecture/architecture_data_azure",component:d("/docs/workloads/azure/data/architecture/architecture_data_azure","ae8"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/architecture/infrastructure_data_azure",component:d("/docs/workloads/azure/data/architecture/infrastructure_data_azure","429"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/architecture/security_data_azure",component:d("/docs/workloads/azure/data/architecture/security_data_azure","d2c"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/data_engineering_intro_azure",component:d("/docs/workloads/azure/data/data_engineering/data_engineering_intro_azure","963"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/data_processing",component:d("/docs/workloads/azure/data/data_engineering/data_processing","79d"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/data_quality_azure",component:d("/docs/workloads/azure/data/data_engineering/data_quality_azure","78c"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/datastacks",component:d("/docs/workloads/azure/data/data_engineering/datastacks","26b"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/ingest_data_azure",component:d("/docs/workloads/azure/data/data_engineering/ingest_data_azure","d46"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/stacks_data_utilities",component:d("/docs/workloads/azure/data/data_engineering/stacks_data_utilities","16e"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/data_engineering/testing_data_azure",component:d("/docs/workloads/azure/data/data_engineering/testing_data_azure","820"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started",component:d("/docs/workloads/azure/data/getting_started","637"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/core_data_platform_deployment_azure",component:d("/docs/workloads/azure/data/getting_started/core_data_platform_deployment_azure","3d0"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/dev_quickstart_data_azure",component:d("/docs/workloads/azure/data/getting_started/dev_quickstart_data_azure","723"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/example_data_source",component:d("/docs/workloads/azure/data/getting_started/example_data_source","e5e"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/fabric_deployment_guide",component:d("/docs/workloads/azure/data/getting_started/fabric_deployment_guide","a06"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/generate_project",component:d("/docs/workloads/azure/data/getting_started/generate_project","04a"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/ingest_pipeline_deployment_azure",component:d("/docs/workloads/azure/data/getting_started/ingest_pipeline_deployment_azure","961"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/processing_pipeline_deployment_azure",component:d("/docs/workloads/azure/data/getting_started/processing_pipeline_deployment_azure","840"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/requirements_data_azure",component:d("/docs/workloads/azure/data/getting_started/requirements_data_azure","317"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/getting_started/shared_resources_deployment_azure",component:d("/docs/workloads/azure/data/getting_started/shared_resources_deployment_azure","2b1"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/azure/data/intro_data_azure",component:d("/docs/workloads/azure/data/intro_data_azure","13a"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/dependency_api_java",component:d("/docs/workloads/common/backend/java/architecture/dependency_api_java","62a"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/dependency_commons_java",component:d("/docs/workloads/common/backend/java/architecture/dependency_commons_java","83f"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/dependency_cqrs_java",component:d("/docs/workloads/common/backend/java/architecture/dependency_cqrs_java","939"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/dependency_messaging_java",component:d("/docs/workloads/common/backend/java/architecture/dependency_messaging_java","323"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/dependency_parent_java",component:d("/docs/workloads/common/backend/java/architecture/dependency_parent_java","720"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/java_cqrs/architecture_java_cqrs",component:d("/docs/workloads/common/backend/java/architecture/java_cqrs/architecture_java_cqrs","9f9"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/java_cqrs/structure_java_cqrs",component:d("/docs/workloads/common/backend/java/architecture/java_cqrs/structure_java_cqrs","5cc"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/maven_modules_java",component:d("/docs/workloads/common/backend/java/architecture/maven_modules_java","94a"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/web_api/architecture_java",component:d("/docs/workloads/common/backend/java/architecture/web_api/architecture_java","6f9"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/architecture/web_api/structure_java",component:d("/docs/workloads/common/backend/java/architecture/web_api/structure_java","d70"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/ide_java",component:d("/docs/workloads/common/backend/java/ide_java","a09"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/intro_java",component:d("/docs/workloads/common/backend/java/intro_java","3ac"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/maven_spring_profiles",component:d("/docs/workloads/common/backend/java/maven_spring_profiles","71f"),exact:!0,sidebar:"docs"},{path:"/docs/workloads/common/backend/java/scaffolding_java",component:d("/docs/workloads/common/backend/java/scaffolding_java","b5a"),exact:!0,sidebar:"docs"}]}]}]},{path:"/",component:d("/","2e1"),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})}},7815:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(545),i=n(4625),s=n(4784),c=n(8193);const l=[n(7651),n(1911),n(119),n(6134),n(6294),n(1043)];var u=n(8328),d=n(6347),p=n(2831),f=n(4848);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var g=n(5260),h=n(4586),b=n(6025),y=n(6342),v=n(1003),_=n(2131),w=n(4090);const k="default";var S=n(440),x=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.A)(),r=(0,_.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(g.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},"meta-og-"+e.htmlLang)))]})}function j(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.Ks)((0,b.Ay)(r),{trailingSlash:n,baseUrl:t})}(),a=t?""+n+t:r;return(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function O(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:t,image:n}=(0,y.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(j,{}),(0,f.jsx)(E,{}),(0,f.jsx)(x.A,{tag:k,locale:e}),(0,f.jsx)(g.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const C=new Map;var A=n(6125),P=n(6988),T=n(205);function z(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{var r,a;const o=null!=(r=null==(a=t.default)?void 0:a[e])?r:t[e];return null==o?void 0:o(...n)}));return()=>a.forEach((e=>null==e?void 0:e()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,T.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);null==t||t.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),z("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class R extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=c.A.canUseDOM?z("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=z("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(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,f.jsx)(I,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const L=R,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__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 = '"+D+"';\n var bannerHtml = "+JSON.stringify(function(e){return'\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'

\n

We suggest trying baseUrl =

\n
\n'}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(L,{location:e,children:G})}function Y(){return(0,f.jsx)(H.A,{children:(0,f.jsx)(P.l,{children:(0,f.jsxs)(A.x,{children:[(0,f.jsxs)(m,{children:[(0,f.jsx)($,{}),(0,f.jsx)(O,{}),(0,f.jsx)(q,{}),(0,f.jsx)(K,{})]}),(0,f.jsx)(W,{})]})})})}var Q=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r,a;if("undefined"==typeof document)return void n();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),o.onload=()=>t(),o.onerror=()=>n();const i=null!=(r=document.getElementsByTagName("head")[0])?r:null==(a=document.getElementsByName("script")[0])?void 0:a.parentNode;null==i||i.appendChild(o)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(6921);const J=new Set,ee=new Set,te=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.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,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),N(e))},re=Object.freeze(ne);function ae(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const oe=Boolean(!0);if(c.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(o.vd,{children:(0,f.jsx)(ae,{children:(0,f.jsx)(Y,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(oe)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};N(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},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":"index","docs":[{"id":"assets/README","path":"/docs/assets/"},{"id":"code_of_conduct","path":"/docs/code_of_conduct","sidebar":"docs"},{"id":"contributions","path":"/docs/contributions","sidebar":"docs"},{"id":"developer/developer_patterns_readme","path":"/docs/developer/developer_patterns_readme","sidebar":"docs"},{"id":"developer/java/patterns/java_app_layering","path":"/docs/developer/java/patterns/java_app_layering","sidebar":"docs"},{"id":"developer/java/patterns/java_mapstruct_mapping","path":"/docs/developer/java/patterns/java_mapstruct_mapping","sidebar":"docs"},{"id":"developer/java/patterns/java_swagger_annotations","path":"/docs/developer/java/patterns/java_swagger_annotations","sidebar":"docs"},{"id":"getting_started_dev","path":"/docs/getting_started_dev"},{"id":"getting_started/azure-container-app/azure-container-apps","path":"/docs/getting_started/azure-container-app/azure-container-apps","sidebar":"docs"},{"id":"getting_started/azure-node/app-insights","path":"/docs/getting_started/azure-node/app-insights"},{"id":"getting_started/azure-node/app-insights-deployment","path":"/docs/getting_started/azure-node/app-insights-deployment"},{"id":"getting_started/azure-node/ensono-stacks-azure-node","path":"/docs/getting_started/azure-node/ensono-stacks-azure-node","sidebar":"docs"},{"id":"getting_started/azure-react/ensono-stacks-azure-react","path":"/docs/getting_started/azure-react/ensono-stacks-azure-react"},{"id":"getting_started/azure-react/generator-app-insights-web","path":"/docs/getting_started/azure-react/generator-app-insights-web"},{"id":"getting_started/create-stacks-workspace/ensono-stacks-create-stacks-workspace","path":"/docs/getting_started/create-stacks-workspace/ensono-stacks-create-stacks-workspace","sidebar":"docs"},{"id":"getting_started/logger/ensono-stacks-logger","path":"/docs/getting_started/logger/ensono-stacks-logger","sidebar":"docs"},{"id":"getting_started/logger/winston","path":"/docs/getting_started/logger/winston"},{"id":"getting_started/next/ensono-stacks-next","path":"/docs/getting_started/next/ensono-stacks-next","sidebar":"docs"},{"id":"getting_started/next/init","path":"/docs/getting_started/next/init"},{"id":"getting_started/next/next-auth","path":"/docs/getting_started/next/next-auth"},{"id":"getting_started/next/storybook","path":"/docs/getting_started/next/storybook"},{"id":"getting_started/playwright/accessibility","path":"/docs/getting_started/playwright/accessibility"},{"id":"getting_started/playwright/ensono-stacks-playwright","path":"/docs/getting_started/playwright/ensono-stacks-playwright","sidebar":"docs"},{"id":"getting_started/playwright/executor","path":"/docs/getting_started/playwright/executor"},{"id":"getting_started/playwright/init","path":"/docs/getting_started/playwright/init"},{"id":"getting_started/playwright/visual-regression","path":"/docs/getting_started/playwright/visual-regression"},{"id":"getting_started/plugin-name/ensono-stacks-[plugin-name]","path":"/docs/getting_started/plugin-name/ensono-stacks-[plugin-name]"},{"id":"getting_started/plugin-name/executor-generator-template","path":"/docs/getting_started/plugin-name/executor-generator-template"},{"id":"getting_started/rest-client/bump-version","path":"/docs/getting_started/rest-client/bump-version"},{"id":"getting_started/rest-client/client-endpoint","path":"/docs/getting_started/rest-client/client-endpoint"},{"id":"getting_started/rest-client/ensono-stacks-rest-client","path":"/docs/getting_started/rest-client/ensono-stacks-rest-client","sidebar":"docs"},{"id":"getting_started/rest-client/http-client","path":"/docs/getting_started/rest-client/http-client"},{"id":"getting_started/rest-client/openapi-client","path":"/docs/getting_started/rest-client/openapi-client"},{"id":"getting_started/setup","path":"/docs/getting_started/setup","sidebar":"docs"},{"id":"getting_started/workspace/ensono-stacks-workspace","path":"/docs/getting_started/workspace/ensono-stacks-workspace","sidebar":"docs"},{"id":"getting_started/workspace/init","path":"/docs/getting_started/workspace/init"},{"id":"glossary","path":"/docs/glossary"},{"id":"index","path":"/docs/","sidebar":"docs"},{"id":"infrastructure/aws/core_infrastructure_aws","path":"/docs/infrastructure/aws/core_infrastructure_aws","sidebar":"docs"},{"id":"infrastructure/aws/pipelines/github_actions","path":"/docs/infrastructure/aws/pipelines/github_actions","sidebar":"docs"},{"id":"infrastructure/azure/core_infrastructure","path":"/docs/infrastructure/azure/core_infrastructure","sidebar":"docs"},{"id":"infrastructure/azure/pipelines/azure_devops","path":"/docs/infrastructure/azure/pipelines/azure_devops","sidebar":"docs"},{"id":"infrastructure/introduction","path":"/docs/infrastructure/introduction","sidebar":"docs"},{"id":"linting/eslint","path":"/docs/linting/eslint","sidebar":"docs"},{"id":"module_federation/nextjs_plugin","path":"/docs/module_federation/nextjs_plugin","sidebar":"docs"},{"id":"nextjs/authentication","path":"/docs/nextjs/authentication","sidebar":"docs"},{"id":"nextjs/infrastructure","path":"/docs/nextjs/infrastructure","sidebar":"docs"},{"id":"nx/nx_stacks","path":"/docs/nx/nx_stacks","sidebar":"docs"},{"id":"stackscli/about","path":"/docs/stackscli/about","sidebar":"docs"},{"id":"stackscli/examples","path":"/docs/stackscli/examples"},{"id":"stackscli/project_settings","path":"/docs/stackscli/project_settings"},{"id":"stackscli/runtime_config","path":"/docs/stackscli/runtime_config"},{"id":"stackscli/troubleshooting","path":"/docs/stackscli/troubleshooting"},{"id":"stackscli/usage","path":"/docs/stackscli/usage"},{"id":"storybook/storybook_stacks","path":"/docs/storybook/storybook_stacks","sidebar":"docs"},{"id":"testing/contract_testing_pact","path":"/docs/testing/contract_testing_pact","sidebar":"docs"},{"id":"testing/performance_testing_gatling","path":"/docs/testing/performance_testing_gatling","sidebar":"docs"},{"id":"testing/testing_in_nx/frontend_testing_in_nx","path":"/docs/testing/testing_in_nx/frontend_testing_in_nx","sidebar":"docs"},{"id":"testing/testing_in_nx/playwright_accessibility_testing","path":"/docs/testing/testing_in_nx/playwright_accessibility_testing","sidebar":"docs"},{"id":"testing/testing_in_nx/playwright_visual_testing","path":"/docs/testing/testing_in_nx/playwright_visual_testing","sidebar":"docs"},{"id":"testing/testing_in_nx/playwright_visual_testing_applitools_eyes","path":"/docs/testing/testing_in_nx/playwright_visual_testing_applitools_eyes","sidebar":"docs"},{"id":"testing/testing_in_nx/testing_with_playwright","path":"/docs/testing/testing_in_nx/testing_with_playwright","sidebar":"docs"},{"id":"testing/testing_overview","path":"/docs/testing/testing_overview","sidebar":"docs"},{"id":"workloads/aws/backend/java/architecture/dependency_dynamodb_java","path":"/docs/workloads/aws/backend/java/architecture/dependency_dynamodb_java","sidebar":"docs"},{"id":"workloads/aws/backend/java/architecture/dependency_sqs_java","path":"/docs/workloads/aws/backend/java/architecture/dependency_sqs_java","sidebar":"docs"},{"id":"workloads/aws/backend/java/define_aws_secrets_java","path":"/docs/workloads/aws/backend/java/define_aws_secrets_java","sidebar":"docs"},{"id":"workloads/aws/backend/java/setting_up_dynamodb_locally_java","path":"/docs/workloads/aws/backend/java/setting_up_dynamodb_locally_java","sidebar":"docs"},{"id":"workloads/aws/backend/java/setting_up_xray_daemon_locally_java","path":"/docs/workloads/aws/backend/java/setting_up_xray_daemon_locally_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/architecture/dependency_cosmos_java","path":"/docs/workloads/azure/backend/java/architecture/dependency_cosmos_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/architecture/dependency_servicebus_java","path":"/docs/workloads/azure/backend/java/architecture/dependency_servicebus_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/infrastructure_java","path":"/docs/workloads/azure/backend/java/infrastructure_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/pipeline_java","path":"/docs/workloads/azure/backend/java/pipeline_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/quickstart_java","path":"/docs/workloads/azure/backend/java/quickstart_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/requirements_java","path":"/docs/workloads/azure/backend/java/requirements_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/setting_up_cosmos_db_locally_java","path":"/docs/workloads/azure/backend/java/setting_up_cosmos_db_locally_java","sidebar":"docs"},{"id":"workloads/azure/backend/java/testing/execute_serenity_api_tests","path":"/docs/workloads/azure/backend/java/testing/execute_serenity_api_tests","sidebar":"docs"},{"id":"workloads/azure/backend/java/testing/testing_java","path":"/docs/workloads/azure/backend/java/testing/testing_java","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/architecture_overview_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/architecture_overview_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/data_storage_cosmosdb_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/data_storage_cosmosdb_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/operations_events_exceptions_correlation_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/operations_events_exceptions_correlation_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_cqrs","path":"/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_cqrs","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_function_worker","path":"/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_function_worker","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_simple_api","path":"/docs/workloads/azure/backend/netcore/architecture/project_structure/project_structure_netcore_simple_api","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/repository_overview_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/repository_overview_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_ui_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/swagger_configuration/configure_swagger_ui_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/architecture/testing/testing_scope_netcore","path":"/docs/workloads/azure/backend/netcore/architecture/testing/testing_scope_netcore"},{"id":"workloads/azure/backend/netcore/infrastructure_aws_netcore","path":"/docs/workloads/azure/backend/netcore/infrastructure_aws_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/infrastructure_netcore","path":"/docs/workloads/azure/backend/netcore/infrastructure_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/introduction_netcore","path":"/docs/workloads/azure/backend/netcore/introduction_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/logging_netcore","path":"/docs/workloads/azure/backend/netcore/logging_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/pipeline_gha_netcore","path":"/docs/workloads/azure/backend/netcore/pipeline_gha_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/pipeline_netcore","path":"/docs/workloads/azure/backend/netcore/pipeline_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore","path":"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/build_and_run_project_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore","path":"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/configure_project_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore","path":"/docs/workloads/azure/backend/netcore/quickstart/web_api_cqrs/create_project_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore","path":"/docs/workloads/azure/backend/netcore/quickstart/web_api/build_and_run_project_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore","path":"/docs/workloads/azure/backend/netcore/quickstart/web_api/create_project_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/requirements_netcore","path":"/docs/workloads/azure/backend/netcore/requirements_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/security_netcore","path":"/docs/workloads/azure/backend/netcore/security_netcore","sidebar":"docs"},{"id":"workloads/azure/backend/netcore/testing/functional_testing_netcore","path":"/docs/workloads/azure/backend/netcore/testing/functional_testing_netcore","sidebar":"docs"},{"id":"workloads/azure/data/architecture/architecture_data_azure","path":"/docs/workloads/azure/data/architecture/architecture_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/architecture/infrastructure_data_azure","path":"/docs/workloads/azure/data/architecture/infrastructure_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/architecture/security_data_azure","path":"/docs/workloads/azure/data/architecture/security_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/data_engineering_intro_azure","path":"/docs/workloads/azure/data/data_engineering/data_engineering_intro_azure","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/data_processing","path":"/docs/workloads/azure/data/data_engineering/data_processing","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/data_quality_azure","path":"/docs/workloads/azure/data/data_engineering/data_quality_azure","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/datastacks","path":"/docs/workloads/azure/data/data_engineering/datastacks","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/ingest_data_azure","path":"/docs/workloads/azure/data/data_engineering/ingest_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/stacks_data_utilities","path":"/docs/workloads/azure/data/data_engineering/stacks_data_utilities","sidebar":"docs"},{"id":"workloads/azure/data/data_engineering/testing_data_azure","path":"/docs/workloads/azure/data/data_engineering/testing_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/core_data_platform_deployment_azure","path":"/docs/workloads/azure/data/getting_started/core_data_platform_deployment_azure","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/dev_quickstart_data_azure","path":"/docs/workloads/azure/data/getting_started/dev_quickstart_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/example_data_source","path":"/docs/workloads/azure/data/getting_started/example_data_source","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/fabric_deployment_guide","path":"/docs/workloads/azure/data/getting_started/fabric_deployment_guide","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/generate_project","path":"/docs/workloads/azure/data/getting_started/generate_project","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/getting_started","path":"/docs/workloads/azure/data/getting_started/","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/ingest_pipeline_deployment_azure","path":"/docs/workloads/azure/data/getting_started/ingest_pipeline_deployment_azure","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/processing_pipeline_deployment_azure","path":"/docs/workloads/azure/data/getting_started/processing_pipeline_deployment_azure","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/requirements_data_azure","path":"/docs/workloads/azure/data/getting_started/requirements_data_azure","sidebar":"docs"},{"id":"workloads/azure/data/getting_started/shared_resources_deployment_azure","path":"/docs/workloads/azure/data/getting_started/shared_resources_deployment_azure","sidebar":"docs"},{"id":"workloads/azure/data/intro_data_azure","path":"/docs/workloads/azure/data/intro_data_azure","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/dependency_api_java","path":"/docs/workloads/common/backend/java/architecture/dependency_api_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/dependency_commons_java","path":"/docs/workloads/common/backend/java/architecture/dependency_commons_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/dependency_cqrs_java","path":"/docs/workloads/common/backend/java/architecture/dependency_cqrs_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/dependency_messaging_java","path":"/docs/workloads/common/backend/java/architecture/dependency_messaging_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/dependency_parent_java","path":"/docs/workloads/common/backend/java/architecture/dependency_parent_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/java_cqrs/architecture_java_cqrs","path":"/docs/workloads/common/backend/java/architecture/java_cqrs/architecture_java_cqrs","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/java_cqrs/structure_java_cqrs","path":"/docs/workloads/common/backend/java/architecture/java_cqrs/structure_java_cqrs","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/maven_modules_java","path":"/docs/workloads/common/backend/java/architecture/maven_modules_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/web_api/architecture_java","path":"/docs/workloads/common/backend/java/architecture/web_api/architecture_java","sidebar":"docs"},{"id":"workloads/common/backend/java/architecture/web_api/structure_java","path":"/docs/workloads/common/backend/java/architecture/web_api/structure_java","sidebar":"docs"},{"id":"workloads/common/backend/java/ide_java","path":"/docs/workloads/common/backend/java/ide_java","sidebar":"docs"},{"id":"workloads/common/backend/java/intro_java","path":"/docs/workloads/common/backend/java/intro_java","sidebar":"docs"},{"id":"workloads/common/backend/java/maven_spring_profiles","path":"/docs/workloads/common/backend/java/maven_spring_profiles","sidebar":"docs"},{"id":"workloads/common/backend/java/scaffolding_java","path":"/docs/workloads/common/backend/java/scaffolding_java","sidebar":"docs"},{"id":"workloads/workloads","path":"/docs/workloads/","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/","label":"index"}}}}],"breadcrumbs":true}},"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-EKCQBC5CSJ"],"anonymizeIP":true,"id":"default"}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const c=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-google-analytics":{"type":"package","name":"@docusaurus/plugin-google-analytics","version":"3.5.2"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"}}}');var l=n(4848);const u={siteConfig:a.default,siteMetadata:c,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,l.jsx)(d.Provider,{value:u,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),a=n(8193),o=n(5260),i=n(440),s=n(1922),c=n(3102),l=n(4848);function u(e){let{error:t,tryAgain:n}=e;return(0,l.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,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,l.jsx)(c.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,l.jsx)(p,{children:(0,l.jsxs)(g,{fallback:()=>(0,l.jsx)(u,{error:t,tryAgain:n}),children:[(0,l.jsx)(o.A,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.A,{children:(0,l.jsx)(u,{error:t,tryAgain:n})})]})})}const m=e=>(0,l.jsx)(f,{...e});class g 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){var n;const e={error:t,tryAgain:()=>this.setState({error:null})};return(null!=(n=this.props.fallback)?n:m)(e)}return null!=e?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),s=n(6654),c=n(8193),l=n(3427),u=n(6025),d=n(4848);function p(e,t){var n,p,f;let{isNavLink:m,to:g,href:h,activeClassName:b,isActive:y,"data-noBrokenLinkCheck":v,autoAddBaseUrl:_=!0,...w}=e;const{siteConfig:k}=(0,i.A)(),{trailingSlash:S,baseUrl:x}=k,E=k.future.experimental_router,{withBaseUrl:j}=(0,u.hH)(),O=(0,l.A)(),C=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>C.current));const A=g||h;const P=(0,s.A)(A),T=null==A?void 0:A.replace("pathname://","");let z=void 0!==T?(I=T,_&&(e=>e.startsWith("/"))(I)?j(I):I):void 0;var I,N;"hash"===E&&null!=(n=z)&&n.startsWith("./")&&(z=null==(N=z)?void 0:N.slice(1));z&&P&&(z=(0,o.Ks)(z,{trailingSlash:S,baseUrl:x}));const R=(0,r.useRef)(!1),L=m?a.k2:a.N_,D=c.A.canUseIntersectionObserver,M=(0,r.useRef)(),F=()=>{R.current||null==z||(window.docusaurus.preload(z),R.current=!0)};(0,r.useEffect)((()=>(!D&&P&&c.A.canUseDOM&&null!=z&&window.docusaurus.prefetch(z),()=>{D&&M.current&&M.current.disconnect()})),[M,z,D,P]);const B=null!=(p=null==(f=z)?void 0:f.startsWith("#"))&&p,U=!w.target||"_self"===w.target,q=!z||!P||!U||B&&"hash"!==E;v||!B&&q||O.collectLink(z),w.id&&O.collectAnchor(w.id);const $={};return q?(0,d.jsx)("a",{ref:C,href:z,...A&&!P&&{target:"_blank",rel:"noopener noreferrer"},...w,...$}):(0,d.jsx)(L,{...w,onMouseEnter:F,onTouchStart:F,innerRef:e=>{C.current=e,D&&e&&P&&(M.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(M.current.unobserve(e),M.current.disconnect(),null!=z&&window.docusaurus.prefetch(z))}))})),M.current.observe(e))},to:z,...m&&{isActive:y,activeClassName:b},...$})}const f=r.forwardRef(p)},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>l,T:()=>c});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=null==t?void 0: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 s(e){var t,n;let{id:r,message:a}=e;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=i[null!=r?r:a])?n:a)?t:r}function c(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function l(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=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:e}=(0,a.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,o.z)(r))return r;if("hash"===s)return r.startsWith("/")?"."+r:"./"+r;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const c=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+c:c}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(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 s=a?a+"."+o:o;r(i)?e(i,s):t[s]=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),s=(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,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},3886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>h,g1:()=>y});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),s=n(679),c=n(9532),l=n(4848);const u=e=>"docs-preferred-version-"+e,d={save:(e,t,n)=>{(0,s.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.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){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(e){let{children:t}=e;return(0,l.jsx)(g,{children:t})}function b(){const e=(0,r.useContext)(f);if(!e)throw new c.dV("DocsPreferredVersionContextProvider");return e}function y(e){var t;void 0===e&&(e=o.W);const n=(0,a.ht)(e),[i,s]=b(),{preferredVersionName:c}=i[e];return{preferredVersion:null!=(t=n.versions.find((e=>e.name===c)))?t:null,savePreferredVersionName:(0,r.useCallback)((t=>{s.savePreferredVersion(e,t)}),[s,e])}}},609:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,t:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function c(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)(s.Provider,{value:i,children:t})}function l(){const e=(0,r.useContext)(s);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},6972:(e,t,n)=>{"use strict";n.d(t,{B5:()=>S,Nr:()=>p,OF:()=>v,QB:()=>k,Vd:()=>_,Y:()=>b,fW:()=>w,w8:()=>g});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),s=n(9169),c=n(1682),l=n(3886),u=n(3025),d=n(609);function p(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=p(t);if(e)return e}}(e):void 0:e.href}const f=(e,t)=>void 0!==e&&(0,s.ys)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function h(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>h(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function b(e,t){return(0,r.useMemo)((()=>e.filter((e=>h(e,t)))),[e,t])}function y(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,s.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,s.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function v(){var e;const t=(0,d.t)(),{pathname:n}=(0,a.zy)();return!1!==(null==(e=(0,i.vT)())?void 0:e.pluginData.breadcrumbs)&&t?y({sidebarItems:t.items,pathname:n}):null}function _(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,c.sb)([t,n,a].filter(Boolean))),[t,n,a])}function w(e,t){const n=_(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 k(e,t){const n=_(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- '+(0,c.sb)(t.map((e=>e.id))).join("\n- "))}return r}),[e,n])}function S(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,u.r)(),i=t.routes,s=i.find((e=>(0,a.B6)(n.pathname,e)));if(!s)return null;const c=s.sidebar,l=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.v)(i),sidebarName:c,sidebarItems:l}}},3025:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>c});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>u,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 s=e=>e.versions.find((e=>e.isLast));function c(e,t){const n=function(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=null==n?void 0: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 l={},u=()=>{var e;return null!=(e=i("docusaurus-plugin-content-docs"))?e:l},d=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+t+'".');return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":" (pluginId="+e),{cause:t})}};function p(e){void 0===e&&(e={});const t=u(),{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 s(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return c(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},7651:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||(window.ga("set","page",t.pathname+t.search+t.hash),window.ga("send","pageview"))}}},1911:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},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";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(647)("./prism-"+e)})),delete globalThis.Prism}(r.My)},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"})})}},1922:(e,t,n)=>{"use strict";n.d(t,{A:()=>to});var r=n(6540),a=n(4164),o=n(7489),i=n(1003),s=n(6347),c=n(1312),l=n(5062),u=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,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=null!=(n=document.querySelector("main:first-of-type"))?n:document.getElementById(d);var n;t&&p(t)}),[]);return(0,l.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.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){var t;const n=null!=(t=e.children)?t:m,{containerRef:r,onClick:a}=f();return(0,u.jsx)("div",{ref:r,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:"#"+d,onClick:a,children:n})})}var h=n(7559),b=n(4090);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:y.skipToContent})}var _=n(6342),w=n(5041);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function x(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,c.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,u.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function j(e){const{announcementBar:t}=(0,_.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const O={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,_.p)(),{isActive:t,close:n}=(0,w.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:O.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:O.announcementBarPlaceholder}),(0,u.jsx)(j,{className:O.announcementBarContent}),o&&(0,u.jsx)(x,{onClick:n,className:O.announcementBarClose})]})}var A=n(2069),P=n(3104);var T=n(9532),z=n(5600);const I=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,A.M)(),t=(0,z.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,T.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,u.jsx)(I.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function L(){const e=(0,r.useContext)(I);if(!e)throw new T.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,z.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:R(o)})),[a,o,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=L();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(5293),F=n(2303);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.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 U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.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 q={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function $(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,F.A)(),s=(0,c.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,c.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.A)(q.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.A)("clean-btn",q.toggleButton,!i&&q.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,a.A)(q.toggleIcon,q.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,a.A)(q.toggleIcon,q.darkToggleIcon)})]})})}const H=r.memo($),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,_.p)().navbar.style,r=(0,_.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.G)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var G=n(3465);function K(){return(0,u.jsx)(G.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,c.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,u.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(K,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(Y,{})]})}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:s,prependBaseUrlToHref:c,...l}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.A)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,m&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(Z.A,{href:c?f:a,...l,...g}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...l,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){var t;let{mobile:n=!1,position:r,...a}=e;const o=n?ae:re;return(0,u.jsx)(o,{...a,activeClassName:null!=(t=a.activeClassName)?t:n?"menu__link--active":"navbar__link--active"})}var ie=n(1422),se=n(9169),ce=n(4586);const le={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){var t;let{items:n,position:o,className:i,onClick:s,...c}=e;const l=(0,r.useRef)(null),[d,p]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&p(!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)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":d,role:"button",href:c.to?void 0:"#",className:(0,a.A)("navbar__link",i),...c,onClick:c.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),p(!d))},children:null!=(t=c.children)?t:c.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:n.map(((e,t)=>(0,r.createElement)(pa,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){var t;let{items:n,className:o,position:i,onClick:c,...l}=e;const d=function(){const{siteConfig:{baseUrl:e}}=(0,ce.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),p=ue(n,d),{collapsed:f,toggleCollapsed:m,setCollapsed:g}=(0,ie.u)({initialState:()=>!p});return(0,r.useEffect)((()=>{p&&g(!p)}),[d,p,g]),(0,u.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.A)(le.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",o),...l,onClick:e=>{e.preventDefault(),m()},children:null!=(t=l.children)?t:l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:n.map(((e,t)=>(0,r.createElement)(pa,{mobile:!0,isDropdownItem:!0,onClick:c,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(2131);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.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 be=n(961);function ye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ve(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Se(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(e){s=!0,a=e}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}}(e,t)||Ee(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xe(e){return function(e){if(Array.isArray(e))return je(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Ee(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ee(e,t){if(e){if("string"==typeof e)return je(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?je(e,t):void 0}}function je(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Ke(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ye(e){for(var t=1;t=3||2===n&&r>=4||1===n&&r>=10);function o(t,n,r){if(a&&void 0!==r){var o=r[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":o.appId,"X-Algolia-API-Key":o.apiKey};e.apply(void 0,[t].concat(Ve(n),[{headers:i}]))}else e.apply(void 0,[t].concat(Ve(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&o("clickedObjectIDsAfterSearch",Ze(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&o("clickedObjectIDs",Ze(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&o("convertedObjectIDsAfterSearch",Ze(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&o("convertedObjectIDs",Ze(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=Ge(t,$e);return[].concat(Ve(e),Ve(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function Je(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function et(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function tt(e){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tt(e)}function nt(e){return function(e){if(Array.isArray(e))return rt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return rt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?rt(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function rt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&ct({onItemsChange:r,items:n,insights:s,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;i("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:s}}),n((function(e){var t=e.item,n=e.state,r=e.event;et(t)&&a({state:n,event:r,insights:s,item:t,insightsEvents:[ot({eventName:"Item Selected"},Be({item:t,items:c.current}))]})})),r((function(e){var t=e.item,n=e.state,r=e.event;et(t)&&o({state:n,event:r,insights:s,item:t,insightsEvents:[ot({eventName:"Item Active"},Be({item:t,items:c.current}))]})}))},onStateChange:function(e){var t=e.state;l({state:t})},__autocomplete_pluginOptions:e}}function ut(e,t){var n=t;return{then:function(t,r){return ut(e.then(pt(t,n,e),pt(r,n,e)),n)},catch:function(t){return ut(e.catch(pt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),ut(e.finally(pt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function dt(e){return ut(e,{isCanceled:!1,onCancelList:[]})}function pt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function ft(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var a=(null===t?-1:t)+e;return a<=-1||a>=n?null===r?null:0:a}function mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gt(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:"autocomplete-".concat(Ne++),plugins:a,initialState:Pt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),a.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),a.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),a.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(function(e){return function(e){if(Array.isArray(e))return Ct(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Ct(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ct(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(a.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Me,onResolve:Me};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=gt(gt({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Ie(e)})).then((function(e){return e.map((function(e){return Pt(Pt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:Pt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function It(e){return It="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},It(e)}function Nt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Rt(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,Wt);Jt&&a.environment.clearTimeout(Jt);var l=c.setCollections,u=c.setIsOpen,d=c.setQuery,p=c.setActiveItemId,f=c.setStatus;if(d(o),p(a.defaultActiveItemId),!o&&!1===a.openOnFocus){var m,g=s.getState().collections.map((function(e){return Kt(Kt({},e),{},{items:[]})}));f("idle"),l(g),u(null!==(m=r.isOpen)&&void 0!==m?m:a.shouldPanelOpen({state:s.getState()}));var h=dt(en(g).then((function(){return Promise.resolve()})));return s.pendingRequests.add(h)}f("loading"),Jt=a.environment.setTimeout((function(){f("stalled")}),a.stallThreshold);var b=dt(en(a.getSources(Kt({query:o,refresh:i,state:s.getState()},c)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Kt({query:o,refresh:i,state:s.getState()},c))).then((function(t){return function(e,t,n){if(a=e,Boolean(null==a?void 0:a.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(Ut(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return Ft(Ft({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?Ft(Ft({},n),{},{params:Ft(Ft({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var a;return{items:e,sourceId:t}}(t,e.sourceId,s.getState())}))}))).then(Ht).then((function(t){return function(e,t,n){return t.map((function(t){var r,a=e.filter((function(e){return e.sourceId===t.sourceId})),o=a.map((function(e){return e.items})),i=a[0].transformResponse,s=i?i({results:r=o,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):o;return t.onResolve({source:t,results:o,items:s,state:n.getState()}),s.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:s}}))}(t,e,s)})).then((function(e){return function(e){var t=e.props,n=e.state,r=e.collections.reduce((function(e,t){return Rt(Rt({},e),{},Lt({},t.source.sourceId,Rt(Rt({},t.source),{},{getItems:function(){return Ie(t.items)}})))}),{}),a=t.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:r,state:n}).sourcesBySourceId;return Ie(t.reshape({sourcesBySourceId:a,sources:Object.values(a),state:n})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:a,state:s.getState()})}))})))).then((function(e){var n;f("idle"),l(e);var d=a.shouldPanelOpen({state:s.getState()});u(null!==(n=r.isOpen)&&void 0!==n?n:a.openOnFocus&&!o&&d||d);var p=yt(s.getState());if(null!==s.getState().activeItemId&&p){var m=p.item,g=p.itemInputValue,h=p.itemUrl,b=p.source;b.onActive(Kt({event:t,item:m,itemInputValue:g,itemUrl:h,refresh:i,source:b,state:s.getState()},c))}})).finally((function(){f("idle"),Jt&&a.environment.clearTimeout(Jt)}));return s.pendingRequests.add(b)}function nn(e){return nn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nn(e)}var rn=["event","props","refresh","store"];function an(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function on(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function _n(e){var t=e.props,n=e.refresh,r=e.store,a=vn(e,ln),o=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,a=e.formElement,o=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[a,o].some((function(t){return(n=t)===(r=e.target)||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return bn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},vn(e,un))},getRootProps:function(e){return bn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){return e.inputElement,bn({action:"",noValidate:!0,role:"search",onSubmit:function(o){var i;o.preventDefault(),t.onSubmit(bn({event:o,refresh:n,state:r.getState()},a)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(o){var i;o.preventDefault(),t.onReset(bn({event:o,refresh:n,state:r.getState()},a)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},vn(e,dn))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,a=vn(n,fn);return bn({htmlFor:"".concat(o(t.id,r),"-input"),id:"".concat(o(t.id,r),"-label")},a)},getInputProps:function(e){var o;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&tn(bn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},a)),r.dispatch("focus",null)}var s=e||{},c=(s.inputElement,s.maxLength),l=void 0===c?512:c,u=vn(s,pn),d=yt(r.getState()),p=function(e){return Boolean(e&&e.match(vt))}((null===(o=t.environment.navigator)||void 0===o?void 0:o.userAgent)||""),f=null!=d&&d.itemUrl&&!p?"go":"search";return bn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:f,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:l,type:"search",onChange:function(e){tn(bn({event:e,props:t,query:e.currentTarget.value.slice(0,l),refresh:n,store:r},a))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,a=e.store,o=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,rn);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(a.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},s=function(){var e=yt(a.getState());if(null!==a.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,c=e.source;c.onActive(on({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:c,state:a.getState()},o))}};t.preventDefault(),!1===a.getState().isOpen&&(n.openOnFocus||Boolean(a.getState().query))?tn(on({event:t,props:n,query:a.getState().query,refresh:r,store:a},o)).then((function(){a.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)})):(a.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),a.dispatch(t.key,null),a.pendingRequests.cancelAll();else if("Tab"===t.key)a.dispatch("blur",null),a.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===a.getState().activeItemId||a.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||a.pendingRequests.cancelAll());t.preventDefault();var c=yt(a.getState()),l=c.item,u=c.itemInputValue,d=c.itemUrl,p=c.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(on({event:t,item:l,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:a.getState()},o)),n.navigator.navigateNewTab({itemUrl:d,item:l,state:a.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(on({event:t,item:l,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:a.getState()},o)),n.navigator.navigateNewWindow({itemUrl:d,item:l,state:a.getState()}));else if(t.altKey);else{if(void 0!==d)return p.onSelect(on({event:t,item:l,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:a.getState()},o)),void n.navigator.navigate({itemUrl:d,item:l,state:a.getState()});tn(on({event:t,nextState:{isOpen:!1},props:n,query:u,refresh:r,store:a},o)).then((function(){p.onSelect(on({event:t,item:l,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:a.getState()},o))}))}}}(bn({event:e,props:t,refresh:n,store:r},a))},onFocus:i,onBlur:Me,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},u)},getPanelProps:function(e){return bn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,a=vn(n,mn);return bn({role:"listbox","aria-labelledby":"".concat(o(t.id,r),"-label"),id:"".concat(o(t.id,r),"-list")},a)},getItemProps:function(e){var i=e.item,s=e.source,c=e.sourceIndex,l=vn(e,gn);return bn({id:"".concat(o(t.id,c),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=yt(r.getState());if(null!==r.getState().activeItemId&&t){var o=t.item,s=t.itemInputValue,c=t.itemUrl,l=t.source;l.onActive(bn({event:e,item:o,itemInputValue:s,itemUrl:c,refresh:n,source:l,state:r.getState()},a))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var o=s.getItemInputValue({item:i,state:r.getState()}),c=s.getItemUrl({item:i,state:r.getState()});(c?Promise.resolve():tn(bn({event:e,nextState:{isOpen:!1},props:t,query:o,refresh:n,store:r},a))).then((function(){s.onSelect(bn({event:e,item:i,itemInputValue:o,itemUrl:c,refresh:n,source:s,state:r.getState()},a))}))}},l)}}}function wn(e){return wn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wn(e)}function kn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Sn(e){for(var t=1;t0&&r.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},r.createElement("p",{className:"DocSearch-Help"},c,":"),r.createElement("ul",null,f.slice(0,3).reduce((function(e,t){return[].concat(xe(e),[r.createElement("li",{key:t},r.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){a.setQuery(t.toLowerCase()+" "),a.refresh(),a.inputRef.current.focus()}},t))])}),[]))),a.getMissingResultsUrl&&r.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),r.createElement("a",{href:a.getMissingResultsUrl({query:a.state.query}),target:"_blank",rel:"noopener noreferrer"},p)))}var tr=["hit","attribute","tagName"];function nr(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function rr(e){var t=e.hit,n=e.attribute,a=e.tagName,o=void 0===a?"span":a,i=ke(e,tr);return(0,r.createElement)(o,ve(ve({},i),{},{dangerouslySetInnerHTML:{__html:nr(t,"_snippetResult.".concat(n,".value"))||nr(t,n)}}))}function ar(e){return e.collection&&0!==e.collection.items.length?r.createElement("section",{className:"DocSearch-Hits"},r.createElement("div",{className:"DocSearch-Hit-source"},e.title),r.createElement("ul",e.getListProps(),e.collection.items.map((function(t,n){return r.createElement(or,we({key:[e.title,t.objectID].join(":"),item:t,index:n},e))})))):null}function or(e){var t=e.item,n=e.index,a=e.renderIcon,o=e.renderAction,i=e.getItemProps,s=e.onItemClick,c=e.collection,l=e.hitComponent,u=Se(r.useState(!1),2),d=u[0],p=u[1],f=Se(r.useState(!1),2),m=f[0],g=f[1],h=r.useRef(null),b=l;return r.createElement("li",we({className:["DocSearch-Hit",t.__docsearch_parent&&"DocSearch-Hit--Child",d&&"DocSearch-Hit--deleting",m&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){h.current&&h.current()}},i({item:t,source:c.source,onClick:function(e){s(t,e)}})),r.createElement(b,{hit:t},r.createElement("div",{className:"DocSearch-Hit-Container"},a({item:t,index:n}),t.hierarchy[t.type]&&"lvl1"===t.type&&r.createElement("div",{className:"DocSearch-Hit-content-wrapper"},r.createElement(rr,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.lvl1"}),t.content&&r.createElement(rr,{className:"DocSearch-Hit-path",hit:t,attribute:"content"})),t.hierarchy[t.type]&&("lvl2"===t.type||"lvl3"===t.type||"lvl4"===t.type||"lvl5"===t.type||"lvl6"===t.type)&&r.createElement("div",{className:"DocSearch-Hit-content-wrapper"},r.createElement(rr,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.".concat(t.type)}),r.createElement(rr,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),"content"===t.type&&r.createElement("div",{className:"DocSearch-Hit-content-wrapper"},r.createElement(rr,{className:"DocSearch-Hit-title",hit:t,attribute:"content"}),r.createElement(rr,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),o({item:t,runDeleteTransition:function(e){p(!0),h.current=e},runFavoriteTransition:function(e){g(!0),h.current=e}}))))}function ir(e,t,n){return e.reduce((function(e,r){var a=t(r);return e.hasOwnProperty(a)||(e[a]=[]),e[a].length<(n||5)&&e[a].push(r),e}),{})}function sr(e){return e}function cr(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function lr(){}var ur=/(|<\/mark>)/g,dr=RegExp(ur.source);function pr(e){var t,n,r=e;if(!r.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var a=((r.__docsearch_parent?null===(t=r.__docsearch_parent)||void 0===t||null===(t=t._highlightResult)||void 0===t||null===(t=t.hierarchy)||void 0===t?void 0:t.lvl0:null===(n=e._highlightResult)||void 0===n||null===(n=n.hierarchy)||void 0===n?void 0:n.lvl0)||{}).value;return a&&dr.test(a)?a.replace(ur,""):a}function fr(e){return r.createElement("div",{className:"DocSearch-Dropdown-Container"},e.state.collections.map((function(t){if(0===t.items.length)return null;var n=pr(t.items[0]);return r.createElement(ar,we({},e,{key:t.source.sourceId,title:n,collection:t,renderIcon:function(e){var n,a=e.item,o=e.index;return r.createElement(r.Fragment,null,a.__docsearch_parent&&r.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},r.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},a.__docsearch_parent!==(null===(n=t.items[o+1])||void 0===n?void 0:n.__docsearch_parent)?r.createElement("path",{d:"M8 6v21M20 27H8.3"}):r.createElement("path",{d:"M8 6v42M20 27H8.3"}))),r.createElement("div",{className:"DocSearch-Hit-icon"},r.createElement(Wn,{type:a.type})))},renderAction:function(){return r.createElement("div",{className:"DocSearch-Hit-action"},r.createElement(Hn,null))}}))})),e.resultsFooterComponent&&r.createElement("section",{className:"DocSearch-HitsFooter"},r.createElement(e.resultsFooterComponent,{state:e.state})))}var mr=["translations"];function gr(e){var t=e.translations,n=void 0===t?{}:t,a=ke(e,mr),o=n.recentSearchesTitle,i=void 0===o?"Recent":o,s=n.noRecentSearchesText,c=void 0===s?"No recent searches":s,l=n.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,d=n.removeRecentSearchButtonTitle,p=void 0===d?"Remove this search from history":d,f=n.favoriteSearchesTitle,m=void 0===f?"Favorite":f,g=n.removeFavoriteSearchButtonTitle,h=void 0===g?"Remove this search from favorites":g;return"idle"===a.state.status&&!1===a.hasCollections?a.disableUserPersonalization?null:r.createElement("div",{className:"DocSearch-StartScreen"},r.createElement("p",{className:"DocSearch-Help"},c)):!1===a.hasCollections?null:r.createElement("div",{className:"DocSearch-Dropdown-Container"},r.createElement(ar,we({},a,{title:i,collection:a.state.collections[0],renderIcon:function(){return r.createElement("div",{className:"DocSearch-Hit-icon"},r.createElement(qn,null))},renderAction:function(e){var t=e.item,n=e.runFavoriteTransition,o=e.runDeleteTransition;return r.createElement(r.Fragment,null,r.createElement("div",{className:"DocSearch-Hit-action"},r.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),n((function(){a.favoriteSearches.add(t),a.recentSearches.remove(t),a.refresh()}))}},r.createElement(Yn,null))),r.createElement("div",{className:"DocSearch-Hit-action"},r.createElement("button",{className:"DocSearch-Hit-action-button",title:p,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){a.recentSearches.remove(t),a.refresh()}))}},r.createElement($n,null))))}})),r.createElement(ar,we({},a,{title:m,collection:a.state.collections[1],renderIcon:function(){return r.createElement("div",{className:"DocSearch-Hit-icon"},r.createElement(Yn,null))},renderAction:function(e){var t=e.item,n=e.runDeleteTransition;return r.createElement("div",{className:"DocSearch-Hit-action"},r.createElement("button",{className:"DocSearch-Hit-action-button",title:h,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),n((function(){a.favoriteSearches.remove(t),a.refresh()}))}},r.createElement($n,null)))}})))}var hr=["translations"],br=r.memo((function(e){var t=e.translations,n=void 0===t?{}:t,a=ke(e,hr);if("error"===a.state.status)return r.createElement(Xn,{translations:null==n?void 0:n.errorScreen});var o=a.state.collections.some((function(e){return e.items.length>0}));return a.state.query?!1===o?r.createElement(er,we({},a,{translations:null==n?void 0:n.noResultsScreen})):r.createElement(fr,a):r.createElement(gr,we({},a,{hasCollections:o,translations:null==n?void 0:n.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status})),yr=["translations"];function vr(e){var t=e.translations,n=void 0===t?{}:t,a=ke(e,yr),o=n.resetButtonTitle,i=void 0===o?"Clear the query":o,s=n.resetButtonAriaLabel,c=void 0===s?"Clear the query":s,l=n.cancelButtonText,u=void 0===l?"Cancel":l,d=n.cancelButtonAriaLabel,p=void 0===d?"Cancel":d,f=n.searchInputLabel,m=void 0===f?"Search":f,g=a.getFormProps({inputElement:a.inputRef.current}).onReset;return r.useEffect((function(){a.autoFocus&&a.inputRef.current&&a.inputRef.current.focus()}),[a.autoFocus,a.inputRef]),r.useEffect((function(){a.isFromSelection&&a.inputRef.current&&a.inputRef.current.select()}),[a.isFromSelection,a.inputRef]),r.createElement(r.Fragment,null,r.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:g},r.createElement("label",we({className:"DocSearch-MagnifierLabel"},a.getLabelProps()),r.createElement(Ce,null),r.createElement("span",{className:"DocSearch-VisuallyHiddenForAccessibility"},m)),r.createElement("div",{className:"DocSearch-LoadingIndicator"},r.createElement(Un,null)),r.createElement("input",we({className:"DocSearch-Input",ref:a.inputRef},a.getInputProps({inputElement:a.inputRef.current,autoFocus:a.autoFocus,maxLength:64}))),r.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!a.state.query},r.createElement($n,null))),r.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":p,onClick:a.onClose},u))}var _r=["_highlightResult","_snippetResult"];function wr(e){var t=e.key,n=e.limit,r=void 0===n?5:n,a=function(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(e){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}(t),o=a.getItem().slice(0,r);return{add:function(e){var t=e,n=(t._highlightResult,t._snippetResult,ke(t,_r)),i=o.findIndex((function(e){return e.objectID===n.objectID}));i>-1&&o.splice(i,1),o.unshift(n),o=o.slice(0,r),a.setItem(o)},remove:function(e){o=o.filter((function(t){return t.objectID!==e.objectID})),a.setItem(o)},getAll:function(){return o}}}function kr(e){const t=`algoliasearch-client-js-${e.key}`;let n;const r=()=>(void 0===n&&(n=e.localStorage||window.localStorage),n),a=()=>JSON.parse(r().getItem(t)||"{}"),o=e=>{r().setItem(t,JSON.stringify(e))};return{get:(t,n,r={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{(()=>{const t=e.timeToLive?1e3*e.timeToLive:null,n=a(),r=Object.fromEntries(Object.entries(n).filter((([,e])=>void 0!==e.timestamp)));if(o(r),!t)return;const i=Object.fromEntries(Object.entries(r).filter((([,e])=>{const n=(new Date).getTime();return!(e.timestamp+tPromise.all([e?e.value:n(),void 0!==e]))).then((([e,t])=>Promise.all([e,t||r.miss(e)]))).then((([e])=>e)),set:(e,n)=>Promise.resolve().then((()=>{const o=a();return o[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:n},r().setItem(t,JSON.stringify(o)),n})),delete:e=>Promise.resolve().then((()=>{const n=a();delete n[JSON.stringify(e)],r().setItem(t,JSON.stringify(n))})),clear:()=>Promise.resolve().then((()=>{r().removeItem(t)}))}}function Sr(e){const t=[...e.caches],n=t.shift();return void 0===n?{get:(e,t,n={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,n.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,r,a={miss:()=>Promise.resolve()})=>n.get(e,r,a).catch((()=>Sr({caches:t}).get(e,r,a))),set:(e,r)=>n.set(e,r).catch((()=>Sr({caches:t}).set(e,r))),delete:e=>n.delete(e).catch((()=>Sr({caches:t}).delete(e))),clear:()=>n.clear().catch((()=>Sr({caches:t}).clear()))}}function xr(e={serializable:!0}){let t={};return{get(n,r,a={miss:()=>Promise.resolve()}){const o=JSON.stringify(n);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);const i=r(),s=a&&a.miss||(()=>Promise.resolve());return i.then((e=>s(e))).then((()=>i))},set:(n,r)=>(t[JSON.stringify(n)]=e.serializable?JSON.stringify(r):r,Promise.resolve(r)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function Er(e){let t=e.length-1;for(;t>0;t--){const n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e}function jr(e,t){return t?(Object.keys(t).forEach((n=>{e[n]=t[n](e)})),e):e}function Or(e,...t){let n=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[n++])))}const Cr={WithinQueryParameters:0,WithinHeaders:1};function Ar(e,t){const n=e||{},r=n.data||{};return Object.keys(n).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(r[e]=n[e])})),{data:Object.entries(r).length>0?r:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}const Pr={Read:1,Write:2,Any:3},Tr=1,zr=3;function Ir(e,t=Tr){return{...e,status:t,lastUpdate:Date.now()}}function Nr(e){return"string"==typeof e?{protocol:"https",url:e,accept:Pr.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Pr.Any}}const Rr="GET",Lr="POST";function Dr(e,t,n,r){const a=[],o=function(e,t){if(e.method===Rr||void 0===e.data&&void 0===t.data)return;const n=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(n)}(n,r),i=function(e,t){const n={...e.headers,...t.headers},r={};return Object.keys(n).forEach((e=>{const t=n[e];r[e.toLowerCase()]=t})),r}(e,r),s=n.method,c=n.method!==Rr?{}:{...n.data,...r.data},l={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...c,...r.queryParameters};let u=0;const d=(t,c)=>{const p=t.pop();if(void 0===p)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Ur(a)};const f={data:o,headers:i,method:s,url:Fr(p,n.path,l),connectTimeout:c(u,e.timeouts.connect),responseTimeout:c(u,r.timeout)},m=e=>{const n={request:f,response:e,host:p,triesLeft:t.length};return a.push(n),n},g={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(n){const r=m(n);return n.isTimedOut&&u++,Promise.all([e.logger.info("Retryable failure",qr(r)),e.hostsCache.set(p,Ir(p,n.isTimedOut?zr:2))]).then((()=>d(t,c)))},onFail(e){throw m(e),function({content:e,status:t},n){let r=e;try{r=JSON.parse(e).message}catch(e){}return function(e,t,n){return{name:"ApiError",message:e,status:t,transporterStackTrace:n}}(r,t,n)}(e,Ur(a))}};return e.requester.send(f).then((e=>((e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&!~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e))(e,g)))};return function(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Ir(t))))))).then((e=>{const n=e.filter((e=>function(e){return e.status===Tr||Date.now()-e.lastUpdate>12e4}(e))),r=e.filter((e=>function(e){return e.status===zr&&Date.now()-e.lastUpdate<=12e4}(e))),a=[...n,...r];return{getTimeout:(e,t)=>(0===r.length&&0===e?1:r.length+3+e)*t,statelessHosts:a.length>0?a.map((e=>Nr(e))):t}}))}(e.hostsCache,t).then((e=>d([...e.statelessHosts].reverse(),e.getTimeout)))}function Mr(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const n=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(n)&&(t.value=`${t.value}${n}`),t}};return t}function Fr(e,t,n){const r=Br(n);let a=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return r.length&&(a+=`?${r}`),a}function Br(e){return Object.keys(e).map((t=>{return Or("%s=%s",t,(n=e[t],"[object Object]"===Object.prototype.toString.call(n)||"[object Array]"===Object.prototype.toString.call(n)?JSON.stringify(e[t]):e[t]));var n})).join("&")}function Ur(e){return e.map((e=>qr(e)))}function qr(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const $r=e=>{const t=e.appId,n=function(e,t,n){const r={"x-algolia-api-key":n,"x-algolia-application-id":t};return{headers:()=>e===Cr.WithinHeaders?r:{},queryParameters:()=>e===Cr.WithinQueryParameters?r:{}}}(void 0!==e.authMode?e.authMode:Cr.WithinHeaders,t,e.apiKey),r=function(e){const{hostsCache:t,logger:n,requester:r,requestsCache:a,responsesCache:o,timeouts:i,userAgent:s,hosts:c,queryParameters:l,headers:u}=e,d={hostsCache:t,logger:n,requester:r,requestsCache:a,responsesCache:o,timeouts:i,userAgent:s,headers:u,queryParameters:l,hosts:c.map((e=>Nr(e))),read(e,t){const n=Ar(t,d.timeouts.read),r=()=>Dr(d,d.hosts.filter((e=>!!(e.accept&Pr.Read))),e,n);if(!0!==(void 0!==n.cacheable?n.cacheable:e.cacheable))return r();const a={request:e,mappedRequestOptions:n,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(a,(()=>d.requestsCache.get(a,(()=>d.requestsCache.set(a,r()).then((e=>Promise.all([d.requestsCache.delete(a),e])),(e=>Promise.all([d.requestsCache.delete(a),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>d.responsesCache.set(a,e)})},write:(e,t)=>Dr(d,d.hosts.filter((e=>!!(e.accept&Pr.Write))),e,Ar(t,d.timeouts.write))};return d}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Pr.Read},{url:`${t}.algolia.net`,accept:Pr.Write}].concat(Er([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...n.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...n.queryParameters(),...e.queryParameters}}),a={transporter:r,appId:t,addAlgoliaAgent(e,t){r.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([r.requestsCache.clear(),r.responsesCache.clear()]).then((()=>{}))};return jr(a,e.methods)},Hr=e=>(t,n)=>t.method===Rr?e.transporter.read(t,n):e.transporter.write(t,n),Vr=e=>(t,n={})=>jr({transporter:e.transporter,appId:e.appId,indexName:t},n.methods),Wr=e=>(t,n)=>{const r=t.map((e=>({...e,params:Br(e.params||{})})));return e.transporter.read({method:Lr,path:"1/indexes/*/queries",data:{requests:r},cacheable:!0},n)},Gr=e=>(t,n)=>Promise.all(t.map((t=>{const{facetName:r,facetQuery:a,...o}=t.params;return Vr(e)(t.indexName,{methods:{searchForFacetValues:Qr}}).searchForFacetValues(r,a,{...n,...o})}))),Kr=e=>(t,n,r)=>e.transporter.read({method:Lr,path:Or("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:n},cacheable:!0},r),Yr=e=>(t,n)=>e.transporter.read({method:Lr,path:Or("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},n),Qr=e=>(t,n,r)=>e.transporter.read({method:Lr,path:Or("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:n},cacheable:!0},r),Zr=1,Xr=2,Jr=3;function ea(e,t,n){const r={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const n=new XMLHttpRequest;n.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>n.setRequestHeader(t,e.headers[t])));const r=(e,r)=>setTimeout((()=>{n.abort(),t({status:0,content:r,isTimedOut:!0})}),1e3*e),a=r(e.connectTimeout,"Connection timeout");let o;n.onreadystatechange=()=>{n.readyState>n.OPENED&&void 0===o&&(clearTimeout(a),o=r(e.responseTimeout,"Socket timeout"))},n.onerror=()=>{0===n.status&&(clearTimeout(a),clearTimeout(o),t({content:n.responseText||"Network request failed",status:n.status,isTimedOut:!1}))},n.onload=()=>{clearTimeout(a),clearTimeout(o),t({content:n.responseText,status:n.status,isTimedOut:!1})},n.send(e.data)}))},logger:(a=Jr,{debug:(e,t)=>(Zr>=a&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(Xr>=a&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:xr(),requestsCache:xr({serializable:!1}),hostsCache:Sr({caches:[kr({key:`4.19.1-${e}`}),xr()]}),userAgent:Mr("4.19.1").add({segment:"Browser",version:"lite"}),authMode:Cr.WithinQueryParameters};var a;return $r({...r,...n,methods:{search:Wr,searchForFacetValues:Gr,multipleQueries:Wr,multipleSearchForFacetValues:Gr,customRequest:Hr,initIndex:e=>t=>Vr(e)(t,{methods:{search:Yr,searchForFacetValues:Qr,findAnswers:Kr}})}})}ea.version="4.19.1";var ta=["footer","searchBox"];function na(e){var t=e.appId,n=e.apiKey,a=e.indexName,o=e.placeholder,i=void 0===o?"Search docs":o,s=e.searchParameters,c=e.maxResultsPerGroup,l=e.onClose,u=void 0===l?lr:l,d=e.transformItems,p=void 0===d?sr:d,f=e.hitComponent,m=void 0===f?Bn:f,g=e.resultsFooterComponent,h=void 0===g?function(){return null}:g,b=e.navigator,y=e.initialScrollY,v=void 0===y?0:y,_=e.transformSearchClient,w=void 0===_?sr:_,k=e.disableUserPersonalization,S=void 0!==k&&k,x=e.initialQuery,E=void 0===x?"":x,j=e.translations,O=void 0===j?{}:j,C=e.getMissingResultsUrl,A=e.insights,P=void 0!==A&&A,T=O.footer,z=O.searchBox,I=ke(O,ta),N=Se(r.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),R=N[0],L=N[1],D=r.useRef(null),M=r.useRef(null),F=r.useRef(null),B=r.useRef(null),U=r.useRef(null),q=r.useRef(10),$=r.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,64):"").current,H=r.useRef(E||$).current,V=function(e,t,n){return r.useMemo((function(){var r=ea(e,t);return r.addAlgoliaAgent("docsearch","3.6.1"),!1===/docsearch.js \(.*\)/.test(r.transporter.userAgent.value)&&r.addAlgoliaAgent("docsearch-react","3.6.1"),n(r)}),[e,t,n])}(t,n,w),W=r.useRef(wr({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(a),limit:10})).current,G=r.useRef(wr({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(a),limit:0===W.getAll().length?7:4})).current,K=r.useCallback((function(e){if(!S){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===W.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&G.add(t)}}),[W,G,S]),Y=r.useCallback((function(e){if(R.context.algoliaInsightsPlugin&&e.__autocomplete_id){var t=e,n={eventName:"Item Selected",index:t.__autocomplete_indexName,items:[t],positions:[e.__autocomplete_id],queryID:t.__autocomplete_queryID};R.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(n)}}),[R.context.algoliaInsightsPlugin]),Q=r.useMemo((function(){return Ln({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:H,context:{searchSuggestions:[]}},insights:P,navigator:b,onStateChange:function(e){L(e.state)},getSources:function(e){var r=e.query,o=e.state,i=e.setContext,l=e.setStatus;if(!r)return S?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,n=e.event;K(t),cr(n)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return G.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,n=e.event;K(t),cr(n)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return W.getAll()}}];var d=Boolean(P);return V.search([{query:r,indexName:a,params:ve({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(q.current),"hierarchy.lvl2:".concat(q.current),"hierarchy.lvl3:".concat(q.current),"hierarchy.lvl4:".concat(q.current),"hierarchy.lvl5:".concat(q.current),"hierarchy.lvl6:".concat(q.current),"content:".concat(q.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:d},s)}]).catch((function(e){throw"RetryError"===e.name&&l("error"),e})).then((function(e){var r=e.results[0],s=r.hits,l=r.nbHits,f=ir(s,(function(e){return pr(e)}),c);o.context.searchSuggestions.length0&&(J(),U.current&&U.current.focus())}),[H,J]),r.useEffect((function(){function e(){if(M.current){var e=.01*window.innerHeight;M.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),r.createElement("div",we({ref:D},X({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===R.status&&"DocSearch-Container--Stalled","error"===R.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&u()}}),r.createElement("div",{className:"DocSearch-Modal",ref:M},r.createElement("header",{className:"DocSearch-SearchBar",ref:F},r.createElement(vr,we({},Q,{state:R,autoFocus:0===H.length,inputRef:U,isFromSelection:Boolean(H)&&H===$,translations:z,onClose:u}))),r.createElement("div",{className:"DocSearch-Dropdown",ref:B},r.createElement(br,we({},Q,{indexName:a,state:R,hitComponent:m,resultsFooterComponent:h,disableUserPersonalization:S,recentSearches:G,favoriteSearches:W,inputRef:U,translations:I,getMissingResultsUrl:C,onItemClick:function(e,t){Y(e),K(e),cr(t)||u()}}))),r.createElement("footer",{className:"DocSearch-Footer"},r.createElement(Fn,{translations:T}))))}function ra(e){var t,n,a=r.useRef(null),o=Se(r.useState(!1),2),i=o[0],s=o[1],c=Se(r.useState((null==e?void 0:e.initialQuery)||void 0),2),l=c[0],u=c[1],d=r.useCallback((function(){s(!0)}),[s]),p=r.useCallback((function(){s(!1)}),[s]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:i,onOpen:d,onClose:p,onInput:r.useCallback((function(e){s(!0),u(e.key)}),[s,u]),searchButtonRef:a}),r.createElement(r.Fragment,null,r.createElement(Pe,{ref:a,translations:null==e||null===(t=e.translations)||void 0===t?void 0:t.button,onClick:d}),i&&(0,be.createPortal)(r.createElement(na,we({},e,{initialScrollY:window.scrollY,initialQuery:l,translations:null==e||null===(n=e.translations)||void 0===n?void 0:n.modal,onClose:p})),document.body))}function aa(){const{siteConfig:{customFields:{docSearch:{appId:e,apiKey:t,indexName:n}}}}=(0,ce.A)();return(0,u.jsx)(ra,{appId:e,indexName:n,apiKey:t})}const oa={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ia(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.A)(n,oa.navbarSearchContainer),children:t})}var sa=n(4070),ca=n(6972);var la=n(3886);function ua(e,t){var n;return null!=(n=t.alternateDocVersions[e.name])?n:function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const da={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:l,localeConfigs:d}}=(0,ce.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,s.zy)(),g=[...n,...l.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,c.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ia,{className:n,children:(0,u.jsx)(aa,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.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,sa.zK)(r),i=(0,ca.QB)(t,r),s=(null==o?void 0:o.path)===(null==i?void 0:i.path);return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!(null==o||!o.sidebar)&&o.sidebar===i.sidebar,label:null!=n?n:i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,sa.zK)(r),i=(0,ca.fW)(t,r).link;if(!i)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+t+"\" doesn't have anything to be linked to.");return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>(null==o?void 0:o.sidebar)===t,label:null!=n?n:i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ca.Vd)(r)[0],i=null!=t?t:o.label,s=null!=n?n:(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:l,hash:d}=(0,s.zy)(),p=(0,sa.zK)(n),f=(0,sa.jh)(n),{savePreferredVersionName:m}=(0,la.g1)(n),g=[...a,...f.map((function(e){const t=ua(e,p);return{label:e.label,to:""+t.path+l+d,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],h=(0,ca.Vd)(n)[0],b=t&&g.length>1?(0,c.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&g.length>1?void 0:ua(h,p).path;return g.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:g,isActive:r?()=>!1:void 0})}};function pa(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=da[r];if(!a)throw new Error('No NavbarItem component found for type "'+t+'".');return(0,u.jsx)(a,{...n})}function fa(){const e=(0,A.M)(),t=(0,_.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(pa,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function ma(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(c.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 ga(){const e=0===(0,_.p)().navbar.items.length,t=L();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(ma,{onClick:()=>t.hide()}),t.content]})}function ha(){const e=(0,A.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,u.jsx)(D,{header:(0,u.jsx)(Q,{}),primaryMenu:(0,u.jsx)(fa,{}),secondaryMenu:(0,u.jsx)(ga,{})}):null}const ba={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ya(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function va(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,_.p)(),i=(0,A.M)(),{navbarRef:s,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,P.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+l{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,u.jsxs)("nav",{ref:s,"aria-label":(0,c.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[ba.navbarHideable,!d&&ba.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(ya,{onClick:i.toggle}),(0,u.jsx)(ha,{})]})}class _a extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const wa="right";function ka(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Sa(){const{toggle:e,shown:t}=(0,A.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,c.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,u.jsx)(ka,{})})}const xa={colorModeToggle:"colorModeToggle_DEke"};function Ea(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(_a,{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,u.jsx)(pa,{...e})},t)))})}function ja(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Oa(){const e=(0,A.M)(),t=(0,_.p)().navbar.items,[n,r]=function(e){function t(e){var t;return"left"===(null!=(t=e.position)?t:wa)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(ja,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Sa,{}),(0,u.jsx)(K,{}),(0,u.jsx)(Ea,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ea,{items:r}),(0,u.jsx)(W,{className:xa.colorModeToggle}),!a&&(0,u.jsx)(ia,{children:(0,u.jsx)(aa,{})})]})})}function Ca(){return(0,u.jsx)(va,{children:(0,u.jsx)(Oa,{})})}function Aa(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Ay)(n),c=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?c:r}:{to:s},...i,children:[a,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function Pa(e){var t;let{item:n}=e;return n.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Aa,{item:n})},null!=(t=n.href)?t:n.to)}function Ta(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(Pa,{item:e},t)))})]})}function za(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Ta,{column:e},t)))})}function Ia(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Na(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Aa,{item:t})}function Ra(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Na,{item:e}),t.length!==n+1&&(0,u.jsx)(Ia,{})]},n)))})})}function La(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(za,{columns:t}):(0,u.jsx)(Ra,{links:t})}var Da=n(1122);const Ma={footerLogoLink:"footerLogoLink_BH7S"};function Fa(e){var t;let{logo:n}=e;const{withBaseUrl:r}=(0,X.hH)(),o={light:r(n.src),dark:r(null!=(t=n.srcDark)?t:n.src)};return(0,u.jsx)(Da.A,{className:(0,a.A)("footer__logo",n.className),alt:n.alt,sources:o,width:n.width,height:n.height,style:n.style})}function Ba(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:Ma.footerLogoLink,target:t.target,children:(0,u.jsx)(Fa,{logo:t})}):(0,u.jsx)(Fa,{logo:t})}function Ua(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function qa(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function $a(){const{footer:e}=(0,_.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(qa,{style:a,links:n&&n.length>0&&(0,u.jsx)(La,{links:n}),logo:r&&(0,u.jsx)(Ba,{logo:r}),copyright:t&&(0,u.jsx)(Ua,{copyright:t})})}const Ha=r.memo($a),Va={footer__legal:"footer__legal_UQWj"};function Wa(){return(0,u.jsxs)("div",{className:Va.footer__legal,children:[(0,u.jsx)("div",{children:(0,u.jsx)("img",{src:"/img/icons/ensono-logo.svg",alt:"Ensono logo"})}),(0,u.jsx)("div",{children:(0,u.jsxs)("span",{children:["Privacy Policy \xa9 ",(new Date).getFullYear()," Ensono, LLC. All rights reserved"]})}),(0,u.jsx)("div",{children:Ga.map(((e,t)=>{const{url:n,Component:r}=e;return(0,u.jsx)("a",{href:n,target:"_blank",children:(0,u.jsx)(r,{})},t)}))})]})}const Ga=[{Component:()=>(0,u.jsx)(Ka,{}),url:"https://www.linkedin.com/company/ensono"}],Ka=()=>(0,u.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[(0,u.jsx)("title",{children:"LinkedIn"}),(0,u.jsx)("path",{d:"M4.98 3.5c0 1.381-1.11 2.5-2.48 2.5s-2.48-1.119-2.48-2.5c0-1.38 1.11-2.5 2.48-2.5s2.48 1.12 2.48 2.5zm.02 4.5h-5v16h5v-16zm7.982 0h-4.968v16h4.969v-8.399c0-4.67 6.029-5.052 6.029 0v8.399h4.988v-10.131c0-7.88-8.922-7.593-11.018-3.714v-2.155z"})]});function Ya(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ha,{...e}),(0,u.jsx)(Wa,{})]})}const Qa=(0,T.fM)([M.a,w.o,P.Tv,la.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(z.y_,{children:(0,u.jsx)(A.e,{children:(0,u.jsx)(N,{children:t})})})}]);function Za(e){let{children:t}=e;return(0,u.jsx)(Qa,{children:t})}function Xa(e){let{children:t,fallback:n}=e;return(0,F.A)()?(0,u.jsx)(u.Fragment,{children:null==t?void 0:t()}):null!=n?n:null}const Ja=function(){return(0,u.jsxs)(to,{title:"Page Not Found",children:[(0,u.jsx)(Xa,{fallback:(0,u.jsx)("div",{children:"Loading..."}),children:(0,u.jsx)("script",{children:r.useEffect((()=>{window.onload=()=>{var e;const t=window.location.pathname.split("/");t.length>2&&null!=(e=t[1])&&e.includes("stacks")&&(window.location.pathname="/"+t.slice(2,t.length).join("/"))}}))})}),(0,u.jsx)("div",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)("h1",{className:"hero__title",children:"Page Not Found"}),(0,u.jsx)("p",{children:"We could not find what you were looking for."}),(0,u.jsx)("p",{children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})]})})})]})},eo={mainWrapper:"mainWrapper_z2l0"};function to(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:c}=e;return(0,b.J)(),(0,u.jsxs)(Za,{children:[(0,u.jsx)(i.be,{title:s,description:c}),(0,u.jsx)(v,{}),(0,u.jsx)(C,{}),(0,u.jsx)(Ca,{}),(0,u.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,eo.mainWrapper,r),children:(0,u.jsx)(o.A,{fallback:e=>(0,u.jsx)(Ja,{...e}),children:t})}),!n&&(0,u.jsx)(Ya,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),s=n(1122),c=n(4848);function l(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Ay)(t.src),dark:(0,a.Ay)(t.srcDark||t.src)},i=(0,c.jsx)(s.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,c.jsx)("div",{className:r,children:i}):i}function u(e){var t;const{siteConfig:{title:n}}=(0,o.A)(),{navbar:{title:s,logo:u}}=(0,i.p)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,a.Ay)((null==u?void 0:u.href)||"/"),g=s?"":n,h=null!=(t=null==u?void 0:u.alt)?t:g;return(0,c.jsxs)(r.A,{to:m,...f,...(null==u?void 0:u.target)&&{target:u.target},children:[u&&(0,c.jsx)(l,{logo:u,alt:h,imageClassName:d}),null!=s&&(0,c.jsx)("b",{className:p,children:s})]})}},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:()=>u});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var c=n(4848);function l(e){let{className:t,children:n}=e;const l=(0,o.A)(),{colorMode:u}=(0,i.G)();return(0,c.jsx)(c.Fragment,{children:(l?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,s.themedComponent,s["themedComponent--"+e])});return(0,c.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,c.jsx)(l,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,c.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>b,u:()=>l});var r=n(6540),a=n(8193),o=n(205),i=n(3109),s=n(4848);const c="ease-in-out";function l(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(null!=t&&t),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u: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(){var t,n;const r=e.scrollHeight,o=null!=(t=null==a?void 0:a.duration)?t:function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(r);return{transition:"height "+o+"ms "+(null!=(n=null==a?void 0:a.easing)?n:c),height:r+"px"}}function s(){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?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function m(e){if(!a.A.canUseDOM)return e?u:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:c,disableSSRStyle:l}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:l?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),null==i||i(n))},className:c,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[c,l]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&l(t)}),[a,t]),a?(0,s.jsx)(g,{...n,collapsed:c}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,s.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>g,o:()=>m});var r=n(6540),a=n(2303),o=n(679),i=n(9532),s=n(6342),c=n(4848);const l=(0,o.Wf)("docusaurus.announcement.dismiss"),u=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===l.get(),p=e=>l.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.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=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,c.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:()=>b,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(679),s=n(6342),c=n(4848);const l=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),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,s.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!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const c=(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||c.current?c.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,c.jsx)(l.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(l);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2069:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(6540),a=n(5600),o=n(4581),i=n(7485),s=n(6342),c=n(9532),l=n(4848);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[c,l]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(c)return l(!1),!1}));const u=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:c})),[e,n,u,c])}function p(e){let{children:t}=e;const n=d();return(0,l.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new c.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>l,YL:()=>c,y_:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(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 c(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,s]=o,c=(0,a.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:c})}),[s,t,c]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),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:()=>s});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(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",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-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",draftBanner:"theme-draft-banner",admonitionType:e=>"theme-admonition-"+e},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>"theme-doc-sidebar-item-category-level-"+e,docSidebarItemLinkLevel:e=>"theme-doc-sidebar-item-link-level-"+e},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},7485:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,aZ:()=>c});var r=n(6540),a=n(6347),o=n(9532);function i(e){!function(e){const t=(0,a.W6)(),n=(0,o._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,a.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function c(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},1682:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{XI:()=>r,sb:()=>a})},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 s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=n(6025),l=n(4586);var u=n(4848);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=function(e){const{siteConfig:t}=(0,l.A)(),{title:n,titleDelimiter:r}=t;return null!=e&&e.trim().length?e.trim()+" "+r+" "+n:n}(t),{withBaseUrl:d}=(0,c.hH)(),p=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.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),s=(0,a.A)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function m(e){let{children:t}=e;const n=s(),r="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"");const o="plugin-id-"+n.plugin.id;return(0,u.jsx)(f,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>l,ZC:()=>s,_q:()=>i,dV:()=>c,fM:()=>u});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 s(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class c extends Error{constructor(e,t){var n,r;super(),this.name="ReactContextError",this.message="Hook "+(null!=(n=null==(r=this.stack)||null==(r=r.split("\n")[1])||null==(r=r.match(/at (?:\w+\.)?(?\w+)/))?void 0:r.groups.name)?n:"")+" is called outside the <"+e+">. "+(null!=t?t:"")}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(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:()=>s,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function s(){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=>{var t;return null!=(t=e.routes)?t:[]})))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>u,a_:()=>m,gk:()=>g});var r=n(6540),a=n(8193),o=n(2303),i=n(205),s=n(9532),c=n(4848);const l=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,c.jsx)(l.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(l);if(null==e)throw new s.dV("ScrollControllerProvider");return e}const p=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(p()),o=(0,s._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();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 m(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>null==n.current?void 0:n.current()))})),{blockElementScrollPositionUntilNextRender:a}}function g(){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:()=>null==e.current?void 0:e.current()}}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>u,Dv:()=>d});var r=n(6540);const a=JSON.parse('{"N":"localStorage","M":""}'),o=a.N;function i(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 s(e){if(void 0===e&&(e=o),"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,c||(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),c=!0),null}var t}let c=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=""+e+a.M;if("undefined"==typeof window)return function(e){function t(){throw new Error('Illegal storage API usage for storage key "'+e+'".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.')}return{get:t,set:t,del:t,listen:t}}(n);const r=s(null==t?void 0:t.persistence);return null===r?l:{get:()=>{try{return r.getItem(n)}catch(e){return console.error("Docusaurus storage error, can't get key="+n,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error("Docusaurus storage error, can't set "+n+"="+e,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error("Docusaurus storage error, can't delete key="+n,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error("Docusaurus storage error, can't listen for changes of key="+n,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?l:u(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},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:s}}=(0,r.A)(),{pathname:c}=(0,a.zy)(),l=(0,o.Ks)(c,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace("/"+s+"/","/"),d=l.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return""+(r?t:"")+function(e){return e===i?""+u:""+u+e+"/"}(n)+d}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(c=i,l=n,l?a(c):o(c));var c,l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o;const r=n(2566);function a(e){return e.endsWith("/")?e:e+"/"}function o(e){return(0,r.removeSuffix)(e,"/")}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(1635);var a=n(2983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(a).default}});var o=n(2566);var i=n(253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:""+t+e},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:""+e+t},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>_,TM:()=>j,yJ:()=>f,sC:()=>C,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(!l)for(;d--;d)i.unshift("..");!l||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(1561);function c(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function u(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(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}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(),_.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(_.entries[_.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=_.index+e;return t>=0&&t<_.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return _}},4146:(e,t,n)=>{"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},s={};function c(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var l=Object.defineProperty,u=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=u(n);d&&(i=i.concat(d(n)));for(var s=c(t),g=c(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,a,o,i,s],u=0;(c=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},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),l=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),c(l,i(e,u,d)),1===e?(c(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){c(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),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");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),l=document.querySelector(r.parent);return c(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),l!=document.body&&u(l,"nprogress-custom-parent"),l.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 s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),c=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 l(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;l(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);l(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=m,e.exports.parse=o,e.exports.compile=function(e,t){return c(o(e,t),t)},e.exports.tokensToFunction=c,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,s=0,c="",l=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(c+=e.slice(s,f),s=f+d.length,p)c+=p[1];else{var m=e[s],g=n[2],h=n[3],b=n[4],y=n[5],v=n[6],_=n[7];c&&(r.push(c),c="");var w=null!=g&&null!=m&&m!==g,k="+"===v||"*"===v,S="?"===v||"*"===v,x=g||l,E=b||y,j=g||("string"==typeof r[r.length-1]?r[r.length-1]:"");r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:k,partial:w,asterisk:!!_,pattern:E?u(E):_?".*":i(x,j)})}}return s-1?"[^"+l(e)+"]+?":l(t)+"|(?:(?!"+l(t)+")[^"+l(e)+"])+?"}function s(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function c(e,t){for(var n=new Array(e.length),a=0;a{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",s="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function c(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var l=c(o),u=RegExp(c(a+" "+o+" "+i+" "+s)),d=c(o+" "+i+" "+s),p=c(a+" "+o+" "+s),f=r(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),m=r(/\((?:[^()]|<>)*\)/.source,2),g=/@?\b[A-Za-z_]\w*\b/.source,h=t(/<<0>>(?:\s*<<1>>)?/.source,[g,f]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,h]),y=/\[\s*(?:,\s*)*\]/.source,v=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,y]),_=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,m,y]),w=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[_]),k=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[w,b,y]),S={keyword:u,punctuation:/[<>()?,.:[\]]/},x=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,E=/"(?:\\.|[^\\"\r\n])*"/.source,j=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[j]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[E]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[g,k]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[g]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[l,h]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[g]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[v]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[k,p,g]),inside:S}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[g]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[g]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[k,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[k]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[g,f]),inside:{function:n(/^<<0>>/.source,[g]),generic:{pattern:RegExp(f),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[l,h,g,k,u.source,m,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[h,m]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:u,"class-name":{pattern:RegExp(k),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var O=E+"|"+x,C=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[O]),A=r(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[C]),2),P=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,T=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,A]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[P,T]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[P]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[A]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var z=/:[^}\r\n]+/.source,I=r(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[C]),2),N=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[I,z]),R=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[O]),2),L=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[R,z]);function D(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,z]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:D(N,I)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[L]),lookbehind:!0,greedy:!0,inside:D(L,R)}],char:{pattern:RegExp(x),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},568:()=>{!function(e){var t=/\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source,n=/(?:[ \t]+(?![ \t])(?:)?|)/.source.replace(//g,(function(){return t})),r=/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source,a=/--[\w-]+=(?:|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(//g,(function(){return r})),o={pattern:RegExp(r),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function s(e,t){return e=e.replace(//g,(function(){return a})).replace(//g,(function(){return n})),RegExp(e,t)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:s(/(^(?:ONBUILD)?\w+)(?:)*/.source,"i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:s(/(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\b/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\]+)AS/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^ONBUILD)\w+/.source,"i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:o,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism)},6976:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},2514:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},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,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=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(s){for(var c=0;c=o.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof l?l:l.content,f=t(r,u),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),b=p.substring(m+f.length),y=[];g&&y.push.apply(y,i([g])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof l?s.splice.apply(s,[c,1].concat(y)):l.content=y}}else l.content&&i(l.content)}return s}(n.tokens)}}}})}(Prism)},905:()=>{!function(e){var t=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};t.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:t},boolean:t.boolean,variable:t.variable}}(Prism)},647:(e,t,n)=>{var r={"./prism-bash":7022,"./prism-csharp":5651,"./prism-docker":568,"./prism-java":6976,"./prism-json":2514,"./prism-powershell":905};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=647},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 s=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 s.name="Invariant Violation",s}}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