diff --git a/404.html b/404.html index 8ed342c9df..d59a6d6309 100644 --- a/404.html +++ b/404.html @@ -6,8 +6,8 @@ Page Not Found | Estuary Flow - - + + @@ -15,7 +15,7 @@
Skip to main content

Page Not Found

We could not find what you were looking for.

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

- - + + \ No newline at end of file diff --git a/assets/js/6d42ac36.2e1e83e4.js b/assets/js/6d42ac36.2e1e83e4.js deleted file mode 100644 index 735eee07c6..0000000000 --- a/assets/js/6d42ac36.2e1e83e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4744],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var l=n.createContext({}),p=function(t){var e=n.useContext(l),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=p(t.components);return n.createElement(l.Provider,{value:e},t.children)},c="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,u=s(t,["components","mdxType","originalType","parentName"]),c=p(a),d=r,h=c["".concat(l,".").concat(d)]||c[d]||m[d]||o;return a?n.createElement(h,i(i({ref:e},u),{},{components:a})):n.createElement(h,i({ref:e},u))}));function h(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=d;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[c]="string"==typeof t?t:r,i[1]=s;for(var p=2;p{a.r(e),a.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:1},i="GitHub",s={unversionedId:"reference/Connectors/capture-connectors/github",id:"reference/Connectors/capture-connectors/github",title:"GitHub",description:"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API.",source:"@site/docs/reference/Connectors/capture-connectors/github.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/github",permalink:"/reference/Connectors/capture-connectors/github",draft:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/github.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Freshdesk",permalink:"/reference/Connectors/capture-connectors/freshdesk"},next:{title:"Google Ads",permalink:"/reference/Connectors/capture-connectors/google-ads"}},l={},p=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with GitHub in the Flow web app",id:"using-oauth2-to-authenticate-with-github-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually using personal access token",id:"configuring-the-connector-specification-manually-using-personal-access-token",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}],u={toc:p},c="wrapper";function m(t){let{components:e,...a}=t;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"github"},"GitHub"),(0,r.kt)("p",null,"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API."),(0,r.kt)("p",null,"It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.kt)("a",{parentName:"p",href:"https://ghcr.io/estuary/source-github:dev"},(0,r.kt)("inlineCode",{parentName:"a"},"ghcr.io/estuary/source-github:dev"))," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."),(0,r.kt)("p",null,"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.kt)("a",{parentName:"p",href:"https://docs.airbyte.com/integrations/sources/github/"},"here"),",\nbut keep in mind that the two versions may be significantly different."),(0,r.kt)("h2",{id:"supported-data-resources"},"Supported data resources"),(0,r.kt)("p",null,"When you ",(0,r.kt)("a",{parentName:"p",href:"#endpoint"},"configure the connector"),", you specify a list of GitHub organizations and/or repositories\nfrom which to capture data."),(0,r.kt)("p",null,"From your selection, the following data resources are captured:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Full refresh (batch) resources"),(0,r.kt)("th",{parentName:"tr",align:null},"Incremental (real-time supported) resources"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/assignees#list-assignees"},"Assignees")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/comments#list-issue-comments-for-a-repository"},"Comments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/branches/branches#list-branches"},"Branches")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-a-commit-comment"},"Commit comment reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/collaborators/collaborators#list-repository-collaborators"},"Collaborators")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/commits/comments#list-commit-comments-for-a-repository"},"Commit comments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/labels#list-labels-for-a-repository"},"Issue labels")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/commits/commits#list-commits"},"Commits"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/pulls#list-commits-on-a-pull-request"},"Pull request commits")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/deployments#list-deployments"},"Deployments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/repos/repos#list-repository-tags"},"Tags")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/activity/events#list-repository-events"},"Events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/teams/members#list-team-members"},"Team members")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue-comment"},"Issue comment reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/teams/members#get-team-membership-for-a-user"},"Team memberships")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues#list-issue-events-for-a-repository"},"Issue events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/teams#list-teams"},"Teams")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues#list-milestones"},"Issue milestones"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/orgs/members#list-organization-members"},"Users")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue"},"Issue reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/issues#list-repository-issues"},"Issues"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/projects/cards#list-project-cards"},"Project cards"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/projects#list-project-columns"},"Project columns"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/projects/projects#list-repository-projects"},"Projects"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-a-pull-request-review-comment"},"Pull request comment reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request"},"Pull request stats"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/pulls#list-pull-requests"},"Pull requests"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/releases/releases#list-releases"},"Releases"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/repos/repos#list-organization-repositories"},"Repositories"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/comments#list-review-comments-in-a-repository"},"Review comments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/reviews#list-reviews-for-a-pull-request"},"Reviews"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/activity/starring#list-stargazers"},"Stargazers"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository"},"Workflow runs"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/actions/workflows#list-repository-workflows"},"Workflows"))))),(0,r.kt)("p",null,"Each resource is mapped to a Flow collection through a separate binding."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"/start_date")," ",(0,r.kt)("a",{parentName:"p",href:"#endpoint"},"field")," is not applicable to the following resources:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Assignees"),(0,r.kt)("li",{parentName:"ul"},"Branches"),(0,r.kt)("li",{parentName:"ul"},"Collaborators"),(0,r.kt)("li",{parentName:"ul"},"Issue labels"),(0,r.kt)("li",{parentName:"ul"},"Organizations"),(0,r.kt)("li",{parentName:"ul"},"Pull request commits"),(0,r.kt)("li",{parentName:"ul"},"Pull request stats"),(0,r.kt)("li",{parentName:"ul"},"Repositories"),(0,r.kt)("li",{parentName:"ul"},"Tags"),(0,r.kt)("li",{parentName:"ul"},"Teams"),(0,r.kt)("li",{parentName:"ul"},"Users"))),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"There are two ways to authenticate with GitHub when capturing data into Flow: using OAuth2, and manually, by generating a personal access token.\nTheir prerequisites differ."),(0,r.kt)("p",null,"OAuth is recommended for simplicity in the Flow web app;\nthe access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization."),(0,r.kt)("h3",{id:"using-oauth2-to-authenticate-with-github-in-the-flow-web-app"},"Using OAuth2 to authenticate with GitHub in the Flow web app"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'User may need to request access in Github under the user\'s personal settings (not the organization settings) by going to Applications then Authorized OAuth Apps on Github. Click the app or the image next to the app and request access under "Organization access". After a user has made the request, the organization administrator can grant access on the "Third-party application access policy" page. See additional details on this ',(0,r.kt)("a",{parentName:"p",href:"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/requesting-organization-approval-for-oauth-apps"},"Github doc"),"."))),(0,r.kt)("h3",{id:"configuring-the-connector-specification-manually-using-personal-access-token"},"Configuring the connector specification manually using personal access token"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A GitHub ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/settings/tokens"},"personal access token"),".\nYou may use multiple tokens to balance the load on your API quota.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'User may need to get the organization\'s administrator to grant access under "Third-party Access" then "Personal access tokens".'))),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/concepts/connectors#using-connectors"},"connectors")," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector."),(0,r.kt)("h3",{id:"properties"},"Properties"),(0,r.kt)("h4",{id:"endpoint"},"Endpoint"),(0,r.kt)("p",null,"The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use ",(0,r.kt)("a",{parentName:"p",href:"#using-oauth2-to-authenticate-with-github-in-the-flow-web-app"},"OAuth2"),", so some of these properties aren't required."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/branch")),(0,r.kt)("td",{parentName:"tr",align:null},"Branch (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"Space-delimited list of GitHub repository branches to pull commits for, e.g. ","`","estuary","/","flow","/","your-branch","`",". If no branches are specified for a repository, the default branch will be pulled."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials"))),(0,r.kt)("td",{parentName:"tr",align:null},"Authentication"),(0,r.kt)("td",{parentName:"tr",align:null},"Choose how to authenticate to GitHub"),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/credentials/option_title")),(0,r.kt)("td",{parentName:"tr",align:null},"Authentication method"),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"PAT Credentials")," for manual authentication"),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/credentials/personal_access_token")),(0,r.kt)("td",{parentName:"tr",align:null},"Access token"),(0,r.kt)("td",{parentName:"tr",align:null},"Personal access token, used for manual authentication. You may include multiple access tokens as a comma separated list."),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/page_size_for_large_streams")),(0,r.kt)("td",{parentName:"tr",align:null},"Page size for large streams (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"The Github connector captures from several resources with a large amount of data. The page size of such resources depends on the size of your repository. We recommended that you specify values between 10 and 30."),(0,r.kt)("td",{parentName:"tr",align:null},"integer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"10"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/repository"))),(0,r.kt)("td",{parentName:"tr",align:null},"GitHub Repositories"),(0,r.kt)("td",{parentName:"tr",align:null},"Space-delimited list of GitHub organizations","/","repositories, e.g. ","`","estuary","/","flow","`"," for a single repository, ","`","estuary","/","*","`"," to get all repositories from an organization and ","`","estuary","/","flow estuary","/","another-repo","`"," for multiple repositories."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/start_date"))),(0,r.kt)("td",{parentName:"tr",align:null},"Start date"),(0,r.kt)("td",{parentName:"tr",align:null},"The date from which you","'","d like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the resources that support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all ",(0,r.kt)("a",{parentName:"td",href:"#supported-data-resources"},"resources"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h4",{id:"bindings"},"Bindings"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/stream"))),(0,r.kt)("td",{parentName:"tr",align:null},"Stream"),(0,r.kt)("td",{parentName:"tr",align:null},"GitHub resource from which collection is captured."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/syncMode"))),(0,r.kt)("td",{parentName:"tr",align:null},"Sync mode"),(0,r.kt)("td",{parentName:"tr",align:null},"Connection method."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h3",{id:"sample"},"Sample"),(0,r.kt)("p",null,"This sample specification reflects the manual authentication method."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-github:dev\n config:\n credentials:\n option_title: PAT Credentials\n personal_access_token: {secret}\n page_size_for_large_streams: 10\n repository: estuary/flow\n start_date: 2022-01-01T00:00:00Z\n bindings:\n - resource:\n stream: assignees\n syncMode: full_refresh\n target: ${PREFIX}/assignees\n {...}\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6d42ac36.5525d845.js b/assets/js/6d42ac36.5525d845.js new file mode 100644 index 0000000000..81a4fb7b33 --- /dev/null +++ b/assets/js/6d42ac36.5525d845.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4744],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var l=n.createContext({}),p=function(t){var e=n.useContext(l),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=p(t.components);return n.createElement(l.Provider,{value:e},t.children)},c="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,u=s(t,["components","mdxType","originalType","parentName"]),c=p(a),d=r,h=c["".concat(l,".").concat(d)]||c[d]||m[d]||o;return a?n.createElement(h,i(i({ref:e},u),{},{components:a})):n.createElement(h,i({ref:e},u))}));function h(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=d;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[c]="string"==typeof t?t:r,i[1]=s;for(var p=2;p{a.r(e),a.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:1},i="GitHub",s={unversionedId:"reference/Connectors/capture-connectors/github",id:"reference/Connectors/capture-connectors/github",title:"GitHub",description:"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API.",source:"@site/docs/reference/Connectors/capture-connectors/github.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/github",permalink:"/reference/Connectors/capture-connectors/github",draft:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/github.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Freshdesk",permalink:"/reference/Connectors/capture-connectors/freshdesk"},next:{title:"GitlLab",permalink:"/reference/Connectors/capture-connectors/gitlab"}},l={},p=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with GitHub in the Flow web app",id:"using-oauth2-to-authenticate-with-github-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually using personal access token",id:"configuring-the-connector-specification-manually-using-personal-access-token",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}],u={toc:p},c="wrapper";function m(t){let{components:e,...a}=t;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"github"},"GitHub"),(0,r.kt)("p",null,"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API."),(0,r.kt)("p",null,"It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.kt)("a",{parentName:"p",href:"https://ghcr.io/estuary/source-github:dev"},(0,r.kt)("inlineCode",{parentName:"a"},"ghcr.io/estuary/source-github:dev"))," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."),(0,r.kt)("p",null,"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.kt)("a",{parentName:"p",href:"https://docs.airbyte.com/integrations/sources/github/"},"here"),",\nbut keep in mind that the two versions may be significantly different."),(0,r.kt)("h2",{id:"supported-data-resources"},"Supported data resources"),(0,r.kt)("p",null,"When you ",(0,r.kt)("a",{parentName:"p",href:"#endpoint"},"configure the connector"),", you specify a list of GitHub organizations and/or repositories\nfrom which to capture data."),(0,r.kt)("p",null,"From your selection, the following data resources are captured:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Full refresh (batch) resources"),(0,r.kt)("th",{parentName:"tr",align:null},"Incremental (real-time supported) resources"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/assignees#list-assignees"},"Assignees")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/comments#list-issue-comments-for-a-repository"},"Comments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/branches/branches#list-branches"},"Branches")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-a-commit-comment"},"Commit comment reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/collaborators/collaborators#list-repository-collaborators"},"Collaborators")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/commits/comments#list-commit-comments-for-a-repository"},"Commit comments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/labels#list-labels-for-a-repository"},"Issue labels")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/commits/commits#list-commits"},"Commits"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/pulls#list-commits-on-a-pull-request"},"Pull request commits")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/deployments#list-deployments"},"Deployments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/repos/repos#list-repository-tags"},"Tags")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/activity/events#list-repository-events"},"Events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/teams/members#list-team-members"},"Team members")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue-comment"},"Issue comment reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/teams/members#get-team-membership-for-a-user"},"Team memberships")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues#list-issue-events-for-a-repository"},"Issue events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/teams#list-teams"},"Teams")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues#list-milestones"},"Issue milestones"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/orgs/members#list-organization-members"},"Users")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue"},"Issue reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/issues/issues#list-repository-issues"},"Issues"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/projects/cards#list-project-cards"},"Project cards"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/projects#list-project-columns"},"Project columns"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/projects/projects#list-repository-projects"},"Projects"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/reactions#list-reactions-for-a-pull-request-review-comment"},"Pull request comment reactions"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request"},"Pull request stats"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/pulls#list-pull-requests"},"Pull requests"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/releases/releases#list-releases"},"Releases"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/repos/repos#list-organization-repositories"},"Repositories"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/comments#list-review-comments-in-a-repository"},"Review comments"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/pulls/reviews#list-reviews-for-a-pull-request"},"Reviews"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/activity/starring#list-stargazers"},"Stargazers"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository"},"Workflow runs"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/rest/actions/workflows#list-repository-workflows"},"Workflows"))))),(0,r.kt)("p",null,"Each resource is mapped to a Flow collection through a separate binding."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"/start_date")," ",(0,r.kt)("a",{parentName:"p",href:"#endpoint"},"field")," is not applicable to the following resources:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Assignees"),(0,r.kt)("li",{parentName:"ul"},"Branches"),(0,r.kt)("li",{parentName:"ul"},"Collaborators"),(0,r.kt)("li",{parentName:"ul"},"Issue labels"),(0,r.kt)("li",{parentName:"ul"},"Organizations"),(0,r.kt)("li",{parentName:"ul"},"Pull request commits"),(0,r.kt)("li",{parentName:"ul"},"Pull request stats"),(0,r.kt)("li",{parentName:"ul"},"Repositories"),(0,r.kt)("li",{parentName:"ul"},"Tags"),(0,r.kt)("li",{parentName:"ul"},"Teams"),(0,r.kt)("li",{parentName:"ul"},"Users"))),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"There are two ways to authenticate with GitHub when capturing data into Flow: using OAuth2, and manually, by generating a personal access token.\nTheir prerequisites differ."),(0,r.kt)("p",null,"OAuth is recommended for simplicity in the Flow web app;\nthe access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization."),(0,r.kt)("h3",{id:"using-oauth2-to-authenticate-with-github-in-the-flow-web-app"},"Using OAuth2 to authenticate with GitHub in the Flow web app"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'User may need to request access in Github under the user\'s personal settings (not the organization settings) by going to Applications then Authorized OAuth Apps on Github. Click the app or the image next to the app and request access under "Organization access". After a user has made the request, the organization administrator can grant access on the "Third-party application access policy" page. See additional details on this ',(0,r.kt)("a",{parentName:"p",href:"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/requesting-organization-approval-for-oauth-apps"},"Github doc"),"."))),(0,r.kt)("h3",{id:"configuring-the-connector-specification-manually-using-personal-access-token"},"Configuring the connector specification manually using personal access token"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A GitHub ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/settings/tokens"},"personal access token"),".\nYou may use multiple tokens to balance the load on your API quota.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'User may need to get the organization\'s administrator to grant access under "Third-party Access" then "Personal access tokens".'))),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/concepts/connectors#using-connectors"},"connectors")," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector."),(0,r.kt)("h3",{id:"properties"},"Properties"),(0,r.kt)("h4",{id:"endpoint"},"Endpoint"),(0,r.kt)("p",null,"The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use ",(0,r.kt)("a",{parentName:"p",href:"#using-oauth2-to-authenticate-with-github-in-the-flow-web-app"},"OAuth2"),", so some of these properties aren't required."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/branch")),(0,r.kt)("td",{parentName:"tr",align:null},"Branch (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"Space-delimited list of GitHub repository branches to pull commits for, e.g. ","`","estuary","/","flow","/","your-branch","`",". If no branches are specified for a repository, the default branch will be pulled."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials"))),(0,r.kt)("td",{parentName:"tr",align:null},"Authentication"),(0,r.kt)("td",{parentName:"tr",align:null},"Choose how to authenticate to GitHub"),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/credentials/option_title")),(0,r.kt)("td",{parentName:"tr",align:null},"Authentication method"),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"PAT Credentials")," for manual authentication"),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/credentials/personal_access_token")),(0,r.kt)("td",{parentName:"tr",align:null},"Access token"),(0,r.kt)("td",{parentName:"tr",align:null},"Personal access token, used for manual authentication. You may include multiple access tokens as a comma separated list."),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/page_size_for_large_streams")),(0,r.kt)("td",{parentName:"tr",align:null},"Page size for large streams (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"The Github connector captures from several resources with a large amount of data. The page size of such resources depends on the size of your repository. We recommended that you specify values between 10 and 30."),(0,r.kt)("td",{parentName:"tr",align:null},"integer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"10"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/repository"))),(0,r.kt)("td",{parentName:"tr",align:null},"GitHub Repositories"),(0,r.kt)("td",{parentName:"tr",align:null},"Space-delimited list of GitHub organizations","/","repositories, e.g. ","`","estuary","/","flow","`"," for a single repository, ","`","estuary","/","*","`"," to get all repositories from an organization and ","`","estuary","/","flow estuary","/","another-repo","`"," for multiple repositories."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/start_date"))),(0,r.kt)("td",{parentName:"tr",align:null},"Start date"),(0,r.kt)("td",{parentName:"tr",align:null},"The date from which you","'","d like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the resources that support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all ",(0,r.kt)("a",{parentName:"td",href:"#supported-data-resources"},"resources"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h4",{id:"bindings"},"Bindings"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/stream"))),(0,r.kt)("td",{parentName:"tr",align:null},"Stream"),(0,r.kt)("td",{parentName:"tr",align:null},"GitHub resource from which collection is captured."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/syncMode"))),(0,r.kt)("td",{parentName:"tr",align:null},"Sync mode"),(0,r.kt)("td",{parentName:"tr",align:null},"Connection method."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h3",{id:"sample"},"Sample"),(0,r.kt)("p",null,"This sample specification reflects the manual authentication method."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-github:dev\n config:\n credentials:\n option_title: PAT Credentials\n personal_access_token: {secret}\n page_size_for_large_streams: 10\n repository: estuary/flow\n start_date: 2022-01-01T00:00:00Z\n bindings:\n - resource:\n stream: assignees\n syncMode: full_refresh\n target: ${PREFIX}/assignees\n {...}\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/858820da.bb9c169b.js b/assets/js/858820da.bb9c169b.js new file mode 100644 index 0000000000..e2f1910acd --- /dev/null +++ b/assets/js/858820da.bb9c169b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7356],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),c=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(a),h=n,d=u["".concat(l,".").concat(h)]||u[h]||m[h]||o;return a?r.createElement(d,i(i({ref:t},p),{},{components:a})):r.createElement(d,i({ref:t},p))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const o={sidebar_position:1},i="GitlLab",s={unversionedId:"reference/Connectors/capture-connectors/gitlab",id:"reference/Connectors/capture-connectors/gitlab",title:"GitlLab",description:"This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs's API V4. It can also work with self-hosted GitLab.",source:"@site/docs/reference/Connectors/capture-connectors/gitlab.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/gitlab",permalink:"/reference/Connectors/capture-connectors/gitlab",draft:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/gitlab.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"GitHub",permalink:"/reference/Connectors/capture-connectors/github"},next:{title:"Google Ads",permalink:"/reference/Connectors/capture-connectors/google-ads"}},l={},c=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Resources",id:"resources",level:3},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with GitLab in the Flow web app",id:"using-oauth2-to-authenticate-with-gitlab-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually using personal access token",id:"configuring-the-connector-specification-manually-using-personal-access-token",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Setup",id:"setup",level:3},{value:"Sample",id:"sample",level:3}],p={toc:c},u="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"gitllab"},"GitlLab"),(0,n.kt)("p",null,"This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs's API V4. It can also work with self-hosted GitLab."),(0,n.kt)("p",null,"It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.kt)("a",{parentName:"p",href:"https://ghcr.io/estuary/source-gitlab:dev"},(0,n.kt)("inlineCode",{parentName:"a"},"ghcr.io/estuary/source-gitlab:dev"))," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."),(0,n.kt)("p",null,"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,n.kt)("a",{parentName:"p",href:"https://docs.airbyte.com/integrations/sources/gitlab/"},"here"),",\nbut keep in mind that the two versions may be significantly different."),(0,n.kt)("h2",{id:"supported-data-resources"},"Supported data resources"),(0,n.kt)("p",null,"When you ",(0,n.kt)("a",{parentName:"p",href:"#endpoint"},"configure the connector"),", you may a list of GitLab Groups or Projects from which to capture data."),(0,n.kt)("p",null,"From your selection, the following data resources are captured:"),(0,n.kt)("h3",{id:"resources"},"Resources"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/branches.html"},"Branches")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/commits.html"},"Commits")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/issues.html"},"Issues")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/group_boards.html"},"Group Issue Boards")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/pipelines.html"},"Pipelines")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/jobs.html"},"Jobs")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/projects.html"},"Projects")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/milestones.html"},"Project Milestones")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/merge_requests.html"},"Project Merge Requests")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/users.html"},"Users")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/groups.html"},"Groups")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/group_milestones.html"},"Group Milestones")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/members.html"},"Group and Project Members")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/tags.html"},"Tags")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/releases/index.html"},"Releases")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/group_labels.html"},"Group Labels")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/labels.html"},"Project Labels")," "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/epics.html"},"Epics"),"(only available for GitLab Ultimate and GitLab.com Gold accounts) "),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/api/epic_issues.html"},"Epic Issues")," (only available for GitLab Ultimate and GitLab.com Gold accounts) ")),(0,n.kt)("p",null,"Each resource is mapped to a Flow collection through a separate binding."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"There are two ways to authenticate with GitLab when capturing data into Flow: using OAuth2, and manually, by generating a personal access token.\nTheir prerequisites differ."),(0,n.kt)("p",null,"OAuth is recommended for simplicity in the Flow web app;\nthe access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization."),(0,n.kt)("h3",{id:"using-oauth2-to-authenticate-with-gitlab-in-the-flow-web-app"},"Using OAuth2 to authenticate with GitLab in the Flow web app"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A GitLab user account with ",(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/user/permissions.html"},"access")," to the repositories of interest, and which is a member of organizations of interest. ",(0,n.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/user/project/members/#add-users-to-a-project"},"How to add a member"),".")),(0,n.kt)("h3",{id:"configuring-the-connector-specification-manually-using-personal-access-token"},"Configuring the connector specification manually using personal access token"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"A GitLab user account with access to all entities of interest.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"A GitLab ",(0,n.kt)("a",{parentName:"p",href:"https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html"},"personal access token"),")."))),(0,n.kt)("h2",{id:"configuration"},"Configuration"),(0,n.kt)("p",null,"You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,n.kt)("a",{parentName:"p",href:"/concepts/connectors#using-connectors"},"connectors")," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector."),(0,n.kt)("h3",{id:"setup"},"Setup"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Complete authentication using Oauth or a PAT"),(0,n.kt)("li",{parentName:"ol"},"Select your start date in the format 2023-08-31T00:00:00"),(0,n.kt)("li",{parentName:"ol"},"Optionally select Groups and Projects")),(0,n.kt)("h3",{id:"sample"},"Sample"),(0,n.kt)("p",null,"This sample specification reflects the manual authentication method."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-gitlab:dev\n config:\n credentials:\n option_title: PAT Credentials\n personal_access_token: {secret}\n groups: estuary.dev\n projects: estuary/flow\n start_date: 2022-01-01T00:00:00Z\n bindings:\n - resource:\n stream: branches\n syncMode: full_refresh\n target: ${PREFIX}/assignees\n {...}\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.13bbc10c.js b/assets/js/935f2afb.13bbc10c.js deleted file mode 100644 index 9aaf8f1f87..0000000000 --- a/assets/js/935f2afb.13bbc10c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Who should use Flow?","href":"/overview/who-should-use-flow","docId":"overview/who-should-use-flow"},{"type":"link","label":"Comparisons","href":"/overview/comparisons","docId":"overview/comparisons"}],"href":"/"},{"type":"category","label":"Get started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Registration and setup","href":"/getting-started/installation","docId":"getting-started/installation"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create your first dataflow with Amazon S3 and Snowflake","href":"/getting-started/tutorials/dataflow-s3-snowflake","docId":"getting-started/tutorials/dataflow-s3-snowflake"},{"type":"link","label":"Create a real-time materialized view in PostgreSQL","href":"/getting-started/tutorials/continuous-materialized-view","docId":"getting-started/tutorials/continuous-materialized-view"}],"href":"/getting-started/tutorials/"}]},{"type":"category","label":"User guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a basic Data Flow","href":"/guides/create-dataflow","docId":"guides/create-dataflow"},{"type":"category","label":"Create a Data Flow for specific systems","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Google Cloud Firestore to Snowflake","href":"/guides/system-specific-dataflows/firestore-to-dwh","docId":"guides/system-specific-dataflows/firestore-to-dwh"},{"type":"link","label":"Amazon S3 to Snowflake","href":"/guides/system-specific-dataflows/s3-to-snowflake","docId":"guides/system-specific-dataflows/s3-to-snowflake"}],"href":"/guides/system-specific-dataflows/"},{"type":"link","label":"Edit Data Flows in the web app","href":"/guides/edit-data-flows","docId":"guides/edit-data-flows"},{"type":"category","label":"Use flowctl","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Edit a Flow specification locally","href":"/guides/flowctl/edit-specification-locally","docId":"guides/flowctl/edit-specification-locally"},{"type":"link","label":"Edit a draft created in the web app","href":"/guides/flowctl/edit-draft-from-webapp","docId":"guides/flowctl/edit-draft-from-webapp"},{"type":"link","label":"Create a derivation with flowctl","href":"/guides/flowctl/create-derivation","docId":"guides/flowctl/create-derivation"},{"type":"link","label":"Troubleshoot a task with flowctl","href":"/guides/flowctl/troubleshoot-task","docId":"guides/flowctl/troubleshoot-task"}],"href":"/guides/flowctl/"},{"type":"link","label":"Configure connections with SSH tunneling","href":"/guides/connect-network","docId":"guides/connect-network"},{"type":"link","label":"Customize materialized fields","href":"/guides/customize-materialization-fields","docId":"guides/customize-materialization-fields"}],"href":"/guides/"},{"type":"category","label":"Concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Catalog","href":"/concepts/catalogs","docId":"concepts/catalogs"},{"type":"link","label":"Captures","href":"/concepts/captures","docId":"concepts/captures"},{"type":"link","label":"Collections","href":"/concepts/collections","docId":"concepts/collections"},{"type":"link","label":"Materializations","href":"/concepts/materialization","docId":"concepts/materialization"},{"type":"link","label":"Connectors","href":"/concepts/connectors","docId":"concepts/connectors"},{"type":"link","label":"Derivations","href":"/concepts/derivations","docId":"concepts/derivations"},{"type":"link","label":"Web application","href":"/concepts/web-app","docId":"concepts/web-app"},{"type":"link","label":"flowctl","href":"/concepts/flowctl","docId":"concepts/flowctl"},{"type":"link","label":"Imports","href":"/concepts/import","docId":"concepts/import"},{"type":"link","label":"Schemas","href":"/concepts/schemas","docId":"concepts/schemas"},{"type":"link","label":"Storage mappings","href":"/concepts/storage-mappings","docId":"concepts/storage-mappings"},{"type":"link","label":"Tests","href":"/concepts/tests","docId":"concepts/tests"},{"type":"category","label":"Advanced concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Journals","href":"/concepts/advanced/journals","docId":"concepts/advanced/journals"},{"type":"link","label":"Logs and statistics","href":"/concepts/advanced/logs-stats","docId":"concepts/advanced/logs-stats"},{"type":"link","label":"Projections","href":"/concepts/advanced/projections","docId":"concepts/advanced/projections"},{"type":"link","label":"Task shards","href":"/concepts/advanced/shards","docId":"concepts/advanced/shards"}]}],"href":"/concepts/"},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Connectors","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Capture connectors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Aircall","href":"/reference/Connectors/capture-connectors/aircall","docId":"reference/Connectors/capture-connectors/aircall"},{"type":"link","label":"Airtable","href":"/reference/Connectors/capture-connectors/airtable","docId":"reference/Connectors/capture-connectors/airtable"},{"type":"link","label":"AlloyDB","href":"/reference/Connectors/capture-connectors/alloydb","docId":"reference/Connectors/capture-connectors/alloydb"},{"type":"link","label":"Alpaca","href":"/reference/Connectors/capture-connectors/alpaca","docId":"reference/Connectors/capture-connectors/alpaca"},{"type":"link","label":"Amazon Ads","href":"/reference/Connectors/capture-connectors/amazon-ads","docId":"reference/Connectors/capture-connectors/amazon-ads"},{"type":"link","label":"Amazon DynamoDB","href":"/reference/Connectors/capture-connectors/amazon-dynamodb","docId":"reference/Connectors/capture-connectors/amazon-dynamodb"},{"type":"link","label":"Amazon Kinesis","href":"/reference/Connectors/capture-connectors/amazon-kinesis","docId":"reference/Connectors/capture-connectors/amazon-kinesis"},{"type":"link","label":"Amazon S3","href":"/reference/Connectors/capture-connectors/amazon-s3","docId":"reference/Connectors/capture-connectors/amazon-s3"},{"type":"link","label":"Amazon SQS","href":"/reference/Connectors/capture-connectors/amazon-sqs","docId":"reference/Connectors/capture-connectors/amazon-sqs"},{"type":"link","label":"Amplitude","href":"/reference/Connectors/capture-connectors/amplitude","docId":"reference/Connectors/capture-connectors/amplitude"},{"type":"link","label":"Apache Kafka","href":"/reference/Connectors/capture-connectors/apache-kafka","docId":"reference/Connectors/capture-connectors/apache-kafka"},{"type":"link","label":"BigQuery","href":"/reference/Connectors/capture-connectors/bigquery","docId":"reference/Connectors/capture-connectors/bigquery"},{"type":"link","label":"Bing Ads","href":"/reference/Connectors/capture-connectors/bing-ads","docId":"reference/Connectors/capture-connectors/bing-ads"},{"type":"link","label":"Braintree","href":"/reference/Connectors/capture-connectors/braintree","docId":"reference/Connectors/capture-connectors/braintree"},{"type":"link","label":"Braze","href":"/reference/Connectors/capture-connectors/braze","docId":"reference/Connectors/capture-connectors/braze"},{"type":"link","label":"Chargebee","href":"/reference/Connectors/capture-connectors/chargebee","docId":"reference/Connectors/capture-connectors/chargebee"},{"type":"link","label":"Exchange Rates API","href":"/reference/Connectors/capture-connectors/exchange-rates","docId":"reference/Connectors/capture-connectors/exchange-rates"},{"type":"link","label":"Facebook Marketing","href":"/reference/Connectors/capture-connectors/facebook-marketing","docId":"reference/Connectors/capture-connectors/facebook-marketing"},{"type":"link","label":"Freshdesk","href":"/reference/Connectors/capture-connectors/freshdesk","docId":"reference/Connectors/capture-connectors/freshdesk"},{"type":"link","label":"GitHub","href":"/reference/Connectors/capture-connectors/github","docId":"reference/Connectors/capture-connectors/github"},{"type":"link","label":"Google Ads","href":"/reference/Connectors/capture-connectors/google-ads","docId":"reference/Connectors/capture-connectors/google-ads"},{"type":"link","label":"Google Analytics 4","href":"/reference/Connectors/capture-connectors/google-analytics-4","docId":"reference/Connectors/capture-connectors/google-analytics-4"},{"type":"link","label":"OracleDB","href":"/reference/Connectors/capture-connectors/oracle-db","docId":"reference/Connectors/capture-connectors/oracle-db"},{"type":"link","label":"Pinterest","href":"/reference/Connectors/capture-connectors/pinterest","docId":"reference/Connectors/capture-connectors/pinterest"},{"type":"link","label":"Postgres (Heroku)","href":"/reference/Connectors/capture-connectors/postgres-heroku","docId":"reference/Connectors/capture-connectors/postgres-heroku"},{"type":"link","label":"WooCommerce","href":"/reference/Connectors/capture-connectors/woocommerce","docId":"reference/Connectors/capture-connectors/woocommerce"},{"type":"link","label":"Google Cloud Storage","href":"/reference/Connectors/capture-connectors/gcs","docId":"reference/Connectors/capture-connectors/gcs"},{"type":"link","label":"Google Analytics UA","href":"/reference/Connectors/capture-connectors/google-analytics","docId":"reference/Connectors/capture-connectors/google-analytics"},{"type":"link","label":"Google Firestore","href":"/reference/Connectors/capture-connectors/google-firestore","docId":"reference/Connectors/capture-connectors/google-firestore"},{"type":"link","label":"Google Search Console","href":"/reference/Connectors/capture-connectors/google-search-console","docId":"reference/Connectors/capture-connectors/google-search-console"},{"type":"link","label":"Google Sheets","href":"/reference/Connectors/capture-connectors/google-sheets","docId":"reference/Connectors/capture-connectors/google-sheets"},{"type":"link","label":"Greenhouse","href":"/reference/Connectors/capture-connectors/greenhouse","docId":"reference/Connectors/capture-connectors/greenhouse"},{"type":"link","label":"Harvest","href":"/reference/Connectors/capture-connectors/harvest","docId":"reference/Connectors/capture-connectors/harvest"},{"type":"link","label":"HTTP File","href":"/reference/Connectors/capture-connectors/http-file","docId":"reference/Connectors/capture-connectors/http-file"},{"type":"link","label":"HTTP Ingest (Webhook)","href":"/reference/Connectors/capture-connectors/http-ingest","docId":"reference/Connectors/capture-connectors/http-ingest"},{"type":"link","label":"Hubspot","href":"/reference/Connectors/capture-connectors/hubspot","docId":"reference/Connectors/capture-connectors/hubspot"},{"type":"link","label":"Instagram","href":"/reference/Connectors/capture-connectors/instagram","docId":"reference/Connectors/capture-connectors/instagram"},{"type":"link","label":"Intercom","href":"/reference/Connectors/capture-connectors/intercom","docId":"reference/Connectors/capture-connectors/intercom"},{"type":"link","label":"Iterable","href":"/reference/Connectors/capture-connectors/iterable","docId":"reference/Connectors/capture-connectors/iterable"},{"type":"link","label":"Jira","href":"/reference/Connectors/capture-connectors/jira","docId":"reference/Connectors/capture-connectors/jira"},{"type":"link","label":"Klaviyo","href":"/reference/Connectors/capture-connectors/klaviyo","docId":"reference/Connectors/capture-connectors/klaviyo"},{"type":"link","label":"LinkedIn Ads","href":"/reference/Connectors/capture-connectors/linkedin-ads","docId":"reference/Connectors/capture-connectors/linkedin-ads"},{"type":"link","label":"Mailchimp","href":"/reference/Connectors/capture-connectors/mailchimp","docId":"reference/Connectors/capture-connectors/mailchimp"},{"type":"link","label":"MariaDB","href":"/reference/Connectors/capture-connectors/mariadb","docId":"reference/Connectors/capture-connectors/mariadb"},{"type":"link","label":"Marketo","href":"/reference/Connectors/capture-connectors/marketo","docId":"reference/Connectors/capture-connectors/marketo"},{"type":"link","label":"MixPanel","href":"/reference/Connectors/capture-connectors/mixpanel","docId":"reference/Connectors/capture-connectors/mixpanel"},{"type":"link","label":"Microsoft SQL Server","href":"/reference/Connectors/capture-connectors/sqlserver","docId":"reference/Connectors/capture-connectors/sqlserver"},{"type":"link","label":"MongoDB","href":"/reference/Connectors/capture-connectors/mongodb","docId":"reference/Connectors/capture-connectors/mongodb"},{"type":"link","label":"MySQL","href":"/reference/Connectors/capture-connectors/MySQL","docId":"reference/Connectors/capture-connectors/MySQL"},{"type":"link","label":"NetSuite","href":"/reference/Connectors/capture-connectors/netsuite","docId":"reference/Connectors/capture-connectors/netsuite"},{"type":"link","label":"Notion","href":"/reference/Connectors/capture-connectors/notion","docId":"reference/Connectors/capture-connectors/notion"},{"type":"link","label":"Paypal Transaction","href":"/reference/Connectors/capture-connectors/paypal-transaction","docId":"reference/Connectors/capture-connectors/paypal-transaction"},{"type":"link","label":"PostgreSQL","href":"/reference/Connectors/capture-connectors/PostgreSQL","docId":"reference/Connectors/capture-connectors/PostgreSQL"},{"type":"link","label":"PostgreSQL Batch Query Connector","href":"/reference/Connectors/capture-connectors/postgres-batch","docId":"reference/Connectors/capture-connectors/postgres-batch"},{"type":"link","label":"Recharge","href":"/reference/Connectors/capture-connectors/recharge","docId":"reference/Connectors/capture-connectors/recharge"},{"type":"link","label":"Salesforce \u2014 Real-time data","href":"/reference/Connectors/capture-connectors/salesforce-real-time","docId":"reference/Connectors/capture-connectors/salesforce-real-time"},{"type":"link","label":"Salesforce \u2014 Historical data","href":"/reference/Connectors/capture-connectors/salesforce","docId":"reference/Connectors/capture-connectors/salesforce"},{"type":"link","label":"SendGrid","href":"/reference/Connectors/capture-connectors/sendgrid","docId":"reference/Connectors/capture-connectors/sendgrid"},{"type":"link","label":"Sentry","href":"/reference/Connectors/capture-connectors/sentry","docId":"reference/Connectors/capture-connectors/sentry"},{"type":"link","label":"SFTP","href":"/reference/Connectors/capture-connectors/sftp","docId":"reference/Connectors/capture-connectors/sftp"},{"type":"link","label":"Slack","href":"/reference/Connectors/capture-connectors/slack","docId":"reference/Connectors/capture-connectors/slack"},{"type":"link","label":"Snapchat Marketing","href":"/reference/Connectors/capture-connectors/snapchat","docId":"reference/Connectors/capture-connectors/snapchat"},{"type":"link","label":"Stripe","href":"/reference/Connectors/capture-connectors/stripe","docId":"reference/Connectors/capture-connectors/stripe"},{"type":"link","label":"Survey Monkey","href":"/reference/Connectors/capture-connectors/survey-monkey","docId":"reference/Connectors/capture-connectors/survey-monkey"},{"type":"link","label":"TikTok Marketing","href":"/reference/Connectors/capture-connectors/tiktok","docId":"reference/Connectors/capture-connectors/tiktok"},{"type":"link","label":"Twilio","href":"/reference/Connectors/capture-connectors/twilio","docId":"reference/Connectors/capture-connectors/twilio"},{"type":"link","label":"YouTube Analytics","href":"/reference/Connectors/capture-connectors/youtube-analytics","docId":"reference/Connectors/capture-connectors/youtube-analytics"},{"type":"link","label":"Zendesk Chat","href":"/reference/Connectors/capture-connectors/zendesk-chat","docId":"reference/Connectors/capture-connectors/zendesk-chat"},{"type":"link","label":"Zendesk Support","href":"/reference/Connectors/capture-connectors/zendesk-support","docId":"reference/Connectors/capture-connectors/zendesk-support"}],"href":"/reference/Connectors/capture-connectors/"},{"type":"category","label":"Materialization connectors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"AlloyDB","href":"/reference/Connectors/materialization-connectors/alloydb","docId":"reference/Connectors/materialization-connectors/alloydb"},{"type":"link","label":"Amazon DynamoDB","href":"/reference/Connectors/materialization-connectors/amazon-dynamodb","docId":"reference/Connectors/materialization-connectors/amazon-dynamodb"},{"type":"link","label":"Apache Parquet in S3","href":"/reference/Connectors/materialization-connectors/Parquet","docId":"reference/Connectors/materialization-connectors/Parquet"},{"type":"link","label":"Elasticsearch","href":"/reference/Connectors/materialization-connectors/Elasticsearch","docId":"reference/Connectors/materialization-connectors/Elasticsearch"},{"type":"link","label":"Firebolt","href":"/reference/Connectors/materialization-connectors/Firebolt","docId":"reference/Connectors/materialization-connectors/Firebolt"},{"type":"link","label":"Google BigQuery","href":"/reference/Connectors/materialization-connectors/BigQuery","docId":"reference/Connectors/materialization-connectors/BigQuery"},{"type":"link","label":"Google Cloud Pub/Sub","href":"/reference/Connectors/materialization-connectors/google-pubsub","docId":"reference/Connectors/materialization-connectors/google-pubsub"},{"type":"link","label":"Google Sheets","href":"/reference/Connectors/materialization-connectors/Google-sheets","docId":"reference/Connectors/materialization-connectors/Google-sheets"},{"type":"link","label":"MongoDB","href":"/reference/Connectors/materialization-connectors/mongodb","docId":"reference/Connectors/materialization-connectors/mongodb"},{"type":"link","label":"PostgreSQL","href":"/reference/Connectors/materialization-connectors/PostgreSQL","docId":"reference/Connectors/materialization-connectors/PostgreSQL"},{"type":"link","label":"Rockset","href":"/reference/Connectors/materialization-connectors/Rockset","docId":"reference/Connectors/materialization-connectors/Rockset"},{"type":"link","label":"SQLite","href":"/reference/Connectors/materialization-connectors/SQLite","docId":"reference/Connectors/materialization-connectors/SQLite"},{"type":"link","label":"Snowflake","href":"/reference/Connectors/materialization-connectors/Snowflake","docId":"reference/Connectors/materialization-connectors/Snowflake"},{"type":"link","label":"Amazon Redshift","href":"/reference/Connectors/materialization-connectors/amazon-redshift","docId":"reference/Connectors/materialization-connectors/amazon-redshift"},{"type":"link","label":"MySQL","href":"/reference/Connectors/materialization-connectors/mysql","docId":"reference/Connectors/materialization-connectors/mysql"},{"type":"link","label":"Pinecone","href":"/reference/Connectors/materialization-connectors/pinecone","docId":"reference/Connectors/materialization-connectors/pinecone"},{"type":"link","label":"TimescaleDB","href":"/reference/Connectors/materialization-connectors/timescaledb","docId":"reference/Connectors/materialization-connectors/timescaledb"}],"href":"/reference/Connectors/materialization-connectors/"},{"type":"link","label":"Materialization Protocol","href":"/reference/Connectors/materialization-protocol","docId":"reference/Connectors/materialization-protocol"}],"href":"/reference/Connectors/"},{"type":"link","label":"Authorizing users and authenticating with Flow","href":"/reference/authentication","docId":"reference/authentication"},{"type":"link","label":"Editing considerations","href":"/reference/editing","docId":"reference/editing"},{"type":"link","label":"Configuring task shards","href":"/reference/Configuring-task-shards","docId":"reference/Configuring-task-shards"},{"type":"category","label":"Reduction strategies","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"append","href":"/reference/reduction-strategies/append","docId":"reference/reduction-strategies/append"},{"type":"link","label":"firstWriteWins and lastWriteWins","href":"/reference/reduction-strategies/firstwritewins-and-lastwritewins","docId":"reference/reduction-strategies/firstwritewins-and-lastwritewins"},{"type":"link","label":"merge","href":"/reference/reduction-strategies/merge","docId":"reference/reduction-strategies/merge"},{"type":"link","label":"minimize and maximize","href":"/reference/reduction-strategies/minimize-and-maximize","docId":"reference/reduction-strategies/minimize-and-maximize"},{"type":"link","label":"set","href":"/reference/reduction-strategies/set","docId":"reference/reduction-strategies/set"},{"type":"link","label":"sum","href":"/reference/reduction-strategies/sum","docId":"reference/reduction-strategies/sum"},{"type":"link","label":"Composing with conditionals","href":"/reference/reduction-strategies/composing-with-conditionals","docId":"reference/reduction-strategies/composing-with-conditionals"}],"href":"/reference/reduction-strategies/"},{"type":"link","label":"Working with logs and statistics","href":"/reference/working-logs-stats","docId":"reference/working-logs-stats"},{"type":"link","label":"Organizing a Flow catalog","href":"/reference/organizing-catalogs","docId":"reference/organizing-catalogs"}]}]},"docs":{"concepts/advanced/journals":{"id":"concepts/advanced/journals","title":"Journals","description":"Journals are an advanced concept of Flow.","sidebar":"tutorialSidebar"},"concepts/advanced/logs-stats":{"id":"concepts/advanced/logs-stats","title":"Logs and statistics","description":"Flow collects logs and statistics of catalog tasks to aid in debugging and refinement of your workflows.","sidebar":"tutorialSidebar"},"concepts/advanced/projections":{"id":"concepts/advanced/projections","title":"Projections","description":"Projections are an advanced concept of Flow.","sidebar":"tutorialSidebar"},"concepts/advanced/shards":{"id":"concepts/advanced/shards","title":"Task shards","description":"Catalog tasks \u2014 captures, derivations, and materializations \u2014","sidebar":"tutorialSidebar"},"concepts/captures":{"id":"concepts/captures","title":"Captures","description":"A capture is how Flow ingests data from an external source.","sidebar":"tutorialSidebar"},"concepts/catalogs":{"id":"concepts/catalogs","title":"Catalog","description":"The catalog is the set of published entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more.","sidebar":"tutorialSidebar"},"concepts/collections":{"id":"concepts/collections","title":"Collections","description":"The documents of your Data Flows are stored in collections:","sidebar":"tutorialSidebar"},"concepts/connectors":{"id":"concepts/connectors","title":"Connectors","description":"Connectors bridge the gap between Flow and","sidebar":"tutorialSidebar"},"concepts/derivations":{"id":"concepts/derivations","title":"Derivations","description":"At times, the collections generated by a capture may not be suitable for your needs.","sidebar":"tutorialSidebar"},"concepts/flowctl":{"id":"concepts/flowctl","title":"flowctl","description":"There are two ways to work with Flow: through the web app, and using the flowctl command-line interface.","sidebar":"tutorialSidebar"},"concepts/import":{"id":"concepts/import","title":"Imports","description":"When you work on a draft Data Flow using flowctl draft,","sidebar":"tutorialSidebar"},"concepts/materialization":{"id":"concepts/materialization","title":"Materializations","description":"A materialization is how Flow pushes data to an external destination.","sidebar":"tutorialSidebar"},"concepts/README":{"id":"concepts/README","title":"Concepts","description":"Flow helps you define data pipelines, known as Data Flows, that connect multiple data systems, APIs, and storage, and optionally transform data along the way.","sidebar":"tutorialSidebar"},"concepts/schemas":{"id":"concepts/schemas","title":"Schemas","description":"Flow documents and collections always have an associated schema","sidebar":"tutorialSidebar"},"concepts/storage-mappings":{"id":"concepts/storage-mappings","title":"Storage mappings","description":"Flow stores the documents that comprise your collections in a cloud storage bucket.","sidebar":"tutorialSidebar"},"concepts/tests":{"id":"concepts/tests","title":"Tests","description":"The Flow web application automatically performs basic tests to validate the configurations of captures and materializations.","sidebar":"tutorialSidebar"},"concepts/web-app":{"id":"concepts/web-app","title":"Web application","description":"Flow\'s web application is at dashboard.estuary.dev.","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Registration and setup","description":"Estuary Flow is a fully managed web application that also offers a robust CLI.","sidebar":"tutorialSidebar"},"getting-started/tutorials/continuous-materialized-view":{"id":"getting-started/tutorials/continuous-materialized-view","title":"Create a real-time materialized view in PostgreSQL","description":"PostgreSQL supports materialized views: database objects that contain the result of a query, usually a focused subset of a large dataset.","sidebar":"tutorialSidebar"},"getting-started/tutorials/dataflow-s3-snowflake":{"id":"getting-started/tutorials/dataflow-s3-snowflake","title":"Create your first dataflow with Amazon S3 and Snowflake","description":"In this tutorial, you\'ll create your first complete Data Flow with Estuary Flow using publicly available data.","sidebar":"tutorialSidebar"},"getting-started/tutorials/README":{"id":"getting-started/tutorials/README","title":"Flow tutorials","description":"Flow tutorials are complete learning experiences that help you get to know Flow using sample data.","sidebar":"tutorialSidebar"},"guides/connect-network":{"id":"guides/connect-network","title":"Configure connections with SSH tunneling","description":"Flow connects to certain types of endpoints \u2014 generally databases \u2014 using their IP address and port.","sidebar":"tutorialSidebar"},"guides/create-dataflow":{"id":"guides/create-dataflow","title":"Create a basic Data Flow","description":"This guide walks you through the process of creating an end-to-end Data Flow.","sidebar":"tutorialSidebar"},"guides/customize-materialization-fields":{"id":"guides/customize-materialization-fields","title":"Customize materialized fields","description":"When you first materialize a collection to an endpoint like a database or data warehouse,","sidebar":"tutorialSidebar"},"guides/edit-data-flows":{"id":"guides/edit-data-flows","title":"Edit Data Flows in the web app","description":"You can edit existing captures, collection schemas, and materializations in the Flow web app.","sidebar":"tutorialSidebar"},"guides/flowctl/create-derivation":{"id":"guides/flowctl/create-derivation","title":"Create a derivation with flowctl","description":"Once you\'re familiar with creating a basic Data Flow, you can take things a step further","sidebar":"tutorialSidebar"},"guides/flowctl/edit-draft-from-webapp":{"id":"guides/flowctl/edit-draft-from-webapp","title":"Edit a draft created in the web app","description":"When you create or edit tasks in the web app, your work is periodically saved as a draft.","sidebar":"tutorialSidebar"},"guides/flowctl/edit-specification-locally":{"id":"guides/flowctl/edit-specification-locally","title":"Edit a Flow specification locally","description":"The Flow web application is designed to make the most common Flow tasks quick and easy.","sidebar":"tutorialSidebar"},"guides/flowctl/README":{"id":"guides/flowctl/README","title":"flowctl guides","description":"The guides in this section cover common workflows using the Estuary Flow CLI, flowctl.","sidebar":"tutorialSidebar"},"guides/flowctl/troubleshoot-task":{"id":"guides/flowctl/troubleshoot-task","title":"Troubleshoot a task with flowctl","description":"The flowctl logs and stats subcommands have been temporarily disabled while we work on some important changes to our authorization system. We expect to have these working again soon. In the meantime, please reach out to us via Slack or email (support@estuary.dev) if you want any help.","sidebar":"tutorialSidebar"},"guides/README":{"id":"guides/README","title":"Flow user guides","description":"In this section, you\'ll find step-by-step guides that walk you through common Flow tasks.","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/firestore-to-dwh":{"id":"guides/system-specific-dataflows/firestore-to-dwh","title":"Google Cloud Firestore to Snowflake","description":"This guide walks you through the process of creating an","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/README":{"id":"guides/system-specific-dataflows/README","title":"System-specific Data Flows","description":"The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination.","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/s3-to-snowflake":{"id":"guides/system-specific-dataflows/s3-to-snowflake","title":"Amazon S3 to Snowflake","description":"This guide walks you through the process of creating an","sidebar":"tutorialSidebar"},"overview/comparisons":{"id":"overview/comparisons","title":"Comparisons","description":"High level explanations of Flow in terms of the systems you already know","sidebar":"tutorialSidebar"},"overview/README":{"id":"overview/README","title":"Flow documentation","description":"Get to know Estuary Flow and learn how to get started.","sidebar":"tutorialSidebar"},"overview/who-should-use-flow":{"id":"overview/who-should-use-flow","title":"Who should use Flow?","description":"Common pain points you might have, and how Flow addresses them.","sidebar":"tutorialSidebar"},"reference/authentication":{"id":"reference/authentication","title":"Authorizing users and authenticating with Flow","description":"Read, write, and admin capabilities over Flow catalogs and the collections that comprise them","sidebar":"tutorialSidebar"},"reference/Configuring-task-shards":{"id":"reference/Configuring-task-shards","title":"Configuring task shards","description":"For some catalog tasks, it\'s helpful to control the behavior of shards","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/aircall":{"id":"reference/Connectors/capture-connectors/aircall","title":"Aircall","description":"This connector captures data from Aircall into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/airtable":{"id":"reference/Connectors/capture-connectors/airtable","title":"Airtable","description":"This connector captures data from Airtable into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/alloydb":{"id":"reference/Connectors/capture-connectors/alloydb","title":"AlloyDB","description":"This connector uses change data capture (CDC) to continuously capture table updates in an AlloyDB database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/alpaca":{"id":"reference/Connectors/capture-connectors/alpaca","title":"Alpaca","description":"This connector captures stock trade data from the Alpaca Market Data API into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-ads":{"id":"reference/Connectors/capture-connectors/amazon-ads","title":"Amazon Ads","description":"This connector captures data from Amazon Ads into Flow collections via the Amazon Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-dynamodb":{"id":"reference/Connectors/capture-connectors/amazon-dynamodb","title":"Amazon DynamoDB","description":"This connector uses DynamoDB streams to continuously capture updates from DynamoDB tables into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-kinesis":{"id":"reference/Connectors/capture-connectors/amazon-kinesis","title":"Amazon Kinesis","description":"This connector captures data from Amazon Kinesis streams.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-s3":{"id":"reference/Connectors/capture-connectors/amazon-s3","title":"Amazon S3","description":"This connector captures data from an Amazon S3 bucket.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-sqs":{"id":"reference/Connectors/capture-connectors/amazon-sqs","title":"Amazon SQS","description":"This connector captures data from Amazon Simple Queue Service (SQS) into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amplitude":{"id":"reference/Connectors/capture-connectors/amplitude","title":"Amplitude","description":"This connector captures data from Amplitude into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/apache-kafka":{"id":"reference/Connectors/capture-connectors/apache-kafka","title":"Apache Kafka","description":"This connector captures streaming data from Apache Kafka topics.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/bigquery":{"id":"reference/Connectors/capture-connectors/bigquery","title":"BigQuery","description":"This connector captures data from BigQuery into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/bing-ads":{"id":"reference/Connectors/capture-connectors/bing-ads","title":"Bing Ads","description":"This connector captures data from Bing Ads into Flow collections via the Bing Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/braintree":{"id":"reference/Connectors/capture-connectors/braintree","title":"Braintree","description":"This connector captures data from Braintree into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/braze":{"id":"reference/Connectors/capture-connectors/braze","title":"Braze","description":"This connector captures data from Braze into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/chargebee":{"id":"reference/Connectors/capture-connectors/chargebee","title":"Chargebee","description":"This connector captures data from Chargebee into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/exchange-rates":{"id":"reference/Connectors/capture-connectors/exchange-rates","title":"Exchange Rates API","description":"This connector captures data from the Exchange Rates API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/facebook-marketing":{"id":"reference/Connectors/capture-connectors/facebook-marketing","title":"Facebook Marketing","description":"This connector captures data from the Facebook Marketing API into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/freshdesk":{"id":"reference/Connectors/capture-connectors/freshdesk","title":"Freshdesk","description":"This connector captures Freshdesk data into Flow collections via the Freshdesk API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/gcs":{"id":"reference/Connectors/capture-connectors/gcs","title":"Google Cloud Storage","description":"This connector captures data from a Google Cloud Storage (GCS) bucket.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/github":{"id":"reference/Connectors/capture-connectors/github","title":"GitHub","description":"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub\'s REST API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-ads":{"id":"reference/Connectors/capture-connectors/google-ads","title":"Google Ads","description":"This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-analytics":{"id":"reference/Connectors/capture-connectors/google-analytics","title":"Google Analytics UA","description":"This connector captures data from a view in Google Universal Analytics.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-analytics-4":{"id":"reference/Connectors/capture-connectors/google-analytics-4","title":"Google Analytics 4","description":"This connector captures data from Google Analytics 4 properties into Flow collections via the","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-firestore":{"id":"reference/Connectors/capture-connectors/google-firestore","title":"Google Firestore","description":"This connector captures data from your Google Firestore collections into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-search-console":{"id":"reference/Connectors/capture-connectors/google-search-console","title":"Google Search Console","description":"This connector captures data from Google Search Console into Flow collections via the Google Search Console API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-sheets":{"id":"reference/Connectors/capture-connectors/google-sheets","title":"Google Sheets","description":"This connector captures data from a Google Sheets spreadsheet.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/greenhouse":{"id":"reference/Connectors/capture-connectors/greenhouse","title":"Greenhouse","description":"This connector captures data from Greenhouse into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/harvest":{"id":"reference/Connectors/capture-connectors/harvest","title":"Harvest","description":"This connector captures data from Harvest into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/http-file":{"id":"reference/Connectors/capture-connectors/http-file","title":"HTTP File","description":"This connector captures data from an HTTP endpoint into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/http-ingest":{"id":"reference/Connectors/capture-connectors/http-ingest","title":"HTTP Ingest (Webhook)","description":"The HTTP Ingest connector allows you to capture data from incoming HTTP requests.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/hubspot":{"id":"reference/Connectors/capture-connectors/hubspot","title":"Hubspot","description":"This connector captures data from a Hubspot account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/instagram":{"id":"reference/Connectors/capture-connectors/instagram","title":"Instagram","description":"This connector captures data from Instagram into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/intercom":{"id":"reference/Connectors/capture-connectors/intercom","title":"Intercom","description":"This connector captures data from Intercom into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/iterable":{"id":"reference/Connectors/capture-connectors/iterable","title":"Iterable","description":"This connector captures data from Iterable into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/jira":{"id":"reference/Connectors/capture-connectors/jira","title":"Jira","description":"This connector captures data from Jira into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/klaviyo":{"id":"reference/Connectors/capture-connectors/klaviyo","title":"Klaviyo","description":"This connector captures data from Klaviyo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/linkedin-ads":{"id":"reference/Connectors/capture-connectors/linkedin-ads","title":"LinkedIn Ads","description":"This connector captures data from LinkedIn Ads into Flow collections through the LinkedIn Marketing API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mailchimp":{"id":"reference/Connectors/capture-connectors/mailchimp","title":"Mailchimp","description":"This connector captures data from a Mailchimp account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mariadb":{"id":"reference/Connectors/capture-connectors/mariadb","title":"MariaDB","description":"This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/marketo":{"id":"reference/Connectors/capture-connectors/marketo","title":"Marketo","description":"This connector captures data from Marketo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mixpanel":{"id":"reference/Connectors/capture-connectors/mixpanel","title":"MixPanel","description":"This connector captures data from MixPanel into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mongodb":{"id":"reference/Connectors/capture-connectors/mongodb","title":"MongoDB","description":"This connector captures data from your MongoDB collections into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MySQL":{"id":"reference/Connectors/capture-connectors/MySQL","title":"MySQL","description":"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/netsuite":{"id":"reference/Connectors/capture-connectors/netsuite","title":"NetSuite","description":"This connector captures data from NetSuite into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/notion":{"id":"reference/Connectors/capture-connectors/notion","title":"Notion","description":"This connector captures data from Notion into Flow collections via the Notion API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/oracle-db":{"id":"reference/Connectors/capture-connectors/oracle-db","title":"OracleDB","description":"This connector captures data from OracleDB into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/paypal-transaction":{"id":"reference/Connectors/capture-connectors/paypal-transaction","title":"Paypal Transaction","description":"This connector captures data from Paypal Transaction into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/pinterest":{"id":"reference/Connectors/capture-connectors/pinterest","title":"Pinterest","description":"This connector captures data from Pinterest into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/postgres-batch":{"id":"reference/Connectors/capture-connectors/postgres-batch","title":"PostgreSQL Batch Query Connector","description":"This connector captures data from Postgres into Flow collections by periodically","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/postgres-heroku":{"id":"reference/Connectors/capture-connectors/postgres-heroku","title":"Postgres (Heroku)","description":"This connector captures data from Postgres into Flow collections. It is specifically for DBs that don\'t support write ahead logs.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL":{"id":"reference/Connectors/capture-connectors/PostgreSQL","title":"PostgreSQL","description":"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/README":{"id":"reference/Connectors/capture-connectors/README","title":"Capture connectors","description":"Estuary\'s available capture connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/recharge":{"id":"reference/Connectors/capture-connectors/recharge","title":"Recharge","description":"This connector captures data from Recharge into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/salesforce":{"id":"reference/Connectors/capture-connectors/salesforce","title":"Salesforce \u2014 Historical data","description":"This connector captures data from Salesforce objects into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/salesforce-real-time":{"id":"reference/Connectors/capture-connectors/salesforce-real-time","title":"Salesforce \u2014 Real-time data","description":"This connector captures data from Salesforce objects into Flow collections in real time via the Salesforce PushTopic API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sendgrid":{"id":"reference/Connectors/capture-connectors/sendgrid","title":"SendGrid","description":"This connector captures data from SendGrid into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sentry":{"id":"reference/Connectors/capture-connectors/sentry","title":"Sentry","description":"This connector captures data from Sentry into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sftp":{"id":"reference/Connectors/capture-connectors/sftp","title":"SFTP","description":"This connector captures data from an SFTP server.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/slack":{"id":"reference/Connectors/capture-connectors/slack","title":"Slack","description":"This connector captures data from Slack into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/snapchat":{"id":"reference/Connectors/capture-connectors/snapchat","title":"Snapchat Marketing","description":"This connector captures data from Snapchat Marketing into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sqlserver":{"id":"reference/Connectors/capture-connectors/sqlserver","title":"Microsoft SQL Server","description":"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/stripe":{"id":"reference/Connectors/capture-connectors/stripe","title":"Stripe","description":"This connector captures data from Stripe into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/survey-monkey":{"id":"reference/Connectors/capture-connectors/survey-monkey","title":"Survey Monkey","description":"This connector captures data from SurveyMonkey surveys into Flow collections via the SurveyMonkey API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/tiktok":{"id":"reference/Connectors/capture-connectors/tiktok","title":"TikTok Marketing","description":"This connector captures data from TikTok marketing campaigns and ads into Flow collections via the TikTok API for Business. It supports production as well as sandbox accounts.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/twilio":{"id":"reference/Connectors/capture-connectors/twilio","title":"Twilio","description":"This connector captures data from Twilio into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/woocommerce":{"id":"reference/Connectors/capture-connectors/woocommerce","title":"WooCommerce","description":"This connector captures data from WooCommerce into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/youtube-analytics":{"id":"reference/Connectors/capture-connectors/youtube-analytics","title":"YouTube Analytics","description":"This connector captures data from YouTube Analytics into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/zendesk-chat":{"id":"reference/Connectors/capture-connectors/zendesk-chat","title":"Zendesk Chat","description":"This connector captures data from Zendesk into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/zendesk-support":{"id":"reference/Connectors/capture-connectors/zendesk-support","title":"Zendesk Support","description":"This connector captures data from Zendesk into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/alloydb":{"id":"reference/Connectors/materialization-connectors/alloydb","title":"AlloyDB","description":"This connector materializes Flow collections into tables in an AlloyDB database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-dynamodb":{"id":"reference/Connectors/materialization-connectors/amazon-dynamodb","title":"Amazon DynamoDB","description":"This connector materializes Flow collections into tables in an Amazon DynamoDB.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-redshift":{"id":"reference/Connectors/materialization-connectors/amazon-redshift","title":"Amazon Redshift","description":"This connector materializes Flow collections into tables in an Amazon Redshift database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/BigQuery":{"id":"reference/Connectors/materialization-connectors/BigQuery","title":"Google BigQuery","description":"This Flow connector materializes Flow collections into tables within a Google BigQuery dataset.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Elasticsearch":{"id":"reference/Connectors/materialization-connectors/Elasticsearch","title":"Elasticsearch","description":"This connector materializes Flow collections into indices in an Elasticsearch cluster.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Firebolt":{"id":"reference/Connectors/materialization-connectors/Firebolt","title":"Firebolt","description":"This Flow connector materializes delta updates of Flow collections into Firebolt FACT or DIMENSION tables.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/google-pubsub":{"id":"reference/Connectors/materialization-connectors/google-pubsub","title":"Google Cloud Pub/Sub","description":"This connector materializes Flow collections into topics in Google Cloud Pub/Sub.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Google-sheets":{"id":"reference/Connectors/materialization-connectors/Google-sheets","title":"Google Sheets","description":"This connector materializes Flow collections into sheets in a Google Sheets spreadsheet.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/mongodb":{"id":"reference/Connectors/materialization-connectors/mongodb","title":"MongoDB","description":"This connector materializes data from your Flow collections to your MongoDB collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/mysql":{"id":"reference/Connectors/materialization-connectors/mysql","title":"MySQL","description":"This connector materializes Flow collections into tables in a MySQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Parquet":{"id":"reference/Connectors/materialization-connectors/Parquet","title":"Apache Parquet in S3","description":"This connector materializes delta updates of Flow collections into an S3 bucket in the Apache Parquet format.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/pinecone":{"id":"reference/Connectors/materialization-connectors/pinecone","title":"Pinecone","description":"This connector materializes Flow collections into namespaces in a Pinecone index.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/PostgreSQL":{"id":"reference/Connectors/materialization-connectors/PostgreSQL","title":"PostgreSQL","description":"This connector materializes Flow collections into tables in a PostgreSQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/README":{"id":"reference/Connectors/materialization-connectors/README","title":"Materialization connectors","description":"Estuary\'s available materialization connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Rockset":{"id":"reference/Connectors/materialization-connectors/Rockset","title":"Rockset","description":"This Flow connector materializes delta updates of your Flow collections into Rockset collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Snowflake":{"id":"reference/Connectors/materialization-connectors/Snowflake","title":"Snowflake","description":"This connector materializes Flow collections into tables in a Snowflake database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/SQLite":{"id":"reference/Connectors/materialization-connectors/SQLite","title":"SQLite","description":"This connector materializes Flow collections into an ephemeral SQLite database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/timescaledb":{"id":"reference/Connectors/materialization-connectors/timescaledb","title":"TimescaleDB","description":"This connector materializes Flow collections into tables in a TimescaleDB database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-protocol":{"id":"reference/Connectors/materialization-protocol","title":"Materialization Protocol","description":"Materializations are processed as cooperative transactions between the Flow","sidebar":"tutorialSidebar"},"reference/Connectors/README":{"id":"reference/Connectors/README","title":"Connectors","description":"A current list and configuration details for Estuary\'s connectors can be found on the following pages:","sidebar":"tutorialSidebar"},"reference/editing":{"id":"reference/editing","title":"Editing considerations","description":"You can edit the components of your Data Flows in the Flow web app and with flowctl, but before you do so, it\'s important to consider the implications of your changes.","sidebar":"tutorialSidebar"},"reference/organizing-catalogs":{"id":"reference/organizing-catalogs","title":"Organizing a Flow catalog","description":"This page is outdated. It does not reflect the current state of the Flow web application and the","sidebar":"tutorialSidebar"},"reference/reduction-strategies/append":{"id":"reference/reduction-strategies/append","title":"append","description":"Using the append reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/composing-with-conditionals":{"id":"reference/reduction-strategies/composing-with-conditionals","title":"Composing with conditionals","description":"Using conditionals statements to fine-tune reductions","sidebar":"tutorialSidebar"},"reference/reduction-strategies/firstwritewins-and-lastwritewins":{"id":"reference/reduction-strategies/firstwritewins-and-lastwritewins","title":"firstWriteWins and lastWriteWins","description":"Using the firstWriteWins and lastWriteWins reduction strategies","sidebar":"tutorialSidebar"},"reference/reduction-strategies/merge":{"id":"reference/reduction-strategies/merge","title":"merge","description":"Using the merge reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/minimize-and-maximize":{"id":"reference/reduction-strategies/minimize-and-maximize","title":"minimize and maximize","description":"Using the minimize and maximize reduction strategies","sidebar":"tutorialSidebar"},"reference/reduction-strategies/README":{"id":"reference/reduction-strategies/README","title":"Reduction strategies","description":"Flow\'s default reduction behaviors and available strategies to customize them","sidebar":"tutorialSidebar"},"reference/reduction-strategies/set":{"id":"reference/reduction-strategies/set","title":"set","description":"Using the set reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/sum":{"id":"reference/reduction-strategies/sum","title":"sum","description":"Using the sum reduction strategy","sidebar":"tutorialSidebar"},"reference/working-logs-stats":{"id":"reference/working-logs-stats","title":"Working with logs and statistics","description":"Your logs and stats collections","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.34430707.js b/assets/js/935f2afb.34430707.js new file mode 100644 index 0000000000..759d463433 --- /dev/null +++ b/assets/js/935f2afb.34430707.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Who should use Flow?","href":"/overview/who-should-use-flow","docId":"overview/who-should-use-flow"},{"type":"link","label":"Comparisons","href":"/overview/comparisons","docId":"overview/comparisons"}],"href":"/"},{"type":"category","label":"Get started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Registration and setup","href":"/getting-started/installation","docId":"getting-started/installation"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create your first dataflow with Amazon S3 and Snowflake","href":"/getting-started/tutorials/dataflow-s3-snowflake","docId":"getting-started/tutorials/dataflow-s3-snowflake"},{"type":"link","label":"Create a real-time materialized view in PostgreSQL","href":"/getting-started/tutorials/continuous-materialized-view","docId":"getting-started/tutorials/continuous-materialized-view"}],"href":"/getting-started/tutorials/"}]},{"type":"category","label":"User guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a basic Data Flow","href":"/guides/create-dataflow","docId":"guides/create-dataflow"},{"type":"category","label":"Create a Data Flow for specific systems","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Google Cloud Firestore to Snowflake","href":"/guides/system-specific-dataflows/firestore-to-dwh","docId":"guides/system-specific-dataflows/firestore-to-dwh"},{"type":"link","label":"Amazon S3 to Snowflake","href":"/guides/system-specific-dataflows/s3-to-snowflake","docId":"guides/system-specific-dataflows/s3-to-snowflake"}],"href":"/guides/system-specific-dataflows/"},{"type":"link","label":"Edit Data Flows in the web app","href":"/guides/edit-data-flows","docId":"guides/edit-data-flows"},{"type":"category","label":"Use flowctl","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Edit a Flow specification locally","href":"/guides/flowctl/edit-specification-locally","docId":"guides/flowctl/edit-specification-locally"},{"type":"link","label":"Edit a draft created in the web app","href":"/guides/flowctl/edit-draft-from-webapp","docId":"guides/flowctl/edit-draft-from-webapp"},{"type":"link","label":"Create a derivation with flowctl","href":"/guides/flowctl/create-derivation","docId":"guides/flowctl/create-derivation"},{"type":"link","label":"Troubleshoot a task with flowctl","href":"/guides/flowctl/troubleshoot-task","docId":"guides/flowctl/troubleshoot-task"}],"href":"/guides/flowctl/"},{"type":"link","label":"Configure connections with SSH tunneling","href":"/guides/connect-network","docId":"guides/connect-network"},{"type":"link","label":"Customize materialized fields","href":"/guides/customize-materialization-fields","docId":"guides/customize-materialization-fields"}],"href":"/guides/"},{"type":"category","label":"Concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Catalog","href":"/concepts/catalogs","docId":"concepts/catalogs"},{"type":"link","label":"Captures","href":"/concepts/captures","docId":"concepts/captures"},{"type":"link","label":"Collections","href":"/concepts/collections","docId":"concepts/collections"},{"type":"link","label":"Materializations","href":"/concepts/materialization","docId":"concepts/materialization"},{"type":"link","label":"Connectors","href":"/concepts/connectors","docId":"concepts/connectors"},{"type":"link","label":"Derivations","href":"/concepts/derivations","docId":"concepts/derivations"},{"type":"link","label":"Web application","href":"/concepts/web-app","docId":"concepts/web-app"},{"type":"link","label":"flowctl","href":"/concepts/flowctl","docId":"concepts/flowctl"},{"type":"link","label":"Imports","href":"/concepts/import","docId":"concepts/import"},{"type":"link","label":"Schemas","href":"/concepts/schemas","docId":"concepts/schemas"},{"type":"link","label":"Storage mappings","href":"/concepts/storage-mappings","docId":"concepts/storage-mappings"},{"type":"link","label":"Tests","href":"/concepts/tests","docId":"concepts/tests"},{"type":"category","label":"Advanced concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Journals","href":"/concepts/advanced/journals","docId":"concepts/advanced/journals"},{"type":"link","label":"Logs and statistics","href":"/concepts/advanced/logs-stats","docId":"concepts/advanced/logs-stats"},{"type":"link","label":"Projections","href":"/concepts/advanced/projections","docId":"concepts/advanced/projections"},{"type":"link","label":"Task shards","href":"/concepts/advanced/shards","docId":"concepts/advanced/shards"}]}],"href":"/concepts/"},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Connectors","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Capture connectors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Aircall","href":"/reference/Connectors/capture-connectors/aircall","docId":"reference/Connectors/capture-connectors/aircall"},{"type":"link","label":"Airtable","href":"/reference/Connectors/capture-connectors/airtable","docId":"reference/Connectors/capture-connectors/airtable"},{"type":"link","label":"AlloyDB","href":"/reference/Connectors/capture-connectors/alloydb","docId":"reference/Connectors/capture-connectors/alloydb"},{"type":"link","label":"Alpaca","href":"/reference/Connectors/capture-connectors/alpaca","docId":"reference/Connectors/capture-connectors/alpaca"},{"type":"link","label":"Amazon Ads","href":"/reference/Connectors/capture-connectors/amazon-ads","docId":"reference/Connectors/capture-connectors/amazon-ads"},{"type":"link","label":"Amazon DynamoDB","href":"/reference/Connectors/capture-connectors/amazon-dynamodb","docId":"reference/Connectors/capture-connectors/amazon-dynamodb"},{"type":"link","label":"Amazon Kinesis","href":"/reference/Connectors/capture-connectors/amazon-kinesis","docId":"reference/Connectors/capture-connectors/amazon-kinesis"},{"type":"link","label":"Amazon S3","href":"/reference/Connectors/capture-connectors/amazon-s3","docId":"reference/Connectors/capture-connectors/amazon-s3"},{"type":"link","label":"Amazon SQS","href":"/reference/Connectors/capture-connectors/amazon-sqs","docId":"reference/Connectors/capture-connectors/amazon-sqs"},{"type":"link","label":"Amplitude","href":"/reference/Connectors/capture-connectors/amplitude","docId":"reference/Connectors/capture-connectors/amplitude"},{"type":"link","label":"Apache Kafka","href":"/reference/Connectors/capture-connectors/apache-kafka","docId":"reference/Connectors/capture-connectors/apache-kafka"},{"type":"link","label":"BigQuery","href":"/reference/Connectors/capture-connectors/bigquery","docId":"reference/Connectors/capture-connectors/bigquery"},{"type":"link","label":"Bing Ads","href":"/reference/Connectors/capture-connectors/bing-ads","docId":"reference/Connectors/capture-connectors/bing-ads"},{"type":"link","label":"Braintree","href":"/reference/Connectors/capture-connectors/braintree","docId":"reference/Connectors/capture-connectors/braintree"},{"type":"link","label":"Braze","href":"/reference/Connectors/capture-connectors/braze","docId":"reference/Connectors/capture-connectors/braze"},{"type":"link","label":"Chargebee","href":"/reference/Connectors/capture-connectors/chargebee","docId":"reference/Connectors/capture-connectors/chargebee"},{"type":"link","label":"Exchange Rates API","href":"/reference/Connectors/capture-connectors/exchange-rates","docId":"reference/Connectors/capture-connectors/exchange-rates"},{"type":"link","label":"Facebook Marketing","href":"/reference/Connectors/capture-connectors/facebook-marketing","docId":"reference/Connectors/capture-connectors/facebook-marketing"},{"type":"link","label":"Freshdesk","href":"/reference/Connectors/capture-connectors/freshdesk","docId":"reference/Connectors/capture-connectors/freshdesk"},{"type":"link","label":"GitHub","href":"/reference/Connectors/capture-connectors/github","docId":"reference/Connectors/capture-connectors/github"},{"type":"link","label":"GitlLab","href":"/reference/Connectors/capture-connectors/gitlab","docId":"reference/Connectors/capture-connectors/gitlab"},{"type":"link","label":"Google Ads","href":"/reference/Connectors/capture-connectors/google-ads","docId":"reference/Connectors/capture-connectors/google-ads"},{"type":"link","label":"Google Analytics 4","href":"/reference/Connectors/capture-connectors/google-analytics-4","docId":"reference/Connectors/capture-connectors/google-analytics-4"},{"type":"link","label":"OracleDB","href":"/reference/Connectors/capture-connectors/oracle-db","docId":"reference/Connectors/capture-connectors/oracle-db"},{"type":"link","label":"Pinterest","href":"/reference/Connectors/capture-connectors/pinterest","docId":"reference/Connectors/capture-connectors/pinterest"},{"type":"link","label":"Postgres (Heroku)","href":"/reference/Connectors/capture-connectors/postgres-heroku","docId":"reference/Connectors/capture-connectors/postgres-heroku"},{"type":"link","label":"WooCommerce","href":"/reference/Connectors/capture-connectors/woocommerce","docId":"reference/Connectors/capture-connectors/woocommerce"},{"type":"link","label":"Google Cloud Storage","href":"/reference/Connectors/capture-connectors/gcs","docId":"reference/Connectors/capture-connectors/gcs"},{"type":"link","label":"Google Analytics UA","href":"/reference/Connectors/capture-connectors/google-analytics","docId":"reference/Connectors/capture-connectors/google-analytics"},{"type":"link","label":"Google Firestore","href":"/reference/Connectors/capture-connectors/google-firestore","docId":"reference/Connectors/capture-connectors/google-firestore"},{"type":"link","label":"Google Search Console","href":"/reference/Connectors/capture-connectors/google-search-console","docId":"reference/Connectors/capture-connectors/google-search-console"},{"type":"link","label":"Google Sheets","href":"/reference/Connectors/capture-connectors/google-sheets","docId":"reference/Connectors/capture-connectors/google-sheets"},{"type":"link","label":"Greenhouse","href":"/reference/Connectors/capture-connectors/greenhouse","docId":"reference/Connectors/capture-connectors/greenhouse"},{"type":"link","label":"Harvest","href":"/reference/Connectors/capture-connectors/harvest","docId":"reference/Connectors/capture-connectors/harvest"},{"type":"link","label":"HTTP File","href":"/reference/Connectors/capture-connectors/http-file","docId":"reference/Connectors/capture-connectors/http-file"},{"type":"link","label":"HTTP Ingest (Webhook)","href":"/reference/Connectors/capture-connectors/http-ingest","docId":"reference/Connectors/capture-connectors/http-ingest"},{"type":"link","label":"Hubspot","href":"/reference/Connectors/capture-connectors/hubspot","docId":"reference/Connectors/capture-connectors/hubspot"},{"type":"link","label":"Instagram","href":"/reference/Connectors/capture-connectors/instagram","docId":"reference/Connectors/capture-connectors/instagram"},{"type":"link","label":"Intercom","href":"/reference/Connectors/capture-connectors/intercom","docId":"reference/Connectors/capture-connectors/intercom"},{"type":"link","label":"Iterable","href":"/reference/Connectors/capture-connectors/iterable","docId":"reference/Connectors/capture-connectors/iterable"},{"type":"link","label":"Jira","href":"/reference/Connectors/capture-connectors/jira","docId":"reference/Connectors/capture-connectors/jira"},{"type":"link","label":"Klaviyo","href":"/reference/Connectors/capture-connectors/klaviyo","docId":"reference/Connectors/capture-connectors/klaviyo"},{"type":"link","label":"LinkedIn Ads","href":"/reference/Connectors/capture-connectors/linkedin-ads","docId":"reference/Connectors/capture-connectors/linkedin-ads"},{"type":"link","label":"Mailchimp","href":"/reference/Connectors/capture-connectors/mailchimp","docId":"reference/Connectors/capture-connectors/mailchimp"},{"type":"link","label":"MariaDB","href":"/reference/Connectors/capture-connectors/mariadb","docId":"reference/Connectors/capture-connectors/mariadb"},{"type":"link","label":"Marketo","href":"/reference/Connectors/capture-connectors/marketo","docId":"reference/Connectors/capture-connectors/marketo"},{"type":"link","label":"MixPanel","href":"/reference/Connectors/capture-connectors/mixpanel","docId":"reference/Connectors/capture-connectors/mixpanel"},{"type":"link","label":"Microsoft SQL Server","href":"/reference/Connectors/capture-connectors/sqlserver","docId":"reference/Connectors/capture-connectors/sqlserver"},{"type":"link","label":"MongoDB","href":"/reference/Connectors/capture-connectors/mongodb","docId":"reference/Connectors/capture-connectors/mongodb"},{"type":"link","label":"MySQL","href":"/reference/Connectors/capture-connectors/MySQL","docId":"reference/Connectors/capture-connectors/MySQL"},{"type":"link","label":"NetSuite","href":"/reference/Connectors/capture-connectors/netsuite","docId":"reference/Connectors/capture-connectors/netsuite"},{"type":"link","label":"Notion","href":"/reference/Connectors/capture-connectors/notion","docId":"reference/Connectors/capture-connectors/notion"},{"type":"link","label":"Paypal Transaction","href":"/reference/Connectors/capture-connectors/paypal-transaction","docId":"reference/Connectors/capture-connectors/paypal-transaction"},{"type":"link","label":"PostgreSQL","href":"/reference/Connectors/capture-connectors/PostgreSQL","docId":"reference/Connectors/capture-connectors/PostgreSQL"},{"type":"link","label":"PostgreSQL Batch Query Connector","href":"/reference/Connectors/capture-connectors/postgres-batch","docId":"reference/Connectors/capture-connectors/postgres-batch"},{"type":"link","label":"Recharge","href":"/reference/Connectors/capture-connectors/recharge","docId":"reference/Connectors/capture-connectors/recharge"},{"type":"link","label":"Salesforce \u2014 Real-time data","href":"/reference/Connectors/capture-connectors/salesforce-real-time","docId":"reference/Connectors/capture-connectors/salesforce-real-time"},{"type":"link","label":"Salesforce \u2014 Historical data","href":"/reference/Connectors/capture-connectors/salesforce","docId":"reference/Connectors/capture-connectors/salesforce"},{"type":"link","label":"SendGrid","href":"/reference/Connectors/capture-connectors/sendgrid","docId":"reference/Connectors/capture-connectors/sendgrid"},{"type":"link","label":"Sentry","href":"/reference/Connectors/capture-connectors/sentry","docId":"reference/Connectors/capture-connectors/sentry"},{"type":"link","label":"SFTP","href":"/reference/Connectors/capture-connectors/sftp","docId":"reference/Connectors/capture-connectors/sftp"},{"type":"link","label":"Slack","href":"/reference/Connectors/capture-connectors/slack","docId":"reference/Connectors/capture-connectors/slack"},{"type":"link","label":"Snapchat Marketing","href":"/reference/Connectors/capture-connectors/snapchat","docId":"reference/Connectors/capture-connectors/snapchat"},{"type":"link","label":"Stripe","href":"/reference/Connectors/capture-connectors/stripe","docId":"reference/Connectors/capture-connectors/stripe"},{"type":"link","label":"Survey Monkey","href":"/reference/Connectors/capture-connectors/survey-monkey","docId":"reference/Connectors/capture-connectors/survey-monkey"},{"type":"link","label":"TikTok Marketing","href":"/reference/Connectors/capture-connectors/tiktok","docId":"reference/Connectors/capture-connectors/tiktok"},{"type":"link","label":"Twilio","href":"/reference/Connectors/capture-connectors/twilio","docId":"reference/Connectors/capture-connectors/twilio"},{"type":"link","label":"YouTube Analytics","href":"/reference/Connectors/capture-connectors/youtube-analytics","docId":"reference/Connectors/capture-connectors/youtube-analytics"},{"type":"link","label":"Zendesk Chat","href":"/reference/Connectors/capture-connectors/zendesk-chat","docId":"reference/Connectors/capture-connectors/zendesk-chat"},{"type":"link","label":"Zendesk Support","href":"/reference/Connectors/capture-connectors/zendesk-support","docId":"reference/Connectors/capture-connectors/zendesk-support"}],"href":"/reference/Connectors/capture-connectors/"},{"type":"category","label":"Materialization connectors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"AlloyDB","href":"/reference/Connectors/materialization-connectors/alloydb","docId":"reference/Connectors/materialization-connectors/alloydb"},{"type":"link","label":"Amazon DynamoDB","href":"/reference/Connectors/materialization-connectors/amazon-dynamodb","docId":"reference/Connectors/materialization-connectors/amazon-dynamodb"},{"type":"link","label":"Apache Parquet in S3","href":"/reference/Connectors/materialization-connectors/Parquet","docId":"reference/Connectors/materialization-connectors/Parquet"},{"type":"link","label":"Elasticsearch","href":"/reference/Connectors/materialization-connectors/Elasticsearch","docId":"reference/Connectors/materialization-connectors/Elasticsearch"},{"type":"link","label":"Firebolt","href":"/reference/Connectors/materialization-connectors/Firebolt","docId":"reference/Connectors/materialization-connectors/Firebolt"},{"type":"link","label":"Google BigQuery","href":"/reference/Connectors/materialization-connectors/BigQuery","docId":"reference/Connectors/materialization-connectors/BigQuery"},{"type":"link","label":"Google Cloud Pub/Sub","href":"/reference/Connectors/materialization-connectors/google-pubsub","docId":"reference/Connectors/materialization-connectors/google-pubsub"},{"type":"link","label":"Google Sheets","href":"/reference/Connectors/materialization-connectors/Google-sheets","docId":"reference/Connectors/materialization-connectors/Google-sheets"},{"type":"link","label":"MongoDB","href":"/reference/Connectors/materialization-connectors/mongodb","docId":"reference/Connectors/materialization-connectors/mongodb"},{"type":"link","label":"PostgreSQL","href":"/reference/Connectors/materialization-connectors/PostgreSQL","docId":"reference/Connectors/materialization-connectors/PostgreSQL"},{"type":"link","label":"Rockset","href":"/reference/Connectors/materialization-connectors/Rockset","docId":"reference/Connectors/materialization-connectors/Rockset"},{"type":"link","label":"SQLite","href":"/reference/Connectors/materialization-connectors/SQLite","docId":"reference/Connectors/materialization-connectors/SQLite"},{"type":"link","label":"Snowflake","href":"/reference/Connectors/materialization-connectors/Snowflake","docId":"reference/Connectors/materialization-connectors/Snowflake"},{"type":"link","label":"Amazon Redshift","href":"/reference/Connectors/materialization-connectors/amazon-redshift","docId":"reference/Connectors/materialization-connectors/amazon-redshift"},{"type":"link","label":"MySQL","href":"/reference/Connectors/materialization-connectors/mysql","docId":"reference/Connectors/materialization-connectors/mysql"},{"type":"link","label":"Pinecone","href":"/reference/Connectors/materialization-connectors/pinecone","docId":"reference/Connectors/materialization-connectors/pinecone"},{"type":"link","label":"TimescaleDB","href":"/reference/Connectors/materialization-connectors/timescaledb","docId":"reference/Connectors/materialization-connectors/timescaledb"}],"href":"/reference/Connectors/materialization-connectors/"},{"type":"link","label":"Materialization Protocol","href":"/reference/Connectors/materialization-protocol","docId":"reference/Connectors/materialization-protocol"}],"href":"/reference/Connectors/"},{"type":"link","label":"Authorizing users and authenticating with Flow","href":"/reference/authentication","docId":"reference/authentication"},{"type":"link","label":"Editing considerations","href":"/reference/editing","docId":"reference/editing"},{"type":"link","label":"Configuring task shards","href":"/reference/Configuring-task-shards","docId":"reference/Configuring-task-shards"},{"type":"category","label":"Reduction strategies","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"append","href":"/reference/reduction-strategies/append","docId":"reference/reduction-strategies/append"},{"type":"link","label":"firstWriteWins and lastWriteWins","href":"/reference/reduction-strategies/firstwritewins-and-lastwritewins","docId":"reference/reduction-strategies/firstwritewins-and-lastwritewins"},{"type":"link","label":"merge","href":"/reference/reduction-strategies/merge","docId":"reference/reduction-strategies/merge"},{"type":"link","label":"minimize and maximize","href":"/reference/reduction-strategies/minimize-and-maximize","docId":"reference/reduction-strategies/minimize-and-maximize"},{"type":"link","label":"set","href":"/reference/reduction-strategies/set","docId":"reference/reduction-strategies/set"},{"type":"link","label":"sum","href":"/reference/reduction-strategies/sum","docId":"reference/reduction-strategies/sum"},{"type":"link","label":"Composing with conditionals","href":"/reference/reduction-strategies/composing-with-conditionals","docId":"reference/reduction-strategies/composing-with-conditionals"}],"href":"/reference/reduction-strategies/"},{"type":"link","label":"Working with logs and statistics","href":"/reference/working-logs-stats","docId":"reference/working-logs-stats"},{"type":"link","label":"Organizing a Flow catalog","href":"/reference/organizing-catalogs","docId":"reference/organizing-catalogs"}]}]},"docs":{"concepts/advanced/journals":{"id":"concepts/advanced/journals","title":"Journals","description":"Journals are an advanced concept of Flow.","sidebar":"tutorialSidebar"},"concepts/advanced/logs-stats":{"id":"concepts/advanced/logs-stats","title":"Logs and statistics","description":"Flow collects logs and statistics of catalog tasks to aid in debugging and refinement of your workflows.","sidebar":"tutorialSidebar"},"concepts/advanced/projections":{"id":"concepts/advanced/projections","title":"Projections","description":"Projections are an advanced concept of Flow.","sidebar":"tutorialSidebar"},"concepts/advanced/shards":{"id":"concepts/advanced/shards","title":"Task shards","description":"Catalog tasks \u2014 captures, derivations, and materializations \u2014","sidebar":"tutorialSidebar"},"concepts/captures":{"id":"concepts/captures","title":"Captures","description":"A capture is how Flow ingests data from an external source.","sidebar":"tutorialSidebar"},"concepts/catalogs":{"id":"concepts/catalogs","title":"Catalog","description":"The catalog is the set of published entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more.","sidebar":"tutorialSidebar"},"concepts/collections":{"id":"concepts/collections","title":"Collections","description":"The documents of your Data Flows are stored in collections:","sidebar":"tutorialSidebar"},"concepts/connectors":{"id":"concepts/connectors","title":"Connectors","description":"Connectors bridge the gap between Flow and","sidebar":"tutorialSidebar"},"concepts/derivations":{"id":"concepts/derivations","title":"Derivations","description":"At times, the collections generated by a capture may not be suitable for your needs.","sidebar":"tutorialSidebar"},"concepts/flowctl":{"id":"concepts/flowctl","title":"flowctl","description":"There are two ways to work with Flow: through the web app, and using the flowctl command-line interface.","sidebar":"tutorialSidebar"},"concepts/import":{"id":"concepts/import","title":"Imports","description":"When you work on a draft Data Flow using flowctl draft,","sidebar":"tutorialSidebar"},"concepts/materialization":{"id":"concepts/materialization","title":"Materializations","description":"A materialization is how Flow pushes data to an external destination.","sidebar":"tutorialSidebar"},"concepts/README":{"id":"concepts/README","title":"Concepts","description":"Flow helps you define data pipelines, known as Data Flows, that connect multiple data systems, APIs, and storage, and optionally transform data along the way.","sidebar":"tutorialSidebar"},"concepts/schemas":{"id":"concepts/schemas","title":"Schemas","description":"Flow documents and collections always have an associated schema","sidebar":"tutorialSidebar"},"concepts/storage-mappings":{"id":"concepts/storage-mappings","title":"Storage mappings","description":"Flow stores the documents that comprise your collections in a cloud storage bucket.","sidebar":"tutorialSidebar"},"concepts/tests":{"id":"concepts/tests","title":"Tests","description":"The Flow web application automatically performs basic tests to validate the configurations of captures and materializations.","sidebar":"tutorialSidebar"},"concepts/web-app":{"id":"concepts/web-app","title":"Web application","description":"Flow\'s web application is at dashboard.estuary.dev.","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Registration and setup","description":"Estuary Flow is a fully managed web application that also offers a robust CLI.","sidebar":"tutorialSidebar"},"getting-started/tutorials/continuous-materialized-view":{"id":"getting-started/tutorials/continuous-materialized-view","title":"Create a real-time materialized view in PostgreSQL","description":"PostgreSQL supports materialized views: database objects that contain the result of a query, usually a focused subset of a large dataset.","sidebar":"tutorialSidebar"},"getting-started/tutorials/dataflow-s3-snowflake":{"id":"getting-started/tutorials/dataflow-s3-snowflake","title":"Create your first dataflow with Amazon S3 and Snowflake","description":"In this tutorial, you\'ll create your first complete Data Flow with Estuary Flow using publicly available data.","sidebar":"tutorialSidebar"},"getting-started/tutorials/README":{"id":"getting-started/tutorials/README","title":"Flow tutorials","description":"Flow tutorials are complete learning experiences that help you get to know Flow using sample data.","sidebar":"tutorialSidebar"},"guides/connect-network":{"id":"guides/connect-network","title":"Configure connections with SSH tunneling","description":"Flow connects to certain types of endpoints \u2014 generally databases \u2014 using their IP address and port.","sidebar":"tutorialSidebar"},"guides/create-dataflow":{"id":"guides/create-dataflow","title":"Create a basic Data Flow","description":"This guide walks you through the process of creating an end-to-end Data Flow.","sidebar":"tutorialSidebar"},"guides/customize-materialization-fields":{"id":"guides/customize-materialization-fields","title":"Customize materialized fields","description":"When you first materialize a collection to an endpoint like a database or data warehouse,","sidebar":"tutorialSidebar"},"guides/edit-data-flows":{"id":"guides/edit-data-flows","title":"Edit Data Flows in the web app","description":"You can edit existing captures, collection schemas, and materializations in the Flow web app.","sidebar":"tutorialSidebar"},"guides/flowctl/create-derivation":{"id":"guides/flowctl/create-derivation","title":"Create a derivation with flowctl","description":"Once you\'re familiar with creating a basic Data Flow, you can take things a step further","sidebar":"tutorialSidebar"},"guides/flowctl/edit-draft-from-webapp":{"id":"guides/flowctl/edit-draft-from-webapp","title":"Edit a draft created in the web app","description":"When you create or edit tasks in the web app, your work is periodically saved as a draft.","sidebar":"tutorialSidebar"},"guides/flowctl/edit-specification-locally":{"id":"guides/flowctl/edit-specification-locally","title":"Edit a Flow specification locally","description":"The Flow web application is designed to make the most common Flow tasks quick and easy.","sidebar":"tutorialSidebar"},"guides/flowctl/README":{"id":"guides/flowctl/README","title":"flowctl guides","description":"The guides in this section cover common workflows using the Estuary Flow CLI, flowctl.","sidebar":"tutorialSidebar"},"guides/flowctl/troubleshoot-task":{"id":"guides/flowctl/troubleshoot-task","title":"Troubleshoot a task with flowctl","description":"The flowctl logs and stats subcommands have been temporarily disabled while we work on some important changes to our authorization system. We expect to have these working again soon. In the meantime, please reach out to us via Slack or email (support@estuary.dev) if you want any help.","sidebar":"tutorialSidebar"},"guides/README":{"id":"guides/README","title":"Flow user guides","description":"In this section, you\'ll find step-by-step guides that walk you through common Flow tasks.","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/firestore-to-dwh":{"id":"guides/system-specific-dataflows/firestore-to-dwh","title":"Google Cloud Firestore to Snowflake","description":"This guide walks you through the process of creating an","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/README":{"id":"guides/system-specific-dataflows/README","title":"System-specific Data Flows","description":"The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination.","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/s3-to-snowflake":{"id":"guides/system-specific-dataflows/s3-to-snowflake","title":"Amazon S3 to Snowflake","description":"This guide walks you through the process of creating an","sidebar":"tutorialSidebar"},"overview/comparisons":{"id":"overview/comparisons","title":"Comparisons","description":"High level explanations of Flow in terms of the systems you already know","sidebar":"tutorialSidebar"},"overview/README":{"id":"overview/README","title":"Flow documentation","description":"Get to know Estuary Flow and learn how to get started.","sidebar":"tutorialSidebar"},"overview/who-should-use-flow":{"id":"overview/who-should-use-flow","title":"Who should use Flow?","description":"Common pain points you might have, and how Flow addresses them.","sidebar":"tutorialSidebar"},"reference/authentication":{"id":"reference/authentication","title":"Authorizing users and authenticating with Flow","description":"Read, write, and admin capabilities over Flow catalogs and the collections that comprise them","sidebar":"tutorialSidebar"},"reference/Configuring-task-shards":{"id":"reference/Configuring-task-shards","title":"Configuring task shards","description":"For some catalog tasks, it\'s helpful to control the behavior of shards","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/aircall":{"id":"reference/Connectors/capture-connectors/aircall","title":"Aircall","description":"This connector captures data from Aircall into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/airtable":{"id":"reference/Connectors/capture-connectors/airtable","title":"Airtable","description":"This connector captures data from Airtable into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/alloydb":{"id":"reference/Connectors/capture-connectors/alloydb","title":"AlloyDB","description":"This connector uses change data capture (CDC) to continuously capture table updates in an AlloyDB database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/alpaca":{"id":"reference/Connectors/capture-connectors/alpaca","title":"Alpaca","description":"This connector captures stock trade data from the Alpaca Market Data API into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-ads":{"id":"reference/Connectors/capture-connectors/amazon-ads","title":"Amazon Ads","description":"This connector captures data from Amazon Ads into Flow collections via the Amazon Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-dynamodb":{"id":"reference/Connectors/capture-connectors/amazon-dynamodb","title":"Amazon DynamoDB","description":"This connector uses DynamoDB streams to continuously capture updates from DynamoDB tables into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-kinesis":{"id":"reference/Connectors/capture-connectors/amazon-kinesis","title":"Amazon Kinesis","description":"This connector captures data from Amazon Kinesis streams.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-s3":{"id":"reference/Connectors/capture-connectors/amazon-s3","title":"Amazon S3","description":"This connector captures data from an Amazon S3 bucket.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-sqs":{"id":"reference/Connectors/capture-connectors/amazon-sqs","title":"Amazon SQS","description":"This connector captures data from Amazon Simple Queue Service (SQS) into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amplitude":{"id":"reference/Connectors/capture-connectors/amplitude","title":"Amplitude","description":"This connector captures data from Amplitude into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/apache-kafka":{"id":"reference/Connectors/capture-connectors/apache-kafka","title":"Apache Kafka","description":"This connector captures streaming data from Apache Kafka topics.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/bigquery":{"id":"reference/Connectors/capture-connectors/bigquery","title":"BigQuery","description":"This connector captures data from BigQuery into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/bing-ads":{"id":"reference/Connectors/capture-connectors/bing-ads","title":"Bing Ads","description":"This connector captures data from Bing Ads into Flow collections via the Bing Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/braintree":{"id":"reference/Connectors/capture-connectors/braintree","title":"Braintree","description":"This connector captures data from Braintree into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/braze":{"id":"reference/Connectors/capture-connectors/braze","title":"Braze","description":"This connector captures data from Braze into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/chargebee":{"id":"reference/Connectors/capture-connectors/chargebee","title":"Chargebee","description":"This connector captures data from Chargebee into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/exchange-rates":{"id":"reference/Connectors/capture-connectors/exchange-rates","title":"Exchange Rates API","description":"This connector captures data from the Exchange Rates API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/facebook-marketing":{"id":"reference/Connectors/capture-connectors/facebook-marketing","title":"Facebook Marketing","description":"This connector captures data from the Facebook Marketing API into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/freshdesk":{"id":"reference/Connectors/capture-connectors/freshdesk","title":"Freshdesk","description":"This connector captures Freshdesk data into Flow collections via the Freshdesk API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/gcs":{"id":"reference/Connectors/capture-connectors/gcs","title":"Google Cloud Storage","description":"This connector captures data from a Google Cloud Storage (GCS) bucket.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/github":{"id":"reference/Connectors/capture-connectors/github","title":"GitHub","description":"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub\'s REST API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/gitlab":{"id":"reference/Connectors/capture-connectors/gitlab","title":"GitlLab","description":"This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs\'s API V4. It can also work with self-hosted GitLab.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-ads":{"id":"reference/Connectors/capture-connectors/google-ads","title":"Google Ads","description":"This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-analytics":{"id":"reference/Connectors/capture-connectors/google-analytics","title":"Google Analytics UA","description":"This connector captures data from a view in Google Universal Analytics.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-analytics-4":{"id":"reference/Connectors/capture-connectors/google-analytics-4","title":"Google Analytics 4","description":"This connector captures data from Google Analytics 4 properties into Flow collections via the","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-firestore":{"id":"reference/Connectors/capture-connectors/google-firestore","title":"Google Firestore","description":"This connector captures data from your Google Firestore collections into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-search-console":{"id":"reference/Connectors/capture-connectors/google-search-console","title":"Google Search Console","description":"This connector captures data from Google Search Console into Flow collections via the Google Search Console API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-sheets":{"id":"reference/Connectors/capture-connectors/google-sheets","title":"Google Sheets","description":"This connector captures data from a Google Sheets spreadsheet.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/greenhouse":{"id":"reference/Connectors/capture-connectors/greenhouse","title":"Greenhouse","description":"This connector captures data from Greenhouse into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/harvest":{"id":"reference/Connectors/capture-connectors/harvest","title":"Harvest","description":"This connector captures data from Harvest into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/http-file":{"id":"reference/Connectors/capture-connectors/http-file","title":"HTTP File","description":"This connector captures data from an HTTP endpoint into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/http-ingest":{"id":"reference/Connectors/capture-connectors/http-ingest","title":"HTTP Ingest (Webhook)","description":"The HTTP Ingest connector allows you to capture data from incoming HTTP requests.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/hubspot":{"id":"reference/Connectors/capture-connectors/hubspot","title":"Hubspot","description":"This connector captures data from a Hubspot account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/instagram":{"id":"reference/Connectors/capture-connectors/instagram","title":"Instagram","description":"This connector captures data from Instagram into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/intercom":{"id":"reference/Connectors/capture-connectors/intercom","title":"Intercom","description":"This connector captures data from Intercom into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/iterable":{"id":"reference/Connectors/capture-connectors/iterable","title":"Iterable","description":"This connector captures data from Iterable into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/jira":{"id":"reference/Connectors/capture-connectors/jira","title":"Jira","description":"This connector captures data from Jira into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/klaviyo":{"id":"reference/Connectors/capture-connectors/klaviyo","title":"Klaviyo","description":"This connector captures data from Klaviyo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/linkedin-ads":{"id":"reference/Connectors/capture-connectors/linkedin-ads","title":"LinkedIn Ads","description":"This connector captures data from LinkedIn Ads into Flow collections through the LinkedIn Marketing API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mailchimp":{"id":"reference/Connectors/capture-connectors/mailchimp","title":"Mailchimp","description":"This connector captures data from a Mailchimp account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mariadb":{"id":"reference/Connectors/capture-connectors/mariadb","title":"MariaDB","description":"This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/marketo":{"id":"reference/Connectors/capture-connectors/marketo","title":"Marketo","description":"This connector captures data from Marketo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mixpanel":{"id":"reference/Connectors/capture-connectors/mixpanel","title":"MixPanel","description":"This connector captures data from MixPanel into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mongodb":{"id":"reference/Connectors/capture-connectors/mongodb","title":"MongoDB","description":"This connector captures data from your MongoDB collections into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MySQL":{"id":"reference/Connectors/capture-connectors/MySQL","title":"MySQL","description":"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/netsuite":{"id":"reference/Connectors/capture-connectors/netsuite","title":"NetSuite","description":"This connector captures data from NetSuite into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/notion":{"id":"reference/Connectors/capture-connectors/notion","title":"Notion","description":"This connector captures data from Notion into Flow collections via the Notion API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/oracle-db":{"id":"reference/Connectors/capture-connectors/oracle-db","title":"OracleDB","description":"This connector captures data from OracleDB into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/paypal-transaction":{"id":"reference/Connectors/capture-connectors/paypal-transaction","title":"Paypal Transaction","description":"This connector captures data from Paypal Transaction into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/pinterest":{"id":"reference/Connectors/capture-connectors/pinterest","title":"Pinterest","description":"This connector captures data from Pinterest into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/postgres-batch":{"id":"reference/Connectors/capture-connectors/postgres-batch","title":"PostgreSQL Batch Query Connector","description":"This connector captures data from Postgres into Flow collections by periodically","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/postgres-heroku":{"id":"reference/Connectors/capture-connectors/postgres-heroku","title":"Postgres (Heroku)","description":"This connector captures data from Postgres into Flow collections. It is specifically for DBs that don\'t support write ahead logs.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL":{"id":"reference/Connectors/capture-connectors/PostgreSQL","title":"PostgreSQL","description":"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/README":{"id":"reference/Connectors/capture-connectors/README","title":"Capture connectors","description":"Estuary\'s available capture connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/recharge":{"id":"reference/Connectors/capture-connectors/recharge","title":"Recharge","description":"This connector captures data from Recharge into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/salesforce":{"id":"reference/Connectors/capture-connectors/salesforce","title":"Salesforce \u2014 Historical data","description":"This connector captures data from Salesforce objects into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/salesforce-real-time":{"id":"reference/Connectors/capture-connectors/salesforce-real-time","title":"Salesforce \u2014 Real-time data","description":"This connector captures data from Salesforce objects into Flow collections in real time via the Salesforce PushTopic API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sendgrid":{"id":"reference/Connectors/capture-connectors/sendgrid","title":"SendGrid","description":"This connector captures data from SendGrid into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sentry":{"id":"reference/Connectors/capture-connectors/sentry","title":"Sentry","description":"This connector captures data from Sentry into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sftp":{"id":"reference/Connectors/capture-connectors/sftp","title":"SFTP","description":"This connector captures data from an SFTP server.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/slack":{"id":"reference/Connectors/capture-connectors/slack","title":"Slack","description":"This connector captures data from Slack into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/snapchat":{"id":"reference/Connectors/capture-connectors/snapchat","title":"Snapchat Marketing","description":"This connector captures data from Snapchat Marketing into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sqlserver":{"id":"reference/Connectors/capture-connectors/sqlserver","title":"Microsoft SQL Server","description":"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/stripe":{"id":"reference/Connectors/capture-connectors/stripe","title":"Stripe","description":"This connector captures data from Stripe into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/survey-monkey":{"id":"reference/Connectors/capture-connectors/survey-monkey","title":"Survey Monkey","description":"This connector captures data from SurveyMonkey surveys into Flow collections via the SurveyMonkey API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/tiktok":{"id":"reference/Connectors/capture-connectors/tiktok","title":"TikTok Marketing","description":"This connector captures data from TikTok marketing campaigns and ads into Flow collections via the TikTok API for Business. It supports production as well as sandbox accounts.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/twilio":{"id":"reference/Connectors/capture-connectors/twilio","title":"Twilio","description":"This connector captures data from Twilio into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/woocommerce":{"id":"reference/Connectors/capture-connectors/woocommerce","title":"WooCommerce","description":"This connector captures data from WooCommerce into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/youtube-analytics":{"id":"reference/Connectors/capture-connectors/youtube-analytics","title":"YouTube Analytics","description":"This connector captures data from YouTube Analytics into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/zendesk-chat":{"id":"reference/Connectors/capture-connectors/zendesk-chat","title":"Zendesk Chat","description":"This connector captures data from Zendesk into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/zendesk-support":{"id":"reference/Connectors/capture-connectors/zendesk-support","title":"Zendesk Support","description":"This connector captures data from Zendesk into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/alloydb":{"id":"reference/Connectors/materialization-connectors/alloydb","title":"AlloyDB","description":"This connector materializes Flow collections into tables in an AlloyDB database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-dynamodb":{"id":"reference/Connectors/materialization-connectors/amazon-dynamodb","title":"Amazon DynamoDB","description":"This connector materializes Flow collections into tables in an Amazon DynamoDB.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-redshift":{"id":"reference/Connectors/materialization-connectors/amazon-redshift","title":"Amazon Redshift","description":"This connector materializes Flow collections into tables in an Amazon Redshift database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/BigQuery":{"id":"reference/Connectors/materialization-connectors/BigQuery","title":"Google BigQuery","description":"This Flow connector materializes Flow collections into tables within a Google BigQuery dataset.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Elasticsearch":{"id":"reference/Connectors/materialization-connectors/Elasticsearch","title":"Elasticsearch","description":"This connector materializes Flow collections into indices in an Elasticsearch cluster.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Firebolt":{"id":"reference/Connectors/materialization-connectors/Firebolt","title":"Firebolt","description":"This Flow connector materializes delta updates of Flow collections into Firebolt FACT or DIMENSION tables.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/google-pubsub":{"id":"reference/Connectors/materialization-connectors/google-pubsub","title":"Google Cloud Pub/Sub","description":"This connector materializes Flow collections into topics in Google Cloud Pub/Sub.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Google-sheets":{"id":"reference/Connectors/materialization-connectors/Google-sheets","title":"Google Sheets","description":"This connector materializes Flow collections into sheets in a Google Sheets spreadsheet.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/mongodb":{"id":"reference/Connectors/materialization-connectors/mongodb","title":"MongoDB","description":"This connector materializes data from your Flow collections to your MongoDB collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/mysql":{"id":"reference/Connectors/materialization-connectors/mysql","title":"MySQL","description":"This connector materializes Flow collections into tables in a MySQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Parquet":{"id":"reference/Connectors/materialization-connectors/Parquet","title":"Apache Parquet in S3","description":"This connector materializes delta updates of Flow collections into an S3 bucket in the Apache Parquet format.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/pinecone":{"id":"reference/Connectors/materialization-connectors/pinecone","title":"Pinecone","description":"This connector materializes Flow collections into namespaces in a Pinecone index.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/PostgreSQL":{"id":"reference/Connectors/materialization-connectors/PostgreSQL","title":"PostgreSQL","description":"This connector materializes Flow collections into tables in a PostgreSQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/README":{"id":"reference/Connectors/materialization-connectors/README","title":"Materialization connectors","description":"Estuary\'s available materialization connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Rockset":{"id":"reference/Connectors/materialization-connectors/Rockset","title":"Rockset","description":"This Flow connector materializes delta updates of your Flow collections into Rockset collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Snowflake":{"id":"reference/Connectors/materialization-connectors/Snowflake","title":"Snowflake","description":"This connector materializes Flow collections into tables in a Snowflake database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/SQLite":{"id":"reference/Connectors/materialization-connectors/SQLite","title":"SQLite","description":"This connector materializes Flow collections into an ephemeral SQLite database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/timescaledb":{"id":"reference/Connectors/materialization-connectors/timescaledb","title":"TimescaleDB","description":"This connector materializes Flow collections into tables in a TimescaleDB database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-protocol":{"id":"reference/Connectors/materialization-protocol","title":"Materialization Protocol","description":"Materializations are processed as cooperative transactions between the Flow","sidebar":"tutorialSidebar"},"reference/Connectors/README":{"id":"reference/Connectors/README","title":"Connectors","description":"A current list and configuration details for Estuary\'s connectors can be found on the following pages:","sidebar":"tutorialSidebar"},"reference/editing":{"id":"reference/editing","title":"Editing considerations","description":"You can edit the components of your Data Flows in the Flow web app and with flowctl, but before you do so, it\'s important to consider the implications of your changes.","sidebar":"tutorialSidebar"},"reference/organizing-catalogs":{"id":"reference/organizing-catalogs","title":"Organizing a Flow catalog","description":"This page is outdated. It does not reflect the current state of the Flow web application and the","sidebar":"tutorialSidebar"},"reference/reduction-strategies/append":{"id":"reference/reduction-strategies/append","title":"append","description":"Using the append reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/composing-with-conditionals":{"id":"reference/reduction-strategies/composing-with-conditionals","title":"Composing with conditionals","description":"Using conditionals statements to fine-tune reductions","sidebar":"tutorialSidebar"},"reference/reduction-strategies/firstwritewins-and-lastwritewins":{"id":"reference/reduction-strategies/firstwritewins-and-lastwritewins","title":"firstWriteWins and lastWriteWins","description":"Using the firstWriteWins and lastWriteWins reduction strategies","sidebar":"tutorialSidebar"},"reference/reduction-strategies/merge":{"id":"reference/reduction-strategies/merge","title":"merge","description":"Using the merge reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/minimize-and-maximize":{"id":"reference/reduction-strategies/minimize-and-maximize","title":"minimize and maximize","description":"Using the minimize and maximize reduction strategies","sidebar":"tutorialSidebar"},"reference/reduction-strategies/README":{"id":"reference/reduction-strategies/README","title":"Reduction strategies","description":"Flow\'s default reduction behaviors and available strategies to customize them","sidebar":"tutorialSidebar"},"reference/reduction-strategies/set":{"id":"reference/reduction-strategies/set","title":"set","description":"Using the set reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/sum":{"id":"reference/reduction-strategies/sum","title":"sum","description":"Using the sum reduction strategy","sidebar":"tutorialSidebar"},"reference/working-logs-stats":{"id":"reference/working-logs-stats","title":"Working with logs and statistics","description":"Your logs and stats collections","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/deef465e.bfb56dcc.js b/assets/js/deef465e.bfb56dcc.js deleted file mode 100644 index 14e645c487..0000000000 --- a/assets/js/deef465e.bfb56dcc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9804],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=s(a),g=r,m=c["".concat(p,".").concat(g)]||c[g]||u[g]||o;return a?n.createElement(m,l(l({ref:t},d),{},{components:a})):n.createElement(m,l({ref:t},d))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=g;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:r,l[1]=i;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:1},l="Google Ads",i={unversionedId:"reference/Connectors/capture-connectors/google-ads",id:"reference/Connectors/capture-connectors/google-ads",title:"Google Ads",description:"This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.",source:"@site/docs/reference/Connectors/capture-connectors/google-ads.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-ads",permalink:"/reference/Connectors/capture-connectors/google-ads",draft:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-ads.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"GitHub",permalink:"/reference/Connectors/capture-connectors/github"},next:{title:"Google Analytics 4",permalink:"/reference/Connectors/capture-connectors/google-analytics-4"}},p={},s=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Google in the Flow web app",id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Custom queries",id:"custom-queries",level:2}],d={toc:s},c="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"google-ads"},"Google Ads"),(0,r.kt)("p",null,"This connector captures data from ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/fields/v11/overview"},"resources")," in one or more Google Ads accounts into Flow collections via the Google Ads API."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://ghcr.io/estuary/source-google-ads:dev"},(0,r.kt)("inlineCode",{parentName:"a"},"ghcr.io/estuary/source-google-ads:dev"))," provides the latest connector image. You can also follow the link in your browser to see past image versions."),(0,r.kt)("p",null,"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.kt)("a",{parentName:"p",href:"https://docs.airbyte.com/integrations/sources/google-ads/"},"here"),",\nbut keep in mind that the two versions may be significantly different."),(0,r.kt)("h2",{id:"supported-data-resources"},"Supported data resources"),(0,r.kt)("p",null,"The following data resources are supported.\nResources ending in ",(0,r.kt)("inlineCode",{parentName:"p"},"_report")," represent legacy resources from the ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/migration"},"Google Adwords API"),"."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_ad"},"ad_group_ads")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_ad_label"},"ad_group_ad_label")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group"},"ad_groups")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_label"},"ad_group_label")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/v9/campaign"},"campaigns")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/campaign_label"},"campaign_labels")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/reference/rpc/latest/ClickView"},"click_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/customer"},"customer")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/geographic_view"},"geographic_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/keyword_view"},"keyword_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/user_location_view"},"user_location_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#account_performance"},"account_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#ad_performance"},"ad_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#display_keyword_performance"},"display_keyword_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#display_topics_performance"},"display_topics_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#shopping_performance"},"shopping_performance_report"))),(0,r.kt)("p",null,"By default, each resource is mapped to a Flow collection through a separate binding."),(0,r.kt)("p",null,"You may also generate custom resources using ",(0,r.kt)("a",{parentName:"p",href:"#custom-queries"},"GAQL queries"),"."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"There are two ways to authenticate with Google when capturing data into Flow: using OAuth2, and manually, using tokens and secret credentials.\nTheir prerequisites differ."),(0,r.kt)("p",null,"OAuth is recommended for simplicity in the Flow web app;\nthe manual method is the only supported method using the command line."),(0,r.kt)("h3",{id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app"},"Using OAuth2 to authenticate with Google in the Flow web app"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"One or more Google Ads accounts."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Note each account's ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/1704344"},"customer ID")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A Google Account that has ",(0,r.kt)("a",{parentName:"p",href:"https://support.google.com/google-ads/answer/6372672?hl=en"},"access")," to the Google Ads account(s)."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"This account may be a ",(0,r.kt)("a",{parentName:"li",href:"https://ads.google.com/home/tools/manager-accounts/"},(0,r.kt)("strong",{parentName:"a"},"manager account")),".\nIf so, ensure that it is ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/7459601"},"linked to each Google Ads account")," and make note of its ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/29198?hl=en"},"customer ID"),".")))),(0,r.kt)("h3",{id:"configuring-the-connector-specification-manually"},"Configuring the connector specification manually"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"One or more Google Ads accounts."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Note each account's ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/1704344?hl=en"},"customer ID")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A Google Ads ",(0,r.kt)("a",{parentName:"p",href:"https://ads.google.com/home/tools/manager-accounts/"},(0,r.kt)("strong",{parentName:"a"},"manager account"))," that has been ",(0,r.kt)("a",{parentName:"p",href:"https://support.google.com/google-ads/answer/7459601"},"linked to each Google Ads account"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A Google Ads ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/first-call/dev-token?hl=en"},"developer token"),". Your Google Ads manager account must be configured prior to applying for a developer token."))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Developer token applications are independently reviewed by Google and may take one or more days to be approved.\nBe sure to carefully review Google's requirements before submitting an application.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/first-call/refresh-token?hl=en"},"refresh token"),", which fetches a new developer tokens for you as the previous token expires.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A generated ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/oauth/cloud-project#create_a_client_id_and_client_secret"},"Client ID and Client Secret"),", used for authentication."))),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"You configure connectors either in the Flow web app, or by directly editing the Flow specification file.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/concepts/connectors#using-connectors"},"connectors")," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Ads source connector."),(0,r.kt)("h3",{id:"properties"},"Properties"),(0,r.kt)("h4",{id:"endpoint"},"Endpoint"),(0,r.kt)("p",null,"The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,r.kt)("a",{parentName:"p",href:"#using-oauth2-to-authenticate-with-google-in-the-flow-web-app"},"OAuth2"),",\nso many of these properties aren't required."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/conversion_window_days")),(0,r.kt)("td",{parentName:"tr",align:null},"Conversion Window (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see ",(0,r.kt)("a",{parentName:"td",href:"https://support.google.com/google-ads/answer/3123169?hl=en"},"Google","'","s docs"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"integer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"14"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials"))),(0,r.kt)("td",{parentName:"tr",align:null},"Google Credentials"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/client_id"))),(0,r.kt)("td",{parentName:"tr",align:null},"Client ID"),(0,r.kt)("td",{parentName:"tr",align:null},"The Client ID of your Google Ads developer application."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/client_secret"))),(0,r.kt)("td",{parentName:"tr",align:null},"Client Secret"),(0,r.kt)("td",{parentName:"tr",align:null},"The Client Secret of your Google Ads developer application."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/developer_token"))),(0,r.kt)("td",{parentName:"tr",align:null},"Developer Token"),(0,r.kt)("td",{parentName:"tr",align:null},"Developer token granted by Google to use their APIs."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/refresh_token"))),(0,r.kt)("td",{parentName:"tr",align:null},"Refresh Token"),(0,r.kt)("td",{parentName:"tr",align:null},"The token for obtaining a new access token."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/custom_queries")),(0,r.kt)("td",{parentName:"tr",align:null},"Custom GAQL Queries (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"array"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"em"},"/custom_queries/-/query"))),(0,r.kt)("td",{parentName:"tr",align:null},"Custom Query"),(0,r.kt)("td",{parentName:"tr",align:null},"A custom defined GAQL query for building the report. Should not contain segments.date expression. See Google","'","s ",(0,r.kt)("a",{parentName:"td",href:"https://developers.google.com/google-ads/api/fields/v11/overview_query_builder"},"query builder")," for more information."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"em"},"/custom_queries/-/table_name"))),(0,r.kt)("td",{parentName:"tr",align:null},"Destination Table Name"),(0,r.kt)("td",{parentName:"tr",align:null},"The table name in your destination database for chosen query."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/customer_id"))),(0,r.kt)("td",{parentName:"tr",align:null},"Customer ID(s)"),(0,r.kt)("td",{parentName:"tr",align:null},"Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/end_date")),(0,r.kt)("td",{parentName:"tr",align:null},"End Date (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"UTC date in the format 2017-01-25. Any data after this date will not be replicated."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/login_customer_id")),(0,r.kt)("td",{parentName:"tr",align:null},"Login Customer ID for Managed Accounts (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes)."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/start_date"))),(0,r.kt)("td",{parentName:"tr",align:null},"Start Date"),(0,r.kt)("td",{parentName:"tr",align:null},"UTC date in the format 2017-01-25. Any data before this date will not be replicated."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h4",{id:"bindings"},"Bindings"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/stream"))),(0,r.kt)("td",{parentName:"tr",align:null},"Stream"),(0,r.kt)("td",{parentName:"tr",align:null},"Google Ad resource from which a collection is captured."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/syncMode"))),(0,r.kt)("td",{parentName:"tr",align:null},"Sync Mode"),(0,r.kt)("td",{parentName:"tr",align:null},"Connection method."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h3",{id:"sample"},"Sample"),(0,r.kt)("p",null,"This sample specification reflects the manual authentication method."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-ads:dev\n config:\n conversion_window_days: 7\n credentials:\n client_id: {secret_client_ID}\n client_secret: {secret_secret}\n developer_token: {access_token}\n refresh_token: {refresh_token}\n customer_id: 0123456789, 1234567890\n login_customer_id: 0987654321\n end_date: 2022-01-01\n start_date: 2020-01-01\n custom_queries:\n - query:\n SELECT\n campaign.id,\n campaign.name,\n campaign.status\n FROM campaign\n ORDER BY campaign.id\n table_name: campaigns_custom\n bindings:\n - resource:\n stream: campaign\n syncMode: incremental\n target: ${PREFIX}/campaign\n {...}\n")),(0,r.kt)("h2",{id:"custom-queries"},"Custom queries"),(0,r.kt)("p",null,"You can create custom resources using Google Analytics Query Language (GAQL) queries.\nEach generated resource will be mapped to a Flow collection.\nFor help generating a valid query, see ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/fields/v11/overview_query_builder"},"Google's query builder documentation"),"."),(0,r.kt)("p",null,"If a query fails to validate against a given Google Ads account, it will be skipped."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/deef465e.f3000b60.js b/assets/js/deef465e.f3000b60.js new file mode 100644 index 0000000000..5b2ba32668 --- /dev/null +++ b/assets/js/deef465e.f3000b60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9804],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=s(a),g=r,m=c["".concat(p,".").concat(g)]||c[g]||u[g]||o;return a?n.createElement(m,l(l({ref:t},d),{},{components:a})):n.createElement(m,l({ref:t},d))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=g;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:r,l[1]=i;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:1},l="Google Ads",i={unversionedId:"reference/Connectors/capture-connectors/google-ads",id:"reference/Connectors/capture-connectors/google-ads",title:"Google Ads",description:"This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.",source:"@site/docs/reference/Connectors/capture-connectors/google-ads.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-ads",permalink:"/reference/Connectors/capture-connectors/google-ads",draft:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-ads.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"GitlLab",permalink:"/reference/Connectors/capture-connectors/gitlab"},next:{title:"Google Analytics 4",permalink:"/reference/Connectors/capture-connectors/google-analytics-4"}},p={},s=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Google in the Flow web app",id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Custom queries",id:"custom-queries",level:2}],d={toc:s},c="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"google-ads"},"Google Ads"),(0,r.kt)("p",null,"This connector captures data from ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/fields/v11/overview"},"resources")," in one or more Google Ads accounts into Flow collections via the Google Ads API."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://ghcr.io/estuary/source-google-ads:dev"},(0,r.kt)("inlineCode",{parentName:"a"},"ghcr.io/estuary/source-google-ads:dev"))," provides the latest connector image. You can also follow the link in your browser to see past image versions."),(0,r.kt)("p",null,"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.kt)("a",{parentName:"p",href:"https://docs.airbyte.com/integrations/sources/google-ads/"},"here"),",\nbut keep in mind that the two versions may be significantly different."),(0,r.kt)("h2",{id:"supported-data-resources"},"Supported data resources"),(0,r.kt)("p",null,"The following data resources are supported.\nResources ending in ",(0,r.kt)("inlineCode",{parentName:"p"},"_report")," represent legacy resources from the ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/migration"},"Google Adwords API"),"."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_ad"},"ad_group_ads")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_ad_label"},"ad_group_ad_label")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group"},"ad_groups")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_label"},"ad_group_label")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/v9/campaign"},"campaigns")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/campaign_label"},"campaign_labels")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/reference/rpc/latest/ClickView"},"click_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/customer"},"customer")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/geographic_view"},"geographic_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/keyword_view"},"keyword_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/fields/latest/user_location_view"},"user_location_view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#account_performance"},"account_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#ad_performance"},"ad_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#display_keyword_performance"},"display_keyword_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#display_topics_performance"},"display_topics_performance_report")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://developers.google.com/google-ads/api/docs/migration/mapping#shopping_performance"},"shopping_performance_report"))),(0,r.kt)("p",null,"By default, each resource is mapped to a Flow collection through a separate binding."),(0,r.kt)("p",null,"You may also generate custom resources using ",(0,r.kt)("a",{parentName:"p",href:"#custom-queries"},"GAQL queries"),"."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"There are two ways to authenticate with Google when capturing data into Flow: using OAuth2, and manually, using tokens and secret credentials.\nTheir prerequisites differ."),(0,r.kt)("p",null,"OAuth is recommended for simplicity in the Flow web app;\nthe manual method is the only supported method using the command line."),(0,r.kt)("h3",{id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app"},"Using OAuth2 to authenticate with Google in the Flow web app"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"One or more Google Ads accounts."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Note each account's ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/1704344"},"customer ID")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A Google Account that has ",(0,r.kt)("a",{parentName:"p",href:"https://support.google.com/google-ads/answer/6372672?hl=en"},"access")," to the Google Ads account(s)."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"This account may be a ",(0,r.kt)("a",{parentName:"li",href:"https://ads.google.com/home/tools/manager-accounts/"},(0,r.kt)("strong",{parentName:"a"},"manager account")),".\nIf so, ensure that it is ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/7459601"},"linked to each Google Ads account")," and make note of its ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/29198?hl=en"},"customer ID"),".")))),(0,r.kt)("h3",{id:"configuring-the-connector-specification-manually"},"Configuring the connector specification manually"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"One or more Google Ads accounts."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Note each account's ",(0,r.kt)("a",{parentName:"li",href:"https://support.google.com/google-ads/answer/1704344?hl=en"},"customer ID")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A Google Ads ",(0,r.kt)("a",{parentName:"p",href:"https://ads.google.com/home/tools/manager-accounts/"},(0,r.kt)("strong",{parentName:"a"},"manager account"))," that has been ",(0,r.kt)("a",{parentName:"p",href:"https://support.google.com/google-ads/answer/7459601"},"linked to each Google Ads account"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A Google Ads ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/first-call/dev-token?hl=en"},"developer token"),". Your Google Ads manager account must be configured prior to applying for a developer token."))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Developer token applications are independently reviewed by Google and may take one or more days to be approved.\nBe sure to carefully review Google's requirements before submitting an application.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/first-call/refresh-token?hl=en"},"refresh token"),", which fetches a new developer tokens for you as the previous token expires.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"A generated ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/docs/oauth/cloud-project#create_a_client_id_and_client_secret"},"Client ID and Client Secret"),", used for authentication."))),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"You configure connectors either in the Flow web app, or by directly editing the Flow specification file.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/concepts/connectors#using-connectors"},"connectors")," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Ads source connector."),(0,r.kt)("h3",{id:"properties"},"Properties"),(0,r.kt)("h4",{id:"endpoint"},"Endpoint"),(0,r.kt)("p",null,"The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,r.kt)("a",{parentName:"p",href:"#using-oauth2-to-authenticate-with-google-in-the-flow-web-app"},"OAuth2"),",\nso many of these properties aren't required."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/conversion_window_days")),(0,r.kt)("td",{parentName:"tr",align:null},"Conversion Window (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see ",(0,r.kt)("a",{parentName:"td",href:"https://support.google.com/google-ads/answer/3123169?hl=en"},"Google","'","s docs"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"integer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"14"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials"))),(0,r.kt)("td",{parentName:"tr",align:null},"Google Credentials"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"object"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/client_id"))),(0,r.kt)("td",{parentName:"tr",align:null},"Client ID"),(0,r.kt)("td",{parentName:"tr",align:null},"The Client ID of your Google Ads developer application."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/client_secret"))),(0,r.kt)("td",{parentName:"tr",align:null},"Client Secret"),(0,r.kt)("td",{parentName:"tr",align:null},"The Client Secret of your Google Ads developer application."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/developer_token"))),(0,r.kt)("td",{parentName:"tr",align:null},"Developer Token"),(0,r.kt)("td",{parentName:"tr",align:null},"Developer token granted by Google to use their APIs."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/credentials/refresh_token"))),(0,r.kt)("td",{parentName:"tr",align:null},"Refresh Token"),(0,r.kt)("td",{parentName:"tr",align:null},"The token for obtaining a new access token."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/custom_queries")),(0,r.kt)("td",{parentName:"tr",align:null},"Custom GAQL Queries (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"array"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"em"},"/custom_queries/-/query"))),(0,r.kt)("td",{parentName:"tr",align:null},"Custom Query"),(0,r.kt)("td",{parentName:"tr",align:null},"A custom defined GAQL query for building the report. Should not contain segments.date expression. See Google","'","s ",(0,r.kt)("a",{parentName:"td",href:"https://developers.google.com/google-ads/api/fields/v11/overview_query_builder"},"query builder")," for more information."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"em"},"/custom_queries/-/table_name"))),(0,r.kt)("td",{parentName:"tr",align:null},"Destination Table Name"),(0,r.kt)("td",{parentName:"tr",align:null},"The table name in your destination database for chosen query."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/customer_id"))),(0,r.kt)("td",{parentName:"tr",align:null},"Customer ID(s)"),(0,r.kt)("td",{parentName:"tr",align:null},"Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/end_date")),(0,r.kt)("td",{parentName:"tr",align:null},"End Date (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"UTC date in the format 2017-01-25. Any data after this date will not be replicated."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"/login_customer_id")),(0,r.kt)("td",{parentName:"tr",align:null},"Login Customer ID for Managed Accounts (Optional)"),(0,r.kt)("td",{parentName:"tr",align:null},"If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes)."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/start_date"))),(0,r.kt)("td",{parentName:"tr",align:null},"Start Date"),(0,r.kt)("td",{parentName:"tr",align:null},"UTC date in the format 2017-01-25. Any data before this date will not be replicated."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h4",{id:"bindings"},"Bindings"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Property"),(0,r.kt)("th",{parentName:"tr",align:null},"Title"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Required/Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/stream"))),(0,r.kt)("td",{parentName:"tr",align:null},"Stream"),(0,r.kt)("td",{parentName:"tr",align:null},"Google Ad resource from which a collection is captured."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},(0,r.kt)("inlineCode",{parentName:"strong"},"/syncMode"))),(0,r.kt)("td",{parentName:"tr",align:null},"Sync Mode"),(0,r.kt)("td",{parentName:"tr",align:null},"Connection method."),(0,r.kt)("td",{parentName:"tr",align:null},"string"),(0,r.kt)("td",{parentName:"tr",align:null},"Required")))),(0,r.kt)("h3",{id:"sample"},"Sample"),(0,r.kt)("p",null,"This sample specification reflects the manual authentication method."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-ads:dev\n config:\n conversion_window_days: 7\n credentials:\n client_id: {secret_client_ID}\n client_secret: {secret_secret}\n developer_token: {access_token}\n refresh_token: {refresh_token}\n customer_id: 0123456789, 1234567890\n login_customer_id: 0987654321\n end_date: 2022-01-01\n start_date: 2020-01-01\n custom_queries:\n - query:\n SELECT\n campaign.id,\n campaign.name,\n campaign.status\n FROM campaign\n ORDER BY campaign.id\n table_name: campaigns_custom\n bindings:\n - resource:\n stream: campaign\n syncMode: incremental\n target: ${PREFIX}/campaign\n {...}\n")),(0,r.kt)("h2",{id:"custom-queries"},"Custom queries"),(0,r.kt)("p",null,"You can create custom resources using Google Analytics Query Language (GAQL) queries.\nEach generated resource will be mapped to a Flow collection.\nFor help generating a valid query, see ",(0,r.kt)("a",{parentName:"p",href:"https://developers.google.com/google-ads/api/fields/v11/overview_query_builder"},"Google's query builder documentation"),"."),(0,r.kt)("p",null,"If a query fails to validate against a given Google Ads account, it will be skipped."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.80155dde.js b/assets/js/main.80155dde.js new file mode 100644 index 0000000000..3231a45431 --- /dev/null +++ b/assets/js/main.80155dde.js @@ -0,0 +1,2 @@ +/*! For license information please see main.80155dde.js.LICENSE.txt */ +(self.webpackChunksite=self.webpackChunksite||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),c=n(6887);const s={"014c8d62":[()=>n.e(9184).then(n.bind(n,1358)),"@site/docs/reference/Connectors/materialization-connectors/Elasticsearch.md",1358],"01f1a992":[()=>n.e(1502).then(n.bind(n,1386)),"@site/docs/reference/Connectors/capture-connectors/harvest.md",1386],"02365777":[()=>Promise.all([n.e(236),n.e(2708)]).then(n.bind(n,9683)),"@site/docs/concepts/README.md",9683],"04c11cf4":[()=>n.e(8811).then(n.bind(n,4338)),"@site/docs/concepts/advanced/projections.md",4338],"061adc4c":[()=>n.e(7467).then(n.bind(n,5789)),"@site/docs/reference/Connectors/capture-connectors/mailchimp.md",5789],"07003cee":[()=>Promise.all([n.e(532),n.e(8623)]).then(n.bind(n,2498)),"@site/docs/reference/Connectors/capture-connectors/amazon-s3.md",2498],"08cd1031":[()=>n.e(327).then(n.bind(n,2671)),"@site/docs/reference/Connectors/capture-connectors/apache-kafka.md",2671],"0d3223a3":[()=>n.e(8458).then(n.bind(n,9595)),"@site/docs/reference/Connectors/capture-connectors/survey-monkey.md",9595],"0d762a34":[()=>n.e(4681).then(n.bind(n,1554)),"@site/docs/overview/README.md",1554],"0ea4d505":[()=>n.e(771).then(n.bind(n,7898)),"@site/docs/guides/flowctl/README.md",7898],"0fda5f57":[()=>Promise.all([n.e(236),n.e(2665)]).then(n.bind(n,4379)),"@site/docs/concepts/import.md",4379],"116b31b8":[()=>n.e(6314).then(n.bind(n,3249)),"@site/docs/reference/Connectors/capture-connectors/paypal-transaction.md",3249],"134688ac":[()=>n.e(2496).then(n.bind(n,2721)),"@site/docs/reference/Connectors/capture-connectors/sqlserver.md",2721],"1434155d":[()=>n.e(2834).then(n.bind(n,1846)),"@site/docs/reference/Connectors/materialization-connectors/alloydb.md",1846],"161e6f0a":[()=>n.e(4182).then(n.bind(n,7068)),"@site/docs/reference/Connectors/materialization-connectors/SQLite.md",7068],"1714037f":[()=>n.e(967).then(n.bind(n,5751)),"@site/docs/guides/system-specific-dataflows/s3-to-snowflake.md",5751],17896441:[()=>Promise.all([n.e(532),n.e(236),n.e(2666),n.e(7918)]).then(n.bind(n,903)),"@theme/DocItem",903],"189edb0d":[()=>n.e(8060).then(n.bind(n,2162)),"@site/docs/guides/flowctl/create-derivation.md",2162],"1bc1529f":[()=>n.e(2011).then(n.bind(n,4496)),"@site/docs/reference/reduction-strategies/set.md",4496],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1ca4a2d7":[()=>n.e(5866).then(n.bind(n,3040)),"@site/docs/reference/Connectors/capture-connectors/facebook-marketing.md",3040],"1cde271f":[()=>n.e(2519).then(n.bind(n,6822)),"@site/docs/reference/Connectors/materialization-connectors/amazon-redshift.md",6822],"1d129a7b":[()=>n.e(9924).then(n.bind(n,7420)),"@site/docs/concepts/storage-mappings.md",7420],"1f391b9e":[()=>Promise.all([n.e(532),n.e(236),n.e(2666),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"28a8491c":[()=>Promise.all([n.e(236),n.e(9882)]).then(n.bind(n,8609)),"@site/docs/getting-started/tutorials/dataflow-s3-snowflake.md",8609],"2b63758d":[()=>n.e(478).then(n.bind(n,1234)),"@site/docs/reference/Connectors/capture-connectors/bigquery.md",1234],"2c471297":[()=>n.e(3675).then(n.bind(n,8070)),"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL.md",8070],"2fea2d40":[()=>n.e(3103).then(n.bind(n,994)),"@site/docs/reference/Connectors/materialization-connectors/timescaledb.md",994],"31570a90":[()=>Promise.all([n.e(236),n.e(924)]).then(n.bind(n,662)),"@site/docs/concepts/web-app.md",662],"38a516ae":[()=>Promise.all([n.e(532),n.e(1066)]).then(n.bind(n,8227)),"@site/docs/concepts/collections.md",8227],"3c6ed59c":[()=>n.e(4586).then(n.bind(n,8260)),"@site/docs/guides/customize-materialization-fields.md",8260],"3c711bdb":[()=>n.e(6370).then(n.bind(n,5501)),"@site/docs/guides/edit-data-flows.md",5501],"405f2d9a":[()=>n.e(8273).then(n.bind(n,554)),"@site/docs/reference/reduction-strategies/merge.md",554],"42e3560a":[()=>n.e(75).then(n.bind(n,5040)),"@site/docs/reference/Connectors/materialization-connectors/Rockset.md",5040],"44386d1b":[()=>n.e(6437).then(n.bind(n,4178)),"@site/docs/reference/Connectors/capture-connectors/gcs.md",4178],"44b1e2f5":[()=>n.e(7539).then(n.bind(n,4749)),"@site/docs/reference/Connectors/capture-connectors/twilio.md",4749],"45462f11":[()=>n.e(3532).then(n.bind(n,9242)),"@site/docs/reference/Connectors/capture-connectors/slack.md",9242],"4648c831":[()=>n.e(8544).then(n.bind(n,2987)),"@site/docs/reference/Connectors/capture-connectors/amazon-sqs.md",2987],"46cf1090":[()=>n.e(3102).then(n.bind(n,9391)),"@site/docs/reference/Connectors/capture-connectors/mongodb.md",9391],"4a1a3e03":[()=>Promise.all([n.e(236),n.e(8422)]).then(n.bind(n,1765)),"@site/docs/guides/flowctl/edit-specification-locally.md",1765],"4acaa9c4":[()=>Promise.all([n.e(532),n.e(8428)]).then(n.bind(n,2308)),"@site/docs/concepts/schemas.md",2308],"4bccbb93":[()=>n.e(2126).then(n.bind(n,3734)),"@site/docs/getting-started/tutorials/README.md",3734],"4c3490a7":[()=>n.e(4974).then(n.bind(n,821)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL.md",821],"4d4f51e2":[()=>n.e(6238).then(n.bind(n,5048)),"@site/docs/reference/Connectors/materialization-connectors/google-pubsub.md",5048],"4e1df6a3":[()=>Promise.all([n.e(236),n.e(7723)]).then(n.bind(n,1616)),"@site/docs/concepts/flowctl.md",1616],"4f08651a":[()=>n.e(3514).then(n.bind(n,8612)),"@site/docs/reference/Connectors/capture-connectors/recharge.md",8612],"547dc70b":[()=>n.e(5994).then(n.bind(n,4377)),"@site/docs/reference/reduction-strategies/README.md",4377],"54a88ed7":[()=>n.e(9266).then(n.bind(n,7186)),"@site/docs/reference/Connectors/capture-connectors/amazon-ads.md",7186],"5769edfb":[()=>n.e(2600).then(n.bind(n,9338)),"@site/docs/reference/Connectors/capture-connectors/woocommerce.md",9338],"57aea1fc":[()=>n.e(2318).then(n.bind(n,6969)),"@site/docs/reference/Connectors/materialization-connectors/amazon-dynamodb.md",6969],"58ac2a48":[()=>n.e(6452).then(n.bind(n,1365)),"@site/docs/reference/Connectors/materialization-connectors/mysql.md",1365],"5b71c68f":[()=>n.e(7782).then(n.bind(n,1046)),"@site/docs/reference/Connectors/capture-connectors/sentry.md",1046],"5ba559d4":[()=>Promise.all([n.e(532),n.e(7943)]).then(n.bind(n,7589)),"@site/src/pages/example.tsx",7589],"5bb0dc82":[()=>n.e(2604).then(n.bind(n,9161)),"@site/docs/reference/working-logs-stats.md",9161],"5bdcd6fd":[()=>n.e(4197).then(n.bind(n,8574)),"@site/docs/reference/Connectors/capture-connectors/mariadb.md",8574],"5c7e141f":[()=>n.e(596).then(n.bind(n,9162)),"@site/docs/reference/Connectors/materialization-connectors/mongodb.md",9162],"5d9eac72":[()=>Promise.all([n.e(236),n.e(2971)]).then(n.bind(n,285)),"@site/docs/reference/Connectors/materialization-protocol.md",285],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],61038276:[()=>n.e(9832).then(n.bind(n,146)),"@site/docs/reference/Connectors/capture-connectors/pinterest.md",146],"6181342c":[()=>n.e(8850).then(n.bind(n,6204)),"@site/docs/reference/Connectors/capture-connectors/greenhouse.md",6204],"63b37bf5":[()=>n.e(285).then(n.bind(n,5838)),"@site/docs/reference/Connectors/capture-connectors/alpaca.md",5838],"6459b84b":[()=>n.e(7868).then(n.bind(n,9154)),"@site/docs/getting-started/installation.mdx",9154],"645c44d3":[()=>n.e(9493).then(n.bind(n,6005)),"@site/docs/reference/Connectors/capture-connectors/README.md",6005],"65a8f618":[()=>n.e(2019).then(n.bind(n,6349)),"@site/docs/reference/Connectors/capture-connectors/chargebee.md",6349],"68cc1c24":[()=>n.e(8027).then(n.bind(n,9197)),"@site/docs/reference/Connectors/materialization-connectors/BigQuery.md",9197],"6b49cdad":[()=>n.e(5542).then(n.bind(n,8289)),"@site/docs/reference/Connectors/capture-connectors/klaviyo.md",8289],"6d42ac36":[()=>n.e(4744).then(n.bind(n,2866)),"@site/docs/reference/Connectors/capture-connectors/github.md",2866],"6e773b1a":[()=>n.e(7778).then(n.bind(n,9707)),"@site/docs/reference/Connectors/capture-connectors/sftp.md",9707],"6f6bf398":[()=>n.e(4096).then(n.bind(n,254)),"@site/docs/reference/authentication.md",254],"76bcc235":[()=>n.e(7303).then(n.bind(n,6382)),"@site/docs/reference/Connectors/capture-connectors/freshdesk.md",6382],"7c555ba4":[()=>n.e(4634).then(n.bind(n,9273)),"@site/docs/reference/Connectors/capture-connectors/stripe.md",9273],"7cda2da6":[()=>n.e(2527).then(n.bind(n,1656)),"@site/docs/reference/reduction-strategies/sum.md",1656],"7fd3d7a0":[()=>n.e(3255).then(n.bind(n,7004)),"@site/docs/reference/Connectors/capture-connectors/sendgrid.md",7004],"827ceece":[()=>n.e(3117).then(n.t.bind(n,3769,19)),"/home/runner/work/flow/flow/site/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"8431750a":[()=>n.e(4635).then(n.bind(n,475)),"@site/docs/reference/Connectors/capture-connectors/google-analytics-4.md",475],"858820da":[()=>n.e(7356).then(n.bind(n,1122)),"@site/docs/reference/Connectors/capture-connectors/gitlab.md",1122],"88fa6390":[()=>n.e(5723).then(n.bind(n,6192)),"@site/docs/reference/Connectors/materialization-connectors/Snowflake.md",6192],"8a611437":[()=>n.e(1708).then(n.bind(n,2892)),"@site/docs/reference/Connectors/capture-connectors/snapchat.md",2892],"8d6a0765":[()=>n.e(488).then(n.bind(n,2209)),"@site/docs/reference/Connectors/capture-connectors/netsuite.md",2209],"8dce94c3":[()=>n.e(9292).then(n.bind(n,1750)),"@site/docs/concepts/advanced/journals.md",1750],"8e876c80":[()=>n.e(5039).then(n.bind(n,3266)),"@site/docs/concepts/captures.md",3266],"905c32de":[()=>n.e(3353).then(n.bind(n,5784)),"@site/docs/reference/Connectors/capture-connectors/alloydb.md",5784],"906e1e9f":[()=>n.e(4060).then(n.bind(n,1171)),"@site/docs/reference/Connectors/capture-connectors/iterable.md",1171],"921f956e":[()=>n.e(8045).then(n.bind(n,9427)),"@site/docs/reference/Connectors/capture-connectors/hubspot.md",9427],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"952b3fdc":[()=>n.e(7874).then(n.bind(n,8159)),"@site/docs/reference/Connectors/capture-connectors/jira.md",8159],"964d596a":[()=>n.e(6575).then(n.bind(n,1020)),"@site/docs/reference/Connectors/capture-connectors/zendesk-support.md",1020],"986b9943":[()=>n.e(2705).then(n.bind(n,3991)),"@site/docs/reference/Connectors/capture-connectors/tiktok.md",3991],"9d18d13c":[()=>n.e(5997).then(n.bind(n,8756)),"@site/docs/reference/Connectors/materialization-connectors/Firebolt.md",8756],"9d57d0a6":[()=>n.e(5872).then(n.bind(n,6125)),"@site/docs/reference/Connectors/capture-connectors/notion.md",6125],"9e64d05b":[()=>Promise.all([n.e(236),n.e(3501)]).then(n.bind(n,7160)),"@site/docs/guides/flowctl/edit-draft-from-webapp.md",7160],"9e8f5f1c":[()=>n.e(4207).then(n.bind(n,3874)),"@site/docs/reference/reduction-strategies/append.md",3874],"9fc067fe":[()=>n.e(4609).then(n.bind(n,9542)),"@site/docs/reference/Connectors/capture-connectors/amazon-kinesis.md",9542],a295209d:[()=>n.e(372).then(n.bind(n,3093)),"@site/docs/reference/Connectors/materialization-connectors/Parquet.md",3093],a3c49fd9:[()=>n.e(3365).then(n.bind(n,6708)),"@site/docs/guides/create-dataflow.md",6708],a42036e6:[()=>n.e(3243).then(n.bind(n,9326)),"@site/docs/reference/Connectors/capture-connectors/http-file.md",9326],a9379b01:[()=>n.e(8715).then(n.bind(n,3529)),"@site/docs/reference/Configuring-task-shards.md",3529],abc1ea5e:[()=>n.e(345).then(n.bind(n,3453)),"@site/docs/reference/Connectors/capture-connectors/instagram.md",3453],b0d5790a:[()=>n.e(3706).then(n.bind(n,9551)),"@site/docs/reference/Connectors/capture-connectors/braze.md",9551],b0d7f3f2:[()=>n.e(2512).then(n.bind(n,5457)),"@site/docs/reference/Connectors/capture-connectors/zendesk-chat.md",5457],b0d98fb9:[()=>n.e(8073).then(n.bind(n,1198)),"@site/docs/reference/Connectors/capture-connectors/postgres-batch.md",1198],b1a65bd3:[()=>n.e(2180).then(n.bind(n,8349)),"@site/docs/reference/Connectors/capture-connectors/youtube-analytics.md",8349],b32e8f59:[()=>n.e(6993).then(n.bind(n,4638)),"@site/docs/guides/system-specific-dataflows/README.md",4638],b5dab0d4:[()=>n.e(8355).then(n.bind(n,1630)),"@site/docs/reference/Connectors/capture-connectors/google-analytics.md",1630],b74f0b56:[()=>n.e(6337).then(n.bind(n,6168)),"@site/docs/reference/organizing-catalogs.md",6168],bbb5a186:[()=>n.e(8074).then(n.t.bind(n,5745,19)),"/home/runner/work/flow/flow/site/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],bc505a42:[()=>n.e(229).then(n.bind(n,3685)),"@site/docs/reference/Connectors/capture-connectors/MySQL.md",3685],be02d3e2:[()=>n.e(4020).then(n.bind(n,1428)),"@site/docs/reference/Connectors/capture-connectors/http-ingest.md",1428],bf636eff:[()=>n.e(8368).then(n.bind(n,15)),"@site/docs/concepts/materialization.md",15],bfec4f44:[()=>n.e(6882).then(n.bind(n,4594)),"@site/docs/concepts/advanced/shards.md",4594],c042bbf4:[()=>n.e(7666).then(n.bind(n,5455)),"@site/docs/guides/connect-network.md",5455],c10f38bc:[()=>n.e(4730).then(n.bind(n,4912)),"@site/docs/reference/Connectors/capture-connectors/amplitude.md",4912],c11c77a9:[()=>n.e(3359).then(n.bind(n,822)),"@site/docs/concepts/tests.md",822],c13ec0a6:[()=>n.e(7856).then(n.bind(n,2473)),"@site/docs/reference/Connectors/materialization-connectors/README.md",2473],c1e7e5a7:[()=>n.e(7059).then(n.bind(n,4032)),"@site/docs/overview/comparisons.md",4032],c521cd6b:[()=>n.e(7922).then(n.bind(n,6691)),"@site/docs/concepts/advanced/logs-stats.md",6691],c66ae53f:[()=>n.e(2110).then(n.bind(n,2423)),"@site/src/pages/example-markdown.md",2423],ca7ab025:[()=>Promise.all([n.e(532),n.e(9025)]).then(n.bind(n,5574)),"@site/docs/concepts/connectors.md",5574],cad0251b:[()=>n.e(6793).then(n.bind(n,7644)),"@site/docs/reference/reduction-strategies/composing-with-conditionals.md",7644],caea5a36:[()=>n.e(3632).then(n.bind(n,4346)),"@site/docs/guides/flowctl/troubleshoot-task.md",4346],cce87b67:[()=>n.e(7901).then(n.bind(n,2142)),"@site/docs/reference/editing.md",2142],ce5ba636:[()=>n.e(9273).then(n.bind(n,5140)),"@site/docs/reference/Connectors/capture-connectors/intercom.md",5140],cf864737:[()=>Promise.all([n.e(236),n.e(5786)]).then(n.bind(n,5355)),"@site/docs/concepts/catalogs.md",5355],cfe90ca7:[()=>n.e(4929).then(n.bind(n,4313)),"@site/docs/reference/Connectors/capture-connectors/google-sheets.md",4313],d273ee52:[()=>n.e(3896).then(n.bind(n,9930)),"@site/docs/reference/Connectors/capture-connectors/google-search-console.md",9930],d4e0cc60:[()=>n.e(3503).then(n.bind(n,1420)),"@site/docs/reference/Connectors/capture-connectors/postgres-heroku.md",1420],d6385b0d:[()=>Promise.all([n.e(532),n.e(4944)]).then(n.bind(n,5298)),"@site/docs/getting-started/tutorials/continuous-materialized-view.md",5298],d78b6ce8:[()=>n.e(2588).then(n.bind(n,6177)),"@site/docs/reference/Connectors/capture-connectors/oracle-db.md",6177],d8b2c51c:[()=>n.e(7500).then(n.bind(n,7957)),"@site/docs/reference/Connectors/README.md",7957],db0f1c3a:[()=>n.e(3854).then(n.bind(n,2097)),"@site/docs/reference/Connectors/capture-connectors/bing-ads.md",2097],de285be4:[()=>n.e(1608).then(n.bind(n,5429)),"@site/docs/guides/README.md",5429],de7a358c:[()=>n.e(7455).then(n.bind(n,4710)),"@site/docs/reference/reduction-strategies/firstwritewins-and-lastwritewins.md",4710],deef465e:[()=>n.e(9804).then(n.bind(n,4946)),"@site/docs/reference/Connectors/capture-connectors/google-ads.md",4946],e1d33ea7:[()=>n.e(8427).then(n.bind(n,2784)),"@site/docs/reference/Connectors/capture-connectors/amazon-dynamodb.md",2784],e459d51d:[()=>n.e(104).then(n.bind(n,1662)),"@site/docs/reference/Connectors/capture-connectors/google-firestore.md",1662],e76aecec:[()=>Promise.all([n.e(532),n.e(236),n.e(2536)]).then(n.bind(n,9596)),"@site/docs/concepts/derivations.md",9596],e8453306:[()=>n.e(1246).then(n.bind(n,3831)),"@site/docs/reference/Connectors/capture-connectors/mixpanel.md",3831],e858514f:[()=>n.e(5228).then(n.bind(n,6383)),"@site/docs/guides/system-specific-dataflows/firestore-to-dwh.md",6383],e9a91763:[()=>n.e(7628).then(n.bind(n,640)),"@site/docs/reference/Connectors/capture-connectors/salesforce.md",640],ea7b1b11:[()=>n.e(4689).then(n.bind(n,7661)),"@site/docs/reference/Connectors/capture-connectors/linkedin-ads.md",7661],eae8ea84:[()=>n.e(9327).then(n.bind(n,668)),"@site/docs/reference/Connectors/capture-connectors/marketo.md",668],ebce6379:[()=>n.e(2374).then(n.bind(n,5016)),"@site/docs/reference/Connectors/capture-connectors/exchange-rates.md",5016],f09a1148:[()=>n.e(9519).then(n.bind(n,1040)),"@site/docs/reference/Connectors/capture-connectors/airtable.md",1040],f47a7ed3:[()=>n.e(5527).then(n.bind(n,293)),"@site/docs/overview/who-should-use-flow.md",293],f59a0ebe:[()=>n.e(4574).then(n.bind(n,5869)),"@site/docs/reference/Connectors/capture-connectors/aircall.md",5869],f65e0d6c:[()=>n.e(5130).then(n.bind(n,7628)),"@site/docs/reference/Connectors/capture-connectors/braintree.md",7628],fbc5b77c:[()=>n.e(9730).then(n.bind(n,2828)),"@site/docs/reference/Connectors/capture-connectors/salesforce-real-time.md",2828],fc44458b:[()=>n.e(7195).then(n.bind(n,5248)),"@site/docs/reference/Connectors/materialization-connectors/Google-sheets.md",5248],fca4800a:[()=>n.e(5581).then(n.bind(n,3818)),"@site/docs/reference/Connectors/materialization-connectors/pinecone.md",3818],fe12321f:[()=>n.e(2490).then(n.bind(n,6080)),"@site/docs/reference/reduction-strategies/minimize-and-maximize.md",6080]};function l(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("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%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("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"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:l,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=c[`${e}-${t}`],p={},f=[],m=[],h=(0,u.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:l,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));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 a=i;const c=n.split(".");c.slice(0,-1).forEach((e=>{a=a[e]})),a[c[c.length-1]]=o}));const c=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(c,(0,o.Z)({},i,n)))}})}const f=[{path:"/example-markdown/",component:p("/example-markdown/","a56"),exact:!0},{path:"/example/",component:p("/example/","5e6"),exact:!0},{path:"/",component:p("/","125"),routes:[{path:"/",component:p("/","f82"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/",component:p("/concepts/","f74"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/advanced/journals/",component:p("/concepts/advanced/journals/","0f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/advanced/logs-stats/",component:p("/concepts/advanced/logs-stats/","5c2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/advanced/projections/",component:p("/concepts/advanced/projections/","7c0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/advanced/shards/",component:p("/concepts/advanced/shards/","99e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/captures/",component:p("/concepts/captures/","e9b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/catalogs/",component:p("/concepts/catalogs/","446"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/collections/",component:p("/concepts/collections/","f51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/connectors/",component:p("/concepts/connectors/","4bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/derivations/",component:p("/concepts/derivations/","67d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/flowctl/",component:p("/concepts/flowctl/","82a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/import/",component:p("/concepts/import/","5a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/materialization/",component:p("/concepts/materialization/","583"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/schemas/",component:p("/concepts/schemas/","57e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/storage-mappings/",component:p("/concepts/storage-mappings/","0e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/tests/",component:p("/concepts/tests/","ea7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/concepts/web-app/",component:p("/concepts/web-app/","fae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started/installation/",component:p("/getting-started/installation/","457"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started/tutorials/",component:p("/getting-started/tutorials/","5fb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started/tutorials/continuous-materialized-view/",component:p("/getting-started/tutorials/continuous-materialized-view/","66e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started/tutorials/dataflow-s3-snowflake/",component:p("/getting-started/tutorials/dataflow-s3-snowflake/","5c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/",component:p("/guides/","850"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/connect-network/",component:p("/guides/connect-network/","621"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/create-dataflow/",component:p("/guides/create-dataflow/","ae6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/customize-materialization-fields/",component:p("/guides/customize-materialization-fields/","524"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/edit-data-flows/",component:p("/guides/edit-data-flows/","49d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/flowctl/",component:p("/guides/flowctl/","f7e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/flowctl/create-derivation/",component:p("/guides/flowctl/create-derivation/","bb1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/flowctl/edit-draft-from-webapp/",component:p("/guides/flowctl/edit-draft-from-webapp/","158"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/flowctl/edit-specification-locally/",component:p("/guides/flowctl/edit-specification-locally/","d05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/flowctl/troubleshoot-task/",component:p("/guides/flowctl/troubleshoot-task/","bcd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/system-specific-dataflows/",component:p("/guides/system-specific-dataflows/","3de"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/system-specific-dataflows/firestore-to-dwh/",component:p("/guides/system-specific-dataflows/firestore-to-dwh/","1cc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/guides/system-specific-dataflows/s3-to-snowflake/",component:p("/guides/system-specific-dataflows/s3-to-snowflake/","8bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/overview/comparisons/",component:p("/overview/comparisons/","9ac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/overview/who-should-use-flow/",component:p("/overview/who-should-use-flow/","f65"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/authentication/",component:p("/reference/authentication/","f95"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Configuring-task-shards/",component:p("/reference/Configuring-task-shards/","4a6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/",component:p("/reference/Connectors/","b2a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/",component:p("/reference/Connectors/capture-connectors/","428"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/aircall/",component:p("/reference/Connectors/capture-connectors/aircall/","94d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/airtable/",component:p("/reference/Connectors/capture-connectors/airtable/","d9a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/alloydb/",component:p("/reference/Connectors/capture-connectors/alloydb/","56a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/alpaca/",component:p("/reference/Connectors/capture-connectors/alpaca/","46b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/amazon-ads/",component:p("/reference/Connectors/capture-connectors/amazon-ads/","fd4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/amazon-dynamodb/",component:p("/reference/Connectors/capture-connectors/amazon-dynamodb/","a1d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/amazon-kinesis/",component:p("/reference/Connectors/capture-connectors/amazon-kinesis/","995"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/amazon-s3/",component:p("/reference/Connectors/capture-connectors/amazon-s3/","921"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/amazon-sqs/",component:p("/reference/Connectors/capture-connectors/amazon-sqs/","98a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/amplitude/",component:p("/reference/Connectors/capture-connectors/amplitude/","a2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/apache-kafka/",component:p("/reference/Connectors/capture-connectors/apache-kafka/","000"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/bigquery/",component:p("/reference/Connectors/capture-connectors/bigquery/","397"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/bing-ads/",component:p("/reference/Connectors/capture-connectors/bing-ads/","6c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/braintree/",component:p("/reference/Connectors/capture-connectors/braintree/","6f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/braze/",component:p("/reference/Connectors/capture-connectors/braze/","6a1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/chargebee/",component:p("/reference/Connectors/capture-connectors/chargebee/","f8d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/exchange-rates/",component:p("/reference/Connectors/capture-connectors/exchange-rates/","ee8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/facebook-marketing/",component:p("/reference/Connectors/capture-connectors/facebook-marketing/","dd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/freshdesk/",component:p("/reference/Connectors/capture-connectors/freshdesk/","4b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/gcs/",component:p("/reference/Connectors/capture-connectors/gcs/","f2f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/github/",component:p("/reference/Connectors/capture-connectors/github/","596"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/gitlab/",component:p("/reference/Connectors/capture-connectors/gitlab/","822"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/google-ads/",component:p("/reference/Connectors/capture-connectors/google-ads/","6f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/google-analytics-4/",component:p("/reference/Connectors/capture-connectors/google-analytics-4/","0bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/google-analytics/",component:p("/reference/Connectors/capture-connectors/google-analytics/","96f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/google-firestore/",component:p("/reference/Connectors/capture-connectors/google-firestore/","e00"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/google-search-console/",component:p("/reference/Connectors/capture-connectors/google-search-console/","08c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/google-sheets/",component:p("/reference/Connectors/capture-connectors/google-sheets/","f0a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/greenhouse/",component:p("/reference/Connectors/capture-connectors/greenhouse/","b33"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/harvest/",component:p("/reference/Connectors/capture-connectors/harvest/","92d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/http-file/",component:p("/reference/Connectors/capture-connectors/http-file/","423"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/http-ingest/",component:p("/reference/Connectors/capture-connectors/http-ingest/","645"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/hubspot/",component:p("/reference/Connectors/capture-connectors/hubspot/","1c0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/instagram/",component:p("/reference/Connectors/capture-connectors/instagram/","4d3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/intercom/",component:p("/reference/Connectors/capture-connectors/intercom/","6d4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/iterable/",component:p("/reference/Connectors/capture-connectors/iterable/","798"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/jira/",component:p("/reference/Connectors/capture-connectors/jira/","fdc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/klaviyo/",component:p("/reference/Connectors/capture-connectors/klaviyo/","d9b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/linkedin-ads/",component:p("/reference/Connectors/capture-connectors/linkedin-ads/","51f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/mailchimp/",component:p("/reference/Connectors/capture-connectors/mailchimp/","058"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/mariadb/",component:p("/reference/Connectors/capture-connectors/mariadb/","811"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/marketo/",component:p("/reference/Connectors/capture-connectors/marketo/","a4b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/mixpanel/",component:p("/reference/Connectors/capture-connectors/mixpanel/","890"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/mongodb/",component:p("/reference/Connectors/capture-connectors/mongodb/","ce4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/MySQL/",component:p("/reference/Connectors/capture-connectors/MySQL/","ec7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/netsuite/",component:p("/reference/Connectors/capture-connectors/netsuite/","ee8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/notion/",component:p("/reference/Connectors/capture-connectors/notion/","8d1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/oracle-db/",component:p("/reference/Connectors/capture-connectors/oracle-db/","e97"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/paypal-transaction/",component:p("/reference/Connectors/capture-connectors/paypal-transaction/","ffe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/pinterest/",component:p("/reference/Connectors/capture-connectors/pinterest/","8d4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/postgres-batch/",component:p("/reference/Connectors/capture-connectors/postgres-batch/","b08"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/postgres-heroku/",component:p("/reference/Connectors/capture-connectors/postgres-heroku/","64f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/PostgreSQL/",component:p("/reference/Connectors/capture-connectors/PostgreSQL/","fe0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/recharge/",component:p("/reference/Connectors/capture-connectors/recharge/","cf4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/salesforce-real-time/",component:p("/reference/Connectors/capture-connectors/salesforce-real-time/","39e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/salesforce/",component:p("/reference/Connectors/capture-connectors/salesforce/","588"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/sendgrid/",component:p("/reference/Connectors/capture-connectors/sendgrid/","0cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/sentry/",component:p("/reference/Connectors/capture-connectors/sentry/","852"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/sftp/",component:p("/reference/Connectors/capture-connectors/sftp/","b3e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/slack/",component:p("/reference/Connectors/capture-connectors/slack/","15f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/snapchat/",component:p("/reference/Connectors/capture-connectors/snapchat/","5aa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/sqlserver/",component:p("/reference/Connectors/capture-connectors/sqlserver/","823"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/stripe/",component:p("/reference/Connectors/capture-connectors/stripe/","d2d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/survey-monkey/",component:p("/reference/Connectors/capture-connectors/survey-monkey/","53e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/tiktok/",component:p("/reference/Connectors/capture-connectors/tiktok/","35b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/twilio/",component:p("/reference/Connectors/capture-connectors/twilio/","9e4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/woocommerce/",component:p("/reference/Connectors/capture-connectors/woocommerce/","aa0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/youtube-analytics/",component:p("/reference/Connectors/capture-connectors/youtube-analytics/","25b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/zendesk-chat/",component:p("/reference/Connectors/capture-connectors/zendesk-chat/","0db"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/capture-connectors/zendesk-support/",component:p("/reference/Connectors/capture-connectors/zendesk-support/","951"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/",component:p("/reference/Connectors/materialization-connectors/","a5f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/alloydb/",component:p("/reference/Connectors/materialization-connectors/alloydb/","2f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/amazon-dynamodb/",component:p("/reference/Connectors/materialization-connectors/amazon-dynamodb/","056"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/amazon-redshift/",component:p("/reference/Connectors/materialization-connectors/amazon-redshift/","85a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/BigQuery/",component:p("/reference/Connectors/materialization-connectors/BigQuery/","70a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/Elasticsearch/",component:p("/reference/Connectors/materialization-connectors/Elasticsearch/","1ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/Firebolt/",component:p("/reference/Connectors/materialization-connectors/Firebolt/","963"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/google-pubsub/",component:p("/reference/Connectors/materialization-connectors/google-pubsub/","2f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/Google-sheets/",component:p("/reference/Connectors/materialization-connectors/Google-sheets/","e40"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/mongodb/",component:p("/reference/Connectors/materialization-connectors/mongodb/","fa5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/mysql/",component:p("/reference/Connectors/materialization-connectors/mysql/","236"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/Parquet/",component:p("/reference/Connectors/materialization-connectors/Parquet/","176"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/pinecone/",component:p("/reference/Connectors/materialization-connectors/pinecone/","e2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/PostgreSQL/",component:p("/reference/Connectors/materialization-connectors/PostgreSQL/","744"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/Rockset/",component:p("/reference/Connectors/materialization-connectors/Rockset/","5e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/Snowflake/",component:p("/reference/Connectors/materialization-connectors/Snowflake/","d48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/SQLite/",component:p("/reference/Connectors/materialization-connectors/SQLite/","9d4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-connectors/timescaledb/",component:p("/reference/Connectors/materialization-connectors/timescaledb/","6ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/Connectors/materialization-protocol/",component:p("/reference/Connectors/materialization-protocol/","b5d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/editing/",component:p("/reference/editing/","0a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/organizing-catalogs/",component:p("/reference/organizing-catalogs/","f18"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/",component:p("/reference/reduction-strategies/","f35"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/append/",component:p("/reference/reduction-strategies/append/","d16"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/composing-with-conditionals/",component:p("/reference/reduction-strategies/composing-with-conditionals/","1d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/firstwritewins-and-lastwritewins/",component:p("/reference/reduction-strategies/firstwritewins-and-lastwritewins/","def"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/merge/",component:p("/reference/reduction-strategies/merge/","8df"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/minimize-and-maximize/",component:p("/reference/reduction-strategies/minimize-and-maximize/","f90"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/set/",component:p("/reference/reduction-strategies/set/","4cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/reduction-strategies/sum/",component:p("/reference/reduction-strategies/sum/","a4a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/reference/working-logs-stats/",component:p("/reference/working-logs-stats/","0b8"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},496:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),c=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var l=n(723),u=n(6550),d=n(8790);const p="estuary.docs.hideNavBar",f="running-in-iframe";function m(e){let{children:t}=e;return(0,r.useEffect)((()=>{const e=e=>{"http://localhost:3000"!==e.origin&&"https://dashboard.estuary.dev"!==e.origin||e.data?.type===p&&window.document.body.classList.add(f)};return window.addEventListener("message",e),()=>{window.removeEventListener("message",e)}}),[]),r.createElement(r.Fragment,null,t)}var h=n(7462),g=n(5742),b=n(2263),v=n(4996),y=n(6668),w=n(1944),k=n(4711),S=n(9727),E=n(3320),C=n(197);function x(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,b.Z)(),n=(0,k.l)();return r.createElement(g.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,b.Z)(),o=function(){const{siteConfig:{url:e}}=(0,b.Z)(),{pathname:t}=(0,u.TH)();return e+(0,v.Z)(t)}(),a=t?`${n}${t}`:o;return r.createElement(g.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function T(){const{i18n:{currentLocale:e}}=(0,b.Z)(),{metadata:t,image:n}=(0,y.L)();return r.createElement(r.Fragment,null,r.createElement(g.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:S.h})),n&&r.createElement(w.d,{image:n}),r.createElement(_,null),r.createElement(x,null),r.createElement(C.Z,{tag:E.HX,locale:e}),r.createElement(g.Z,null,t.map(((e,t)=>r.createElement("meta",(0,h.Z)({key:t},e))))))}const L=new Map;function A(e){if(L.has(e.pathname))return{...e,pathname:L.get(e.pathname)};if((0,d.f)(l.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return L.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return L.set(e.pathname,t),{...e,pathname:t}}var R=n(8934),P=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),N("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function D(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(l.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=c.Z.canUseDOM?N("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=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),D(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 r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const z=I,M="docusaurus-base-url-issue-banner-container",F="docusaurus-base-url-issue-banner",B="docusaurus-base-url-issue-banner-suggestion-container",j="__DOCUSAURUS_INSERT_BASEURL_BANNER";function U(e){return`\nwindow['${j}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${j}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\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(/{window[j]=!1}),[]),r.createElement(r.Fragment,null,!c.Z.canUseDOM&&r.createElement(g.Z,null,r.createElement("script",null,U(e))),r.createElement("div",{id:M}))}function q(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,b.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement($,null):null}function G(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,b.Z)(),i=(0,v.Z)(e),{htmlLang:c,direction:s}=a[o];return r.createElement(g.Z,null,r.createElement("html",{lang:c,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var H=n(4763);function Z(){const e=(0,d.H)(l.Z),t=(0,u.TH)();return r.createElement(H.Z,null,r.createElement(P.M,null,r.createElement(R.t,null,r.createElement(m,null,r.createElement(G,null),r.createElement(T,null),r.createElement(q,null),r.createElement(z,{location:A(t)},e)))))}var V=n(6887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Q=n(9670);const Y=new Set,K=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch(e){if(!(e=>!X()&&!K.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,d.f)(l.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Q.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!K.has(e))(e)&&(K.add(e),D(e))},ee=Object.freeze(J);if(c.Z.canUseDOM){window.docusaurus=ee;const e=o.hydrate;D(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1693594870507.json","lunrIndex":"lunr-index-1693594870507.json"}}},"docusaurus-plugin-google-tag-manager":{"default":{"containerId":"GTM-WK8SB2L","id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"overview/README","docs":[{"id":"concepts/advanced/journals","path":"/concepts/advanced/journals","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/logs-stats","path":"/concepts/advanced/logs-stats","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/projections","path":"/concepts/advanced/projections","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/shards","path":"/concepts/advanced/shards","sidebar":"tutorialSidebar"},{"id":"concepts/captures","path":"/concepts/captures","sidebar":"tutorialSidebar"},{"id":"concepts/catalogs","path":"/concepts/catalogs","sidebar":"tutorialSidebar"},{"id":"concepts/collections","path":"/concepts/collections","sidebar":"tutorialSidebar"},{"id":"concepts/connectors","path":"/concepts/connectors","sidebar":"tutorialSidebar"},{"id":"concepts/derivations","path":"/concepts/derivations","sidebar":"tutorialSidebar"},{"id":"concepts/flowctl","path":"/concepts/flowctl","sidebar":"tutorialSidebar"},{"id":"concepts/import","path":"/concepts/import","sidebar":"tutorialSidebar"},{"id":"concepts/materialization","path":"/concepts/materialization","sidebar":"tutorialSidebar"},{"id":"concepts/README","path":"/concepts/","sidebar":"tutorialSidebar"},{"id":"concepts/schemas","path":"/concepts/schemas","sidebar":"tutorialSidebar"},{"id":"concepts/storage-mappings","path":"/concepts/storage-mappings","sidebar":"tutorialSidebar"},{"id":"concepts/tests","path":"/concepts/tests","sidebar":"tutorialSidebar"},{"id":"concepts/web-app","path":"/concepts/web-app","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/continuous-materialized-view","path":"/getting-started/tutorials/continuous-materialized-view","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/dataflow-s3-snowflake","path":"/getting-started/tutorials/dataflow-s3-snowflake","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/README","path":"/getting-started/tutorials/","sidebar":"tutorialSidebar"},{"id":"guides/connect-network","path":"/guides/connect-network","sidebar":"tutorialSidebar"},{"id":"guides/create-dataflow","path":"/guides/create-dataflow","sidebar":"tutorialSidebar"},{"id":"guides/customize-materialization-fields","path":"/guides/customize-materialization-fields","sidebar":"tutorialSidebar"},{"id":"guides/edit-data-flows","path":"/guides/edit-data-flows","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/create-derivation","path":"/guides/flowctl/create-derivation","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/edit-draft-from-webapp","path":"/guides/flowctl/edit-draft-from-webapp","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/edit-specification-locally","path":"/guides/flowctl/edit-specification-locally","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/README","path":"/guides/flowctl/","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/troubleshoot-task","path":"/guides/flowctl/troubleshoot-task","sidebar":"tutorialSidebar"},{"id":"guides/README","path":"/guides/","sidebar":"tutorialSidebar"},{"id":"guides/system-specific-dataflows/firestore-to-dwh","path":"/guides/system-specific-dataflows/firestore-to-dwh","sidebar":"tutorialSidebar"},{"id":"guides/system-specific-dataflows/README","path":"/guides/system-specific-dataflows/","sidebar":"tutorialSidebar"},{"id":"guides/system-specific-dataflows/s3-to-snowflake","path":"/guides/system-specific-dataflows/s3-to-snowflake","sidebar":"tutorialSidebar"},{"id":"overview/comparisons","path":"/overview/comparisons","sidebar":"tutorialSidebar"},{"id":"overview/README","path":"/","sidebar":"tutorialSidebar"},{"id":"overview/who-should-use-flow","path":"/overview/who-should-use-flow","sidebar":"tutorialSidebar"},{"id":"reference/authentication","path":"/reference/authentication","sidebar":"tutorialSidebar"},{"id":"reference/Configuring-task-shards","path":"/reference/Configuring-task-shards","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/aircall","path":"/reference/Connectors/capture-connectors/aircall","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/airtable","path":"/reference/Connectors/capture-connectors/airtable","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/alloydb","path":"/reference/Connectors/capture-connectors/alloydb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/alpaca","path":"/reference/Connectors/capture-connectors/alpaca","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-ads","path":"/reference/Connectors/capture-connectors/amazon-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-dynamodb","path":"/reference/Connectors/capture-connectors/amazon-dynamodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-kinesis","path":"/reference/Connectors/capture-connectors/amazon-kinesis","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-s3","path":"/reference/Connectors/capture-connectors/amazon-s3","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-sqs","path":"/reference/Connectors/capture-connectors/amazon-sqs","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amplitude","path":"/reference/Connectors/capture-connectors/amplitude","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/apache-kafka","path":"/reference/Connectors/capture-connectors/apache-kafka","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/bigquery","path":"/reference/Connectors/capture-connectors/bigquery","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/bing-ads","path":"/reference/Connectors/capture-connectors/bing-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/braintree","path":"/reference/Connectors/capture-connectors/braintree","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/braze","path":"/reference/Connectors/capture-connectors/braze","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/chargebee","path":"/reference/Connectors/capture-connectors/chargebee","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/exchange-rates","path":"/reference/Connectors/capture-connectors/exchange-rates","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/facebook-marketing","path":"/reference/Connectors/capture-connectors/facebook-marketing","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/freshdesk","path":"/reference/Connectors/capture-connectors/freshdesk","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/gcs","path":"/reference/Connectors/capture-connectors/gcs","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/github","path":"/reference/Connectors/capture-connectors/github","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/gitlab","path":"/reference/Connectors/capture-connectors/gitlab","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-ads","path":"/reference/Connectors/capture-connectors/google-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-analytics","path":"/reference/Connectors/capture-connectors/google-analytics","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-analytics-4","path":"/reference/Connectors/capture-connectors/google-analytics-4","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-firestore","path":"/reference/Connectors/capture-connectors/google-firestore","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-search-console","path":"/reference/Connectors/capture-connectors/google-search-console","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-sheets","path":"/reference/Connectors/capture-connectors/google-sheets","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/greenhouse","path":"/reference/Connectors/capture-connectors/greenhouse","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/harvest","path":"/reference/Connectors/capture-connectors/harvest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/http-file","path":"/reference/Connectors/capture-connectors/http-file","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/http-ingest","path":"/reference/Connectors/capture-connectors/http-ingest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/hubspot","path":"/reference/Connectors/capture-connectors/hubspot","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/instagram","path":"/reference/Connectors/capture-connectors/instagram","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/intercom","path":"/reference/Connectors/capture-connectors/intercom","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/iterable","path":"/reference/Connectors/capture-connectors/iterable","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/jira","path":"/reference/Connectors/capture-connectors/jira","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/klaviyo","path":"/reference/Connectors/capture-connectors/klaviyo","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/linkedin-ads","path":"/reference/Connectors/capture-connectors/linkedin-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mailchimp","path":"/reference/Connectors/capture-connectors/mailchimp","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mariadb","path":"/reference/Connectors/capture-connectors/mariadb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/marketo","path":"/reference/Connectors/capture-connectors/marketo","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mixpanel","path":"/reference/Connectors/capture-connectors/mixpanel","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mongodb","path":"/reference/Connectors/capture-connectors/mongodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MySQL","path":"/reference/Connectors/capture-connectors/MySQL","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/netsuite","path":"/reference/Connectors/capture-connectors/netsuite","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/notion","path":"/reference/Connectors/capture-connectors/notion","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/oracle-db","path":"/reference/Connectors/capture-connectors/oracle-db","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/paypal-transaction","path":"/reference/Connectors/capture-connectors/paypal-transaction","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/pinterest","path":"/reference/Connectors/capture-connectors/pinterest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/postgres-batch","path":"/reference/Connectors/capture-connectors/postgres-batch","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/postgres-heroku","path":"/reference/Connectors/capture-connectors/postgres-heroku","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL","path":"/reference/Connectors/capture-connectors/PostgreSQL","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/README","path":"/reference/Connectors/capture-connectors/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/recharge","path":"/reference/Connectors/capture-connectors/recharge","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/salesforce","path":"/reference/Connectors/capture-connectors/salesforce","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/salesforce-real-time","path":"/reference/Connectors/capture-connectors/salesforce-real-time","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sendgrid","path":"/reference/Connectors/capture-connectors/sendgrid","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sentry","path":"/reference/Connectors/capture-connectors/sentry","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sftp","path":"/reference/Connectors/capture-connectors/sftp","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/slack","path":"/reference/Connectors/capture-connectors/slack","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/snapchat","path":"/reference/Connectors/capture-connectors/snapchat","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sqlserver","path":"/reference/Connectors/capture-connectors/sqlserver","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/stripe","path":"/reference/Connectors/capture-connectors/stripe","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/survey-monkey","path":"/reference/Connectors/capture-connectors/survey-monkey","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/tiktok","path":"/reference/Connectors/capture-connectors/tiktok","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/twilio","path":"/reference/Connectors/capture-connectors/twilio","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/woocommerce","path":"/reference/Connectors/capture-connectors/woocommerce","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/youtube-analytics","path":"/reference/Connectors/capture-connectors/youtube-analytics","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/zendesk-chat","path":"/reference/Connectors/capture-connectors/zendesk-chat","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/zendesk-support","path":"/reference/Connectors/capture-connectors/zendesk-support","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/alloydb","path":"/reference/Connectors/materialization-connectors/alloydb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-dynamodb","path":"/reference/Connectors/materialization-connectors/amazon-dynamodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-redshift","path":"/reference/Connectors/materialization-connectors/amazon-redshift","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/BigQuery","path":"/reference/Connectors/materialization-connectors/BigQuery","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Elasticsearch","path":"/reference/Connectors/materialization-connectors/Elasticsearch","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Firebolt","path":"/reference/Connectors/materialization-connectors/Firebolt","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/google-pubsub","path":"/reference/Connectors/materialization-connectors/google-pubsub","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Google-sheets","path":"/reference/Connectors/materialization-connectors/Google-sheets","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/mongodb","path":"/reference/Connectors/materialization-connectors/mongodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/mysql","path":"/reference/Connectors/materialization-connectors/mysql","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Parquet","path":"/reference/Connectors/materialization-connectors/Parquet","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/pinecone","path":"/reference/Connectors/materialization-connectors/pinecone","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/PostgreSQL","path":"/reference/Connectors/materialization-connectors/PostgreSQL","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/README","path":"/reference/Connectors/materialization-connectors/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Rockset","path":"/reference/Connectors/materialization-connectors/Rockset","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Snowflake","path":"/reference/Connectors/materialization-connectors/Snowflake","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/SQLite","path":"/reference/Connectors/materialization-connectors/SQLite","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/timescaledb","path":"/reference/Connectors/materialization-connectors/timescaledb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-protocol","path":"/reference/Connectors/materialization-protocol","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/README","path":"/reference/Connectors/","sidebar":"tutorialSidebar"},{"id":"reference/editing","path":"/reference/editing","sidebar":"tutorialSidebar"},{"id":"reference/organizing-catalogs","path":"/reference/organizing-catalogs","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/append","path":"/reference/reduction-strategies/append","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/composing-with-conditionals","path":"/reference/reduction-strategies/composing-with-conditionals","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/firstwritewins-and-lastwritewins","path":"/reference/reduction-strategies/firstwritewins-and-lastwritewins","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/merge","path":"/reference/reduction-strategies/merge","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/minimize-and-maximize","path":"/reference/reduction-strategies/minimize-and-maximize","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/README","path":"/reference/reduction-strategies/","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/set","path":"/reference/reduction-strategies/set","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/sum","path":"/reference/reduction-strategies/sum","sidebar":"tutorialSidebar"},{"id":"reference/working-logs-stats","path":"/reference/working-logs-stats","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/","label":"Overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var c=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.0"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"2.1.15"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.0"},"docusaurus-plugin-google-tag-manager":{"type":"package","name":"@docusaurus/plugin-google-tag-manager","version":"2.4.0"}}}'),l={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:c},u=r.createContext(l);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:l},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(412),a=n(5742),i=n(8780),c=n(1303);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(l,{error:t}))}function l(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(c.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),o=n(7294),a=n(3727),i=n(8780),c=n(2263),s=n(3919),l=n(412);const u=o.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,c.Z)(),{withBaseUrl:k}=(0,d.C)(),S=(0,o.useContext)(u),E=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>E.current));const C=p||f;const x=(0,s.Z)(C),_=C?.replace("pathname://","");let T=void 0!==_?(L=_,b&&(e=>e.startsWith("/"))(L)?k(L):L):void 0;var L;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,o.useRef)(!1),R=n?a.OL:a.rU,P=l.Z.canUseIntersectionObserver,N=(0,o.useRef)(),O=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,o.useEffect)((()=>(!P&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{P&&N.current&&N.current.disconnect()})),[N,T,P,x]);const D=T?.startsWith("#")??!1,I=!T||!x||D;return I||g||S.collectLink(T),I?o.createElement("a",(0,r.Z)({ref:E,href:T},C&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(R,(0,r.Z)({},v,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{E.current=e,P&&e&&x&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),N.current.observe(e))},to:T},n&&{isActive:h,activeClassName:m}))}const f=o.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>c});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function c(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const c=i({message:t,id:n});return r.createElement(r.Fragment,null,o(c,a))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>c});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const c=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+c:c}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function c(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},8084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(2263),o=n(9935);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const c=o?`${o}.${a}`:a;r(i)?e(i,c):t[c]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},4104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>f,gA:()=>u,_r:()=>s,Jo:()=>m,zh:()=>l,yW:()=>p,gB:()=>d});var r=n(6550),o=n(8084);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=function(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},s=()=>(0,o.OD)("docusaurus-plugin-content-docs")??c,l=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function u(e){void 0===e&&(e={});const t=s(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&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 a}(t,n,e)}function d(e){return l(e).versions}function p(e){const t=l(e);return a(t)}function f(e){const t=l(e),{pathname:n}=(0,r.TH)();return i(t,n)}function m(e){const t=l(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("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"}))}},1303:(e,t,n)=>{"use strict";n.d(t,{Z:()=>gt});var r=n(7294),o=n(6010),a=n(4763),i=n(1944),c=n(7462),s=n(6550),l=n(5999),u=n(5936);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.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.I)({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 h(e){const t=e.children??m,{containerRef:n,onClick:o}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,c.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var w=n(6668),k=n(9689);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,c.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const E={closeButton:"closeButton_CVFx"};function C(e){return r.createElement("button",(0,c.Z)({type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",E.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,c.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(_,{className:T.announcementBarContent}),i&&r.createElement(C,{onClick:n,className:T.announcementBarClose}))}var A=n(3163),R=n(2466);var P=n(902),N=n(3102);const O=r.createContext(null);function D(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(O.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function z(){const e=(0,r.useContext)(O);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=z();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(2949),B=n(2389);function j(e){return r.createElement("svg",(0,c.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("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 r.createElement("svg",(0,c.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("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 $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const c=(0,B.Z)(),s=(0,l.I)({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"===a?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!c&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!c,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(j,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const G=r.memo(q),H="estuary.colorMode";function Z(e){const[t,n]=(0,r.useState)(!1),{onChange:o}=e;return(0,r.useEffect)((()=>{const e=e=>{"http://localhost:3000"!==e.origin&&"https://dashboard.estuary.dev"!==e.origin||e.data?.type===H&&o(e.data.mode)};return t||(window.addEventListener("message",e),n(!0)),()=>{window.removeEventListener("message",e)}}),[]),r.createElement(r.Fragment,null,r.createElement(G,e))}const V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(Z,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(1327);function Y(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,l.I)({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()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function X(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Y,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(K,null))}var J=n(9960),ee=n(4996),te=n(3919);function ne(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var re=n(9471);function oe(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:l,prependBaseUrlToHref:u,...d}=e;const p=(0,ee.Z)(o),f=(0,ee.Z)(t),m=(0,ee.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,te.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(re.Z,l&&{width:12,height:12}))};return a?r.createElement(J.Z,(0,c.Z)({href:u?m:a},d,g)):r.createElement(J.Z,(0,c.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ne(n,t.pathname):t.pathname.startsWith(f)},d,g))}function ae(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(oe,(0,c.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function ie(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(oe,(0,c.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ce(e){let{mobile:t=!1,position:n,...o}=e;const a=t?ie:ae;return r.createElement(a,(0,c.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var se=n(6043),le=n(8596),ue=n(2263);function de(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ne(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function pe(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),r.createElement("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(oe,(0,c.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Ae,(0,c.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function fe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,ue.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=de(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(oe,(0,c.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},l,{onClick:e=>{e.preventDefault(),f()}}),l.children??l.label),r.createElement(se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(Ae,(0,c.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function me(e){let{mobile:t=!1,...n}=e;const o=t?fe:pe;return r.createElement(o,n)}var he=n(4711);function ge(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,c.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("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 be="iconLanguage_nlXk";var ve=n(4184),ye=n.n(ve),we=n(8084);const ke=e=>{const t=(0,r.useRef)(!1),o=(0,r.useRef)(null),[a,i]=(0,r.useState)(!1),c=(0,s.k6)(),{siteConfig:l={},isClient:u=!1}=(0,ue.Z)(),{baseUrl:d}=l,p=(0,we.eZ)("docusaurus-lunr-search"),f=()=>{t.current||(Promise.all([fetch(`${d}${p.fileNames.searchDoc}`).then((e=>e.json())),fetch(`${d}${p.fileNames.lunrIndex}`).then((e=>e.json())),Promise.all([n.e(8797),n.e(5684)]).then(n.bind(n,1942)),Promise.all([n.e(532),n.e(2572)]).then(n.bind(n,2572))]).then((e=>{let[t,n,{default:r}]=e;0!==t.length&&(((e,t,n)=>{new n({searchDocs:e,searchIndex:t,inputSelector:"#search_input_react",handleSelected:(e,t,n)=>{const r=d+n.url;document.createElement("a").href=r,c.push(r)}})})(t,n,r),i(!0))})),t.current=!0)},m=(0,r.useCallback)((t=>{o.current.contains(t.target)||o.current.focus(),e.handleSearchBarToggle&&e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]);return u&&f(),r.createElement("div",{className:"navbar__search",key:"search-box"},r.createElement("span",{"aria-label":"expand searchbar",role:"button",className:ye()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:m,onKeyDown:m,tabIndex:0}),r.createElement("input",{id:"search_input_react",type:"search",placeholder:a?"Search":"Loading...","aria-label":"Search",className:ye()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:f,onMouseOver:f,onFocus:m,onBlur:m,ref:o,disabled:!a}))},Se={searchBox:"searchBox_ZlJk"};function Ee(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,Se.searchBox)},t)}var Ce=n(4104),xe=n(3438);var _e=n(373);const Te=e=>e.docs.find((t=>t.id===e.mainDocId));const Le={default:ce,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,ue.Z)(),p=(0,he.l)(),{search:f,hash:m}=(0,s.TH)(),h=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;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":""}})),...o],g=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(me,(0,c.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(ge,{className:be}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Ee,{className:n},r.createElement(ke,null))},dropdown:me,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const c=i?"li":"div";return r.createElement(c,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,Ce.Iw)(o),s=(0,xe.vY)(t,o);return null===s?null:r.createElement(ce,(0,c.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,Ce.Iw)(o),s=(0,xe.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ce,(0,c.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,xe.lO)(o)[0],s=t??i.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ce,(0,c.Z)({},a,{label:s,to:l}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...u}=e;const{search:d,hash:p}=(0,s.TH)(),f=(0,Ce.Iw)(n),m=(0,Ce.gB)(n),{savePreferredVersionName:h}=(0,_e.J)(n),g=[...a,...m.map((e=>{const t=f.alternateDocVersions[e.name]??Te(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...i],b=(0,xe.lO)(n)[0],v=t&&g.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&g.length>1?void 0:Te(b).path;return g.length<=1?r.createElement(ce,(0,c.Z)({},u,{mobile:t,label:v,to:y,isActive:o?()=>!1:void 0})):r.createElement(me,(0,c.Z)({},u,{mobile:t,label:v,to:y,items:g,isActive:o?()=>!1:void 0}))}};function Ae(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Le[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function Re(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ae,(0,c.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Pe(e){return r.createElement("button",(0,c.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(l.Z,{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)"},"\u2190 Back to main menu"))}function Ne(){const e=0===(0,w.L)().navbar.items.length,t=z();return r.createElement(r.Fragment,null,!e&&r.createElement(Pe,{onClick:()=>t.hide()}),t.content)}function Oe(){const e=(0,A.e)();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?r.createElement(M,{header:r.createElement(X,null),primaryMenu:r.createElement(Re,null),secondaryMenu:r.createElement(Ne,null)}):null}const De={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ie(e){return r.createElement("div",(0,c.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function ze(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:c,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,R.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=c?n(!1):i+l{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:c,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[De.navbarHideable,!s&&De.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(Ie,{onClick:i.toggle}),r.createElement(Oe,null))}var Me=n(8780);const Fe={errorBoundaryError:"errorBoundaryError_a6uf"};function Be(e){return r.createElement("button",(0,c.Z)({type:"button"},e),r.createElement(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function je(e){let{error:t}=e;const n=(0,Me.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Fe.errorBoundaryError},n)}class Ue extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const $e="right";function qe(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,c.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ge(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,l.I)({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"},r.createElement(qe,null))}const He={colorModeToggle:"colorModeToggle_DEke"};function Ze(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ue,{key:t,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})},r.createElement(Ae,e)))))}function Ve(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function We(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??$e)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ve,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Ge,null),r.createElement(Y,null),r.createElement(Ze,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ze,{items:o}),r.createElement(W,{className:He.colorModeToggle}),!a&&r.createElement(Ee,null,r.createElement(ke,null)))})}function Qe(){return r.createElement(ze,null,r.createElement(We,null))}function Ye(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,l=(0,ee.Z)(n),u=(0,ee.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(J.Z,(0,c.Z)({className:"footer__link-item"},o?{href:i?u:o}:{to:l},s),a,o&&!(0,te.Z)(o)&&r.createElement(re.Z,null))}function Ke(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ye,{item:t}))}function Xe(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ke,{key:t,item:e})))))}function Je(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Xe,{key:t,column:e}))))}function et(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function tt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ye,{item:t})}function nt(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(tt,{item:e}),t.length!==n+1&&r.createElement(et,null))))))}function rt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Je,{columns:t}):r.createElement(nt,{links:t})}var ot=n(941);const at={footerLogoLink:"footerLogoLink_BH7S"};function it(e){let{logo:t}=e;const{withBaseUrl:n}=(0,ee.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(ot.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function ct(e){let{logo:t}=e;return t.href?r.createElement(J.Z,{href:t.href,className:at.footerLogoLink,target:t.target},r.createElement(it,{logo:t})):r.createElement(it,{logo:t})}function st(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function lt(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function ut(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(lt,{style:a,links:n&&n.length>0&&r.createElement(rt,{links:n}),logo:o&&r.createElement(ct,{logo:o}),copyright:t&&r.createElement(st,{copyright:t})})}const dt=r.memo(ut),pt=(0,P.Qc)([F.S,k.pl,R.OC,_e.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(A.M,null,r.createElement(D,null,t)))}]);function ft(e){let{children:t}=e;return r.createElement(pt,null,t)}function mt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Be,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(je,{error:t})))))}const ht={mainWrapper:"mainWrapper_z2l0"};function gt(e){const{children:t,noFooter:n,wrapperClassName:c,title:s,description:l}=e;return(0,b.t)(),r.createElement(ft,null,r.createElement(i.d,{title:s,description:l}),r.createElement(y,null),r.createElement(L,null),r.createElement(Qe,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ht.mainWrapper,c)},r.createElement(a.Z,{fallback:e=>r.createElement(mt,e)},t)),!n&&r.createElement(dt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(9960),i=n(4996),c=n(2263),s=n(6668),l=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},c=o.createElement(l.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},c):c}function d(e){const{siteConfig:{title:t}}=(0,c.Z)(),{navbar:{title:n,logo:l}}=(0,s.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(l?.href||"/"),h=n?"":t,g=l?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},f,l?.target&&{target:l.target}),l&&o.createElement(u,{logo:l,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(5742);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(7462),o=n(7294),a=n(6010),i=n(2389),c=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function l(e){const t=(0,i.Z)(),{colorMode:n}=(0,c.I)(),{sources:l,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,r.Z)({key:e,src:l[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],u)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>g});var r=n(7462),o=n(7294),a=n(412);const i="ease-in-out";function c(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const s={display:"none",overflow:"hidden",height:"0px"},l={display:"block",overflow:"visible",height:"auto"};function u(e,t){const n=t?s:l;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=function(){const t=e.scrollHeight;return{transition:`height ${r?.duration??d(t)}ms ${r?.easing??i}`,height:`${t}px`}}();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return u(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(o(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{o()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!a.Z.canUseDOM)return e?s:l}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:c,disableSSRStyle:s}=e;const l=(0,o.useRef)(null);return p({collapsibleRef:l,collapsed:n,animation:a}),o.createElement(t,{ref:l,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(u(l.current,n),i?.(n))},className:c},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[c,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:c})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),o=n(2389),a=n(12),i=n(902),c=n(6668);const s=(0,a.WA)("docusaurus.announcement.dismiss"),l=(0,a.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,c.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{a(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=l.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;l.set(t),r&&d(!1),!r&&u()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(412),a=n(902),i=n(12),c=n(6668);const s=r.createContext(void 0),l="theme",u=(0,i.WA)(l),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>o.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{u.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,c.L)(),[o,a]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==l)return;const t=u.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g});var r=n(7294),o=n(4104),a=n(9935),i=n(6668),c=n(3438),s=n(902),l=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,l.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,l.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,l.WA)(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,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,c]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{c(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(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,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),c((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return c.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=b(),{preferredVersionName:c}=n[e];return{preferredVersion:t.versions.find((e=>e.name===c))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>c});var r=n(7294),o=n(902);const a=Symbol("EmptyContext"),i=r.createContext(a);function c(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>p});var r=n(7294),o=n(3102),a=n(7524),i=n(1980),c=n(6668),s=n(902);const l=r.createContext(void 0);function u(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,l]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)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:s})),[e,n,u,s])}function d(e){let{children:t}=e;const n=u();return r.createElement(l.Provider,{value:n},t)}function p(){const e=r.useContext(l);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>c,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(902);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,c]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{c({component:t,props:s})}),[c,t,s]),(0,r.useEffect)((()=>()=>c({component:null,props:null})),[c]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function c(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function l(){const[e,t]=(0,r.useState)((()=>s?"ssr":c()));return(0,r.useEffect)((()=>{function e(){t(c())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",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:{}}},3438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>k,lO:()=>v,oz:()=>y,s1:()=>b,vY:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(4104),c=n(373),s=n(1116),l=n(7392),u=n(8596);const d=!!i._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const f=(e,t)=>void 0!==e&&(0,u.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,u.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,u.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function b(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,c.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,l.j)([t,n,o].filter(Boolean))),[t,n,o])}function y(e,t){const n=v(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- ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(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,l.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,c=i.find((e=>(0,o.LX)(r.pathname,e)));if(!c)return null;const s=c.sidebar,l=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:l}}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>c,_X:()=>s});var r=n(7294),o=n(6550),a=n(1688),i=n(902);function c(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(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){return function(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(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 o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),o=n(6010),a=n(5742),i=n(226);function c(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),l=n(2263);function u(e){let{title:t,description:n,keywords:o,image:i,children:c}=e;const u=function(e){const{siteConfig:t}=(0,l.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),c)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),c=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:c},r.createElement(a.Z,null,r.createElement("html",{className:c})),n)}function f(e){let{children:t}=e;const n=c(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,o.Z)(a,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>l,Ql:()=>s,i6:()=>c,zX:()=>a});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class c extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function l(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>c});var r=n(7294),o=n(723),a=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function c(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d,o5:()=>p});var r=n(7294),o=n(412),a=n(2389),i=n(902);const c=r.createContext(void 0);function s(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 r.createElement(c.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(c);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=l(),o=(0,r.useRef)(u()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=l(),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),o=(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,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function f(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"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 o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),o=n(1688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function c(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(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),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=c(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}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,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(2263),o=n(6550);function a(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:a}}=(0,r.Z)(),{pathname:i}=(0,o.TH)(),c=a===n?e:e.replace(`/${a}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${c}`:`${c}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},4184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>f,PP:()=>L,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!l)for(;d--;d)i.unshift("..");!l||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var c=n(8776);function s(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,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(c){throw c instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):c}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={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},c={};function s(e){return r.isMemo(e)?i:c[e.$$typeof]||o}c[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},c[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 o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var c=s(t),h=s(n),g=0;g{"use strict";e.exports=function(e,t,n,r,o,a,i,c){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,a,i,c],u=0;(s=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;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 o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}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=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),l=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,c((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(l,i(e,u,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{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)*o(Math.random()*t,.1,.95)),t=o(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 o,i=t.querySelector(r.barSelector),c=e?"-100":a(n.status||0),l=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),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 c=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[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===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,c=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return c(a(e,t),t)},e.exports.tokensToFunction=c,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,c="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(c+=e.slice(i,f),i=f+d.length,p)c+=p[1];else{var m=e[i],h=n[2],g=n[3],b=n[4],v=n[5],y=n[6],w=n[7];c&&(r.push(c),c="");var k=null!=h&&null!=m&&m!==h,S="+"===y||"*"===y,E="?"===y||"*"===y,C=n[2]||u,x=b||v;r.push({name:g||a++,prefix:h||"",delimiter:C,optional:E,repeat:S,partial:k,asterisk:!!w,pattern:x?l(x):w?".*":"[^"+s(C)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);E+=S.value.length,S=S.next){var C=S.value;if(t.length>e.length)return;if(!(C instanceof o)){var x,_=1;if(v){if(!(x=a(k,E,e,b))||x.index>=e.length)break;var T=x.index,L=x.index+x[0].length,A=E;for(A+=S.value.length;T>=A;)A+=(S=S.next).value.length;if(E=A-=S.value.length,S.value instanceof o)continue;for(var R=S;R!==t.tail&&(Ad.reach&&(d.reach=D);var I=S.prev;if(N&&(I=s(t,I,N),E+=N.length),l(t,I,_),S=s(t,I,new o(p,g?r.tokenize(P,g):P,y,P)),O&&s(t,S,O),_>1){var z={cause:p+","+m,reach:D};i(e,t,n,S.prev,E,z),d&&z.reach>d.reach&&(d.reach=z.reach)}}}}}}function c(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function l(e,t,n){for(var r=t.next,o=0;o"+a.content+""},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,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+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},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|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|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|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 o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var c=p(/^\{$/,/^\}$/);if(-1===c)continue;for(var s=n;s=0&&f(l,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function c(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function l(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function u(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,u={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=c(i++,r)););return u[n]=o,n})).join(""),n,r),p=Object.keys(u);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=p[i],a="string"==typeof r?r:r.content,c=a.indexOf(o);if(-1!==c){++i;var s=a.substring(0,c),d=l(u[o]),f=a.substring(c+o.length),m=[];if(s&&m.push(s),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function a(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},c=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&c(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||c(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,c=i.length;-1!==n.code.indexOf(o=t(r,c));)++c;return i[c]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(c){for(var s=0;s=a.length);s++){var l=c[s];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof l?l:l.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof l?c.splice.apply(c,[s,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return c}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.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"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var c={},s=e[r];if(s){function l(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in c))for(var i in o(t,a),c[t]=!0,n[t])c[i]=!0}t(s.require,l),t(s.optional,l),t(s.modify,l)}n[r]=c,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,c){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),l=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(l),c=(c||[]).map(l);var u=n(i),d=n(c);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(s),m=u;o(m);){for(var h in p={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in f(b))if(v in u){p[b]=!0;break}for(var y in m=p)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,c={},s={};function l(e){if(e in c)return c[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=l(e);return delete s[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return c[e]=o}for(var u in n)l(u);var d=[];for(var p in s)d.push(c[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var c=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 c.name="Invariant Violation",c}}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:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n