diff --git a/404.html b/404.html index 9ecb8cab..63b6a919 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ Page Not Found | Serenity BDD Users Manual - - + +
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/images/custom-build-info-5d970b8f7d9acdd7a50df855ef7096f5.png b/assets/images/custom-build-info-5d970b8f7d9acdd7a50df855ef7096f5.png new file mode 100644 index 00000000..22000d9c Binary files /dev/null and b/assets/images/custom-build-info-5d970b8f7d9acdd7a50df855ef7096f5.png differ diff --git a/assets/js/2f96067e.4ed2a4c4.js b/assets/js/2f96067e.4ed2a4c4.js new file mode 100644 index 00000000..a0794579 --- /dev/null +++ b/assets/js/2f96067e.4ed2a4c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[9518],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=p(r),m=i,y=d["".concat(l,".").concat(m)]||d[m]||c[m]||o;return r?n.createElement(y,s(s({ref:t},u),{},{components:r})):n.createElement(y,s({ref:t},u))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,s=new Array(o);s[0]=d;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:i,s[1]=a;for(var p=2;p{r.r(t),r.d(t,{contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var n=r(7462),i=(r(7294),r(3905));const o={sidebar_position:6},s="Three Strategies to Optimize Your Serenity BDD Reports",a={unversionedId:"tutorials/streamlining_your_serenity_reports",id:"tutorials/streamlining_your_serenity_reports",isDocsHomePage:!1,title:"Three Strategies to Optimize Your Serenity BDD Reports",description:"Serenity BDD stands out for its ability to produce detailed and informative reports. These reports offer insights not just on executed tests, but also on the fulfillment of business requirements. But like all tools, getting the most out of Serenity BDD involves a few tweaks and optimizations.",source:"@site/docs/tutorials/streamlining_your_serenity_reports.md",sourceDirName:"tutorials",slug:"/tutorials/streamlining_your_serenity_reports",permalink:"/docs/tutorials/streamlining_your_serenity_reports",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/tutorials/streamlining_your_serenity_reports.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"How to Do Parallel Test Execution in Cucumber with Serenity",permalink:"/docs/tutorials/running_cucumber_scenarios_in_parallel"},next:{title:"Introduction",permalink:"/docs/guide/user_guide_intro"}},l=[],p={toc:l};function u(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"three-strategies-to-optimize-your-serenity-bdd-reports"},"Three Strategies to Optimize Your Serenity BDD Reports"),(0,i.kt)("p",null,"Serenity BDD stands out for its ability to produce detailed and informative reports. These reports offer insights not just on executed tests, but also on the fulfillment of business requirements. But like all tools, getting the most out of Serenity BDD involves a few tweaks and optimizations."),(0,i.kt)("p",null,"Here are three strategies to make your Serenity BDD reports more efficient:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Stay Updated!")),(0,i.kt)("p",{parentName:"li"},"Ensure you're working with the latest version of Serenity BDD, ideally 4.0.12 or newer. With each update, you'll find several optimizations to enhance report performance and minimize generated files. For instance, standard report generation in version 4.0.11 is up to 10 times faster than in 3.9.8.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Opt Out of Duration Reporting")),(0,i.kt)("p",{parentName:"li"},"By default, Serenity BDD generates in-depth reports detailing the runtime for each test. While these reports are richer in information, they consume more disk space. For substantial projects where disk space becomes an issue, consider turning off duration reporting. This can be done by setting the ",(0,i.kt)("inlineCode",{parentName:"p"},"serenity.report.test.durations")," flag to false. As a testament to its efficacy, one project with over 11,000 tests witnessed its report size shrink from 397M to 250M, and the generation time was halved.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Limit Screenshots to Failed Tests")),(0,i.kt)("p",{parentName:"li"},"When conducting web tests, a useful approach to conserve space is by capturing screenshots exclusively for failed tests. Achieve this by adjusting the ",(0,i.kt)("inlineCode",{parentName:"p"},"serenity.take.screenshots")," property to FOR_FAILURES. This tweak not only accelerates the tests but also trims down the report size. Keep in mind, however, that this might slightly reduce the detail in your reporting."))),(0,i.kt)("p",null,"Harness the power of Serenity BDD more effectively by applying these strategies and enjoy a streamlined testing report experience."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/68c46c38.4d7d326c.js b/assets/js/68c46c38.4d7d326c.js new file mode 100644 index 00000000..f2a7025b --- /dev/null +++ b/assets/js/68c46c38.4d7d326c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[8388],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||i;return r?n.createElement(f,s(s({ref:t},u),{},{components:r})):n.createElement(f,s({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=c;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,s[1]=a;for(var p=2;p{r.r(t),r.d(t,{contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={id:"reports_custom_info",title:"Custom Fields in Reports",sidebar_position:5},s=void 0,a={unversionedId:"reporting/reports_custom_info",id:"reporting/reports_custom_info",isDocsHomePage:!1,title:"Custom Fields in Reports",description:"Custom Field Reporting",source:"@site/docs/reporting/reports-custom-info.md",sourceDirName:"reporting",slug:"/reporting/reports_custom_info",permalink:"/docs/reporting/reports_custom_info",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/reporting/reports-custom-info.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{id:"reports_custom_info",title:"Custom Fields in Reports",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Integrating with JIRA",permalink:"/docs/reporting/integrating_with_jira"},next:{title:"Selenium Grid",permalink:"/docs/cloud/selenium-grid"}},l=[{value:"Custom Field Reporting",id:"custom-field-reporting",children:[{value:"Accessing system variables",id:"accessing-system-variables",children:[]},{value:"Overriding property values",id:"overriding-property-values",children:[]},{value:"Ordering the custom properties",id:"ordering-the-custom-properties",children:[]},{value:"A complete example",id:"a-complete-example",children:[]}]},{value:"Custom Build Info",id:"custom-build-info",children:[]},{value:"Defining build info programmatically",id:"defining-build-info-programmatically",children:[]}],p={toc:l};function u(e){let{components:t,...i}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"custom-field-reporting"},"Custom Field Reporting"),(0,o.kt)("p",null,"Custom fields can be included in the reports, using values that are either taken from the environment variables or passed into the build via system properties. This can be useful if you want to include the product or build version, the environment the tests were run on, or the test run date."),(0,o.kt)("p",null,"You can add custom fields to your report by setting system properties with the special prefix ",(0,o.kt)("inlineCode",{parentName:"p"},"report.customfields"),". These can go in your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file in the root directory of your project, or you can pass them in as command-line options."),(0,o.kt)("p",null,"For example, you could add the following properties to your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.environment = Integration\nreport.customfields.ApplicationVersion = 1.2.3\n")),(0,o.kt)("p",null,"This would produce a report containing these values, as shown here:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Custom fields appearing in the HTML summary report",src:r(8778).Z})),(0,o.kt)("h3",{id:"accessing-system-variables"},"Accessing system variables"),(0,o.kt)("p",null,"We can also access any system variables that Java has access to. For example, we could include the name of the user who ran the test run with the ",(0,o.kt)("inlineCode",{parentName:"p"},"${USER}")," system variable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.user = ${USER}\n")),(0,o.kt)("p",null,"This property would result in a report like the following:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Custom fields can also include system variables",src:r(4151).Z})),(0,o.kt)("p",null,"Not all system properties are available to Java. For example, on Linux systems, the ",(0,o.kt)("inlineCode",{parentName:"p"},"$HOST")," variable gives the name of the local machine. We could include this in our report by adding the following property:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.host = ${HOST}\n")),(0,o.kt)("p",null,"However, since this variable is not available to Java, we would need to pass it to Serenity from the command line, like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mvn serenity:aggregate -DHOST=$HOST\n")),(0,o.kt)("h3",{id:"overriding-property-values"},"Overriding property values"),(0,o.kt)("p",null,"[","[custom-report-fields-with-provided-values]","]\n.You can pass system properties from the command line\nimage::custom-reports-with-provided-property.png[]"),(0,o.kt)("p",null,"You can of course pass in other properties, to override the ones in your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file. Here we override the application version:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mvn serenity:aggregate -DHOST=$HOST -Dreport.customfields.ApplicationVersion=1.2.4\n")),(0,o.kt)("p",null,"But a more elegant solution, if you know you will always be passing in a variable, is to use a shorter variable in your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file and then pass this one in. For example, here we use the ",(0,o.kt)("inlineCode",{parentName:"p"},"environment")," property to display the current environment in the custom properties:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.environment = ${environment}\n")),(0,o.kt)("p",null,"We can set this value from the command line as shown here:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mvn serenity:aggregate -DHOST=$HOST -Denvironment=INT5\n")),(0,o.kt)("h3",{id:"ordering-the-custom-properties"},"Ordering the custom properties"),(0,o.kt)("p",null,"By default, the fields will appear in an arbitrary order. You can force the fields to appear in a pre-determined order using the ",(0,o.kt)("inlineCode",{parentName:"p"},"report.customfields.order")," field:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.order=ApplicationVersion,environment,user,host\n")),(0,o.kt)("h3",{id:"a-complete-example"},"A complete example"),(0,o.kt)("p",null,"A complete example of these properties and their various usages is shown here:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.ApplicationVersion = 1.2.3\nreport.customfields.environment = ${environment}\nreport.customfields.user = ${USER}\nreport.customfields.host = ${HOST}\nreport.customfields.order=ApplicationVersion,environment,user,host\n")),(0,o.kt)("h2",{id:"custom-build-info"},"Custom Build Info"),(0,o.kt)("p",null,"You can also add your own fields the the Build Info screen, using the ",(0,o.kt)("inlineCode",{parentName:"p"},"sysinfo.*")," properties.\nThe ",(0,o.kt)("inlineCode",{parentName:"p"},"sysinfo.*")," properties let you define fields and values that will appear in the Build Info page. For simple field-value combinations, the field appears alongside the other values on the Build Info screen:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sysinfo.lead = Daisy\n")),(0,o.kt)("p",null,"You can use Groovy expressions to access system properties (that you can pass in from the command line). The ",(0,o.kt)("inlineCode",{parentName:"p"},"env")," property gives you access to the current environment variables. For example, to display the current Jenkins build number, you could include the following line:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'sysinfo.build = "${env.BUILD_NUMBER}"\n')),(0,o.kt)("p",null,"You can also group custom properties into sections with sub-titles. An example of such a configuration in the ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.conf")," file is shown below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'sysinfo {\n lead = Daisy\n build = "${env.BUILD_NUMBER}"\n Test Run {\n Run By = "${env.USER}"\n Java Version = "${java.version}"\n }\n}\n')),(0,o.kt)("p",null,"The corresponding Build Info screen is shown below:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Customised Build Info details",src:r(1550).Z})),(0,o.kt)("h2",{id:"defining-build-info-programmatically"},"Defining build info programmatically"),(0,o.kt)("p",null,"You can also use the ",(0,o.kt)("inlineCode",{parentName:"p"},"BuildInfo")," class to add information to the Build Info page programmatically. Simply define the section, and add as many property name/value pairs as you want. You can see an example here:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-java"},'BuildInfo.section("Toggles").setProperty("toggle-custom-ads-v2", "on");\nBuildInfo.section("Toggles").setProperty("toggle-user-feedback", "on");\n\nBuildInfo.section("Versions").setProperty("game-history-service", "1.2.3");\nBuildInfo.section("Versions").setProperty("player-service", "3.4.5");\nBuildInfo.section("Versions").setProperty("related-products-service", "2.3.4");\n')),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Customised Build Info details",src:r(7545).Z})))}u.isMDXComponent=!0},1550:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/build-info-2daa81eba4d528597f5c7d24e9988ab5.png"},7545:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/custom-build-info-5d970b8f7d9acdd7a50df855ef7096f5.png"},8778:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/custom-report-fields-52b92f696936c0519f9e76fb62abafcf.png"},4151:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/custom-reports-including-a-system-variable-f80f91af608be8de5ca006821f66676e.png"}}]); \ No newline at end of file diff --git a/assets/js/68c46c38.74c27dc2.js b/assets/js/68c46c38.74c27dc2.js deleted file mode 100644 index 36575a4d..00000000 --- a/assets/js/68c46c38.74c27dc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[8388],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||i;return r?n.createElement(f,s(s({ref:t},u),{},{components:r})):n.createElement(f,s({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=d;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,s[1]=a;for(var p=2;p{r.r(t),r.d(t,{contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={id:"reports_custom_info",title:"Custom Fields in Reports",sidebar_position:5},s=void 0,a={unversionedId:"reporting/reports_custom_info",id:"reporting/reports_custom_info",isDocsHomePage:!1,title:"Custom Fields in Reports",description:"Custom Field Reporting",source:"@site/docs/reporting/reports-custom-info.md",sourceDirName:"reporting",slug:"/reporting/reports_custom_info",permalink:"/docs/reporting/reports_custom_info",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/reporting/reports-custom-info.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{id:"reports_custom_info",title:"Custom Fields in Reports",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Integrating with JIRA",permalink:"/docs/reporting/integrating_with_jira"},next:{title:"Selenium Grid",permalink:"/docs/cloud/selenium-grid"}},l=[{value:"Custom Field Reporting",id:"custom-field-reporting",children:[{value:"Accessing system variables",id:"accessing-system-variables",children:[]},{value:"Overriding property values",id:"overriding-property-values",children:[]},{value:"Ordering the custom properties",id:"ordering-the-custom-properties",children:[]},{value:"A complete example",id:"a-complete-example",children:[]}]},{value:"Custom Build Info",id:"custom-build-info",children:[]}],p={toc:l};function u(e){let{components:t,...i}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"custom-field-reporting"},"Custom Field Reporting"),(0,o.kt)("p",null,"Custom fields can be included in the reports, using values that are either taken from the environment variables or passed into the build via system properties. This can be useful if you want to include the product or build version, the environment the tests were run on, or the test run date."),(0,o.kt)("p",null,"You can add custom fields to your report by setting system properties with the special prefix ",(0,o.kt)("inlineCode",{parentName:"p"},"report.customfields"),". These can go in your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file in the root directory of your project, or you can pass them in as command-line options."),(0,o.kt)("p",null,"For example, you could add the following properties to your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.environment = Integration\nreport.customfields.ApplicationVersion = 1.2.3\n")),(0,o.kt)("p",null,"This would produce a report containing these values, as shown here:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Custom fields appearing in the HTML summary report",src:r(8778).Z})),(0,o.kt)("h3",{id:"accessing-system-variables"},"Accessing system variables"),(0,o.kt)("p",null,"We can also access any system variables that Java has access to. For example, we could include the name of the user who ran the test run with the ",(0,o.kt)("inlineCode",{parentName:"p"},"${USER}")," system variable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.user = ${USER}\n")),(0,o.kt)("p",null,"This property would result in a report like the following:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Custom fields can also include system variables",src:r(4151).Z})),(0,o.kt)("p",null,"Not all system properties are available to Java. For example, on Linux systems, the ",(0,o.kt)("inlineCode",{parentName:"p"},"$HOST")," variable gives the name of the local machine. We could include this in our report by adding the following property:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.host = ${HOST}\n")),(0,o.kt)("p",null,"However, since this variable is not available to Java, we would need to pass it to Serenity from the command line, like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mvn serenity:aggregate -DHOST=$HOST\n")),(0,o.kt)("h3",{id:"overriding-property-values"},"Overriding property values"),(0,o.kt)("p",null,"[","[custom-report-fields-with-provided-values]","]\n.You can pass system properties from the command line\nimage::custom-reports-with-provided-property.png[]"),(0,o.kt)("p",null,"You can of course pass in other properties, to override the ones in your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file. Here we override the application version:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mvn serenity:aggregate -DHOST=$HOST -Dreport.customfields.ApplicationVersion=1.2.4\n")),(0,o.kt)("p",null,"But a more elegant solution, if you know you will always be passing in a variable, is to use a shorter variable in your ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.properties")," file and then pass this one in. For example, here we use the ",(0,o.kt)("inlineCode",{parentName:"p"},"environment")," property to display the current environment in the custom properties:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.environment = ${environment}\n")),(0,o.kt)("p",null,"We can set this value from the command line as shown here:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mvn serenity:aggregate -DHOST=$HOST -Denvironment=INT5\n")),(0,o.kt)("h3",{id:"ordering-the-custom-properties"},"Ordering the custom properties"),(0,o.kt)("p",null,"By default, the fields will appear in an arbitrary order. You can force the fields to appear in a pre-determined order using the ",(0,o.kt)("inlineCode",{parentName:"p"},"report.customfields.order")," field:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.order=ApplicationVersion,environment,user,host\n")),(0,o.kt)("h3",{id:"a-complete-example"},"A complete example"),(0,o.kt)("p",null,"A complete example of these properties and their various usages is shown here:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"report.customfields.ApplicationVersion = 1.2.3\nreport.customfields.environment = ${environment}\nreport.customfields.user = ${USER}\nreport.customfields.host = ${HOST}\nreport.customfields.order=ApplicationVersion,environment,user,host\n")),(0,o.kt)("h2",{id:"custom-build-info"},"Custom Build Info"),(0,o.kt)("p",null,"You can also add your own fields the the Build Info screen, using the ",(0,o.kt)("inlineCode",{parentName:"p"},"sysinfo.*")," properties.\nThe ",(0,o.kt)("inlineCode",{parentName:"p"},"sysinfo.*")," properties let you define fields and values that will appear in the Build Info page. For simple field-value combinations, the field appears alongside the other values on the Build Info screen:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sysinfo.lead = Daisy\n")),(0,o.kt)("p",null,"You can use Groovy expressions to access system properties (that you can pass in from the command line). The ",(0,o.kt)("inlineCode",{parentName:"p"},"env")," property gives you access to the current environment variables. For example, to display the current Jenkins build number, you could include the following line:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'sysinfo.build = "${env.BUILD_NUMBER}"\n')),(0,o.kt)("p",null,"You can also group custom properties into sections with sub-titles. An example of such a configuration in the ",(0,o.kt)("inlineCode",{parentName:"p"},"serenity.conf")," file is shown below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'sysinfo {\n lead = Daisy\n build = "${env.BUILD_NUMBER}"\n Test Run {\n Run By = "${env.USER}"\n Java Version = "${java.version}"\n }\n}\n')),(0,o.kt)("p",null,"The corresponding Build Info screen is shown below:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Customised Build Info details",src:r(1550).Z})))}u.isMDXComponent=!0},1550:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/build-info-2daa81eba4d528597f5c7d24e9988ab5.png"},8778:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/custom-report-fields-52b92f696936c0519f9e76fb62abafcf.png"},4151:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/custom-reports-including-a-system-variable-f80f91af608be8de5ca006821f66676e.png"}}]); \ No newline at end of file diff --git a/assets/js/7cd378c7.edebb1e7.js b/assets/js/7cd378c7.a7cc4966.js similarity index 98% rename from assets/js/7cd378c7.edebb1e7.js rename to assets/js/7cd378c7.a7cc4966.js index 1f89de10..901be615 100644 --- a/assets/js/7cd378c7.edebb1e7.js +++ b/assets/js/7cd378c7.a7cc4966.js @@ -1 +1 @@ -"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[9562],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),d=p(n),m=i,f=d["".concat(l,".").concat(m)]||d[m]||s[m]||a;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u.mdxType="string"==typeof e?e:i,o[1]=u;for(var p=2;p{n.r(t),n.d(t,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>u,toc:()=>l});var r=n(7462),i=(n(7294),n(3905));const a={sidebar_position:6},o="How to Do Parallel Test Execution in Cucumber with Serenity",u={unversionedId:"tutorials/running_cucumber_scenarios_in_parallel",id:"tutorials/running_cucumber_scenarios_in_parallel",isDocsHomePage:!1,title:"How to Do Parallel Test Execution in Cucumber with Serenity",description:"Cucumber 7 has introduced native support for parallel execution at both the feature and scenario levels. This parallel execution can provide significant performance improvements in test runs. If you want to harness these performance improvements and run your Serenity BDD features and scenarios in parallel, you will need to upgrade to JUnit 5.",source:"@site/docs/tutorials/running_cucumber_scenarios_in_parallel.md",sourceDirName:"tutorials",slug:"/tutorials/running_cucumber_scenarios_in_parallel",permalink:"/docs/tutorials/running_cucumber_scenarios_in_parallel",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/tutorials/running_cucumber_scenarios_in_parallel.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Migrating From Serenity BDD 3.x to Serenity BDD 4.x",permalink:"/docs/tutorials/migrating_to_serenity_4"},next:{title:"Introduction",permalink:"/docs/guide/user_guide_intro"}},l=[{value:"Pre-requisites",id:"pre-requisites",children:[]},{value:"Step 1: Update Serenity BDD to a Recent Version",id:"step-1-update-serenity-bdd-to-a-recent-version",children:[]},{value:"Step 2: Update to JUnit 5 in Your Maven Project",id:"step-2-update-to-junit-5-in-your-maven-project",children:[]},{value:"Step 3: Create a junit-platform.properties File",id:"step-3-create-a-junit-platformproperties-file",children:[]},{value:"Step 4: Create a cucumber.properties File",id:"step-4-create-a-cucumberproperties-file",children:[]},{value:"Step 5: Update Your Cucumber Runner Class",id:"step-5-update-your-cucumber-runner-class",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],p={toc:l};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"how-to-do-parallel-test-execution-in-cucumber-with-serenity"},"How to Do Parallel Test Execution in Cucumber with Serenity"),(0,i.kt)("p",null,"Cucumber 7 has introduced native support for parallel execution at both the feature and scenario levels. This parallel execution can provide significant performance improvements in test runs. If you want to harness these performance improvements and run your Serenity BDD features and scenarios in parallel, you will need to upgrade to JUnit 5."),(0,i.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Cucumber 7.x")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Serenity BDD 3.9.8 or 4.0.x")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Maven 3.x")," for building the project")),(0,i.kt)("p",null,"Now, let's get started with the detailed step-by-step guide."),(0,i.kt)("h2",{id:"step-1-update-serenity-bdd-to-a-recent-version"},"Step 1: Update Serenity BDD to a Recent Version"),(0,i.kt)("p",null,"Before proceeding, make sure that you have a recent version of Serenity BDD. Versions 3.9.8 or 4.0.x are recommended for best results."),(0,i.kt)("p",null,"You can check your current version in your ",(0,i.kt)("inlineCode",{parentName:"p"},"pom.xml")," file or update it to the latest version."),(0,i.kt)("h2",{id:"step-2-update-to-junit-5-in-your-maven-project"},"Step 2: Update to JUnit 5 in Your Maven Project"),(0,i.kt)("p",null,"JUnit 5 provides the foundation for running tests in parallel with Cucumber and Serenity. Here's how you can update to JUnit 5 in your ",(0,i.kt)("inlineCode",{parentName:"p"},"pom.xml")," file:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Open the ",(0,i.kt)("inlineCode",{parentName:"p"},"pom.xml")," file in your Maven project.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add the following dependencies for JUnit 5 and Cucumber 7."),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"\n \n \n org.junit\n junit-bom\n 5.10.0\n pom\n import\n \n \n\n\n ...\n \x3c!-- JUNIT 5 Dependencies --\x3e\n \n org.junit.platform\n junit-platform-launcher\n test\n \n \n org.junit.platform\n junit-platform-suite\n test\n \n \n org.junit.jupiter\n junit-jupiter-engine\n test\n \n \n io.cucumber\n cucumber-junit-platform-engine\n 7.2.3\n test\n \n\n")))),(0,i.kt)("p",null,"More details on JUnit 5 and Maven can be found in the ",(0,i.kt)("a",{parentName:"p",href:"https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven"},"JUnit 5 User Guide"),"."),(0,i.kt)("h2",{id:"step-3-create-a-junit-platformproperties-file"},"Step 3: Create a ",(0,i.kt)("inlineCode",{parentName:"h2"},"junit-platform.properties")," File"),(0,i.kt)("p",null,"Create a new file named ",(0,i.kt)("inlineCode",{parentName:"p"},"junit-platform.properties")," in your ",(0,i.kt)("inlineCode",{parentName:"p"},"src/test/resources")," folder. This file enables and configures parallel execution."),(0,i.kt)("p",null,"Add the following content to the file:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-properties"},"cucumber.execution.parallel.enabled=true\ncucumber.execution.parallel.config.strategy=dynamic\ncucumber.plugin=io.cucumber.core.plugin.SerenityReporterParallel\n")),(0,i.kt)("p",null,"These properties enable parallel execution and configure it to use a dynamic strategy, along with the Serenity reporter for parallel execution."),(0,i.kt)("h2",{id:"step-4-create-a-cucumberproperties-file"},"Step 4: Create a ",(0,i.kt)("inlineCode",{parentName:"h2"},"cucumber.properties")," File"),(0,i.kt)("p",null,"Create a new file named ",(0,i.kt)("inlineCode",{parentName:"p"},"cucumber.properties")," in your ",(0,i.kt)("inlineCode",{parentName:"p"},"src/test/resources")," folder. This file will contain the Cucumber options for your Cucumber tests."),(0,i.kt)("p",null,"Add the following content to the file:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-properties"},"cucumber.execution.order = random\ncucumber.plugin=pretty,json:target/cucumber.json,timeline:target/test-results/timeline\ncucumber.snippet-type=camelcase\n")),(0,i.kt)("p",null,"You can find more details on Cucumber configuration options in the ",(0,i.kt)("a",{parentName:"p",href:"https://cucumber.io/docs/cucumber/api/?lang=java#list-configuration-options"},"Cucumber documentation"),"."),(0,i.kt)("h2",{id:"step-5-update-your-cucumber-runner-class"},"Step 5: Update Your Cucumber Runner Class"),(0,i.kt)("p",null,"You should have a single runner class for your whole test suite. Update it as follows:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'import org.junit.platform.suite.api.IncludeEngines;\nimport org.junit.platform.suite.api.SelectClasspathResource;\nimport org.junit.platform.suite.api.Suite;\n\n@Suite\n@IncludeEngines("cucumber")\n@SelectClasspathResource("/features")\npublic class AcceptanceTestSuite {}\n')),(0,i.kt)("p",null,"This runner class will include all the features in the ",(0,i.kt)("inlineCode",{parentName:"p"},"/features")," directory and run them using the Cucumber engine."),(0,i.kt)("h2",{id:"conclusion"},"Conclusion"),(0,i.kt)("p",null,"That's it! By following these steps, you can leverage the power of parallel execution with Cucumber and Serenity BDD. This will significantly reduce the execution time of your test suite, leading to faster feedback and more efficient development cycles."),(0,i.kt)("p",null,"Happy testing! \ud83d\ude80"))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[9562],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),d=p(n),m=i,f=d["".concat(l,".").concat(m)]||d[m]||s[m]||a;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u.mdxType="string"==typeof e?e:i,o[1]=u;for(var p=2;p{n.r(t),n.d(t,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>u,toc:()=>l});var r=n(7462),i=(n(7294),n(3905));const a={sidebar_position:6},o="How to Do Parallel Test Execution in Cucumber with Serenity",u={unversionedId:"tutorials/running_cucumber_scenarios_in_parallel",id:"tutorials/running_cucumber_scenarios_in_parallel",isDocsHomePage:!1,title:"How to Do Parallel Test Execution in Cucumber with Serenity",description:"Cucumber 7 has introduced native support for parallel execution at both the feature and scenario levels. This parallel execution can provide significant performance improvements in test runs. If you want to harness these performance improvements and run your Serenity BDD features and scenarios in parallel, you will need to upgrade to JUnit 5.",source:"@site/docs/tutorials/running_cucumber_scenarios_in_parallel.md",sourceDirName:"tutorials",slug:"/tutorials/running_cucumber_scenarios_in_parallel",permalink:"/docs/tutorials/running_cucumber_scenarios_in_parallel",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/tutorials/running_cucumber_scenarios_in_parallel.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Migrating From Serenity BDD 3.x to Serenity BDD 4.x",permalink:"/docs/tutorials/migrating_to_serenity_4"},next:{title:"Three Strategies to Optimize Your Serenity BDD Reports",permalink:"/docs/tutorials/streamlining_your_serenity_reports"}},l=[{value:"Pre-requisites",id:"pre-requisites",children:[]},{value:"Step 1: Update Serenity BDD to a Recent Version",id:"step-1-update-serenity-bdd-to-a-recent-version",children:[]},{value:"Step 2: Update to JUnit 5 in Your Maven Project",id:"step-2-update-to-junit-5-in-your-maven-project",children:[]},{value:"Step 3: Create a junit-platform.properties File",id:"step-3-create-a-junit-platformproperties-file",children:[]},{value:"Step 4: Create a cucumber.properties File",id:"step-4-create-a-cucumberproperties-file",children:[]},{value:"Step 5: Update Your Cucumber Runner Class",id:"step-5-update-your-cucumber-runner-class",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],p={toc:l};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"how-to-do-parallel-test-execution-in-cucumber-with-serenity"},"How to Do Parallel Test Execution in Cucumber with Serenity"),(0,i.kt)("p",null,"Cucumber 7 has introduced native support for parallel execution at both the feature and scenario levels. This parallel execution can provide significant performance improvements in test runs. If you want to harness these performance improvements and run your Serenity BDD features and scenarios in parallel, you will need to upgrade to JUnit 5."),(0,i.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Cucumber 7.x")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Serenity BDD 3.9.8 or 4.0.x")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Maven 3.x")," for building the project")),(0,i.kt)("p",null,"Now, let's get started with the detailed step-by-step guide."),(0,i.kt)("h2",{id:"step-1-update-serenity-bdd-to-a-recent-version"},"Step 1: Update Serenity BDD to a Recent Version"),(0,i.kt)("p",null,"Before proceeding, make sure that you have a recent version of Serenity BDD. Versions 3.9.8 or 4.0.x are recommended for best results."),(0,i.kt)("p",null,"You can check your current version in your ",(0,i.kt)("inlineCode",{parentName:"p"},"pom.xml")," file or update it to the latest version."),(0,i.kt)("h2",{id:"step-2-update-to-junit-5-in-your-maven-project"},"Step 2: Update to JUnit 5 in Your Maven Project"),(0,i.kt)("p",null,"JUnit 5 provides the foundation for running tests in parallel with Cucumber and Serenity. Here's how you can update to JUnit 5 in your ",(0,i.kt)("inlineCode",{parentName:"p"},"pom.xml")," file:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Open the ",(0,i.kt)("inlineCode",{parentName:"p"},"pom.xml")," file in your Maven project.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add the following dependencies for JUnit 5 and Cucumber 7."),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"\n \n \n org.junit\n junit-bom\n 5.10.0\n pom\n import\n \n \n\n\n ...\n \x3c!-- JUNIT 5 Dependencies --\x3e\n \n org.junit.platform\n junit-platform-launcher\n test\n \n \n org.junit.platform\n junit-platform-suite\n test\n \n \n org.junit.jupiter\n junit-jupiter-engine\n test\n \n \n io.cucumber\n cucumber-junit-platform-engine\n 7.2.3\n test\n \n\n")))),(0,i.kt)("p",null,"More details on JUnit 5 and Maven can be found in the ",(0,i.kt)("a",{parentName:"p",href:"https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven"},"JUnit 5 User Guide"),"."),(0,i.kt)("h2",{id:"step-3-create-a-junit-platformproperties-file"},"Step 3: Create a ",(0,i.kt)("inlineCode",{parentName:"h2"},"junit-platform.properties")," File"),(0,i.kt)("p",null,"Create a new file named ",(0,i.kt)("inlineCode",{parentName:"p"},"junit-platform.properties")," in your ",(0,i.kt)("inlineCode",{parentName:"p"},"src/test/resources")," folder. This file enables and configures parallel execution."),(0,i.kt)("p",null,"Add the following content to the file:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-properties"},"cucumber.execution.parallel.enabled=true\ncucumber.execution.parallel.config.strategy=dynamic\ncucumber.plugin=io.cucumber.core.plugin.SerenityReporterParallel\n")),(0,i.kt)("p",null,"These properties enable parallel execution and configure it to use a dynamic strategy, along with the Serenity reporter for parallel execution."),(0,i.kt)("h2",{id:"step-4-create-a-cucumberproperties-file"},"Step 4: Create a ",(0,i.kt)("inlineCode",{parentName:"h2"},"cucumber.properties")," File"),(0,i.kt)("p",null,"Create a new file named ",(0,i.kt)("inlineCode",{parentName:"p"},"cucumber.properties")," in your ",(0,i.kt)("inlineCode",{parentName:"p"},"src/test/resources")," folder. This file will contain the Cucumber options for your Cucumber tests."),(0,i.kt)("p",null,"Add the following content to the file:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-properties"},"cucumber.execution.order = random\ncucumber.plugin=pretty,json:target/cucumber.json,timeline:target/test-results/timeline\ncucumber.snippet-type=camelcase\n")),(0,i.kt)("p",null,"You can find more details on Cucumber configuration options in the ",(0,i.kt)("a",{parentName:"p",href:"https://cucumber.io/docs/cucumber/api/?lang=java#list-configuration-options"},"Cucumber documentation"),"."),(0,i.kt)("h2",{id:"step-5-update-your-cucumber-runner-class"},"Step 5: Update Your Cucumber Runner Class"),(0,i.kt)("p",null,"You should have a single runner class for your whole test suite. Update it as follows:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'import org.junit.platform.suite.api.IncludeEngines;\nimport org.junit.platform.suite.api.SelectClasspathResource;\nimport org.junit.platform.suite.api.Suite;\n\n@Suite\n@IncludeEngines("cucumber")\n@SelectClasspathResource("/features")\npublic class AcceptanceTestSuite {}\n')),(0,i.kt)("p",null,"This runner class will include all the features in the ",(0,i.kt)("inlineCode",{parentName:"p"},"/features")," directory and run them using the Cucumber engine."),(0,i.kt)("h2",{id:"conclusion"},"Conclusion"),(0,i.kt)("p",null,"That's it! By following these steps, you can leverage the power of parallel execution with Cucumber and Serenity BDD. This will significantly reduce the execution time of your test suite, leading to faster feedback and more efficient development cycles."),(0,i.kt)("p",null,"Happy testing! \ud83d\ude80"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/83b05699.0db740ec.js b/assets/js/83b05699.0db740ec.js new file mode 100644 index 00000000..cb89cb6d --- /dev/null +++ b/assets/js/83b05699.0db740ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[2857],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),l=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(n),m=i,y=p["".concat(u,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(y,a(a({ref:t},c),{},{components:n})):r.createElement(y,a({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=p;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var l=2;l{n.r(t),n.d(t,{contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const o={id:"user_guide_intro",title:"Introduction",sidebar_position:1},a="Introduction",s={unversionedId:"guide/user_guide_intro",id:"guide/user_guide_intro",isDocsHomePage:!1,title:"Introduction",description:"Serenity BDD is an open source library that aims to make the idea of living documentation a reality.",source:"@site/docs/guide/intro.md",sourceDirName:"guide",slug:"/guide/user_guide_intro",permalink:"/docs/guide/user_guide_intro",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/guide/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"user_guide_intro",title:"Introduction",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Three Strategies to Optimize Your Serenity BDD Reports",permalink:"/docs/tutorials/streamlining_your_serenity_reports"},next:{title:"Creating A New Project",permalink:"/docs/guide/getting_started"}},u=[],l={toc:u};function c(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,r.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"introduction"},"Introduction"),(0,i.kt)("p",null,"Serenity BDD is an open source library that aims to make the idea of living documentation a reality."),(0,i.kt)("p",null,"Serenity BDD helps you write cleaner and more maintainable automated acceptance and regression tests faster. Serenity also uses the test results to produce illustrated, narrative reports that document and describe what your application does and how it works. Serenity tells you not only what tests have been executed, but more importantly, what requirements have been tested."),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(6446).Z})),(0,i.kt)("p",null,"One key advantage of using Serenity BDD is that you do not have to invest time in building and maintaining your own automation framework. Serenity BDD provides strong support for different types of automated acceptance testing, including:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Web testing with Selenium."),(0,i.kt)("li",{parentName:"ul"},"REST API testing with RestAssured."),(0,i.kt)("li",{parentName:"ul"},"Highly readable, maintainable and scalable automated testing with the Screenplay pattern."),(0,i.kt)("li",{parentName:"ul"},"BDD-style executable specifications with Cucumber")),(0,i.kt)("p",null,"Serenity not only reports on what requirements were tested, it also reports on ",(0,i.kt)("em",{parentName:"p"},"how")," they were tested. It includes step-by-step details of how a test played out, including optional screenshots, so your tests truly document what your application does."),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(6365).Z})),(0,i.kt)("p",null,"But Serenity is not just about reporting. The underlying aim of Serenity is to make it easy to quickly write well-structured, maintainable automated acceptance criteria, using your favourite BDD or conventional testing library. You can work with Behaviour-Driven-Development tools like Cucumber, or simply use JUnit (4 or 5). You can integrate with requirements stored in an external source (such as JIRA or any other test cases management tool), or just use a simple directory-based approach to organise your requirements."),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(1736).Z})),(0,i.kt)("p",null,"Serenity also provides a host of built-in features that make coding your test automation faster and more reliable. Testers working with Serenity typically report automating tests with less than half the code they would need for a conventional Selenium test."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Up until November 2014, Serenity went by the name of Thucydides. Thucydides was an Ancient Greek historian who wrote about the Peloponnesian War in the late 5th Century BCE. He was the first historian to write about events that he actually participated in, and in many cases, he wrote down the events that he directly witnessed."),(0,i.kt)("p",{parentName:"div"},"In a similar way Serenity BDD not only reports on test outcomes, but also records and documents how each scenario plays out, giving a particularly rich form of test reporting and living documentation."))),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(6538).Z})))}c.isMDXComponent=!0},6446:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-functional-coverage-c5e00a9cb3934c95180d52eb759546f8.png"},6538:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-hoplites-85b048d25348e05c8bfda5cb3ec042b6.jpeg"},1736:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-scenario-59cf31c744cdf53f45156c70676177d8.png"},6365:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-step-details-6d3780258da747646a6da905b2f4e9b8.png"}}]); \ No newline at end of file diff --git a/assets/js/83b05699.473872e1.js b/assets/js/83b05699.473872e1.js deleted file mode 100644 index c322d14d..00000000 --- a/assets/js/83b05699.473872e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[2857],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),l=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(n),m=i,y=p["".concat(u,".").concat(m)]||p[m]||d[m]||a;return n?r.createElement(y,o(o({ref:t},c),{},{components:n})):r.createElement(y,o({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=p;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var l=2;l{n.r(t),n.d(t,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const a={id:"user_guide_intro",title:"Introduction",sidebar_position:1},o="Introduction",s={unversionedId:"guide/user_guide_intro",id:"guide/user_guide_intro",isDocsHomePage:!1,title:"Introduction",description:"Serenity BDD is an open source library that aims to make the idea of living documentation a reality.",source:"@site/docs/guide/intro.md",sourceDirName:"guide",slug:"/guide/user_guide_intro",permalink:"/docs/guide/user_guide_intro",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master/docs/guide/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"user_guide_intro",title:"Introduction",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"How to Do Parallel Test Execution in Cucumber with Serenity",permalink:"/docs/tutorials/running_cucumber_scenarios_in_parallel"},next:{title:"Creating A New Project",permalink:"/docs/guide/getting_started"}},u=[],l={toc:u};function c(e){let{components:t,...a}=e;return(0,i.kt)("wrapper",(0,r.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"introduction"},"Introduction"),(0,i.kt)("p",null,"Serenity BDD is an open source library that aims to make the idea of living documentation a reality."),(0,i.kt)("p",null,"Serenity BDD helps you write cleaner and more maintainable automated acceptance and regression tests faster. Serenity also uses the test results to produce illustrated, narrative reports that document and describe what your application does and how it works. Serenity tells you not only what tests have been executed, but more importantly, what requirements have been tested."),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(6446).Z})),(0,i.kt)("p",null,"One key advantage of using Serenity BDD is that you do not have to invest time in building and maintaining your own automation framework. Serenity BDD provides strong support for different types of automated acceptance testing, including:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Web testing with Selenium."),(0,i.kt)("li",{parentName:"ul"},"REST API testing with RestAssured."),(0,i.kt)("li",{parentName:"ul"},"Highly readable, maintainable and scalable automated testing with the Screenplay pattern."),(0,i.kt)("li",{parentName:"ul"},"BDD-style executable specifications with Cucumber")),(0,i.kt)("p",null,"Serenity not only reports on what requirements were tested, it also reports on ",(0,i.kt)("em",{parentName:"p"},"how")," they were tested. It includes step-by-step details of how a test played out, including optional screenshots, so your tests truly document what your application does."),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(6365).Z})),(0,i.kt)("p",null,"But Serenity is not just about reporting. The underlying aim of Serenity is to make it easy to quickly write well-structured, maintainable automated acceptance criteria, using your favourite BDD or conventional testing library. You can work with Behaviour-Driven-Development tools like Cucumber, or simply use JUnit (4 or 5). You can integrate with requirements stored in an external source (such as JIRA or any other test cases management tool), or just use a simple directory-based approach to organise your requirements."),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(1736).Z})),(0,i.kt)("p",null,"Serenity also provides a host of built-in features that make coding your test automation faster and more reliable. Testers working with Serenity typically report automating tests with less than half the code they would need for a conventional Selenium test."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Up until November 2014, Serenity went by the name of Thucydides. Thucydides was an Ancient Greek historian who wrote about the Peloponnesian War in the late 5th Century BCE. He was the first historian to write about events that he actually participated in, and in many cases, he wrote down the events that he directly witnessed."),(0,i.kt)("p",{parentName:"div"},"In a similar way Serenity BDD not only reports on test outcomes, but also records and documents how each scenario plays out, giving a particularly rich form of test reporting and living documentation."))),(0,i.kt)("p",null,(0,i.kt)("img",{src:n(6538).Z})))}c.isMDXComponent=!0},6446:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-functional-coverage-c5e00a9cb3934c95180d52eb759546f8.png"},6538:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-hoplites-85b048d25348e05c8bfda5cb3ec042b6.jpeg"},1736:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-scenario-59cf31c744cdf53f45156c70676177d8.png"},6365:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/intro-step-details-6d3780258da747646a6da905b2f4e9b8.png"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.7e4b06a8.js b/assets/js/935f2afb.7e4b06a8.js new file mode 100644 index 00000000..fc0dbdb9 --- /dev/null +++ b/assets/js/935f2afb.7e4b06a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Your First Steps with Serenity BDD","items":[{"type":"link","label":"Your First Web Test","href":"/docs/tutorials/first_test"},{"type":"link","label":"Your First Screenplay Scenario","href":"/docs/tutorials/screenplay"},{"type":"link","label":"Your First API Test","href":"/docs/tutorials/rest"},{"type":"link","label":"Getting Started With Cucumber using Serenity BDD and Screenplay","href":"/docs/tutorials/cucumber-screenplay"},{"type":"link","label":"Migrating From Serenity BDD 3.x to Serenity BDD 4.x","href":"/docs/tutorials/migrating_to_serenity_4"},{"type":"link","label":"How to Do Parallel Test Execution in Cucumber with Serenity","href":"/docs/tutorials/running_cucumber_scenarios_in_parallel"},{"type":"link","label":"Three Strategies to Optimize Your Serenity BDD Reports","href":"/docs/tutorials/streamlining_your_serenity_reports"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Serenity Fundamentals","items":[{"type":"link","label":"Introduction","href":"/docs/guide/user_guide_intro"},{"type":"link","label":"Creating A New Project","href":"/docs/guide/getting_started"},{"type":"link","label":"Using Maven with Serenity","href":"/docs/guide/maven"},{"type":"link","label":"Step Libraries","href":"/docs/guide/step_libraries"},{"type":"link","label":"Interacting With Web Pages","href":"/docs/guide/page_objects"},{"type":"link","label":"Serenity Page Elements","href":"/docs/guide/page_elements"},{"type":"link","label":"Configuring Selenium WebDriver","href":"/docs/guide/driver_config"},{"type":"link","label":"Running Cucumber scenarios with Serenity","href":"/docs/guide/cucumber"}],"collapsed":true,"collapsible":true},{"type":"category","label":"The Screenplay Pattern","items":[{"type":"link","label":"Screenplay Fundamentals","href":"/docs/screenplay/screenplay_fundamentals"},{"type":"link","label":"Web Testing with Serenity Screenplay","href":"/docs/screenplay/screenplay_webdriver"},{"type":"link","label":"Working with REST APIs using Serenity Screenplay","href":"/docs/screenplay/screenplay_rest"},{"type":"link","label":"Making Screenplay Assertions with Serenity Ensure","href":"/docs/screenplay/screenplay_ensure"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Integrating in Spring","items":[{"type":"link","label":"Integration Testing in Spring","href":"/docs/spring/integration_testing_spring"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reporting and Living Documentation","items":[{"type":"link","label":"The Serenity Reports","href":"/docs/reporting/the_serenity_reports"},{"type":"link","label":"Living Documentation","href":"/docs/reporting/living_documentation"},{"type":"link","label":"Filtering Execution and Reports with Tags","href":"/docs/reporting/filtering_reports"},{"type":"link","label":"Additional Reports","href":"/docs/reporting/additional_reports"},{"type":"link","label":"Integrating with JIRA","href":"/docs/reporting/integrating_with_jira"},{"type":"link","label":"Custom Fields in Reports","href":"/docs/reporting/reports_custom_info"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Scaling Serenity","items":[{"type":"link","label":"Selenium Grid","href":"/docs/cloud/selenium-grid"},{"type":"link","label":"selenoid","href":"/docs/cloud/selenoid"},{"type":"link","label":"LambdaTest","href":"/docs/cloud/lambdatest"},{"type":"link","label":"BrowserStack","href":"/docs/cloud/browserstack"},{"type":"link","label":"SauceLabs","href":"/docs/cloud/saucelabs"},{"type":"link","label":"BitBar","href":"/docs/cloud/bitbar"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Mobile Testing with Serenity","items":[{"type":"link","label":"Running Serenity Tests on Appium","href":"/docs/mobile/appium"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference","items":[{"type":"link","label":"Serenity System Properties and Configuration","href":"/docs/reference/serenity-properties"}],"collapsed":true,"collapsible":true}]}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.da65bddb.js b/assets/js/935f2afb.da65bddb.js deleted file mode 100644 index ac128459..00000000 --- a/assets/js/935f2afb.da65bddb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Your First Steps with Serenity BDD","items":[{"type":"link","label":"Your First Web Test","href":"/docs/tutorials/first_test"},{"type":"link","label":"Your First Screenplay Scenario","href":"/docs/tutorials/screenplay"},{"type":"link","label":"Your First API Test","href":"/docs/tutorials/rest"},{"type":"link","label":"Getting Started With Cucumber using Serenity BDD and Screenplay","href":"/docs/tutorials/cucumber-screenplay"},{"type":"link","label":"Migrating From Serenity BDD 3.x to Serenity BDD 4.x","href":"/docs/tutorials/migrating_to_serenity_4"},{"type":"link","label":"How to Do Parallel Test Execution in Cucumber with Serenity","href":"/docs/tutorials/running_cucumber_scenarios_in_parallel"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Serenity Fundamentals","items":[{"type":"link","label":"Introduction","href":"/docs/guide/user_guide_intro"},{"type":"link","label":"Creating A New Project","href":"/docs/guide/getting_started"},{"type":"link","label":"Using Maven with Serenity","href":"/docs/guide/maven"},{"type":"link","label":"Step Libraries","href":"/docs/guide/step_libraries"},{"type":"link","label":"Interacting With Web Pages","href":"/docs/guide/page_objects"},{"type":"link","label":"Serenity Page Elements","href":"/docs/guide/page_elements"},{"type":"link","label":"Configuring Selenium WebDriver","href":"/docs/guide/driver_config"},{"type":"link","label":"Running Cucumber scenarios with Serenity","href":"/docs/guide/cucumber"}],"collapsed":true,"collapsible":true},{"type":"category","label":"The Screenplay Pattern","items":[{"type":"link","label":"Screenplay Fundamentals","href":"/docs/screenplay/screenplay_fundamentals"},{"type":"link","label":"Web Testing with Serenity Screenplay","href":"/docs/screenplay/screenplay_webdriver"},{"type":"link","label":"Working with REST APIs using Serenity Screenplay","href":"/docs/screenplay/screenplay_rest"},{"type":"link","label":"Making Screenplay Assertions with Serenity Ensure","href":"/docs/screenplay/screenplay_ensure"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Integrating in Spring","items":[{"type":"link","label":"Integration Testing in Spring","href":"/docs/spring/integration_testing_spring"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reporting and Living Documentation","items":[{"type":"link","label":"The Serenity Reports","href":"/docs/reporting/the_serenity_reports"},{"type":"link","label":"Living Documentation","href":"/docs/reporting/living_documentation"},{"type":"link","label":"Filtering Execution and Reports with Tags","href":"/docs/reporting/filtering_reports"},{"type":"link","label":"Additional Reports","href":"/docs/reporting/additional_reports"},{"type":"link","label":"Integrating with JIRA","href":"/docs/reporting/integrating_with_jira"},{"type":"link","label":"Custom Fields in Reports","href":"/docs/reporting/reports_custom_info"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Scaling Serenity","items":[{"type":"link","label":"Selenium Grid","href":"/docs/cloud/selenium-grid"},{"type":"link","label":"selenoid","href":"/docs/cloud/selenoid"},{"type":"link","label":"LambdaTest","href":"/docs/cloud/lambdatest"},{"type":"link","label":"BrowserStack","href":"/docs/cloud/browserstack"},{"type":"link","label":"SauceLabs","href":"/docs/cloud/saucelabs"},{"type":"link","label":"BitBar","href":"/docs/cloud/bitbar"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Mobile Testing with Serenity","items":[{"type":"link","label":"Running Serenity Tests on Appium","href":"/docs/mobile/appium"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference","items":[{"type":"link","label":"Serenity System Properties and Configuration","href":"/docs/reference/serenity-properties"}],"collapsed":true,"collapsible":true}]}}')}}]); \ No newline at end of file diff --git a/assets/js/main.74df7b53.js b/assets/js/main.74df7b53.js new file mode 100644 index 00000000..478f9963 --- /dev/null +++ b/assets/js/main.74df7b53.js @@ -0,0 +1,2 @@ +/*! For license information please see main.74df7b53.js.LICENSE.txt */ +(self.webpackChunkserenity_users_guide=self.webpackChunkserenity_users_guide||[]).push([[179],{9782:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Serenity BDD Users Manual",tagline:"Automated Acceptance Testing With Style",url:"https://serenity-bdd.github.io",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.ico",trailingSlash:!1,organizationName:"serenity-bdd",projectName:"documentation",presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/home/runner/work/serenity-bdd.github.io/serenity-bdd.github.io/sidebars.js",editUrl:"https://github.com/serenity-bdd/serenity-bdd.github.io/blob/master"},blog:{showReadingTime:!0,editUrl:"https://johnfergusonsmart.com/blog"},theme:{customCss:"/home/runner/work/serenity-bdd.github.io/serenity-bdd.github.io/src/css/custom.css"}}]],themeConfig:{navbar:{title:"Home",logo:{alt:"Serenity BDD Logo",src:"img/serenity-bdd-small.png"},items:[{type:"doc",docId:"tutorials/first_test",position:"left",label:"Tutorials"},{type:"doc",docId:"guide/user_guide_intro",position:"left",label:"User Manual"},{to:"blog",label:"Blog",position:"left"},{href:"https://www.serenity-dojo.com/serenity-bdd-enterprise-support",label:"Get Support",position:"right"},{type:"dropdown",label:"Learn Serenity BDD",position:"right",items:[{href:"https://expansion.serenity-dojo.com/courses/testing-web-applications-with-serenity-bdd",label:"Serenity BDD Online Training"},{href:"http://learnbdd.com/requirements-discovery-training",label:"BDD Requirements Discovery Training"},{href:"https://www.serenity-dojo.com/",label:"BDD And Test Automation Coaching"}]}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Tutorial",to:"docs/tutorials/first_test"}]},{title:"Community",items:[{label:"Gitter",href:"https://gitter.im/serenity-bdd/serenity-core"},{label:"Stack Overflow",href:"https://stackoverflow.com/questions/tagged/serenity-bdd"}]},{title:"Learn Serenity BDD",items:[{label:"The Serenity Dojo Training Library",href:"http://expansion.serenity-dojo.com"},{label:"Personalised Serenity BDD Coaching",href:"https://www.serenity-dojo.com/apply"}]},{title:"More",items:[{label:"Blog",to:"/blog"},{label:"GitHub",href:"https://github.com/serenity-bdd/serenity-core"}]}],copyright:"Copyright \xa9 2023 Serenity Dojo Ltd."},prism:{additionalLanguages:["java","scala"],theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]}},algolia:{appId:"V10PILA8X2",apiKey:"722dc898d5026266faadec59963be60a",indexName:"serenity-bdd",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1,switchConfig:{darkIcon:"\ud83c\udf1c",darkIconStyle:{},lightIcon:"\ud83c\udf1e",lightIconStyle:{}}},docs:{versionPersistence:"localStorage"},metadatas:[],hideableSidebar:!1},plugins:[["/home/runner/work/serenity-bdd.github.io/serenity-bdd.github.io/plugin/dynamic-routes",{routes:[{path:"/theserenitybook/latest",exact:!1,component:"/src/components/LegacyLink404"}]}]],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",customFields:{},themes:[],titleDelimiter:"|",noIndex:!1}},640:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(2203),l=n.n(i);const s=e=>{let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{align:"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,t.message),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},u=JSON.parse('{"/-deb":{"component":"c4f5d8e4","config":"5e9f5e1a"},"/blog-27a":{"component":"a6aa9e1f","sidebar":"814f3328","items":[{"content":"364e68ca"},{"content":"82c6c1dc"},{"content":"4a3a5cb1"}],"metadata":"b2b675dd"},"/blog/2023/02/02/index-777":{"component":"ccc49370","sidebar":"814f3328","content":"a50e347c"},"/blog/archive-f4c":{"component":"9e4087bc","archive":"b2f554cd"},"/blog/serenity-3.4.1-release-a73":{"component":"ccc49370","sidebar":"814f3328","content":"9b0b478f"},"/blog/tags-e13":{"component":"01a85c17","sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/locatorless-elements-84e":{"component":"6875c492","sidebar":"814f3328","items":[{"content":"82c6c1dc"},{"content":"4a3a5cb1"}],"metadata":"5c4f0d90"},"/blog/tags/reporting-b2d":{"component":"6875c492","sidebar":"814f3328","items":[{"content":"82c6c1dc"},{"content":"4a3a5cb1"}],"metadata":"cb9cecfd"},"/blog/tags/selenium-4-c90":{"component":"6875c492","sidebar":"814f3328","items":[{"content":"82c6c1dc"},{"content":"4a3a5cb1"}],"metadata":"9aeb17c1"},"/blog/whats-new-in-serenity-3.1.0-8f2":{"component":"ccc49370","sidebar":"814f3328","content":"5cdba952"},"/docs/tags-0cc":{"component":"3720c009","tags":"55960ee5"},"/markdown-page-be1":{"component":"1f391b9e","content":"393be207"},"/screenplay/web/screenplay-web-elements-064":{"component":"1f391b9e","content":"52eff6c9"},"/search-70c":{"component":"802c8227"},"/theserenitybook/latest-da4":{"component":"7b7bf1f9"},"/docs-227":{"component":"1be78505","versionMetadata":"935f2afb"},"/docs/cloud/bitbar-971":{"component":"17896441","content":"16ebfebc"},"/docs/cloud/browserstack-f38":{"component":"17896441","content":"44bbcc1c"},"/docs/cloud/lambdatest-6de":{"component":"17896441","content":"d21ba92f"},"/docs/cloud/saucelabs-30a":{"component":"17896441","content":"64223023"},"/docs/cloud/selenium-grid-084":{"component":"17896441","content":"a1a68211"},"/docs/cloud/selenoid-60c":{"component":"17896441","content":"4944066c"},"/docs/guide/cucumber-7f2":{"component":"17896441","content":"4d262bef"},"/docs/guide/driver_config-cf4":{"component":"17896441","content":"2a7ee7b4"},"/docs/guide/getting_started-259":{"component":"17896441","content":"d8224fc8"},"/docs/guide/maven-d9c":{"component":"17896441","content":"c6f47719"},"/docs/guide/page_elements-4dc":{"component":"17896441","content":"d078d492"},"/docs/guide/page_objects-6b8":{"component":"17896441","content":"40b7e58f"},"/docs/guide/step_libraries-846":{"component":"17896441","content":"9cee31f8"},"/docs/guide/user_guide_intro-a01":{"component":"17896441","content":"83b05699"},"/docs/mobile/appium-700":{"component":"17896441","content":"63441a2d"},"/docs/reference/serenity-properties-870":{"component":"17896441","content":"2e7f4390"},"/docs/reporting/additional_reports-ff6":{"component":"17896441","content":"e24bb847"},"/docs/reporting/filtering_reports-561":{"component":"17896441","content":"5613c9ed"},"/docs/reporting/integrating_with_jira-98c":{"component":"17896441","content":"8753baeb"},"/docs/reporting/living_documentation-26b":{"component":"17896441","content":"8c15a673"},"/docs/reporting/reports_custom_info-713":{"component":"17896441","content":"68c46c38"},"/docs/reporting/the_serenity_reports-2e8":{"component":"17896441","content":"f355ac6c"},"/docs/screenplay/screenplay_ensure-018":{"component":"17896441","content":"27688537"},"/docs/screenplay/screenplay_fundamentals-2cb":{"component":"17896441","content":"cf53798e"},"/docs/screenplay/screenplay_rest-b0d":{"component":"17896441","content":"dfbef622"},"/docs/screenplay/screenplay_webdriver-5db":{"component":"17896441","content":"28a1442d"},"/docs/spring/integration_testing_spring-2db":{"component":"17896441","content":"b49e0726"},"/docs/tutorials/cucumber-screenplay-3ed":{"component":"17896441","content":"500cccec"},"/docs/tutorials/first_test-01d":{"component":"17896441","content":"9855f4f4"},"/docs/tutorials/migrating_to_serenity_4-297":{"component":"17896441","content":"e9b89100"},"/docs/tutorials/rest-bbf":{"component":"17896441","content":"78f2a083"},"/docs/tutorials/running_cucumber_scenarios_in_parallel-1ad":{"component":"17896441","content":"7cd378c7"},"/docs/tutorials/screenplay-758":{"component":"17896441","content":"50e7f874"},"/docs/tutorials/streamlining_your_serenity_reports-b46":{"component":"17896441","content":"2f96067e"}}'),c={"01a85c17":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(4013)]).then(n.bind(n,94)),"@theme/BlogTagsListPage",94],"16ebfebc":[()=>n.e(6912).then(n.bind(n,1541)),"@site/docs/cloud/bitbar.md",1541],17896441:[()=>Promise.all([n.e(532),n.e(6159),n.e(7918)]).then(n.bind(n,9362)),"@theme/DocItem",9362],"1be78505":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(9727),n.e(9514)]).then(n.bind(n,8704)),"@theme/DocPage",8704],"1f391b9e":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(9727),n.e(3085)]).then(n.bind(n,7979)),"@theme/MDXPage",7979],27688537:[()=>n.e(6542).then(n.bind(n,857)),"@site/docs/screenplay/screenplay-ensure.md",857],"28a1442d":[()=>n.e(7258).then(n.bind(n,8263)),"@site/docs/screenplay/screenplay-webdriver.md",8263],"2a7ee7b4":[()=>n.e(4541).then(n.bind(n,5202)),"@site/docs/guide/driver_config.md",5202],"2e7f4390":[()=>n.e(3065).then(n.bind(n,6094)),"@site/docs/reference/serenity-properties.md",6094],"2f96067e":[()=>n.e(9518).then(n.bind(n,3113)),"@site/docs/tutorials/streamlining_your_serenity_reports.md",3113],"364e68ca":[()=>n.e(5506).then(n.bind(n,5884)),"@site/blog/2023-02-02/index.md?truncated=true",5884],"3720c009":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(3751)]).then(n.bind(n,3578)),"@theme/DocTagsListPage",3578],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"40b7e58f":[()=>n.e(7447).then(n.bind(n,4740)),"@site/docs/guide/page_objects.md",4740],"44bbcc1c":[()=>n.e(6561).then(n.bind(n,5788)),"@site/docs/cloud/browserstack.md",5788],"4944066c":[()=>n.e(3316).then(n.bind(n,8e3)),"@site/docs/cloud/selenoid.md",8e3],"4a3a5cb1":[()=>n.e(7915).then(n.bind(n,5731)),"@site/blog/2021-11-27/index.md?truncated=true",5731],"4d262bef":[()=>n.e(6539).then(n.bind(n,4890)),"@site/docs/guide/cucumber.md",4890],"500cccec":[()=>n.e(2274).then(n.bind(n,9394)),"@site/docs/tutorials/cucumber.md",9394],"50e7f874":[()=>n.e(5478).then(n.bind(n,3048)),"@site/docs/tutorials/screenplay.md",3048],"52eff6c9":[()=>n.e(5892).then(n.bind(n,3296)),"@site/src/pages/screenplay/web/screenplay-web-elements.md",3296],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"5613c9ed":[()=>n.e(5627).then(n.bind(n,4858)),"@site/docs/reporting/filtering-reports.md",4858],"5c4f0d90":[()=>n.e(3537).then(n.t.bind(n,7191,19)),"~blog/default/blog-tags-locatorless-elements-767.json",7191],"5cdba952":[()=>n.e(3809).then(n.bind(n,4051)),"@site/blog/2021-11-27/index.md",4051],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,9782)),"@generated/docusaurus.config",9782],"63441a2d":[()=>n.e(9347).then(n.bind(n,2312)),"@site/docs/mobile/appium.md",2312],64223023:[()=>n.e(7417).then(n.bind(n,494)),"@site/docs/cloud/saucelabs.md",494],"6875c492":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(9727),n.e(8610)]).then(n.bind(n,9404)),"@theme/BlogTagsPostsPage",9404],"68c46c38":[()=>n.e(8388).then(n.bind(n,7878)),"@site/docs/reporting/reports-custom-info.md",7878],"78f2a083":[()=>n.e(8299).then(n.bind(n,7261)),"@site/docs/tutorials/rest.md",7261],"7b7bf1f9":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(2258)]).then(n.bind(n,8920)),"/src/components/LegacyLink404",8920],"7cd378c7":[()=>n.e(9562).then(n.bind(n,1759)),"@site/docs/tutorials/running_cucumber_scenarios_in_parallel.md",1759],"802c8227":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(9499)]).then(n.bind(n,9343)),"/home/runner/work/serenity-bdd.github.io/serenity-bdd.github.io/node_modules/@docusaurus/theme-search-algolia/src/theme/SearchPage/index.js",9343],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"82c6c1dc":[()=>n.e(6917).then(n.bind(n,2411)),"@site/blog/2022-11-07/index.md?truncated=true",2411],"83b05699":[()=>n.e(2857).then(n.bind(n,4173)),"@site/docs/guide/intro.md",4173],"8753baeb":[()=>n.e(3804).then(n.bind(n,3117)),"@site/docs/reporting/jira.md",3117],"8c15a673":[()=>n.e(6588).then(n.bind(n,8579)),"@site/docs/reporting/living-documentation.md",8579],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9855f4f4":[()=>n.e(657).then(n.bind(n,5258)),"@site/docs/tutorials/first_test.md",5258],"9aeb17c1":[()=>n.e(626).then(n.t.bind(n,881,19)),"~blog/default/blog-tags-selenium-4-7e8.json",881],"9b0b478f":[()=>n.e(2929).then(n.bind(n,7389)),"@site/blog/2022-11-07/index.md",7389],"9cee31f8":[()=>n.e(7506).then(n.bind(n,4117)),"@site/docs/guide/steps.md",4117],"9e4087bc":[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(3608)]).then(n.bind(n,3012)),"@theme/BlogArchivePage",3012],a1a68211:[()=>n.e(6389).then(n.bind(n,1672)),"@site/docs/cloud/selenium-grid.md",1672],a50e347c:[()=>n.e(7483).then(n.bind(n,9628)),"@site/blog/2023-02-02/index.md",9628],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(9727),n.e(3089)]).then(n.bind(n,4428)),"@theme/BlogListPage",4428],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b49e0726:[()=>n.e(3283).then(n.bind(n,9647)),"@site/docs/spring/integration-testing-spring.md",9647],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(4195)]).then(n.bind(n,6396)),"@site/src/pages/index.js",6396],c6f47719:[()=>n.e(8368).then(n.bind(n,7305)),"@site/docs/guide/maven.md",7305],cb9cecfd:[()=>n.e(5576).then(n.t.bind(n,9040,19)),"~blog/default/blog-tags-reporting-bb8.json",9040],ccc49370:[()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(9727),n.e(6103)]).then(n.bind(n,4147)),"@theme/BlogPostPage",4147],cf53798e:[()=>n.e(7671).then(n.bind(n,7289)),"@site/docs/screenplay/screenplay_fundamentals.md",7289],d078d492:[()=>n.e(9151).then(n.bind(n,5864)),"@site/docs/guide/page_elements.md",5864],d21ba92f:[()=>n.e(8360).then(n.bind(n,7041)),"@site/docs/cloud/lambdatest.md",7041],d8224fc8:[()=>n.e(1196).then(n.bind(n,6131)),"@site/docs/guide/getting-started.md",6131],dfbef622:[()=>n.e(3045).then(n.bind(n,5205)),"@site/docs/screenplay/screenplay-rest.md",5205],e24bb847:[()=>n.e(6094).then(n.bind(n,3128)),"@site/docs/reporting/additional-reports.md",3128],e9b89100:[()=>n.e(5069).then(n.bind(n,2740)),"@site/docs/tutorials/migrating_to_serenity_4.md",2740],f355ac6c:[()=>n.e(5087).then(n.bind(n,3565)),"@site/docs/reporting/the_serentity_reports.md",3565]};const d=function(e){const t={};return function e(n,r){Object.keys(n).forEach((a=>{const o=n[a],i=r?r+"."+a:a;"object"===typeof o&&!!o&&Object.keys(o).length?e(o,i):t[i]=o}))}(e),t};const f=function(e,t){if("*"===e)return l()({loading:s,loader:()=>Promise.all([n.e(532),n.e(6159),n.e(6254),n.e(4608)]).then(n.bind(n,4608))});const a=u[e+"-"+t],o=[],i=[],f={},p=d(a);return Object.keys(p).forEach((e=>{const t=c[p[e]];t&&(f[e]=t[0],o.push(t[1]),i.push(t[2]))})),l().Map({loading:s,loader:f,modules:o,webpack:()=>i,render:(e,t)=>{const n=JSON.parse(JSON.stringify(a));Object.keys(e).forEach((t=>{let r=n;const a=t.split(".");for(let e=0;e"default"!==e));o&&o.length&&o.forEach((n=>{r[a[a.length-1]][n]=e[t][n]}))}));const o=n.component;return delete n.component,r.createElement(o,{...n,...t})}})},p=[{path:"/",component:f("/","deb"),exact:!0},{path:"/blog",component:f("/blog","27a"),exact:!0},{path:"/blog/2023/02/02/index",component:f("/blog/2023/02/02/index","777"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","f4c"),exact:!0},{path:"/blog/serenity-3.4.1-release",component:f("/blog/serenity-3.4.1-release","a73"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","e13"),exact:!0},{path:"/blog/tags/locatorless-elements",component:f("/blog/tags/locatorless-elements","84e"),exact:!0},{path:"/blog/tags/reporting",component:f("/blog/tags/reporting","b2d"),exact:!0},{path:"/blog/tags/selenium-4",component:f("/blog/tags/selenium-4","c90"),exact:!0},{path:"/blog/whats-new-in-serenity-3.1.0",component:f("/blog/whats-new-in-serenity-3.1.0","8f2"),exact:!0},{path:"/docs/tags",component:f("/docs/tags","0cc"),exact:!0},{path:"/markdown-page",component:f("/markdown-page","be1"),exact:!0},{path:"/screenplay/web/screenplay-web-elements",component:f("/screenplay/web/screenplay-web-elements","064"),exact:!0},{path:"/search",component:f("/search","70c"),exact:!0},{path:"/theserenitybook/latest",component:f("/theserenitybook/latest","da4")},{path:"/docs",component:f("/docs","227"),routes:[{path:"/docs/cloud/bitbar",component:f("/docs/cloud/bitbar","971"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/cloud/browserstack",component:f("/docs/cloud/browserstack","f38"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/cloud/lambdatest",component:f("/docs/cloud/lambdatest","6de"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/cloud/saucelabs",component:f("/docs/cloud/saucelabs","30a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/cloud/selenium-grid",component:f("/docs/cloud/selenium-grid","084"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/cloud/selenoid",component:f("/docs/cloud/selenoid","60c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/cucumber",component:f("/docs/guide/cucumber","7f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/driver_config",component:f("/docs/guide/driver_config","cf4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/getting_started",component:f("/docs/guide/getting_started","259"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/maven",component:f("/docs/guide/maven","d9c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/page_elements",component:f("/docs/guide/page_elements","4dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/page_objects",component:f("/docs/guide/page_objects","6b8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/step_libraries",component:f("/docs/guide/step_libraries","846"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/guide/user_guide_intro",component:f("/docs/guide/user_guide_intro","a01"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/mobile/appium",component:f("/docs/mobile/appium","700"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference/serenity-properties",component:f("/docs/reference/serenity-properties","870"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reporting/additional_reports",component:f("/docs/reporting/additional_reports","ff6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reporting/filtering_reports",component:f("/docs/reporting/filtering_reports","561"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reporting/integrating_with_jira",component:f("/docs/reporting/integrating_with_jira","98c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reporting/living_documentation",component:f("/docs/reporting/living_documentation","26b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reporting/reports_custom_info",component:f("/docs/reporting/reports_custom_info","713"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reporting/the_serenity_reports",component:f("/docs/reporting/the_serenity_reports","2e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/screenplay/screenplay_ensure",component:f("/docs/screenplay/screenplay_ensure","018"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/screenplay/screenplay_fundamentals",component:f("/docs/screenplay/screenplay_fundamentals","2cb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/screenplay/screenplay_rest",component:f("/docs/screenplay/screenplay_rest","b0d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/screenplay/screenplay_webdriver",component:f("/docs/screenplay/screenplay_webdriver","5db"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/spring/integration_testing_spring",component:f("/docs/spring/integration_testing_spring","2db"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/cucumber-screenplay",component:f("/docs/tutorials/cucumber-screenplay","3ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/first_test",component:f("/docs/tutorials/first_test","01d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/migrating_to_serenity_4",component:f("/docs/tutorials/migrating_to_serenity_4","297"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/rest",component:f("/docs/tutorials/rest","bbf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/running_cucumber_scenarios_in_parallel",component:f("/docs/tutorials/running_cucumber_scenarios_in_parallel","1ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/screenplay",component:f("/docs/tutorials/screenplay","758"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/streamlining_your_serenity_reports",component:f("/docs/tutorials/streamlining_your_serenity_reports","b46"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"*",component:f("*")}];var g=n(412),m=n(6291),h=n(9913),b=n(5757),y=n(5977),v=n(4865),w=n.n(v);const k=[n(2497),n(2448),n(6743),n(2295)];function S(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{var r,a;const o=null!==(a=null===(r=null==t?void 0:t.default)||void 0===r?void 0:r[e])&&void 0!==a?a:t[e];o&&o(...n)}))}const E={onRouteUpdate(){for(var e=arguments.length,t=new Array(e),n=0;n{const{component:t}=e.route;if(t&&t.preload)return t.preload()})))}const T={};const C=function(e){if(T[e.pathname])return{...e,pathname:T[e.pathname]};let t=e.pathname||"/";return t=t.trim().replace(/\/index\.html$/,""),""===t&&(t="/"),T[e.pathname]=t,{...e,pathname:t}};w().configure({showSpinner:!1});class O extends r.Component{constructor(e){super(e),this.previousLocation=null,this.progressBarTimeout=null,this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){const n=e.location!==this.props.location,{routes:r,delay:a=1e3}=this.props;if(n){const t=C(e.location);return this.startProgressBar(a),this.previousLocation=C(this.props.location),this.setState({nextRouteHasLoaded:!1}),x(r,t.pathname).then((()=>{E.onRouteUpdate({previousLocation:this.previousLocation,location:t}),this.previousLocation=null,this.setState({nextRouteHasLoaded:!0},this.stopProgressBar);const{hash:e}=t;if(e){const t=decodeURIComponent(e.substring(1)),n=document.getElementById(t);n&&n.scrollIntoView()}else window.scrollTo(0,0)})).catch((e=>console.warn(e))),!1}return!!t.nextRouteHasLoaded}clearProgressBarTimeout(){this.progressBarTimeout&&(clearTimeout(this.progressBarTimeout),this.progressBarTimeout=null)}startProgressBar(e){this.clearProgressBarTimeout(),this.progressBarTimeout=setTimeout((()=>{E.onRouteUpdateDelayed({location:C(this.props.location)}),w().start()}),e)}stopProgressBar(){this.clearProgressBarTimeout(),w().done()}render(){const{children:e,location:t}=this.props;return r.createElement(y.AW,{location:C(t),render:()=>e})}}const A=(0,y.EN)(O);var P=n(9105),L=n(2263);const N="docusaurus-base-url-issue-banner-container",R="docusaurus-base-url-issue-banner-suggestion-container",I="__DOCUSAURUS_INSERT_BASEURL_BANNER";function D(e){return"\nwindow['"+I+"'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['"+I+"'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('"+N+"');\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[I]=!1}),[]),r.createElement(r.Fragment,null,!g.Z.canUseDOM&&r.createElement(P.Z,null,r.createElement("script",null,D(e))),r.createElement("div",{id:N}))}function M(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,L.Z)(),{pathname:n}=(0,y.TH)();return t&&n===e?r.createElement(F,null):null}const B=function(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)};const U=function(){return r.createElement(b.M,null,r.createElement(h.t,null,r.createElement(B,null,r.createElement(M,null),r.createElement(A,{routes:p},(0,m.Z)(p)))))};const j=function(e){if("undefined"==typeof document)return!1;const t=document.createElement("link");try{if(t.relList&&"function"==typeof t.relList.supports)return t.relList.supports(e)}catch(n){return!1}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)}))},z={};const $=function(e){return new Promise((t=>{z[e]?t():j(e).then((()=>{t(),z[e]=!0})).catch((()=>{}))}))},H={},G={},W=()=>!(!("connection"in navigator)||-1===(navigator.connection.effectiveType||"").indexOf("2g")||!navigator.connection.saveData),V=e=>Array.prototype.concat.apply([],e),q={prefetch:e=>{if(!(e=>!W()&&!G[e]&&!H[e])(e))return!1;H[e]=!0;const t=(0,_.f)(p,e);return V(t.map((e=>{return t=e.route.path,V(Object.entries(u).filter((e=>{let[n]=e;return n.replace(/(-[^-]+)$/,"")===t})).map((e=>{let[,t]=e;return Object.values(d(t))})));var t}))).forEach((e=>{const t=n.gca(e);t&&!/undefined/.test(t)&&$(t)})),!0},preload:e=>!!(e=>!W()&&!G[e])(e)&&(G[e]=!0,x(p,e),!0)};if(g.Z.canUseDOM){window.docusaurus=q;const e=a.hydrate;x(p,window.location.pathname).then((()=>{e(r.createElement(o.VK,null,r.createElement(U,null)),document.getElementById("__docusaurus"))}))}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=!("undefined"==typeof window||!window.document||!window.document.createElement),a={canUseDOM:r,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&!!window.screen}},9105:(e,t,n)=>{"use strict";n.d(t,{Z:()=>he});var r,a,o,i,l=n(7294),s=n(5697),u=n.n(s),c=n(3524),d=n.n(c),f=n(9590),p=n.n(f),g=n(7418),m=n.n(g),h="bodyAttributes",b="htmlAttributes",y="titleAttributes",v={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},w=(Object.keys(v).map((function(e){return v[e]})),"charset"),k="cssText",S="href",E="http-equiv",_="innerHTML",x="itemprop",T="name",C="property",O="rel",A="src",P="target",L={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},N="defaultTitle",R="defer",I="encodeSpecialCharacters",D="onChangeClientState",F="titleTemplate",M=Object.keys(L).reduce((function(e,t){return e[L[t]]=t,e}),{}),B=[v.NOSCRIPT,v.SCRIPT,v.STYLE],U="data-react-helmet",j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},$=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},W=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},V=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},q=function(e){var t=X(e,v.TITLE),n=X(e,F);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=X(e,N);return t||r||void 0},Z=function(e){return X(e,D)||function(){}},Y=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return H({},e,t)}),{})},K=function(e,t){return t.filter((function(e){return void 0!==e[v.BASE]})).map((function(e){return e[v.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},J=(r=Date.now(),function(e){var t=Date.now();t-r>16?(r=t,e(t)):setTimeout((function(){J(e)}),0)}),ee=function(e){return clearTimeout(e)},te="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||J:n.g.requestAnimationFrame||J,ne="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||ee:n.g.cancelAnimationFrame||ee,re=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},ae=null,oe=function(e,t){var n=e.baseTag,r=e.bodyAttributes,a=e.htmlAttributes,o=e.linkTags,i=e.metaTags,l=e.noscriptTags,s=e.onChangeClientState,u=e.scriptTags,c=e.styleTags,d=e.title,f=e.titleAttributes;se(v.BODY,r),se(v.HTML,a),le(d,f);var p={baseTag:ue(v.BASE,n),linkTags:ue(v.LINK,o),metaTags:ue(v.META,i),noscriptTags:ue(v.NOSCRIPT,l),scriptTags:ue(v.SCRIPT,u),styleTags:ue(v.STYLE,c)},g={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(g[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,g,m)},ie=function(e){return Array.isArray(e)?e.join(""):e},le=function(e,t){void 0!==e&&document.title!==e&&(document.title=ie(e)),se(v.TITLE,t)},se=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(U),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l=0;d--)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute(U):n.getAttribute(U)!==i.join(",")&&n.setAttribute(U,i.join(","))}},ue=function(e,t){var n=document.head||document.querySelector(v.HEAD),r=n.querySelectorAll(e+"["+"data-react-helmet]"),a=Array.prototype.slice.call(r),o=[],i=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===_)n.innerHTML=t.innerHTML;else if(r===k)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var l=void 0===t[r]?"":t[r];n.setAttribute(r,l)}n.setAttribute(U,"true"),a.some((function(e,t){return i=t,n.isEqualNode(e)}))?a.splice(i,1):o.push(n)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),o.forEach((function(e){return n.appendChild(e)})),{oldTags:a,newTags:o}},ce=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},de=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[L[n]||n]=e[n],t}),t)},fe=function(e,t,n){switch(e){case v.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(r={key:e})[U]=!0,a=de(n,r),[l.createElement(v.TITLE,a,e)];var e,n,r,a},toString:function(){return function(e,t,n,r){var a=ce(n),o=ie(t);return a?"<"+e+' data-react-helmet="true" '+a+">"+V(o,r)+"":"<"+e+' data-react-helmet="true">'+V(o,r)+""}(e,t.title,t.titleAttributes,n)}};case h:case b:return{toComponent:function(){return de(t)},toString:function(){return ce(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var r,a=((r={key:n})[U]=!0,r);return Object.keys(t).forEach((function(e){var n=L[e]||e;if(n===_||n===k){var r=t.innerHTML||t.cssText;a.dangerouslySetInnerHTML={__html:r}}else a[n]=t[e]})),l.createElement(e,a)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!(e===_||e===k)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+V(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===B.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+a+(i?"/>":">"+o+"")}),"")}(e,t,n)}}}},pe=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.linkTags,i=e.metaTags,l=e.noscriptTags,s=e.scriptTags,u=e.styleTags,c=e.title,d=void 0===c?"":c,f=e.titleAttributes;return{base:fe(v.BASE,t,r),bodyAttributes:fe(h,n,r),htmlAttributes:fe(b,a,r),link:fe(v.LINK,o,r),meta:fe(v.META,i,r),noscript:fe(v.NOSCRIPT,l,r),script:fe(v.SCRIPT,s,r),style:fe(v.STYLE,u,r),title:fe(v.TITLE,{title:d,titleAttributes:f},r)}},ge=d()((function(e){return{baseTag:K([S,P],e),bodyAttributes:Y(h,e),defer:X(e,R),encode:X(e,I),htmlAttributes:Y(b,e),linkTags:Q(v.LINK,[O,S],e),metaTags:Q(v.META,[T,w,E,C,x],e),noscriptTags:Q(v.NOSCRIPT,[_],e),onChangeClientState:Z(e),scriptTags:Q(v.SCRIPT,[A,_],e),styleTags:Q(v.STYLE,[k],e),title:q(e),titleAttributes:Y(y,e)}}),(function(e){ae&&ne(ae),e.defer?ae=te((function(){oe(e,(function(){ae=null}))})):(oe(e),ae=null)}),pe)((function(){return null})),me=(a=ge,i=o=function(e){function t(){return z(this,t),W(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!p()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case v.SCRIPT:case v.NOSCRIPT:return{innerHTML:t};case v.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,a=e.newChildProps,o=e.nestedChildren;return H({},r,((t={})[n.type]=[].concat(r[n.type]||[],[H({},a,this.mapNestedChildrenToProps(n,o))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case v.TITLE:return H({},a,((t={})[r.type]=i,t.titleAttributes=H({},o),t));case v.BODY:return H({},a,{bodyAttributes:H({},o)});case v.HTML:return H({},a,{htmlAttributes:H({},o)})}return H({},a,((n={})[r.type]=H({},o),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=H({},t);return Object.keys(e).forEach((function(t){var r;n=H({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return l.Children.forEach(e,(function(e){if(e&&e.props){var a=e.props,o=a.children,i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[M[n]||n]=e[n],t}),t)}(G(a,["children"]));switch(n.warnOnInvalidChildren(e,o),e.type){case v.LINK:case v.META:case v.NOSCRIPT:case v.SCRIPT:case v.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:i,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:i,nestedChildren:o})}}})),t=this.mapArrayTypeChildrenToProps(r,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=G(e,["children"]),r=H({},n);return t&&(r=this.mapChildrenToProps(t,r)),l.createElement(a,r)},$(t,null,[{key:"canUseDOM",set:function(e){a.canUseDOM=e}}]),t}(l.Component),o.propTypes={base:u().object,bodyAttributes:u().object,children:u().oneOfType([u().arrayOf(u().node),u().node]),defaultTitle:u().string,defer:u().bool,encodeSpecialCharacters:u().bool,htmlAttributes:u().object,link:u().arrayOf(u().object),meta:u().arrayOf(u().object),noscript:u().arrayOf(u().object),onChangeClientState:u().func,script:u().arrayOf(u().object),style:u().arrayOf(u().object),title:u().string,titleAttributes:u().object,titleTemplate:u().string},o.defaultProps={defer:!0,encodeSpecialCharacters:!0},o.peek=a.peek,o.rewind=function(){var e=a.rewind();return e||(e=pe({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},i);me.renderStatic=me.rewind;const he=function(e){return l.createElement(me,{...e})}},9913:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);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)}},5757:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(9782);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"tutorials/first_test","docs":[{"id":"cloud/bitbar","path":"/docs/cloud/bitbar","sidebar":"tutorialSidebar"},{"id":"cloud/browserstack","path":"/docs/cloud/browserstack","sidebar":"tutorialSidebar"},{"id":"cloud/lambdatest","path":"/docs/cloud/lambdatest","sidebar":"tutorialSidebar"},{"id":"cloud/saucelabs","path":"/docs/cloud/saucelabs","sidebar":"tutorialSidebar"},{"id":"cloud/selenium-grid","path":"/docs/cloud/selenium-grid","sidebar":"tutorialSidebar"},{"id":"cloud/selenoid","path":"/docs/cloud/selenoid","sidebar":"tutorialSidebar"},{"id":"guide/cucumber","path":"/docs/guide/cucumber","sidebar":"tutorialSidebar"},{"id":"guide/driver_config","path":"/docs/guide/driver_config","sidebar":"tutorialSidebar"},{"id":"guide/getting_started","path":"/docs/guide/getting_started","sidebar":"tutorialSidebar"},{"id":"guide/maven","path":"/docs/guide/maven","sidebar":"tutorialSidebar"},{"id":"guide/page_elements","path":"/docs/guide/page_elements","sidebar":"tutorialSidebar"},{"id":"guide/page_objects","path":"/docs/guide/page_objects","sidebar":"tutorialSidebar"},{"id":"guide/step_libraries","path":"/docs/guide/step_libraries","sidebar":"tutorialSidebar"},{"id":"guide/user_guide_intro","path":"/docs/guide/user_guide_intro","sidebar":"tutorialSidebar"},{"id":"mobile/appium","path":"/docs/mobile/appium","sidebar":"tutorialSidebar"},{"id":"reference/serenity-properties","path":"/docs/reference/serenity-properties","sidebar":"tutorialSidebar"},{"id":"reporting/additional_reports","path":"/docs/reporting/additional_reports","sidebar":"tutorialSidebar"},{"id":"reporting/filtering_reports","path":"/docs/reporting/filtering_reports","sidebar":"tutorialSidebar"},{"id":"reporting/integrating_with_jira","path":"/docs/reporting/integrating_with_jira","sidebar":"tutorialSidebar"},{"id":"reporting/living_documentation","path":"/docs/reporting/living_documentation","sidebar":"tutorialSidebar"},{"id":"reporting/reports_custom_info","path":"/docs/reporting/reports_custom_info","sidebar":"tutorialSidebar"},{"id":"reporting/the_serenity_reports","path":"/docs/reporting/the_serenity_reports","sidebar":"tutorialSidebar"},{"id":"screenplay/screenplay_ensure","path":"/docs/screenplay/screenplay_ensure","sidebar":"tutorialSidebar"},{"id":"screenplay/screenplay_fundamentals","path":"/docs/screenplay/screenplay_fundamentals","sidebar":"tutorialSidebar"},{"id":"screenplay/screenplay_rest","path":"/docs/screenplay/screenplay_rest","sidebar":"tutorialSidebar"},{"id":"screenplay/screenplay_webdriver","path":"/docs/screenplay/screenplay_webdriver","sidebar":"tutorialSidebar"},{"id":"spring/integration_testing_spring","path":"/docs/spring/integration_testing_spring","sidebar":"tutorialSidebar"},{"id":"tutorials/cucumber-screenplay","path":"/docs/tutorials/cucumber-screenplay","sidebar":"tutorialSidebar"},{"id":"tutorials/first_test","path":"/docs/tutorials/first_test","sidebar":"tutorialSidebar"},{"id":"tutorials/migrating_to_serenity_4","path":"/docs/tutorials/migrating_to_serenity_4","sidebar":"tutorialSidebar"},{"id":"tutorials/rest","path":"/docs/tutorials/rest","sidebar":"tutorialSidebar"},{"id":"tutorials/running_cucumber_scenarios_in_parallel","path":"/docs/tutorials/running_cucumber_scenarios_in_parallel","sidebar":"tutorialSidebar"},{"id":"tutorials/screenplay","path":"/docs/tutorials/screenplay","sidebar":"tutorialSidebar"},{"id":"tutorials/streamlining_your_serenity_reports","path":"/docs/tutorials/streamlining_your_serenity_reports","sidebar":"tutorialSidebar"}]}]}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.0.0-beta.6","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.0.0-beta.6"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.0.0-beta.6"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.0.0-beta.6"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.0.0-beta.6"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.0.0-beta.6"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.0.0-beta.6"},"dynamic-routes":{"type":"project"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},6291:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(8790).H},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5757);const o=function(){return(0,r.useContext)(a._)}},2203:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(412),a=n(9782);const o=e=>{if(r.Z.canUseDOM){const{themeConfig:{prism:t={}}}=a.default,{additionalLanguages:r=[]}=t;window.Prism=e,r.forEach((e=>{n(7783)("./prism-"+e)})),delete window.Prism}}},2448:(e,t,n)=>{"use strict";var r=a(n(7410));function a(e){return e&&e.__esModule?e:{default:e}}(0,a(n(467)).default)(r.default)},71:(e,t,n)=>{"use strict";n.d(t,{lX:()=>E,q_:()=>A,ob:()=>m,PP:()=>L,Ep:()=>g,Hp:()=>h});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),a=l(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var u=n(2177);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(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 p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function g(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 m(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(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function h(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function b(){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=m(e,t,f(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=p(n);a&&a!==g&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),h=0;h{"use strict";n.r(t)},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418: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,l,s=a(e),u=1;u{"use strict";n.r(t),n.d(t,{default:()=>l});var r,a,o,i=(r=0,a={util:{encode:function(e){return e instanceof o?new o(e.type,a.util.encode(e.content),e.alias):"Array"===a.util.type(e)?e.map(a.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(k instanceof s)){if(m&&v!=t.length-1){if(f.lastIndex=w,!(C=f.exec(e)))break;for(var S=C.index+(g?C[1].length:0),E=C.index+C[0].length,_=v,x=w,T=t.length;_=(x+=t[_].length)&&(++v,w=x);if(t[v]instanceof s)continue;O=_-v,k=e.slice(w,x),C.index-=w}else{f.lastIndex=0;var C=f.exec(k),O=1}if(C){g&&(h=C[1]?C[1].length:0),E=(S=C.index+h)+(C=C[0].slice(h)).length;var A=k.slice(0,S),P=k.slice(E),L=[v,O];A&&(++v,w+=A.length,L.push(A));var N=new s(u,p?a.tokenize(C,p):C,b,C,m);if(L.push(N),P&&L.push(P),Array.prototype.splice.apply(t,L),1!=O&&a.matchGrammar(e,t,n,v,w,!0,u),i)break}else if(i)break}}}}},hooks:{add:function(){},run:function(e,t){}},tokenize:function(e,t,n){var r=[e],o=t.rest;if(o){for(var i in o)t[i]=o[i];delete t.rest}return a.matchGrammar(e,r,t,0,0,!1),r}},(o=a.Token=function(e,t,n,r,a){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!a}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===a.util.type(e))return e.map((function(n){return o.stringify(n,t,e)})).join("");var r={type:e.type,content:o.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var i="Array"===a.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,i)}var l=Object.keys(r.attributes).map((function(e){return e+'="'+(r.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+(l?" "+l:"")+">"+r.content+""},a);i.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,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/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"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]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:i.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:i.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},i.languages.insertBefore("markup","cdata",a)}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.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}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};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]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/,lookbehind:!0,greedy:!0,inside:r}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|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|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|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|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|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;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\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:/[{}[\];(),.:]/},i.languages.c=i.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,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(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/[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|[?:~]|[-+*/%&|^!=<>]=?/}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},i.languages.c.string],comment:i.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:i.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete i.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|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|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;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,/\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:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),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","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(i),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;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:RegExp("[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},n.tag))}(i),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector,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]+\b)/,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]{1,2}){3,4}\b/i,alias:"color"},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(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)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})}(i),i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|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:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"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:i.languages.javascript},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.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:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{"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:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.markup.tag.addInlined("script","javascript"),i.languages.js=i.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+(?:\s+(?:[\w.:$-]+(?:=(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s{'">=]+|\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}))?|\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(n).join(""):""},r=function(t){for(var a=[],o=0;o0&&a[a.length-1].tagName===n(i.content[0].content[1])&&a.pop():"/>"===i.content[i.content.length-1].content||a.push({tagName:n(i.content[0].content[1]),openedBraces:0}):a.length>0&&"punctuation"===i.type&&"{"===i.content?a[a.length-1].openedBraces++:a.length>0&&a[a.length-1].openedBraces>0&&"punctuation"===i.type&&"}"===i.content?a[a.length-1].openedBraces--:l=!0),(l||"string"==typeof i)&&a.length>0&&0===a[a.length-1].openedBraces){var s=n(i);o0&&("string"==typeof t[o-1]||"plain-text"===t[o-1].type)&&(s=n(t[o-1])+s,t.splice(o-1,1),o--),t[o]=new e.Token("plain-text",s,null,s)}i.content&&"string"!=typeof i.content&&r(i.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||r(e.tokens)}))}(i),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(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|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|for|finally|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|location|navigator|performance|(?:local|session)Storage|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",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})}(i),i.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},i.languages.go=i.languages.extend("clike",{string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,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(?:_|iota|nil|true|false)\b/,number:/(?:\b0x[a-f\d]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[-+]?\d+)?)i?/i,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/}),delete i.languages.go["class-name"],i.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:i.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*)[a-zA-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[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}/,punctuation:/[!(){}\[\]:=,]/,constant:/\b(?!ID\b)[A-Z][A-Z_\d]*\b/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),g=f.indexOf(p);if(g>-1){++a;var m=f.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(g+p.length),y=[];m&&y.push.apply(y,i([m])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(i),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/i,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")}))}(i),i.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},i.languages.webmanifest=i.languages.json,i.languages.less=i.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*:)/i,operator:/[+\-*\/]/}),i.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),i.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:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,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/,{pattern:/(\()(?:addsuffix|abspath|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(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?!\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:/^---|---$/,"font-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:/``.+?``|`[^`\r\n]+`/,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:/~~?/}},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"].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]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete i.languages.objectivec["class-name"],i.languages.objc=i.languages.objectivec,i.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?[\d_]+)?)/i,directive:{pattern:/\B#\w+/,alias:"important"},label:{pattern:/\B~\w+/,alias:"function"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"variable"},module:{pattern:/\b[A-Z]\w+/,alias:"variable"},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:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/[(){}\[\]|.,:;]|\b_\b/},i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\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]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\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:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|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(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},i.languages.python["string-interpolation"].inside.interpolation.inside.rest=i.languages.python,i.languages.py=i.languages.python,i.languages.reason=i.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(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),i.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete i.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,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]+)*)*/,lookbehind:!0}})}(i),i.languages.scss=i.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|[^}][^:{}]*[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),i.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|forward|for|each|while|import|use|extend|debug|warn|mixin|include|function|return|content)\b/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),i.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),i.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|with|show|hide)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),i.languages.scss.atrule.inside.rest=i.languages.scss,i.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},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:/url\((["']?).*?\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+)(?:(?:if|else|for|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(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)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(?:true|false)\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:/(^\s*)@.+/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]*)(?:if|else|for|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:/[{}()\[\];:.]/}}(i),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},keyword:/\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),delete e.languages.typescript.parameter;var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{"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}(i),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t);var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(i),i.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|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|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!#$%&'*+\-./:<=>?@\\^_`|~]+/i,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:/[()]/},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(/true|false/.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}(i);const l=i},2503:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},2886:()=>{Prism.languages.scala=Prism.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/}),Prism.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:Prism.languages.scala}}},string:/[\s\S]+/}}}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function},7783:(e,t,n)=>{var r={"./prism-java":2503,"./prism-scala":2886};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=7783},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,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}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n