From ec6aa6066e9072930a48814522129029a0003b40 Mon Sep 17 00:00:00 2001 From: mobuchowski Date: Wed, 7 Aug 2024 11:10:33 +0000 Subject: [PATCH] deploy: d4ff0841b1b09debf5a3da33d7446bb5d1d6dd32 --- 404.html | 8 ++++---- .../{8fcef176.3c875e30.js => 8fcef176.5edb6e2d.js} | 2 +- assets/js/e0bb4c7f.065e1a40.js | 1 + assets/js/e0bb4c7f.ffcaca1c.js | 1 - assets/js/{main.9cfcc840.js => main.1a68ea52.js} | 4 ++-- ....js.LICENSE.txt => main.1a68ea52.js.LICENSE.txt} | 0 ...me~main.a8365cfa.js => runtime~main.c31f089e.js} | 2 +- blog/0.1-release/index.html | 8 ++++---- blog/1.0-release/index.html | 8 ++++---- blog/airflow-provider/index.html | 8 ++++---- blog/airflow-summit-meetup/index.html | 8 ++++---- blog/archive/index.html | 8 ++++---- .../index.html | 8 ++++---- blog/boston-collibra-meetup/index.html | 8 ++++---- blog/column-lineage/index.html | 8 ++++---- blog/data-agility-day/index.html | 8 ++++---- blog/data-council-meetup/index.html | 8 ++++---- blog/data-lineage-meetup/index.html | 8 ++++---- blog/dataquality_expectations_facet/index.html | 8 ++++---- blog/dbt-with-marquez/index.html | 8 ++++---- blog/ecosystem-survey/index.html | 8 ++++---- blog/explore-lineage-api/index.html | 8 ++++---- blog/extending-with-facets/index.html | 8 ++++---- blog/extractors/index.html | 8 ++++---- blog/incubation-stage-lfai/index.html | 8 ++++---- blog/index.html | 8 ++++---- blog/joining-lfai/index.html | 8 ++++---- blog/kafka-summit-talk/index.html | 8 ++++---- blog/london-confluent-meetup/index.html | 8 ++++---- blog/manta-integration/index.html | 8 ++++---- blog/metaphor-integration/index.html | 8 ++++---- blog/nyc-collibra-meetup/index.html | 8 ++++---- blog/nyc-meetup/index.html | 8 ++++---- blog/openlineage-at-northwestern-mutual/index.html | 8 ++++---- blog/openlineage-egeria/index.html | 8 ++++---- blog/openlineage-microsoft-purview/index.html | 8 ++++---- blog/openlineage-snowflake/index.html | 8 ++++---- blog/openlineage-spark/index.html | 8 ++++---- .../index.html | 8 ++++---- .../index.html | 8 ++++---- blog/page/2/index.html | 8 ++++---- blog/page/3/index.html | 8 ++++---- blog/page/4/index.html | 8 ++++---- blog/python-client/index.html | 8 ++++---- blog/sf-meetup-2/index.html | 8 ++++---- blog/sf-meetup/index.html | 8 ++++---- blog/static-lineage/index.html | 8 ++++---- blog/warsaw-meetup/index.html | 8 ++++---- blog/whats-in-a-namespace/index.html | 8 ++++---- blog/why-open-standard/index.html | 8 ++++---- community/index.html | 8 ++++---- docs/client/java/configuration/index.html | 13 +++++++------ docs/client/java/index.html | 8 ++++---- docs/client/java/usage/index.html | 8 ++++---- docs/client/python/index.html | 8 ++++---- docs/development/developing/index.html | 8 ++++---- .../developing/java/adding_metrics/index.html | 8 ++++---- docs/development/developing/java/setup/index.html | 8 ++++---- .../java/troubleshooting/logging/index.html | 8 ++++---- .../api-reference/openlineage.client/index.html | 8 ++++---- docs/development/developing/python/setup/index.html | 8 ++++---- .../developing/python/tests/airflow/index.html | 8 ++++---- .../developing/python/tests/client/index.html | 8 ++++---- .../developing/python/tests/common/index.html | 8 ++++---- .../developing/python/tests/dagster/index.html | 8 ++++---- .../python/troubleshooting/logging/index.html | 8 ++++---- .../developing/spark/built_in_lineage/index.html | 8 ++++---- docs/development/developing/spark/setup/index.html | 8 ++++---- docs/development/examples/index.html | 8 ++++---- docs/development/ol-proxy/index.html | 8 ++++---- docs/faq/index.html | 8 ++++---- docs/guides/about/index.html | 8 ++++---- docs/guides/airflow-backfill-dags/index.html | 8 ++++---- docs/guides/airflow-quickstart/index.html | 8 ++++---- docs/guides/airflow_proxy/index.html | 8 ++++---- docs/guides/dbt/index.html | 8 ++++---- docs/guides/facets/index.html | 8 ++++---- docs/guides/spark/index.html | 8 ++++---- docs/index.html | 8 ++++---- docs/integrations/about/index.html | 8 ++++---- .../airflow/default-extractors/index.html | 8 ++++---- .../airflow/extractors/custom-extractors/index.html | 8 ++++---- .../airflow/extractors/extractor-testing/index.html | 8 ++++---- docs/integrations/airflow/index.html | 8 ++++---- docs/integrations/airflow/job-hierarchy/index.html | 8 ++++---- docs/integrations/airflow/manual/index.html | 8 ++++---- docs/integrations/airflow/older/index.html | 8 ++++---- .../airflow/preflight-check-dag/index.html | 8 ++++---- docs/integrations/airflow/usage/index.html | 8 ++++---- docs/integrations/dbt/index.html | 8 ++++---- docs/integrations/flink/index.html | 8 ++++---- docs/integrations/great-expectations/index.html | 8 ++++---- .../spark/configuration/airflow/index.html | 8 ++++---- .../spark/configuration/circuit_breaker/index.html | 8 ++++---- .../spark/configuration/spark_conf/index.html | 10 +++++----- .../spark/configuration/transport/index.html | 8 ++++---- .../spark/configuration/usage/index.html | 8 ++++---- docs/integrations/spark/extending/index.html | 8 ++++---- docs/integrations/spark/index.html | 8 ++++---- docs/integrations/spark/installation/index.html | 8 ++++---- docs/integrations/spark/job-hierarchy/index.html | 8 ++++---- docs/integrations/spark/main_concept/index.html | 8 ++++---- docs/integrations/spark/metrics/index.html | 8 ++++---- .../quickstart/quickstart_databricks/index.html | 8 ++++---- .../spark/quickstart/quickstart_glue/index.html | 8 ++++---- .../spark/quickstart/quickstart_local/index.html | 8 ++++---- .../spark/spark_column_lineage/index.html | 8 ++++---- docs/integrations/spark/testing/index.html | 8 ++++---- docs/integrations/trino/index.html | 8 ++++---- docs/releases/0_10_0/index.html | 8 ++++---- docs/releases/0_11_0/index.html | 8 ++++---- docs/releases/0_12_0/index.html | 8 ++++---- docs/releases/0_13_0/index.html | 8 ++++---- docs/releases/0_13_1/index.html | 8 ++++---- docs/releases/0_14_0/index.html | 8 ++++---- docs/releases/0_14_1/index.html | 8 ++++---- docs/releases/0_15_1/index.html | 8 ++++---- docs/releases/0_16_1/index.html | 8 ++++---- docs/releases/0_17_0/index.html | 8 ++++---- docs/releases/0_18_0/index.html | 8 ++++---- docs/releases/0_19_2/index.html | 8 ++++---- docs/releases/0_1_0/index.html | 8 ++++---- docs/releases/0_20_4/index.html | 8 ++++---- docs/releases/0_20_6/index.html | 8 ++++---- docs/releases/0_21_1/index.html | 8 ++++---- docs/releases/0_22_0/index.html | 8 ++++---- docs/releases/0_23_0/index.html | 8 ++++---- docs/releases/0_24_0/index.html | 8 ++++---- docs/releases/0_25_0/index.html | 8 ++++---- docs/releases/0_26_0/index.html | 8 ++++---- docs/releases/0_27_1/index.html | 8 ++++---- docs/releases/0_27_2/index.html | 8 ++++---- docs/releases/0_28_0/index.html | 8 ++++---- docs/releases/0_29_2/index.html | 8 ++++---- docs/releases/0_2_0/index.html | 8 ++++---- docs/releases/0_2_1/index.html | 8 ++++---- docs/releases/0_2_2/index.html | 8 ++++---- docs/releases/0_2_3/index.html | 8 ++++---- docs/releases/0_30_1/index.html | 8 ++++---- docs/releases/0_3_0/index.html | 8 ++++---- docs/releases/0_3_1/index.html | 8 ++++---- docs/releases/0_4_0/index.html | 8 ++++---- docs/releases/0_5_1/index.html | 8 ++++---- docs/releases/0_5_2/index.html | 8 ++++---- docs/releases/0_6_0/index.html | 8 ++++---- docs/releases/0_6_1/index.html | 8 ++++---- docs/releases/0_6_2/index.html | 8 ++++---- docs/releases/0_7_1/index.html | 8 ++++---- docs/releases/0_8_1/index.html | 8 ++++---- docs/releases/0_8_2/index.html | 8 ++++---- docs/releases/0_9_0/index.html | 8 ++++---- docs/releases/1_0_0/index.html | 8 ++++---- docs/releases/1_10_2/index.html | 8 ++++---- docs/releases/1_11_3/index.html | 8 ++++---- docs/releases/1_12_0/index.html | 8 ++++---- docs/releases/1_13_1/index.html | 8 ++++---- docs/releases/1_14_0/index.html | 8 ++++---- docs/releases/1_15_0/index.html | 8 ++++---- docs/releases/1_16_0/index.html | 8 ++++---- docs/releases/1_17_1/index.html | 8 ++++---- docs/releases/1_18_0/index.html | 8 ++++---- docs/releases/1_19_0/index.html | 8 ++++---- docs/releases/1_1_0/index.html | 8 ++++---- docs/releases/1_2_2/index.html | 8 ++++---- docs/releases/1_3_1/index.html | 8 ++++---- docs/releases/1_4_1/index.html | 8 ++++---- docs/releases/1_5_0/index.html | 8 ++++---- docs/releases/1_6_2/index.html | 8 ++++---- docs/releases/1_7_0/index.html | 8 ++++---- docs/releases/1_8_0/index.html | 8 ++++---- docs/releases/1_9_1/index.html | 8 ++++---- docs/spec/facets/custom-facets/index.html | 8 ++++---- .../dataset-facets/column_lineage_facet/index.html | 8 ++++---- .../data_quality_assertions/index.html | 8 ++++---- .../facets/dataset-facets/data_source/index.html | 8 ++++---- docs/spec/facets/dataset-facets/index.html | 8 ++++---- .../data_quality_metrics/index.html | 8 ++++---- .../lifecycle_state_change/index.html | 8 ++++---- .../output_statistics/index.html | 8 ++++---- .../spec/facets/dataset-facets/ownership/index.html | 8 ++++---- docs/spec/facets/dataset-facets/schema/index.html | 8 ++++---- docs/spec/facets/dataset-facets/storage/index.html | 8 ++++---- docs/spec/facets/dataset-facets/symlinks/index.html | 8 ++++---- .../facets/dataset-facets/version_facet/index.html | 8 ++++---- docs/spec/facets/index.html | 8 ++++---- .../spec/facets/job-facets/documentation/index.html | 8 ++++---- docs/spec/facets/job-facets/index.html | 8 ++++---- docs/spec/facets/job-facets/job-type/index.html | 8 ++++---- docs/spec/facets/job-facets/ownership/index.html | 8 ++++---- .../job-facets/source-code-location/index.html | 8 ++++---- docs/spec/facets/job-facets/source-code/index.html | 8 ++++---- docs/spec/facets/job-facets/sql/index.html | 8 ++++---- .../spec/facets/run-facets/error_message/index.html | 8 ++++---- .../facets/run-facets/external_query/index.html | 8 ++++---- docs/spec/facets/run-facets/index.html | 8 ++++---- docs/spec/facets/run-facets/nominal_time/index.html | 8 ++++---- docs/spec/facets/run-facets/parent_run/index.html | 8 ++++---- docs/spec/job-hierarchy/index.html | 8 ++++---- docs/spec/naming/index.html | 8 ++++---- docs/spec/object-model/index.html | 8 ++++---- docs/spec/producers/index.html | 8 ++++---- docs/spec/run-cycle/index.html | 8 ++++---- docs/spec/schemas/index.html | 8 ++++---- ecosystem/index.html | 8 ++++---- getting-started/index.html | 8 ++++---- index.html | 8 ++++---- lunr-index-1723026114857.json | 1 - lunr-index-1723028969130.json | 1 + lunr-index.json | 2 +- meetings/index.html | 8 ++++---- news-landing/index.html | 8 ++++---- resources/index.html | 8 ++++---- search-doc-1723026114857.json | 1 - search-doc-1723028969130.json | 1 + search-doc.json | 2 +- survey/index.html | 8 ++++---- 216 files changed, 829 insertions(+), 828 deletions(-) rename assets/js/{8fcef176.3c875e30.js => 8fcef176.5edb6e2d.js} (59%) create mode 100644 assets/js/e0bb4c7f.065e1a40.js delete mode 100644 assets/js/e0bb4c7f.ffcaca1c.js rename assets/js/{main.9cfcc840.js => main.1a68ea52.js} (99%) rename assets/js/{main.9cfcc840.js.LICENSE.txt => main.1a68ea52.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.a8365cfa.js => runtime~main.c31f089e.js} (87%) delete mode 100644 lunr-index-1723026114857.json create mode 100644 lunr-index-1723028969130.json delete mode 100644 search-doc-1723026114857.json create mode 100644 search-doc-1723028969130.json diff --git a/404.html b/404.html index d07e75aae3..41b6cde89b 100644 --- a/404.html +++ b/404.html @@ -15,13 +15,13 @@ - - + +
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/8fcef176.3c875e30.js b/assets/js/8fcef176.5edb6e2d.js similarity index 59% rename from assets/js/8fcef176.3c875e30.js rename to assets/js/8fcef176.5edb6e2d.js index 1d06dc73f8..e33ca63ae4 100644 --- a/assets/js/8fcef176.3c875e30.js +++ b/assets/js/8fcef176.5edb6e2d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8774],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>c});var n=a(67294);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 l(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 i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=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):i(i({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(a),c=r,k=u["".concat(p,".").concat(c)]||u[c]||m[c]||l;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function c(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>s});var n=a(87462),r=(a(67294),a(3905));const l={sidebar_position:2,title:"Spark Config Parameters"},i=void 0,o={unversionedId:"integrations/spark/configuration/spark_conf",id:"integrations/spark/configuration/spark_conf",title:"Spark Config Parameters",description:"The following parameters can be specified:",source:"@site/docs/integrations/spark/configuration/spark_conf.md",sourceDirName:"integrations/spark/configuration",slug:"/integrations/spark/configuration/spark_conf",permalink:"/docs/integrations/spark/configuration/spark_conf",draft:!1,editUrl:"https://github.com/OpenLineage/docs/tree/main/docs/integrations/spark/configuration/spark_conf.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Spark Config Parameters"},sidebar:"tutorialSidebar",previous:{title:"Usage",permalink:"/docs/integrations/spark/configuration/usage"},next:{title:"Transport",permalink:"/docs/integrations/spark/configuration/transport"}},p={},s=[],d={toc:s};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The following parameters can be specified:"),(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.transport.type"),(0,r.kt)("td",{parentName:"tr",align:null},"The transport type used for event emit, default type is ",(0,r.kt)("inlineCode",{parentName:"td"},"console")),(0,r.kt)("td",{parentName:"tr",align:null},"http")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.namespace"),(0,r.kt)("td",{parentName:"tr",align:null},"The default namespace to be applied for any jobs submitted"),(0,r.kt)("td",{parentName:"tr",align:null},"MyNamespace")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.parentJobNamespace"),(0,r.kt)("td",{parentName:"tr",align:null},"The job namespace to be used for the parent job facet"),(0,r.kt)("td",{parentName:"tr",align:null},"ParentJobNamespace")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.parentJobName"),(0,r.kt)("td",{parentName:"tr",align:null},"The job name to be used for the parent job facet"),(0,r.kt)("td",{parentName:"tr",align:null},"ParentJobName")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.parentRunId"),(0,r.kt)("td",{parentName:"tr",align:null},"The RunId of the parent job that initiated this Spark job"),(0,r.kt)("td",{parentName:"tr",align:null},"xxxx-xxxx-xxxx-xxxx")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.appName"),(0,r.kt)("td",{parentName:"tr",align:null},"Custom value overwriting Spark app name in events"),(0,r.kt)("td",{parentName:"tr",align:null},"AppName")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.facets.disabled"),(0,r.kt)("td",{parentName:"tr",align:null},"List of facets to disable, enclosed in ",(0,r.kt)("inlineCode",{parentName:"td"},"[]")," (required from 0.21.x) and separated by ",(0,r.kt)("inlineCode",{parentName:"td"},";"),", default is ",(0,r.kt)("inlineCode",{parentName:"td"},"[spark_unknown;spark.logicalPlan;]")," (currently must contain ",(0,r.kt)("inlineCode",{parentName:"td"},";"),")"),(0,r.kt)("td",{parentName:"tr",align:null},"[","spark_unknown;spark.logicalPlan","]")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.capturedProperties"),(0,r.kt)("td",{parentName:"tr",align:null},"comma separated list of properties to be captured in spark properties facet (default ",(0,r.kt)("inlineCode",{parentName:"td"},"spark.master"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"spark.app.name"),")"),(0,r.kt)("td",{parentName:"tr",align:null},'"spark.example1,spark.example2"')),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.removePath.pattern"),(0,r.kt)("td",{parentName:"tr",align:null},"Java regular expression that removes ",(0,r.kt)("inlineCode",{parentName:"td"},"?")," named group from dataset path. Can be used to last path subdirectories from paths like ",(0,r.kt)("inlineCode",{parentName:"td"},"s3://my-whatever-path/year=2023/month=04")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"(.*)(?\\/.*\\/.*)"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.jobName.appendDatasetName"),(0,r.kt)("td",{parentName:"tr",align:null},"Decides whether output dataset name should be appended to job name. By default ",(0,r.kt)("inlineCode",{parentName:"td"},"true"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"false")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.jobName.replaceDotWithUnderscore"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaces dots in job name with underscore. Can be used to mimic legacy behaviour on Databricks platform. By default ",(0,r.kt)("inlineCode",{parentName:"td"},"false"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"false")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.debugFacet"),(0,r.kt)("td",{parentName:"tr",align:null},"Determines whether debug facet shall be generated and included within the event. Set ",(0,r.kt)("inlineCode",{parentName:"td"},"enabled")," to turn it on. By default, facet is disabled."),(0,r.kt)("td",{parentName:"tr",align:null},"enabled")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.job.owners."),(0,r.kt)("td",{parentName:"tr",align:null},"Specifies ownership of the job. Multiple entries with different types are allowed. Config key name and value are used to create job ownership type and name (available since 1.13)."),(0,r.kt)("td",{parentName:"tr",align:null},'spark.openlineage.job.owners.team="Some Team"')))))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8774],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>c});var n=a(67294);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 l(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 i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=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):i(i({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(a),c=r,k=u["".concat(p,".").concat(c)]||u[c]||m[c]||l;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function c(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>s});var n=a(87462),r=(a(67294),a(3905));const l={sidebar_position:2,title:"Spark Config Parameters"},i=void 0,o={unversionedId:"integrations/spark/configuration/spark_conf",id:"integrations/spark/configuration/spark_conf",title:"Spark Config Parameters",description:"The following parameters can be specified:",source:"@site/docs/integrations/spark/configuration/spark_conf.md",sourceDirName:"integrations/spark/configuration",slug:"/integrations/spark/configuration/spark_conf",permalink:"/docs/integrations/spark/configuration/spark_conf",draft:!1,editUrl:"https://github.com/OpenLineage/docs/tree/main/docs/integrations/spark/configuration/spark_conf.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Spark Config Parameters"},sidebar:"tutorialSidebar",previous:{title:"Usage",permalink:"/docs/integrations/spark/configuration/usage"},next:{title:"Transport",permalink:"/docs/integrations/spark/configuration/transport"}},p={},s=[],d={toc:s};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The following parameters can be specified:"),(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.transport.type"),(0,r.kt)("td",{parentName:"tr",align:null},"The transport type used for event emit, default type is ",(0,r.kt)("inlineCode",{parentName:"td"},"console")),(0,r.kt)("td",{parentName:"tr",align:null},"http")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.namespace"),(0,r.kt)("td",{parentName:"tr",align:null},"The default namespace to be applied for any jobs submitted"),(0,r.kt)("td",{parentName:"tr",align:null},"MyNamespace")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.parentJobNamespace"),(0,r.kt)("td",{parentName:"tr",align:null},"The job namespace to be used for the parent job facet"),(0,r.kt)("td",{parentName:"tr",align:null},"ParentJobNamespace")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.parentJobName"),(0,r.kt)("td",{parentName:"tr",align:null},"The job name to be used for the parent job facet"),(0,r.kt)("td",{parentName:"tr",align:null},"ParentJobName")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.parentRunId"),(0,r.kt)("td",{parentName:"tr",align:null},"The RunId of the parent job that initiated this Spark job"),(0,r.kt)("td",{parentName:"tr",align:null},"xxxx-xxxx-xxxx-xxxx")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.appName"),(0,r.kt)("td",{parentName:"tr",align:null},"Custom value overwriting Spark app name in events"),(0,r.kt)("td",{parentName:"tr",align:null},"AppName")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.facets.disabled"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Deprecated: Use the property ",(0,r.kt)("inlineCode",{parentName:"strong"},"spark.openlineage.facets.disabled")," instead"),". List of facets to filter out from the events, enclosed in ",(0,r.kt)("inlineCode",{parentName:"td"},"[]")," (required from 0.21.x) and separated by ",(0,r.kt)("inlineCode",{parentName:"td"},";"),", default is ",(0,r.kt)("inlineCode",{parentName:"td"},"[]")),(0,r.kt)("td",{parentName:"tr",align:null},"[","columnLineage;","]")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.facets.","<","facet name",">",".disabled"),(0,r.kt)("td",{parentName:"tr",align:null},"If set to true, it disables the specific facet. The default value is ",(0,r.kt)("inlineCode",{parentName:"td"},"false"),". The name of the facet can be hierarchical. The facets disabled by default are ",(0,r.kt)("inlineCode",{parentName:"td"},"debug"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"spark.logicalPlan")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"spark_unknown"),". You have to switch the flag to ",(0,r.kt)("inlineCode",{parentName:"td"},"false")," to enable them."),(0,r.kt)("td",{parentName:"tr",align:null},"true")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.facets.variables"),(0,r.kt)("td",{parentName:"tr",align:null},"List of environment variables (System.getenv()"),(0,r.kt)("td",{parentName:"tr",align:null},"[","columnLineage;","]")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.capturedProperties"),(0,r.kt)("td",{parentName:"tr",align:null},"comma separated list of properties to be captured in spark properties facet (default ",(0,r.kt)("inlineCode",{parentName:"td"},"spark.master"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"spark.app.name"),")"),(0,r.kt)("td",{parentName:"tr",align:null},'"spark.example1,spark.example2"')),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.removePath.pattern"),(0,r.kt)("td",{parentName:"tr",align:null},"Java regular expression that removes ",(0,r.kt)("inlineCode",{parentName:"td"},"?")," named group from dataset path. Can be used to last path subdirectories from paths like ",(0,r.kt)("inlineCode",{parentName:"td"},"s3://my-whatever-path/year=2023/month=04")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"(.*)(?\\/.*\\/.*)"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.jobName.appendDatasetName"),(0,r.kt)("td",{parentName:"tr",align:null},"Decides whether output dataset name should be appended to job name. By default ",(0,r.kt)("inlineCode",{parentName:"td"},"true"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"false")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.jobName.replaceDotWithUnderscore"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaces dots in job name with underscore. Can be used to mimic legacy behaviour on Databricks platform. By default ",(0,r.kt)("inlineCode",{parentName:"td"},"false"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"false")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.debugFacet"),(0,r.kt)("td",{parentName:"tr",align:null},"Determines whether debug facet shall be generated and included within the event. Set ",(0,r.kt)("inlineCode",{parentName:"td"},"enabled")," to turn it on. By default, facet is disabled."),(0,r.kt)("td",{parentName:"tr",align:null},"enabled")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.job.owners."),(0,r.kt)("td",{parentName:"tr",align:null},"Specifies ownership of the job. Multiple entries with different types are allowed. Config key name and value are used to create job ownership type and name (available since 1.13)."),(0,r.kt)("td",{parentName:"tr",align:null},'spark.openlineage.job.owners.team="Some Team"')))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e0bb4c7f.065e1a40.js b/assets/js/e0bb4c7f.065e1a40.js new file mode 100644 index 0000000000..04573952a3 --- /dev/null +++ b/assets/js/e0bb4c7f.065e1a40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4005],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>k});var n=a(67294);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 l(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 i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=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):i(i({},t),e)),a},m=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=s(a),k=r,c=d["".concat(p,".").concat(k)]||d[k]||u[k]||l;return a?n.createElement(c,i(i({ref:t},m),{},{components:a})):n.createElement(c,i({ref:t},m))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=d;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var s=2;s{a.d(t,{Z:()=>i});var n=a(67294),r=a(86010);const l="tabItem_Ymn6";function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,i),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>C});var n=a(87462),r=a(67294),l=a(86010),i=a(76775),o=a(91980),p=a(67392),s=a(50012);function m(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function u(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??m(a);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function k(e){let{queryString:t=!1,groupId:a}=e;const n=(0,i.k6)(),l=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(l),(0,r.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(n.location.search);t.set(l,e),n.replace({...n.location,search:t.toString()})}),[l,n])]}function c(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,l=u(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!d({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l}))),[p,m]=k({queryString:a,groupId:n}),[c,g]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,l]=(0,s.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&l.set(e)}),[a,l])]}({groupId:n}),h=(()=>{const e=p??c;return d({value:e,tabValues:l})?e:null})();(0,r.useLayoutEffect)((()=>{h&&o(h)}),[h]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);o(e),m(e),g(e)}),[m,g,l]),tabValues:l}}var g=a(12466),h=a(72389);const N="tabList__CuJ",f="tabItem_LNqP";function v(e){let{className:t,block:a,selectedValue:i,selectValue:o,tabValues:p}=e;const s=[],{blockElementScrollPositionUntilNextRender:m}=(0,g.o5)(),u=e=>{const t=e.currentTarget,a=s.indexOf(t),n=p[a].value;n!==i&&(m(t),o(n))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=s.indexOf(e.currentTarget)+1;t=s[a]??s[0];break}case"ArrowLeft":{const a=s.indexOf(e.currentTarget)-1;t=s[a]??s[s.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},t)},p.map((e=>{let{value:t,label:a,attributes:o}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>s.push(e),onKeyDown:d,onClick:u},o,{className:(0,l.Z)("tabs__item",f,o?.className,{"tabs__item--active":i===t})}),a??t)})))}function b(e){let{lazy:t,children:a,selectedValue:n}=e;const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=c(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",N)},r.createElement(v,(0,n.Z)({},e,t)),r.createElement(b,(0,n.Z)({},e,t)))}function C(e){const t=(0,h.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},11560:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>v,frontMatter:()=>k,metadata:()=>g,toc:()=>N});var n=a(87462),r=(a(67294),a(3905)),l=a(55154),i=a(81742),o=a(74866),p=a(85162);const s={toc:[{value:"Metrics collected by Java Client",id:"metrics-collected-by-java-client",level:3},{value:"Metric Backends",id:"metric-backends",level:2},{value:"Configuring Metric Backends",id:"configuring-metric-backends",level:3},{value:"StatsD",id:"statsd",level:3}]};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This feature is available in OpenLineage 1.11 and above")),(0,r.kt)("p",null,"To ease the operational experience of using the OpenLineage integrations, this document details the metrics collected by the Java client and the configuration settings for various metric backends."),(0,r.kt)("h3",{id:"metrics-collected-by-java-client"},"Metrics collected by Java Client"),(0,r.kt)("p",null,"The following table outlines the metrics collected by the OpenLineage Java client, which help in monitoring the integration's performance:"),(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},"Metric"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(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"},"openlineage.emit.start")),(0,r.kt)("td",{parentName:"tr",align:null},"Number of events the integration started to send"),(0,r.kt)("td",{parentName:"tr",align:null},"Counter")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"openlineage.emit.complete")),(0,r.kt)("td",{parentName:"tr",align:null},"Number of events the integration completed sending"),(0,r.kt)("td",{parentName:"tr",align:null},"Counter")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"openlineage.emit.time")),(0,r.kt)("td",{parentName:"tr",align:null},"Time spent on emitting events"),(0,r.kt)("td",{parentName:"tr",align:null},"Timer")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"openlineage.circuitbreaker.engaged")),(0,r.kt)("td",{parentName:"tr",align:null},"Status of the Circuit Breaker (engaged or not)"),(0,r.kt)("td",{parentName:"tr",align:null},"Gauge")))),(0,r.kt)("h2",{id:"metric-backends"},"Metric Backends"),(0,r.kt)("p",null,"OpenLineage uses ",(0,r.kt)("a",{parentName:"p",href:"https://micrometer.io"},"Micrometer")," for metrics collection, similar to how SLF4J operates for logging. Micrometer provides a facade over different metric backends, allowing metrics to be dispatched to various destinations."),(0,r.kt)("h3",{id:"configuring-metric-backends"},"Configuring Metric Backends"),(0,r.kt)("p",null,"Below are the available backends and potential configurations using Micrometer's facilities."),(0,r.kt)("h3",{id:"statsd"},"StatsD"),(0,r.kt)("p",null,"Full configuration options for StatsD can be found in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/micrometer-metrics/micrometer/blob/main/implementations/micrometer-registry-statsd/src/main/java/io/micrometer/statsd/StatsdConfig.java"},"Micrometer's StatsDConfig implementation"),". "),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"metrics:\n type: statsd\n flavor: datadog\n host: localhost\n port: 8125\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Metrics type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"statsd")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.flavor"),(0,r.kt)("td",{parentName:"tr",align:null},"Flavor of StatsD configuration"),(0,r.kt)("td",{parentName:"tr",align:null},"datadog")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.host"),(0,r.kt)("td",{parentName:"tr",align:null},"Host that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"localhost")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.port"),(0,r.kt)("td",{parentName:"tr",align:null},"Port that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"8125"))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Metrics type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"statsd")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.flavor"),(0,r.kt)("td",{parentName:"tr",align:null},"Flavor of StatsD configuration"),(0,r.kt)("td",{parentName:"tr",align:null},"datadog")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.host"),(0,r.kt)("td",{parentName:"tr",align:null},"Host that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"localhost")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.port"),(0,r.kt)("td",{parentName:"tr",align:null},"Port that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"8125")))))))}m.isMDXComponent=!0;const u={toc:[{value:"Host List Resolver",id:"host-list-resolver",level:3},{value:"Pattern Namespace Resolver",id:"pattern-namespace-resolver",level:3},{value:"Pattern Group Namespace Resolver",id:"pattern-group-namespace-resolver",level:3},{value:"Custom Resolver",id:"custom-resolver",level:3}]};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This feature is available in OpenLineage 1.17 and above")),(0,r.kt)("p",null,"Oftentimes host addresses are used to access data and a single dataset can be accessed via different\naddresses. For example, a Kafka topic can be accessed by a list of kafka bootstrap servers or any\nserver from the list. In general, a problem can be solved by adding mechanism which resolves host addresses into\nlogical identifier understood within the organisation. This applies for all clusters like Kafka or Cassandra\nwhich should be identified regardless of current list of hosts they contain. This also applies\nfor JDBC urls where a physical address of database can change over time."),(0,r.kt)("h3",{id:"host-list-resolver"},"Host List Resolver"),(0,r.kt)("p",null,"Host List Resolver given a list of hosts, replaces host name within\nthe dataset namespace into the resolved value defined."),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"dataset:\n namespaceResolvers:\n resolved-name:\n type: hostList\n hosts: ['kafka-prod13.company.com', 'kafka-prod15.company.com']\n schema: \"kafka\"\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"hostList")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"List of hosts"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"['kafka-prod13.company.com', 'kafka-prod15.company.com']"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka")))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"hostList")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"List of hosts"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"['kafka-prod13.company.com', 'kafka-prod15.company.com']"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka"))))))),(0,r.kt)("h3",{id:"pattern-namespace-resolver"},"Pattern Namespace Resolver"),(0,r.kt)("p",null,"Java regex pattern is used to identify a host. Substrings matching a pattern will be replaced with resolved name."),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"dataset:\n namespaceResolvers:\n resolved-name:\n type: pattern\n # 'cassandra-prod7.company.com', 'cassandra-prod8.company.com'\n regex: 'cassandra-prod(\\d)+\\.company\\.com'\n schema: \"cassandra\"\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"pattern")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cassandra-prod(\\d)+\\.company\\.com"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka")))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"pattern")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cassandra-prod(\\d)+\\.company\\.com"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka"))))))),(0,r.kt)("h3",{id:"pattern-group-namespace-resolver"},"Pattern Group Namespace Resolver"),(0,r.kt)("p",null,"For this resolver, Java regex pattern is used to identify a host. However, instead of configured resolved name,\na ",(0,r.kt)("inlineCode",{parentName:"p"},"matchingGroup")," is used a resolved name. This can be useful when having several clusters\nmade from hosts with a well-defined host naming convention."),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"dataset:\n namespaceResolvers:\n test-pattern:\n type: patternGroup\n # 'cassandra-test-7.company.com', 'cassandra-test-8.company.com', 'kafka-test-7.company.com', 'kafka-test-8.company.com'\n regex: '(?[a-zA-Z-]+)-(\\d)+\\.company\\.com:[\\d]*'\n matchingGroup: \"cluster\"\n schema: \"cassandra\"\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"patternGroup")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.regex"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"(?[a-zA-Z-]+)-(\\d)+\\.company\\.com:[\\d]*"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.matchingGroup"),(0,r.kt)("td",{parentName:"tr",align:null},"Matching group named within the regex"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cluster"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka")))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"patternGroup")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.regex"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"(?[a-zA-Z-]+)-(\\d)+\\.company\\.com"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.matchingGroup"),(0,r.kt)("td",{parentName:"tr",align:null},"Matching group named within the regex"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cluster"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka"))))))),(0,r.kt)("h3",{id:"custom-resolver"},"Custom Resolver"),(0,r.kt)("p",null,"Custom resolver can be added by implementing:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"io.openlineage.client.dataset.namespaceResolver.DatasetNamespaceResolver")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"io.openlineage.client.dataset.namespaceResolver.DatasetNamespaceResolverBuilder")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"io.openlineage.client.dataset.namespaceResolver.DatasetNamespaceResolverConfig"))),(0,r.kt)("p",null,"Config class can be used to pass any namespace resolver parameters through standard configuration\nmechanism (Spark & Flink configuration or ",(0,r.kt)("inlineCode",{parentName:"p"},"openlineage.yml")," file provided). Standard ",(0,r.kt)("inlineCode",{parentName:"p"},"ServiceLoader"),"\napproach is used to load and initiate custom classes."))}d.isMDXComponent=!0;const k={sidebar_position:2,title:"Configuration"},c=void 0,g={unversionedId:"client/java/configuration",id:"client/java/configuration",title:"Configuration",description:"We recommend configuring the client with an openlineage.yml file that contains all the",source:"@site/docs/client/java/configuration.md",sourceDirName:"client/java",slug:"/client/java/configuration",permalink:"/docs/client/java/configuration",draft:!1,editUrl:"https://github.com/OpenLineage/docs/tree/main/docs/client/java/configuration.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Configuration"},sidebar:"tutorialSidebar",previous:{title:"Java",permalink:"/docs/client/java/"},next:{title:"Usage Example",permalink:"/docs/client/java/usage"}},h={},N=[{value:"Environment Variables",id:"environment-variables",level:2},{value:"Facets Configuration",id:"facets-configuration",level:2},{value:"Deprecated syntax",id:"deprecated-syntax",level:3},{value:"Transports",id:"transports",level:2},{value:"Error Handling via Transport",id:"error-handling-via-transport",level:3},{value:"Defining Your Own Transport",id:"defining-your-own-transport",level:3},{value:"Circuit Breakers",id:"circuit-breakers",level:2},{value:"Metrics",id:"metrics",level:2},{value:"Dataset Namespace Resolver",id:"dataset-namespace-resolver",level:2}],f={toc:N};function v(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"We recommend configuring the client with an ",(0,r.kt)("inlineCode",{parentName:"p"},"openlineage.yml")," file that contains all the\ndetails of how to connect to your OpenLineage backend."),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"#transports"},"example configurations.")),(0,r.kt)("p",null,"You can make this file available to the client in three ways (the list also presents precedence of the configuration):"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Set an ",(0,r.kt)("inlineCode",{parentName:"li"},"OPENLINEAGE_CONFIG")," environment variable to a file path: ",(0,r.kt)("inlineCode",{parentName:"li"},"OPENLINEAGE_CONFIG=path/to/openlineage.yml"),"."),(0,r.kt)("li",{parentName:"ol"},"Place an ",(0,r.kt)("inlineCode",{parentName:"li"},"openlineage.yml")," in the user's current working directory."),(0,r.kt)("li",{parentName:"ol"},"Place an ",(0,r.kt)("inlineCode",{parentName:"li"},"openlineage.yml")," under ",(0,r.kt)("inlineCode",{parentName:"li"},".openlineage/")," in the user's home directory (",(0,r.kt)("inlineCode",{parentName:"li"},"~/.openlineage/openlineage.yml"),").")),(0,r.kt)("h2",{id:"environment-variables"},"Environment Variables"),(0,r.kt)("p",null,"The following environment variables are available:"),(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},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Since"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OPENLINEAGE_CONFIG"),(0,r.kt)("td",{parentName:"tr",align:null},"The path to the YAML configuration file. Example: ",(0,r.kt)("inlineCode",{parentName:"td"},"path/to/openlineage.yml")),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OPENLINEAGE_DISABLED"),(0,r.kt)("td",{parentName:"tr",align:null},"When ",(0,r.kt)("inlineCode",{parentName:"td"},"true"),", OpenLineage will not emit events."),(0,r.kt)("td",{parentName:"tr",align:null},"0.9.0")))),(0,r.kt)("h2",{id:"facets-configuration"},"Facets Configuration"),(0,r.kt)("p",null,"In YAML configuration file you can also disable facets to filter them out from the OpenLineage event."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"YAML Configuration")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: console\nfacets:\n spark_unknown:\n disabled: true\n spark:\n logicalPlan:\n disabled: true\n")),(0,r.kt)("h3",{id:"deprecated-syntax"},"Deprecated syntax"),(0,r.kt)("p",null,"The following syntax is deprecated and soon will be removed:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: console\nfacets:\n disabled:\n - spark_unknown\n - spark.logicalPlan\n")),(0,r.kt)("p",null,"The rationale behind deprecation is that some of the facets were disabled by default in some integrations. When we added\nsomething extra but didn't include the defaults, they were unintentionally enabled."),(0,r.kt)("h2",{id:"transports"},"Transports"),(0,r.kt)(l.ZP,{mdxType:"Transports"}),(0,r.kt)("h3",{id:"error-handling-via-transport"},"Error Handling via Transport"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'// Connect to http://localhost:5000\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n HttpTransport.builder()\n .uri("http://localhost:5000")\n .apiKey("f38d2189-c603-4b46-bdea-e573a3b5a7d5")\n .build())\n .registerErrorHandler(new EmitErrorHandler() {\n @Override\n public void handleError(Throwable throwable) {\n // Handle emit error here\n }\n }).build();\n')),(0,r.kt)("h3",{id:"defining-your-own-transport"},"Defining Your Own Transport"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"OpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new MyTransport() {\n @Override\n public void emit(OpenLineage.RunEvent runEvent) {\n // Add emit logic here\n }\n }).build();\n")),(0,r.kt)("h2",{id:"circuit-breakers"},"Circuit Breakers"),(0,r.kt)(i.ZP,{mdxType:"CircuitBreakers"}),(0,r.kt)("h2",{id:"metrics"},"Metrics"),(0,r.kt)(m,{mdxType:"Metrics"}),(0,r.kt)("h2",{id:"dataset-namespace-resolver"},"Dataset Namespace Resolver"),(0,r.kt)(d,{mdxType:"DatasetNamespaceResolver"}))}v.isMDXComponent=!0},81742:(e,t,a)=>{a.d(t,{ZP:()=>p});var n=a(87462),r=(a(67294),a(3905)),l=a(74866),i=a(85162);const o={toc:[{value:"Simple Memory Circuit Breaker",id:"simple-memory-circuit-breaker",level:3},{value:"Java Runtime Circuit Breaker",id:"java-runtime-circuit-breaker",level:3},{value:"Custom Circuit Breaker",id:"custom-circuit-breaker",level:3}]};function p(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},o,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This feature is available in OpenLineage versions >= 1.9.0.")),(0,r.kt)("p",null,"To prevent from over-instrumentation OpenLineage integration provides a circuit breaker mechanism\nthat stops OpenLineage from creating, serializing and sending OpenLineage events."),(0,r.kt)("h3",{id:"simple-memory-circuit-breaker"},"Simple Memory Circuit Breaker"),(0,r.kt)("p",null,"Simple circuit breaker which is working based only on free memory within JVM. Configuration should\ncontain free memory threshold limit (percentage). Default value is ",(0,r.kt)("inlineCode",{parentName:"p"},"20%"),". The circuit breaker\nwill close within first call if free memory is low. ",(0,r.kt)("inlineCode",{parentName:"p"},"circuitCheckIntervalInMillis")," parameter is used\nto configure a frequency circuit breaker is called. Default value is ",(0,r.kt)("inlineCode",{parentName:"p"},"1000ms"),", when no entry in config.\n",(0,r.kt)("inlineCode",{parentName:"p"},"timeoutInSeconds")," is optional. If set, OpenLineage code execution is terminated when a timeout\nis reached (added in version 1.13). "),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"circuitBreaker:\n type: simpleMemory\n memoryThreshold: 20\n circuitCheckIntervalInMillis: 1000\n timeoutInSeconds: 90\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"simpleMemory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90"))))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"simpleMemory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90")))))),(0,r.kt)("h3",{id:"java-runtime-circuit-breaker"},"Java Runtime Circuit Breaker"),(0,r.kt)("p",null,"More complex version of circuit breaker. The amount of free memory can be low as long as\namount of time spent on Garbage Collection is acceptable. ",(0,r.kt)("inlineCode",{parentName:"p"},"JavaRuntimeCircuitBreaker")," closes\nwhen free memory drops below threshold and amount of time spent on garbage collection exceeds\ngiven threshold (",(0,r.kt)("inlineCode",{parentName:"p"},"10%")," by default). The circuit breaker is always open when checked for the first time\nas GC threshold is computed since the previous circuit breaker call.\n",(0,r.kt)("inlineCode",{parentName:"p"},"circuitCheckIntervalInMillis")," parameter is used\nto configure a frequency circuit breaker is called.\nDefault value is ",(0,r.kt)("inlineCode",{parentName:"p"},"1000ms"),", when no entry in config.\n",(0,r.kt)("inlineCode",{parentName:"p"},"timeoutInSeconds")," is optional. If set, OpenLineage code execution is terminated when a timeout\nis reached (added in version 1.13)."),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"circuitBreaker:\n type: javaRuntime\n memoryThreshold: 20\n gcCpuThreshold: 10\n circuitCheckIntervalInMillis: 1000\n timeoutInSeconds: 90\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"javaRuntime")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.gcCpuThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Garbage Collection CPU threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"10")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90"))))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"javaRuntime")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.gcCpuThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Garbage Collection CPU threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"10")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90")))))),(0,r.kt)("h3",{id:"custom-circuit-breaker"},"Custom Circuit Breaker"),(0,r.kt)("p",null,"List of available circuit breakers can be extended with custom one loaded via ServiceLoader\nwith own implementation of ",(0,r.kt)("inlineCode",{parentName:"p"},"io.openlineage.client.circuitBreaker.CircuitBreakerBuilder"),"."))}p.isMDXComponent=!0},55154:(e,t,a)=>{a.d(t,{ZP:()=>p});var n=a(87462),r=(a(67294),a(3905)),l=a(74866),i=a(85162);const o={toc:[{value:"HTTP",id:"http",level:3},{value:"Configuration",id:"configuration",level:4},{value:"Behavior",id:"behavior",level:4},{value:"Examples",id:"examples",level:4},{value:"Kafka",id:"kafka",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Behavior",id:"behavior-1",level:4},{value:"Notes",id:"notes",level:4},{value:"Examples",id:"examples-1",level:4},{value:"Kinesis",id:"kinesis",level:3},{value:"Configuration",id:"configuration-2",level:4},{value:"Behavior",id:"behavior-2",level:4},{value:"Examples",id:"examples-2",level:4},{value:"Console",id:"console",level:3},{value:"Behavior",id:"behavior-3",level:4},{value:"Notes",id:"notes-1",level:4},{value:"Configuration",id:"configuration-3",level:4},{value:"Examples",id:"examples-3",level:4},{value:"File",id:"file",level:3},{value:"Configuration",id:"configuration-4",level:4},{value:"Behavior",id:"behavior-4",level:4},{value:"Notes for Yarn/Kubernetes",id:"notes-for-yarnkubernetes",level:4},{value:"Examples",id:"examples-4",level:4}]};function p(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},o,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Tip:")," See current list of ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports"},"all supported transports"),"."),(0,r.kt)("h3",{id:"http"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/HttpTransport.java"},"HTTP")),(0,r.kt)("p",null,"Allows sending events to HTTP endpoint, using ",(0,r.kt)("a",{parentName:"p",href:"https://hc.apache.org/index.html"},"ApacheHTTPClient"),"."),(0,r.kt)("h4",{id:"configuration"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"http"'),". Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"url")," - string, base url for HTTP requests. Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"endpoint")," - string specifying the endpoint to which events are sent, appended to ",(0,r.kt)("inlineCode",{parentName:"li"},"url"),". Optional, default: ",(0,r.kt)("inlineCode",{parentName:"li"},"/api/v1/lineage"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"urlParams")," - dictionary specifying query parameters send in HTTP requests. Optional."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"timeoutInMillis")," - integer specifying timeout (in milliseconds) value used while connecting to server. Optional, default: ",(0,r.kt)("inlineCode",{parentName:"li"},"5000"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"auth")," - dictionary specifying authentication options. Optional, by default no authorization is used. If set, requires the ",(0,r.kt)("inlineCode",{parentName:"li"},"type")," property.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type"),' - string specifying the "api_key" or the fully qualified class name of your TokenProvider. Required if ',(0,r.kt)("inlineCode",{parentName:"li"},"auth")," is provided."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"apiKey")," - string setting the Authentication HTTP header as the Bearer. Required if ",(0,r.kt)("inlineCode",{parentName:"li"},"type")," is ",(0,r.kt)("inlineCode",{parentName:"li"},"api_key"),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"headers")," - dictionary specifying HTTP request headers. Optional."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"compression")," - string, name of algorithm used by HTTP client to compress request body. Optional, default value ",(0,r.kt)("inlineCode",{parentName:"li"},"null"),", allowed values: ",(0,r.kt)("inlineCode",{parentName:"li"},"gzip"),". Added in v1.13.0.")),(0,r.kt)("h4",{id:"behavior"},"Behavior"),(0,r.kt)("p",null,"Events are serialized to JSON, and then are send as HTTP POST request with ",(0,r.kt)("inlineCode",{parentName:"p"},"Content-Type: application/json"),"."),(0,r.kt)("h4",{id:"examples"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: http\n url: http://localhost:5000\n")),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: http\n url: http://localhost:5000\n auth:\n type: api_key\n api_key: f38d2189-c603-4b46-bdea-e573a3b5a7d5\n")),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: http\n url: http://localhost:5000\n endpoint: /api/v1/lineage\n urlParams:\n param0: value0\n param1: value1\n timeoutInMillis: 5000\n auth:\n type: api_key\n api_key: f38d2189-c603-4b46-bdea-e573a3b5a7d5\n headers:\n X-Some-Extra-Header: abc\n compression: gzip\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\n")),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\nspark.openlineage.transport.auth.type=api_key\nspark.openlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\n")),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\nspark.openlineage.transport.endpoint=/api/v1/lineage\nspark.openlineage.transport.urlParams.param0=value0\nspark.openlineage.transport.urlParams.param1=value1\nspark.openlineage.transport.timeoutInMillis=5000\nspark.openlineage.transport.auth.type=api_key\nspark.openlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\nspark.openlineage.transport.headers.X-Some-Extra-Header=abc\nspark.openlineage.transport.compression=gzip\n")),(0,r.kt)("details",null,(0,r.kt)("summary",null,"URL parsing within Spark integration"),(0,r.kt)("p",null,(0,r.kt)("p",null,"You can supply http parameters using values in url, the parsed ",(0,r.kt)("inlineCode",{parentName:"p"},"spark.openlineage.*")," properties are located in url as follows:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"{transport.url}/{transport.endpoint}/namespaces/{namespace}/jobs/{parentJobName}/runs/{parentRunId}?app_name={appName}&api_key={transport.apiKey}&timeout={transport.timeout}&xxx={transport.urlParams.xxx}")),(0,r.kt)("p",null,"example:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"http://localhost:5000/api/v1/namespaces/ns_name/jobs/job_name/runs/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?app_name=app&api_key=abc&timeout=5000&xxx=xxx"))))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\n")),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=http\nopenlineage.transport.url=http://localhost:5000\nopenlineage.transport.auth.type=api_key\nopenlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\n")),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=http\nopenlineage.transport.url=http://localhost:5000\nopenlineage.transport.endpoint=/api/v1/lineage\nopenlineage.transport.urlParams.param0=value0\nopenlineage.transport.urlParams.param1=value1\nopenlineage.transport.timeoutInMillis=5000\nopenlineage.transport.auth.type=api_key\nopenlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\nopenlineage.transport.headers.X-Some-Extra-Header=abc\nopenlineage.transport.compression=gzip\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.HttpConfig;\nimport io.openlineage.client.transports.HttpTransport;\n\nHttpConfig httpConfig = new HttpConfig();\nhttpConfig.setUrl("http://localhost:5000");\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new HttpTransport(httpConfig))\n .build();\n')),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.ApiKeyTokenProvider;\nimport io.openlineage.client.transports.HttpConfig;\nimport io.openlineage.client.transports.HttpTransport;\n\nApiKeyTokenProvider apiKeyTokenProvider = new ApiKeyTokenProvider();\napiKeyTokenProvider.setApiKey("f38d2189-c603-4b46-bdea-e573a3b5a7d5");\n\nHttpConfig httpConfig = new HttpConfig();\nhttpConfig.setUrl("http://localhost:5000");\nhttpConfig.setAuth(apiKeyTokenProvider);\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new HttpTransport(httpConfig))\n .build();\n')),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Map;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.ApiKeyTokenProvider;\nimport io.openlineage.client.transports.HttpConfig;\nimport io.openlineage.client.transports.HttpTransport;\n\nMap queryParams = Map.of(\n "param0", "value0",\n "param1", "value1"\n);\n\nMap headers = Map.of(\n "X-Some-Extra-Header", "abc"\n);\n\nApiKeyTokenProvider apiKeyTokenProvider = new ApiKeyTokenProvider();\napiKeyTokenProvider.setApiKey("f38d2189-c603-4b46-bdea-e573a3b5a7d5");\n\nHttpConfig httpConfig = new HttpConfig();\nhttpConfig.setUrl("http://localhost:5000");\nhttpConfig.setEndpoint("/api/v1/lineage");\nhttpConfig.setUrlParams(queryParams);\nhttpConfig.setAuth(apiKeyTokenProvider);\nhttpConfig.setTimeoutInMillis(headers);\nhttpConfig.setHeaders(5000);\nhttpConfig.setCompression(HttpConfig.Compression.GZIP);\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new HttpTransport(httpConfig))\n .build();\n')))),(0,r.kt)("h3",{id:"kafka"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/KafkaTransport.java"},"Kafka")),(0,r.kt)("p",null,"If a transport type is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"kafka"),", then the below parameters would be read and used when building KafkaProducer.\nThis transport requires the artifact ",(0,r.kt)("inlineCode",{parentName:"p"},"org.apache.kafka:kafka-clients:3.1.0")," (or compatible) on your classpath."),(0,r.kt)("h4",{id:"configuration-1"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"p"},'"kafka"'),". Required.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"topicName")," - string specifying the topic on what events will be sent. Required.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"properties")," - a dictionary containing a Kafka producer config as in ",(0,r.kt)("a",{parentName:"p",href:"http://kafka.apache.org/0100/documentation.html#producerconfigs"},"Kafka producer config"),". Required.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"localServerId")," - ",(0,r.kt)("strong",{parentName:"p"},"deprecated"),", renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," since v1.13.0.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," - string, key for all Kafka messages produced by transport. Optional, default value described below. Added in v1.13.0."),(0,r.kt)("p",{parentName:"li"},"Default values for ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," are:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{parentJob.namespace}/{parentJob.name}")," - for RunEvent with parent facet"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{job.namespace}/{job.name}")," - for RunEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"job:{job.namespace}/{job.name}")," - for JobEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dataset:{dataset.namespace}/{dataset.name}")," - for DatasetEvent")))),(0,r.kt)("h4",{id:"behavior-1"},"Behavior"),(0,r.kt)("p",null,"Events are serialized to JSON, and then dispatched to the Kafka topic."),(0,r.kt)("h4",{id:"notes"},"Notes"),(0,r.kt)("p",null,"It is recommended to provide ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," if Job hierarchy is used. It can be any string, but it should be the same for all jobs in\nhierarchy, like ",(0,r.kt)("inlineCode",{parentName:"p"},"Airflow task -> Spark application -> Spark task runs"),"."),(0,r.kt)("h4",{id:"examples-1"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: kafka\n topicName: openlineage.events\n properties:\n bootstrap.servers: localhost:9092,another.host:9092\n acks: all\n retries: 3\n key.serializer: org.apache.kafka.common.serialization.StringSerializer\n value.serializer: org.apache.kafka.common.serialization.StringSerializer\n messageKey: some-value\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=kafka\nspark.openlineage.transport.topicName=openlineage.events\nspark.openlineage.transport.properties.bootstrap.servers=localhost:9092,another.host:9092\nspark.openlineage.transport.properties.acks=all\nspark.openlineage.transport.properties.retries=3\nspark.openlineage.transport.properties.key.serializer=org.apache.kafka.common.serialization.StringSerializer\nspark.openlineage.transport.properties.value.serializer=org.apache.kafka.common.serialization.StringSerializer\nspark.openlineage.transport.messageKey=some-value\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=kafka\nopenlineage.transport.topicName=openlineage.events\nopenlineage.transport.properties.bootstrap.servers=localhost:9092,another.host:9092\nopenlineage.transport.properties.acks=all\nopenlineage.transport.properties.retries=3\nopenlineage.transport.properties.key.serializer=org.apache.kafka.common.serialization.StringSerializer\nopenlineage.transport.properties.value.serializer=org.apache.kafka.common.serialization.StringSerializer\nopenlineage.transport.messageKey=some-value\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.KafkaConfig;\nimport io.openlineage.client.transports.KafkaTransport;\n\nProperties kafkaProperties = new Properties();\nkafkaProperties.setProperty("bootstrap.servers", "localhost:9092,another.host:9092");\nkafkaProperties.setProperty("acks", "all");\nkafkaProperties.setProperty("retries", "3");\nkafkaProperties.setProperty("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");\nkafkaProperties.setProperty("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");\n\nKafkaConfig kafkaConfig = new KafkaConfig();\nKafkaConfig.setTopicName("openlineage.events");\nKafkaConfig.setProperties(kafkaProperties);\nKafkaConfig.setLocalServerId("some-value");\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new KafkaTransport(httpConfig))\n .build();\n')))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Notes"),":\nIt is recommended to provide ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," if Job hierarchy is used. It can be any string, but it should be the same for all jobs in\nhierarchy, like ",(0,r.kt)("inlineCode",{parentName:"p"},"Airflow task -> Spark application"),"."),(0,r.kt)("p",null,"Default values are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{parentJob.namespace}/{parentJob.name}/{parentRun.id}")," - for RunEvent with parent facet"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{job.namespace}/{job.name}/{run.id}")," - for RunEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"job:{job.namespace}/{job.name}")," - for JobEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dataset:{dataset.namespace}/{dataset.name}")," - for DatasetEvent")),(0,r.kt)("h3",{id:"kinesis"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/blob/main/client/java/src/main/java/io/openlineage/client/transports/KinesisTransport.java"},"Kinesis")),(0,r.kt)("p",null,"If a transport type is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"kinesis"),", then the below parameters would be read and used when building KinesisProducer.\nAlso, KinesisTransport depends on you to provide artifact ",(0,r.kt)("inlineCode",{parentName:"p"},"com.amazonaws:amazon-kinesis-producer:0.14.0")," or compatible on your classpath."),(0,r.kt)("h4",{id:"configuration-2"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"kinesis"'),". Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"streamName")," - the streamName of the Kinesis. Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"region")," - the region of the Kinesis. Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"roleArn")," - the roleArn which is allowed to read/write to Kinesis stream. Optional."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"properties")," - a dictionary that contains a ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/awslabs/amazon-kinesis-producer/blob/master/java/amazon-kinesis-producer-sample/default_config.properties"},"Kinesis allowed properties"),". Optional.")),(0,r.kt)("h4",{id:"behavior-2"},"Behavior"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Events are serialized to JSON, and then dispatched to the Kinesis stream."),(0,r.kt)("li",{parentName:"ul"},"The partition key is generated as ",(0,r.kt)("inlineCode",{parentName:"li"},"{jobNamespace}:{jobName}"),"."),(0,r.kt)("li",{parentName:"ul"},"Two constructors are available: one accepting both ",(0,r.kt)("inlineCode",{parentName:"li"},"KinesisProducer")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"KinesisConfig")," and another solely accepting ",(0,r.kt)("inlineCode",{parentName:"li"},"KinesisConfig"),".")),(0,r.kt)("h4",{id:"examples-2"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: kinesis\n streamName: your_kinesis_stream_name\n region: your_aws_region\n roleArn: arn:aws:iam::account-id:role/role-name\n properties:\n VerifyCertificate: true\n ConnectTimeout: 6000\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=kinesis\nspark.openlineage.transport.streamName=your_kinesis_stream_name\nspark.openlineage.transport.region=your_aws_region\nspark.openlineage.transport.roleArn=arn:aws:iam::account-id:role/role-name\nspark.openlineage.transport.properties.VerifyCertificate=true\nspark.openlineage.transport.properties.ConnectTimeout=6000\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=kinesis\nopenlineage.transport.streamName=your_kinesis_stream_name\nopenlineage.transport.region=your_aws_region\nopenlineage.transport.roleArn=arn:aws:iam::account-id:role/role-name\nopenlineage.transport.properties.VerifyCertificate=true\nopenlineage.transport.properties.ConnectTimeout=6000\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.KinesisConfig;\nimport io.openlineage.client.transports.KinesisTransport;\n\nProperties kinesisProperties = new Properties();\nkinesisProperties.setProperty("property_name_1", "value_1");\nkinesisProperties.setProperty("property_name_2", "value_2");\n\nKinesisConfig kinesisConfig = new KinesisConfig();\nkinesisConfig.setStreamName("your_kinesis_stream_name");\nkinesisConfig.setRegion("your_aws_region");\nkinesisConfig.setRoleArn("arn:aws:iam::account-id:role/role-name");\nkinesisConfig.setProperties(kinesisProperties);\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new KinesisTransport(httpConfig))\n .build();\n')))),(0,r.kt)("h3",{id:"console"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/ConsoleTransport.java"},"Console")),(0,r.kt)("p",null,"This straightforward transport emits OpenLineage events directly to the console through a logger.\nNo additional configuration is required."),(0,r.kt)("h4",{id:"behavior-3"},"Behavior"),(0,r.kt)("p",null,"Events are serialized to JSON. Then each event is logged with ",(0,r.kt)("inlineCode",{parentName:"p"},"INFO")," level to logger with name ",(0,r.kt)("inlineCode",{parentName:"p"},"ConsoleTransport"),"."),(0,r.kt)("h4",{id:"notes-1"},"Notes"),(0,r.kt)("p",null,"Be cautious when using the ",(0,r.kt)("inlineCode",{parentName:"p"},"DEBUG")," log level, as it might result in double-logging due to the ",(0,r.kt)("inlineCode",{parentName:"p"},"OpenLineageClient")," also logging."),(0,r.kt)("h4",{id:"configuration-3"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"console"'),". Required.")),(0,r.kt)("h4",{id:"examples-3"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: console\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=console\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=console\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.ConsoleTransport;\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new ConsoleTransport())\n .build();\n")))),(0,r.kt)("h3",{id:"file"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/FileTransport.java"},"File")),(0,r.kt)("p",null,"Designed mainly for integration testing, the ",(0,r.kt)("inlineCode",{parentName:"p"},"FileTransport")," emits OpenLineage events to a given file."),(0,r.kt)("h4",{id:"configuration-4"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"file"'),". Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"location")," - string specifying the path of the file. Required.")),(0,r.kt)("h4",{id:"behavior-4"},"Behavior"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If the target file is absent, it's created."),(0,r.kt)("li",{parentName:"ul"},"Events are serialized to JSON, and then appended to a file, separated by newlines."),(0,r.kt)("li",{parentName:"ul"},"Intrinsic newline characters within the event JSON are eliminated to ensure one-line events.")),(0,r.kt)("h4",{id:"notes-for-yarnkubernetes"},"Notes for Yarn/Kubernetes"),(0,r.kt)("p",null,"This transport type is pretty useless on Spark/Flink applications deployed to Yarn or Kubernetes cluster:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Each executor will write file to a local filesystem of Yarn container/K8s pod. So resulting file will be removed when such container/pod is destroyed."),(0,r.kt)("li",{parentName:"ul"},"Kubernetes persistent volumes are not destroyed after pod removal. But all the executors will write to the same network disk in parallel, producing a broken file.")),(0,r.kt)("h4",{id:"examples-4"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: file\n location: /path/to/your/file\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=file\nspark.openlineage.transport.location=/path/to/your/filext\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=file\nopenlineage.transport.location=/path/to/your/file\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.FileConfig;\nimport io.openlineage.client.transports.FileTransport;\n\nFileConfig fileConfig = new FileConfig("/path/to/your/file");\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new FileTransport(fileConfig))\n .build();\n')))))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e0bb4c7f.ffcaca1c.js b/assets/js/e0bb4c7f.ffcaca1c.js deleted file mode 100644 index aff98dfaeb..0000000000 --- a/assets/js/e0bb4c7f.ffcaca1c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4005],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>k});var n=a(67294);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 l(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 i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=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):i(i({},t),e)),a},m=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=s(a),k=r,c=d["".concat(p,".").concat(k)]||d[k]||u[k]||l;return a?n.createElement(c,i(i({ref:t},m),{},{components:a})):n.createElement(c,i({ref:t},m))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=d;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var s=2;s{a.d(t,{Z:()=>i});var n=a(67294),r=a(86010);const l="tabItem_Ymn6";function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,i),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>C});var n=a(87462),r=a(67294),l=a(86010),i=a(76775),o=a(91980),p=a(67392),s=a(50012);function m(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function u(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??m(a);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function k(e){let{queryString:t=!1,groupId:a}=e;const n=(0,i.k6)(),l=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(l),(0,r.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(n.location.search);t.set(l,e),n.replace({...n.location,search:t.toString()})}),[l,n])]}function c(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,l=u(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!d({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l}))),[p,m]=k({queryString:a,groupId:n}),[c,g]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,l]=(0,s.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&l.set(e)}),[a,l])]}({groupId:n}),h=(()=>{const e=p??c;return d({value:e,tabValues:l})?e:null})();(0,r.useLayoutEffect)((()=>{h&&o(h)}),[h]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);o(e),m(e),g(e)}),[m,g,l]),tabValues:l}}var g=a(12466),h=a(72389);const N="tabList__CuJ",f="tabItem_LNqP";function v(e){let{className:t,block:a,selectedValue:i,selectValue:o,tabValues:p}=e;const s=[],{blockElementScrollPositionUntilNextRender:m}=(0,g.o5)(),u=e=>{const t=e.currentTarget,a=s.indexOf(t),n=p[a].value;n!==i&&(m(t),o(n))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=s.indexOf(e.currentTarget)+1;t=s[a]??s[0];break}case"ArrowLeft":{const a=s.indexOf(e.currentTarget)-1;t=s[a]??s[s.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},t)},p.map((e=>{let{value:t,label:a,attributes:o}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>s.push(e),onKeyDown:d,onClick:u},o,{className:(0,l.Z)("tabs__item",f,o?.className,{"tabs__item--active":i===t})}),a??t)})))}function b(e){let{lazy:t,children:a,selectedValue:n}=e;const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=c(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",N)},r.createElement(v,(0,n.Z)({},e,t)),r.createElement(b,(0,n.Z)({},e,t)))}function C(e){const t=(0,h.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},11560:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>v,frontMatter:()=>k,metadata:()=>g,toc:()=>N});var n=a(87462),r=(a(67294),a(3905)),l=a(55154),i=a(81742),o=a(74866),p=a(85162);const s={toc:[{value:"Metrics collected by Java Client",id:"metrics-collected-by-java-client",level:3},{value:"Metric Backends",id:"metric-backends",level:2},{value:"Configuring Metric Backends",id:"configuring-metric-backends",level:3},{value:"StatsD",id:"statsd",level:3}]};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This feature is available in OpenLineage 1.11 and above")),(0,r.kt)("p",null,"To ease the operational experience of using the OpenLineage integrations, this document details the metrics collected by the Java client and the configuration settings for various metric backends."),(0,r.kt)("h3",{id:"metrics-collected-by-java-client"},"Metrics collected by Java Client"),(0,r.kt)("p",null,"The following table outlines the metrics collected by the OpenLineage Java client, which help in monitoring the integration's performance:"),(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},"Metric"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(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"},"openlineage.emit.start")),(0,r.kt)("td",{parentName:"tr",align:null},"Number of events the integration started to send"),(0,r.kt)("td",{parentName:"tr",align:null},"Counter")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"openlineage.emit.complete")),(0,r.kt)("td",{parentName:"tr",align:null},"Number of events the integration completed sending"),(0,r.kt)("td",{parentName:"tr",align:null},"Counter")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"openlineage.emit.time")),(0,r.kt)("td",{parentName:"tr",align:null},"Time spent on emitting events"),(0,r.kt)("td",{parentName:"tr",align:null},"Timer")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"openlineage.circuitbreaker.engaged")),(0,r.kt)("td",{parentName:"tr",align:null},"Status of the Circuit Breaker (engaged or not)"),(0,r.kt)("td",{parentName:"tr",align:null},"Gauge")))),(0,r.kt)("h2",{id:"metric-backends"},"Metric Backends"),(0,r.kt)("p",null,"OpenLineage uses ",(0,r.kt)("a",{parentName:"p",href:"https://micrometer.io"},"Micrometer")," for metrics collection, similar to how SLF4J operates for logging. Micrometer provides a facade over different metric backends, allowing metrics to be dispatched to various destinations."),(0,r.kt)("h3",{id:"configuring-metric-backends"},"Configuring Metric Backends"),(0,r.kt)("p",null,"Below are the available backends and potential configurations using Micrometer's facilities."),(0,r.kt)("h3",{id:"statsd"},"StatsD"),(0,r.kt)("p",null,"Full configuration options for StatsD can be found in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/micrometer-metrics/micrometer/blob/main/implementations/micrometer-registry-statsd/src/main/java/io/micrometer/statsd/StatsdConfig.java"},"Micrometer's StatsDConfig implementation"),". "),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"metrics:\n type: statsd\n flavor: datadog\n host: localhost\n port: 8125\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Metrics type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"statsd")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.flavor"),(0,r.kt)("td",{parentName:"tr",align:null},"Flavor of StatsD configuration"),(0,r.kt)("td",{parentName:"tr",align:null},"datadog")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.host"),(0,r.kt)("td",{parentName:"tr",align:null},"Host that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"localhost")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.metrics.port"),(0,r.kt)("td",{parentName:"tr",align:null},"Port that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"8125"))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Metrics type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"statsd")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.flavor"),(0,r.kt)("td",{parentName:"tr",align:null},"Flavor of StatsD configuration"),(0,r.kt)("td",{parentName:"tr",align:null},"datadog")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.host"),(0,r.kt)("td",{parentName:"tr",align:null},"Host that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"localhost")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.metrics.port"),(0,r.kt)("td",{parentName:"tr",align:null},"Port that receives StatsD metrics"),(0,r.kt)("td",{parentName:"tr",align:null},"8125")))))))}m.isMDXComponent=!0;const u={toc:[{value:"Host List Resolver",id:"host-list-resolver",level:3},{value:"Pattern Namespace Resolver",id:"pattern-namespace-resolver",level:3},{value:"Pattern Group Namespace Resolver",id:"pattern-group-namespace-resolver",level:3},{value:"Custom Resolver",id:"custom-resolver",level:3}]};function d(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This feature is available in OpenLineage 1.17 and above")),(0,r.kt)("p",null,"Oftentimes host addresses are used to access data and a single dataset can be accessed via different\naddresses. For example, a Kafka topic can be accessed by a list of kafka bootstrap servers or any\nserver from the list. In general, a problem can be solved by adding mechanism which resolves host addresses into\nlogical identifier understood within the organisation. This applies for all clusters like Kafka or Cassandra\nwhich should be identified regardless of current list of hosts they contain. This also applies\nfor JDBC urls where a physical address of database can change over time."),(0,r.kt)("h3",{id:"host-list-resolver"},"Host List Resolver"),(0,r.kt)("p",null,"Host List Resolver given a list of hosts, replaces host name within\nthe dataset namespace into the resolved value defined."),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"dataset:\n namespaceResolvers:\n resolved-name:\n type: hostList\n hosts: ['kafka-prod13.company.com', 'kafka-prod15.company.com']\n schema: \"kafka\"\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"hostList")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"List of hosts"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"['kafka-prod13.company.com', 'kafka-prod15.company.com']"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka")))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"hostList")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"List of hosts"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"['kafka-prod13.company.com', 'kafka-prod15.company.com']"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka"))))))),(0,r.kt)("h3",{id:"pattern-namespace-resolver"},"Pattern Namespace Resolver"),(0,r.kt)("p",null,"Java regex pattern is used to identify a host. Substrings matching a pattern will be replaced with resolved name."),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"dataset:\n namespaceResolvers:\n resolved-name:\n type: pattern\n # 'cassandra-prod7.company.com', 'cassandra-prod8.company.com'\n regex: 'cassandra-prod(\\d)+\\.company\\.com'\n schema: \"cassandra\"\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"pattern")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cassandra-prod(\\d)+\\.company\\.com"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka")))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"pattern")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.hosts"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cassandra-prod(\\d)+\\.company\\.com"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.resolved-name.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka"))))))),(0,r.kt)("h3",{id:"pattern-group-namespace-resolver"},"Pattern Group Namespace Resolver"),(0,r.kt)("p",null,"For this resolver, Java regex pattern is used to identify a host. However, instead of configured resolved name,\na ",(0,r.kt)("inlineCode",{parentName:"p"},"matchingGroup")," is used a resolved name. This can be useful when having several clusters\nmade from hosts with a well-defined host naming convention."),(0,r.kt)(o.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"dataset:\n namespaceResolvers:\n test-pattern:\n type: patternGroup\n # 'cassandra-test-7.company.com', 'cassandra-test-8.company.com', 'kafka-test-7.company.com', 'kafka-test-8.company.com'\n regex: '(?[a-zA-Z-]+)-(\\d)+\\.company\\.com:[\\d]*'\n matchingGroup: \"cluster\"\n schema: \"cassandra\"\n"))),(0,r.kt)(p.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"patternGroup")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.regex"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"(?[a-zA-Z-]+)-(\\d)+\\.company\\.com:[\\d]*"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.matchingGroup"),(0,r.kt)("td",{parentName:"tr",align:null},"Matching group named within the regex"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cluster"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.dataset.namespaceResolvers.pattern-group-resolver.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka")))))),(0,r.kt)(p.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Resolver type"),(0,r.kt)("td",{parentName:"tr",align:null},"patternGroup")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.regex"),(0,r.kt)("td",{parentName:"tr",align:null},"Regex pattern to find and replace"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"(?[a-zA-Z-]+)-(\\d)+\\.company\\.com"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.matchingGroup"),(0,r.kt)("td",{parentName:"tr",align:null},"Matching group named within the regex"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cluster"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.dataset.namespaceResolvers.pattern-group-resolver.schema"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional schema to be specified. Resolver will be only applied if schema matches the configure one."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"kafka"))))))),(0,r.kt)("h3",{id:"custom-resolver"},"Custom Resolver"),(0,r.kt)("p",null,"Custom resolver can be added by implementing:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"io.openlineage.client.dataset.namespaceResolver.DatasetNamespaceResolver")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"io.openlineage.client.dataset.namespaceResolver.DatasetNamespaceResolverBuilder")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"io.openlineage.client.dataset.namespaceResolver.DatasetNamespaceResolverConfig"))),(0,r.kt)("p",null,"Config class can be used to pass any namespace resolver parameters through standard configuration\nmechanism (Spark & Flink configuration or ",(0,r.kt)("inlineCode",{parentName:"p"},"openlineage.yml")," file provided). Standard ",(0,r.kt)("inlineCode",{parentName:"p"},"ServiceLoader"),"\napproach is used to load and initiate custom classes."))}d.isMDXComponent=!0;const k={sidebar_position:2,title:"Configuration"},c=void 0,g={unversionedId:"client/java/configuration",id:"client/java/configuration",title:"Configuration",description:"We recommend configuring the client with an openlineage.yml file that contains all the",source:"@site/docs/client/java/configuration.md",sourceDirName:"client/java",slug:"/client/java/configuration",permalink:"/docs/client/java/configuration",draft:!1,editUrl:"https://github.com/OpenLineage/docs/tree/main/docs/client/java/configuration.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Configuration"},sidebar:"tutorialSidebar",previous:{title:"Java",permalink:"/docs/client/java/"},next:{title:"Usage Example",permalink:"/docs/client/java/usage"}},h={},N=[{value:"Environment Variables",id:"environment-variables",level:2},{value:"Facets Configuration",id:"facets-configuration",level:2},{value:"Transports",id:"transports",level:2},{value:"Error Handling via Transport",id:"error-handling-via-transport",level:3},{value:"Defining Your Own Transport",id:"defining-your-own-transport",level:3},{value:"Circuit Breakers",id:"circuit-breakers",level:2},{value:"Metrics",id:"metrics",level:2},{value:"Dataset Namespace Resolver",id:"dataset-namespace-resolver",level:2}],f={toc:N};function v(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"We recommend configuring the client with an ",(0,r.kt)("inlineCode",{parentName:"p"},"openlineage.yml")," file that contains all the\ndetails of how to connect to your OpenLineage backend."),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"#transports"},"example configurations.")),(0,r.kt)("p",null,"You can make this file available to the client in three ways (the list also presents precedence of the configuration):"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Set an ",(0,r.kt)("inlineCode",{parentName:"li"},"OPENLINEAGE_CONFIG")," environment variable to a file path: ",(0,r.kt)("inlineCode",{parentName:"li"},"OPENLINEAGE_CONFIG=path/to/openlineage.yml"),"."),(0,r.kt)("li",{parentName:"ol"},"Place an ",(0,r.kt)("inlineCode",{parentName:"li"},"openlineage.yml")," in the user's current working directory."),(0,r.kt)("li",{parentName:"ol"},"Place an ",(0,r.kt)("inlineCode",{parentName:"li"},"openlineage.yml")," under ",(0,r.kt)("inlineCode",{parentName:"li"},".openlineage/")," in the user's home directory (",(0,r.kt)("inlineCode",{parentName:"li"},"~/.openlineage/openlineage.yml"),").")),(0,r.kt)("h2",{id:"environment-variables"},"Environment Variables"),(0,r.kt)("p",null,"The following environment variables are available:"),(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},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Since"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OPENLINEAGE_CONFIG"),(0,r.kt)("td",{parentName:"tr",align:null},"The path to the YAML configuration file. Example: ",(0,r.kt)("inlineCode",{parentName:"td"},"path/to/openlineage.yml")),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OPENLINEAGE_DISABLED"),(0,r.kt)("td",{parentName:"tr",align:null},"When ",(0,r.kt)("inlineCode",{parentName:"td"},"true"),", OpenLineage will not emit events."),(0,r.kt)("td",{parentName:"tr",align:null},"0.9.0")))),(0,r.kt)("h2",{id:"facets-configuration"},"Facets Configuration"),(0,r.kt)("p",null,"In YAML configuration file you can also specify a list of disabled facets that will not be included in OpenLineage event."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"YAML Configuration")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: console\nfacets:\n disabled: \n - spark_unknown\n - spark_logicalPlan\n")),(0,r.kt)("h2",{id:"transports"},"Transports"),(0,r.kt)(l.ZP,{mdxType:"Transports"}),(0,r.kt)("h3",{id:"error-handling-via-transport"},"Error Handling via Transport"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'// Connect to http://localhost:5000\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n HttpTransport.builder()\n .uri("http://localhost:5000")\n .apiKey("f38d2189-c603-4b46-bdea-e573a3b5a7d5")\n .build())\n .registerErrorHandler(new EmitErrorHandler() {\n @Override\n public void handleError(Throwable throwable) {\n // Handle emit error here\n }\n }).build();\n')),(0,r.kt)("h3",{id:"defining-your-own-transport"},"Defining Your Own Transport"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"OpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new MyTransport() {\n @Override\n public void emit(OpenLineage.RunEvent runEvent) {\n // Add emit logic here\n }\n }).build();\n")),(0,r.kt)("h2",{id:"circuit-breakers"},"Circuit Breakers"),(0,r.kt)(i.ZP,{mdxType:"CircuitBreakers"}),(0,r.kt)("h2",{id:"metrics"},"Metrics"),(0,r.kt)(m,{mdxType:"Metrics"}),(0,r.kt)("h2",{id:"dataset-namespace-resolver"},"Dataset Namespace Resolver"),(0,r.kt)(d,{mdxType:"DatasetNamespaceResolver"}))}v.isMDXComponent=!0},81742:(e,t,a)=>{a.d(t,{ZP:()=>p});var n=a(87462),r=(a(67294),a(3905)),l=a(74866),i=a(85162);const o={toc:[{value:"Simple Memory Circuit Breaker",id:"simple-memory-circuit-breaker",level:3},{value:"Java Runtime Circuit Breaker",id:"java-runtime-circuit-breaker",level:3},{value:"Custom Circuit Breaker",id:"custom-circuit-breaker",level:3}]};function p(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},o,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This feature is available in OpenLineage versions >= 1.9.0.")),(0,r.kt)("p",null,"To prevent from over-instrumentation OpenLineage integration provides a circuit breaker mechanism\nthat stops OpenLineage from creating, serializing and sending OpenLineage events."),(0,r.kt)("h3",{id:"simple-memory-circuit-breaker"},"Simple Memory Circuit Breaker"),(0,r.kt)("p",null,"Simple circuit breaker which is working based only on free memory within JVM. Configuration should\ncontain free memory threshold limit (percentage). Default value is ",(0,r.kt)("inlineCode",{parentName:"p"},"20%"),". The circuit breaker\nwill close within first call if free memory is low. ",(0,r.kt)("inlineCode",{parentName:"p"},"circuitCheckIntervalInMillis")," parameter is used\nto configure a frequency circuit breaker is called. Default value is ",(0,r.kt)("inlineCode",{parentName:"p"},"1000ms"),", when no entry in config.\n",(0,r.kt)("inlineCode",{parentName:"p"},"timeoutInSeconds")," is optional. If set, OpenLineage code execution is terminated when a timeout\nis reached (added in version 1.13). "),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"circuitBreaker:\n type: simpleMemory\n memoryThreshold: 20\n circuitCheckIntervalInMillis: 1000\n timeoutInSeconds: 90\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"simpleMemory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90"))))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"simpleMemory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90")))))),(0,r.kt)("h3",{id:"java-runtime-circuit-breaker"},"Java Runtime Circuit Breaker"),(0,r.kt)("p",null,"More complex version of circuit breaker. The amount of free memory can be low as long as\namount of time spent on Garbage Collection is acceptable. ",(0,r.kt)("inlineCode",{parentName:"p"},"JavaRuntimeCircuitBreaker")," closes\nwhen free memory drops below threshold and amount of time spent on garbage collection exceeds\ngiven threshold (",(0,r.kt)("inlineCode",{parentName:"p"},"10%")," by default). The circuit breaker is always open when checked for the first time\nas GC threshold is computed since the previous circuit breaker call.\n",(0,r.kt)("inlineCode",{parentName:"p"},"circuitCheckIntervalInMillis")," parameter is used\nto configure a frequency circuit breaker is called.\nDefault value is ",(0,r.kt)("inlineCode",{parentName:"p"},"1000ms"),", when no entry in config.\n",(0,r.kt)("inlineCode",{parentName:"p"},"timeoutInSeconds")," is optional. If set, OpenLineage code execution is terminated when a timeout\nis reached (added in version 1.13)."),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"circuitBreaker:\n type: javaRuntime\n memoryThreshold: 20\n gcCpuThreshold: 10\n circuitCheckIntervalInMillis: 1000\n timeoutInSeconds: 90\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"javaRuntime")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.gcCpuThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Garbage Collection CPU threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"10")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90"))))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(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},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.type"),(0,r.kt)("td",{parentName:"tr",align:null},"Circuit breaker type selected"),(0,r.kt)("td",{parentName:"tr",align:null},"javaRuntime")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.memoryThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Memory threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"20")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.gcCpuThreshold"),(0,r.kt)("td",{parentName:"tr",align:null},"Garbage Collection CPU threshold"),(0,r.kt)("td",{parentName:"tr",align:null},"10")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"openlineage.circuitBreaker.circuitCheckIntervalInMillis"),(0,r.kt)("td",{parentName:"tr",align:null},"Frequency of checking circuit breaker"),(0,r.kt)("td",{parentName:"tr",align:null},"1000")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"spark.openlineage.circuitBreaker.timeoutInSeconds"),(0,r.kt)("td",{parentName:"tr",align:null},"Optional timeout for OpenLineage execution (Since version 1.13)"),(0,r.kt)("td",{parentName:"tr",align:null},"90")))))),(0,r.kt)("h3",{id:"custom-circuit-breaker"},"Custom Circuit Breaker"),(0,r.kt)("p",null,"List of available circuit breakers can be extended with custom one loaded via ServiceLoader\nwith own implementation of ",(0,r.kt)("inlineCode",{parentName:"p"},"io.openlineage.client.circuitBreaker.CircuitBreakerBuilder"),"."))}p.isMDXComponent=!0},55154:(e,t,a)=>{a.d(t,{ZP:()=>p});var n=a(87462),r=(a(67294),a(3905)),l=a(74866),i=a(85162);const o={toc:[{value:"HTTP",id:"http",level:3},{value:"Configuration",id:"configuration",level:4},{value:"Behavior",id:"behavior",level:4},{value:"Examples",id:"examples",level:4},{value:"Kafka",id:"kafka",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Behavior",id:"behavior-1",level:4},{value:"Notes",id:"notes",level:4},{value:"Examples",id:"examples-1",level:4},{value:"Kinesis",id:"kinesis",level:3},{value:"Configuration",id:"configuration-2",level:4},{value:"Behavior",id:"behavior-2",level:4},{value:"Examples",id:"examples-2",level:4},{value:"Console",id:"console",level:3},{value:"Behavior",id:"behavior-3",level:4},{value:"Notes",id:"notes-1",level:4},{value:"Configuration",id:"configuration-3",level:4},{value:"Examples",id:"examples-3",level:4},{value:"File",id:"file",level:3},{value:"Configuration",id:"configuration-4",level:4},{value:"Behavior",id:"behavior-4",level:4},{value:"Notes for Yarn/Kubernetes",id:"notes-for-yarnkubernetes",level:4},{value:"Examples",id:"examples-4",level:4}]};function p(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},o,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Tip:")," See current list of ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports"},"all supported transports"),"."),(0,r.kt)("h3",{id:"http"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/HttpTransport.java"},"HTTP")),(0,r.kt)("p",null,"Allows sending events to HTTP endpoint, using ",(0,r.kt)("a",{parentName:"p",href:"https://hc.apache.org/index.html"},"ApacheHTTPClient"),"."),(0,r.kt)("h4",{id:"configuration"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"http"'),". Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"url")," - string, base url for HTTP requests. Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"endpoint")," - string specifying the endpoint to which events are sent, appended to ",(0,r.kt)("inlineCode",{parentName:"li"},"url"),". Optional, default: ",(0,r.kt)("inlineCode",{parentName:"li"},"/api/v1/lineage"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"urlParams")," - dictionary specifying query parameters send in HTTP requests. Optional."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"timeoutInMillis")," - integer specifying timeout (in milliseconds) value used while connecting to server. Optional, default: ",(0,r.kt)("inlineCode",{parentName:"li"},"5000"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"auth")," - dictionary specifying authentication options. Optional, by default no authorization is used. If set, requires the ",(0,r.kt)("inlineCode",{parentName:"li"},"type")," property.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type"),' - string specifying the "api_key" or the fully qualified class name of your TokenProvider. Required if ',(0,r.kt)("inlineCode",{parentName:"li"},"auth")," is provided."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"apiKey")," - string setting the Authentication HTTP header as the Bearer. Required if ",(0,r.kt)("inlineCode",{parentName:"li"},"type")," is ",(0,r.kt)("inlineCode",{parentName:"li"},"api_key"),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"headers")," - dictionary specifying HTTP request headers. Optional."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"compression")," - string, name of algorithm used by HTTP client to compress request body. Optional, default value ",(0,r.kt)("inlineCode",{parentName:"li"},"null"),", allowed values: ",(0,r.kt)("inlineCode",{parentName:"li"},"gzip"),". Added in v1.13.0.")),(0,r.kt)("h4",{id:"behavior"},"Behavior"),(0,r.kt)("p",null,"Events are serialized to JSON, and then are send as HTTP POST request with ",(0,r.kt)("inlineCode",{parentName:"p"},"Content-Type: application/json"),"."),(0,r.kt)("h4",{id:"examples"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: http\n url: http://localhost:5000\n")),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: http\n url: http://localhost:5000\n auth:\n type: api_key\n api_key: f38d2189-c603-4b46-bdea-e573a3b5a7d5\n")),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: http\n url: http://localhost:5000\n endpoint: /api/v1/lineage\n urlParams:\n param0: value0\n param1: value1\n timeoutInMillis: 5000\n auth:\n type: api_key\n api_key: f38d2189-c603-4b46-bdea-e573a3b5a7d5\n headers:\n X-Some-Extra-Header: abc\n compression: gzip\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\n")),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\nspark.openlineage.transport.auth.type=api_key\nspark.openlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\n")),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\nspark.openlineage.transport.endpoint=/api/v1/lineage\nspark.openlineage.transport.urlParams.param0=value0\nspark.openlineage.transport.urlParams.param1=value1\nspark.openlineage.transport.timeoutInMillis=5000\nspark.openlineage.transport.auth.type=api_key\nspark.openlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\nspark.openlineage.transport.headers.X-Some-Extra-Header=abc\nspark.openlineage.transport.compression=gzip\n")),(0,r.kt)("details",null,(0,r.kt)("summary",null,"URL parsing within Spark integration"),(0,r.kt)("p",null,(0,r.kt)("p",null,"You can supply http parameters using values in url, the parsed ",(0,r.kt)("inlineCode",{parentName:"p"},"spark.openlineage.*")," properties are located in url as follows:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"{transport.url}/{transport.endpoint}/namespaces/{namespace}/jobs/{parentJobName}/runs/{parentRunId}?app_name={appName}&api_key={transport.apiKey}&timeout={transport.timeout}&xxx={transport.urlParams.xxx}")),(0,r.kt)("p",null,"example:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"http://localhost:5000/api/v1/namespaces/ns_name/jobs/job_name/runs/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?app_name=app&api_key=abc&timeout=5000&xxx=xxx"))))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=http\nspark.openlineage.transport.url=http://localhost:5000\n")),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=http\nopenlineage.transport.url=http://localhost:5000\nopenlineage.transport.auth.type=api_key\nopenlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\n")),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=http\nopenlineage.transport.url=http://localhost:5000\nopenlineage.transport.endpoint=/api/v1/lineage\nopenlineage.transport.urlParams.param0=value0\nopenlineage.transport.urlParams.param1=value1\nopenlineage.transport.timeoutInMillis=5000\nopenlineage.transport.auth.type=api_key\nopenlineage.transport.auth.apiKey=f38d2189-c603-4b46-bdea-e573a3b5a7d5\nopenlineage.transport.headers.X-Some-Extra-Header=abc\nopenlineage.transport.compression=gzip\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("p",null,"Anonymous connection:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.HttpConfig;\nimport io.openlineage.client.transports.HttpTransport;\n\nHttpConfig httpConfig = new HttpConfig();\nhttpConfig.setUrl("http://localhost:5000");\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new HttpTransport(httpConfig))\n .build();\n')),(0,r.kt)("p",null,"With authorization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.ApiKeyTokenProvider;\nimport io.openlineage.client.transports.HttpConfig;\nimport io.openlineage.client.transports.HttpTransport;\n\nApiKeyTokenProvider apiKeyTokenProvider = new ApiKeyTokenProvider();\napiKeyTokenProvider.setApiKey("f38d2189-c603-4b46-bdea-e573a3b5a7d5");\n\nHttpConfig httpConfig = new HttpConfig();\nhttpConfig.setUrl("http://localhost:5000");\nhttpConfig.setAuth(apiKeyTokenProvider);\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new HttpTransport(httpConfig))\n .build();\n')),(0,r.kt)("p",null,"Full example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Map;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.ApiKeyTokenProvider;\nimport io.openlineage.client.transports.HttpConfig;\nimport io.openlineage.client.transports.HttpTransport;\n\nMap queryParams = Map.of(\n "param0", "value0",\n "param1", "value1"\n);\n\nMap headers = Map.of(\n "X-Some-Extra-Header", "abc"\n);\n\nApiKeyTokenProvider apiKeyTokenProvider = new ApiKeyTokenProvider();\napiKeyTokenProvider.setApiKey("f38d2189-c603-4b46-bdea-e573a3b5a7d5");\n\nHttpConfig httpConfig = new HttpConfig();\nhttpConfig.setUrl("http://localhost:5000");\nhttpConfig.setEndpoint("/api/v1/lineage");\nhttpConfig.setUrlParams(queryParams);\nhttpConfig.setAuth(apiKeyTokenProvider);\nhttpConfig.setTimeoutInMillis(headers);\nhttpConfig.setHeaders(5000);\nhttpConfig.setCompression(HttpConfig.Compression.GZIP);\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new HttpTransport(httpConfig))\n .build();\n')))),(0,r.kt)("h3",{id:"kafka"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/KafkaTransport.java"},"Kafka")),(0,r.kt)("p",null,"If a transport type is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"kafka"),", then the below parameters would be read and used when building KafkaProducer.\nThis transport requires the artifact ",(0,r.kt)("inlineCode",{parentName:"p"},"org.apache.kafka:kafka-clients:3.1.0")," (or compatible) on your classpath."),(0,r.kt)("h4",{id:"configuration-1"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"p"},'"kafka"'),". Required.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"topicName")," - string specifying the topic on what events will be sent. Required.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"properties")," - a dictionary containing a Kafka producer config as in ",(0,r.kt)("a",{parentName:"p",href:"http://kafka.apache.org/0100/documentation.html#producerconfigs"},"Kafka producer config"),". Required.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"localServerId")," - ",(0,r.kt)("strong",{parentName:"p"},"deprecated"),", renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," since v1.13.0.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," - string, key for all Kafka messages produced by transport. Optional, default value described below. Added in v1.13.0."),(0,r.kt)("p",{parentName:"li"},"Default values for ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," are:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{parentJob.namespace}/{parentJob.name}")," - for RunEvent with parent facet"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{job.namespace}/{job.name}")," - for RunEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"job:{job.namespace}/{job.name}")," - for JobEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dataset:{dataset.namespace}/{dataset.name}")," - for DatasetEvent")))),(0,r.kt)("h4",{id:"behavior-1"},"Behavior"),(0,r.kt)("p",null,"Events are serialized to JSON, and then dispatched to the Kafka topic."),(0,r.kt)("h4",{id:"notes"},"Notes"),(0,r.kt)("p",null,"It is recommended to provide ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," if Job hierarchy is used. It can be any string, but it should be the same for all jobs in\nhierarchy, like ",(0,r.kt)("inlineCode",{parentName:"p"},"Airflow task -> Spark application -> Spark task runs"),"."),(0,r.kt)("h4",{id:"examples-1"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: kafka\n topicName: openlineage.events\n properties:\n bootstrap.servers: localhost:9092,another.host:9092\n acks: all\n retries: 3\n key.serializer: org.apache.kafka.common.serialization.StringSerializer\n value.serializer: org.apache.kafka.common.serialization.StringSerializer\n messageKey: some-value\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=kafka\nspark.openlineage.transport.topicName=openlineage.events\nspark.openlineage.transport.properties.bootstrap.servers=localhost:9092,another.host:9092\nspark.openlineage.transport.properties.acks=all\nspark.openlineage.transport.properties.retries=3\nspark.openlineage.transport.properties.key.serializer=org.apache.kafka.common.serialization.StringSerializer\nspark.openlineage.transport.properties.value.serializer=org.apache.kafka.common.serialization.StringSerializer\nspark.openlineage.transport.messageKey=some-value\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=kafka\nopenlineage.transport.topicName=openlineage.events\nopenlineage.transport.properties.bootstrap.servers=localhost:9092,another.host:9092\nopenlineage.transport.properties.acks=all\nopenlineage.transport.properties.retries=3\nopenlineage.transport.properties.key.serializer=org.apache.kafka.common.serialization.StringSerializer\nopenlineage.transport.properties.value.serializer=org.apache.kafka.common.serialization.StringSerializer\nopenlineage.transport.messageKey=some-value\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.KafkaConfig;\nimport io.openlineage.client.transports.KafkaTransport;\n\nProperties kafkaProperties = new Properties();\nkafkaProperties.setProperty("bootstrap.servers", "localhost:9092,another.host:9092");\nkafkaProperties.setProperty("acks", "all");\nkafkaProperties.setProperty("retries", "3");\nkafkaProperties.setProperty("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");\nkafkaProperties.setProperty("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");\n\nKafkaConfig kafkaConfig = new KafkaConfig();\nKafkaConfig.setTopicName("openlineage.events");\nKafkaConfig.setProperties(kafkaProperties);\nKafkaConfig.setLocalServerId("some-value");\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new KafkaTransport(httpConfig))\n .build();\n')))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Notes"),":\nIt is recommended to provide ",(0,r.kt)("inlineCode",{parentName:"p"},"messageKey")," if Job hierarchy is used. It can be any string, but it should be the same for all jobs in\nhierarchy, like ",(0,r.kt)("inlineCode",{parentName:"p"},"Airflow task -> Spark application"),"."),(0,r.kt)("p",null,"Default values are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{parentJob.namespace}/{parentJob.name}/{parentRun.id}")," - for RunEvent with parent facet"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"run:{job.namespace}/{job.name}/{run.id}")," - for RunEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"job:{job.namespace}/{job.name}")," - for JobEvent"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dataset:{dataset.namespace}/{dataset.name}")," - for DatasetEvent")),(0,r.kt)("h3",{id:"kinesis"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/blob/main/client/java/src/main/java/io/openlineage/client/transports/KinesisTransport.java"},"Kinesis")),(0,r.kt)("p",null,"If a transport type is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"kinesis"),", then the below parameters would be read and used when building KinesisProducer.\nAlso, KinesisTransport depends on you to provide artifact ",(0,r.kt)("inlineCode",{parentName:"p"},"com.amazonaws:amazon-kinesis-producer:0.14.0")," or compatible on your classpath."),(0,r.kt)("h4",{id:"configuration-2"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"kinesis"'),". Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"streamName")," - the streamName of the Kinesis. Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"region")," - the region of the Kinesis. Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"roleArn")," - the roleArn which is allowed to read/write to Kinesis stream. Optional."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"properties")," - a dictionary that contains a ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/awslabs/amazon-kinesis-producer/blob/master/java/amazon-kinesis-producer-sample/default_config.properties"},"Kinesis allowed properties"),". Optional.")),(0,r.kt)("h4",{id:"behavior-2"},"Behavior"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Events are serialized to JSON, and then dispatched to the Kinesis stream."),(0,r.kt)("li",{parentName:"ul"},"The partition key is generated as ",(0,r.kt)("inlineCode",{parentName:"li"},"{jobNamespace}:{jobName}"),"."),(0,r.kt)("li",{parentName:"ul"},"Two constructors are available: one accepting both ",(0,r.kt)("inlineCode",{parentName:"li"},"KinesisProducer")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"KinesisConfig")," and another solely accepting ",(0,r.kt)("inlineCode",{parentName:"li"},"KinesisConfig"),".")),(0,r.kt)("h4",{id:"examples-2"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: kinesis\n streamName: your_kinesis_stream_name\n region: your_aws_region\n roleArn: arn:aws:iam::account-id:role/role-name\n properties:\n VerifyCertificate: true\n ConnectTimeout: 6000\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=kinesis\nspark.openlineage.transport.streamName=your_kinesis_stream_name\nspark.openlineage.transport.region=your_aws_region\nspark.openlineage.transport.roleArn=arn:aws:iam::account-id:role/role-name\nspark.openlineage.transport.properties.VerifyCertificate=true\nspark.openlineage.transport.properties.ConnectTimeout=6000\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=kinesis\nopenlineage.transport.streamName=your_kinesis_stream_name\nopenlineage.transport.region=your_aws_region\nopenlineage.transport.roleArn=arn:aws:iam::account-id:role/role-name\nopenlineage.transport.properties.VerifyCertificate=true\nopenlineage.transport.properties.ConnectTimeout=6000\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.KinesisConfig;\nimport io.openlineage.client.transports.KinesisTransport;\n\nProperties kinesisProperties = new Properties();\nkinesisProperties.setProperty("property_name_1", "value_1");\nkinesisProperties.setProperty("property_name_2", "value_2");\n\nKinesisConfig kinesisConfig = new KinesisConfig();\nkinesisConfig.setStreamName("your_kinesis_stream_name");\nkinesisConfig.setRegion("your_aws_region");\nkinesisConfig.setRoleArn("arn:aws:iam::account-id:role/role-name");\nkinesisConfig.setProperties(kinesisProperties);\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new KinesisTransport(httpConfig))\n .build();\n')))),(0,r.kt)("h3",{id:"console"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/ConsoleTransport.java"},"Console")),(0,r.kt)("p",null,"This straightforward transport emits OpenLineage events directly to the console through a logger.\nNo additional configuration is required."),(0,r.kt)("h4",{id:"behavior-3"},"Behavior"),(0,r.kt)("p",null,"Events are serialized to JSON. Then each event is logged with ",(0,r.kt)("inlineCode",{parentName:"p"},"INFO")," level to logger with name ",(0,r.kt)("inlineCode",{parentName:"p"},"ConsoleTransport"),"."),(0,r.kt)("h4",{id:"notes-1"},"Notes"),(0,r.kt)("p",null,"Be cautious when using the ",(0,r.kt)("inlineCode",{parentName:"p"},"DEBUG")," log level, as it might result in double-logging due to the ",(0,r.kt)("inlineCode",{parentName:"p"},"OpenLineageClient")," also logging."),(0,r.kt)("h4",{id:"configuration-3"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"console"'),". Required.")),(0,r.kt)("h4",{id:"examples-3"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: console\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=console\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=console\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.ConsoleTransport;\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new ConsoleTransport())\n .build();\n")))),(0,r.kt)("h3",{id:"file"},(0,r.kt)("a",{parentName:"h3",href:"https://github.com/OpenLineage/OpenLineage/tree/main/client/java/src/main/java/io/openlineage/client/transports/FileTransport.java"},"File")),(0,r.kt)("p",null,"Designed mainly for integration testing, the ",(0,r.kt)("inlineCode",{parentName:"p"},"FileTransport")," emits OpenLineage events to a given file."),(0,r.kt)("h4",{id:"configuration-4"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"type")," - string, must be ",(0,r.kt)("inlineCode",{parentName:"li"},'"file"'),". Required."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"location")," - string specifying the path of the file. Required.")),(0,r.kt)("h4",{id:"behavior-4"},"Behavior"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If the target file is absent, it's created."),(0,r.kt)("li",{parentName:"ul"},"Events are serialized to JSON, and then appended to a file, separated by newlines."),(0,r.kt)("li",{parentName:"ul"},"Intrinsic newline characters within the event JSON are eliminated to ensure one-line events.")),(0,r.kt)("h4",{id:"notes-for-yarnkubernetes"},"Notes for Yarn/Kubernetes"),(0,r.kt)("p",null,"This transport type is pretty useless on Spark/Flink applications deployed to Yarn or Kubernetes cluster:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Each executor will write file to a local filesystem of Yarn container/K8s pod. So resulting file will be removed when such container/pod is destroyed."),(0,r.kt)("li",{parentName:"ul"},"Kubernetes persistent volumes are not destroyed after pod removal. But all the executors will write to the same network disk in parallel, producing a broken file.")),(0,r.kt)("h4",{id:"examples-4"},"Examples"),(0,r.kt)(l.Z,{groupId:"integrations",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"yaml",label:"Yaml Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"transport:\n type: file\n location: /path/to/your/file\n"))),(0,r.kt)(i.Z,{value:"spark",label:"Spark Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"spark.openlineage.transport.type=file\nspark.openlineage.transport.location=/path/to/your/filext\n"))),(0,r.kt)(i.Z,{value:"flink",label:"Flink Config",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ini"},"openlineage.transport.type=file\nopenlineage.transport.location=/path/to/your/file\n"))),(0,r.kt)(i.Z,{value:"java",label:"Java Code",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'import java.util.Properties;\n\nimport io.openlineage.client.OpenLineageClient;\nimport io.openlineage.client.transports.FileConfig;\nimport io.openlineage.client.transports.FileTransport;\n\nFileConfig fileConfig = new FileConfig("/path/to/your/file");\n\nOpenLineageClient client = OpenLineageClient.builder()\n .transport(\n new FileTransport(fileConfig))\n .build();\n')))))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.9cfcc840.js b/assets/js/main.1a68ea52.js similarity index 99% rename from assets/js/main.9cfcc840.js rename to assets/js/main.1a68ea52.js index 8386cf03de..c0190beea8 100644 --- a/assets/js/main.9cfcc840.js +++ b/assets/js/main.1a68ea52.js @@ -1,2 +1,2 @@ -/*! For license information please see main.9cfcc840.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),a=n(87462),o=n(68356),i=n.n(o),s=n(16887);const l={"00d4de1f":[()=>n.e(9217).then(n.bind(n,39313)),"@site/docs/releases/1_8_0.md",39313],"039befcd":[()=>n.e(5204).then(n.bind(n,17874)),"@site/docs/development/developing/python/tests/common.md",17874],"0480b142":[()=>n.e(836).then(n.bind(n,43584)),"@site/docs/faq.md",43584],"05345bac":[()=>n.e(3815).then(n.bind(n,93170)),"@site/docs/guides/spark.md",93170],"0592d80c":[()=>n.e(9360).then(n.bind(n,48986)),"@site/docs/releases/1_1_0.md",48986],"05c0c416":[()=>n.e(2530).then(n.bind(n,39748)),"@site/docs/releases/0_30_1.md",39748],"05d0827a":[()=>n.e(2509).then(n.bind(n,41420)),"@site/docs/spec/schemas.md",41420],"075f371c":[()=>n.e(6161).then(n.bind(n,965)),"@site/blog/incubation-stage-lfai/index.mdx?truncated=true",965],"0793426b":[()=>n.e(9800).then(n.bind(n,92755)),"@site/docs/spec/facets/job-facets/source-code.md",92755],"07c0998e":[()=>n.e(369).then(n.bind(n,30201)),"@site/docs/development/developing/developing.md",30201],"08308420":[()=>n.e(933).then(n.bind(n,64270)),"@site/docs/development/developing/python/troubleshooting/logging.md",64270],"0912a637":[()=>n.e(3105).then(n.bind(n,3546)),"@site/src/pages/news-landing/index.mdx",3546],"0b807c9f":[()=>n.e(3671).then(n.bind(n,58175)),"@site/docs/releases/0_6_0.md",58175],"0d72bb84":[()=>n.e(7110).then(n.bind(n,27760)),"@site/blog/operators-and-extractors-technical-deep-dive/index.mdx?truncated=true",27760],"101e9d8e":[()=>n.e(9654).then(n.bind(n,85803)),"@site/docs/guides/airflow-backfill-dags.md",85803],"10cba987":[()=>n.e(750).then(n.bind(n,51866)),"@site/docs/releases/0_2_1.md",51866],"1177a91f":[()=>n.e(542).then(n.bind(n,69257)),"@site/blog/boston-collibra-meetup/index.mdx?truncated=true",69257],"124c864f":[()=>n.e(2016).then(n.bind(n,35474)),"@site/docs/releases/0_2_0.md",35474],"12db0faa":[()=>n.e(5990).then(n.bind(n,94322)),"@site/docs/releases/0_10_0.md",94322],"151add9d":[()=>n.e(4191).then(n.bind(n,36905)),"@site/src/pages/home.tsx",36905],"15e23a3c":[()=>n.e(537).then(n.bind(n,93110)),"@site/docs/releases/0_16_1.md",93110],"166734c1":[()=>n.e(6385).then(n.bind(n,54528)),"@site/docs/development/examples.md",54528],"169c3eb6":[()=>n.e(8480).then(n.bind(n,92797)),"@site/docs/releases/0_5_2.md",92797],"16aec398":[()=>n.e(1333).then(n.bind(n,42515)),"@site/docs/releases/1_0_0.md",42515],17896441:[()=>Promise.all([n.e(532),n.e(6915),n.e(7918)]).then(n.bind(n,78945)),"@theme/DocItem",78945],"180e5f2c":[()=>n.e(5265).then(n.bind(n,60118)),"@site/docs/integrations/spark/configuration/airflow.md",60118],"185495e7":[()=>n.e(9895).then(n.bind(n,18822)),"@site/blog/openlineage-snowflake/index.mdx",18822],"194154ed":[()=>n.e(5655).then(n.bind(n,1090)),"@site/docs/releases/0_2_2.md",1090],"1b57341d":[()=>n.e(1402).then(n.bind(n,26117)),"@site/blog/data-agility-day/index.mdx",26117],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,19963)),"@theme/DocPage",19963],"1c091541":[()=>n.e(8271).then(n.t.bind(n,24469,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"1ceeab8e":[()=>n.e(7473).then(n.bind(n,81606)),"@site/blog/dataquality_expectations_facet/index.mdx",81606],"1dfc1006":[()=>n.e(1585).then(n.bind(n,49479)),"@site/docs/releases/1_17_1.md",49479],"1f152727":[()=>n.e(233).then(n.bind(n,27461)),"@site/docs/releases/0_7_1.md",27461],"1f391b9e":[()=>Promise.all([n.e(532),n.e(6915),n.e(3085)]).then(n.bind(n,14247)),"@theme/MDXPage",14247],"1fa60b00":[()=>n.e(9602).then(n.bind(n,58980)),"@site/docs/releases/0_26_0.md",58980],"2078bf5c":[()=>n.e(4598).then(n.bind(n,11492)),"@site/src/pages/community/index.mdx",11492],"20c5d708":[()=>n.e(7350).then(n.bind(n,52943)),"@site/docs/spec/object-model.md",52943],"20ca76ee":[()=>n.e(1447).then(n.bind(n,32753)),"@site/blog/why-open-standard/index.mdx?truncated=true",32753],"219ab5fb":[()=>n.e(6995).then(n.bind(n,86954)),"@site/docs/integrations/airflow/preflight-check-dag.md",86954],"247783bb":[()=>n.e(9334).then(n.t.bind(n,83769,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],"247e87b5":[()=>n.e(7075).then(n.bind(n,62568)),"@site/docs/releases/1_2_2.md",62568],"26c17b43":[()=>n.e(4401).then(n.bind(n,32812)),"@site/blog/0.1-release/index.mdx",32812],27473076:[()=>n.e(535).then(n.bind(n,21818)),"@site/docs/releases/0_21_1.md",21818],"2c168b6e":[()=>n.e(529).then(n.bind(n,21410)),"@site/blog/whats-in-a-namespace/index.mdx",21410],"2cd3bf1f":[()=>n.e(6895).then(n.bind(n,19912)),"@site/blog/openlineage-microsoft-purview/index.mdx?truncated=true",19912],"2ff2282e":[()=>n.e(9531).then(n.bind(n,65254)),"@site/blog/metaphor-integration/index.mdx?truncated=true",65254],"308eb5ef":[()=>n.e(1141).then(n.bind(n,76662)),"@site/blog/sf-meetup/index.mdx",76662],"316a1326":[()=>n.e(9487).then(n.bind(n,33529)),"@site/blog/data-council-meetup/index.mdx?truncated=true",33529],"33e7cb43":[()=>n.e(8186).then(n.bind(n,77577)),"@site/blog/dataquality_expectations_facet/index.mdx?truncated=true",77577],"34f06035":[()=>n.e(674).then(n.bind(n,49146)),"@site/docs/releases/0_15_1.md",49146],"3734ded0":[()=>n.e(8009).then(n.bind(n,15458)),"@site/blog/ecosystem-survey/index.mdx?truncated=true",15458],"3948efce":[()=>n.e(83).then(n.bind(n,66240)),"@site/docs/guides/facets.md",66240],"3dda721b":[()=>n.e(5108).then(n.bind(n,63813)),"@site/docs/releases/0_6_1.md",63813],"3f90e869":[()=>n.e(3910).then(n.bind(n,39519)),"@site/blog/warsaw-meetup/index.mdx?truncated=true",39519],"4019634f":[()=>n.e(380).then(n.bind(n,97169)),"@site/docs/spec/job-hierarchy.md",97169],"414254d7":[()=>n.e(5091).then(n.bind(n,32303)),"@site/docs/releases/0_24_0.md",32303],"41cc5134":[()=>n.e(3933).then(n.bind(n,68683)),"@site/blog/metaphor-integration/index.mdx",68683],"420daeba":[()=>n.e(2807).then(n.bind(n,34933)),"@site/blog/dbt-with-marquez/index.mdx?truncated=true",34933],"44fb3b54":[()=>n.e(2991).then(n.bind(n,32386)),"@site/docs/integrations/great-expectations.md",32386],46292012:[()=>n.e(583).then(n.bind(n,4936)),"@site/docs/releases/0_20_6.md",4936],"4700f30c":[()=>n.e(6519).then(n.bind(n,6219)),"@site/docs/spec/facets/dataset-facets/column_lineage_facet.md",6219],"48b96b3f":[()=>n.e(7378).then(n.bind(n,17309)),"@site/docs/guides/airflow_proxy.md",17309],"48f2969f":[()=>n.e(8410).then(n.bind(n,7751)),"@site/blog/extractors/index.mdx",7751],"4c2538be":[()=>n.e(2778).then(n.bind(n,89777)),"@site/docs/releases/0_23_0.md",89777],"4c941d49":[()=>n.e(7773).then(n.bind(n,62630)),"@site/blog/openlineage-microsoft-purview/index.mdx",62630],"4fdf9ebc":[()=>n.e(1330).then(n.bind(n,43258)),"@site/docs/integrations/spark/main_concept.md",43258],"521b81e4":[()=>n.e(372).then(n.bind(n,95476)),"@site/docs/development/developing/python/api-reference/openlineage.client.md",95476],"52c580d6":[()=>n.e(9490).then(n.bind(n,9328)),"@site/docs/spec/facets/job-facets/documentation.md",9328],"532d00fa":[()=>n.e(1274).then(n.bind(n,53590)),"@site/blog/python-client/index.mdx?truncated=true",53590],"53c3e1ab":[()=>n.e(2601).then(n.bind(n,60370)),"@site/docs/releases/1_16_0.md",60370],"54311eb2":[()=>n.e(1704).then(n.bind(n,64688)),"@site/blog/openlineage-takes-inspiration-from-opentelemetry/index.mdx",64688],"54494eff":[()=>n.e(5135).then(n.bind(n,24163)),"@site/docs/spec/run-cycle.md",24163],"561f6d87":[()=>n.e(5037).then(n.bind(n,61009)),"@site/src/pages/resources/index.mdx",61009],57733312:[()=>n.e(4178).then(n.bind(n,89384)),"@site/blog/openlineage-egeria/index.mdx",89384],"579e7ea1":[()=>n.e(5377).then(n.bind(n,36952)),"@site/docs/integrations/spark/spark_column_lineage.md",36952],"592d055b":[()=>n.e(8496).then(n.bind(n,68645)),"@site/blog/whats-in-a-namespace/index.mdx?truncated=true",68645],"597299bb":[()=>n.e(1115).then(n.bind(n,89841)),"@site/docs/releases/0_13_0.md",89841],"5992929c":[()=>n.e(4665).then(n.bind(n,61608)),"@site/docs/integrations/trino.md",61608],"5a654d54":[()=>n.e(8975).then(n.bind(n,25926)),"@site/docs/releases/0_1_0.md",25926],"5aa89694":[()=>n.e(8204).then(n.bind(n,54369)),"@site/docs/integrations/spark/metrics.md",54369],"5c10ee14":[()=>n.e(298).then(n.bind(n,29738)),"@site/blog/joining-lfai/index.mdx?truncated=true",29738],"5c58b514":[()=>n.e(5693).then(n.bind(n,65132)),"@site/docs/spec/facets/run-facets/run-facets.md",65132],"5d258c42":[()=>n.e(8214).then(n.bind(n,61235)),"@site/docs/client/java/usage.md",61235],"5da5450b":[()=>Promise.all([n.e(532),n.e(1924)]).then(n.bind(n,39816)),"@site/docs/integrations/spark/configuration/usage.md",39816],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f882d86":[()=>n.e(6590).then(n.bind(n,30897)),"@site/blog/extractors/index.mdx?truncated=true",30897],"5fc6fd66":[()=>n.e(1253).then(n.bind(n,14922)),"@site/docs/releases/0_8_1.md",14922],"620f2d01":[()=>n.e(4778).then(n.bind(n,10221)),"@site/blog/sf-meetup/index.mdx?truncated=true",10221],"63b1e9bb":[()=>n.e(355).then(n.bind(n,58602)),"@site/blog/openlineage-spark/index.mdx",58602],"63fa932e":[()=>n.e(6740).then(n.bind(n,17382)),"@site/docs/integrations/airflow/default-extractors.md",17382],"66186ebf":[()=>n.e(881).then(n.bind(n,85768)),"@site/docs/integrations/dbt.md",85768],"6626bd4e":[()=>Promise.all([n.e(532),n.e(8322)]).then(n.bind(n,50054)),"@site/docs/integrations/spark/configuration/circuit_breaker.md",50054],"670fa135":[()=>n.e(1196).then(n.bind(n,55232)),"@site/blog/sf-meetup-2/index.mdx?truncated=true",55232],"680e78a1":[()=>n.e(5122).then(n.bind(n,86037)),"@site/blog/extending-with-facets/index.mdx?truncated=true",86037],"68a99f53":[()=>n.e(4380).then(n.bind(n,3847)),"@site/docs/releases/1_11_3.md",3847],"6a50546f":[()=>n.e(4232).then(n.bind(n,2082)),"@site/docs/releases/0_14_0.md",2082],"6a59b9f2":[()=>n.e(9643).then(n.bind(n,92441)),"@site/docs/development/developing/java/adding_metrics.md",92441],"6ae54959":[()=>n.e(8605).then(n.bind(n,55824)),"@site/docs/releases/1_5_0.md",55824],"6bd20759":[()=>n.e(7045).then(n.bind(n,4523)),"@site/docs/spec/facets/run-facets/nominal_time.md",4523],"6df02490":[()=>n.e(2229).then(n.bind(n,75171)),"@site/blog/london-confluent-meetup/index.mdx?truncated=true",75171],"6e08a82a":[()=>n.e(1962).then(n.bind(n,60814)),"@site/blog/data-council-meetup/index.mdx",60814],"6ff2b1fb":[()=>n.e(7763).then(n.bind(n,24995)),"@site/blog/kafka-summit-talk/index.mdx?truncated=true",24995],"71780bb6":[()=>n.e(960).then(n.bind(n,25687)),"@site/docs/releases/0_2_3.md",25687],"718775cd":[()=>n.e(3158).then(n.bind(n,97547)),"@site/blog/extending-with-facets/index.mdx",97547],"72a60ad4":[()=>n.e(427).then(n.bind(n,81162)),"@site/blog/dbt-with-marquez/index.mdx",81162],"73e8d822":[()=>n.e(3027).then(n.bind(n,53220)),"@site/blog/column-lineage/index.mdx",53220],"75949aba":[()=>n.e(477).then(n.bind(n,51792)),"@site/docs/guides/dbt.md",51792],"75f3ebe1":[()=>n.e(3112).then(n.bind(n,84361)),"@site/docs/development/developing/python/setup.md",84361],"783077bc":[()=>n.e(9018).then(n.bind(n,34555)),"@site/blog/nyc-collibra-meetup/index.mdx",34555],"7c4fd4bf":[()=>n.e(6188).then(n.bind(n,65004)),"@site/docs/development/ol-proxy.md",65004],"7d79928c":[()=>n.e(1502).then(n.bind(n,10385)),"@site/docs/development/developing/python/tests/airflow.md",10385],"7d9726a8":[()=>n.e(7429).then(n.t.bind(n,89494,19)),"~blog/default/blog-page-4-30b.json",89494],"7dd1b774":[()=>n.e(5529).then(n.bind(n,65351)),"@site/docs/spec/facets/dataset-facets/input-dataset-facets/data_quality_metrics.md",65351],"7f8cc605":[()=>n.e(4849).then(n.bind(n,18977)),"@site/blog/why-open-standard/index.mdx",18977],"7fcead1b":[()=>n.e(671).then(n.bind(n,2033)),"@site/docs/spec/facets/job-facets/ownership.md",2033],80770702:[()=>n.e(5840).then(n.bind(n,49296)),"@site/blog/1.0-release/index.mdx?truncated=true",49296],"80ff821d":[()=>n.e(128).then(n.bind(n,78140)),"@site/blog/data-lineage-meetup/index.mdx",78140],"8146edb7":[()=>n.e(2465).then(n.bind(n,88447)),"@site/docs/spec/facets/job-facets/job-type.md",88447],"814f3328":[()=>n.e(2535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"841cf8f2":[()=>n.e(2875).then(n.bind(n,77986)),"@site/docs/spec/facets/facets.md",77986],"8476b977":[()=>n.e(2667).then(n.bind(n,35843)),"@site/blog/explore-lineage-api/index.mdx?truncated=true",35843],"887a48b5":[()=>n.e(4612).then(n.bind(n,75929)),"@site/docs/spec/producers.md",75929],"898d46f2":[()=>n.e(1012).then(n.bind(n,67873)),"@site/src/pages/getting-started/index.mdx",67873],"899cb223":[()=>n.e(2273).then(n.bind(n,47328)),"@site/blog/column-lineage/index.mdx?truncated=true",47328],"8a9eb530":[()=>Promise.all([n.e(532),n.e(4856)]).then(n.bind(n,87019)),"@site/docs/integrations/spark/configuration/transport.md",87019],"8ad52bc1":[()=>n.e(6873).then(n.bind(n,44312)),"@site/docs/releases/1_10_2.md",44312],"8af20ecb":[()=>n.e(9065).then(n.bind(n,70719)),"@site/blog/openlineage-takes-inspiration-from-opentelemetry/index.mdx?truncated=true",70719],"8bada952":[()=>n.e(1871).then(n.bind(n,35946)),"@site/docs/releases/1_14_0.md",35946],"8d1e239c":[()=>n.e(2521).then(n.bind(n,44135)),"@site/blog/openlineage-spark/index.mdx?truncated=true",44135],"8eafd9fa":[()=>n.e(2904).then(n.bind(n,8589)),"@site/docs/development/developing/java/troubleshooting/logging.md",8589],"8eb4e46b":[()=>n.e(1).then(n.t.bind(n,82638,19)),"~blog/default/blog-page-2-677.json",82638],"8fcef176":[()=>n.e(8774).then(n.bind(n,21026)),"@site/docs/integrations/spark/configuration/spark_conf.md",21026],"91f859fb":[()=>n.e(8620).then(n.bind(n,14970)),"@site/docs/releases/0_27_1.md",14970],"91f888ae":[()=>n.e(6637).then(n.bind(n,7753)),"@site/docs/development/developing/python/tests/dagster.md",7753],"925287fb":[()=>n.e(6743).then(n.bind(n,27061)),"@site/docs/spec/facets/job-facets/source-code-location.md",27061],"92999a1c":[()=>n.e(8442).then(n.t.bind(n,15310,19)),"~blog/default/blog-page-3-fd4.json",15310],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],94643076:[()=>n.e(4552).then(n.bind(n,33007)),"@site/docs/releases/0_19_2.md",33007],"94da0c2c":[()=>Promise.all([n.e(532),n.e(8558)]).then(n.bind(n,78334)),"@site/docs/integrations/spark/installation.md",78334],"958517a4":[()=>n.e(3499).then(n.bind(n,20919)),"@site/docs/integrations/airflow/extractors/extractor-testing.md",20919],"9589659f":[()=>n.e(2478).then(n.bind(n,51961)),"@site/docs/spec/facets/custom-facets.md",51961],"964159e7":[()=>n.e(1247).then(n.bind(n,72458)),"@site/blog/kafka-summit-talk/index.mdx",72458],"9913dd47":[()=>n.e(9565).then(n.bind(n,74293)),"@site/docs/releases/0_28_0.md",74293],"9a6fc5bf":[()=>n.e(1218).then(n.bind(n,15949)),"@site/docs/integrations/airflow/manual.md",15949],"9c83f7e5":[()=>n.e(2132).then(n.bind(n,28306)),"@site/docs/releases/1_3_1.md",28306],"9d22031a":[()=>n.e(9137).then(n.bind(n,16232)),"@site/docs/releases/0_8_2.md",16232],"9d459e05":[()=>n.e(272).then(n.bind(n,86833)),"@site/docs/spec/facets/dataset-facets/data_source.md",86833],"9e4087bc":[()=>n.e(3608).then(n.bind(n,63169)),"@theme/BlogArchivePage",63169],"9f7536c3":[()=>n.e(1872).then(n.bind(n,66027)),"@site/docs/integrations/spark/testing.md",66027],a09bde1d:[()=>n.e(4500).then(n.bind(n,12890)),"@site/blog/openlineage-at-northwestern-mutual/index.mdx",12890],a0bb7fd0:[()=>n.e(6286).then(n.bind(n,78716)),"@site/docs/spec/facets/dataset-facets/dataset-facets.md",78716],a22c12b1:[()=>n.e(2169).then(n.bind(n,79207)),"@site/docs/spec/facets/run-facets/error_message.md",79207],a399695a:[()=>n.e(4873).then(n.bind(n,56296)),"@site/docs/spec/facets/dataset-facets/schema.md",56296],a444bc12:[()=>n.e(4354).then(n.bind(n,88229)),"@site/blog/1.0-release/index.mdx",88229],a59244bd:[()=>n.e(4382).then(n.bind(n,77482)),"@site/blog/nyc-collibra-meetup/index.mdx?truncated=true",77482],a67243ef:[()=>n.e(3621).then(n.bind(n,28267)),"@site/docs/releases/0_9_0.md",28267],a6937a09:[()=>n.e(6945).then(n.bind(n,10018)),"@site/blog/static-lineage/index.mdx?truncated=true",10018],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(6915),n.e(412),n.e(3089)]).then(n.bind(n,93269)),"@theme/BlogListPage",93269],a6fce157:[()=>n.e(4180).then(n.bind(n,96783)),"@site/docs/integrations/airflow/usage.md",96783],a73a1e66:[()=>n.e(6815).then(n.bind(n,8797)),"@site/docs/integrations/airflow/job-hierarchy.md",8797],a7434565:[()=>n.e(7645).then(n.t.bind(n,15745,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],abf3c9cd:[()=>n.e(9971).then(n.bind(n,74697)),"@site/docs/releases/1_9_1.md",74697],acdd20f8:[()=>n.e(7805).then(n.bind(n,91827)),"@site/blog/nyc-meetup/index.mdx?truncated=true",91827],acfdc4dc:[()=>n.e(908).then(n.bind(n,44909)),"@site/docs/integrations/spark/quickstart/quickstart_glue.md",44909],ad6cb19d:[()=>n.e(5626).then(n.bind(n,68707)),"@site/blog/explore-lineage-api/index.mdx",68707],ae2727e0:[()=>Promise.all([n.e(532),n.e(5828)]).then(n.bind(n,3058)),"@site/docs/integrations/flink.md",3058],b0702ffb:[()=>n.e(5301).then(n.bind(n,71668)),"@site/docs/releases/1_6_2.md",71668],b1d37148:[()=>n.e(6999).then(n.bind(n,71567)),"@site/docs/releases/1_13_1.md",71567],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b343bdc7:[()=>n.e(2239).then(n.bind(n,52817)),"@site/docs/releases/1_15_0.md",52817],b381c206:[()=>n.e(7456).then(n.bind(n,28531)),"@site/docs/releases/0_3_0.md",28531],b3a51fab:[()=>n.e(5882).then(n.bind(n,50881)),"@site/docs/integrations/spark/extending.md",50881],b468026e:[()=>n.e(4701).then(n.bind(n,86400)),"@site/docs/releases/1_7_0.md",86400],b5142437:[()=>n.e(738).then(n.bind(n,62928)),"@site/docs/releases/1_4_1.md",62928],b9a20752:[()=>n.e(3858).then(n.bind(n,24617)),"@site/docs/spec/facets/dataset-facets/data_quality_assertions.md",24617],bb1f3645:[()=>n.e(7111).then(n.bind(n,57514)),"@site/docs/releases/1_19_0.md",57514],bb78c458:[()=>n.e(4715).then(n.bind(n,28906)),"@site/docs/development/developing/spark/built_in_lineage.md",28906],becab98d:[()=>n.e(5625).then(n.bind(n,95017)),"@site/blog/airflow-provider/index.mdx?truncated=true",95017],bedd5128:[()=>n.e(2902).then(n.bind(n,91560)),"@site/blog/0.1-release/index.mdx?truncated=true",91560],bf37aa80:[()=>n.e(9462).then(n.bind(n,24635)),"@site/blog/backfilling-airflow-dags-using-marquez/index.mdx?truncated=true",24635],bfdd9e7a:[()=>n.e(8953).then(n.bind(n,61281)),"@site/blog/airflow-summit-meetup/index.mdx",61281],c0019724:[()=>n.e(6264).then(n.bind(n,75639)),"@site/docs/integrations/spark/quickstart/quickstart_local.md",75639],c0730a5e:[()=>n.e(5752).then(n.bind(n,71502)),"@site/docs/releases/0_4_0.md",71502],c0e43e08:[()=>n.e(8339).then(n.bind(n,69669)),"@site/docs/development/developing/python/tests/client.md",69669],c377a04b:[()=>n.e(6971).then(n.bind(n,21269)),"@site/docs/index.md",21269],c37cb0ad:[()=>n.e(5928).then(n.bind(n,5313)),"@site/blog/airflow-summit-meetup/index.mdx?truncated=true",5313],c37f09e5:[()=>n.e(8513).then(n.bind(n,39685)),"@site/blog/boston-collibra-meetup/index.mdx",39685],c4858e42:[()=>n.e(8341).then(n.bind(n,77424)),"@site/docs/releases/0_11_0.md",77424],c497b24a:[()=>n.e(7895).then(n.bind(n,95187)),"@site/src/pages/survey/index.tsx",95187],c53ae061:[()=>n.e(8025).then(n.t.bind(n,16622,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-blog/blogs/plugin-route-context-module-100.json",16622],c67a2448:[()=>n.e(4164).then(n.bind(n,46685)),"@site/docs/releases/0_5_1.md",46685],c71910a9:[()=>n.e(9950).then(n.bind(n,57615)),"@site/blog/manta-integration/index.mdx",57615],c87435ec:[()=>n.e(646).then(n.bind(n,12056)),"@site/blog/operators-and-extractors-technical-deep-dive/index.mdx",12056],c98e8026:[()=>n.e(9707).then(n.bind(n,97693)),"@site/docs/releases/1_12_0.md",97693],cbdc3dce:[()=>n.e(4528).then(n.bind(n,55842)),"@site/docs/spec/naming.md",55842],cc5e73a4:[()=>n.e(2857).then(n.bind(n,56160)),"@site/blog/openlineage-at-northwestern-mutual/index.mdx?truncated=true",56160],ccc49370:[()=>Promise.all([n.e(532),n.e(6915),n.e(412),n.e(6103)]).then(n.bind(n,65203)),"@theme/BlogPostPage",65203],cdeb23ce:[()=>n.e(2198).then(n.bind(n,87733)),"@site/blog/openlineage-egeria/index.mdx?truncated=true",87733],ce346493:[()=>n.e(1885).then(n.bind(n,31054)),"@site/docs/guides/about.md",31054],cfb06846:[()=>n.e(9939).then(n.bind(n,82100)),"@site/blog/backfilling-airflow-dags-using-marquez/index.mdx",82100],d20ca4f4:[()=>n.e(5560).then(n.bind(n,71713)),"@site/docs/releases/0_29_2.md",71713],d21f7217:[()=>n.e(8040).then(n.bind(n,92625)),"@site/docs/spec/facets/job-facets/job-facets.md",92625],d23933ee:[()=>n.e(8749).then(n.bind(n,65940)),"@site/docs/client/python.md",65940],d2e2ca7b:[()=>n.e(3450).then(n.bind(n,69055)),"@site/docs/client/java/java.md",69055],d61bde3c:[()=>n.e(8162).then(n.bind(n,20244)),"@site/blog/incubation-stage-lfai/index.mdx",20244],d88a28b2:[()=>n.e(5553).then(n.bind(n,73041)),"@site/docs/releases/0_25_0.md",73041],d9ddb5f2:[()=>n.e(6733).then(n.bind(n,46291)),"@site/docs/releases/0_6_2.md",46291],db345165:[()=>n.e(2040).then(n.bind(n,96981)),"@site/blog/manta-integration/index.mdx?truncated=true",96981],dc2307fe:[()=>n.e(6419).then(n.bind(n,92530)),"@site/docs/releases/0_20_4.md",92530],dce68055:[()=>n.e(1441).then(n.bind(n,6024)),"@site/blog/static-lineage/index.mdx",6024],dd3644e3:[()=>n.e(8220).then(n.bind(n,36882)),"@site/docs/spec/facets/dataset-facets/symlinks.md",36882],dd5843a7:[()=>n.e(8697).then(n.bind(n,91849)),"@site/docs/development/developing/java/setup.md",91849],dfe8d115:[()=>n.e(7129).then(n.bind(n,16715)),"@site/docs/guides/airflow-quickstart.md",16715],e05eb158:[()=>n.e(7123).then(n.bind(n,92267)),"@site/docs/releases/0_3_1.md",92267],e0bb4c7f:[()=>Promise.all([n.e(532),n.e(4005)]).then(n.bind(n,11560)),"@site/docs/client/java/configuration.md",11560],e15e9a4e:[()=>n.e(2383).then(n.bind(n,39697)),"@site/docs/spec/facets/run-facets/parent_run.md",39697],e3741903:[()=>n.e(8494).then(n.bind(n,42395)),"@site/docs/spec/facets/run-facets/external_query.md",42395],e3fb3a5b:[()=>n.e(6662).then(n.bind(n,83515)),"@site/docs/releases/0_17_0.md",83515],e41558a5:[()=>n.e(3692).then(n.bind(n,78508)),"@site/docs/spec/facets/job-facets/sql.md",78508],e5bcf28c:[()=>n.e(8842).then(n.bind(n,68074)),"@site/docs/spec/facets/dataset-facets/storage.md",68074],e5fbe168:[()=>n.e(3338).then(n.bind(n,55465)),"@site/docs/integrations/spark/spark.md",55465],e61648a5:[()=>n.e(8737).then(n.bind(n,20253)),"@site/docs/integrations/airflow/airflow.md",20253],e6463465:[()=>n.e(2359).then(n.bind(n,89109)),"@site/docs/spec/facets/dataset-facets/output-dataset-facets/output_statistics.md",89109],e697c0c5:[()=>n.e(1042).then(n.bind(n,40611)),"@site/src/pages/meetings/index.mdx",40611],e70fe276:[()=>n.e(2156).then(n.bind(n,34227)),"@site/docs/spec/facets/dataset-facets/ownership.md",34227],e71be60a:[()=>n.e(6).then(n.bind(n,66769)),"@site/blog/joining-lfai/index.mdx",66769],e75408b7:[()=>n.e(7167).then(n.bind(n,24011)),"@site/docs/spec/facets/dataset-facets/lifecycle_state_change.md",24011],e98cfbc4:[()=>n.e(6892).then(n.bind(n,99026)),"@site/docs/integrations/spark/quickstart/quickstart_databricks.md",99026],e9c44888:[()=>n.e(7914).then(n.bind(n,55114)),"@site/docs/integrations/about.md",55114],e9d55ea1:[()=>n.e(3764).then(n.bind(n,21041)),"@site/blog/openlineage-snowflake/index.mdx?truncated=true",21041],eb24a073:[()=>n.e(3765).then(n.bind(n,91044)),"@site/docs/development/developing/spark/setup.md",91044],ebe9e44f:[()=>n.e(1178).then(n.bind(n,65552)),"@site/docs/releases/0_13_1.md",65552],ed4965bb:[()=>n.e(4285).then(n.bind(n,9652)),"@site/docs/releases/0_14_1.md",9652],ed97c71c:[()=>n.e(6027).then(n.bind(n,96171)),"@site/blog/ecosystem-survey/index.mdx",96171],ef178ebd:[()=>n.e(4640).then(n.bind(n,71678)),"@site/docs/releases/0_22_0.md",71678],f0d80e33:[()=>n.e(7086).then(n.bind(n,72078)),"@site/blog/data-lineage-meetup/index.mdx?truncated=true",72078],f0e9afc1:[()=>n.e(29).then(n.bind(n,92799)),"@site/docs/integrations/spark/job-hierarchy.md",92799],f124a1c7:[()=>n.e(7482).then(n.bind(n,69006)),"@site/docs/releases/0_18_0.md",69006],f1b8d540:[()=>Promise.all([n.e(8834),n.e(4329)]).then(n.bind(n,94468)),"@site/src/pages/ecosystem.tsx",94468],f2bce386:[()=>n.e(2408).then(n.bind(n,43731)),"@site/blog/airflow-provider/index.mdx",43731],f2ef6d60:[()=>n.e(7077).then(n.bind(n,23366)),"@site/docs/releases/0_27_2.md",23366],f3454ee9:[()=>n.e(5335).then(n.bind(n,85696)),"@site/blog/data-agility-day/index.mdx?truncated=true",85696],f4c29d23:[()=>n.e(3881).then(n.bind(n,93836)),"@site/blog/london-confluent-meetup/index.mdx",93836],f4dc26b5:[()=>n.e(5190).then(n.bind(n,39706)),"@site/docs/releases/1_18_0.md",39706],f74a5af1:[()=>n.e(2738).then(n.bind(n,13707)),"@site/docs/integrations/airflow/extractors/custom-extractors.md",13707],f96329e8:[()=>n.e(5798).then(n.bind(n,87281)),"@site/blog/python-client/index.mdx",87281],f99f49ec:[()=>n.e(4548).then(n.bind(n,73963)),"@site/docs/spec/facets/dataset-facets/version_facet.md",73963],fa4b0ab0:[()=>n.e(4299).then(n.bind(n,86953)),"@site/docs/integrations/airflow/older.md",86953],fc6740d9:[()=>n.e(6300).then(n.bind(n,26960)),"@site/blog/warsaw-meetup/index.mdx",26960],fda1db8d:[()=>n.e(4671).then(n.bind(n,27540)),"@site/blog/nyc-meetup/index.mdx",27540],fe54fcaf:[()=>n.e(323).then(n.bind(n,37849)),"@site/docs/releases/0_12_0.md",37849],ff83ce57:[()=>n.e(2085).then(n.bind(n,76999)),"@site/blog/sf-meetup-2/index.mdx",76999]};function c(e){let{error:t,retry:n,pastDelay:a}=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"))):a?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(99670),d=n(30226);function p(e,t){if("*"===e)return i()({loading:c,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 o=s[`${e}-${t}`],p={},f=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)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 a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{o=o[e]})),o[s[s.length-1]]=a}));const s=i.__comp;delete i.__comp;const l=i.__context;return delete i.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,a.Z)({},i,n)))}})}const f=[{path:"/blog",component:p("/blog","455"),exact:!0},{path:"/blog/0.1-release",component:p("/blog/0.1-release","ffb"),exact:!0},{path:"/blog/1.0-release",component:p("/blog/1.0-release","b76"),exact:!0},{path:"/blog/airflow-provider",component:p("/blog/airflow-provider","086"),exact:!0},{path:"/blog/airflow-summit-meetup",component:p("/blog/airflow-summit-meetup","2af"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","d5c"),exact:!0},{path:"/blog/backfilling-airflow-dags-using-marquez",component:p("/blog/backfilling-airflow-dags-using-marquez","8b2"),exact:!0},{path:"/blog/boston-collibra-meetup",component:p("/blog/boston-collibra-meetup","d1b"),exact:!0},{path:"/blog/column-lineage",component:p("/blog/column-lineage","b4b"),exact:!0},{path:"/blog/data-agility-day",component:p("/blog/data-agility-day","e79"),exact:!0},{path:"/blog/data-council-meetup",component:p("/blog/data-council-meetup","ddd"),exact:!0},{path:"/blog/data-lineage-meetup",component:p("/blog/data-lineage-meetup","bc5"),exact:!0},{path:"/blog/dataquality_expectations_facet",component:p("/blog/dataquality_expectations_facet","518"),exact:!0},{path:"/blog/dbt-with-marquez",component:p("/blog/dbt-with-marquez","eac"),exact:!0},{path:"/blog/ecosystem-survey",component:p("/blog/ecosystem-survey","1be"),exact:!0},{path:"/blog/explore-lineage-api",component:p("/blog/explore-lineage-api","9d3"),exact:!0},{path:"/blog/extending-with-facets",component:p("/blog/extending-with-facets","8c6"),exact:!0},{path:"/blog/extractors",component:p("/blog/extractors","363"),exact:!0},{path:"/blog/incubation-stage-lfai",component:p("/blog/incubation-stage-lfai","7cc"),exact:!0},{path:"/blog/joining-lfai",component:p("/blog/joining-lfai","c6b"),exact:!0},{path:"/blog/kafka-summit-talk",component:p("/blog/kafka-summit-talk","709"),exact:!0},{path:"/blog/london-confluent-meetup",component:p("/blog/london-confluent-meetup","e23"),exact:!0},{path:"/blog/manta-integration",component:p("/blog/manta-integration","26a"),exact:!0},{path:"/blog/metaphor-integration",component:p("/blog/metaphor-integration","844"),exact:!0},{path:"/blog/nyc-collibra-meetup",component:p("/blog/nyc-collibra-meetup","c4c"),exact:!0},{path:"/blog/nyc-meetup",component:p("/blog/nyc-meetup","a04"),exact:!0},{path:"/blog/openlineage-at-northwestern-mutual",component:p("/blog/openlineage-at-northwestern-mutual","1fa"),exact:!0},{path:"/blog/openlineage-egeria",component:p("/blog/openlineage-egeria","9aa"),exact:!0},{path:"/blog/openlineage-microsoft-purview",component:p("/blog/openlineage-microsoft-purview","3cc"),exact:!0},{path:"/blog/openlineage-snowflake",component:p("/blog/openlineage-snowflake","e93"),exact:!0},{path:"/blog/openlineage-spark",component:p("/blog/openlineage-spark","2cf"),exact:!0},{path:"/blog/openlineage-takes-inspiration-from-opentelemetry",component:p("/blog/openlineage-takes-inspiration-from-opentelemetry","47a"),exact:!0},{path:"/blog/operators-and-extractors-technical-deep-dive",component:p("/blog/operators-and-extractors-technical-deep-dive","c19"),exact:!0},{path:"/blog/page/2",component:p("/blog/page/2","055"),exact:!0},{path:"/blog/page/3",component:p("/blog/page/3","dae"),exact:!0},{path:"/blog/page/4",component:p("/blog/page/4","d69"),exact:!0},{path:"/blog/python-client",component:p("/blog/python-client","31a"),exact:!0},{path:"/blog/sf-meetup",component:p("/blog/sf-meetup","fae"),exact:!0},{path:"/blog/sf-meetup-2",component:p("/blog/sf-meetup-2","a80"),exact:!0},{path:"/blog/static-lineage",component:p("/blog/static-lineage","e52"),exact:!0},{path:"/blog/warsaw-meetup",component:p("/blog/warsaw-meetup","972"),exact:!0},{path:"/blog/whats-in-a-namespace",component:p("/blog/whats-in-a-namespace","cf9"),exact:!0},{path:"/blog/why-open-standard",component:p("/blog/why-open-standard","52d"),exact:!0},{path:"/community/",component:p("/community/","661"),exact:!0},{path:"/ecosystem",component:p("/ecosystem","c87"),exact:!0},{path:"/getting-started/",component:p("/getting-started/","3fb"),exact:!0},{path:"/meetings/",component:p("/meetings/","a13"),exact:!0},{path:"/news-landing/",component:p("/news-landing/","1d3"),exact:!0},{path:"/resources/",component:p("/resources/","b1b"),exact:!0},{path:"/survey/",component:p("/survey/","2cb"),exact:!0},{path:"/docs",component:p("/docs","66f"),routes:[{path:"/docs/",component:p("/docs/","a8c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/client/java/",component:p("/docs/client/java/","8f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/client/java/configuration",component:p("/docs/client/java/configuration","787"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/client/java/usage",component:p("/docs/client/java/usage","830"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/client/python",component:p("/docs/client/python","8fa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/",component:p("/docs/development/developing/","9a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/java/adding_metrics",component:p("/docs/development/developing/java/adding_metrics","ab7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/java/setup",component:p("/docs/development/developing/java/setup","226"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/java/troubleshooting/logging",component:p("/docs/development/developing/java/troubleshooting/logging","5da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/api-reference/openlineage.client",component:p("/docs/development/developing/python/api-reference/openlineage.client","e6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/setup",component:p("/docs/development/developing/python/setup","fb0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/tests/airflow",component:p("/docs/development/developing/python/tests/airflow","797"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/tests/client",component:p("/docs/development/developing/python/tests/client","3fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/tests/common",component:p("/docs/development/developing/python/tests/common","608"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/tests/dagster",component:p("/docs/development/developing/python/tests/dagster","0e2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/python/troubleshooting/logging",component:p("/docs/development/developing/python/troubleshooting/logging","3b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/spark/built_in_lineage",component:p("/docs/development/developing/spark/built_in_lineage","3a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/developing/spark/setup",component:p("/docs/development/developing/spark/setup","b60"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/examples",component:p("/docs/development/examples","f28"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development/ol-proxy",component:p("/docs/development/ol-proxy","f80"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/faq",component:p("/docs/faq","e79"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/about",component:p("/docs/guides/about","cb2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/airflow_proxy",component:p("/docs/guides/airflow_proxy","493"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/airflow-backfill-dags",component:p("/docs/guides/airflow-backfill-dags","ff5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/airflow-quickstart",component:p("/docs/guides/airflow-quickstart","59c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/dbt",component:p("/docs/guides/dbt","697"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/facets",component:p("/docs/guides/facets","f07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guides/spark",component:p("/docs/guides/spark","095"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/about",component:p("/docs/integrations/about","534"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/",component:p("/docs/integrations/airflow/","37c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/default-extractors",component:p("/docs/integrations/airflow/default-extractors","dc6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/extractors/custom-extractors",component:p("/docs/integrations/airflow/extractors/custom-extractors","52e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/extractors/extractor-testing",component:p("/docs/integrations/airflow/extractors/extractor-testing","928"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/job-hierarchy",component:p("/docs/integrations/airflow/job-hierarchy","669"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/manual",component:p("/docs/integrations/airflow/manual","abc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/older",component:p("/docs/integrations/airflow/older","005"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/preflight-check-dag",component:p("/docs/integrations/airflow/preflight-check-dag","235"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/airflow/usage",component:p("/docs/integrations/airflow/usage","4d9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/dbt",component:p("/docs/integrations/dbt","82f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/flink",component:p("/docs/integrations/flink","147"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/great-expectations",component:p("/docs/integrations/great-expectations","074"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/",component:p("/docs/integrations/spark/","7f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/configuration/airflow",component:p("/docs/integrations/spark/configuration/airflow","3b3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/configuration/circuit_breaker",component:p("/docs/integrations/spark/configuration/circuit_breaker","ce3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/configuration/spark_conf",component:p("/docs/integrations/spark/configuration/spark_conf","16d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/configuration/transport",component:p("/docs/integrations/spark/configuration/transport","932"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/configuration/usage",component:p("/docs/integrations/spark/configuration/usage","4d6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/extending",component:p("/docs/integrations/spark/extending","0e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/installation",component:p("/docs/integrations/spark/installation","dba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/job-hierarchy",component:p("/docs/integrations/spark/job-hierarchy","e4a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/main_concept",component:p("/docs/integrations/spark/main_concept","ceb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/metrics",component:p("/docs/integrations/spark/metrics","1a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/quickstart/quickstart_databricks",component:p("/docs/integrations/spark/quickstart/quickstart_databricks","f3a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/quickstart/quickstart_glue",component:p("/docs/integrations/spark/quickstart/quickstart_glue","c0b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/quickstart/quickstart_local",component:p("/docs/integrations/spark/quickstart/quickstart_local","8cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/spark_column_lineage",component:p("/docs/integrations/spark/spark_column_lineage","6a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/spark/testing",component:p("/docs/integrations/spark/testing","2df"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/integrations/trino",component:p("/docs/integrations/trino","b51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_1_0",component:p("/docs/releases/0_1_0","925"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_10_0",component:p("/docs/releases/0_10_0","885"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_11_0",component:p("/docs/releases/0_11_0","8ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_12_0",component:p("/docs/releases/0_12_0","ddf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_13_0",component:p("/docs/releases/0_13_0","f3a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_13_1",component:p("/docs/releases/0_13_1","f5e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_14_0",component:p("/docs/releases/0_14_0","5cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_14_1",component:p("/docs/releases/0_14_1","6e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_15_1",component:p("/docs/releases/0_15_1","356"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_16_1",component:p("/docs/releases/0_16_1","3f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_17_0",component:p("/docs/releases/0_17_0","630"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_18_0",component:p("/docs/releases/0_18_0","d67"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_19_2",component:p("/docs/releases/0_19_2","caa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_2_0",component:p("/docs/releases/0_2_0","a2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_2_1",component:p("/docs/releases/0_2_1","754"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_2_2",component:p("/docs/releases/0_2_2","c48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_2_3",component:p("/docs/releases/0_2_3","d9c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_20_4",component:p("/docs/releases/0_20_4","f21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_20_6",component:p("/docs/releases/0_20_6","50a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_21_1",component:p("/docs/releases/0_21_1","ebb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_22_0",component:p("/docs/releases/0_22_0","04c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_23_0",component:p("/docs/releases/0_23_0","262"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_24_0",component:p("/docs/releases/0_24_0","6f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_25_0",component:p("/docs/releases/0_25_0","dd8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_26_0",component:p("/docs/releases/0_26_0","da5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_27_1",component:p("/docs/releases/0_27_1","c93"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_27_2",component:p("/docs/releases/0_27_2","892"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_28_0",component:p("/docs/releases/0_28_0","08c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_29_2",component:p("/docs/releases/0_29_2","d33"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_3_0",component:p("/docs/releases/0_3_0","ce2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_3_1",component:p("/docs/releases/0_3_1","ca7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_30_1",component:p("/docs/releases/0_30_1","8de"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_4_0",component:p("/docs/releases/0_4_0","ecd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_5_1",component:p("/docs/releases/0_5_1","5a5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_5_2",component:p("/docs/releases/0_5_2","c24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_6_0",component:p("/docs/releases/0_6_0","913"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_6_1",component:p("/docs/releases/0_6_1","a36"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_6_2",component:p("/docs/releases/0_6_2","ebd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_7_1",component:p("/docs/releases/0_7_1","4a6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_8_1",component:p("/docs/releases/0_8_1","4ac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_8_2",component:p("/docs/releases/0_8_2","54c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/0_9_0",component:p("/docs/releases/0_9_0","e1d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_0_0",component:p("/docs/releases/1_0_0","a02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_1_0",component:p("/docs/releases/1_1_0","9f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_10_2",component:p("/docs/releases/1_10_2","eff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_11_3",component:p("/docs/releases/1_11_3","21a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_12_0",component:p("/docs/releases/1_12_0","436"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_13_1",component:p("/docs/releases/1_13_1","651"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_14_0",component:p("/docs/releases/1_14_0","6c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_15_0",component:p("/docs/releases/1_15_0","2ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_16_0",component:p("/docs/releases/1_16_0","776"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_17_1",component:p("/docs/releases/1_17_1","670"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_18_0",component:p("/docs/releases/1_18_0","b05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_19_0",component:p("/docs/releases/1_19_0","03f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_2_2",component:p("/docs/releases/1_2_2","60a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_3_1",component:p("/docs/releases/1_3_1","354"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_4_1",component:p("/docs/releases/1_4_1","207"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_5_0",component:p("/docs/releases/1_5_0","1f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_6_2",component:p("/docs/releases/1_6_2","555"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_7_0",component:p("/docs/releases/1_7_0","9f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_8_0",component:p("/docs/releases/1_8_0","2d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/releases/1_9_1",component:p("/docs/releases/1_9_1","088"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/",component:p("/docs/spec/facets/","135"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/custom-facets",component:p("/docs/spec/facets/custom-facets","c21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/",component:p("/docs/spec/facets/dataset-facets/","07c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/column_lineage_facet",component:p("/docs/spec/facets/dataset-facets/column_lineage_facet","0a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/data_quality_assertions",component:p("/docs/spec/facets/dataset-facets/data_quality_assertions","c6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/data_source",component:p("/docs/spec/facets/dataset-facets/data_source","2f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/input-dataset-facets/data_quality_metrics",component:p("/docs/spec/facets/dataset-facets/input-dataset-facets/data_quality_metrics","6f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/lifecycle_state_change",component:p("/docs/spec/facets/dataset-facets/lifecycle_state_change","2d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/output-dataset-facets/output_statistics",component:p("/docs/spec/facets/dataset-facets/output-dataset-facets/output_statistics","d89"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/ownership",component:p("/docs/spec/facets/dataset-facets/ownership","598"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/schema",component:p("/docs/spec/facets/dataset-facets/schema","f5f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/storage",component:p("/docs/spec/facets/dataset-facets/storage","acc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/symlinks",component:p("/docs/spec/facets/dataset-facets/symlinks","383"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/dataset-facets/version_facet",component:p("/docs/spec/facets/dataset-facets/version_facet","58b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/",component:p("/docs/spec/facets/job-facets/","a8f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/documentation",component:p("/docs/spec/facets/job-facets/documentation","ca3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/job-type",component:p("/docs/spec/facets/job-facets/job-type","eab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/ownership",component:p("/docs/spec/facets/job-facets/ownership","95c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/source-code",component:p("/docs/spec/facets/job-facets/source-code","a63"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/source-code-location",component:p("/docs/spec/facets/job-facets/source-code-location","286"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/job-facets/sql",component:p("/docs/spec/facets/job-facets/sql","40e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/run-facets/",component:p("/docs/spec/facets/run-facets/","612"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/run-facets/error_message",component:p("/docs/spec/facets/run-facets/error_message","0b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/run-facets/external_query",component:p("/docs/spec/facets/run-facets/external_query","e37"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/run-facets/nominal_time",component:p("/docs/spec/facets/run-facets/nominal_time","f21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/facets/run-facets/parent_run",component:p("/docs/spec/facets/run-facets/parent_run","b03"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/job-hierarchy",component:p("/docs/spec/job-hierarchy","6cc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/naming",component:p("/docs/spec/naming","1c3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/object-model",component:p("/docs/spec/object-model","010"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/producers",component:p("/docs/spec/producers","56b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/run-cycle",component:p("/docs/spec/run-cycle","de3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spec/schemas",component:p("/docs/spec/schemas","752"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:p("/","f53"),exact:!0},{path:"*",component:p("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(67294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},49383:(e,t,n)=>{"use strict";var r=n(67294),a=n(73935),o=n(73727),i=n(70405),s=n(10412);const l=[n(56657),n(32497),n(3310),n(18320),n(52295)];var c=n(723),u=n(76775),d=n(18790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(87462),m=n(35742),g=n(52263),h=n(44996),b=n(86668),v=n(1944),y=n(94711),_=n(19727),w=n(43320),k=n(90197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,u.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function E(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:_.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.Z,{tag:w.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var L=n(98934),A=n(58940);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r(t.default?.[e]??t[e])?.(...n)));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1));document.getElementById(e)?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(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(N,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const I=O,D="docusaurus-base-url-issue-banner-container",j="docusaurus-base-url-issue-banner-suggestion-container",M="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${M}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${M}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\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[M]=!1}),[]),r.createElement(r.Fragment,null,!s.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,F(e))),r.createElement("div",{id:D}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(B,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:s,direction:l}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),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 q=n(44763);function $(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(q.Z,null,r.createElement(A.M,null,r.createElement(L.t,null,r.createElement(p,null,r.createElement(U,null),r.createElement(E,null),r.createElement(z,null),r.createElement(I,{location:T(t)},e)))))}var H=n(16887);const G=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();(document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode)?.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 Z=n(99670);const V=new Set,W=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,K={prefetch(e){if(!(e=>!Y()&&!W.has(e)&&!V.has(e))(e))return!1;V.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(H).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Z.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!W.has(e))(e)&&(W.add(e),P(e))},X=Object.freeze(K);if(s.Z.canUseDOM){window.docusaurus=X;const e=a.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement($,null))),document.getElementById("__docusaurus"))}))}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(67294),a=n(36809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-QMTWMLMX4M"],"anonymizeIP":true,"id":"default"}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1723026114857.json","lunrIndex":"lunr-index-1723026114857.json"}}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"index","docs":[{"id":"client/java/configuration","path":"/docs/client/java/configuration","sidebar":"tutorialSidebar"},{"id":"client/java/java","path":"/docs/client/java/","sidebar":"tutorialSidebar"},{"id":"client/java/usage","path":"/docs/client/java/usage","sidebar":"tutorialSidebar"},{"id":"client/python","path":"/docs/client/python","sidebar":"tutorialSidebar"},{"id":"development/developing/developing","path":"/docs/development/developing/","sidebar":"tutorialSidebar"},{"id":"development/developing/java/adding_metrics","path":"/docs/development/developing/java/adding_metrics","sidebar":"tutorialSidebar"},{"id":"development/developing/java/setup","path":"/docs/development/developing/java/setup","sidebar":"tutorialSidebar"},{"id":"development/developing/java/troubleshooting/logging","path":"/docs/development/developing/java/troubleshooting/logging","sidebar":"tutorialSidebar"},{"id":"development/developing/python/api-reference/openlineage.client","path":"/docs/development/developing/python/api-reference/openlineage.client","sidebar":"tutorialSidebar"},{"id":"development/developing/python/setup","path":"/docs/development/developing/python/setup","sidebar":"tutorialSidebar"},{"id":"development/developing/python/tests/airflow","path":"/docs/development/developing/python/tests/airflow","sidebar":"tutorialSidebar"},{"id":"development/developing/python/tests/client","path":"/docs/development/developing/python/tests/client","sidebar":"tutorialSidebar"},{"id":"development/developing/python/tests/common","path":"/docs/development/developing/python/tests/common","sidebar":"tutorialSidebar"},{"id":"development/developing/python/tests/dagster","path":"/docs/development/developing/python/tests/dagster","sidebar":"tutorialSidebar"},{"id":"development/developing/python/troubleshooting/logging","path":"/docs/development/developing/python/troubleshooting/logging","sidebar":"tutorialSidebar"},{"id":"development/developing/spark/built_in_lineage","path":"/docs/development/developing/spark/built_in_lineage","sidebar":"tutorialSidebar"},{"id":"development/developing/spark/setup","path":"/docs/development/developing/spark/setup","sidebar":"tutorialSidebar"},{"id":"development/examples","path":"/docs/development/examples","sidebar":"tutorialSidebar"},{"id":"development/ol-proxy","path":"/docs/development/ol-proxy","sidebar":"tutorialSidebar"},{"id":"faq","path":"/docs/faq","sidebar":"tutorialSidebar"},{"id":"guides/about","path":"/docs/guides/about","sidebar":"tutorialSidebar"},{"id":"guides/airflow_proxy","path":"/docs/guides/airflow_proxy","sidebar":"tutorialSidebar"},{"id":"guides/airflow-backfill-dags","path":"/docs/guides/airflow-backfill-dags","sidebar":"tutorialSidebar"},{"id":"guides/airflow-quickstart","path":"/docs/guides/airflow-quickstart","sidebar":"tutorialSidebar"},{"id":"guides/dbt","path":"/docs/guides/dbt","sidebar":"tutorialSidebar"},{"id":"guides/facets","path":"/docs/guides/facets","sidebar":"tutorialSidebar"},{"id":"guides/spark","path":"/docs/guides/spark","sidebar":"tutorialSidebar"},{"id":"index","path":"/docs/","sidebar":"tutorialSidebar"},{"id":"integrations/about","path":"/docs/integrations/about","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/airflow","path":"/docs/integrations/airflow/","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/default-extractors","path":"/docs/integrations/airflow/default-extractors","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/extractors/custom-extractors","path":"/docs/integrations/airflow/extractors/custom-extractors","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/extractors/extractor-testing","path":"/docs/integrations/airflow/extractors/extractor-testing","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/job-hierarchy","path":"/docs/integrations/airflow/job-hierarchy","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/manual","path":"/docs/integrations/airflow/manual","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/older","path":"/docs/integrations/airflow/older","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/preflight-check-dag","path":"/docs/integrations/airflow/preflight-check-dag","sidebar":"tutorialSidebar"},{"id":"integrations/airflow/usage","path":"/docs/integrations/airflow/usage","sidebar":"tutorialSidebar"},{"id":"integrations/dbt","path":"/docs/integrations/dbt","sidebar":"tutorialSidebar"},{"id":"integrations/flink","path":"/docs/integrations/flink","sidebar":"tutorialSidebar"},{"id":"integrations/great-expectations","path":"/docs/integrations/great-expectations","sidebar":"tutorialSidebar"},{"id":"integrations/spark/configuration/airflow","path":"/docs/integrations/spark/configuration/airflow","sidebar":"tutorialSidebar"},{"id":"integrations/spark/configuration/circuit_breaker","path":"/docs/integrations/spark/configuration/circuit_breaker","sidebar":"tutorialSidebar"},{"id":"integrations/spark/configuration/spark_conf","path":"/docs/integrations/spark/configuration/spark_conf","sidebar":"tutorialSidebar"},{"id":"integrations/spark/configuration/transport","path":"/docs/integrations/spark/configuration/transport","sidebar":"tutorialSidebar"},{"id":"integrations/spark/configuration/usage","path":"/docs/integrations/spark/configuration/usage","sidebar":"tutorialSidebar"},{"id":"integrations/spark/extending","path":"/docs/integrations/spark/extending","sidebar":"tutorialSidebar"},{"id":"integrations/spark/installation","path":"/docs/integrations/spark/installation","sidebar":"tutorialSidebar"},{"id":"integrations/spark/job-hierarchy","path":"/docs/integrations/spark/job-hierarchy","sidebar":"tutorialSidebar"},{"id":"integrations/spark/main_concept","path":"/docs/integrations/spark/main_concept","sidebar":"tutorialSidebar"},{"id":"integrations/spark/metrics","path":"/docs/integrations/spark/metrics","sidebar":"tutorialSidebar"},{"id":"integrations/spark/quickstart/quickstart_databricks","path":"/docs/integrations/spark/quickstart/quickstart_databricks","sidebar":"tutorialSidebar"},{"id":"integrations/spark/quickstart/quickstart_glue","path":"/docs/integrations/spark/quickstart/quickstart_glue","sidebar":"tutorialSidebar"},{"id":"integrations/spark/quickstart/quickstart_local","path":"/docs/integrations/spark/quickstart/quickstart_local","sidebar":"tutorialSidebar"},{"id":"integrations/spark/spark","path":"/docs/integrations/spark/","sidebar":"tutorialSidebar"},{"id":"integrations/spark/spark_column_lineage","path":"/docs/integrations/spark/spark_column_lineage","sidebar":"tutorialSidebar"},{"id":"integrations/spark/testing","path":"/docs/integrations/spark/testing","sidebar":"tutorialSidebar"},{"id":"integrations/trino","path":"/docs/integrations/trino","sidebar":"tutorialSidebar"},{"id":"releases/0_1_0","path":"/docs/releases/0_1_0","sidebar":"tutorialSidebar"},{"id":"releases/0_10_0","path":"/docs/releases/0_10_0","sidebar":"tutorialSidebar"},{"id":"releases/0_11_0","path":"/docs/releases/0_11_0","sidebar":"tutorialSidebar"},{"id":"releases/0_12_0","path":"/docs/releases/0_12_0","sidebar":"tutorialSidebar"},{"id":"releases/0_13_0","path":"/docs/releases/0_13_0","sidebar":"tutorialSidebar"},{"id":"releases/0_13_1","path":"/docs/releases/0_13_1","sidebar":"tutorialSidebar"},{"id":"releases/0_14_0","path":"/docs/releases/0_14_0","sidebar":"tutorialSidebar"},{"id":"releases/0_14_1","path":"/docs/releases/0_14_1","sidebar":"tutorialSidebar"},{"id":"releases/0_15_1","path":"/docs/releases/0_15_1","sidebar":"tutorialSidebar"},{"id":"releases/0_16_1","path":"/docs/releases/0_16_1","sidebar":"tutorialSidebar"},{"id":"releases/0_17_0","path":"/docs/releases/0_17_0","sidebar":"tutorialSidebar"},{"id":"releases/0_18_0","path":"/docs/releases/0_18_0","sidebar":"tutorialSidebar"},{"id":"releases/0_19_2","path":"/docs/releases/0_19_2","sidebar":"tutorialSidebar"},{"id":"releases/0_2_0","path":"/docs/releases/0_2_0","sidebar":"tutorialSidebar"},{"id":"releases/0_2_1","path":"/docs/releases/0_2_1","sidebar":"tutorialSidebar"},{"id":"releases/0_2_2","path":"/docs/releases/0_2_2","sidebar":"tutorialSidebar"},{"id":"releases/0_2_3","path":"/docs/releases/0_2_3","sidebar":"tutorialSidebar"},{"id":"releases/0_20_4","path":"/docs/releases/0_20_4","sidebar":"tutorialSidebar"},{"id":"releases/0_20_6","path":"/docs/releases/0_20_6","sidebar":"tutorialSidebar"},{"id":"releases/0_21_1","path":"/docs/releases/0_21_1","sidebar":"tutorialSidebar"},{"id":"releases/0_22_0","path":"/docs/releases/0_22_0","sidebar":"tutorialSidebar"},{"id":"releases/0_23_0","path":"/docs/releases/0_23_0","sidebar":"tutorialSidebar"},{"id":"releases/0_24_0","path":"/docs/releases/0_24_0","sidebar":"tutorialSidebar"},{"id":"releases/0_25_0","path":"/docs/releases/0_25_0","sidebar":"tutorialSidebar"},{"id":"releases/0_26_0","path":"/docs/releases/0_26_0","sidebar":"tutorialSidebar"},{"id":"releases/0_27_1","path":"/docs/releases/0_27_1","sidebar":"tutorialSidebar"},{"id":"releases/0_27_2","path":"/docs/releases/0_27_2","sidebar":"tutorialSidebar"},{"id":"releases/0_28_0","path":"/docs/releases/0_28_0","sidebar":"tutorialSidebar"},{"id":"releases/0_29_2","path":"/docs/releases/0_29_2","sidebar":"tutorialSidebar"},{"id":"releases/0_3_0","path":"/docs/releases/0_3_0","sidebar":"tutorialSidebar"},{"id":"releases/0_3_1","path":"/docs/releases/0_3_1","sidebar":"tutorialSidebar"},{"id":"releases/0_30_1","path":"/docs/releases/0_30_1","sidebar":"tutorialSidebar"},{"id":"releases/0_4_0","path":"/docs/releases/0_4_0","sidebar":"tutorialSidebar"},{"id":"releases/0_5_1","path":"/docs/releases/0_5_1","sidebar":"tutorialSidebar"},{"id":"releases/0_5_2","path":"/docs/releases/0_5_2","sidebar":"tutorialSidebar"},{"id":"releases/0_6_0","path":"/docs/releases/0_6_0","sidebar":"tutorialSidebar"},{"id":"releases/0_6_1","path":"/docs/releases/0_6_1","sidebar":"tutorialSidebar"},{"id":"releases/0_6_2","path":"/docs/releases/0_6_2","sidebar":"tutorialSidebar"},{"id":"releases/0_7_1","path":"/docs/releases/0_7_1","sidebar":"tutorialSidebar"},{"id":"releases/0_8_1","path":"/docs/releases/0_8_1","sidebar":"tutorialSidebar"},{"id":"releases/0_8_2","path":"/docs/releases/0_8_2","sidebar":"tutorialSidebar"},{"id":"releases/0_9_0","path":"/docs/releases/0_9_0","sidebar":"tutorialSidebar"},{"id":"releases/1_0_0","path":"/docs/releases/1_0_0","sidebar":"tutorialSidebar"},{"id":"releases/1_1_0","path":"/docs/releases/1_1_0","sidebar":"tutorialSidebar"},{"id":"releases/1_10_2","path":"/docs/releases/1_10_2","sidebar":"tutorialSidebar"},{"id":"releases/1_11_3","path":"/docs/releases/1_11_3","sidebar":"tutorialSidebar"},{"id":"releases/1_12_0","path":"/docs/releases/1_12_0","sidebar":"tutorialSidebar"},{"id":"releases/1_13_1","path":"/docs/releases/1_13_1","sidebar":"tutorialSidebar"},{"id":"releases/1_14_0","path":"/docs/releases/1_14_0","sidebar":"tutorialSidebar"},{"id":"releases/1_15_0","path":"/docs/releases/1_15_0","sidebar":"tutorialSidebar"},{"id":"releases/1_16_0","path":"/docs/releases/1_16_0","sidebar":"tutorialSidebar"},{"id":"releases/1_17_1","path":"/docs/releases/1_17_1","sidebar":"tutorialSidebar"},{"id":"releases/1_18_0","path":"/docs/releases/1_18_0","sidebar":"tutorialSidebar"},{"id":"releases/1_19_0","path":"/docs/releases/1_19_0","sidebar":"tutorialSidebar"},{"id":"releases/1_2_2","path":"/docs/releases/1_2_2","sidebar":"tutorialSidebar"},{"id":"releases/1_3_1","path":"/docs/releases/1_3_1","sidebar":"tutorialSidebar"},{"id":"releases/1_4_1","path":"/docs/releases/1_4_1","sidebar":"tutorialSidebar"},{"id":"releases/1_5_0","path":"/docs/releases/1_5_0","sidebar":"tutorialSidebar"},{"id":"releases/1_6_2","path":"/docs/releases/1_6_2","sidebar":"tutorialSidebar"},{"id":"releases/1_7_0","path":"/docs/releases/1_7_0","sidebar":"tutorialSidebar"},{"id":"releases/1_8_0","path":"/docs/releases/1_8_0","sidebar":"tutorialSidebar"},{"id":"releases/1_9_1","path":"/docs/releases/1_9_1","sidebar":"tutorialSidebar"},{"id":"spec/facets/custom-facets","path":"/docs/spec/facets/custom-facets","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/column_lineage_facet","path":"/docs/spec/facets/dataset-facets/column_lineage_facet","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/data_quality_assertions","path":"/docs/spec/facets/dataset-facets/data_quality_assertions","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/data_source","path":"/docs/spec/facets/dataset-facets/data_source","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/dataset-facets","path":"/docs/spec/facets/dataset-facets/","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/input-dataset-facets/data_quality_metrics","path":"/docs/spec/facets/dataset-facets/input-dataset-facets/data_quality_metrics","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/lifecycle_state_change","path":"/docs/spec/facets/dataset-facets/lifecycle_state_change","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/output-dataset-facets/output_statistics","path":"/docs/spec/facets/dataset-facets/output-dataset-facets/output_statistics","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/ownership","path":"/docs/spec/facets/dataset-facets/ownership","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/schema","path":"/docs/spec/facets/dataset-facets/schema","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/storage","path":"/docs/spec/facets/dataset-facets/storage","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/symlinks","path":"/docs/spec/facets/dataset-facets/symlinks","sidebar":"tutorialSidebar"},{"id":"spec/facets/dataset-facets/version_facet","path":"/docs/spec/facets/dataset-facets/version_facet","sidebar":"tutorialSidebar"},{"id":"spec/facets/facets","path":"/docs/spec/facets/","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/documentation","path":"/docs/spec/facets/job-facets/documentation","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/job-facets","path":"/docs/spec/facets/job-facets/","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/job-type","path":"/docs/spec/facets/job-facets/job-type","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/ownership","path":"/docs/spec/facets/job-facets/ownership","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/source-code","path":"/docs/spec/facets/job-facets/source-code","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/source-code-location","path":"/docs/spec/facets/job-facets/source-code-location","sidebar":"tutorialSidebar"},{"id":"spec/facets/job-facets/sql","path":"/docs/spec/facets/job-facets/sql","sidebar":"tutorialSidebar"},{"id":"spec/facets/run-facets/error_message","path":"/docs/spec/facets/run-facets/error_message","sidebar":"tutorialSidebar"},{"id":"spec/facets/run-facets/external_query","path":"/docs/spec/facets/run-facets/external_query","sidebar":"tutorialSidebar"},{"id":"spec/facets/run-facets/nominal_time","path":"/docs/spec/facets/run-facets/nominal_time","sidebar":"tutorialSidebar"},{"id":"spec/facets/run-facets/parent_run","path":"/docs/spec/facets/run-facets/parent_run","sidebar":"tutorialSidebar"},{"id":"spec/facets/run-facets/run-facets","path":"/docs/spec/facets/run-facets/","sidebar":"tutorialSidebar"},{"id":"spec/job-hierarchy","path":"/docs/spec/job-hierarchy","sidebar":"tutorialSidebar"},{"id":"spec/naming","path":"/docs/spec/naming","sidebar":"tutorialSidebar"},{"id":"spec/object-model","path":"/docs/spec/object-model","sidebar":"tutorialSidebar"},{"id":"spec/producers","path":"/docs/spec/producers","sidebar":"tutorialSidebar"},{"id":"spec/run-cycle","path":"/docs/spec/run-cycle","sidebar":"tutorialSidebar"},{"id":"spec/schemas","path":"/docs/spec/schemas","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/","label":"index"}}}}],"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 s=n(57529);const l=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":"project"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.0"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","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-tailwindcss":{"type":"local"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"2.3.2"}}}'),c={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(67294),a=n(10412),o=n(35742),i=n(18780),s=n(55096);function l(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(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{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){a.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}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(70405);function o(e){return r.createElement(a.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(87462),a=n(67294),o=n(73727),i=n(18780),s=n(52263),l=n(13919),c=n(10412);const u=a.createContext({collectLink:()=>{}});var d=n(44996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:_}}=(0,s.Z)(),{withBaseUrl:w}=(0,d.C)(),k=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=p||f;const E=(0,l.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(L=C,b&&(e=>e.startsWith("/"))(L)?w(L):L):void 0;var L;T&&E&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:_}));const A=(0,a.useRef)(!1),R=n?o.OL:o.rU,N=c.Z.canUseIntersectionObserver,P=(0,a.useRef)(),O=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,a.useEffect)((()=>(!N&&E&&null!=T&&window.docusaurus.prefetch(T),()=>{N&&P.current&&P.current.disconnect()})),[P,T,N,E]);const I=T?.startsWith("#")??!1,D=!T||!E||I;return D||h||k.collectLink(T),D?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!E&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(R,(0,r.Z)({},v,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,N&&e&&E&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const f=a.forwardRef(p)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(67294);function a(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 o=n(57529);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 o[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const s=i({message:t,id:n});return r.createElement(r.Fragment,null,a(s,o))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(67294),a=n(52263),o=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(58940);function o(){return(0,r.useContext)(a._)}},28084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>o,eZ:()=>i});var r=n(52263),a=n(29935);function o(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=a.m),void 0===n&&(n={});const r=o(e)?.[t];if(!r&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return r}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(98934);function o(){return(0,r.useContext)(a._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[a,o]=n;const i=r?`${r}.${a}`:a;var s;"object"==typeof(s=o)&&s&&Object.keys(s).length>0?e(o,i):t[i]=o}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(67294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),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:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},94104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>f,gA:()=>u,_r:()=>l,Jo:()=>m,zh:()=>c,yW:()=>p,gB:()=>d});var r=n(76775),a=n(28084);const o=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=function(e,t){const n=o(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const s={},l=()=>(0,a.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,a.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function u(e){void 0===e&&(e={});const t=l(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function d(e){return c(e).versions}function p(e){const t=c(e);return o(t)}function f(e){const t=c(e),{pathname:n}=(0,r.TH)();return i(t,n)}function m(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=o(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},56657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(74865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(87410),a=n(36809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294);const a="iconExternalLink_nPIU";function o(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:a},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"}))}},55096:(e,t,n)=>{"use strict";n.d(t,{Z:()=>bt});var r=n(67294),a=n(86010),o=n(44763),i=n(87462),s=n(76775),l=n(95999),c=n(85936);const u="docusaurus_skipToContent_fallback";function d(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){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(u);t&&d(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&d(e.current)})),{containerRef:e,onClick:n}}const f=(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 m(e){const t=e.children??f,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":f},r.createElement("a",(0,i.Z)({},e,{href:`#${u}`,onClick:a}),t))}var g=n(1944),h=n(35281),b=n(19727);const v="skipToContent_fXgn";function y(){return r.createElement(m,{className:v})}var _=n(86668),w=n(59689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:s,...l}=e;return r.createElement("svg",(0,i.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S="closeButton_CVFx";function x(e){return r.createElement("button",(0,i.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,a.Z)("clean-btn close",S,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const E="content_knG7";function C(e){const{announcementBar:t}=(0,_.L)(),{content:n}=t;return r.createElement("div",(0,i.Z)({},e,{className:(0,a.Z)(E,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T="announcementBar_mb4j",L="announcementBarPlaceholder_vyr4",A="announcementBarClose_gvF7",R="announcementBarContent_xLdY";function N(){const{announcementBar:e}=(0,_.L)(),{isActive:t,close:n}=(0,w.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:L}),r.createElement(C,{className:R}),i&&r.createElement(x,{onClick:n,className:A}))}var P=n(93163),O=n(12466);var I=n(902),D=n(13102);const j=r.createContext(null);function M(e){let{children:t}=e;const n=function(){const e=(0,P.e)(),t=(0,D.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,I.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(j.Provider,{value:n},t)}function F(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function B(){const e=(0,r.useContext)(j);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,D.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:F(o)})),[a,o,t])}function z(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=B();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.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"},o)))}var U=n(92949),q=n(72389);function $(e){return r.createElement("svg",(0,i.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 H(e){return r.createElement("svg",(0,i.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 G={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const s=(0,q.Z)(),c=(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"===o?(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,a.Z)(G.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",G.toggleButton,!s&&G.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!s,title:c,"aria-label":c,"aria-live":"polite"},r.createElement($,{className:(0,a.Z)(G.toggleIcon,G.lightToggleIcon)}),r.createElement(H,{className:(0,a.Z)(G.toggleIcon,G.darkToggleIcon)})))}const V=r.memo(Z),W="darkNavbarColorModeToggle_X3D1";function Y(e){let{className:t}=e;const n=(0,_.L)().navbar.style,a=(0,_.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,U.I)();return a?null:r.createElement(V,{className:t,buttonClassName:"dark"===n?W:void 0,value:o,onChange:i})}var K=n(21327);function X(){return r.createElement(K.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,P.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(k,{color:"var(--ifm-color-emphasis-600)"}))}function J(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(X,null),r.createElement(Y,{className:"margin-right--md"}),r.createElement(Q,null))}var ee=n(39960),te=n(44996),ne=n(13919);function re(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var ae=n(39471);function oe(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:s,html:l,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,te.Z)(a),f=(0,te.Z)(t),m=(0,te.Z)(o,{forcePrependBaseUrl:!0}),g=s&&o&&!(0,ne.Z)(o),h=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,s,g&&r.createElement(ae.Z,c&&{width:12,height:12}))};return o?r.createElement(ee.Z,(0,i.Z)({href:u?m:o},d,h)):r.createElement(ee.Z,(0,i.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?re(n,t.pathname):t.pathname.startsWith(f)},d,h))}function ie(e){let{className:t,isDropdownItem:n=!1,...o}=e;const s=r.createElement(oe,(0,i.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,s):s}function se(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(oe,(0,i.Z)({className:(0,a.Z)("menu__link",t)},o)))}function le(e){let{mobile:t=!1,position:n,...a}=e;const o=t?se:ie;return r.createElement(o,(0,i.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ce=n(86043),ue=n(48596),de=n(52263);function pe(e,t){return e.some((e=>function(e,t){return!!(0,ue.Mg)(e.to,t)||!!re(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function fe(e){let{items:t,position:n,className:o,onClick:s,...l}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.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)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(oe,(0,i.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Re,(0,i.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function me(e){let{items:t,className:n,position:o,onClick:l,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,de.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=pe(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ce.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(oe,(0,i.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),f()}}),c.children??c.label),r.createElement(ce.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(Re,(0,i.Z)({mobile:!0,isDropdownItem:!0,onClick:l,activeClassName:"menu__link--active"},e,{key:t}))))))}function ge(e){let{mobile:t=!1,...n}=e;const a=t?me:fe;return r.createElement(a,n)}var he=n(94711);function be(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,i.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),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 ve="iconLanguage_nlXk";var ye=n(94184),_e=n.n(ye),we=n(28084);const ke=e=>{const t=(0,r.useRef)(!1),a=(0,r.useRef)(null),[o,i]=(0,r.useState)(!1),l=(0,s.k6)(),{siteConfig:c={}}=(0,de.Z)(),u=(0,q.Z)(),{baseUrl:d}=c,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(9878),n.e(3339)]).then(n.bind(n,30894)),Promise.all([n.e(532),n.e(3343)]).then(n.bind(n,53343))]).then((e=>{let[t,n,{default:r}]=e;0!==t.length&&(((e,t,n)=>{new n({searchDocs:e,searchIndex:t,baseUrl:d,inputSelector:"#search_input_react",handleSelected:(e,t,n)=>{const r=n.url||"/";document.createElement("a").href=r,l.push(r)}})})(t,n,r),i(!0))})),t.current=!0)},m=(0,r.useCallback)((t=>{a.current.contains(t.target)||a.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:_e()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:m,onKeyDown:m,tabIndex:0}),r.createElement("input",{id:"search_input_react",type:"search",placeholder:o?"Search":"Loading...","aria-label":"Search",className:_e()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:f,onMouseOver:f,onFocus:m,onBlur:m,ref:a,disabled:!o}))},Se="searchBox_ZlJk";function xe(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,Se)},t)}var Ee=n(94104),Ce=n(53438);var Te=n(60373);const Le=e=>e.docs.find((t=>t.id===e.mainDocId));const Ae={default:le,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:c,locales:u,localeConfigs:d}}=(0,de.Z)(),p=(0,he.l)(),{search:f,hash:m}=(0,s.TH)(),g=[...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===c?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[c].label;return r.createElement(ge,(0,i.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(be,{className:ve}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(xe,{className:n},r.createElement(ke,null))},dropdown:ge,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return r.createElement(s,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:s}=(0,Ee.Iw)(a),l=(0,Ce.vY)(t,a);return null===l?null:r.createElement(le,(0,i.Z)({exact:!0},o,{isActive:()=>s?.path===l.path||!!s?.sidebar&&s.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:s}=(0,Ee.Iw)(a),l=(0,Ce.oz)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(le,(0,i.Z)({exact:!0},o,{isActive:()=>s?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const s=(0,Ce.lO)(a)[0],l=t??s.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(s).path;return r.createElement(le,(0,i.Z)({},o,{label:l,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:c,...u}=e;const{search:d,hash:p}=(0,s.TH)(),f=(0,Ee.Iw)(n),m=(0,Ee.gB)(n),{savePreferredVersionName:g}=(0,Te.J)(n),h=[...o,...m.map((e=>{const t=f.alternateDocVersions[e.name]??Le(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...c],b=(0,Ce.lO)(n)[0],v=t&&h.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&&h.length>1?void 0:Le(b).path;return h.length<=1?r.createElement(le,(0,i.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(ge,(0,i.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function Re(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ae[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Ne(){const e=(0,P.e)(),t=(0,_.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Re,(0,i.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Pe(e){return r.createElement("button",(0,i.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 Oe(){const e=0===(0,_.L)().navbar.items.length,t=B();return r.createElement(r.Fragment,null,!e&&r.createElement(Pe,{onClick:()=>t.hide()}),t.content)}function Ie(){const e=(0,P.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(z,{header:r.createElement(J,null),primaryMenu:r.createElement(Ne,null),secondaryMenu:r.createElement(Oe,null)}):null}const De="navbarHideable_m1mJ",je="navbarHidden_jGov";function Me(e){return r.createElement("div",(0,i.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Fe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,_.L)(),i=(0,P.e)(),{navbarRef:s,isNavbarVisible:u}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[De,!u&&je],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Me,{onClick:i.toggle}),r.createElement(Ie,null))}var Be=n(18780);const ze="errorBoundaryError_a6uf";function Ue(e){return r.createElement("button",(0,i.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 qe(e){let{error:t}=e;const n=(0,Be.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:ze},n)}class $e extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}function He(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,i.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ge(){const{toggle:e,shown:t}=(0,P.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(He,null))}const Ze="colorModeToggle_DEke";function Ve(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement($e,{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(Re,e)))))}function We(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 Ye(){const e=(0,P.e)(),t=(0,_.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(We,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Ge,null),r.createElement(X,null),r.createElement(Ve,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ve,{items:a}),r.createElement(Y,{className:Ze}),!o&&r.createElement(xe,null,r.createElement(ke,null)))})}function Ke(){return r.createElement(Fe,null,r.createElement(Ye,null))}function Xe(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:s,...l}=t,c=(0,te.Z)(n),u=(0,te.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(ee.Z,(0,i.Z)({className:"footer__link-item"},a?{href:s?u:a}:{to:c},l),o,a&&!(0,ne.Z)(a)&&r.createElement(ae.Z,null))}function Qe(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(Xe,{item:t}))}function Je(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(Qe,{key:t,item:e})))))}function et(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Je,{key:t,column:e}))))}function tt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function nt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Xe,{item:t})}function rt(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(nt,{item:e}),t.length!==n+1&&r.createElement(tt,null))))))}function at(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(et,{columns:t}):r.createElement(rt,{links:t})}var ot=n(50941);const it="footerLogoLink_BH7S";function st(e){let{logo:t}=e;const{withBaseUrl:n}=(0,te.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(ot.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function lt(e){let{logo:t}=e;return t.href?r.createElement(ee.Z,{href:t.href,className:it,target:t.target},r.createElement(st,{logo:t})):r.createElement(st,{logo:t})}function ct(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ut(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function dt(){const{footer:e}=(0,_.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(ut,{style:o,links:n&&n.length>0&&r.createElement(at,{links:n}),logo:a&&r.createElement(lt,{logo:a}),copyright:t&&r.createElement(ct,{copyright:t})})}const pt=r.memo(dt),ft=(0,I.Qc)([U.S,w.pl,O.OC,Te.L5,g.VC,function(e){let{children:t}=e;return r.createElement(D.n2,null,r.createElement(P.M,null,r.createElement(M,null,t)))}]);function mt(e){let{children:t}=e;return r.createElement(ft,null,t)}function gt(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(Ue,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(qe,{error:t})))))}const ht="mainWrapper_z2l0";function bt(e){const{children:t,noFooter:n,wrapperClassName:i,title:s,description:l}=e;return(0,b.t)(),r.createElement(mt,null,r.createElement(g.d,{title:s,description:l}),r.createElement(y,null),r.createElement(N,null),r.createElement(Ke,null),r.createElement("div",{id:u,className:(0,a.Z)(h.k.wrapper.main,ht,i)},r.createElement(o.Z,{fallback:e=>r.createElement(gt,e)},t)),!n&&r.createElement(pt,null))}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(87462),a=n(67294),o=n(39960),i=n(44996),s=n(52263),l=n(86668),c=n(50941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:c}}=(0,l.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},f,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:p},n))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(35742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},50941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(87462),a=n(67294),o=n(86010),i=n(72389),s=n(92949);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(l.themedImage,l[`themedImage--${e}`],u)},p)))))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>g});var r=n(87462),a=n(67294),o=n(10412);function i(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const s={display:"none",overflow:"hidden",height:"0px"},l={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?s:l;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function u(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 d(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=function(){const t=e.scrollHeight;return{transition:`height ${r?.duration??u(t)}ms ${r?.easing??"ease-in-out"}`,height:`${t}px`}}();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return c(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(a(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{a()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?s:l}function f(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const u=(0,a.useRef)(null);return d({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:l?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(u.current,n),i?.(n))},className:s},r)}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[s,l]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&l(t)}),[o,t]),o?a.createElement(f,(0,r.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const r=t?m:f;return a.createElement(r,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(67294),a=n(72389),o=n(50012),i=n(902),s=n(86668);const l=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!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}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(67294),a=n(10412),o=n(902),i=n(50012),s=n(86668);const l=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d="light",p="dark",f=e=>e===p?p:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,i]=(0,r.useState)((e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e))(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const l=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&(e=>{u.set(f(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p:d:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&l(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,l]);const m=(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||m.current?m.current=window.matchMedia("print").matches:l(null)};return e.addListener(r),()=>e.removeListener(r)}),[l,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:l,get isDarkTheme(){return o===p},setLightTheme(){l(d)},setDarkTheme(){l(p)}})),[o,l])}function g(e){let{children:t}=e;const n=m();return r.createElement(l.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(l);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b});var r=n(67294),a=n(94104),o=n(29935),i=n(86668),s=n(53438),l=n(902),c=n(50012);const u=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},p=(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),f=(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()};const m=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return r.createElement(m.Provider,{value:n},t)}function b(e){let{children:t}=e;return s.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(m);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(67294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function s(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function l(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},93163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>p});var r=n(67294),a=n(13102),o=n(87524),i=n(91980),s=n(86668),l=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>i});var r=n(67294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(67294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(67294),a=n(10412);const o="desktop",i="mobile",s="ssr";function l(){return a.Z.canUseDOM?window.innerWidth>996?o:i:s}function c(){const[e,t]=(0,r.useState)((()=>l()));return(0,r.useEffect)((()=>{function e(){t(l())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},35281:(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:{}}},53438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>m,cE:()=>d,hI:()=>_,lO:()=>b,oz:()=>v,s1:()=>h,vY:()=>y});var r=n(67294),a=n(76775),o=n(18790),i=n(94104),s=n(60373),l=n(1116),c=n(67392),u=n(48596);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);function m(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||((e,t)=>e.some((e=>m(e,t))))(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,u.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,u.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function h(){const e=(0,l.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,c.j)([t,n,a].filter(Boolean))),[t,n,a])}function v(e,t){const n=b(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 y(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,s=i.find((e=>(0,a.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?n.docsSidebars[l]:void 0;return{docElement:(0,o.H)(i),sidebarName:l,sidebarItems:c}}},91980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>s,_X:()=>l});var r=n(67294),a=n(76775),o=n(61688),i=n(902);function s(e){!function(e){const t=(0,a.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 l(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},67392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(67294),a=n(86010),o=n(35742),i=n(30226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(44996),c=n(52263);function u(e){let{title:t,description:n,keywords:a,image:i,children:s}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(o.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}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(o.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>l,i6:()=>s,zX:()=>o});var r=n(67294);const a=n(10412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(67294),a=n(723),o=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.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 a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>l,RF:()=>d,o5:()=>p});var r=n(67294),a=n(10412),o=n(72389),i=n(902);const s=r.createContext(void 0);function l(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(s.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function f(){const e=(0,r.useRef)(null),t=(0,o.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 a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(52263);const r="default";function a(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(67294),a=n(61688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const c={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=s(t?.persistence);return null===n?c:{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?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(52263),a=n(76775);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),s=o===n?e:e.replace(`/${o}/`,"/"),l=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(r)}${l}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),a=n(76775),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){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[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},54143:(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]}},18780: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 a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},94184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>_,q_:()=>C,ob:()=>f,PP:()=>L,Ep:()=>p});var r=n(87462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(2177);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),_.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(_.entries[_.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=_.index+e;return t>=0&&t<_.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return _}},8679:(e,t,n)=>{"use strict";var r=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}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(a){return!1}}()?Object.assign:function(e,o){for(var i,s,l=a(e),c=1;c{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof a)){var E,C=1;if(v){if(!(E=o(w,S,e,b))||E.index>=e.length)break;var T=E.index,L=E.index+E[0].length,A=S;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(S=A-=k.value.length,k.value instanceof a)continue;for(var R=k;R!==t.tail&&(Ad.reach&&(d.reach=I);var D=k.prev;if(P&&(D=l(t,D,P),S+=P.length),c(t,D,C),k=l(t,D,new a(p,h?r.tokenize(N,h):N,y,N)),O&&l(t,k,O),C>1){var j={cause:p+","+m,reach:I};i(e,t,n,k.prev,S,j),d&&j.reach>d.reach&&(d.reach=j.reach)}}}}}}function s(){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 l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.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]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.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:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.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 a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.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|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.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},a.languages.c.string],char:a.languages.c.char,comment:a.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:a.languages.c}}}}),a.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 a.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"])}(a),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"))}(a),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},a={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:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.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}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.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:a.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:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.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:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.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:a.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"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.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")),a.languages.js=a.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}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),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,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \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("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),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:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.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:a.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+/},a.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 s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l=0&&f(c,"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,a=r.inside["interpolation-punctuation"],o=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 s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,l(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=l(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(i++,r)););return u[n]=a,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 a=p[i],o="string"==typeof r?r:r.content,s=o.indexOf(a);if(-1!==s){++i;var l=o.substring(0,s),d=c(u[a]),f=o.substring(s+a.length),m=[];if(l&&m.push(l),m.push(d),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(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,a=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}(a),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 o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\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:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.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(""):""},s=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var l=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=i(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.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},a.languages.go=a.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/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.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,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(a),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}(a),a.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"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.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:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.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:/[:;(){}]/},a.languages.objectivec=a.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 a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.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/},a.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:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.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/}),a.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 a.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}})}(a),a.languages.scss=a.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]+\}/}}}),a.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}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.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}}),a.languages.scss.atrule.inside.rest=a.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:/[{}()\[\];:.]/}}(a),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}(a),a.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 o=a},29901: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:"shell",aliasTitles:{shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},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"},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"},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"},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"},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"},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(29901),a=n(39642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},16500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=16500},39642: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 s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in a(t,o),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;a(m);){for(var g in p={},m){var h=l[g];t(h&&h.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 _={getIds:function(){var e=[];return _.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return s[e]=a}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return _}}();e.exports=t},92703:(e,t,n)=>{"use strict";var r=n(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),a=n(27418),o=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n