From 8570208771f43fbdfa00857ed374b5c0777148b3 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 21 Aug 2022 23:57:07 +0200 Subject: [PATCH 001/196] code review --- src/docs/asciidoc/v2/faq.adoc | 4 ++-- src/docs/asciidoc/v2/getting-started.adoc | 2 +- src/docs/asciidoc/v2/index.adoc | 2 +- src/docs/asciidoc/v2/migrating-from-springfox.adoc | 2 +- src/docs/asciidoc/v2/modules.adoc | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/docs/asciidoc/v2/faq.adoc b/src/docs/asciidoc/v2/faq.adoc index 33b8ce6..71dda32 100644 --- a/src/docs/asciidoc/v2/faq.adoc +++ b/src/docs/asciidoc/v2/faq.adoc @@ -918,13 +918,13 @@ image::img/static_content_transformation.png[Illustrative example] === What is the compatibility matrix of `springdoc-openapi` with `spring-boot` ? `springdoc-openapi 2.x` is compatible with `spring-boot 3`. -In general, **you should only pick the last stable version as per today 2.0.0-M4.** +In general, **you should only pick the last stable version as per today 2.0.0-M5.** More precisely, this the exhaustive list of spring-boot versions against which `springdoc-openapi` has been built: |=== | spring-boot Versions | Minimum springdoc-openapi Versions -|`3.0.x` | `2.0.0-M4`+ +|`3.0.x` | `2.0.0-M5`+ |`2.6.x`, `1.5.x` | `1.6.0`+ |`2.5.x`, `1.5.x` | `1.5.9`+ |`2.4.x`, `1.5.x` | `1.5.0`+ diff --git a/src/docs/asciidoc/v2/getting-started.adoc b/src/docs/asciidoc/v2/getting-started.adoc index a7861ee..6c7b4be 100644 --- a/src/docs/asciidoc/v2/getting-started.adoc +++ b/src/docs/asciidoc/v2/getting-started.adoc @@ -8,7 +8,7 @@ For the integration between spring-boot and swagger-ui, add the library to the l org.springdoc springdoc-openapi-starter-webmvc-ui - 2.0.0-M4 + 2.0.0-M5 ---- diff --git a/src/docs/asciidoc/v2/index.adoc b/src/docs/asciidoc/v2/index.adoc index 57d56cf..ecd3d02 100644 --- a/src/docs/asciidoc/v2/index.adoc +++ b/src/docs/asciidoc/v2/index.adoc @@ -1,4 +1,4 @@ -= springdoc-openapi v2.0.0-M4 += springdoc-openapi v2.0.0-M5 Library for OpenAPI 3 with spring-boot By Badr NASS LAHSEN include::_attributes.adoc[] diff --git a/src/docs/asciidoc/v2/migrating-from-springfox.adoc b/src/docs/asciidoc/v2/migrating-from-springfox.adoc index 7b4a203..4ce0bfa 100644 --- a/src/docs/asciidoc/v2/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/v2/migrating-from-springfox.adoc @@ -8,7 +8,7 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 2.0.0-M4 + 2.0.0-M5 ---- diff --git a/src/docs/asciidoc/v2/modules.adoc b/src/docs/asciidoc/v2/modules.adoc index 87a32dd..b36bde8 100644 --- a/src/docs/asciidoc/v2/modules.adoc +++ b/src/docs/asciidoc/v2/modules.adoc @@ -18,7 +18,7 @@ image::img/common.png[Architecture] org.springdoc springdoc-openapi-starter-webmvc-api - 2.0.0-M4 + 2.0.0-M5 ---- @@ -43,7 +43,7 @@ springdoc.api-docs.path=/api-docs org.springdoc springdoc-openapi-starter-webflux-ui - 2.0.0-M4 + 2.0.0-M5 ---- From 7b76b0b8c126fe71aadc9fc12f5add1034a60400 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 21 Aug 2022 23:58:18 +0200 Subject: [PATCH 002/196] prepare for next release --- docs/v2/faq.html | 6 +++--- docs/v2/getting-started.html | 4 ++-- docs/v2/index.html | 18 +++++++++--------- docs/v2/migrating-from-springfox.html | 4 ++-- docs/v2/modules.html | 6 +++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/v2/faq.html b/docs/v2/faq.html index a61b08f..63f4542 100644 --- a/docs/v2/faq.html +++ b/docs/v2/faq.html @@ -1801,7 +1801,7 @@

springdoc-openapi 2.x is compatible with spring-boot 3.

-

In general, you should only pick the last stable version as per today 2.0.0-M4.

+

In general, you should only pick the last stable version as per today 2.0.0-M5.

More precisely, this the exhaustive list of spring-boot versions against which springdoc-openapi has been built:

@@ -1818,7 +1818,7 @@

3.0.x

-

2.0.0-M4+

+

2.0.0-M5+

2.6.x, 1.5.x

@@ -1852,7 +1852,7 @@

diff --git a/docs/v2/getting-started.html b/docs/v2/getting-started.html index 2982607..cdc0cb4 100644 --- a/docs/v2/getting-started.html +++ b/docs/v2/getting-started.html @@ -40,7 +40,7 @@

Getting S
   <dependency>
       <groupId>org.springdoc</groupId>
       <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-      <version>2.0.0-M4</version>
+      <version>2.0.0-M5</version>
    </dependency>
@@ -96,7 +96,7 @@

Getting S diff --git a/docs/v2/index.html b/docs/v2/index.html index d1f1a7d..3e972a3 100644 --- a/docs/v2/index.html +++ b/docs/v2/index.html @@ -6,7 +6,7 @@ -springdoc-openapi v2.0.0-M4 +springdoc-openapi v2.0.0-M5 - + + + + + + + - + + + + + + + + +
Table of Contents
  • 1. Introduction
  • From 33e0391ce19911edda3bd5308452f9886785cb02 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sat, 27 Aug 2022 13:28:27 +0200 Subject: [PATCH 009/196] doc test --- docs/v2/index.html | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/v2/index.html b/docs/v2/index.html index 53b02e4..8e48c60 100644 --- a/docs/v2/index.html +++ b/docs/v2/index.html @@ -17,6 +17,19 @@
- - - -
@@ -214,6 +202,18 @@

springdoc-openapi v2.0.0-M5

+ + + +
From 894ce4f1529cd83f80c8ebeba5f7ad0cf9575e9c Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sat, 27 Aug 2022 13:52:24 +0200 Subject: [PATCH 015/196] doc test --- docs/v2/index.html | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/v2/index.html b/docs/v2/index.html index bc3f5d5..0af26b6 100644 --- a/docs/v2/index.html +++ b/docs/v2/index.html @@ -14,6 +14,20 @@ } + + + + + +
From 6b4f16bcd67a26557ffa768758fd112aa84f931f Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sat, 27 Aug 2022 13:54:00 +0200 Subject: [PATCH 016/196] doc test --- docs/v2/index.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/v2/index.html b/docs/v2/index.html index 0af26b6..e62ffc3 100644 --- a/docs/v2/index.html +++ b/docs/v2/index.html @@ -15,6 +15,8 @@ + +
From d43e91f58c21cdd839d27f61e92df96891c06a50 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Tue, 30 Aug 2022 01:57:20 +0200 Subject: [PATCH 043/196] test --- docs/index.html | 50 +----- docs/v2/index.html | 182 ++++++++++++++++++--- src/docs/asciidoc/v2/docinfo-footer.html | 23 +++ src/docs/asciidoc/v2/index.adoc | 195 ++++++++++++++++++++++- 4 files changed, 376 insertions(+), 74 deletions(-) diff --git a/docs/index.html b/docs/index.html index 608c75e..a6a1856 100644 --- a/docs/index.html +++ b/docs/index.html @@ -27,28 +27,6 @@ - - - - -
@@ -251,18 +215,7 @@

springdoc-openapi v1.6.11

   - - - - +

@@ -4259,7 +4212,6 @@

Last updated 2022-08-07 00:58:43 +0200

- - - - - -
@@ -288,6 +279,18 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

+ + + +

@@ -352,6 +355,18 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

+ + + +
@@ -827,6 +842,18 @@

3.11. Jav

+ + + + @@ -1136,6 +1163,18 @@

+ + + @@ -1674,6 +1713,18 @@

< + + + + @@ -1784,6 +1835,18 @@

6.2. Gradle p + + + + @@ -1829,6 +1892,18 @@

+ + + @@ -2015,6 +2090,18 @@

+ + + @@ -2156,6 +2255,18 @@

+ + + @@ -2177,6 +2288,18 @@

11. Special Thanks

JetBrains + + + +
@@ -3996,16 +4119,27 @@

+ + + +

- + + + + + + + ++++ include::v2/intro.adoc[] +++++ + + + + +++++ + include::v2/getting-started.adoc[] +++++ + + + + +++++ + include::v2/modules.adoc[] +++++ + + + + +++++ + include::v2/features.adoc[] +++++ + + + + +++++ + include::v2/properties.adoc[] +++++ + + + + +++++ + include::v2/plugins.adoc[] +++++ + + + + +++++ + include::v2/demos.adoc[] +++++ + + + + +++++ + include::v2/migrating-from-springfox.adoc[] +++++ + + + + +++++ + include::v2/other-resources.adoc[] +++++ + + + + +++++ + include::v2/sponsor.adoc[] +++++ + + + + +++++ + include::v2/thanks.adoc[] -include::v2/faq.adoc[] \ No newline at end of file +++++ + + + + +++++ + +include::v2/faq.adoc[] + +++++ + + + + +++++ \ No newline at end of file From df917891cd8a9e7750e94612f4c24ac69597218b Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Tue, 30 Aug 2022 02:06:49 +0200 Subject: [PATCH 044/196] test --- docs/index.html | 185 +++++++++++++++++++++++++- src/docs/asciidoc/docinfo-footer.html | 24 ++++ src/docs/asciidoc/index.adoc | 178 +++++++++++++++++++++++++ 3 files changed, 386 insertions(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index a6a1856..3ba02d4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -198,6 +198,20 @@

springdoc-openapi v1.6.11

+ + + + + +
@@ -217,6 +231,19 @@

springdoc-openapi v1.6.11

+ + + + +
@@ -266,6 +293,18 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

+ + + +

@@ -330,6 +369,18 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

+ + + +
@@ -941,6 +992,18 @@

3.12. Jav

+ + + + @@ -1250,6 +1313,18 @@

+ + + @@ -1758,6 +1833,18 @@

< + + + + @@ -1868,6 +1955,18 @@

6.2. Gradle p + + + + @@ -1919,6 +2018,18 @@

+ + + @@ -2108,6 +2219,18 @@

+ + + @@ -2249,6 +2384,18 @@

+ + + @@ -2270,6 +2417,18 @@

11. Special Thanks

JetBrains + + + +
@@ -4209,9 +4368,33 @@

+ + + + + + + + + + + + + + + ++++ include::intro.adoc[] +++++ + + + + +++++ + include::getting-started.adoc[] +++++ + + + + +++++ + include::modules.adoc[] +++++ + + + + +++++ + include::features.adoc[] +++++ + + + + +++++ + include::properties.adoc[] +++++ + + + + +++++ + include::plugins.adoc[] +++++ + + + + +++++ + include::demos.adoc[] +++++ + + + + +++++ + include::migrating-from-springfox.adoc[] +++++ + + + + +++++ + include::other-resources.adoc[] +++++ + + + + +++++ + include::sponsor.adoc[] +++++ + + + + +++++ + include::thanks.adoc[] +++++ + + + + +++++ + include::faq.adoc[] \ No newline at end of file From 6e186df780a044a253aa1951f054fefc2730a594 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Mon, 3 Oct 2022 11:13:24 +0200 Subject: [PATCH 045/196] Doc update for 2.0.0-M6 --- docs/v2/faq.html | 6 +++--- docs/v2/getting-started.html | 4 ++-- docs/v2/migrating-from-springfox.html | 4 ++-- docs/v2/modules.html | 6 +++--- src/docs/asciidoc/v2/faq.adoc | 4 ++-- src/docs/asciidoc/v2/getting-started.adoc | 2 +- src/docs/asciidoc/v2/index.adoc | 2 +- src/docs/asciidoc/v2/migrating-from-springfox.adoc | 2 +- src/docs/asciidoc/v2/modules.adoc | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/v2/faq.html b/docs/v2/faq.html index 63f4542..97c9a3c 100644 --- a/docs/v2/faq.html +++ b/docs/v2/faq.html @@ -1801,7 +1801,7 @@

springdoc-openapi 2.x is compatible with spring-boot 3.

-

In general, you should only pick the last stable version as per today 2.0.0-M5.

+

In general, you should only pick the last stable version as per today 2.0.0-M6.

More precisely, this the exhaustive list of spring-boot versions against which springdoc-openapi has been built:

@@ -1818,7 +1818,7 @@

3.0.x

-

2.0.0-M5+

+

2.0.0-M6+

2.6.x, 1.5.x

@@ -1852,7 +1852,7 @@

diff --git a/docs/v2/getting-started.html b/docs/v2/getting-started.html index cdc0cb4..9a489c0 100644 --- a/docs/v2/getting-started.html +++ b/docs/v2/getting-started.html @@ -40,7 +40,7 @@

Getting S
   <dependency>
       <groupId>org.springdoc</groupId>
       <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-      <version>2.0.0-M5</version>
+      <version>2.0.0-M6</version>
    </dependency>
@@ -96,7 +96,7 @@

Getting S diff --git a/docs/v2/migrating-from-springfox.html b/docs/v2/migrating-from-springfox.html index 8b7dbac..8d079b1 100644 --- a/docs/v2/migrating-from-springfox.html +++ b/docs/v2/migrating-from-springfox.html @@ -44,7 +44,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>2.0.0-M5</version> + <version>2.0.0-M6</version> </dependency> @@ -217,7 +217,7 @@

diff --git a/docs/v2/modules.html b/docs/v2/modules.html index 779d360..11000a0 100644 --- a/docs/v2/modules.html +++ b/docs/v2/modules.html @@ -73,7 +73,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>2.0.0-M5</version> + <version>2.0.0-M6</version> </dependency> @@ -125,7 +125,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webflux-ui</artifactId> - <version>2.0.0-M5</version> + <version>2.0.0-M6</version> </dependency> @@ -508,7 +508,7 @@

Javadoc diff --git a/src/docs/asciidoc/v2/faq.adoc b/src/docs/asciidoc/v2/faq.adoc index 71dda32..ac61a8d 100644 --- a/src/docs/asciidoc/v2/faq.adoc +++ b/src/docs/asciidoc/v2/faq.adoc @@ -918,13 +918,13 @@ image::img/static_content_transformation.png[Illustrative example] === What is the compatibility matrix of `springdoc-openapi` with `spring-boot` ? `springdoc-openapi 2.x` is compatible with `spring-boot 3`. -In general, **you should only pick the last stable version as per today 2.0.0-M5.** +In general, **you should only pick the last stable version as per today 2.0.0-M6.** More precisely, this the exhaustive list of spring-boot versions against which `springdoc-openapi` has been built: |=== | spring-boot Versions | Minimum springdoc-openapi Versions -|`3.0.x` | `2.0.0-M5`+ +|`3.0.x` | `2.0.0-M6`+ |`2.6.x`, `1.5.x` | `1.6.0`+ |`2.5.x`, `1.5.x` | `1.5.9`+ |`2.4.x`, `1.5.x` | `1.5.0`+ diff --git a/src/docs/asciidoc/v2/getting-started.adoc b/src/docs/asciidoc/v2/getting-started.adoc index 6c7b4be..379f815 100644 --- a/src/docs/asciidoc/v2/getting-started.adoc +++ b/src/docs/asciidoc/v2/getting-started.adoc @@ -8,7 +8,7 @@ For the integration between spring-boot and swagger-ui, add the library to the l org.springdoc springdoc-openapi-starter-webmvc-ui - 2.0.0-M5 + 2.0.0-M6 ---- diff --git a/src/docs/asciidoc/v2/index.adoc b/src/docs/asciidoc/v2/index.adoc index 3fa7c92..8dd6b62 100644 --- a/src/docs/asciidoc/v2/index.adoc +++ b/src/docs/asciidoc/v2/index.adoc @@ -1,4 +1,4 @@ -= springdoc-openapi v2.0.0-M5 += springdoc-openapi v2.0.0-M6 Library for OpenAPI 3 with spring-boot By Badr NASS LAHSEN include::_attributes.adoc[] diff --git a/src/docs/asciidoc/v2/migrating-from-springfox.adoc b/src/docs/asciidoc/v2/migrating-from-springfox.adoc index 4ce0bfa..db9d753 100644 --- a/src/docs/asciidoc/v2/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/v2/migrating-from-springfox.adoc @@ -8,7 +8,7 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 2.0.0-M5 + 2.0.0-M6 ---- diff --git a/src/docs/asciidoc/v2/modules.adoc b/src/docs/asciidoc/v2/modules.adoc index b36bde8..52764d0 100644 --- a/src/docs/asciidoc/v2/modules.adoc +++ b/src/docs/asciidoc/v2/modules.adoc @@ -18,7 +18,7 @@ image::img/common.png[Architecture] org.springdoc springdoc-openapi-starter-webmvc-api - 2.0.0-M5 + 2.0.0-M6 ---- @@ -43,7 +43,7 @@ springdoc.api-docs.path=/api-docs org.springdoc springdoc-openapi-starter-webflux-ui - 2.0.0-M5 + 2.0.0-M6 ---- From 09ce7bc3e7630377533f113d03183bd221b9d0aa Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Mon, 3 Oct 2022 11:18:07 +0200 Subject: [PATCH 046/196] Doc update for 2.0.0-M6 --- docs/v2/index.html | 56 +++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/docs/v2/index.html b/docs/v2/index.html index 9cd7f86..b283f5d 100644 --- a/docs/v2/index.html +++ b/docs/v2/index.html @@ -6,7 +6,7 @@ -springdoc-openapi v2.0.0-M5 +springdoc-openapi v2.0.0-M6 - @@ -2018,18 +1946,6 @@

- - - @@ -2221,18 +2137,6 @@

- - - @@ -2586,18 +2466,6 @@

- - - @@ -2619,18 +2487,6 @@

12. Special Thanks

JetBrains - - - -
@@ -4526,18 +4382,6 @@

- - -

From aec3d7318adf03c01e0d8b420710088678419936 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Wed, 13 Dec 2023 18:13:25 +0100 Subject: [PATCH 100/196] docs update --- docs/index.html | 7932 ++++++++++++++++++++++++----------------------- 1 file changed, 4044 insertions(+), 3888 deletions(-) diff --git a/docs/index.html b/docs/index.html index 95a8d0a..fedab62 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,734 +1,758 @@ - - - - - -OpenAPI 3 Library for spring-boot - -OpenAPI 3 Library for spring-boot - - - - - - - - - -springdoc-openapi v2.1.0 - - - + + + + + + OpenAPI 3 Library for spring-boot + + OpenAPI 3 Library for spring-boot + + + + + + + + + + springdoc-openapi v2.1.0 + + + diff --git a/docs/v1/index.html b/docs/v1/index.html index 2d84d7c..35781a8 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -5,7 +5,7 @@ -springdoc-openapi v1.7.0 +springdoc-openapi v1.8.0 - + + + + + +OpenAPI 3 Library for spring-boot + +OpenAPI 3 Library for spring-boot + + + + + + + + + +springdoc-openapi v2.6.0 + + + + + + + + + + + diff --git a/docs/v1/index.html b/docs/v1/index.html index b842c90..70070e8 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -12,6 +12,30 @@ display: none } + + + + + + + + @@ -4379,31 +4403,6 @@

- - - - - - - - - diff --git a/src/docs/asciidoc/docinfo-footer.html b/src/docs/asciidoc/docinfo-footer.html index 9b2ebef..e35c962 100644 --- a/src/docs/asciidoc/docinfo-footer.html +++ b/src/docs/asciidoc/docinfo-footer.html @@ -19,28 +19,3 @@ var sa=function(a){ta(a);S(a.m,a.o,3,!1,function(){a:{var b=a.i;var c=r.btoa(b);if(c=r[c]){try{var d=O(P,r.atob(c))}catch(e){b=!1;break a}b=b===K(d,1)}else b=!1}b?Z(a,K(a.g,14)):(Z(a,K(a.g,8)),V(a.j))},function(){pa(function(){Z(a,K(a.g,7));V(a.j)},function(){return Z(a,K(a.g,6))},K(a.g,9),K(a.g,10),K(a.g,11))})},Z=function(a,b){a.h||(a.h=!0,a=new a.l.XMLHttpRequest,a.open("GET",b,!0),a.send())},ta=function(a){var b=r.btoa(a.i);a.l[b]&&Z(a,K(a.g,5))};(function(a,b){r[a]=function(c){for(var d=[],e=0;e - - - - - - - - - \ No newline at end of file diff --git a/src/docs/asciidoc/docinfo.html b/src/docs/asciidoc/docinfo.html index 19e2462..a81434f 100644 --- a/src/docs/asciidoc/docinfo.html +++ b/src/docs/asciidoc/docinfo.html @@ -3,3 +3,27 @@ display: none } + + + + + + + + \ No newline at end of file From 113fb993ee3e3d9439e49f17f79e1e2fb3d693e9 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Wed, 21 Aug 2024 14:14:38 +0200 Subject: [PATCH 122/196] test google tags --- docs/index.html | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/index.html b/docs/index.html index 695ba73..4b903be 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,6 +1,14 @@ + + + + @@ -42,17 +50,12 @@ gtag('config', 'G-1GEGWXWNH4'); - - - - -
+

How to Integrate Open API 3 with Spring project (not Spring Boot)?

+
+

When your application is using spring without (spring-boot), you need to add beans and auto-configuration that are natively provided in spring-boot.

+
+
+

For example, lets assume you want load the swagger-ui in spring-mvc application:

+
+
+
    +
  • +

    You mainly, need to add the springdoc-openapi module

    +
  • +
+
+
+
+
<dependency>
+   <groupId>org.springdoc</groupId>
+   <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+   <version>last.version</version>
+</dependency>
+
+
+
+
    +
  • +

    If you don’t have the spring-boot and spring-boot-autoconfigure dependencies, you need to add them. And pay attention to the compatibility matrix, between you spring.version and spring-boot.version. For example, in this case (spring.version=5.1.12.RELEASE):

    +
  • +
+
+
+
+
		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-autoconfigure</artifactId>
+			<version>3.3.3</version>
+		</dependency>
+
+
+
+
    +
  • +

    Scan for the springdoc-openapi 'auto-configuration classes that spring-boot automatically loads for you.

    +
  • +
  • +

    Depending on your module, you can find them on the file: spring.factories of each springdoc-openapi module.

    +
  • +
+
+
+
+
@Configuration
+@EnableWebMvc
+public class WebConfig implements WebApplicationInitializer {
+
+	@Override
+	public void onStartup(ServletContext servletContext)  {
+		WebApplicationContext context = getContext();
+		servletContext.addListener(new ContextLoaderListener(context));
+		ServletRegistration.Dynamic dispatcher = servletContext.addServlet("RestServlet",
+				new DispatcherServlet(context));
+		dispatcher.setLoadOnStartup(1);
+		dispatcher.addMapping("/*");
+	}
+
+	private AnnotationConfigWebApplicationContext getContext() {
+		AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+		context.register(this.getClass(),
+				SpringDocConfiguration.class,
+				SpringDocConfigProperties.class,
+				SpringDocSpecPropertiesConfiguration.class,
+				SpringDocWebMvcConfiguration.class,
+				MultipleOpenApiSupportConfiguration.class,
+				SwaggerConfig.class,
+				SwaggerUiConfigProperties.class,
+				SwaggerUiOAuthProperties.class,
+				SpringDocUIConfiguration.class
+		);
+		return context;
+	}
+}
+
+
+
+
+
    +
  • +

    Depending on your module, you can find them on the file: org.springframework.boot.autoconfigure.AutoConfiguration.imports of each springdoc-openapi module.

    +
  • +
  • +

    For groups usage make sure your GroupedOpenApi Beans are scanned.

    +
  • +
  • +

    If additionally, you are using custom context path: /my-servlet-path. Make sure you declare the following property:

    +
  • +
+
+
+
+
spring.mvc.servlet.path=/my-servlet-path
+
+
+
+
-

13.78. What is the compatibility matrix of springdoc-openapi with spring-boot ?

+

13.78. How to Integrate Open API 3 with Spring project (not Spring Boot)?

+
+

When your application is using spring without (spring-boot), you need to add beans and auto-configuration that are natively provided in spring-boot.

+
+
+

For example, lets assume you want load the swagger-ui in spring-mvc application:

+
+
+
    +
  • +

    You mainly, need to add the springdoc-openapi module

    +
  • +
+
+
+
+
<dependency>
+   <groupId>org.springdoc</groupId>
+   <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+   <version>last.version</version>
+</dependency>
+
+
+
+
    +
  • +

    If you don’t have the spring-boot and spring-boot-autoconfigure dependencies, you need to add them. And pay attention to the compatibility matrix, between you spring.version and spring-boot.version. For example, in this case (spring.version=5.1.12.RELEASE):

    +
  • +
+
+
+
+
        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+
+
+
+
    +
  • +

    Scan for the springdoc-openapi 'auto-configuration classes that spring-boot automatically loads for you.

    +
  • +
  • +

    Depending on your module, you can find them on the file: spring.factories of each springdoc-openapi module.

    +
  • +
+
+
+
+
@Configuration
+@EnableWebMvc
+public class WebConfig implements WebApplicationInitializer {
+
+    @Override
+    public void onStartup(ServletContext servletContext)  {
+        WebApplicationContext context = getContext();
+        servletContext.addListener(new ContextLoaderListener(context));
+        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("RestServlet",
+                new DispatcherServlet(context));
+        dispatcher.setLoadOnStartup(1);
+        dispatcher.addMapping("/*");
+    }
+
+    private AnnotationConfigWebApplicationContext getContext() {
+        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+        context.register(this.getClass(),
+                SpringDocConfiguration.class,
+                SpringDocConfigProperties.class,
+                SpringDocSpecPropertiesConfiguration.class,
+                SpringDocWebMvcConfiguration.class,
+                MultipleOpenApiSupportConfiguration.class,
+                SwaggerConfig.class,
+                SwaggerUiConfigProperties.class,
+                SwaggerUiOAuthProperties.class,
+                SpringDocUIConfiguration.class
+        );
+        return context;
+    }
+}
+
+
+
+
+
    +
  • +

    Depending on your module, you can find them on the file: org.springframework.boot.autoconfigure.AutoConfiguration.imports of each springdoc-openapi module.

    +
  • +
  • +

    For groups usage make sure your GroupedOpenApi Beans are scanned.

    +
  • +
  • +

    If additionally, you are using custom context path: /my-servlet-path. Make sure you declare the following property:

    +
  • +
+
+
+
+
spring.mvc.servlet.path=/my-servlet-path
+
+
+
+
+

13.79. What is the compatibility matrix of springdoc-openapi with spring-boot ?

springdoc-openapi 2.x is compatible with spring-boot 3.

@@ -4563,7 +4668,7 @@

-

13.79. Why am i getting an error: Swagger UI unable to render definition, when overriding the default spring registered HttpMessageConverter?

+

13.80. Why am i getting an error: Swagger UI unable to render definition, when overriding the default spring registered HttpMessageConverter?

When overriding the default spring-boot registered HttpMessageConverter, you should have ByteArrayHttpMessageConverter registered as well to have proper springdoc-openapi support.

@@ -4588,7 +4693,7 @@

-

13.80. Some parameters are not generated in the resulting OpenAPI spec.

+

13.81. Some parameters are not generated in the resulting OpenAPI spec.

The issue is caused by the changes introduced by Spring-Boot 3.2.0 in particular for the Parameter Name Discovery. diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index d967882..7a16822 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -944,6 +944,78 @@ public class OpenAPIConfig { } ---- +=== How to Integrate Open API 3 with Spring project (not Spring Boot)? +When your application is using spring without (spring-boot), you need to add beans and auto-configuration that are natively provided in spring-boot. + +For example, lets assume you want load the swagger-ui in spring-mvc application: + +* You mainly, need to add the springdoc-openapi module + +[source,xml] +---- + + org.springdoc + springdoc-openapi-starter-webmvc-ui + last.version + +---- + +* If you don't have the spring-boot and spring-boot-autoconfigure dependencies, you need to add them. And pay attention to the compatibility matrix, between you spring.version and spring-boot.version. For example, in this case (spring.version=5.1.12.RELEASE): + +[source,xml] +---- + + org.springframework.boot + spring-boot-autoconfigure + 3.3.3 + +---- + +* Scan for the `springdoc-openapi` 'auto-configuration classes that spring-boot automatically loads for you. +* Depending on your module, you can find them on the file: `spring.factories` of each `springdoc-openapi` module. + +[source,java] +---- +@Configuration +@EnableWebMvc +public class WebConfig implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext servletContext) { + WebApplicationContext context = getContext(); + servletContext.addListener(new ContextLoaderListener(context)); + ServletRegistration.Dynamic dispatcher = servletContext.addServlet("RestServlet", + new DispatcherServlet(context)); + dispatcher.setLoadOnStartup(1); + dispatcher.addMapping("/*"); + } + + private AnnotationConfigWebApplicationContext getContext() { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + context.register(this.getClass(), + SpringDocConfiguration.class, + SpringDocConfigProperties.class, + SpringDocSpecPropertiesConfiguration.class, + SpringDocWebMvcConfiguration.class, + MultipleOpenApiSupportConfiguration.class, + SwaggerConfig.class, + SwaggerUiConfigProperties.class, + SwaggerUiOAuthProperties.class, + SpringDocUIConfiguration.class + ); + return context; + } +} +---- + +* Depending on your module, you can find them on the file: `org.springframework.boot.autoconfigure.AutoConfiguration.imports` of each `springdoc-openapi` module. +* For groups usage make sure your `GroupedOpenApi` Beans are scanned. +* If additionally, you are using custom `context path`: `/my-servlet-path`. Make sure you declare the following property: +[source,properties] +---- +spring.mvc.servlet.path=/my-servlet-path +---- + === What is the compatibility matrix of `springdoc-openapi` with `spring-boot` ? `springdoc-openapi 2.x` is compatible with `spring-boot 3`. From cf98feaa5573eb32a57825985543561f30996089 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Fri, 27 Sep 2024 23:03:38 +0200 Subject: [PATCH 125/196] docs update --- docs/faq.html | 40 +++++++++++++-- docs/favicon.ico | Bin 64646 -> 182726 bytes docs/index.html | 46 +++++++++++++++--- docs/migrating-from-springfox.html | 4 +- docs/properties.html | 8 +-- docs/ui-properties.html | 6 +-- docs/v1/faq.html | 6 +-- docs/v1/index.html | 10 ++-- docs/v1/migrating-from-springfox.html | 4 +- docs/v1/properties.html | 4 +- docs/v1/ui-properties.html | 6 +-- .../asciidoc/migrating-from-springfox.adoc | 2 +- src/docs/asciidoc/ui-properties.adoc | 2 +- .../asciidoc/v1/migrating-from-springfox.adoc | 2 +- src/docs/asciidoc/v1/ui-properties.adoc | 2 +- 15 files changed, 99 insertions(+), 43 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index a577278..b7cb689 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -298,15 +298,13 @@

-
---
-@Bean
+
@Bean
 @Primary
 fun swaggerUiConfig(config: SwaggerUiConfigProperties): SwaggerUiConfigProperties {
     config.showCommonExtensions = true
     config.queryConfigEnabled = true
     return config
 }
----
 
@@ -579,7 +577,7 @@

+
+
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Encoding;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+
+@PostMapping(value = "/upload", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity<?> upload(@Parameter(description = "file") final MultipartFile file) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithQuery", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity<?> uploadFileWithQuery(@Parameter(description = "file") @RequestPart("file") final MultipartFile file,
+        @Parameter(description = "An extra query parameter") @RequestParam String name) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithJson", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {
+        MediaType.APPLICATION_JSON_VALUE})
+public ResponseEntity<?> uploadFileWithJson(
+        @RequestBody(content = @Content(encoding = @Encoding(name = "jsonRequest", contentType = MediaType.APPLICATION_JSON_VALUE)))
+        @Parameter(description = "An extra JSON payload sent with file") @RequestPart("jsonRequest") final JsonRequest jsonRequest,
+        @RequestPart("file") final MultipartFile file) {
+    return null;
+}
+
+
+

Can I use @Parameter inside @Operation annotation?

@@ -2066,7 +2096,7 @@

diff --git a/docs/favicon.ico b/docs/favicon.ico index 0dfbcd7b523a26d4222c067be61c0c835b7314f6..45468e6bdc0bf260cfe760cb74d127dccba082bc 100644 GIT binary patch literal 182726 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 z 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

@DgZG)j$0 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 literal 64646 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

)9Y{xw^Vg#R?UzVgzweggm_VQW@SqNB9W% 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. Springdoc-openapi Properties

-

springdoc-openapi relies on standard spring configuration properties (yml or properties) using the standard files locations.

+

springdoc-openapi relies on standard spring configuration properties (yml or properties) using the standard files locations.

5.1. springdoc-openapi core properties

@@ -1697,8 +1697,8 @@

<

springdoc.swagger-ui.validatorUrl

-

validator.swagger.io/validator

-

By default, Swagger UI attempts to validate specs against swagger.io’s online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators Validator Badge. Setting it to either none, 127.0.0.1 or localhost will disable validation.

+ +

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

@@ -2335,7 +2335,7 @@

-
---
-@Bean
+
@Bean
 @Primary
 fun swaggerUiConfig(config: SwaggerUiConfigProperties): SwaggerUiConfigProperties {
     config.showCommonExtensions = true
     config.queryConfigEnabled = true
     return config
 }
----
 
@@ -3241,7 +3239,7 @@

+
+
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Encoding;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+
+@PostMapping(value = "/upload", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity<?> upload(@Parameter(description = "file") final MultipartFile file) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithQuery", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity<?> uploadFileWithQuery(@Parameter(description = "file") @RequestPart("file") final MultipartFile file,
+        @Parameter(description = "An extra query parameter") @RequestParam String name) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithJson", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {
+        MediaType.APPLICATION_JSON_VALUE})
+public ResponseEntity<?> uploadFileWithJson(
+        @RequestBody(content = @Content(encoding = @Encoding(name = "jsonRequest", contentType = MediaType.APPLICATION_JSON_VALUE)))
+        @Parameter(description = "An extra JSON payload sent with file") @RequestPart("jsonRequest") final JsonRequest jsonRequest,
+        @RequestPart("file") final MultipartFile file) {
+    return null;
+}
+
+
+

13.54. Can I use @Parameter inside @Operation annotation?

diff --git a/docs/migrating-from-springfox.html b/docs/migrating-from-springfox.html index f954f48..fb0f539 100644 --- a/docs/migrating-from-springfox.html +++ b/docs/migrating-from-springfox.html @@ -71,7 +71,7 @@

diff --git a/docs/properties.html b/docs/properties.html index b6888e2..6aa7245 100644 --- a/docs/properties.html +++ b/docs/properties.html @@ -33,7 +33,7 @@

Springdoc-openapi Properties

-

springdoc-openapi relies on standard spring configuration properties (yml or properties) using the standard files locations.

+

springdoc-openapi relies on standard spring configuration properties (yml or properties) using the standard files locations.

springdoc-openapi core properties

@@ -396,8 +396,8 @@

springdoc.swagger-ui.validatorUrl

-

https://validator.swagger.io/validator

-

By default, Swagger UI attempts to validate specs against swagger.io’s online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators Validator Badge. Setting it to either none, 127.0.0.1 or localhost will disable validation.

+ +

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

@@ -614,7 +614,7 @@

diff --git a/docs/ui-properties.html b/docs/ui-properties.html index 2cf9876..23b8f76 100644 --- a/docs/ui-properties.html +++ b/docs/ui-properties.html @@ -65,8 +65,8 @@

springdoc.swagger-ui.validatorUrl

-

https://validator.swagger.io/validator

-

By default, Swagger UI attempts to validate specs against swagger.io’s online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators Validator Badge. Setting it to either none, 127.0.0.1 or localhost will disable validation.

+ +

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

@@ -280,7 +280,7 @@
diff --git a/docs/v1/faq.html b/docs/v1/faq.html index 5fc3063..0dab8bf 100644 --- a/docs/v1/faq.html +++ b/docs/v1/faq.html @@ -298,15 +298,13 @@

-
---
-@Bean
+
@Bean
 @Primary
 fun swaggerUiConfig(config: SwaggerUiConfigProperties): SwaggerUiConfigProperties {
     config.showCommonExtensions = true
     config.queryConfigEnabled = true
     return config
 }
----
 
@@ -2016,7 +2014,7 @@

diff --git a/docs/v1/index.html b/docs/v1/index.html index 2061e21..ab1bb7f 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -1586,8 +1586,8 @@

<

springdoc.swagger-ui.validatorUrl

-

validator.swagger.io/validator

-

By default, Swagger UI attempts to validate specs against swagger.io’s online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators Validator Badge. Setting it to either none, 127.0.0.1 or localhost will disable validation.

+ +

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

@@ -2028,7 +2028,7 @@

-
---
-@Bean
+
@Bean
 @Primary
 fun swaggerUiConfig(config: SwaggerUiConfigProperties): SwaggerUiConfigProperties {
     config.showCommonExtensions = true
     config.queryConfigEnabled = true
     return config
 }
----
 
diff --git a/docs/v1/migrating-from-springfox.html b/docs/v1/migrating-from-springfox.html index 7623a51..716ba47 100644 --- a/docs/v1/migrating-from-springfox.html +++ b/docs/v1/migrating-from-springfox.html @@ -71,7 +71,7 @@

diff --git a/docs/v1/properties.html b/docs/v1/properties.html index cae141a..951ded7 100644 --- a/docs/v1/properties.html +++ b/docs/v1/properties.html @@ -396,8 +396,8 @@

springdoc.swagger-ui.validatorUrl

-

https://validator.swagger.io/validator

-

By default, Swagger UI attempts to validate specs against swagger.io’s online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators Validator Badge. Setting it to either none, 127.0.0.1 or localhost will disable validation.

+ +

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

diff --git a/docs/v1/ui-properties.html b/docs/v1/ui-properties.html index 9a927f6..314301c 100644 --- a/docs/v1/ui-properties.html +++ b/docs/v1/ui-properties.html @@ -65,8 +65,8 @@

springdoc.swagger-ui.validatorUrl

-

https://validator.swagger.io/validator

-

By default, Swagger UI attempts to validate specs against swagger.io’s online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators Validator Badge. Setting it to either none, 127.0.0.1 or localhost will disable validation.

+ +

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

@@ -280,7 +280,7 @@ diff --git a/src/docs/asciidoc/migrating-from-springfox.adoc b/src/docs/asciidoc/migrating-from-springfox.adoc index 9346af6..e097dad 100644 --- a/src/docs/asciidoc/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/migrating-from-springfox.adoc @@ -20,7 +20,7 @@ Package for swagger 3 annotations is `io.swagger.v3.oas.annotations`. - `@ApiImplicitParam` -> `@Parameter` - `@ApiImplicitParams` -> `@Parameters` - `@ApiModel` -> `@Schema` -- `@ApiModelProperty(hidden = true)` -> `@Schema(accessMode = READ_ONLY)` +- `@ApiModelProperty(allowEmptyValue = true)` -> `@Schema(nullable = true)` - `@ApiModelProperty` -> `@Schema` - `@ApiOperation(value = "foo", notes = "bar")` -> `@Operation(summary = "foo", description = "bar")` - `@ApiParam` -> `@Parameter` diff --git a/src/docs/asciidoc/ui-properties.adoc b/src/docs/asciidoc/ui-properties.adoc index c466f9b..5144b77 100644 --- a/src/docs/asciidoc/ui-properties.adoc +++ b/src/docs/asciidoc/ui-properties.adoc @@ -7,7 +7,7 @@ |springdoc.swagger-ui.enabled | `true` | `Boolean`. To disable the swagger-ui endpoint (/swagger-ui.html by default). |springdoc.swagger-ui.configUrl | `/v3/api-docs/swagger-config` | `String`. URL to fetch external configuration document from. |springdoc.swagger-ui.layout | `BaseLayout` | `String`. The name of a component available via the plugin system to use as the top-level layout for Swagger UI. -|springdoc.swagger-ui.validatorUrl | `https://validator.swagger.io/validator` | By default, Swagger UI attempts to validate specs against swagger.io's online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators link:https://github.com/swagger-api/validator-badge[Validator Badge, window="_blank"]. Setting it to either `none`, `127.0.0.1` or `localhost` will disable validation. +|springdoc.swagger-ui.validatorUrl | | By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator. |springdoc.swagger-ui.tryItOutEnabled | `false` |`Boolean`. Controls whether the "Try it out" section should be enabled by default. |springdoc.swagger-ui.filter | `false` | `Boolean OR String`. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag. |springdoc.swagger-ui.operationsSorter | | `Function=(a => a)`. Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged. diff --git a/src/docs/asciidoc/v1/migrating-from-springfox.adoc b/src/docs/asciidoc/v1/migrating-from-springfox.adoc index 6e039b3..78a1f03 100644 --- a/src/docs/asciidoc/v1/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/v1/migrating-from-springfox.adoc @@ -20,7 +20,7 @@ Package for swagger 3 annotations is `io.swagger.v3.oas.annotations`. - `@ApiImplicitParam` -> `@Parameter` - `@ApiImplicitParams` -> `@Parameters` - `@ApiModel` -> `@Schema` -- `@ApiModelProperty(hidden = true)` -> `@Schema(accessMode = READ_ONLY)` +- `@ApiModelProperty(allowEmptyValue = true)` -> `@Schema(nullable = true)` - `@ApiModelProperty` -> `@Schema` - `@ApiOperation(value = "foo", notes = "bar")` -> `@Operation(summary = "foo", description = "bar")` - `@ApiParam` -> `@Parameter` diff --git a/src/docs/asciidoc/v1/ui-properties.adoc b/src/docs/asciidoc/v1/ui-properties.adoc index c466f9b..5144b77 100644 --- a/src/docs/asciidoc/v1/ui-properties.adoc +++ b/src/docs/asciidoc/v1/ui-properties.adoc @@ -7,7 +7,7 @@ |springdoc.swagger-ui.enabled | `true` | `Boolean`. To disable the swagger-ui endpoint (/swagger-ui.html by default). |springdoc.swagger-ui.configUrl | `/v3/api-docs/swagger-config` | `String`. URL to fetch external configuration document from. |springdoc.swagger-ui.layout | `BaseLayout` | `String`. The name of a component available via the plugin system to use as the top-level layout for Swagger UI. -|springdoc.swagger-ui.validatorUrl | `https://validator.swagger.io/validator` | By default, Swagger UI attempts to validate specs against swagger.io's online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators link:https://github.com/swagger-api/validator-badge[Validator Badge, window="_blank"]. Setting it to either `none`, `127.0.0.1` or `localhost` will disable validation. +|springdoc.swagger-ui.validatorUrl | | By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator. |springdoc.swagger-ui.tryItOutEnabled | `false` |`Boolean`. Controls whether the "Try it out" section should be enabled by default. |springdoc.swagger-ui.filter | `false` | `Boolean OR String`. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag. |springdoc.swagger-ui.operationsSorter | | `Function=(a => a)`. Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged. From 7b40556aa0776e308f98c2f6c95daceee749f63b Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Fri, 27 Sep 2024 23:14:19 +0200 Subject: [PATCH 126/196] docs update --- docs/core-properties.html | 47 ++++++++--------- docs/faq.html | 30 ++++++++++- docs/index.html | 73 +++++++++++++++++--------- docs/properties.html | 45 +++++++--------- docs/v1/properties.html | 45 +++++++--------- src/docs/asciidoc/core-properties.adoc | 41 +++++++-------- src/docs/asciidoc/faq.adoc | 22 ++++++++ 7 files changed, 180 insertions(+), 123 deletions(-) diff --git a/docs/core-properties.html b/docs/core-properties.html index 11fe88a..ba094a0 100644 --- a/docs/core-properties.html +++ b/docs/core-properties.html @@ -56,37 +56,37 @@

springdoc.packages-to-scan

*

-

List of Strings.The list of packages to scan (comma separated)

+

List of Strings. The list of packages to scan (comma separated)

springdoc.paths-to-match

/*

-

List of Strings.The list of paths to match (comma separated)

+

List of Strings. The list of paths to match (comma separated)

springdoc.produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.paths-to-exclude

-

List of Strings.The list of paths to exclude (comma separated)

+

List of Strings. The list of paths to exclude (comma separated)

springdoc.packages-to-exclude

-

List of Strings.The list of packages to exclude (comma separated)

+

List of Strings. The list of packages to exclude (comma separated)

springdoc.default-consumes-media-type

@@ -96,7 +96,7 @@

springdoc.default-produces-media-type

/

-

String.The default produces media type.

+

String. The default produces media type.

springdoc.cache.disabled

@@ -126,52 +126,52 @@

springdoc.group-configs[0].group

-

String.The group name

+

String. The group name

springdoc.group-configs[0].display-name

-

String.The display name of the group.

+

String. The display name of the group.

springdoc.group-configs[0].packages-to-scan

*

-

List of Strings.The list of packages to scan for a group (comma separated)

+

List of Strings. The list of packages to scan for a group (comma separated)

springdoc.group-configs[0].paths-to-match

/*

-

List of Strings.The list of paths to match for a group(comma separated)

+

List of Strings. The list of paths to match for a group (comma separated)

springdoc.group-configs[0].paths-to-exclude

``

-

List of Strings.The list of paths to exclude for a group(comma separated)

+

List of Strings. The list of paths to exclude for a group (comma separated)

springdoc.group-configs[0].packages-to-exclude

-

List of Strings.The list of packages to exclude for a group(comma separated)

+

List of Strings. The list of packages to exclude for a group (comma separated)

springdoc.group-configs[0].produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.group-configs[0].consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.group-configs[0].headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.webjars.prefix

/webjars

-

String, To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

+

String. To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

springdoc.api-docs.resolve-schema-properties

@@ -219,14 +219,9 @@

Boolean. To make spring security login-endpoint visible.

-

springdoc.pre-loading-enabled

-

false

-

Boolean. Pre-loading setting to load OpenAPI on application startup.

- -

springdoc.pre-loading-locales

-

List of Strings.The list of locales to load OpenAPI on application startup.(comma separated) If not specified, it will preload with the default Locale.

+

List of Strings. The list of locales to load OpenAPI on application startup (comma separated). If not specified, it will preload with the default Locale.

springdoc.writer-with-order-by-keys

@@ -276,7 +271,7 @@

springdoc.api-docs.version

openapi_3_0

-

String. To Choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

+

String. To choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

springdoc.default-flat-param-object

@@ -330,7 +325,7 @@ diff --git a/docs/faq.html b/docs/faq.html index b7cb689..63448a8 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -602,6 +602,34 @@

+
    +
  • +

    If you need to manually adjust the URL displayed in the Swagger UI, implement the ServerBaseUrlCustomizer interface. This might be necessary to remove the port number, for example.

    +
  • +
+ +
+
+
@Bean
+public class CustomServerBaseUrlCustomizer implements ServerBaseUrlCustomizer {
+    @Override
+    public String customize(String serverBaseUrl) {
+        try {
+            URL url = new URL(serverBaseUrl);
+            if (url.getHost().contains(".com")) {
+                serverBaseUrl = new URL(url.getProtocol(),url.getHost(),url.getFile()).toString();
+            }
+        } catch (MalformedURLException ex) {
+            // nothing we can do
+        }
+
+        return serverBaseUrl;
+    }
+}
+
+
+

Is @JsonView annotations in Spring MVC APIs supported?

@@ -2096,7 +2124,7 @@

diff --git a/docs/index.html b/docs/index.html index 7bcdbe7..ac14e4b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1365,37 +1365,37 @@

springdoc.packages-to-scan

*

-

List of Strings.The list of packages to scan (comma separated)

+

List of Strings. The list of packages to scan (comma separated)

springdoc.paths-to-match

/*

-

List of Strings.The list of paths to match (comma separated)

+

List of Strings. The list of paths to match (comma separated)

springdoc.produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.paths-to-exclude

-

List of Strings.The list of paths to exclude (comma separated)

+

List of Strings. The list of paths to exclude (comma separated)

springdoc.packages-to-exclude

-

List of Strings.The list of packages to exclude (comma separated)

+

List of Strings. The list of packages to exclude (comma separated)

springdoc.default-consumes-media-type

@@ -1405,7 +1405,7 @@

springdoc.default-produces-media-type

/

-

String.The default produces media type.

+

String. The default produces media type.

springdoc.cache.disabled

@@ -1435,52 +1435,52 @@

springdoc.group-configs[0].group

-

String.The group name

+

String. The group name

springdoc.group-configs[0].display-name

-

String.The display name of the group.

+

String. The display name of the group.

springdoc.group-configs[0].packages-to-scan

*

-

List of Strings.The list of packages to scan for a group (comma separated)

+

List of Strings. The list of packages to scan for a group (comma separated)

springdoc.group-configs[0].paths-to-match

/*

-

List of Strings.The list of paths to match for a group(comma separated)

+

List of Strings. The list of paths to match for a group (comma separated)

springdoc.group-configs[0].paths-to-exclude

``

-

List of Strings.The list of paths to exclude for a group(comma separated)

+

List of Strings. The list of paths to exclude for a group (comma separated)

springdoc.group-configs[0].packages-to-exclude

-

List of Strings.The list of packages to exclude for a group(comma separated)

+

List of Strings. The list of packages to exclude for a group (comma separated)

springdoc.group-configs[0].produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.group-configs[0].consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.group-configs[0].headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.webjars.prefix

/webjars

-

String, To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

+

String. To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

springdoc.api-docs.resolve-schema-properties

@@ -1528,14 +1528,9 @@

Boolean. To make spring security login-endpoint visible.

-

springdoc.pre-loading-enabled

-

false

-

Boolean. Pre-loading setting to load OpenAPI on application startup.

- -

springdoc.pre-loading-locales

-

List of Strings.The list of locales to load OpenAPI on application startup.(comma separated) If not specified, it will preload with the default Locale.

+

List of Strings. The list of locales to load OpenAPI on application startup (comma separated). If not specified, it will preload with the default Locale.

springdoc.writer-with-order-by-keys

@@ -1585,7 +1580,7 @@

springdoc.api-docs.version

openapi_3_0

-

String. To Choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

+

String. To choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

springdoc.default-flat-param-object

@@ -3264,6 +3259,34 @@

+
    +
  • +

    If you need to manually adjust the URL displayed in the Swagger UI, implement the ServerBaseUrlCustomizer interface. This might be necessary to remove the port number, for example.

    +
  • +
+ +
+
+
@Bean
+public class CustomServerBaseUrlCustomizer implements ServerBaseUrlCustomizer {
+    @Override
+    public String customize(String serverBaseUrl) {
+        try {
+            URL url = new URL(serverBaseUrl);
+            if (url.getHost().contains(".com")) {
+                serverBaseUrl = new URL(url.getProtocol(),url.getHost(),url.getFile()).toString();
+            }
+        } catch (MalformedURLException ex) {
+            // nothing we can do
+        }
+
+        return serverBaseUrl;
+    }
+}
+
+
+

13.25. Is @JsonView annotations in Spring MVC APIs supported?

diff --git a/docs/properties.html b/docs/properties.html index 6aa7245..42da469 100644 --- a/docs/properties.html +++ b/docs/properties.html @@ -64,37 +64,37 @@

springdoc.packages-to-scan

*

-

List of Strings.The list of packages to scan (comma separated)

+

List of Strings. The list of packages to scan (comma separated)

springdoc.paths-to-match

/*

-

List of Strings.The list of paths to match (comma separated)

+

List of Strings. The list of paths to match (comma separated)

springdoc.produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.paths-to-exclude

-

List of Strings.The list of paths to exclude (comma separated)

+

List of Strings. The list of paths to exclude (comma separated)

springdoc.packages-to-exclude

-

List of Strings.The list of packages to exclude (comma separated)

+

List of Strings. The list of packages to exclude (comma separated)

springdoc.default-consumes-media-type

@@ -104,7 +104,7 @@

springdoc.default-produces-media-type

/

-

String.The default produces media type.

+

String. The default produces media type.

springdoc.cache.disabled

@@ -134,52 +134,52 @@

springdoc.group-configs[0].group

-

String.The group name

+

String. The group name

springdoc.group-configs[0].display-name

-

String.The display name of the group.

+

String. The display name of the group.

springdoc.group-configs[0].packages-to-scan

*

-

List of Strings.The list of packages to scan for a group (comma separated)

+

List of Strings. The list of packages to scan for a group (comma separated)

springdoc.group-configs[0].paths-to-match

/*

-

List of Strings.The list of paths to match for a group(comma separated)

+

List of Strings. The list of paths to match for a group (comma separated)

springdoc.group-configs[0].paths-to-exclude

``

-

List of Strings.The list of paths to exclude for a group(comma separated)

+

List of Strings. The list of paths to exclude for a group (comma separated)

springdoc.group-configs[0].packages-to-exclude

-

List of Strings.The list of packages to exclude for a group(comma separated)

+

List of Strings. The list of packages to exclude for a group (comma separated)

springdoc.group-configs[0].produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.group-configs[0].consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.group-configs[0].headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.webjars.prefix

/webjars

-

String, To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

+

String. To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

springdoc.api-docs.resolve-schema-properties

@@ -227,14 +227,9 @@

Boolean. To make spring security login-endpoint visible.

-

springdoc.pre-loading-enabled

-

false

-

Boolean. Pre-loading setting to load OpenAPI on application startup.

- -

springdoc.pre-loading-locales

-

List of Strings.The list of locales to load OpenAPI on application startup.(comma separated) If not specified, it will preload with the default Locale.

+

List of Strings. The list of locales to load OpenAPI on application startup (comma separated). If not specified, it will preload with the default Locale.

springdoc.writer-with-order-by-keys

@@ -284,7 +279,7 @@

springdoc.api-docs.version

openapi_3_0

-

String. To Choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

+

String. To choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

springdoc.default-flat-param-object

diff --git a/docs/v1/properties.html b/docs/v1/properties.html index 951ded7..97cb901 100644 --- a/docs/v1/properties.html +++ b/docs/v1/properties.html @@ -64,37 +64,37 @@

springdoc.packages-to-scan

*

-

List of Strings.The list of packages to scan (comma separated)

+

List of Strings. The list of packages to scan (comma separated)

springdoc.paths-to-match

/*

-

List of Strings.The list of paths to match (comma separated)

+

List of Strings. The list of paths to match (comma separated)

springdoc.produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.paths-to-exclude

-

List of Strings.The list of paths to exclude (comma separated)

+

List of Strings. The list of paths to exclude (comma separated)

springdoc.packages-to-exclude

-

List of Strings.The list of packages to exclude (comma separated)

+

List of Strings. The list of packages to exclude (comma separated)

springdoc.default-consumes-media-type

@@ -104,7 +104,7 @@

springdoc.default-produces-media-type

/

-

String.The default produces media type.

+

String. The default produces media type.

springdoc.cache.disabled

@@ -134,52 +134,52 @@

springdoc.group-configs[0].group

-

String.The group name

+

String. The group name

springdoc.group-configs[0].display-name

-

String.The display name of the group.

+

String. The display name of the group.

springdoc.group-configs[0].packages-to-scan

*

-

List of Strings.The list of packages to scan for a group (comma separated)

+

List of Strings. The list of packages to scan for a group (comma separated)

springdoc.group-configs[0].paths-to-match

/*

-

List of Strings.The list of paths to match for a group(comma separated)

+

List of Strings. The list of paths to match for a group (comma separated)

springdoc.group-configs[0].paths-to-exclude

``

-

List of Strings.The list of paths to exclude for a group(comma separated)

+

List of Strings. The list of paths to exclude for a group (comma separated)

springdoc.group-configs[0].packages-to-exclude

-

List of Strings.The list of packages to exclude for a group(comma separated)

+

List of Strings. The list of packages to exclude for a group (comma separated)

springdoc.group-configs[0].produces-to-match

/*

-

List of Strings.The list of produces mediaTypes to match (comma separated)

+

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.group-configs[0].consumes-to-match

/*

-

List of Strings.The list of consumes mediaTypes to match (comma separated)

+

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.group-configs[0].headers-to-match

/*

-

List of Strings.The list of headers to match (comma separated)

+

List of Strings. The list of headers to match (comma separated)

springdoc.webjars.prefix

/webjars

-

String, To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

+

String. To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

springdoc.api-docs.resolve-schema-properties

@@ -227,14 +227,9 @@

Boolean. To make spring security login-endpoint visible.

-

springdoc.pre-loading-enabled

-

false

-

Boolean. Pre-loading setting to load OpenAPI on application startup.

- -

springdoc.pre-loading-locales

-

List of Strings.The list of locales to load OpenAPI on application startup.(comma separated) If not specified, it will preload with the default Locale.

+

List of Strings. The list of locales to load OpenAPI on application startup (comma separated). If not specified, it will preload with the default Locale.

springdoc.writer-with-order-by-keys

@@ -284,7 +279,7 @@

springdoc.api-docs.version

openapi_3_0

-

String. To Choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

+

String. To choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

springdoc.default-flat-param-object

diff --git a/src/docs/asciidoc/core-properties.adoc b/src/docs/asciidoc/core-properties.adoc index 3165e22..30ef9d1 100644 --- a/src/docs/asciidoc/core-properties.adoc +++ b/src/docs/asciidoc/core-properties.adoc @@ -5,30 +5,30 @@ |springdoc.api-docs.path | `/v3/api-docs` | `String`, For custom path of the OpenAPI documentation in Json format. |springdoc.api-docs.enabled | `true` | `Boolean`. To disable the springdoc-openapi endpoint (/v3/api-docs by default). -|springdoc.packages-to-scan | `*`| `List of Strings`.The list of packages to scan (comma separated) -|springdoc.paths-to-match | `/*`| `List of Strings`.The list of paths to match (comma separated) -|springdoc.produces-to-match | `/*`| `List of Strings`.The list of produces mediaTypes to match (comma separated) -|springdoc.headers-to-match | `/*`| `List of Strings`.The list of headers to match (comma separated) -|springdoc.consumes-to-match | `/*`| `List of Strings`.The list of consumes mediaTypes to match (comma separated) -|springdoc.paths-to-exclude | | `List of Strings`.The list of paths to exclude (comma separated) -|springdoc.packages-to-exclude | | `List of Strings`.The list of packages to exclude (comma separated) +|springdoc.packages-to-scan | `*`| `List of Strings`. The list of packages to scan (comma separated) +|springdoc.paths-to-match | `/*`| `List of Strings`. The list of paths to match (comma separated) +|springdoc.produces-to-match | `/*`| `List of Strings`. The list of produces mediaTypes to match (comma separated) +|springdoc.headers-to-match | `/*`| `List of Strings`. The list of headers to match (comma separated) +|springdoc.consumes-to-match | `/*`| `List of Strings`. The list of consumes mediaTypes to match (comma separated) +|springdoc.paths-to-exclude | | `List of Strings`. The list of paths to exclude (comma separated) +|springdoc.packages-to-exclude | | `List of Strings`. The list of packages to exclude (comma separated) |springdoc.default-consumes-media-type | `application/json` | `String`. The default consumes media type. -|springdoc.default-produces-media-type | `*/*` | `String`.The default produces media type. +|springdoc.default-produces-media-type | `*/*` | `String`. The default produces media type. |springdoc.cache.disabled | `false` | `Boolean`. To disable the springdoc-openapi cache of the calculated OpenAPI. |springdoc.show-actuator | `false` | `Boolean`. To display the actuator endpoints. |springdoc.auto-tag-classes | `true` | `Boolean`. To disable the springdoc-openapi automatic tags. |springdoc.model-and-view-allowed | `false` | `Boolean`. To allow RestControllers with ModelAndView return to appear in the OpenAPI description. |springdoc.override-with-generic-response | `true` | `Boolean`. When true, automatically adds @ControllerAdvice responses to all the generated responses. -|springdoc.group-configs[0].group | | `String`.The group name -|springdoc.group-configs[0].display-name | | `String`.The display name of the group. -|springdoc.group-configs[0].packages-to-scan | `*`| `List of Strings`.The list of packages to scan for a group (comma separated) -|springdoc.group-configs[0].paths-to-match | `/*`| `List of Strings`.The list of paths to match for a group(comma separated) -|springdoc.group-configs[0].paths-to-exclude | ``| `List of Strings`.The list of paths to exclude for a group(comma separated) -|springdoc.group-configs[0].packages-to-exclude | | `List of Strings`.The list of packages to exclude for a group(comma separated) -|springdoc.group-configs[0].produces-to-match | `/*`| `List of Strings`.The list of produces mediaTypes to match (comma separated) -|springdoc.group-configs[0].consumes-to-match | `/*`| `List of Strings`.The list of consumes mediaTypes to match (comma separated) -|springdoc.group-configs[0].headers-to-match | `/*`| `List of Strings`.The list of headers to match (comma separated) -|springdoc.webjars.prefix | `/webjars` |`String`, To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux. +|springdoc.group-configs[0].group | | `String`. The group name +|springdoc.group-configs[0].display-name | | `String`. The display name of the group. +|springdoc.group-configs[0].packages-to-scan | `*`| `List of Strings`. The list of packages to scan for a group (comma separated) +|springdoc.group-configs[0].paths-to-match | `/*`| `List of Strings`. The list of paths to match for a group (comma separated) +|springdoc.group-configs[0].paths-to-exclude | ``| `List of Strings`. The list of paths to exclude for a group (comma separated) +|springdoc.group-configs[0].packages-to-exclude | | `List of Strings`. The list of packages to exclude for a group (comma separated) +|springdoc.group-configs[0].produces-to-match | `/*`| `List of Strings`. The list of produces mediaTypes to match (comma separated) +|springdoc.group-configs[0].consumes-to-match | `/*`| `List of Strings`. The list of consumes mediaTypes to match (comma separated) +|springdoc.group-configs[0].headers-to-match | `/*`| `List of Strings`. The list of headers to match (comma separated) +|springdoc.webjars.prefix | `/webjars` |`String`. To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux. |springdoc.api-docs.resolve-schema-properties | `false` | `Boolean`. To enable property resolver on @Schema (name, title and description). |springdoc.remove-broken-reference-definitions | `true` | `Boolean`. To disable removal of broken reference definitions. |springdoc.writer-with-default-pretty-printer | `false` | `Boolean`. To enable pretty print of the OpenApi specification. @@ -38,8 +38,7 @@ |springdoc.model-converters.sort-converter.enabled | `true` | `Boolean`. To disable Sort converter. |springdoc.use-fqn | `false` | `Boolean`. To enable fully qualified names. |springdoc.show-login-endpoint | `false` | `Boolean`. To make spring security login-endpoint visible. -|springdoc.pre-loading-enabled | `false` | `Boolean`. Pre-loading setting to load OpenAPI on application startup. -|springdoc.pre-loading-locales | | `List of Strings`.The list of locales to load OpenAPI on application startup.(comma separated) If not specified, it will preload with the default Locale. +|springdoc.pre-loading-locales | | `List of Strings`. The list of locales to load OpenAPI on application startup (comma separated). If not specified, it will preload with the default Locale. |springdoc.writer-with-order-by-keys | `false` | `Boolean`. Enable a deterministic/alphabetical ordering. |springdoc.use-management-port | `false` | `Boolean`. To expose the swagger-ui on the actuator management port. |springdoc.disable-i18n | `false` | `Boolean`. To disable automatic translation using i18n. @@ -49,7 +48,7 @@ |springdoc.enable-kotlin | `true` | `Boolproperty resolver on @Schema (extensionean`. To enable Kotlin support. |springdoc.enable-hateoas | `true` | `Boolean`. To enable spring-hateoas support. |springdoc.enable-data-rest | `true` | `Boolean`. To enable spring-data-rest support. -|springdoc.api-docs.version | `openapi_3_0` | `String`. To Choose `OpenAPI 3.0` or `OpenAPI 3.1` (using the value `OPENAPI_3_1`). +|springdoc.api-docs.version | `openapi_3_0` | `String`. To choose `OpenAPI 3.0` or `OpenAPI 3.1` (using the value `OPENAPI_3_1`). |springdoc.default-flat-param-object | `false` | `Boolean`. To default flatten parameter. |springdoc.default-support-form-data | `false` | `Boolean`. To default set parameters to form data when specifying api to accept form data. |springdoc.nullable-request-parameter-enabled | `true` | `Boolean`. To default Enable Support for nullable request parameters in Kotlin. diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index 08e8371..aed9279 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -281,6 +281,28 @@ ForwardedHeaderFilter forwardedHeaderFilter() { } ---- +* If you need to manually adjust the URL displayed in the Swagger UI, implement the `ServerBaseUrlCustomizer` interface. This might be necessary to remove the port number, for example. + +[source,java] +---- +@Bean +public class CustomServerBaseUrlCustomizer implements ServerBaseUrlCustomizer { + @Override + public String customize(String serverBaseUrl) { + try { + URL url = new URL(serverBaseUrl); + if (url.getHost().contains(".com")) { + serverBaseUrl = new URL(url.getProtocol(),url.getHost(),url.getFile()).toString(); + } + } catch (MalformedURLException ex) { + // nothing we can do + } + + return serverBaseUrl; + } +} +---- + === Is `@JsonView` annotations in Spring MVC APIs supported? * Yes From ed402dab62d80d063e9df7a96c8878bff440bc24 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Fri, 27 Sep 2024 23:15:35 +0200 Subject: [PATCH 127/196] docs update --- docs/faq.html | 8 ++++---- docs/index.html | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index 63448a8..e13649f 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -668,7 +668,7 @@

@@ -688,7 +688,7 @@

@@ -1595,7 +1595,7 @@

@@ -2124,7 +2124,7 @@

diff --git a/docs/index.html b/docs/index.html index ac14e4b..e9c99c3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3325,7 +3325,7 @@

@@ -3345,7 +3345,7 @@

@@ -4252,7 +4252,7 @@

From ad2749f19a6933ce340c4db816524acc263f37ec Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Mon, 30 Sep 2024 18:33:50 +0200 Subject: [PATCH 128/196] docs update --- docs/features.html | 2 +- docs/index.html | 2 +- src/docs/asciidoc/features.adoc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/features.html b/docs/features.html index d648c6f..620aea1 100644 --- a/docs/features.html +++ b/docs/features.html @@ -165,7 +165,7 @@

diff --git a/docs/index.html b/docs/index.html index e9c99c3..4be0510 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1145,7 +1145,7 @@

diff --git a/src/docs/asciidoc/features.adoc b/src/docs/asciidoc/features.adoc index c832293..a49e6f4 100644 --- a/src/docs/asciidoc/features.adoc +++ b/src/docs/asciidoc/features.adoc @@ -81,7 +81,7 @@ Here is the link for some sample codes: And the Demo code, using the functional endpoints DSL: -- link:https://github.com/springdoc/springdoc-openapi-demos/tree/2.x/demo-spring-boot-3-webflux-functional[Sample webflux application using functional DSL] +- link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample webflux application using functional DSL] Since version `v1.3.8`, the support of functional endpoints has been added. Two main annotations have been added for this purpose: `@RouterOperations` and `@RouterOperation`. From d1d718537ea0c0d237a4b4800a43e7d966e37519 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 6 Oct 2024 12:33:21 +0200 Subject: [PATCH 129/196] docs update --- docs/features.html | 2 +- docs/index.html | 58 ------------------------ docs/intro.html | 7 +-- docs/v1/index.html | 45 ------------------ src/docs/asciidoc/docinfo-footer.html | 21 --------- src/docs/asciidoc/docinfo.html | 26 +---------- src/docs/asciidoc/intro.adoc | 5 -- src/docs/asciidoc/v1/docinfo-footer.html | 39 ---------------- 8 files changed, 3 insertions(+), 200 deletions(-) diff --git a/docs/features.html b/docs/features.html index 620aea1..c15ceda 100644 --- a/docs/features.html +++ b/docs/features.html @@ -353,7 +353,7 @@

diff --git a/docs/index.html b/docs/index.html index 4be0510..8f4a4a4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,14 +1,6 @@ - - - - @@ -33,30 +25,6 @@ display: none } - - - - - - - - @@ -315,11 +283,6 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - - @@ -4784,27 +4747,6 @@

- - - - diff --git a/docs/intro.html b/docs/intro.html index 6325a13..dcd6d7f 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -76,11 +76,6 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - - @@ -98,7 +93,7 @@

Introduction diff --git a/docs/v1/index.html b/docs/v1/index.html index ab1bb7f..6fb1ee1 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -12,30 +12,6 @@ display: none } - - - - - - - - @@ -4375,27 +4351,6 @@

- - diff --git a/src/docs/asciidoc/docinfo-footer.html b/src/docs/asciidoc/docinfo-footer.html index e35c962..e69de29 100644 --- a/src/docs/asciidoc/docinfo-footer.html +++ b/src/docs/asciidoc/docinfo-footer.html @@ -1,21 +0,0 @@ - - - - diff --git a/src/docs/asciidoc/docinfo.html b/src/docs/asciidoc/docinfo.html index a81434f..9df1a95 100644 --- a/src/docs/asciidoc/docinfo.html +++ b/src/docs/asciidoc/docinfo.html @@ -2,28 +2,4 @@ #header #revnumber { display: none } - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/docs/asciidoc/intro.adoc b/src/docs/asciidoc/intro.adoc index c32a8b7..bab79f0 100644 --- a/src/docs/asciidoc/intro.adoc +++ b/src/docs/asciidoc/intro.adoc @@ -27,11 +27,6 @@ image::img/spring-io-24.png[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). ++++ - - - - diff --git a/src/docs/asciidoc/v1/docinfo-footer.html b/src/docs/asciidoc/v1/docinfo-footer.html index e19f1b2..e69de29 100644 --- a/src/docs/asciidoc/v1/docinfo-footer.html +++ b/src/docs/asciidoc/v1/docinfo-footer.html @@ -1,39 +0,0 @@ - - - - - - - - - - \ No newline at end of file From 7e13338576c5dd883fe48b4e6ca754ecd1db3750 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 6 Oct 2024 12:51:41 +0200 Subject: [PATCH 130/196] docs update --- docs/index.html | 10 ++++++++++ docs/v1/index.html | 10 ++++++++++ src/docs/asciidoc/docinfo.html | 12 +++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index 8f4a4a4..f06c2b4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -25,6 +25,16 @@ display: none } + + + + diff --git a/docs/v1/index.html b/docs/v1/index.html index 6fb1ee1..2613274 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -12,6 +12,16 @@ display: none } + + + + diff --git a/src/docs/asciidoc/docinfo.html b/src/docs/asciidoc/docinfo.html index 9df1a95..112e384 100644 --- a/src/docs/asciidoc/docinfo.html +++ b/src/docs/asciidoc/docinfo.html @@ -2,4 +2,14 @@ #header #revnumber { display: none } - \ No newline at end of file + + + + + \ No newline at end of file From 9e5a1275f59f774d7c24b31d172c92d1197f992b Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 6 Oct 2024 13:47:57 +0200 Subject: [PATCH 131/196] docs update --- docs/core-properties.html | 25 +- docs/demos.html | 25 +- docs/faq.html | 37 +- docs/features.html | 25 +- docs/getting-started.html | 25 +- docs/index.html | 334 +++++++++--------- docs/intro.html | 25 +- docs/migrating-from-springdoc-v1.html | 25 +- docs/migrating-from-springfox.html | 25 +- docs/modules.html | 25 +- docs/other-resources.html | 25 +- docs/plugins.html | 25 +- docs/properties.html | 46 ++- docs/sponsor.html | 25 +- docs/thanks.html | 25 +- docs/ui-properties.html | 25 +- docs/v1/core-properties.html | 25 +- docs/v1/demos.html | 25 +- docs/v1/faq.html | 25 +- docs/v1/features.html | 25 +- docs/v1/getting-started.html | 25 +- docs/v1/index.html | 299 ++++++++-------- docs/v1/intro.html | 25 +- docs/v1/migrating-from-springfox.html | 25 +- docs/v1/modules.html | 25 +- docs/v1/other-resources.html | 25 +- docs/v1/plugins.html | 25 +- docs/v1/privacy-policy.html | 25 +- docs/v1/properties.html | 46 ++- docs/v1/sponsor.html | 25 +- docs/v1/thanks.html | 25 +- docs/v1/ui-properties.html | 25 +- src/docs/asciidoc/core-properties.adoc | 23 +- src/docs/asciidoc/demos.adoc | 23 +- src/docs/asciidoc/faq.adoc | 25 +- src/docs/asciidoc/features.adoc | 23 +- src/docs/asciidoc/getting-started.adoc | 23 +- src/docs/asciidoc/intro.adoc | 23 +- .../asciidoc/migrating-from-springdoc-v1.adoc | 23 +- .../asciidoc/migrating-from-springfox.adoc | 23 +- src/docs/asciidoc/modules.adoc | 23 +- src/docs/asciidoc/other-resources.adoc | 23 +- src/docs/asciidoc/plugins.adoc | 23 +- src/docs/asciidoc/sponsor.adoc | 23 +- src/docs/asciidoc/thanks.adoc | 23 +- src/docs/asciidoc/ui-properties.adoc | 23 +- src/docs/asciidoc/v1/core-properties.adoc | 23 +- src/docs/asciidoc/v1/demos.adoc | 23 +- src/docs/asciidoc/v1/faq.adoc | 23 +- src/docs/asciidoc/v1/features.adoc | 23 +- src/docs/asciidoc/v1/getting-started.adoc | 23 +- src/docs/asciidoc/v1/intro.adoc | 23 +- .../asciidoc/v1/migrating-from-springfox.adoc | 23 +- src/docs/asciidoc/v1/modules.adoc | 23 +- src/docs/asciidoc/v1/other-resources.adoc | 23 +- src/docs/asciidoc/v1/plugins.adoc | 23 +- src/docs/asciidoc/v1/privacy-policy.adoc | 23 +- src/docs/asciidoc/v1/sponsor.adoc | 23 +- src/docs/asciidoc/v1/thanks.adoc | 23 +- src/docs/asciidoc/v1/ui-properties.adoc | 23 +- 60 files changed, 1000 insertions(+), 1083 deletions(-) diff --git a/docs/core-properties.html b/docs/core-properties.html index ba094a0..03e5131 100644 --- a/docs/core-properties.html +++ b/docs/core-properties.html @@ -310,22 +310,21 @@ - - - - + + + diff --git a/docs/demos.html b/docs/demos.html index 1dc997f..a23367b 100644 --- a/docs/demos.html +++ b/docs/demos.html @@ -71,25 +71,24 @@

- - - + + + diff --git a/docs/faq.html b/docs/faq.html index e13649f..9a0b74c 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2021,13 +2021,15 @@

- + -spring-boot Versions -Minimum springdoc-openapi Versions +

spring-boot Versions

+

Minimum springdoc-openapi Versions

+ + +

3.4.x

+

2.7.x+

- -

3.0.x

2.0.x+

@@ -2106,25 +2108,24 @@

- - - - + + + diff --git a/docs/features.html b/docs/features.html index c15ceda..f62e5ed 100644 --- a/docs/features.html +++ b/docs/features.html @@ -335,25 +335,24 @@

- - - + + + diff --git a/docs/getting-started.html b/docs/getting-started.html index 42da390..eccff00 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -91,24 +91,23 @@

Getting S springdoc.swagger-ui.path=/swagger-ui.html - - - - + + + diff --git a/docs/index.html b/docs/index.html index f06c2b4..d7edf5b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -293,18 +293,17 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - - + + +
@@ -369,18 +368,17 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

- - - - + + +
@@ -967,18 +965,17 @@

3.11. Jav

- - - - + + + @@ -1288,18 +1285,17 @@

- - - + + + @@ -1592,18 +1588,17 @@

- - - + + + @@ -1987,18 +1981,17 @@

6.2. Gradle p - - - - + + + @@ -2044,18 +2037,17 @@

- - - + + + @@ -2247,18 +2239,17 @@

- - - + + + @@ -2612,18 +2601,17 @@

- - - + + + @@ -2645,18 +2633,17 @@

12. Special Thanks

JetBrains - - - - + + +
@@ -4651,13 +4638,15 @@

- + -spring-boot Versions -Minimum springdoc-openapi Versions +

spring-boot Versions

+

Minimum springdoc-openapi Versions

+ + +

3.4.x

+

2.7.x+

- -

3.0.x

2.0.x+

@@ -4736,18 +4725,17 @@

- - - - + + + diff --git a/docs/intro.html b/docs/intro.html index dcd6d7f..f8ff1ba 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -76,24 +76,23 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - - + + + diff --git a/docs/migrating-from-springdoc-v1.html b/docs/migrating-from-springdoc-v1.html index 3cb50b0..5d4cf9d 100644 --- a/docs/migrating-from-springdoc-v1.html +++ b/docs/migrating-from-springdoc-v1.html @@ -217,24 +217,23 @@

- - - + + + diff --git a/docs/migrating-from-springfox.html b/docs/migrating-from-springfox.html index fb0f539..2d257f7 100644 --- a/docs/migrating-from-springfox.html +++ b/docs/migrating-from-springfox.html @@ -212,24 +212,23 @@

- - - + + + diff --git a/docs/modules.html b/docs/modules.html index 1b30e98..9e49ebe 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -613,25 +613,24 @@

Javadoc - - - - + + + diff --git a/docs/other-resources.html b/docs/other-resources.html index 885899b..f9e9452 100644 --- a/docs/other-resources.html +++ b/docs/other-resources.html @@ -86,25 +86,24 @@

- - - + + + diff --git a/docs/plugins.html b/docs/plugins.html index 12e94b9..cf04666 100644 --- a/docs/plugins.html +++ b/docs/plugins.html @@ -136,25 +136,24 @@

Gradle plug - - - - + + + diff --git a/docs/properties.html b/docs/properties.html index 42da469..a775862 100644 --- a/docs/properties.html +++ b/docs/properties.html @@ -318,18 +318,17 @@

- - - + + + diff --git a/docs/sponsor.html b/docs/sponsor.html index f473a4a..781f0e0 100644 --- a/docs/sponsor.html +++ b/docs/sponsor.html @@ -111,25 +111,24 @@

- - - + + + diff --git a/docs/thanks.html b/docs/thanks.html index ee574ee..3280618 100644 --- a/docs/thanks.html +++ b/docs/thanks.html @@ -47,24 +47,23 @@

Special Thanks

JetBrains - - - - + + + diff --git a/docs/ui-properties.html b/docs/ui-properties.html index 23b8f76..588206d 100644 --- a/docs/ui-properties.html +++ b/docs/ui-properties.html @@ -265,22 +265,21 @@ - - - - + + + diff --git a/docs/v1/core-properties.html b/docs/v1/core-properties.html index ec90a91..eeb9d4e 100644 --- a/docs/v1/core-properties.html +++ b/docs/v1/core-properties.html @@ -290,22 +290,21 @@ - - - - + + + diff --git a/docs/v1/demos.html b/docs/v1/demos.html index f435940..ff45bc5 100644 --- a/docs/v1/demos.html +++ b/docs/v1/demos.html @@ -77,25 +77,24 @@

- - - + + + diff --git a/docs/v1/faq.html b/docs/v1/faq.html index 0dab8bf..8685c6e 100644 --- a/docs/v1/faq.html +++ b/docs/v1/faq.html @@ -1996,25 +1996,24 @@

- - - + + + diff --git a/docs/v1/features.html b/docs/v1/features.html index 504dae1..1a5fa41 100644 --- a/docs/v1/features.html +++ b/docs/v1/features.html @@ -335,25 +335,24 @@

- - - + + + diff --git a/docs/v1/getting-started.html b/docs/v1/getting-started.html index f85a6f9..5d30ff4 100644 --- a/docs/v1/getting-started.html +++ b/docs/v1/getting-started.html @@ -91,24 +91,23 @@

Getting S springdoc.swagger-ui.path=/swagger-ui.html - - - - + + + diff --git a/docs/v1/index.html b/docs/v1/index.html index 2613274..2795a2f 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -275,18 +275,17 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - - + + +
@@ -351,18 +350,17 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

- - - - + + +
@@ -894,18 +892,17 @@

3.11. Jav

- - - - + + + @@ -1215,18 +1212,17 @@

- - - + + + @@ -1499,18 +1495,17 @@

- - - + + + @@ -1894,18 +1888,17 @@

6.2. Gradle p - - - - + + + @@ -1957,18 +1950,17 @@

- - - + + + @@ -2158,18 +2150,17 @@

- - - + + + @@ -2326,18 +2316,17 @@

- - - + + + @@ -2359,18 +2348,17 @@

11. Special Thanks

JetBrains - - - - + + +
@@ -4340,18 +4328,17 @@

- - - + + +

diff --git a/docs/v1/intro.html b/docs/v1/intro.html index cad598d..1c2d38c 100644 --- a/docs/v1/intro.html +++ b/docs/v1/intro.html @@ -76,24 +76,23 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - - + + + diff --git a/docs/v1/migrating-from-springfox.html b/docs/v1/migrating-from-springfox.html index 716ba47..be23464 100644 --- a/docs/v1/migrating-from-springfox.html +++ b/docs/v1/migrating-from-springfox.html @@ -215,24 +215,23 @@

- - - + + + diff --git a/docs/v1/modules.html b/docs/v1/modules.html index 8d4600c..b9c33bc 100644 --- a/docs/v1/modules.html +++ b/docs/v1/modules.html @@ -558,25 +558,24 @@

Javadoc - - - - + + + diff --git a/docs/v1/other-resources.html b/docs/v1/other-resources.html index b2ddea8..f9e9452 100644 --- a/docs/v1/other-resources.html +++ b/docs/v1/other-resources.html @@ -86,25 +86,24 @@

- - - + + + diff --git a/docs/v1/plugins.html b/docs/v1/plugins.html index 4470597..fcdcd4d 100644 --- a/docs/v1/plugins.html +++ b/docs/v1/plugins.html @@ -136,25 +136,24 @@

Gradle plug - - - - + + + diff --git a/docs/v1/privacy-policy.html b/docs/v1/privacy-policy.html index a1a71b5..cf3eee8 100644 --- a/docs/v1/privacy-policy.html +++ b/docs/v1/privacy-policy.html @@ -252,22 +252,21 @@

If you have any questions or concerns about this Policy or its implementation, you may contact us at support@springdoc.org.

- - - - + + + diff --git a/docs/v1/properties.html b/docs/v1/properties.html index 97cb901..adfad3c 100644 --- a/docs/v1/properties.html +++ b/docs/v1/properties.html @@ -318,18 +318,17 @@

- - - + + + diff --git a/docs/v1/sponsor.html b/docs/v1/sponsor.html index 1f2b62f..781f0e0 100644 --- a/docs/v1/sponsor.html +++ b/docs/v1/sponsor.html @@ -111,25 +111,24 @@

- - - + + + diff --git a/docs/v1/thanks.html b/docs/v1/thanks.html index 87fa9e2..3280618 100644 --- a/docs/v1/thanks.html +++ b/docs/v1/thanks.html @@ -47,24 +47,23 @@

Special Thanks

JetBrains - - - - + + + diff --git a/docs/v1/ui-properties.html b/docs/v1/ui-properties.html index 314301c..588206d 100644 --- a/docs/v1/ui-properties.html +++ b/docs/v1/ui-properties.html @@ -265,22 +265,21 @@ - - - - + + + diff --git a/src/docs/asciidoc/core-properties.adoc b/src/docs/asciidoc/core-properties.adoc index 30ef9d1..ccffe59 100644 --- a/src/docs/asciidoc/core-properties.adoc +++ b/src/docs/asciidoc/core-properties.adoc @@ -59,16 +59,15 @@ |=== ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/demos.adoc b/src/docs/asciidoc/demos.adoc index e0e55a1..684630a 100644 --- a/src/docs/asciidoc/demos.adoc +++ b/src/docs/asciidoc/demos.adoc @@ -15,16 +15,15 @@ image::img/pets.png[pets.png] * link:https://github.com/springdoc/springdoc-openapi-demos/tree/master[https://github.com/springdoc/springdoc-openapi-demos/tree/master, window="_blank"] ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index 8d18fe7..a320b29 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -1076,7 +1076,7 @@ More precisely, this the exhaustive list of spring-boot versions against which ` |=== | spring-boot Versions | Minimum springdoc-openapi Versions - +|`3.4.x` | `2.7.x`+ |`3.0.x` | `2.0.x`+ |`2.7.x`, `1.5.x` | `1.6.0`+ |`2.6.x`, `1.5.x` | `1.6.0`+ @@ -1117,16 +1117,15 @@ This can be fixed by adding the `-parameters` arg to the Maven Compiler Plugin. ---- ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/features.adoc b/src/docs/asciidoc/features.adoc index a49e6f4..7c8f329 100644 --- a/src/docs/asciidoc/features.adoc +++ b/src/docs/asciidoc/features.adoc @@ -180,16 +180,15 @@ And some project tests: (from app69 to app75) ---- ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/getting-started.adoc b/src/docs/asciidoc/getting-started.adoc index f82a480..3bbfa4a 100644 --- a/src/docs/asciidoc/getting-started.adoc +++ b/src/docs/asciidoc/getting-started.adoc @@ -32,16 +32,15 @@ springdoc.swagger-ui.path=/swagger-ui.html ---- ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/intro.adoc b/src/docs/asciidoc/intro.adoc index bab79f0..cc226b8 100644 --- a/src/docs/asciidoc/intro.adoc +++ b/src/docs/asciidoc/intro.adoc @@ -27,16 +27,15 @@ image::img/spring-io-24.png[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc b/src/docs/asciidoc/migrating-from-springdoc-v1.adoc index 9e1d0b4..fac530f 100644 --- a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc +++ b/src/docs/asciidoc/migrating-from-springdoc-v1.adoc @@ -55,16 +55,15 @@ In addition: * Replace `springdoc-openapi-webflux-ui` by `springdoc-openapi-starter-webflux-ui` ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/migrating-from-springfox.adoc b/src/docs/asciidoc/migrating-from-springfox.adoc index e097dad..177ffca 100644 --- a/src/docs/asciidoc/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/migrating-from-springfox.adoc @@ -111,16 +111,15 @@ springdoc.pathsToMatch=/v1, /api/balance/** ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/modules.adoc b/src/docs/asciidoc/modules.adoc index 7bfd4f1..8152b9c 100644 --- a/src/docs/asciidoc/modules.adoc +++ b/src/docs/asciidoc/modules.adoc @@ -289,16 +289,15 @@ Ensure that you add it as well as its annotation processor to your project's dep TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/other-resources.adoc b/src/docs/asciidoc/other-resources.adoc index b721e5c..7b12389 100644 --- a/src/docs/asciidoc/other-resources.adoc +++ b/src/docs/asciidoc/other-resources.adoc @@ -26,16 +26,15 @@ Snapshots: ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/plugins.adoc b/src/docs/asciidoc/plugins.adoc index 998b489..fa54df7 100644 --- a/src/docs/asciidoc/plugins.adoc +++ b/src/docs/asciidoc/plugins.adoc @@ -80,16 +80,15 @@ For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can cons * link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/sponsor.adoc b/src/docs/asciidoc/sponsor.adoc index 34b8cd7..ee1130a 100644 --- a/src/docs/asciidoc/sponsor.adoc +++ b/src/docs/asciidoc/sponsor.adoc @@ -45,16 +45,15 @@ Gold sponsors donate $500 per month to the project, and get the following benefi ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/thanks.adoc b/src/docs/asciidoc/thanks.adoc index 9d47d2c..edd4b92 100644 --- a/src/docs/asciidoc/thanks.adoc +++ b/src/docs/asciidoc/thanks.adoc @@ -8,16 +8,15 @@ image::img/jetbrains.svg[JetBrains] ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/ui-properties.adoc b/src/docs/asciidoc/ui-properties.adoc index 5144b77..8f19dd4 100644 --- a/src/docs/asciidoc/ui-properties.adoc +++ b/src/docs/asciidoc/ui-properties.adoc @@ -51,17 +51,16 @@ |=== ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/v1/core-properties.adoc b/src/docs/asciidoc/v1/core-properties.adoc index d2d5d37..31ce3ed 100644 --- a/src/docs/asciidoc/v1/core-properties.adoc +++ b/src/docs/asciidoc/v1/core-properties.adoc @@ -55,16 +55,15 @@ |=== ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/demos.adoc b/src/docs/asciidoc/v1/demos.adoc index 8ce0aa7..28d9a44 100644 --- a/src/docs/asciidoc/v1/demos.adoc +++ b/src/docs/asciidoc/v1/demos.adoc @@ -17,16 +17,15 @@ image::img/pets.png[pets.png] * link:https://github.com/springdoc/springdoc-openapi-demos.git[https://github.com/springdoc/springdoc-openapi-demos.git, window="_blank"] ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/faq.adoc b/src/docs/asciidoc/v1/faq.adoc index df543ae..b5fdbbe 100644 --- a/src/docs/asciidoc/v1/faq.adoc +++ b/src/docs/asciidoc/v1/faq.adoc @@ -1033,16 +1033,15 @@ When overriding the default spring-boot registered `HttpMessageConverter`, you s NOTE: Order is very important, when registering `HttpMessageConverters`. ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/features.adoc b/src/docs/asciidoc/v1/features.adoc index 5e8cac7..8996ea9 100644 --- a/src/docs/asciidoc/v1/features.adoc +++ b/src/docs/asciidoc/v1/features.adoc @@ -180,16 +180,15 @@ And some project tests: (from app69 to app75) ---- ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/getting-started.adoc b/src/docs/asciidoc/v1/getting-started.adoc index cd196cc..fc9cf5b 100644 --- a/src/docs/asciidoc/v1/getting-started.adoc +++ b/src/docs/asciidoc/v1/getting-started.adoc @@ -32,16 +32,15 @@ springdoc.swagger-ui.path=/swagger-ui.html ---- ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/intro.adoc b/src/docs/asciidoc/v1/intro.adoc index 55bb3a4..1959d31 100644 --- a/src/docs/asciidoc/v1/intro.adoc +++ b/src/docs/asciidoc/v1/intro.adoc @@ -25,16 +25,15 @@ image::img/springdoc-openapi-prez.gif[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/migrating-from-springfox.adoc b/src/docs/asciidoc/v1/migrating-from-springfox.adoc index 78a1f03..dad1af7 100644 --- a/src/docs/asciidoc/v1/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/v1/migrating-from-springfox.adoc @@ -112,16 +112,15 @@ springdoc.pathsToMatch=/v1, /api/balance/** ** link:index.html#how-can-i-hide-an-operation-or-a-controller-from-documentation[how-can-i-hide-an-operation-or-a-controller-from-documentation] ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/v1/modules.adoc b/src/docs/asciidoc/v1/modules.adoc index 55d3555..a04d3ff 100644 --- a/src/docs/asciidoc/v1/modules.adoc +++ b/src/docs/asciidoc/v1/modules.adoc @@ -295,16 +295,15 @@ NOTE: Make sure, you enable the annotation processor of `therapi-runtime-javadoc TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/other-resources.adoc b/src/docs/asciidoc/v1/other-resources.adoc index ca22e34..ba3baa2 100644 --- a/src/docs/asciidoc/v1/other-resources.adoc +++ b/src/docs/asciidoc/v1/other-resources.adoc @@ -25,16 +25,15 @@ Snapshots: * link:https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/[https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/, window="_blank", window="_blank"] ++++ - - - - + + + ++++ diff --git a/src/docs/asciidoc/v1/plugins.adoc b/src/docs/asciidoc/v1/plugins.adoc index d14a621..2f3eff4 100644 --- a/src/docs/asciidoc/v1/plugins.adoc +++ b/src/docs/asciidoc/v1/plugins.adoc @@ -80,16 +80,15 @@ For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can cons * link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/privacy-policy.adoc b/src/docs/asciidoc/v1/privacy-policy.adoc index f158492..d4639b7 100644 --- a/src/docs/asciidoc/v1/privacy-policy.adoc +++ b/src/docs/asciidoc/v1/privacy-policy.adoc @@ -145,16 +145,15 @@ Response Time: We make every effort to respond to your request within one month If you have any questions or concerns about this Policy or its implementation, you may contact us at support@springdoc.org. ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/sponsor.adoc b/src/docs/asciidoc/v1/sponsor.adoc index 7beac85..7b69169 100644 --- a/src/docs/asciidoc/v1/sponsor.adoc +++ b/src/docs/asciidoc/v1/sponsor.adoc @@ -45,16 +45,15 @@ Gold sponsors donate $500 per month to the project, and get the following benefi - If issues are not created by the end of the month, the remaining ones are lost. ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/thanks.adoc b/src/docs/asciidoc/v1/thanks.adoc index 9d47d2c..edd4b92 100644 --- a/src/docs/asciidoc/v1/thanks.adoc +++ b/src/docs/asciidoc/v1/thanks.adoc @@ -8,16 +8,15 @@ image::img/jetbrains.svg[JetBrains] ++++ - - - - + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/ui-properties.adoc b/src/docs/asciidoc/v1/ui-properties.adoc index 5144b77..8f19dd4 100644 --- a/src/docs/asciidoc/v1/ui-properties.adoc +++ b/src/docs/asciidoc/v1/ui-properties.adoc @@ -51,17 +51,16 @@ |=== ++++ - - - - + + + ++++ From 88ad71d9bd2773d343fd752455e7509f42b3b870 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 6 Oct 2024 14:00:57 +0200 Subject: [PATCH 132/196] docs update --- docs/core-properties.html | 14 +- docs/demos.html | 14 +- docs/faq.html | 14 +- docs/features.html | 14 +- docs/getting-started.html | 14 +- docs/index.html | 168 ++---------------- docs/intro.html | 14 +- docs/migrating-from-springdoc-v1.html | 14 +- docs/migrating-from-springfox.html | 14 +- docs/modules.html | 14 +- docs/other-resources.html | 14 +- docs/plugins.html | 14 +- docs/properties.html | 24 +-- docs/sponsor.html | 14 +- docs/thanks.html | 14 +- docs/ui-properties.html | 14 +- docs/v1/core-properties.html | 14 +- docs/v1/demos.html | 14 +- docs/v1/faq.html | 14 +- docs/v1/features.html | 14 +- docs/v1/getting-started.html | 14 +- docs/v1/index.html | 156 ++-------------- docs/v1/intro.html | 14 +- docs/v1/migrating-from-springfox.html | 14 +- docs/v1/modules.html | 14 +- docs/v1/other-resources.html | 14 +- docs/v1/plugins.html | 14 +- docs/v1/privacy-policy.html | 14 +- docs/v1/properties.html | 24 +-- docs/v1/sponsor.html | 14 +- docs/v1/thanks.html | 14 +- docs/v1/ui-properties.html | 14 +- src/docs/asciidoc/core-properties.adoc | 11 -- src/docs/asciidoc/demos.adoc | 11 -- src/docs/asciidoc/faq.adoc | 11 -- src/docs/asciidoc/features.adoc | 11 -- src/docs/asciidoc/getting-started.adoc | 11 -- src/docs/asciidoc/intro.adoc | 11 -- .../asciidoc/migrating-from-springdoc-v1.adoc | 11 -- .../asciidoc/migrating-from-springfox.adoc | 11 -- src/docs/asciidoc/modules.adoc | 11 -- src/docs/asciidoc/other-resources.adoc | 11 -- src/docs/asciidoc/plugins.adoc | 11 -- src/docs/asciidoc/sponsor.adoc | 11 -- src/docs/asciidoc/thanks.adoc | 11 -- src/docs/asciidoc/ui-properties.adoc | 11 -- src/docs/asciidoc/v1/core-properties.adoc | 11 -- src/docs/asciidoc/v1/demos.adoc | 11 -- src/docs/asciidoc/v1/faq.adoc | 11 -- src/docs/asciidoc/v1/features.adoc | 11 -- src/docs/asciidoc/v1/getting-started.adoc | 11 -- src/docs/asciidoc/v1/intro.adoc | 11 -- .../asciidoc/v1/migrating-from-springfox.adoc | 11 -- src/docs/asciidoc/v1/modules.adoc | 11 -- src/docs/asciidoc/v1/other-resources.adoc | 11 -- src/docs/asciidoc/v1/plugins.adoc | 11 -- src/docs/asciidoc/v1/privacy-policy.adoc | 11 -- src/docs/asciidoc/v1/sponsor.adoc | 11 -- src/docs/asciidoc/v1/thanks.adoc | 11 -- src/docs/asciidoc/v1/ui-properties.adoc | 11 -- 60 files changed, 87 insertions(+), 985 deletions(-) diff --git a/docs/core-properties.html b/docs/core-properties.html index 03e5131..8b94073 100644 --- a/docs/core-properties.html +++ b/docs/core-properties.html @@ -310,21 +310,11 @@ - - - + diff --git a/docs/demos.html b/docs/demos.html index a23367b..b5bf60b 100644 --- a/docs/demos.html +++ b/docs/demos.html @@ -71,24 +71,14 @@

- - + diff --git a/docs/faq.html b/docs/faq.html index 9a0b74c..d971b94 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2108,24 +2108,14 @@

- - - + diff --git a/docs/features.html b/docs/features.html index f62e5ed..b586b4c 100644 --- a/docs/features.html +++ b/docs/features.html @@ -335,24 +335,14 @@

- - + diff --git a/docs/getting-started.html b/docs/getting-started.html index eccff00..dc3ac33 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -91,23 +91,13 @@

Getting S springdoc.swagger-ui.path=/swagger-ui.html - - - + diff --git a/docs/index.html b/docs/index.html index d7edf5b..1efa0eb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -293,17 +293,7 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - +
@@ -368,17 +358,7 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

- - - +
@@ -965,17 +945,7 @@

3.11. Jav

- - - + @@ -1285,17 +1255,7 @@

- - + @@ -1588,17 +1548,7 @@

- - +

5.2. swagger-ui properties

@@ -1860,17 +1810,7 @@

< - - - +

@@ -1981,17 +1921,7 @@

6.2. Gradle p - - - + @@ -2037,17 +1967,7 @@

- - + @@ -2239,17 +2159,7 @@

- - + @@ -2601,17 +2491,7 @@

- - + @@ -2633,17 +2513,7 @@

12. Special Thanks

JetBrains - - - +
@@ -4725,17 +4595,7 @@

- - - + diff --git a/docs/intro.html b/docs/intro.html index f8ff1ba..470c06c 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -76,23 +76,13 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - + diff --git a/docs/migrating-from-springdoc-v1.html b/docs/migrating-from-springdoc-v1.html index 5d4cf9d..284ed20 100644 --- a/docs/migrating-from-springdoc-v1.html +++ b/docs/migrating-from-springdoc-v1.html @@ -217,23 +217,13 @@

- - + diff --git a/docs/migrating-from-springfox.html b/docs/migrating-from-springfox.html index 2d257f7..f222ebf 100644 --- a/docs/migrating-from-springfox.html +++ b/docs/migrating-from-springfox.html @@ -212,23 +212,13 @@

- - + diff --git a/docs/modules.html b/docs/modules.html index 9e49ebe..43b732b 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -613,24 +613,14 @@

Javadoc - - - + diff --git a/docs/other-resources.html b/docs/other-resources.html index f9e9452..2b5144c 100644 --- a/docs/other-resources.html +++ b/docs/other-resources.html @@ -86,24 +86,14 @@

- - + diff --git a/docs/plugins.html b/docs/plugins.html index cf04666..5dd940c 100644 --- a/docs/plugins.html +++ b/docs/plugins.html @@ -136,24 +136,14 @@

Gradle plug - - - + diff --git a/docs/properties.html b/docs/properties.html index a775862..ac79b5c 100644 --- a/docs/properties.html +++ b/docs/properties.html @@ -318,17 +318,7 @@

- - + diff --git a/docs/sponsor.html b/docs/sponsor.html index 781f0e0..57b7a0c 100644 --- a/docs/sponsor.html +++ b/docs/sponsor.html @@ -111,24 +111,14 @@

- - + diff --git a/docs/thanks.html b/docs/thanks.html index 3280618..059af92 100644 --- a/docs/thanks.html +++ b/docs/thanks.html @@ -47,23 +47,13 @@

Special Thanks

JetBrains - - - + diff --git a/docs/ui-properties.html b/docs/ui-properties.html index 588206d..d903f0f 100644 --- a/docs/ui-properties.html +++ b/docs/ui-properties.html @@ -265,21 +265,11 @@ - - - + diff --git a/docs/v1/core-properties.html b/docs/v1/core-properties.html index eeb9d4e..28ae4d5 100644 --- a/docs/v1/core-properties.html +++ b/docs/v1/core-properties.html @@ -290,21 +290,11 @@ - - - + diff --git a/docs/v1/demos.html b/docs/v1/demos.html index ff45bc5..df7c04e 100644 --- a/docs/v1/demos.html +++ b/docs/v1/demos.html @@ -77,24 +77,14 @@

- - + diff --git a/docs/v1/faq.html b/docs/v1/faq.html index 8685c6e..0429bf8 100644 --- a/docs/v1/faq.html +++ b/docs/v1/faq.html @@ -1996,24 +1996,14 @@

- - + diff --git a/docs/v1/features.html b/docs/v1/features.html index 1a5fa41..02f6023 100644 --- a/docs/v1/features.html +++ b/docs/v1/features.html @@ -335,24 +335,14 @@

- - + diff --git a/docs/v1/getting-started.html b/docs/v1/getting-started.html index 5d30ff4..e0926e0 100644 --- a/docs/v1/getting-started.html +++ b/docs/v1/getting-started.html @@ -91,23 +91,13 @@

Getting S springdoc.swagger-ui.path=/swagger-ui.html - - - + diff --git a/docs/v1/index.html b/docs/v1/index.html index 2795a2f..38701bc 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -275,17 +275,7 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - +
@@ -350,17 +340,7 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

- - - +
@@ -892,17 +872,7 @@

3.11. Jav

- - - + @@ -1212,17 +1182,7 @@

- - + @@ -1495,17 +1455,7 @@

- - +

5.2. swagger-ui properties

@@ -1767,17 +1717,7 @@

< - - - +

@@ -1888,17 +1828,7 @@

6.2. Gradle p - - - + @@ -1950,17 +1880,7 @@

- - + @@ -2150,17 +2070,7 @@

- - + @@ -2316,17 +2216,7 @@

- - + @@ -2348,17 +2238,7 @@

11. Special Thanks

JetBrains - - - +
@@ -4328,17 +4208,7 @@

- - +

diff --git a/docs/v1/intro.html b/docs/v1/intro.html index 1c2d38c..b2ee480 100644 --- a/docs/v1/intro.html +++ b/docs/v1/intro.html @@ -76,23 +76,13 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- - - + diff --git a/docs/v1/migrating-from-springfox.html b/docs/v1/migrating-from-springfox.html index be23464..7cef799 100644 --- a/docs/v1/migrating-from-springfox.html +++ b/docs/v1/migrating-from-springfox.html @@ -215,23 +215,13 @@

- - + diff --git a/docs/v1/modules.html b/docs/v1/modules.html index b9c33bc..e8afed4 100644 --- a/docs/v1/modules.html +++ b/docs/v1/modules.html @@ -558,24 +558,14 @@

Javadoc - - - + diff --git a/docs/v1/other-resources.html b/docs/v1/other-resources.html index f9e9452..2b5144c 100644 --- a/docs/v1/other-resources.html +++ b/docs/v1/other-resources.html @@ -86,24 +86,14 @@

- - + diff --git a/docs/v1/plugins.html b/docs/v1/plugins.html index fcdcd4d..e892caf 100644 --- a/docs/v1/plugins.html +++ b/docs/v1/plugins.html @@ -136,24 +136,14 @@

Gradle plug - - - + diff --git a/docs/v1/privacy-policy.html b/docs/v1/privacy-policy.html index cf3eee8..ea3edb7 100644 --- a/docs/v1/privacy-policy.html +++ b/docs/v1/privacy-policy.html @@ -252,21 +252,11 @@

If you have any questions or concerns about this Policy or its implementation, you may contact us at support@springdoc.org.

- - - + diff --git a/docs/v1/properties.html b/docs/v1/properties.html index adfad3c..a0c7573 100644 --- a/docs/v1/properties.html +++ b/docs/v1/properties.html @@ -318,17 +318,7 @@

- - + diff --git a/docs/v1/sponsor.html b/docs/v1/sponsor.html index 781f0e0..57b7a0c 100644 --- a/docs/v1/sponsor.html +++ b/docs/v1/sponsor.html @@ -111,24 +111,14 @@

- - + diff --git a/docs/v1/thanks.html b/docs/v1/thanks.html index 3280618..059af92 100644 --- a/docs/v1/thanks.html +++ b/docs/v1/thanks.html @@ -47,23 +47,13 @@

Special Thanks

JetBrains - - - + diff --git a/docs/v1/ui-properties.html b/docs/v1/ui-properties.html index 588206d..d903f0f 100644 --- a/docs/v1/ui-properties.html +++ b/docs/v1/ui-properties.html @@ -265,21 +265,11 @@ - - - + diff --git a/src/docs/asciidoc/core-properties.adoc b/src/docs/asciidoc/core-properties.adoc index ccffe59..190a764 100644 --- a/src/docs/asciidoc/core-properties.adoc +++ b/src/docs/asciidoc/core-properties.adoc @@ -59,15 +59,4 @@ |=== ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/demos.adoc b/src/docs/asciidoc/demos.adoc index 684630a..729dcf1 100644 --- a/src/docs/asciidoc/demos.adoc +++ b/src/docs/asciidoc/demos.adoc @@ -15,15 +15,4 @@ image::img/pets.png[pets.png] * link:https://github.com/springdoc/springdoc-openapi-demos/tree/master[https://github.com/springdoc/springdoc-openapi-demos/tree/master, window="_blank"] ++++ - - - ++++ diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index a320b29..8383374 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -1117,15 +1117,4 @@ This can be fixed by adding the `-parameters` arg to the Maven Compiler Plugin. ---- ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/features.adoc b/src/docs/asciidoc/features.adoc index 7c8f329..0fbc027 100644 --- a/src/docs/asciidoc/features.adoc +++ b/src/docs/asciidoc/features.adoc @@ -180,15 +180,4 @@ And some project tests: (from app69 to app75) ---- ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/getting-started.adoc b/src/docs/asciidoc/getting-started.adoc index 3bbfa4a..843897a 100644 --- a/src/docs/asciidoc/getting-started.adoc +++ b/src/docs/asciidoc/getting-started.adoc @@ -32,15 +32,4 @@ springdoc.swagger-ui.path=/swagger-ui.html ---- ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/intro.adoc b/src/docs/asciidoc/intro.adoc index cc226b8..af98d77 100644 --- a/src/docs/asciidoc/intro.adoc +++ b/src/docs/asciidoc/intro.adoc @@ -27,15 +27,4 @@ image::img/spring-io-24.png[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc b/src/docs/asciidoc/migrating-from-springdoc-v1.adoc index fac530f..dcfbfa4 100644 --- a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc +++ b/src/docs/asciidoc/migrating-from-springdoc-v1.adoc @@ -55,15 +55,4 @@ In addition: * Replace `springdoc-openapi-webflux-ui` by `springdoc-openapi-starter-webflux-ui` ++++ - - - ++++ diff --git a/src/docs/asciidoc/migrating-from-springfox.adoc b/src/docs/asciidoc/migrating-from-springfox.adoc index 177ffca..3094151 100644 --- a/src/docs/asciidoc/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/migrating-from-springfox.adoc @@ -111,15 +111,4 @@ springdoc.pathsToMatch=/v1, /api/balance/** ++++ - - - ++++ diff --git a/src/docs/asciidoc/modules.adoc b/src/docs/asciidoc/modules.adoc index 8152b9c..e729ac6 100644 --- a/src/docs/asciidoc/modules.adoc +++ b/src/docs/asciidoc/modules.adoc @@ -289,15 +289,4 @@ Ensure that you add it as well as its annotation processor to your project's dep TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/other-resources.adoc b/src/docs/asciidoc/other-resources.adoc index 7b12389..e0d5059 100644 --- a/src/docs/asciidoc/other-resources.adoc +++ b/src/docs/asciidoc/other-resources.adoc @@ -26,15 +26,4 @@ Snapshots: ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/plugins.adoc b/src/docs/asciidoc/plugins.adoc index fa54df7..965a622 100644 --- a/src/docs/asciidoc/plugins.adoc +++ b/src/docs/asciidoc/plugins.adoc @@ -80,15 +80,4 @@ For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can cons * link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/sponsor.adoc b/src/docs/asciidoc/sponsor.adoc index ee1130a..c53b181 100644 --- a/src/docs/asciidoc/sponsor.adoc +++ b/src/docs/asciidoc/sponsor.adoc @@ -45,15 +45,4 @@ Gold sponsors donate $500 per month to the project, and get the following benefi ++++ - - - ++++ diff --git a/src/docs/asciidoc/thanks.adoc b/src/docs/asciidoc/thanks.adoc index edd4b92..3667983 100644 --- a/src/docs/asciidoc/thanks.adoc +++ b/src/docs/asciidoc/thanks.adoc @@ -8,15 +8,4 @@ image::img/jetbrains.svg[JetBrains] ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/ui-properties.adoc b/src/docs/asciidoc/ui-properties.adoc index 8f19dd4..3d171f4 100644 --- a/src/docs/asciidoc/ui-properties.adoc +++ b/src/docs/asciidoc/ui-properties.adoc @@ -51,16 +51,5 @@ |=== ++++ - - - ++++ diff --git a/src/docs/asciidoc/v1/core-properties.adoc b/src/docs/asciidoc/v1/core-properties.adoc index 31ce3ed..1f52409 100644 --- a/src/docs/asciidoc/v1/core-properties.adoc +++ b/src/docs/asciidoc/v1/core-properties.adoc @@ -55,15 +55,4 @@ |=== ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/demos.adoc b/src/docs/asciidoc/v1/demos.adoc index 28d9a44..d06c474 100644 --- a/src/docs/asciidoc/v1/demos.adoc +++ b/src/docs/asciidoc/v1/demos.adoc @@ -17,15 +17,4 @@ image::img/pets.png[pets.png] * link:https://github.com/springdoc/springdoc-openapi-demos.git[https://github.com/springdoc/springdoc-openapi-demos.git, window="_blank"] ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/faq.adoc b/src/docs/asciidoc/v1/faq.adoc index b5fdbbe..d1b5648 100644 --- a/src/docs/asciidoc/v1/faq.adoc +++ b/src/docs/asciidoc/v1/faq.adoc @@ -1033,15 +1033,4 @@ When overriding the default spring-boot registered `HttpMessageConverter`, you s NOTE: Order is very important, when registering `HttpMessageConverters`. ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/features.adoc b/src/docs/asciidoc/v1/features.adoc index 8996ea9..ce76522 100644 --- a/src/docs/asciidoc/v1/features.adoc +++ b/src/docs/asciidoc/v1/features.adoc @@ -180,15 +180,4 @@ And some project tests: (from app69 to app75) ---- ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/getting-started.adoc b/src/docs/asciidoc/v1/getting-started.adoc index fc9cf5b..dd4b9b5 100644 --- a/src/docs/asciidoc/v1/getting-started.adoc +++ b/src/docs/asciidoc/v1/getting-started.adoc @@ -32,15 +32,4 @@ springdoc.swagger-ui.path=/swagger-ui.html ---- ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/intro.adoc b/src/docs/asciidoc/v1/intro.adoc index 1959d31..d93ac0c 100644 --- a/src/docs/asciidoc/v1/intro.adoc +++ b/src/docs/asciidoc/v1/intro.adoc @@ -25,15 +25,4 @@ image::img/springdoc-openapi-prez.gif[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/migrating-from-springfox.adoc b/src/docs/asciidoc/v1/migrating-from-springfox.adoc index dad1af7..7f8e8d7 100644 --- a/src/docs/asciidoc/v1/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/v1/migrating-from-springfox.adoc @@ -112,15 +112,4 @@ springdoc.pathsToMatch=/v1, /api/balance/** ** link:index.html#how-can-i-hide-an-operation-or-a-controller-from-documentation[how-can-i-hide-an-operation-or-a-controller-from-documentation] ++++ - - - ++++ diff --git a/src/docs/asciidoc/v1/modules.adoc b/src/docs/asciidoc/v1/modules.adoc index a04d3ff..aa382c1 100644 --- a/src/docs/asciidoc/v1/modules.adoc +++ b/src/docs/asciidoc/v1/modules.adoc @@ -295,15 +295,4 @@ NOTE: Make sure, you enable the annotation processor of `therapi-runtime-javadoc TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/other-resources.adoc b/src/docs/asciidoc/v1/other-resources.adoc index ba3baa2..bc55c4c 100644 --- a/src/docs/asciidoc/v1/other-resources.adoc +++ b/src/docs/asciidoc/v1/other-resources.adoc @@ -25,15 +25,4 @@ Snapshots: * link:https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/[https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/, window="_blank", window="_blank"] ++++ - - - ++++ diff --git a/src/docs/asciidoc/v1/plugins.adoc b/src/docs/asciidoc/v1/plugins.adoc index 2f3eff4..baf3c18 100644 --- a/src/docs/asciidoc/v1/plugins.adoc +++ b/src/docs/asciidoc/v1/plugins.adoc @@ -80,15 +80,4 @@ For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can cons * link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/privacy-policy.adoc b/src/docs/asciidoc/v1/privacy-policy.adoc index d4639b7..087572f 100644 --- a/src/docs/asciidoc/v1/privacy-policy.adoc +++ b/src/docs/asciidoc/v1/privacy-policy.adoc @@ -145,15 +145,4 @@ Response Time: We make every effort to respond to your request within one month If you have any questions or concerns about this Policy or its implementation, you may contact us at support@springdoc.org. ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/sponsor.adoc b/src/docs/asciidoc/v1/sponsor.adoc index 7b69169..6995675 100644 --- a/src/docs/asciidoc/v1/sponsor.adoc +++ b/src/docs/asciidoc/v1/sponsor.adoc @@ -45,15 +45,4 @@ Gold sponsors donate $500 per month to the project, and get the following benefi - If issues are not created by the end of the month, the remaining ones are lost. ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/thanks.adoc b/src/docs/asciidoc/v1/thanks.adoc index edd4b92..3667983 100644 --- a/src/docs/asciidoc/v1/thanks.adoc +++ b/src/docs/asciidoc/v1/thanks.adoc @@ -8,15 +8,4 @@ image::img/jetbrains.svg[JetBrains] ++++ - - - ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/ui-properties.adoc b/src/docs/asciidoc/v1/ui-properties.adoc index 8f19dd4..3d171f4 100644 --- a/src/docs/asciidoc/v1/ui-properties.adoc +++ b/src/docs/asciidoc/v1/ui-properties.adoc @@ -51,16 +51,5 @@ |=== ++++ - - - ++++ From 9109abdefffb7e24da2790612556478ec8ab9219 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 6 Oct 2024 14:03:12 +0200 Subject: [PATCH 133/196] docs update --- docs/getting-started.html | 14 ++++++++++++-- docs/index.html | 12 +++++++++++- src/docs/asciidoc/getting-started.adoc | 11 +++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/getting-started.html b/docs/getting-started.html index dc3ac33..b867cce 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -91,13 +91,23 @@

Getting S springdoc.swagger-ui.path=/swagger-ui.html - + + + diff --git a/docs/index.html b/docs/index.html index 1efa0eb..409924e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -358,7 +358,17 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html - + + +
diff --git a/src/docs/asciidoc/getting-started.adoc b/src/docs/asciidoc/getting-started.adoc index 843897a..3bbfa4a 100644 --- a/src/docs/asciidoc/getting-started.adoc +++ b/src/docs/asciidoc/getting-started.adoc @@ -32,4 +32,15 @@ springdoc.swagger-ui.path=/swagger-ui.html ---- ++++ + + + ++++ \ No newline at end of file From ddb66dd66d91ef4d61278be14a98ec1e1c8498f7 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sun, 6 Oct 2024 14:25:18 +0200 Subject: [PATCH 134/196] docs update --- docs/core-properties.html | 3 +- docs/demos.html | 14 +++++- docs/faq.html | 3 +- docs/features.html | 14 +++++- docs/index.html | 46 +++++++++++++------ docs/intro.html | 3 +- docs/migrating-from-springdoc-v1.html | 3 +- docs/migrating-from-springfox.html | 3 +- docs/modules.html | 3 +- docs/other-resources.html | 3 +- docs/plugins.html | 3 +- docs/properties.html | 13 +++++- docs/sponsor.html | 3 +- docs/thanks.html | 3 +- docs/ui-properties.html | 14 +++++- docs/v1/core-properties.html | 3 +- docs/v1/demos.html | 3 +- docs/v1/faq.html | 3 +- docs/v1/features.html | 3 +- docs/v1/getting-started.html | 3 +- docs/v1/index.html | 13 ------ docs/v1/intro.html | 3 +- docs/v1/migrating-from-springfox.html | 3 +- docs/v1/modules.html | 3 +- docs/v1/other-resources.html | 3 +- docs/v1/plugins.html | 3 +- docs/v1/privacy-policy.html | 3 +- docs/v1/properties.html | 13 +++++- docs/v1/sponsor.html | 3 +- docs/v1/thanks.html | 3 +- docs/v1/ui-properties.html | 3 +- src/docs/asciidoc/core-properties.adoc | 2 - src/docs/asciidoc/demos.adoc | 11 +++++ src/docs/asciidoc/faq.adoc | 2 - src/docs/asciidoc/features.adoc | 11 +++++ src/docs/asciidoc/intro.adoc | 2 - .../asciidoc/migrating-from-springdoc-v1.adoc | 3 +- .../asciidoc/migrating-from-springfox.adoc | 3 +- src/docs/asciidoc/modules.adoc | 2 - src/docs/asciidoc/other-resources.adoc | 2 - src/docs/asciidoc/plugins.adoc | 2 - src/docs/asciidoc/sponsor.adoc | 3 +- src/docs/asciidoc/thanks.adoc | 2 - src/docs/asciidoc/ui-properties.adoc | 11 +++++ src/docs/asciidoc/v1/core-properties.adoc | 2 - src/docs/asciidoc/v1/demos.adoc | 2 - src/docs/asciidoc/v1/faq.adoc | 2 - src/docs/asciidoc/v1/features.adoc | 2 - src/docs/asciidoc/v1/getting-started.adoc | 2 - src/docs/asciidoc/v1/intro.adoc | 2 - .../asciidoc/v1/migrating-from-springfox.adoc | 3 +- src/docs/asciidoc/v1/modules.adoc | 2 - src/docs/asciidoc/v1/other-resources.adoc | 3 +- src/docs/asciidoc/v1/plugins.adoc | 2 - src/docs/asciidoc/v1/privacy-policy.adoc | 2 - src/docs/asciidoc/v1/sponsor.adoc | 2 - src/docs/asciidoc/v1/thanks.adoc | 2 - src/docs/asciidoc/v1/ui-properties.adoc | 3 +- 58 files changed, 154 insertions(+), 132 deletions(-) diff --git a/docs/core-properties.html b/docs/core-properties.html index 8b94073..5aab260 100644 --- a/docs/core-properties.html +++ b/docs/core-properties.html @@ -310,11 +310,10 @@ -
diff --git a/docs/demos.html b/docs/demos.html index b5bf60b..ecfb903 100644 --- a/docs/demos.html +++ b/docs/demos.html @@ -71,14 +71,24 @@

+ + diff --git a/docs/faq.html b/docs/faq.html index d971b94..6c319c9 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2108,14 +2108,13 @@

- diff --git a/docs/features.html b/docs/features.html index b586b4c..940904b 100644 --- a/docs/features.html +++ b/docs/features.html @@ -335,14 +335,24 @@

+ + diff --git a/docs/index.html b/docs/index.html index 409924e..971d68a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -293,7 +293,6 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

-
@@ -955,7 +954,6 @@

3.11. Jav

- @@ -1265,7 +1263,17 @@

+ + @@ -1558,7 +1566,6 @@

5.2. swagger-ui properties

@@ -1820,7 +1827,17 @@

< - + + + @@ -1931,7 +1948,6 @@

6.2. Gradle p - @@ -1977,7 +1993,17 @@

+ + @@ -2169,7 +2195,6 @@

@@ -2355,7 +2380,6 @@

@@ -2415,7 +2439,6 @@

12. Special Thanks

JetBrains -
@@ -4605,7 +4626,6 @@

- diff --git a/docs/intro.html b/docs/intro.html index 470c06c..9181077 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -76,13 +76,12 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- diff --git a/docs/migrating-from-springdoc-v1.html b/docs/migrating-from-springdoc-v1.html index 284ed20..78713b0 100644 --- a/docs/migrating-from-springdoc-v1.html +++ b/docs/migrating-from-springdoc-v1.html @@ -217,13 +217,12 @@

diff --git a/docs/migrating-from-springfox.html b/docs/migrating-from-springfox.html index f222ebf..6965e12 100644 --- a/docs/migrating-from-springfox.html +++ b/docs/migrating-from-springfox.html @@ -212,13 +212,12 @@

diff --git a/docs/modules.html b/docs/modules.html index 43b732b..bfa1aec 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -613,14 +613,13 @@

Javadoc - diff --git a/docs/other-resources.html b/docs/other-resources.html index 2b5144c..16fe852 100644 --- a/docs/other-resources.html +++ b/docs/other-resources.html @@ -86,14 +86,13 @@

diff --git a/docs/plugins.html b/docs/plugins.html index 5dd940c..443c6ec 100644 --- a/docs/plugins.html +++ b/docs/plugins.html @@ -136,14 +136,13 @@

Gradle plug - diff --git a/docs/properties.html b/docs/properties.html index ac79b5c..a476c69 100644 --- a/docs/properties.html +++ b/docs/properties.html @@ -318,7 +318,6 @@

swagger-ui properties

@@ -580,7 +579,17 @@

- + + + diff --git a/docs/sponsor.html b/docs/sponsor.html index 57b7a0c..6d028dd 100644 --- a/docs/sponsor.html +++ b/docs/sponsor.html @@ -111,14 +111,13 @@

diff --git a/docs/thanks.html b/docs/thanks.html index 059af92..3425017 100644 --- a/docs/thanks.html +++ b/docs/thanks.html @@ -47,13 +47,12 @@

Special Thanks

JetBrains - diff --git a/docs/ui-properties.html b/docs/ui-properties.html index d903f0f..228d9fd 100644 --- a/docs/ui-properties.html +++ b/docs/ui-properties.html @@ -265,11 +265,21 @@ - + + + diff --git a/docs/v1/core-properties.html b/docs/v1/core-properties.html index 28ae4d5..a51d985 100644 --- a/docs/v1/core-properties.html +++ b/docs/v1/core-properties.html @@ -290,11 +290,10 @@ - diff --git a/docs/v1/demos.html b/docs/v1/demos.html index df7c04e..0eca07f 100644 --- a/docs/v1/demos.html +++ b/docs/v1/demos.html @@ -77,14 +77,13 @@

diff --git a/docs/v1/faq.html b/docs/v1/faq.html index 0429bf8..fd768f3 100644 --- a/docs/v1/faq.html +++ b/docs/v1/faq.html @@ -1996,14 +1996,13 @@

diff --git a/docs/v1/features.html b/docs/v1/features.html index 02f6023..e53a7f8 100644 --- a/docs/v1/features.html +++ b/docs/v1/features.html @@ -335,14 +335,13 @@

diff --git a/docs/v1/getting-started.html b/docs/v1/getting-started.html index e0926e0..9ba13a5 100644 --- a/docs/v1/getting-started.html +++ b/docs/v1/getting-started.html @@ -91,13 +91,12 @@

Getting S springdoc.swagger-ui.path=/swagger-ui.html - diff --git a/docs/v1/index.html b/docs/v1/index.html index 38701bc..0488dfd 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -275,7 +275,6 @@

1. Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

-
@@ -340,7 +339,6 @@

2. Gettin springdoc.swagger-ui.path=/swagger-ui.html

-
@@ -872,7 +870,6 @@

3.11. Jav

- @@ -1182,7 +1179,6 @@

5.2. swagger-ui properties

@@ -1717,7 +1712,6 @@

< - @@ -1828,7 +1822,6 @@

6.2. Gradle p - @@ -1880,7 +1873,6 @@

@@ -2130,7 +2121,6 @@

11. Special Thanks

JetBrains -
@@ -4208,7 +4196,6 @@

Introduction

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

- diff --git a/docs/v1/migrating-from-springfox.html b/docs/v1/migrating-from-springfox.html index 7cef799..c9ae792 100644 --- a/docs/v1/migrating-from-springfox.html +++ b/docs/v1/migrating-from-springfox.html @@ -215,13 +215,12 @@

diff --git a/docs/v1/modules.html b/docs/v1/modules.html index e8afed4..4a88baf 100644 --- a/docs/v1/modules.html +++ b/docs/v1/modules.html @@ -558,14 +558,13 @@

Javadoc - diff --git a/docs/v1/other-resources.html b/docs/v1/other-resources.html index 2b5144c..16fe852 100644 --- a/docs/v1/other-resources.html +++ b/docs/v1/other-resources.html @@ -86,14 +86,13 @@

diff --git a/docs/v1/plugins.html b/docs/v1/plugins.html index e892caf..f27f4a9 100644 --- a/docs/v1/plugins.html +++ b/docs/v1/plugins.html @@ -136,14 +136,13 @@

Gradle plug - diff --git a/docs/v1/privacy-policy.html b/docs/v1/privacy-policy.html index ea3edb7..cb9f032 100644 --- a/docs/v1/privacy-policy.html +++ b/docs/v1/privacy-policy.html @@ -252,11 +252,10 @@

If you have any questions or concerns about this Policy or its implementation, you may contact us at support@springdoc.org.

- diff --git a/docs/v1/properties.html b/docs/v1/properties.html index a0c7573..7afeafd 100644 --- a/docs/v1/properties.html +++ b/docs/v1/properties.html @@ -318,7 +318,6 @@

swagger-ui properties

@@ -580,7 +579,17 @@

- + + + diff --git a/docs/v1/sponsor.html b/docs/v1/sponsor.html index 57b7a0c..6d028dd 100644 --- a/docs/v1/sponsor.html +++ b/docs/v1/sponsor.html @@ -111,14 +111,13 @@

diff --git a/docs/v1/thanks.html b/docs/v1/thanks.html index 059af92..3425017 100644 --- a/docs/v1/thanks.html +++ b/docs/v1/thanks.html @@ -47,13 +47,12 @@

Special Thanks

JetBrains - diff --git a/docs/v1/ui-properties.html b/docs/v1/ui-properties.html index d903f0f..9e1dec9 100644 --- a/docs/v1/ui-properties.html +++ b/docs/v1/ui-properties.html @@ -265,11 +265,10 @@ - diff --git a/src/docs/asciidoc/core-properties.adoc b/src/docs/asciidoc/core-properties.adoc index 190a764..6563822 100644 --- a/src/docs/asciidoc/core-properties.adoc +++ b/src/docs/asciidoc/core-properties.adoc @@ -58,5 +58,3 @@ |springdoc.trim-kotlin-indent | `false` | `Boolean`. Adjust indentation when parsing the `@Operation` annotation in Kotlin. |=== -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/demos.adoc b/src/docs/asciidoc/demos.adoc index 729dcf1..684630a 100644 --- a/src/docs/asciidoc/demos.adoc +++ b/src/docs/asciidoc/demos.adoc @@ -15,4 +15,15 @@ image::img/pets.png[pets.png] * link:https://github.com/springdoc/springdoc-openapi-demos/tree/master[https://github.com/springdoc/springdoc-openapi-demos/tree/master, window="_blank"] ++++ + + + ++++ diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index 8383374..d816c8e 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -1116,5 +1116,3 @@ This can be fixed by adding the `-parameters` arg to the Maven Compiler Plugin. ---- -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/features.adoc b/src/docs/asciidoc/features.adoc index 0fbc027..7c8f329 100644 --- a/src/docs/asciidoc/features.adoc +++ b/src/docs/asciidoc/features.adoc @@ -180,4 +180,15 @@ And some project tests: (from app69 to app75) ---- ++++ + + + ++++ \ No newline at end of file diff --git a/src/docs/asciidoc/intro.adoc b/src/docs/asciidoc/intro.adoc index af98d77..5859101 100644 --- a/src/docs/asciidoc/intro.adoc +++ b/src/docs/asciidoc/intro.adoc @@ -26,5 +26,3 @@ image::img/spring-io-24.png[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc b/src/docs/asciidoc/migrating-from-springdoc-v1.adoc index dcfbfa4..aadf7f8 100644 --- a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc +++ b/src/docs/asciidoc/migrating-from-springdoc-v1.adoc @@ -54,5 +54,4 @@ In addition: * Replace `springdoc-openapi-ui` by `springdoc-openapi-starter-webmvc-ui` * Replace `springdoc-openapi-webflux-ui` by `springdoc-openapi-starter-webflux-ui` -++++ -++++ + diff --git a/src/docs/asciidoc/migrating-from-springfox.adoc b/src/docs/asciidoc/migrating-from-springfox.adoc index 3094151..4d74d2e 100644 --- a/src/docs/asciidoc/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/migrating-from-springfox.adoc @@ -110,5 +110,4 @@ springdoc.pathsToMatch=/v1, /api/balance/** ** link:index.html#how-can-i-hide-an-operation-or-a-controller-from-documentation[how-can-i-hide-an-operation-or-a-controller-from-documentation] -++++ -++++ + diff --git a/src/docs/asciidoc/modules.adoc b/src/docs/asciidoc/modules.adoc index e729ac6..6075633 100644 --- a/src/docs/asciidoc/modules.adoc +++ b/src/docs/asciidoc/modules.adoc @@ -288,5 +288,3 @@ Ensure that you add it as well as its annotation processor to your project's dep TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/other-resources.adoc b/src/docs/asciidoc/other-resources.adoc index e0d5059..d06e742 100644 --- a/src/docs/asciidoc/other-resources.adoc +++ b/src/docs/asciidoc/other-resources.adoc @@ -25,5 +25,3 @@ Snapshots: * link:https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/[https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/, window="_blank", window="_blank"] -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/plugins.adoc b/src/docs/asciidoc/plugins.adoc index 965a622..ff75b93 100644 --- a/src/docs/asciidoc/plugins.adoc +++ b/src/docs/asciidoc/plugins.adoc @@ -79,5 +79,3 @@ For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can cons * link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/sponsor.adoc b/src/docs/asciidoc/sponsor.adoc index c53b181..3d0072b 100644 --- a/src/docs/asciidoc/sponsor.adoc +++ b/src/docs/asciidoc/sponsor.adoc @@ -44,5 +44,4 @@ Gold sponsors donate $500 per month to the project, and get the following benefi - If issues are not created by the end of the month, the remaining ones are lost. -++++ -++++ + diff --git a/src/docs/asciidoc/thanks.adoc b/src/docs/asciidoc/thanks.adoc index 3667983..b3c8920 100644 --- a/src/docs/asciidoc/thanks.adoc +++ b/src/docs/asciidoc/thanks.adoc @@ -7,5 +7,3 @@ image::img/jetbrains.svg[JetBrains] -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/ui-properties.adoc b/src/docs/asciidoc/ui-properties.adoc index 3d171f4..8f19dd4 100644 --- a/src/docs/asciidoc/ui-properties.adoc +++ b/src/docs/asciidoc/ui-properties.adoc @@ -51,5 +51,16 @@ |=== ++++ + + + ++++ diff --git a/src/docs/asciidoc/v1/core-properties.adoc b/src/docs/asciidoc/v1/core-properties.adoc index 1f52409..19d8c0f 100644 --- a/src/docs/asciidoc/v1/core-properties.adoc +++ b/src/docs/asciidoc/v1/core-properties.adoc @@ -54,5 +54,3 @@ |springdoc.trim-kotlin-indent | `false` | `Boolean`. Adjust indentation when parsing the `@Operation` annotation in Kotlin. |=== -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/demos.adoc b/src/docs/asciidoc/v1/demos.adoc index d06c474..d3f69e3 100644 --- a/src/docs/asciidoc/v1/demos.adoc +++ b/src/docs/asciidoc/v1/demos.adoc @@ -16,5 +16,3 @@ image::img/pets.png[pets.png] === Source code of the Demo Applications * link:https://github.com/springdoc/springdoc-openapi-demos.git[https://github.com/springdoc/springdoc-openapi-demos.git, window="_blank"] -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/faq.adoc b/src/docs/asciidoc/v1/faq.adoc index d1b5648..29170dd 100644 --- a/src/docs/asciidoc/v1/faq.adoc +++ b/src/docs/asciidoc/v1/faq.adoc @@ -1032,5 +1032,3 @@ When overriding the default spring-boot registered `HttpMessageConverter`, you s ---- NOTE: Order is very important, when registering `HttpMessageConverters`. -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/features.adoc b/src/docs/asciidoc/v1/features.adoc index ce76522..2b12c02 100644 --- a/src/docs/asciidoc/v1/features.adoc +++ b/src/docs/asciidoc/v1/features.adoc @@ -179,5 +179,3 @@ And some project tests: (from app69 to app75) ---- -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/getting-started.adoc b/src/docs/asciidoc/v1/getting-started.adoc index dd4b9b5..4ca4341 100644 --- a/src/docs/asciidoc/v1/getting-started.adoc +++ b/src/docs/asciidoc/v1/getting-started.adoc @@ -31,5 +31,3 @@ TIP: For custom path of the swagger documentation in HTML format, add a custom s springdoc.swagger-ui.path=/swagger-ui.html ---- -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/intro.adoc b/src/docs/asciidoc/v1/intro.adoc index d93ac0c..8a15af9 100644 --- a/src/docs/asciidoc/v1/intro.adoc +++ b/src/docs/asciidoc/v1/intro.adoc @@ -24,5 +24,3 @@ image::img/springdoc-openapi-prez.gif[spring.io conference] This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/migrating-from-springfox.adoc b/src/docs/asciidoc/v1/migrating-from-springfox.adoc index 7f8e8d7..890b435 100644 --- a/src/docs/asciidoc/v1/migrating-from-springfox.adoc +++ b/src/docs/asciidoc/v1/migrating-from-springfox.adoc @@ -111,5 +111,4 @@ springdoc.pathsToMatch=/v1, /api/balance/** * To hide an operation or a controller from documentation ** link:index.html#how-can-i-hide-an-operation-or-a-controller-from-documentation[how-can-i-hide-an-operation-or-a-controller-from-documentation] -++++ -++++ + diff --git a/src/docs/asciidoc/v1/modules.adoc b/src/docs/asciidoc/v1/modules.adoc index aa382c1..21d76a7 100644 --- a/src/docs/asciidoc/v1/modules.adoc +++ b/src/docs/asciidoc/v1/modules.adoc @@ -294,5 +294,3 @@ NOTE: Make sure, you enable the annotation processor of `therapi-runtime-javadoc TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/other-resources.adoc b/src/docs/asciidoc/v1/other-resources.adoc index bc55c4c..d06e742 100644 --- a/src/docs/asciidoc/v1/other-resources.adoc +++ b/src/docs/asciidoc/v1/other-resources.adoc @@ -24,5 +24,4 @@ Snapshots: * link:https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/[https://s01.oss.sonatype.org/content/repositories/snapshots/org/springdoc/, window="_blank", window="_blank"] -++++ -++++ + diff --git a/src/docs/asciidoc/v1/plugins.adoc b/src/docs/asciidoc/v1/plugins.adoc index baf3c18..7c04fb5 100644 --- a/src/docs/asciidoc/v1/plugins.adoc +++ b/src/docs/asciidoc/v1/plugins.adoc @@ -79,5 +79,3 @@ For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can cons * link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/privacy-policy.adoc b/src/docs/asciidoc/v1/privacy-policy.adoc index 087572f..8363f6f 100644 --- a/src/docs/asciidoc/v1/privacy-policy.adoc +++ b/src/docs/asciidoc/v1/privacy-policy.adoc @@ -144,5 +144,3 @@ Response Time: We make every effort to respond to your request within one month If you have any questions or concerns about this Policy or its implementation, you may contact us at support@springdoc.org. -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/sponsor.adoc b/src/docs/asciidoc/v1/sponsor.adoc index 6995675..67babac 100644 --- a/src/docs/asciidoc/v1/sponsor.adoc +++ b/src/docs/asciidoc/v1/sponsor.adoc @@ -44,5 +44,3 @@ Gold sponsors donate $500 per month to the project, and get the following benefi - Company logos on all https://springdoc.org page footers - If issues are not created by the end of the month, the remaining ones are lost. -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/thanks.adoc b/src/docs/asciidoc/v1/thanks.adoc index 3667983..b3c8920 100644 --- a/src/docs/asciidoc/v1/thanks.adoc +++ b/src/docs/asciidoc/v1/thanks.adoc @@ -7,5 +7,3 @@ image::img/jetbrains.svg[JetBrains] -++++ -++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v1/ui-properties.adoc b/src/docs/asciidoc/v1/ui-properties.adoc index 3d171f4..b566d11 100644 --- a/src/docs/asciidoc/v1/ui-properties.adoc +++ b/src/docs/asciidoc/v1/ui-properties.adoc @@ -50,6 +50,5 @@ |=== -++++ -++++ + From baee60f3c2082b6bdc941f2be61fb8e0718fe0c7 Mon Sep 17 00:00:00 2001 From: polgarc <29740673+polgarc@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:04:33 +0100 Subject: [PATCH 135/196] doc: fix links --- src/docs/asciidoc/faq.adoc | 2 +- src/docs/asciidoc/features.adoc | 14 +++++++------- src/docs/asciidoc/modules.adoc | 2 +- src/docs/asciidoc/v1/features.adoc | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index d816c8e..75ee3b6 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -766,7 +766,7 @@ If the CSRF Token is required, swagger-ui automatically sends the new XSRF-TOKEN If your XSRF-TOKEN isn't standards-based, you can use a requestInterceptor to manually capture and attach the latest xsrf token to requests programmatically via spring resource transformer: -* link:https://github.com/swagger-api/swagger-ui/blob/main/docs/usage/configuration.md#requestinterceptor[https://github.com/swagger-api/swagger-ui/blob/main/docs/usage/configuration.md#requestinterceptor, window="_blank"] +* link:https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md#requestinterceptor[https://github.com/swagger-api/swagger-ui/blob/main/docs/usage/configuration.md#requestinterceptor, window="_blank"] Starting from release v1.4.4 of springdoc-openapi, a new property is added to enable CSRF support, while using standard header names: [source,properties] diff --git a/src/docs/asciidoc/features.adoc b/src/docs/asciidoc/features.adoc index 7c8f329..34e8863 100644 --- a/src/docs/asciidoc/features.adoc +++ b/src/docs/asciidoc/features.adoc @@ -73,11 +73,11 @@ RouterFunction routes() { Here is the link for some sample codes: -- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app90/HelloRouter.java[HelloRouter] -- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app90/quotes/QuotesRouter.java[QuotesRouter] -- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app90/book/BookRouter.java[BookRouter] -- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app90/employee/EmployeeRouter.java[EmployeeRouter] -- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app90/position/PositionRouter.java[PositionRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/HelloRouter.java[HelloRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/quotes/QuotesRouter.java[QuotesRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/book/BookRouter.java[BookRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/employee/EmployeeRouter.java[EmployeeRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/position/PositionRouter.java[PositionRouter] And the Demo code, using the functional endpoints DSL: @@ -160,11 +160,11 @@ For that, `@RouterOperation` fields must help identify uniquely the concerned ro Some code samples are available on GITHUB of demos: -* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-boot-2-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] And some project tests: (from app69 to app75) -* link:https://github.com/springdoc/springdoc-openapi/tree/master/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api[Sample code with Functional Endpoints documentation, window="_blank"] +* link:https://github.com/springdoc/springdoc-openapi/tree/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api[Sample code with Functional Endpoints documentation, window="_blank"] === Integration with WildFly diff --git a/src/docs/asciidoc/modules.adoc b/src/docs/asciidoc/modules.adoc index 6075633..8f37557 100644 --- a/src/docs/asciidoc/modules.adoc +++ b/src/docs/asciidoc/modules.adoc @@ -206,7 +206,7 @@ public Function, Flux> lowercase() { Some code samples are available on GITHUB of demos: -* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-cloud-function[Sample applications with Spring Cloud Function Web, window="_blank"] +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-cloud-function[Sample applications with Spring Cloud Function Web, window="_blank"] === Kotlin support diff --git a/src/docs/asciidoc/v1/features.adoc b/src/docs/asciidoc/v1/features.adoc index 2b12c02..1f60992 100644 --- a/src/docs/asciidoc/v1/features.adoc +++ b/src/docs/asciidoc/v1/features.adoc @@ -81,7 +81,7 @@ Here is the link for some sample codes: And the Demo code, using the functional endpoints DSL: -- link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-boot-2-webflux-functional[Sample webflux application using functional DSL] +- link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample webflux application using functional DSL] Since version `v1.3.8`, the support of functional endpoints has been added. Two main annotations have been added for this purpose: `@RouterOperations` and `@RouterOperation`. @@ -160,7 +160,7 @@ For that, `@RouterOperation` fields must help identify uniquely the concerned ro Some code samples are available on GITHUB of demos: -* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-boot-2-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] And some project tests: (from app69 to app75) From ab430b930d95a4f95e1bec69fa4a37d21810dca8 Mon Sep 17 00:00:00 2001 From: polgarc <29740673+polgarc@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:14:11 +0100 Subject: [PATCH 136/196] doc: don't change v1 --- src/docs/asciidoc/v1/features.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/docs/asciidoc/v1/features.adoc b/src/docs/asciidoc/v1/features.adoc index 1f60992..2b12c02 100644 --- a/src/docs/asciidoc/v1/features.adoc +++ b/src/docs/asciidoc/v1/features.adoc @@ -81,7 +81,7 @@ Here is the link for some sample codes: And the Demo code, using the functional endpoints DSL: -- link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample webflux application using functional DSL] +- link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-boot-2-webflux-functional[Sample webflux application using functional DSL] Since version `v1.3.8`, the support of functional endpoints has been added. Two main annotations have been added for this purpose: `@RouterOperations` and `@RouterOperation`. @@ -160,7 +160,7 @@ For that, `@RouterOperation` fields must help identify uniquely the concerned ro Some code samples are available on GITHUB of demos: -* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-boot-2-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] And some project tests: (from app69 to app75) From 6c144ed9bf019092d070b2b693be0ac2e7e112c3 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Sat, 23 Nov 2024 23:04:08 +0100 Subject: [PATCH 137/196] upgrade to v2.7.0 --- docs/faq.html | 2 +- docs/getting-started.html | 2 +- docs/index.html | 12 ++++++------ docs/migrating-from-springfox.html | 2 +- docs/modules.html | 4 ++-- pom.xml | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index 6c319c9..e317ba7 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2011,7 +2011,7 @@

springdoc-openapi 2.x is compatible with spring-boot 3.

-

In general, you should only pick the last stable version as per today 2.6.0.

+

In general, you should only pick the last stable version as per today 2.7.0.

More precisely, this the exhaustive list of spring-boot versions against which springdoc-openapi has been built:

diff --git a/docs/getting-started.html b/docs/getting-started.html index b867cce..6b6b039 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -40,7 +40,7 @@

Getting S
   <dependency>
       <groupId>org.springdoc</groupId>
       <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-      <version>2.6.0</version>
+      <version>2.7.0</version>
    </dependency>

diff --git a/docs/index.html b/docs/index.html index 971d68a..6f3c196 100644 --- a/docs/index.html +++ b/docs/index.html @@ -55,7 +55,7 @@
@@ -414,7 +414,7 @@

<
   <dependency>
       <groupId>org.springdoc</groupId>
       <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
-      <version>2.6.0</version>
+      <version>2.7.0</version>
    </dependency>

@@ -466,7 +466,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webflux-api</artifactId> - <version>2.6.0</version> + <version>2.7.0</version> </dependency> @@ -2212,7 +2212,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>2.6.0</version> + <version>2.7.0</version> </dependency> @@ -4529,7 +4529,7 @@

springdoc-openapi 2.x is compatible with spring-boot 3.

-

In general, you should only pick the last stable version as per today 2.6.0.

+

In general, you should only pick the last stable version as per today 2.7.0.

diff --git a/docs/modules.html b/docs/modules.html index bfa1aec..73156cd 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -73,7 +73,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>2.6.0</version> + <version>2.7.0</version> </dependency> @@ -125,7 +125,7 @@

<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webflux-api</artifactId> - <version>2.6.0</version> + <version>2.7.0</version> </dependency> diff --git a/pom.xml b/pom.xml index 3c4b216..55302f8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 3.1.2-SNAPSHOT - 2.6.0 + 2.7.0 1.8.0 1.8 ${project.basedir}/docs From c9bcde6251b737d5490e9d2e07e816f61940de85 Mon Sep 17 00:00:00 2001 From: Nils Breunese Date: Tue, 26 Nov 2024 15:04:03 +0100 Subject: [PATCH 138/196] Update compatibility matrix --- src/docs/asciidoc/faq.adoc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/docs/asciidoc/faq.adoc b/src/docs/asciidoc/faq.adoc index d816c8e..b30d4e9 100644 --- a/src/docs/asciidoc/faq.adoc +++ b/src/docs/asciidoc/faq.adoc @@ -1075,9 +1075,12 @@ In general, **you should only pick the last stable version as per today {springd More precisely, this the exhaustive list of spring-boot versions against which `springdoc-openapi` has been built: |=== -| spring-boot Versions | Minimum springdoc-openapi Versions -|`3.4.x` | `2.7.x`+ -|`3.0.x` | `2.0.x`+ +| Spring Boot Versions | Springdoc OpenAPI Versions +|`3.4.x` | `2.7.x` +|`3.3.x` | `2.6.x` +|`3.2.x` | `2.3.x` - `2.5.x` +|`3.1.x` | `2.2.x` +|`3.0.x` | `2.0.x` - `2.1.x` |`2.7.x`, `1.5.x` | `1.6.0`+ |`2.6.x`, `1.5.x` | `1.6.0`+ |`2.5.x`, `1.5.x` | `1.5.9`+ From 0c0106ab5b3371622d86176ea14c9ca71a7e6e69 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Tue, 26 Nov 2024 16:23:42 +0100 Subject: [PATCH 139/196] docs update --- docs/faq.html | 24 ++++++++++++++++++------ docs/features.html | 16 ++++++++-------- docs/index.html | 38 +++++++++++++++++++++++++------------- docs/modules.html | 4 ++-- 4 files changed, 53 insertions(+), 29 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index e317ba7..ab16abd 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -1595,7 +1595,7 @@

@@ -2023,16 +2023,28 @@

-

spring-boot Versions

-

Minimum springdoc-openapi Versions

+

Spring Boot Versions

+

Springdoc OpenAPI Versions

3.4.x

-

2.7.x+

+

2.7.x

+ + +

3.3.x

+

2.6.x

+ + +

3.2.x

+

2.3.x - 2.5.x

+ + +

3.1.x

+

2.2.x

3.0.x

-

2.0.x+

+

2.0.x - 2.1.x

2.7.x, 1.5.x

@@ -2114,7 +2126,7 @@

diff --git a/docs/features.html b/docs/features.html index 940904b..dfa5983 100644 --- a/docs/features.html +++ b/docs/features.html @@ -143,19 +143,19 @@

@@ -302,7 +302,7 @@

@@ -312,7 +312,7 @@

@@ -352,7 +352,7 @@

diff --git a/docs/index.html b/docs/index.html index 6f3c196..2612dc7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -791,7 +791,7 @@

@@ -1071,19 +1071,19 @@

@@ -1230,7 +1230,7 @@

@@ -1240,7 +1240,7 @@

@@ -4113,7 +4113,7 @@

@@ -4541,16 +4541,28 @@

-

spring-boot Versions

-

Minimum springdoc-openapi Versions

+

Spring Boot Versions

+

Springdoc OpenAPI Versions

3.4.x

-

2.7.x+

+

2.7.x

+ + +

3.3.x

+

2.6.x

+ + +

3.2.x

+

2.3.x - 2.5.x

+ + +

3.1.x

+

2.2.x

3.0.x

-

2.0.x+

+

2.0.x - 2.1.x

2.7.x, 1.5.x

diff --git a/docs/modules.html b/docs/modules.html index 73156cd..3af8069 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -450,7 +450,7 @@

@@ -619,7 +619,7 @@

Javadoc From ac6a9c00ccb583311c151fd4828874ac8a179ab6 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Thu, 28 Nov 2024 21:31:52 +0100 Subject: [PATCH 140/196] docs update --- docs/index.html | 8 +++++++- docs/sponsor.html | 5 ++++- docs/v1/index.html | 8 +++++++- docs/v1/sponsor.html | 5 ++++- .../img/LVM_Versicherung_2010_logo.svg.png | Bin 0 -> 53097 bytes src/docs/asciidoc/index.adoc | 3 +++ src/docs/asciidoc/sponsor.adoc | 3 +++ src/docs/asciidoc/v1/index.adoc | 3 +++ src/docs/asciidoc/v1/sponsor.adoc | 3 +++ 9 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png diff --git a/docs/index.html b/docs/index.html index 2612dc7..1906ee3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -243,6 +243,9 @@

springdoc-openapi v2.7.0

+ + +

@@ -2467,6 +2470,9 @@ + + +

11.1. Benefits of being a bronze sponsor

@@ -4644,7 +4650,7 @@

diff --git a/docs/sponsor.html b/docs/sponsor.html index 6d028dd..eb08380 100644 --- a/docs/sponsor.html +++ b/docs/sponsor.html @@ -54,6 +54,9 @@ + + +

Benefits of being a bronze sponsor

@@ -117,7 +120,7 @@

diff --git a/docs/v1/index.html b/docs/v1/index.html index 0488dfd..27b2154 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -225,6 +225,9 @@

springdoc-openapi v1.8.0

+ + +

@@ -2149,6 +2152,9 @@ + + +

10.1. Benefits of being a bronze sponsor

@@ -4202,7 +4208,7 @@

diff --git a/docs/v1/sponsor.html b/docs/v1/sponsor.html index 6d028dd..7dd751a 100644 --- a/docs/v1/sponsor.html +++ b/docs/v1/sponsor.html @@ -54,6 +54,9 @@ + + +

Benefits of being a bronze sponsor

@@ -117,7 +120,7 @@

diff --git a/src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png b/src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5aac7e95d991c5d9fa914229c45d1ba8e0e6821b GIT binary patch literal 53097 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 z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE literal 0 HcmV?d00001 diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc index 7f26b58..4f79232 100644 --- a/src/docs/asciidoc/index.adoc +++ b/src/docs/asciidoc/index.adoc @@ -19,6 +19,9 @@ This project is sponsored by + + +

++++ diff --git a/src/docs/asciidoc/sponsor.adoc b/src/docs/asciidoc/sponsor.adoc index 3d0072b..4025341 100644 --- a/src/docs/asciidoc/sponsor.adoc +++ b/src/docs/asciidoc/sponsor.adoc @@ -19,6 +19,9 @@ Thank you to our bronze sponsors! + + +

++++ diff --git a/src/docs/asciidoc/v1/index.adoc b/src/docs/asciidoc/v1/index.adoc index 40c4954..3fbbf73 100644 --- a/src/docs/asciidoc/v1/index.adoc +++ b/src/docs/asciidoc/v1/index.adoc @@ -17,6 +17,9 @@ This project is sponsored by + + +

++++ diff --git a/src/docs/asciidoc/v1/sponsor.adoc b/src/docs/asciidoc/v1/sponsor.adoc index 67babac..def2bd1 100644 --- a/src/docs/asciidoc/v1/sponsor.adoc +++ b/src/docs/asciidoc/v1/sponsor.adoc @@ -19,6 +19,9 @@ Thank you to our bronze sponsors! + + +

++++ From a7702a2f8a661efcee111e2e4fe5b6f83d46b90a Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Thu, 28 Nov 2024 21:33:13 +0100 Subject: [PATCH 141/196] docs update --- docs/img/LVM_Versicherung_2010_logo.svg.png | Bin 0 -> 53097 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/img/LVM_Versicherung_2010_logo.svg.png diff --git a/docs/img/LVM_Versicherung_2010_logo.svg.png b/docs/img/LVM_Versicherung_2010_logo.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5aac7e95d991c5d9fa914229c45d1ba8e0e6821b GIT binary patch literal 53097 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 z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE literal 0 HcmV?d00001 From 684ac20c7eeef4bb4cd76e7406f6dc700e5e6eb7 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Thu, 28 Nov 2024 21:40:43 +0100 Subject: [PATCH 142/196] Update with LVM sponsor --- docs/img/LVM_Versicherung_2010_logo.svg.png | Bin 53097 -> 7435 bytes .../img/LVM_Versicherung_2010_logo.svg.png | Bin 53097 -> 7435 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/LVM_Versicherung_2010_logo.svg.png b/docs/img/LVM_Versicherung_2010_logo.svg.png index 5aac7e95d991c5d9fa914229c45d1ba8e0e6821b..e41ab9609c9528df8a332d63fc0517fbdfffe0f1 100644 GIT binary patch literal 7435 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 s)7J2C?|Ken{-MGD zx)mg)<6RFkzxVsD??3pinQP`6hv#|rUVE*3-RoX!6L$O74QdJ|3OqbKYK*F~79Jjn zJRTlF0~rbYiMr*tdiWQSrGmNw9$rxt<$(z?{5QLqs+Kw)p2tNzJikCZygm3MzXd!z zS3x|yU&eTN*OKt?=p9q5G^OExkeI67P{un({(AN4O)UHgsS8H^I_UxlEd_<-uHG4V zu^%2rS>dkR$kM2Ls=m4Z%5m470Ss9*5s@~*b3g7FoYa+3S8_&f-X--%zeIn z+J3t7LS*{e!*eTqPsMi)T(23VeWm&Gc>Jm`4GQInVYo}D@=)_G3M+pao4;{zq z?nE@~JRKJs1NHz(X>YMhCfV3Q|Sk-xYFFfrMe-JlY(jQ0ZI8 zYFMUepQ@0kxAUi5jCmp~OKZ}d*1PHyhL6_;yQsVG@{{P}Y06T$@Nrb_aNvEOnY!`( z?|j^_$J0awRYu9qRp@4{7ztc|@(M#G=8wn_8oP4DBgtDeD{ZVtwy zto+@rl&;w7NObcB@*H~F z*bD5^Y*UJ4A@~C9CN${UeUVz7Mpc9EXmqZuK3>d4&R`!!7kp)V^uUInuMkC9DY6x( zZBL5{g(Mppx!Er<1x!lMQTG|2#bvhqalgz(bCoPN%==&`Ah~Z#i&KEmQ1QhLEs7hb zC9!GMG^3vQK|B4`S6CcxVwu{BQP!Lu!QyuohsaV*8HnkpDZp^=JP-cdA!o5b5%9kE z`K2vHTsNymV|Miob6{MimP?PO%{g1Cbak=vJG@son-d9IPD@07bxwam_?T?$HXp{u zgWpf}OxZj?ieA3IHH9nuLD}N1?Az@(ADEDtYV7V_GgB?9?w^&=X}f(q6;$_wO3}v8 zKaw7$bSdT*L5qUEa{Xh^b63-gt0omg(7D$oi()VGk`LaAJXTg}>mIm!b5f=*gj(@R zZh^D!+s}P1v}E=4SL8HIPWkuy72V4XR~=@@F_z~avSS@7Vq!T`sn*b(ls?+*{1~mH zk9eHwapntq9~|*xaen=%W_8I+eG zmPqCmn66M`y=9KZG))kMiZagjGUbI)vU||R=M)5I9t%>Gr5Dzd7x?WbJ>48M8A7K& z4h=L^iWV;Yn_l5RJFjK1S$j|!SUz~#jZmm2`70&$b?jXiuu*K0(<)7SH?cgA4*o~H ztnce#O%nAbDUn@9`aZK@DB_&GAgBog=x zUdQ6zIN~d(@U?fBS;|R-v`2o9Q(N)r73{yJeYoyk#}~jY-QHzebfDjMA8g&YdOslg zqKSP=Nmxxh!&qnj&ix5_dTBH!uY){YR3{eywXPbD*f_G2CD;jTM1tRNyO z@`+OEfj*PQac@(g+eLp7j2khkrb7vfBaf7bkWayleOaa|HBzTy6MgZFa*Y7-p|^Z8 zOjG0}9Ps_2z3B=+FoeYx-?e;EvfSXZODwmF_tS1yF_@B0q=cX`cM!v#&2eHIXe35` zN^94U4h*l|57m6T+eC@aR?H7Cp?LRAzOB2wT7wkMC;iuS3){EUauL;!(GNF8$;K8r zFukJjFXU66#RojaW2VkpwJ5ROG-!VHnx1@Ox`60`Px_yAt`Oun$_Fpfv*x_Xb)gch zUZz*(AHQSshh7_uKuRx<%hed!qgL=_3*Zu~@ZZuVxWTAAspDf9jy(50-BF^kf+28I z^oPGrGdo7hyAu3q;F;tgeiW1PE=z+~6`&K=FCD`qsS^vxeW~E=4pXUj9 z)IwyQT=Q?BQXJWKQbw;jkZ}CB)*D^j78CaaxN8!7YD@bV`f>cC1hh&)189<>sG}yz z6F+h6(ahr^&k!Mkg(C1!WxC3bQc$g-RPLD1i=B>WuyGDv$5umv z#jQj^RZLpKMP!vS0AMS!PxeCe>sDbG{6I(icZs_kDJkupmlDq;*`feq=ogrdk`%kfAoL`{{i|pc<7TlY=3xoC6saJrG67t|b$9=!n6SB~ep<*kz_-Xp0JZ%C-@; z7c7J$|75{#ZZ&DY9OWgnV8AIE^u56`AEm(RI?4fD}d7O@e|A z&R{XV+DseNe&K<>O`}BXy0bNB)t?cShuO$Eu=xmb4uqR8JR?k!nddXR9V;KVGJK`I6Kl=|@t`Mfhos1{F|752NubFmUdUJZR#av+@s z{Hap+@Fs=;_7<;#%J&#t^)s(Sn%k9GNTW;w>Z!;BJgCzdvi}wX=3Bjc>I+7Ap z2leb|Oo}XcuSYSJ!R^<&-cdqtP43^}oRt1I{)-|0`zQ6f@C=Pny$|{CDVrWVg=4bb zgY5DPIi(3$j(kX2hRTFs0Qa8t*Y%CNU}I_tw(IbXT<)NkC+pYO0#j|HyM$eO5Lkbq z5J7uCNdXBD=Na4G%D7y>D+f_BYu=4Eh+=RbA!<>A+)h3vdU>8520rrwKx{?nAM6w> z8wnY2z^HA8l~oiFi@C|i*p9k$$dWveCE4#bvj)0FD9{-^_+ryl)b^m#;~aprreoMs z&etAadMixeYiR@RBX!qrSpV8+W6rBnIeB;l0019jP0iuc%}%i##JA)oM&;YW9hYW& z{Nm57r4oFWXIP2d{MYISOVky)#MfNGFUi)fkZ_dMueG6aW};Nvq8NfjsqIa)M}2X* zH$`4qT8YF*M%3{HYd$m~29PRV1CYiadx*N8;TA;k4nt+i_OGQX7r52+ay=+}Ubf|Y zPdX}zdrmWm4*o({Gid!pI{}$k6F2-o#YGC~e(aKzL_Iy%+aL;|&Q?*04T@o?| zW#y}iLgd>b!4tgW>IHW=^7<9i)n}YYu8DWoZkji9h_%l4li?V_B_@pLI^{+g;(E?{ z2XWA)&(2%JVK;6w1;)*a@oY_HWs7=WzHy$=#|EXiQC9C-g%6LG&9ls0T2+xo zBrL5i1z3z#ZJC9p8l#9UcipeSLEC*W{63eJeRq(&DU?z5iuJkGkR`blxkZQVeAQfk zI2a2pt@Q@(v|HvqB`*|2JoCxvnG`1v8`n2cu;&dQ3Og|}9yx6_&cx#5gNXOb5}gvb3`Un+d zvFol5KAjAxkzy?;M!>U86SQhga!vN8(LCRD^e?a_&t=LveNt%~)OFeE;EiorHocV3 z<-eQ=oZ)0;!JD1~60Cp;+l6kq$2+T8lMu7{bDf>Fy5z(&JEOPhDmyNLyGDI4LcZI56Q(YAMsd3&ebKq0^}qVdtU?`i}`5R$iPemI?*sJNTMn07;U zl9gSnM>$<7)F``mEkya5ziQvd7fk+fnKI@J6->(hL2l>R^juykSb1o#%y<<{2FWD? zb+A|_57G1CH}{sU2gG^pI$B0OB_0q>@rHUwk0imctFCC{g;ENWoODd_xqv7>o^rw@ zk$pR}?ouK)-+PV_+*%)=oM2Yjr5Xl_4tCr>B!0Exgt>30BpVNFZu)nZ{mutjkz^~Ej-ENu4-A!wQ%EF z9~bhPe|YLBNh)%7QcuYLJsaZ-M z%}O@uu_txZZ-}y<0}w^7rj^{JrP8=yFdZDi@W{2_ ztaZ-RifzBH(VxFcgpp@oO}sl&V0Osk9HGRN0ZI76gW!CI!*jJ4S5~n^Mj?(0T&|4c_I%DDOprL`o=^{I55_Zv)9j6jC z@lM-6QX=McMCC)owC|kKuFj3@CEj8^3C(&dgzADZLrdEA=rA zRUjU!SnW5E9wMe-KTzUNNS#%uIF%M)4aI?gC>hU%-}D_MW40)*=9@k40XW^cGrI)w zk#eFGJhP{5h_o(5)j4Hw(2dYS>M0YlQZ!v%({9>2^Jjch-AonnfDiW0o%QR^xwK|q zB!k(lsmv!Fa`_CDP9n?aO$Ql{L|4*{G(J+#KbAWCZ9T<=)Z8nfWu9_Ri1cI#Y=nch zzOC3-OHPl>3XjxMdQJW9B2xhFu|U5}-1Lv!(iK6JB|2Z;qP z5U4(W>gW8RVoB@%qt)ckObzdyKUvU^JZdZX&ZzXo;{o_wbo!R~4*!g|UAxFSa3&bnp zS3HYfH16V5B>TyLmLOiOqWAeRDTkpMia0^Jn)U7v$UA=849b~Zw2+X8pKLGI(ZXX7 z53_~?R}BNAnb3}a-&j$1SbYaO&+g>?%u6DZF1+FC=BS(ZsOcFMW15bqzQi~rE7^$4 zAhhmBYDuVc3p-B5U<+ITZOse+Oi}oc?7klsoM$n+-KKn1UV5CJ;)ChGo*4E8a>kEv ztpY|>>fXUhIavZVERF}5r%j5a`6_?3qT2l=|8x`k`FHF!L+li`CoV{r`I8XAM&NeO zzvhx~h<&w-tUqGKU|$2k=IT5MHguf4_g?19sj9y&JwZjL8RvHR3>xG_LcJl)P}K~A z2UIaun&nttg)~Sg`=`hJG=!6J=kdf#2n8N zbF{X7kt(G6^fl7t)%4lsS2AZt-TXP|-1keG*Ei@6!|4^h!WC3?oS?dY=I;-ujkZ2{ z?2(-k!lB*}zhcJa5B`AdbBp$_(c_(1J(tEBwj>NT(3_ED z`8*pzqPcm<{$4Qfe>N!pE|8)gx)qCwxPQygpE3rER!;_`xN|-kp3yzMciziPI)c&Ow_JdXDHd=#EtnnC>%yOdO^G#MxLz*jY>{D4bzNplZAB=senefX z>L-I1I{O5Y-V|(bPq>0RGz@hEsA5uR5JQ-Q;fC=wRc)mb6}>7I=(au{^L+}CyBdO+ z!Mxy#yWA5R)ri4CcW$KC`)_^m<_pC18rcOKyK}b%F{a0AnWy$~<0viUk>5ZXQI+5e z7rPT`dQtG5^T>A+;=HKtKaRIn^Pyd0gEYK z0rQ`*J6Y8o9oUFKf;NC*Kf1+CVqjVmi(7PtuzLdQ86|$drJv^cAM(Dhq+-OQq+= zr~Kn`Ka`A7L*0S1sH9o9Ks*5{e02T66B3B3Io6lXgl7=ed|`ji`yNcocEX^j({Cn7>r;y%QNvH^_V;Xl&1J*u6?<=I)EJ$vY3g-2W?M+tzjO{%R^V z&kc)gg)#$;ah(FI^YSSPltXdmWZi*H#48XC&5EptWac_#_U4QPgxw4MCz~vV;WurV zJkLjYWFckgo7@Uo)hms{n*`ww)9YtW35C=c1T|a_zWrdk&}m1nIhr%h1E_U3J}H9p zvBNn}CoILlmJ#&#a^nHN7IIP9)m=itEMY`s^UTU7f6s)15(R<{4N@nWyUS3#qf)TR zGh5e3Hs*sE(m{U7fIVn*>&f+*o92t}{4Y>vMf1rOxTk|JwcRzER|8$a<~&G-)HR(@ zspheP)7}S^@DI{1+6tt9sbnbrhEkV!YzORt{AitBp$&M)KUg=KZVNE{KotG`+yTDv zj{*K$wxN>&!I~2OzZQt=j2N$nS1&C{`bCLe27m8k-5Od9MABHiYx`Dq)hq;6N}J~k zd97P_$tQhJ$C5@U#+H5>lj{bkKFgJJk`!r)`5TF&zdx-zsGyxLp~?!K@_ju1wW5P# z`M?5kot_UX7ac>vwX=NJVo-+WD6CV~KQBh(+{K{65}^^p0#fP%rd)qQWjmrF7<>*C zR3+}b!r%e)+`ne40X>pW<3d#Ju z%zsz{S&IrG;icgp_o1$NqJCn-UBuif$&i_4QFmZ1h_)i&cdw2Mf zG{{GcO5rJDzgg-W>gY6IWaP}t`I`KzUHCOt%i%1}NPI=1XZwThCLEOsz12icZs33H z`_)%x?t9}_s1MgFBj_0vH7h6ib9V2N$uWU(NdbbB?cDG&ICF@E+Y(bk#U)rPR zUA9aPD2A%0zYV;*xP(FCNxD$!h?~Is)e*fR4(*KDc^;^Im>vtQuW4h^xwLJKj?{## zZy17v(;}Gt`+qq7#t0kjHOj`4-8XwK0vm8YgIfXyQr2c9l-?Ihg%VB7RJVnmZ z^nRWGqv;yHN@g-rxRC;;ZL@rS=K@>w1KFNqXXl+FB&c!(mvZc-fDWTE9W%;L67zqE z7$sOl!Wz#*6zYFzF)j-PF`sZ1G@O~+?duz&@sacd4#H$SN%fvx}x)FD1%+e-v>MDz}v z|9U;Z#Hn*_Pt-(9E}vt=o8$}NW`{rm9YEz_4zPjFy(vWe!lK3Aq2zA*?t@k@B1|Vv zz;g+XF8?clwbxi_x}6lWL^u0$iO}uN8bmi5*7a@E&x-mMhsLOX_=jw;xO`e7`}U_@ z|Kzw!V2^=GmhVTpW>()X+ixnpF|BF={QwSJxXiW13H}ZCaFE69h_cBY8E4;?fdX$f z43PTlv#2jNDj5$BSUBG>Ds!A_69cq(;8{P3IH-&YsFqlCS*ROd$&Y-?zs2Guw?9E_ z%>L1xyr4~Ca{|{?>K6BZ5c?5UOcfo}Bs_FEi!61~Xiu24K$HxF?N=Q8YNB`4%5YZz z5~MrelV*oyduLxn=CJb0H=fsBPzRnc_rc8Vm;PXXN&n-JBbpYWJWBA7nj**xghbUB zQ!oH{{I|i$Jekg=(qrifB6+MIQZ-qqL&x#vb zkp;P&8buVUF5@MR=;BiQmP$XaEI6}!9R%M?@(&rZyIqhiAq0k%B@XNSB9mO1fa7xu zI|X;6EI|+Z7QBoI_QYru4hlIMb7e&bJ-PATR_-ge=snodZrY{?y(%s7QmPdRA!`AC zq-bdUa8v$_lbNdKEf0jwbyjsw``p+u2f!LxLf=s2sJ-AyQs-=s;Pa(`&X2#qT5!nqn zE_c>z=KO9q-l8#WFIUHN`If~<)e|acFzyL)-%(Sf)LB+$1o!cL%~90F=AEFofHIQG z)+gg~L55_FN+{(y5;>hgfb{T!>6s~EUe->5^<{dOQyGR`Y`|IKEJ0?uz>9-A(P;tJinf9d0bcE!cqi=v{Cr|bg`GXy?KrGN0jd_C5yL1r1cMD@VDZzvA06!*z z&$=^gmnR5dF9u-m+r~kDuY0p#!1s(h7l}mp(>*^v>?8TFa{eGSPRQ~QU>4IW0;q5{ z3<7};dWs@ezhxYV(k)TfrSgFsnM0z)Lw2;=N{Tn3SAC{45ZtDvGG5w$W zlyO0z!aJv-d&kS!-c89nbWc;`P{5ZzrjIJiYN}TEU$DV{bKxYGvCWfU{2@#UaL6+f zApj|2p&kYbmIipGjLMlyrca%M{;kOFLx-*|>|_lQ05iF7VP9FhcB5-g%-+T}wium_ z2DKPawiuuZTtJiq*%K5h3dC}y1tCW{0v8JV*`Ghz0kHd3_`wpP_i0FK;IBuPdj?s> zLvVqfAK*>>46i$6;}JBSv+6|z*y@`r_;bvG$b0>H-qETOTQGXic4X-rJfiADkq7Ra z58(b846&yUv8Oy{jM55LJi%>D3Om3?7UX6(K>3se|HwhS8%)ZX5B_bueIIv$b`2}?CKxMRd*RdTTIH#<^UNQA6Bb5al+&pi8`#M=#$J)LDy8k z4NIU6$nhD}1FGv|NUsaiI|C75eF~W0!f@O>2jO7y=dwq6j@X5?$0w)z7y4KPD?%qG zTL+VEO2NA|$b8<)(E^Q7bOVX7O~xhapjrqQaUMvBu$X7(E}$WpSlyn&mI&+94mQR} zgo7wdB9u?*Z%jpedN&ZL*&aO`W+nnE0dA<0ksptzWXEm|I1mw^PEynRYZt&U=&o{` zyPDf<*FCTNQA?Co@b}UR!n6~YRDXO9-ktthw<^+UUBmAwG2L~l%YGV6%0Tc6*o(ii zQ$V*;U-;m1z|alAQpMt4*mAsk?RFM?$(*mb3srAV(i6Q}F|dEB3XgMf(Sx)?q}%7L zkXN@L#q?cJy>XTsgeoylmZ>kV_PsHMa?XG!9Uo*L+zX`QZ=7Ha1?%ZhP7)0bsBfp$ zioam_2lSU-5dfbWTLtc2e6PZDO~l{8T5G}St@?17~9)1zM?y!8NeNFhq4Gcie5r|=Q1kadPR5K$gZ0RhiU`y_<$g!X!%BgSm-#F z)3c|IbieTm4{F4r*TdJ5?2L~LP5^P@>ucIE;ax5e4*d>N0d52!C;dV32Ei*3F;E&J zp`6S6kba<@fCvjMMsSp3iNb-G87008M`aU^P0u#WBR-feQxuXD~(({)}vCRN3ljRaW(xtOkc^W6u1e?}*K*fP4#EhR< zAn2ym_uS-c{8k@zR#Whh3cK|`5Cf~v&WDeB_dr7pCH0e*LX4?+g&Scq<+9}q@}cu5 zUlE}^)c2XXt=#FR@LG3U@#-l_>)r6A5>6b>|p&N8_zLrss}E4FXV{)REB4)(SoibvW4k>|D&G z9WN_5k1ZsFUggRvgZJ;;g`@<(yVjg@i}_J2_=NUjFGKGw{Mqv@VOqh!W?&Qp9?bE2 z24(pps*bL(54bSkpH{a_KqjF3V{i$8lMhU;^XWbHN05uCny^u+u|Qd`kjA{AS@OmP zrX;}uUu=dL=Ls>Dp|F7h&+lpVBqds9#ZC=LdLLj!Nuv%xj~C~d4b8yi2r9n6;e6_y z(AYf#Y^SKvQ6cklYqXsttHf7oqome30|ZVaap(7GCUW?ehg|U;Un!_+agZ7sT?l^H zpb&^z?`q-TgBl67@dZ{hGvy!J6_>c)@%V$L9fRLk5tcQUj3oOkVMfawseKWKf!; z{q)p|tYV#%V@|?3jhx;!S!b(Tw;Z|DZQ7B;a{OzT6%JbPr&iQw$?96uE#@g>Rc z+DOk#e;C>L#}IrNRFL-9U<~Q6C-Cj6+M;Jv-T;BPcLrv@E;YWR$`VXh4|V7~tbPGy zooR&6lE}@zgj90rE`S><7O5`eEmb>x<44n0i-$x$))%$fuSMHfe~7BLX^z4}TNi^B zhT=I5qknH}BenC*t1g;>)ej^OSe;d0`XW2>{MPXa1-O$tWYJN%QgQrKYDZA$=&4eS zu7}@zc4101a*SQVo6iht-AT36MCDpmRuxy7nSx9p!lBuO3}|ee!G=d-@7mSQfkoC! zefwmbs8`*yV|3j^kyk{(D_&nD0d=pl$&+8|N$uqphi*8Lme|sc|0K>x${eZ>%hKcz zOi|do3t``1_xs9R-osMpTW8qM|0dxN zWsv>*!eN*k8Cu{MhYA)mHOhvaVX@`@J8o37s9?H7Nr=^T|I_;0o9_OGl?VamPO;ZC z4arCWNAM{o6^_(4m_M7IQa?5K%OJjif-U$i`|OYd84uDVz?=v;qG00 z({4ct4_Q#WIf{mG0FRdfvglzPc<%faw$Vt+i#1KC4<* z#Yw+14SW{QvPyxHGg#ws>uLc^EC5}nMH+Ew-UtIG;8wT8pE-Q#OTN}H$A#&Wm}c_F zS?m1Qvbj#%Y3WLn&syESLO|oyQ5)nC}`kc>0pH_3@V+z^!)h ze^o59db!mf@51m~+)Xy3{Ux;Z%?8H{(W3T4;|%~x~zt^+3JZO)juoz zcUI>@=M7n>TUesNf|Lq@mMN8%})>^NK)VC2ag(DtQeX?IU+lTEVRJ=JfCj$&*R_)qp>lkddPt_k+c^zhuT_yzZnF?h^x6JBlnWe{ zw5oaUV2qHc*4+T*uWIXJ^IorjXi8e_9_`DAhzjm)iLr0(5~iWvQm%`IJL^X0-25ctZP zP4_u1YWOuqbLENyb?Kmk;!Wh0!@BThTb3oh!(*irb0NOvwQTKswlNXvp|jpp&8$D= z4w4!7cQ2E!_`yWp6-=2VZGxx>^39Ef->Czo1^nL(X}&!cIcxIFdeXgkkQc;MhJ=4%s4ZVag)cHFW(COSF3(-T_&YFNg_5nw#7A!qg; zMhj6{L3T}!ywLa*?|4VfwQ|J$+-m&x9=Cuy>8cmZ7ObyLpSlPw5=_v!`j7{bZZ{fy ze8mn}qd#(hkaNcjP-z|d+9K0=t6$o~GV5n2_8);c1}%uN#jL!+ zVu5bO3Nt=RwXuKSc=>@VJlwNAGp6*)?x+$*m#)m>NXd}Y=DTRie%=x?6T`jGm2A(C zy_*H1sKrxkT#d3q7?zOoByb1jf^mv&&!SU%w8GhHlYLtzhIHCu z8OGX2A_o~88<7&w6W%kMbzt%RiL_MpcuP>QA=&sF+trI^s!|mrFbHYmvZ;ui73U7I zzqyP3o`>4!J*@+V!uAgCSrzul?DvLqv1u1Qm_!LM$&eVhEn)(lMRwI=yR`a70E3}c>4%{ip&u)cir+|ss9RfzA%`U>vu zk>%AlaU%Y;rmv<^(!4gC6yXEoZp5=XTHl}4i=LaDh{ybiwfUuLN4kjJj0sqXN8dj4nfRMA1F zL8bT0PXX2b_!Sj#QsLZOiA+j}U}^K7;ox=&!w+|hb3FWVYp97UB&pknA*_HGNUQXN zOccY3twp*I9KOl@BI0MP`G9h$(EVlEHOdcPXq1~rh7OglUHXP)vi)}eh;#c)_{P>b zvBAMV2J-|Z9amQZBxOM>c@Cp1XONNZ;L~0+sp#1j?ZxxE-0cqBozLV~CcFc8&R+c# zSB=?_ev)|9!_tc+-J<`E!T*s7|KL2Pe{AdZvCb-7Frh?%d!Ss>lGZ&E0BP8Ha8e4S zIwz6l167Xkr!z*QJ6il{YUa5bUsXYq#5IF+vJ)=jK1Y4|g^cF#ki7Jio4|f~8Nsof z^!x;l^G8>jkh2S^8(d(j$&Fq)^p7dP+papJTA7MAY&O5qB^2@op-!-UON!%fIB4|-#UEgykJ@d(`XH5jV+oD#^u`-f1ApS9tq z`|&8lmgF?EKkl_L=$}hB#A-?+_rL9`q-<{hl@jBs_GE3rF#d8d3I?o-qaWv98fB~P zxqlw-N#$i#NxB_Dm||pTT#q^?=tW{cM6wCAgyZ_26&Yb&Cs2{Dq5Bes0_F*UEedc<@ZGj!()o2A(_p`EX zRpyZ<2nL8OGLBHKi3fbGc3Uew+Mz7}Ozf5~Ip=+K(g>6-Xk;OyhB_LEG>P*{?W$Go z>i#fSIQWY?yH1RRWA?k|i$}Xg%^>mO=9uH4t98WMBHx0|HL9EVGT5pJuRSK zS=F}oGA`4f>kWZ`2<$81mr=?WS?t3PFde*g1Ll32uAllsUW%JT3MT&>)SN4X%YtRs zU-+BN<6ANr{~3jFLrk-DqMzWrcBDsNezv9BM=mrO!)2~iif>$uhYxzpki_VGQZacj zKl&q3zeWIhTlxW8>OQ}*FX6YtqscU5>+)}sKcE~}@=gl@H^9ab#-O1Q-_PRZ+e?Mh z_oR%^v80p4LjZ&ga{C0a-6zlCne7O;y|Rv6D{$@`G9%Lp9?825%_R=#?uoo-svKpo zabIVez&J;*^Bo!GKk$;*9RCE=B1Hp+-|C#I4yqlsj{idSeBr@S>hWV_f{<4&ip0zSI2U z=N2|a3uKqsnG8ST;Fuo@TheW<$#t%0UeTGzR#67Seti0&_iOLa;$9qdjYA_VtSg^t4q;`}xuc#%<582F-# zxdRzT43cD0hMsRNI&lH>jL2V6RMk&#>VuYquyo;pp5Z z)ZW#?klSPk`J-5*d(8vMBloqr?#h``#g-lf^K$sW*u(52U3&<4&jsBonjuq^`?*`D z9oP{z@#RHw&CmY# zkL_{UqhX&qDQfPOGarU5$#}q%UxtEcim0N*ox)@o8|!NB_~oOdJef2vxQ2j}Mq+%U z1Z=0MUo>C&d;ih?2TKA{#@qRae)m9_jOvAz3qz+4UG`a(E%E1(5sA=%J7Y{;En^@~ zU;P8r-hF`RWGAVwE48litV--Y=KCe8e+Rl@7WXNXRb{1@tZetkn+4SecC3}6<1Qio zN}G^5Z%CzKwDgwG^1)5*9NQw!fGEgy3pS1!*+q^*5?jKY5A%w_CN$b8B!=akI*@LZ2%ynF@v;0T z2fuasriQ)+m22t5TVGNiWHd>rNt^(4r9pV}fO7I5&={2UT#2{XX1w%ZejE;)XWChl z2hRXv{sW&+V19LZvJ&f++Dr820qMgk_BQgtt$qkc0!@jQ6)OmHI3{}-_|!=kj6jUNKwwW zzxvFgdM@y6@PrU&Zca2V-=r+m#9xADq8JG(zRV={dp_Y$60#(9FsyP zc9#6wvq*F2Q0u2H^tm8)+_guOV~^0Rir$t;N@aqJKsSil^JyAOS7+;=m^ zDi|n|E8u}b#$h`)?z06|?}I5_k!aDiJ1RSO?mIAug(kD4Hw!R5`+q%AAIl9g5>yYw zkCPQ<9^lwa2iS2b;&p%67y@wQhT1C=Uox4gOkcPBnN*Vp^-~wdPO-YK=s5#+t>5Z* zugDcha>AVMyh?J~PRA4LCEGwVDNJks z<%2A~vVLVTePkjY2-BVC^vufn-eKWaWvr;Q)T6q~Cq$ZI^!m|j&l$Dm=t&6`tS+L~ z>-PQE&WYAl1;`xuKD>fnX9@UPwD4IV!rA{pOB=ORheB`TEymUiCdCBz4PvF}{x&ET z`>Xhr5_MZoEijE)QRSB0Z137w_BqD_D!*t#XjEvd=ogbSM%lJ~5hO90`IG8(8q|tf z@1TRJ_4^kj>7Q_kNbR5dkd=`cl=d#?g8Fr4a6g+L@?FqN#$MzkU=t4xMjxMr&*dSX z`?UwdynE!apc>s(dk0G$)Jw8ijBRF*aF1AxG{l_wYh4vwYe_{dspC69g)ZX-tSc-3 zm&mKC^A(Q4KtUp_3@M*nSEWFYl-u|nm9ZXG+#B~K)*rI=RM?Bc8`+H+j7kA>7caJ)%_Q!5g@tQ_VFi~wLhz{R#)_v?S4!v)g;&VPL7*rumBaYY3%rLLCpwbGO{r@U4) zRK+1=)fM)NOh@Eg@4)T~rc=Cd3i5d1qi^*MId_* zY<;9X_)bzKJ}lN#ilw$-w_e$uXh3dicO3B|-xWZ%&A#~(A;*-^3A0{mC(MA(Ti&A3 z1w8i5yL-M7nPKuonyRfjcxJ}rcq z!A)B2N>Yfx|HobtJa&QvM=|Lgr#=dl)|Wf^#&3!`n054Cy}Io3bNK>KVqVT~KV;DN z8g1480ui`EjIB{Qa&iqzLtEBn(aqg5qC|AN4aXtI`^S%OSkboT`;x-=@!se>{@QWj zQL2;3XHmpu@BCMFz~I6j6-U!g_Z6aadsOAv?&x+-k!9n50cridAyAdiN#oYR9k^dR z7un6}akN2S7e%eudnezlrDVA!QFK}jNfSOg!TjbDma{Y-!AoNpRuV zA3`Iuf$qVds~z`!FBRw|D0-rXMu^){$IKQdpWsM*d-p zVf^zyU2~*x_{c3}-g7M8>87dWn2>798qMAyCFqC3?jJ2l@1p+^Vbos)8`ksCPk$Y`3fXywLxyELN;NHD) zEwnLzVxr(TLQFBSw+>5r1&$8LJyxnXi2Mas-+afAx2$GQr8h*tE!`YuG18lq!TwMY@f^BzjXMwbI5YX=IjO1g z210Iv6#7g0dFbGpztnj#-#Ge@E1tu6u zNhQ!HU$V=5y2|jlG~92nv1TbM@EAr-#aLQ@y4Maa&?98gw2;amPj26}7wQT>@9`V8 z7&C-lszAZ(a>}Ujy$&UZ4{B&=N&7a|kptQ$Q_b!1D}b;<%|UFh3raFK%plIrhOm9V z`4_InFXO{);9c=um_~9mgWIh+{}>#M-dH%lD>2$ofYbHhSml_wp}u|1Z0GWQYVRKE zgo+{ur)myWrUr#Lteou(B~r;geh|z*;7suQnJM(xCADN*t8KC!0ZP7$ByH0*>>i|{xW{w1Yob1PCW`+WtOkJx2I~@E%e2DW z6Ouh1*#P@30-0DWJbyC6<&<~y?hU!b+aA;$`S|7H6Y*Zj%Rf3T#lo1mLe5L<&~Qpo zDfTj0Xx=*dtXcaLu(b)P)bZ6`<}8xw+x{mwReoi6vPa(gSQ=!9{=kIs+c_X{R;hUK z2)OYFiVWXLKT;;CJ-lo;zIDsf-^uQ8uqMF;5)Nw?%kJ@`W|ad|#DaFKwQxsmufx^) zn(6ATJW)N1T1vNag_$Hkgdu{AO{H78tsjuX%@pXC@uJ=D@WJ;F_bGQKc zlNDd`=T9pMIBsnEI{s84o9~fXms?={X%E*F3dsz5l}k$sr$6Z&Yay$IVU%9cxe^~j z*#Ri7$!oqt#1z4AG++vW{a^n5d1G*s>O-dI&H%c#-M^ObeA0|Y?&+y(d9#UqVx?oZ zDaCHA(!c=6-$7&=O6N!sd8e!2T*$}X8T(7*+KftY;?DUulghp`;EI~>OO#{RO$S~} zEuKF@ouaBmxe>-(W~i1ve9WnhYFKlL&^I-@k1r$PGAOYhiau=K7#aoEjXsJ`xF5(J;Q@9+wnIU0^RaVRGGAAj&pq1m^{SgqMM)z zt*j;Vm*$b>t3zJXomVERXCC_As;b-=BWJNexsPrCb{RAdQx&~6dwar3Eixzdhw}?x z+ZCf;k?Wst)PYx>DUyqmBN+CI>Aqo%;pLb67Jsn;=H>xCD)!!e(VeDBOHW|ppUwyp(wN&suzLN+r_$Zih%<;M$-<)5_o85Q#f3IL{77;HdH!}>fm z2nAnHsX-sW{Mmk2f7DZaWh}ytHwg`Syw6P&m>^J6_BswmCEmt`S~Xu_|pNM|#y={V+6hk{nwpHRe-O{`M(XFn~{ku*)LP8G3pm z@E*fJ43z%8N%bW6?e}6NRk6JSXIkNop*54C&I&TMj+XH*oio!w58cwM`OW|r{{CH2 z1{v#R47NGt&OR9*M!gB#)dOz)z^!QbwLUdu7O%meaC3zVGd*;aArHk(NB#fjN2F>$ zk@OC=fMA2g6(LvGKX$RB#o*Ec+S=#|+uI>=Js-p0KjGI$Ddx-69b|vDqxwJWz4cdC z&l@&MhcqhPJb<(`NQX4iA&p3P2uLGH2#6q^A}uY_DcxO4H%NEGna$_>uJx|-2b`bI zS}uQj*n7{+J@?#kUDu2znr4GimK;e2C`gP8fzvWp#hwT4sk$rtbAaDf2msPG z>Fz#IH2slu3zV!zw2NXpOM z&n5toF5VLaWqp?fQ4bbL?Q~E!DJeb90hV*@(+t11!4Za1IthqlFe{Q? zGtgEnV1%Cd_!_sREBjd#D3%DA6qd9e9SeckCP|2riG?Y(0iG_^&o*En$zV5fgK8Rc z#sjwC{T=k)E>Hy;1TO9+n3zt3kb@E#}a1dl5gD4(0vGob?=Vh&-Z-v*Uogn-Z_zD%45a>kYbk(3%XS z`C$VWlnU+I?+=f|Zp7aQS-&GR<8MJmBhG63xKP@jFZdU_E=WrkC>HOKjd)S4BJf@n zX#qE^!H4nrR-kMKOjQgtoj_u%Fb)|qIDl2~s{|D%OvIx3=b*$gfB}G2K>0}5SMupa zlDMpOHZSd$Y{t+W5ecCls_{1z)i({n&hMUrg7a~qJpLr_-CyzcM#TZan#03TwRxx^ zEF^ICNMh&PlPFj)t^bC2DvpUL72M3(-6>I!UHb*vfjYuDep_Q~-?{T*xNp^Ypsf|? zSQ%Pk#*jcxCHWIfUs>RetE}buxI_u4X?4_@U8~MHgZjej3#P_EkwD!ayV_vG34rvD zbH?{X7YM#gMbN^*7N#^3I{}^k?&(+6CfPX9R|__`SEv& z)(!r`;ZI&Oi+gY!ym{l%l`bgTtFm?RG{{7P?89?K#!EJ4nZ0*`PtTZKnxo+2#$_Rk z&;UL%chr{@sa|aS<_5*P4n)BcM_U%N+M*$R*`F9S15pZ zGG486>gZVC=JV0`GfRC(ay*M-nD4`B;#%_9Xcc1qk z*F?4yxBs&fD!aTcqIaU*P^`Vd4NK8fgJ`63V`~h}Qd&qHuKJ?Q>tj_e| z2JSu5vyDaaICL@`GUaU2-m)@N=BM@{9?Y@!rstb>4SvV$a~H)T7OyBck>nylm;+M^ zG265blM7kcQ{t&RokIfB4Fc;~3)zR*paGMkRR$Ug8r6pIhpDN}W0x&fxUT}yDxeug zFN-F!hrbI%mYM4TIKaIptl15Vgc{X}f!VAPNX5UO{qxC|U=+`6WJ71<`ILcVPVdmS(9z7&-{9+<& zjRct>D3EG@RZfYdI&BLAD`pKsq872SSRftn9zt#K+X(V}xw7XEHN-BQq*J4s|po3N8whrt}zhkCsICe5k{+GjWGfFB3;{oj77>x}^ z4B!I}fs@H0@!Am?stf{A(P*N#(D(6i1V2kOB@>Z$KD@S+(3aFcnoQ*Gc*{z-_PNQJ zKdr~oI=Pp~ucx4<;D7U|!D=8Qa0!U8+NKNuf)1GL4QNgB=LgD>4@H`SB&e&$U&r5DFu)7z}q2)k3M>5x5 z=mysM{8Jt{v<5hSAIvm@eL2)Ty?X7-D8+DZeSi#cQIje)hvm8S$QmiRVcG-*!Pxy$=s=Zr2-pIN=O^<} zdr)g+Fa!?Kd%DoeI^RLkO@M83yIdK6G z$oiHuXT(VTot?6pDKIW8lCjO{Kn$v(ajsuU^4E5_uQ)Ny*pT+`WXGm1)npCrpk$2L z@~Z0$ZlrL(caO10RIE{L28K`3XWN+XLJ3J_3YW( z)86;|j%pz|N0Y;X$|hU=*~;I4W(V#mwV5AA*iOQ+`9HIPYE!3;sd*}1uW9pZF$Qhmwao-nKYl#zH}A$o-iCw{c1UkNaK}sNcOE_4xE)98Ho8zA z*rM+aFZUY613*yH(;p|XO$4m5BnYakfdbP}Ne!B&V93rCQ|UrLXs z(c0oQv2*p0nG~9F4$Tp&pX=5o&Hwgt{uw0-MQFY0zyNc%5lVD!npq?lAotjv4T2So z3Dylj;jAS96;UTPD54$MN0z4ghIF{r(ie83_UcTC7sH-+0jlH__-EVAMo^_ZdD2qI5br}%j z5yJ6ch<3-PiCwX0B2Ph|RgBa_ zQu22=GE_1d%(++ujTcq8wdBCft|$c|^OZZd4Wbx*p>S81d+>@AaO`L5gr5#GWlyp8}N&*`fKZFAFH6A*-p#9%-KDS-R|VXnVpq`0LyPIC;19jUtcGz!3fftLVY>K@u^>O{NY!!Nekw{P!Ec#hQkSagG+njX2S)BC=pw z%$-z~y{=4`(JKUI4P%W&9vnd!=y(KfLJ}YK{8P|#QWyuW4Gkz$o*v-o{O6zFrJ8q9 z=)=9wg*@tChd{>|ll;3bgM+;&ZXlk9a;S+Cy&)j@f8tNmRcYv8eqr7g<*oRgWCwQ< za}o0m!bBc0KNMnCyKkV_X?1gxCe89-dKyEj*K$Qx4i*#Lp|5vnl=$z8fT zhcjliA_>6JMY_jAG1ZUA7A8{_3>(DHw81OB_3YX&d=U=KX(}RQ)M%jxBqh2DS}Kom z{UWZJpwh@#0qrvl8^O@Vjea_0;rJI>L@0o zdy4ocs5vcUj+>lY_}Xbk%XGTyN_|}dN^6>c91C}D$e;4l3Sfml53soYC;h@L8G}I# z^g9H0K&4|s5_4WI7N|)fJcK4I`jp_D)-^yg;z9yipb)Qxi^n+w^_rb8JmK;Ex-r59j*ivgtq z5Lj3L!a?rv<|5KwdVmZ}hrSN@Y6L)%0Q761BNt;HW42j&NnMq@>;!NUHkgdPbcFiH ztnj+`DZA7td^zS3?uqgOFVa_fn^rw|lZczCqOfEoQa1Ng5^aBD#ej~mpl zbM%!m&3#DnA)4SA1UvXYfAAEH0;)_*pFi}XM8G<)^?+0w!5-q^=0f07u71vwWN(d+ z^g!?8Z&yrIb1xrw;Njp0;5*(6{qn(#2cka^q7Aciue=La?F7><*ds;UQsTpczw!hi zEVeKMY4vN7xOjHa``y!FeAj_)4rfqFQ^Owkl!4G-52T%xpo8X(xi1(wPsO36ol^Ts z*$U9xChciIhbK_j(3W5<;X$z~%4#nUid7(V@Wcfs_MeOt%nWD-X#ff6H~*#kc;0bw zwC5y&8laD_mj2Qk`aDPpDmy|aIK7wCRcX`O;OHSLVfUYQKpE8ufe=9@l^uRDEJPrugZO*0Ngf$`g9uVWcj|Tya5@1CqD+*6KgZ+^;D<;+L>JdRdIvIT>smO zphu8C_+Ux`Oh5*6od^_;nA*vDAD&GPJ=;0g7vJXZ%mB6B8}%bL+?-vand#bVT^Cu> z-{5au(4*nOJL;q$-y@-qr@#kfl)y+iK_G4BJ<0fC`|9ph?ruk!Gp>wqDOTN(5QYG{p*L(=P)MRxH%*j3&sPQ^WfzspVf{e z6f)_wP5|n`=r{<57`K1d0|Ny0tvqt3Sy0X_wgqSBC1gqSp^*NWj(Md4#ttYh{YO-a zOsu+IG6QCQdV<(dFFJa{?n68R5jyD)^uAyB?`=MBR=8Sp9#T@dEMQIrA@X?tG^}Uz|pJ z1ekf?G-w{YJmAs#JZl3&cbp2-ZHq{8rf*f38Gy_KEd7Dfgi?+v3^YJM`y8q}!a;$! zh!pt$kqtl&1YKAGaUd(GPdH8$pE(5>^1pGgz)vlp=@ABnaPC1gXv~Wi0gjcRV9YH5 zme6{Ydme{t4Dg)}R$3ie07JL|4SFu{x!I_}4iA{D7)nK+6F4ARQgk(Rf#@gS6o0&1O2?v1~BtL*)S&i0lXdv zz`;Nc4p|V;#!AxwbNGK%Mu;k_Ov&d-2&B6nLxy6WIC;Hfo(#_3mSPmu*p(LG#p62I zf%?I@;5`WVMv1^sPa+g7POYgRAJGZ96LSCx9gGJZglAw*HtL%Ie5V3zSAbYd z=p=;)4y_P|m^zJ=VtI*6#f{W*4^(p``TD5)upI-oE@xf1TD+Wmx> z&CaPH@bOmPf8;PfI$)!8kyMDu6~Y1>Qzdhe`o0Yyewn?R_55h9-qnGGH<&wf3e$O) zTDpx8!;=EX-d71M6(}*gAB42HANy!U?9;^>N-lCDG`nVj(leCj5Ag3+V+u!_ZC>I# ziZd$#sV?|DBB>InTI%Bi)?*a5p$s7F0kN$%0Cyf%vb10^Kf*p;L4-dAr#E*I1Ef1? zL7a)6)}4IjW-4n+ZT-sDYyNw;skCvAa8`|w&ro-_|M_~ z{Uz3fa5yz>WBnhN67OFEsKO@2ogjsdBX@v1?lNJ( z55Zsg2D_&R}65GuG=r7z^VFB_r1OXw1(`08JEaL zwl0Pqbp}y~zc-KTLPXoag&S1Ch6tjrGSS(~P(zIiKuph&T5v}6#xmPK8M;)~(K^rg!_yG9w-hcLL)UUzJMb#z zQ9oF>;)8O3%FmM|MS8*W5|2S7^w7}ydZ7#9Dp3p8PnV>%KHp4J!6u-!5A_zz+qdUP z$nfZnxLMUq*~|925Q=%r5kz`0qVqq5D>8%H>roR-EAJvjo6s5KYfl$hRVDq!{_1vz zDuor`68h*SUWYNeTo1bKdk#e01wTB-QUJ!Vzl#r~D2e9spMtNh zQ0R;fV?$&>F`N)}F+5zlqf{=k7e|AP)n~ z6=VzuguwgxM1s->Kr3yTxY^zoamXgCM%y@FHO2FEY;XR#fde$G==QJvDRWD(0s&|{ zPe|8;BO78+1leGI|D)kk<(15;oQ_Ini!1OydpBnVh~I1h@F>u6LG_Job9WO0R0>|r zL4&r^fEu!zDRSkQnbMxmt{nYNLv2Das~%tCHBfD;8E;?+emVpN~YyNoLN%fD#13lba>(|Y%l2vtkUOy0^d?LI8rj}bGi^`;goAQoh|TVVz*x*6 zBss(E!kJ5HBQVznXhskm&C|65gP+1@m3xXS*-S0lt9U*<*J6B^E4(zG>+1uwgR=nk z36_p|6C(H>P|Kj(T(^fmwl#dm;k&a$Hsk zA_fW?bR!U%MKJ#YCPk8Ib76to^tG+x-_Ll@Mv$^?5$m>W2Tr1|^gF_He`-R!Kjs$qz5p$rcUfec*be#H-BYd(26J78cM_EWzx zV}eu~0vTP_8_Hugwn*;P{3rk0i&&2gI`8Q`8N2Dpy`vo(x-kbI8v!a}mtNilc*~YBVovAf9F91M@OwWvZUVlXsdXIIHBv=kp zf~@+8TCNU@x&wkZQ*ebQrMq<$g6O>*MDOj6P2#KX7a){VSDR4zsY@qSffXPDkhZWp zpQh84_T9SGTOL0KSB}N*&KNeFkLcjka4C$oLpc~b+oEYWHg~WOP>)4y>r3l(*fIjn{I4U>?VTNqq{io+_yw$cD+@lnep2-tS2ueteNWPn| zSmjJ1Q#I_j0ChVO$-mw$oF~L?%m!^K5fClq{R7O(*j0ir8&@$5Qwj&M&@>oiB(t}iC3g}K)Wn*djF}_f3<-IcvxKF0@%L~pk$*ZLD zj{;fSk<@lUAOIPpd;X7ahQUW4sX6I2Y@~};-g>eCKAOl`E0`kTsc(G=32`RyF)gZ6 zcbGK`X$B8S)aEhWDB|ogOrKzSfX9GRGq`J!g>M$e%9w9rVu&y^pHrB3O%4I&`CQG< z+8Z_`-JE>?3?X-AaZ&1FeDN~YgEolNUo|jVLj%gzN&ALDq9?)?6XQOa4Yf*c%&%jm z=jY+oK<`As+ARUok8(OSpSxiUIEaPc}Y*%V@GE`3=?zF&k4G2JLhuL01Mq z*wiV=L_PqlVL+e145qXi9%LXPD;^I82g8lqe#1Boz^9kw@1b&Td{_d2?~yCc)NLZ^ z9-0foBNXebNDeCbodQ&We0nhmB=}wSX@9yAf6i`zygLPy8B+e8>LG}6Yy`4uEFea% z4RU_pLX_+2eSuaa0dfJg!cFo9oaKSbq<=x`bNOG(oZDX2g*1ts4?F+JX`^buX`OQ7 zkW!n6D$k60d3+C(X2`A$ZYBVnQgDaC4Fc4gd?CUqfKn-rd06@^28T`bVF5%jQR)Cz4<0y1jDy7jZ-##I6~ekS9C`)gJh zA!HgBO>Pd-O@W z95MTm-XX-?NzVGptzH4%ETardIW0r8Wn+#b>kR(va7M;JR4QM@jU=c7F5@Q^BS!Oc z1R(wO|Nr~{XW;+y8Tg48AqEodlXrvP?asq9clj4T;$|pd4h3G2(G1bH2cj*B(Ny^V zX@S4K31SG?^|}WlAVg(r)qYVz(u)c02MQ8LROrnxn5ae9S%%ZroN^s}EOXq;A)3M0 zQj8Snhq7~rV(boy#$ zhyp<`?9k+yFy`S><8iK$+HzOy^4t#7g2MjdUV{w4*8_!Ch^HB0FC3tDM1pT9&e#yq zt=dwA(vXZMgfxqB<2qz?X#Zx5t@khl(pcn6Ox6XNQtWb1iwz@PT6-B1zfjh~9bAB5 z*b+8PN}@qyG~lFdN=Jh|I}SU}dENhpkt1Cqf&no+z|_Ag!tnPqM|SGFFGThX=+zv| zwX6|;$NOh_(_A#_Pq)>jEFDkexK ztf!PQ#K`&nKoX!>x@h@# z-VURmRUFgx_6ii5-n(~G^&O=h+f)=8za9QUVY}W*-H|FyY41g~?^huBu;y|z zbx7E<_3plwj%^u8NO&Qn_7YWG@rLF-eor1yt8~HGV}RQ%$>I}jeW5kx=f?l}s+7KC z6oWFaQ8G8Z4S4R6duj?U8G|*h7-0vi`D9x7Q*sU*kvs~6!SiKDd>fop1 z=rCCfWq=fpGylC0o(akkStP2*QOY-P-ogP;!K0Xw&wr=N=xcvU8$Mdf!PQp%B$&@~ z%Nsp37GLDhQ7>t34FC27MdFfjTCgbbGLSzVfF!oS^(SIS>q&xS%NE|ejogeC)5n=( zc+HKYAJOE3IENPwsi&hggIYj9jzjRpbxTTUtnLnZKguAio$F7XDQVni<;NEmpomcGL|5<}`|tJC z_dNZDvzv@!cTu^Vm5>%Rj#&w!#*e7HehY$iIkVQZ@%IS)L(eq$;y#c0D}<$D$NF8r z{2PDmO`ZN~(N(&wS!GKHsL?<=8t<_8JhwqgA9tol)$k&#*bxPAH@k3_$Exg)u$M7K zI_Z{lCFB2jstRB(o3x~y`F<76{CRTS;x2n3gev@=wr_vdOhvtHL)DrRq0S!}g+{6E z%B9z~c0*WWnG%=ty|*L*!{Ymv4kh)AXnd)g8K{cgg%rI=h~sq9R-Fs1pPA z9oBi2{>+XMc4DT(zqpd217Q~9=1UO=UQHnj6u%30kArWd13JlDF0S4J?Kmo*jLf!o zj7AoGh2zeSAy7c11yp>7yCwIN$KQv)LuK=o9Rq5Q*j4k5VYsERRomzHDb&IZaY0y^ zuCx6>4RLl8T-d4u*YL4hRPEJX?#~l!AjTgAGN?%D-X5}sek0<*+@eum0*nNEn)Yqy z7e<~xUbZ_v#Sq;4*1R&;PVe)LkgF0-jm_^-_ulIy6KT;+2PH@+|Bc5OruiKsRE)D^ zR6j;H5eO({MP44{;#QrZi1uK9R^9wB#?~k_BSRdsF$G0jYWY z1MU}$ANSR^E|}Q_JzsG(mL)M4DoVsh{eBV3S~0(I z<#uoFUq$H73z$o4{Hk)qq0?Nx!GXo){{8ckC&I|LoZN~CwVFuzu1X+Oa?sj%9dJgm zSlEIw`!sv&Gu;ce%-(ZFQzM3zsp^z6Y6b?m&Da-;m%NOvC$)+p7j_U+d#vJ~W_ z+ndj7G?i|59kNorqq>=~XeXRh>OS%)EX-rFo39gyd7@I%AM9dUWbcDpdg8AMTXrg@ zE0%e=Bqo4V?*KF0Ms&oy`2A?yM~|-P7O}1c+%}SL0|sKr!9XXOX!GLPbFmhS#Jmi% zgqVo=$)cg^I2cdbhUBKjw-r*27lxK(YJHejufC7^<_Z9j3qcVnG$S}{&IpdE%=fX& z8$_1(Mv=aBImEYHe?(BWje8Hd-Px#~2S)j#yN@(lO@GPBt@g*A8f`vdx_WUwbShZv z>YdshGP^p;?E@H0;I61}DL}P#B9~|Mu0Mz(2MG2~s}@{DatEGA1)4$4Z%#4&+E#Zhz$TU-I#}RcP8ixj=mtS$zNXeHqO;}6oHZ{X?tT|6PcUETm9)ie+W+5+$%-fAf=Qf?Yu>3as>fvY~v3AHLb z|9C>)DEx!2QrO3+;=tkjj;QOf!-Z!ZrO*Gmkv0bE(cdsIld}h1NIy$MJUrz-Dqjj{ z&TKZt5N^xpzH1d+abPpQBr1}$Bo(e4Mm57X2e-krL9|@1jPaPyK^FtFv00@+leV?F z=5>zMzioXnflKSoaLOpWWovmdaqk@*WH`82CUR2Z8X&v&3>M{C>cH`jqZQ4yS-p4I zA6(ha|92nNJUE+@ZKHcuj2uLe{gIn5lhv%4D&PMn@0|w0*I90aPc*>kWBj~$>i*=S zs#XqO-15^-ioXgkGiy&H`jcl*kpBK;pG$zb5AH`jaWb(|Sf5R*-QQRl>6&7Xz3lg1 zPfc>!OL7@xx9kRZnyKA%7fNg9qjmF=0-_=WIvN_%`Nk?ymXjDNnxEp*T+UX-qblvv z*>`ZDzNgCSNH|F$?c>Hk;%uR^@P1z!%NH)Yg8l2DnXJ1v{0tX@jUPr4>ui10!kGR$ z|LrpDNoGA4(s-V|Pa%9cmdtN$teG*tB1U{$E0y|g$6&kPs8~oruvKXJ$LCp-AFGPm zH!ct2wn!o`f@#yTGnWfqKNnMdrk%!ba|MZ_V8IGvoxZCgOTXck+@U>GH&`7)b1#Bch8=?6Fkd8 zk7$f%K69?));<_B{6|moTD?8S=6?OL)rr`cf>OkdbpK<=pUiWo3D*6iDTgPeSD4y zrgcYajYCU&`9^$QW`X-18PwC*tyN23f|CrX%qD`Rh6 z*Iy!aZreneR_)j%R6Lz74w&;d2p9$5)BL^mA0x>NieW55^y27?zGmbbt%7GXNxigX z`v1zJs!*aRRTFL{o3T8-6Tb>37+-R-#^nWG((NU5{EZ%ci{fsI{F!Yyk+LpL|CKk&y!WEh6`yM$yxw&j`%&HAr`(b# zXUq_ogamu!n>0z*(>;Dpb-mp^_kI0`PuW?@U^1m6S8#^v!l9I?yDMwI9uf<}-PI6~ zK)tD2Jzn|!3IQAWha;z+`lnJ3qtnL`@3X|hpz5t*4)2e9_X z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE diff --git a/src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png b/src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png index 5aac7e95d991c5d9fa914229c45d1ba8e0e6821b..e41ab9609c9528df8a332d63fc0517fbdfffe0f1 100644 GIT binary patch literal 7435 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 s)7J2C?|Ken{-MGD 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 z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE From 4f901a2addc7f842996668bb2c8e77d99e70537a Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Thu, 28 Nov 2024 21:42:35 +0100 Subject: [PATCH 143/196] Update with LVM sponsor --- docs/img/LVM_Versicherung_2010_logo.svg.png | Bin 7435 -> 53097 bytes docs/img/springdoc/springdoc-favicon.svg | 166 ++++++++++++++++++ docs/img/springdoc/springdoc-logo.svg | 139 +++++++++++++++ .../v1/img/LVM_Versicherung_2010_logo.svg.png | Bin 0 -> 53097 bytes docs/v1/img/springdoc/springdoc-favicon.svg | 166 ++++++++++++++++++ docs/v1/img/springdoc/springdoc-logo.svg | 139 +++++++++++++++ .../img/LVM_Versicherung_2010_logo.svg.png | Bin 7435 -> 53097 bytes 7 files changed, 610 insertions(+) create mode 100644 docs/img/springdoc/springdoc-favicon.svg create mode 100644 docs/img/springdoc/springdoc-logo.svg create mode 100644 docs/v1/img/LVM_Versicherung_2010_logo.svg.png create mode 100644 docs/v1/img/springdoc/springdoc-favicon.svg create mode 100644 docs/v1/img/springdoc/springdoc-logo.svg diff --git a/docs/img/LVM_Versicherung_2010_logo.svg.png b/docs/img/LVM_Versicherung_2010_logo.svg.png index e41ab9609c9528df8a332d63fc0517fbdfffe0f1..5aac7e95d991c5d9fa914229c45d1ba8e0e6821b 100644 GIT binary patch literal 53097 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 z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE literal 7435 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 s)7J2C?|Ken{-MGD + + + Created with Fabric.js 4.6.0 diff --git a/docs/img/springdoc/springdoc-logo.svg b/docs/img/springdoc/springdoc-logo.svg new file mode 100644 index 0000000..f3f7bb8 --- /dev/null +++ b/docs/img/springdoc/springdoc-logo.svg @@ -0,0 +1,139 @@ + + + + Created with Fabric.js 4.6.0 diff --git a/docs/v1/img/LVM_Versicherung_2010_logo.svg.png b/docs/v1/img/LVM_Versicherung_2010_logo.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..5aac7e95d991c5d9fa914229c45d1ba8e0e6821b GIT binary patch literal 53097 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 z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE literal 0 HcmV?d00001 diff --git a/docs/v1/img/springdoc/springdoc-favicon.svg b/docs/v1/img/springdoc/springdoc-favicon.svg new file mode 100644 index 0000000..21eeef6 --- /dev/null +++ b/docs/v1/img/springdoc/springdoc-favicon.svg @@ -0,0 +1,166 @@ + + + + Created with Fabric.js 4.6.0 diff --git a/docs/v1/img/springdoc/springdoc-logo.svg b/docs/v1/img/springdoc/springdoc-logo.svg new file mode 100644 index 0000000..f3f7bb8 --- /dev/null +++ b/docs/v1/img/springdoc/springdoc-logo.svg @@ -0,0 +1,139 @@ + + + + Created with Fabric.js 4.6.0 diff --git a/src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png b/src/docs/asciidoc/img/LVM_Versicherung_2010_logo.svg.png index e41ab9609c9528df8a332d63fc0517fbdfffe0f1..5aac7e95d991c5d9fa914229c45d1ba8e0e6821b 100644 GIT binary patch literal 53097 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 z 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

84lwJd7wlLX9jhME46_}(M>8OD^ zbp3h4PgQ`Ft{5iP-+WZQ!c`EoWqZenwOAM?HMe;Bl$|A=ha~n~?v$eY=F#(sVkl~r z^fwgF-#==RVq{IsTHYSYv0)FMR}s0-z82;C5uyl~(KkeNRF+MThmF3#L&F!;wV1S{ zI!JQb2u1FlX8EzO7R9tz9;LgGnA%Y=M(@1QDZdGRjL_mlSYX=HgkpmI zd%Wg>zQd@p=quCpC!Y(8H}@U9f1iq?yWsryB0G2rn4E;>GC`!ERB8RNO$8?Z?r*$B z53GfIT_kg=>fdjhzW%kG+J1Ut*~O5~^z(QEkiTlDetYlLwbzr-iC#!;FxGVv93QuL zomd0$k;zbyobRnEorwYs8x@uNJW{RJCBX)Ha^l3@hAlYrcV~# z#Sd;Nm{~C@Gs_I5Ki?Z-0J+L+i_&JVW*NszgY-hOs7CR!vdbXDh3KDwYH=<(0Aly1b^9tAtD2BM1d=;$7 zQpGi#1aM{FEYOUUAb%25^I%-k7oQL2lwex$4;Y5g79uwu3TOdtk0{8Xp&}^+aLaK@ zk+jEy@iB}T9=LA1ZpakK?d_eSYkFQDfKxmBLy_8lT|+Ccl`{z&aR$YA?zW&s#07HG zrh!_rWIJ}WmA-;%*tPBpo={$PC|<=4>|AH~xuFpxfZ(+;z7<6!6Wv?rvqn_tU%oS` z%?y1u3j*-_z{wTUN+=`Lse0};UAF#<9t6+3UGmlXE16RKAShV0f68}5VFTR=WuP;Vo7Kb5-kMISX|&#Z&qs;%ccEj|G}^795;p>mV{22P!&EuIJwGZMiS`i=p)kR7FS~4s zAu=Y~Z?25u8NnU4+VgFpyiHnpW8#2B@;70bP!+rV=_@~t1s`=7EX~W@I0&NqaSdAK zuw4zI)no%(dS?2)#f>9O(-20kwselC$(XWTH)QZ7MEMuT`!8S?M3@}ME9YsquX3FQ zxTF8S{1I7uLHerrv!zxo)gA-_(YQ!zxtJNdm>heKHFA9}eN1xBvhE literal 7435 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 s)7J2C?|Ken{-MGD Date: Thu, 28 Nov 2024 21:45:08 +0100 Subject: [PATCH 144/196] Update with LVM sponsor --- docs/index.html | 4 ++-- docs/sponsor.html | 2 +- docs/v1/index.html | 4 ++-- docs/v1/sponsor.html | 2 +- src/docs/asciidoc/index.adoc | 2 +- src/docs/asciidoc/sponsor.adoc | 2 +- src/docs/asciidoc/v1/index.adoc | 2 +- src/docs/asciidoc/v1/sponsor.adoc | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/index.html b/docs/index.html index 1906ee3..98d5e5f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -244,7 +244,7 @@

springdoc-openapi v2.7.0

- +

@@ -2471,7 +2471,7 @@ - +

diff --git a/docs/sponsor.html b/docs/sponsor.html index eb08380..e7a1542 100644 --- a/docs/sponsor.html +++ b/docs/sponsor.html @@ -55,7 +55,7 @@ - +

diff --git a/docs/v1/index.html b/docs/v1/index.html index 27b2154..fcb8b7b 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -226,7 +226,7 @@

springdoc-openapi v1.8.0

- +

@@ -2153,7 +2153,7 @@ - +

diff --git a/docs/v1/sponsor.html b/docs/v1/sponsor.html index 7dd751a..beb391f 100644 --- a/docs/v1/sponsor.html +++ b/docs/v1/sponsor.html @@ -55,7 +55,7 @@ - +

diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc index 4f79232..87f95b9 100644 --- a/src/docs/asciidoc/index.adoc +++ b/src/docs/asciidoc/index.adoc @@ -20,7 +20,7 @@ This project is sponsored by - +

++++ diff --git a/src/docs/asciidoc/sponsor.adoc b/src/docs/asciidoc/sponsor.adoc index 4025341..89874e2 100644 --- a/src/docs/asciidoc/sponsor.adoc +++ b/src/docs/asciidoc/sponsor.adoc @@ -20,7 +20,7 @@ Thank you to our bronze sponsors! - +

++++ diff --git a/src/docs/asciidoc/v1/index.adoc b/src/docs/asciidoc/v1/index.adoc index 3fbbf73..94772cc 100644 --- a/src/docs/asciidoc/v1/index.adoc +++ b/src/docs/asciidoc/v1/index.adoc @@ -18,7 +18,7 @@ This project is sponsored by - +

++++ diff --git a/src/docs/asciidoc/v1/sponsor.adoc b/src/docs/asciidoc/v1/sponsor.adoc index def2bd1..053c2d3 100644 --- a/src/docs/asciidoc/v1/sponsor.adoc +++ b/src/docs/asciidoc/v1/sponsor.adoc @@ -20,7 +20,7 @@ Thank you to our bronze sponsors! - +

++++ From 51d1cd1547bfafc801e5466b4c45aa3f1f8608a3 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Thu, 28 Nov 2024 21:46:22 +0100 Subject: [PATCH 145/196] Update with LVM sponsor --- docs/index.html | 4 ++-- docs/sponsor.html | 2 +- docs/v1/index.html | 4 ++-- docs/v1/sponsor.html | 2 +- src/docs/asciidoc/index.adoc | 2 +- src/docs/asciidoc/sponsor.adoc | 2 +- src/docs/asciidoc/v1/index.adoc | 2 +- src/docs/asciidoc/v1/sponsor.adoc | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/index.html b/docs/index.html index 98d5e5f..adac4a6 100644 --- a/docs/index.html +++ b/docs/index.html @@ -244,7 +244,7 @@

springdoc-openapi v2.7.0

- +

@@ -2471,7 +2471,7 @@ - +

diff --git a/docs/sponsor.html b/docs/sponsor.html index e7a1542..9b17b9a 100644 --- a/docs/sponsor.html +++ b/docs/sponsor.html @@ -55,7 +55,7 @@ - +

diff --git a/docs/v1/index.html b/docs/v1/index.html index fcb8b7b..d8017e5 100644 --- a/docs/v1/index.html +++ b/docs/v1/index.html @@ -226,7 +226,7 @@

springdoc-openapi v1.8.0

- +

@@ -2153,7 +2153,7 @@ - +

diff --git a/docs/v1/sponsor.html b/docs/v1/sponsor.html index beb391f..66286e3 100644 --- a/docs/v1/sponsor.html +++ b/docs/v1/sponsor.html @@ -55,7 +55,7 @@ - +

diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc index 87f95b9..f0abbf0 100644 --- a/src/docs/asciidoc/index.adoc +++ b/src/docs/asciidoc/index.adoc @@ -20,7 +20,7 @@ This project is sponsored by - +

++++ diff --git a/src/docs/asciidoc/sponsor.adoc b/src/docs/asciidoc/sponsor.adoc index 89874e2..2083863 100644 --- a/src/docs/asciidoc/sponsor.adoc +++ b/src/docs/asciidoc/sponsor.adoc @@ -20,7 +20,7 @@ Thank you to our bronze sponsors! - +

++++ diff --git a/src/docs/asciidoc/v1/index.adoc b/src/docs/asciidoc/v1/index.adoc index 94772cc..910cd9c 100644 --- a/src/docs/asciidoc/v1/index.adoc +++ b/src/docs/asciidoc/v1/index.adoc @@ -18,7 +18,7 @@ This project is sponsored by - +

++++ diff --git a/src/docs/asciidoc/v1/sponsor.adoc b/src/docs/asciidoc/v1/sponsor.adoc index 053c2d3..393c580 100644 --- a/src/docs/asciidoc/v1/sponsor.adoc +++ b/src/docs/asciidoc/v1/sponsor.adoc @@ -20,7 +20,7 @@ Thank you to our bronze sponsors! - +

++++ From 55a6567c515a7d19b2e3e67cbaf95cbac30aa014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Tarj=C3=A1nyi?= Date: Sat, 14 Dec 2024 18:38:04 +0100 Subject: [PATCH 146/196] Fix core property description in asciidoc --- src/docs/asciidoc/core-properties.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/asciidoc/core-properties.adoc b/src/docs/asciidoc/core-properties.adoc index 6563822..71b1e59 100644 --- a/src/docs/asciidoc/core-properties.adoc +++ b/src/docs/asciidoc/core-properties.adoc @@ -45,7 +45,7 @@ |springdoc.show-spring-cloud-functions | `true` | `Boolean`. To display the spring-cloud-function web endpoints. |springdoc.enable-groovy | `true` | `Boolean`. To enable Groovy support. |springdoc.enable-spring-security | `true` | `Boolean`. To enable spring-security support. -|springdoc.enable-kotlin | `true` | `Boolproperty resolver on @Schema (extensionean`. To enable Kotlin support. +|springdoc.enable-kotlin | `true` | `Boolean`. To enable Kotlin support. |springdoc.enable-hateoas | `true` | `Boolean`. To enable spring-hateoas support. |springdoc.enable-data-rest | `true` | `Boolean`. To enable spring-data-rest support. |springdoc.api-docs.version | `openapi_3_0` | `String`. To choose `OpenAPI 3.0` or `OpenAPI 3.1` (using the value `OPENAPI_3_1`). From 38e56b6f5d8f2beb5ea4e3620a4179dfb7e072ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Tarj=C3=A1nyi?= <17810336+martin-tarjanyi@users.noreply.github.com> Date: Sat, 14 Dec 2024 18:41:47 +0100 Subject: [PATCH 147/196] Fix other occurrences --- docs/core-properties.html | 4 ++-- docs/index.html | 4 ++-- docs/properties.html | 4 ++-- docs/v1/properties.html | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/core-properties.html b/docs/core-properties.html index 5aab260..cd24cf9 100644 --- a/docs/core-properties.html +++ b/docs/core-properties.html @@ -256,7 +256,7 @@

springdoc.enable-kotlin

true

-

Boolproperty resolver on @Schema (extensionean. To enable Kotlin support.

+

Boolean. To enable Kotlin support.

springdoc.enable-hateoas

@@ -320,4 +320,4 @@
- \ No newline at end of file + diff --git a/docs/index.html b/docs/index.html index adac4a6..15fdd95 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1515,7 +1515,7 @@

springdoc.enable-kotlin

true

-

Boolproperty resolver on @Schema (extensionean. To enable Kotlin support.

+

Boolean. To enable Kotlin support.

springdoc.enable-hateoas

@@ -4657,4 +4657,4 @@

- \ No newline at end of file + diff --git a/docs/properties.html b/docs/properties.html index a476c69..a44978c 100644 --- a/docs/properties.html +++ b/docs/properties.html @@ -264,7 +264,7 @@

springdoc.enable-kotlin

true

-

Boolproperty resolver on @Schema (extensionean. To enable Kotlin support.

+

Boolean. To enable Kotlin support.

springdoc.enable-hateoas

@@ -603,4 +603,4 @@

- \ No newline at end of file + diff --git a/docs/v1/properties.html b/docs/v1/properties.html index 7afeafd..a43719f 100644 --- a/docs/v1/properties.html +++ b/docs/v1/properties.html @@ -264,7 +264,7 @@

springdoc.enable-kotlin

true

-

Boolproperty resolver on @Schema (extensionean. To enable Kotlin support.

+

Boolean. To enable Kotlin support.

springdoc.enable-hateoas

@@ -603,4 +603,4 @@

- \ No newline at end of file + From 938101e187dcbfcca9b46b15ce245b3d57bd3979 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Fri, 3 Jan 2025 22:36:41 +0100 Subject: [PATCH 148/196] Moving to springdoc 2.8.0 --- docs/faq.html | 6 +++--- docs/getting-started.html | 2 +- docs/index.html | 18 +++++++++--------- docs/migrating-from-springfox.html | 2 +- docs/modules.html | 4 ++-- docs/sponsor.html | 2 +- docs/v1/index.html | 4 ++-- docs/v1/sponsor.html | 2 +- pom.xml | 2 +- src/docs/asciidoc/faq.adoc | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index ab16abd..4739e2e 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2011,7 +2011,7 @@

springdoc-openapi 2.x is compatible with spring-boot 3.

-

In general, you should only pick the last stable version as per today 2.7.0.

+

In general, you should only pick the last stable version as per today 2.8.0.

diff --git a/docs/getting-started.html b/docs/getting-started.html index 6b6b039..447ec33 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -40,7 +40,7 @@

Getting S
   <dependency>
       <groupId>org.springdoc</groupId>
       <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-      <version>2.7.0</version>
+      <version>2.8.0</version>
    </dependency>
diff --git a/docs/index.html b/docs/index.html index adac4a6..7fd6933 100644 --- a/docs/index.html +++ b/docs/index.html @@ -18,7 +18,7 @@ -springdoc-openapi v2.6.0 +springdoc-openapi v2.8.0 + + + + + + + + + +
+
+
+ +
+
+
+
+ + + + + +
+ + +springdoc-openapi v1.8.0 is the latest Open Source release supporting Spring Boot 2.x and 1.x.
+An extended support for springdoc-openapi v1 project is now available for organizations that need support beyond 2023.
+For more details, feel free to reach out: sales@springdoc.org +
+
+
+

springdoc-openapi is on Open Collective. If you ❤️ this project consider becoming a sponsor.

+
+
+

This project is sponsored by

+
+

+ + +    + + + + + + + + + + + + +

+ +
+
+
+

1. Introduction

+
+
+

springdoc-openapi java library helps to automate the generation of API documentation using spring boot projects. +springdoc-openapi works by examining an application at runtime to infer API semantics based on spring configurations, class structure and various annotations.

+
+
+

Automatically generates documentation in JSON/YAML and HTML format APIs. +This documentation can be completed by comments using swagger-api annotations.

+
+
+

This library supports:

+
+
+
    +
  • +

    OpenAPI 3

    +
  • +
  • +

    Spring-boot v3 (Java 17 & Jakarta EE 9)

    +
  • +
  • +

    JSR-303, specifically for @NotNull, @Min, @Max, and @Size.

    +
  • +
  • +

    Swagger-ui

    +
  • +
  • +

    OAuth 2

    +
  • +
  • +

    GraalVM native images

    +
  • +
+
+
+

The following video introduces the Library:

+
+
+
+spring.io conference +
+
+
+

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

+
+
+
+
+

2. Getting Started

+
+
+

For the integration between spring-boot and swagger-ui, add the library to the list of your project dependencies (No additional configuration is needed)

+
+
+
+
   <dependency>
+      <groupId>org.springdoc</groupId>
+      <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+      <version>2.8.10</version>
+   </dependency>
+
+
+
+

This will automatically deploy swagger-ui to a spring-boot application:

+
+
+
    +
  • +

    Documentation will be available in HTML format, using the official swagger-ui jars

    +
  • +
  • +

    The Swagger UI page will then be available at http://server:port/context-path/swagger-ui.html and the OpenAPI description will be available at the following url for json format: http://server:port/context-path/v3/api-docs

    +
    +
      +
    • +

      server: The server name or IP

      +
    • +
    • +

      port: The server port

      +
    • +
    • +

      context-path: The context path of the application

      +
    • +
    +
    +
  • +
  • +

    Documentation will be available in yaml format as well, on the following path : /v3/api-docs.yaml

    +
  • +
+
+
+ + + + + +
+ + +For custom path of the swagger documentation in HTML format, add a custom springdoc property, in your spring-boot configuration file: . +
+
+
+
+
# swagger-ui custom path
+springdoc.swagger-ui.path=/swagger-ui.html
+
+
+ + + +
+
+
+

3. Springdoc-openapi Modules

+
+
+

3.1. General overview

+
+
+Architecture +
+
+
+
+

3.2. Spring WebMvc support

+
+
    +
  • +

    Documentation will be available at the following url for json format: http://server:port/context-path/v3/api-docs

    +
    +
      +
    • +

      server: The server name or IP

      +
    • +
    • +

      port: The server port

      +
    • +
    • +

      context-path: The context path of the application

      +
    • +
    +
    +
  • +
  • +

    Documentation will be available in yaml format as well, on the following path : /v3/api-docs.yaml

    +
  • +
  • +

    Add the library to the list of your project dependencies. (No additional configuration is needed)

    +
  • +
+
+
+
+
   <dependency>
+      <groupId>org.springdoc</groupId>
+      <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
+      <version>2.8.10</version>
+   </dependency>
+
+
+
+ + + + + +
+ + +This dependency is relevant if you want to generate the OpenAPI description without using the swagger-ui. +
+
+
+ + + + + +
+ + +For custom path of the OpenAPI documentation in Json format, add a custom springdoc property, in your spring-boot configuration file: +
+
+
+
+
# /api-docs endpoint custom path
+springdoc.api-docs.path=/api-docs
+
+
+
+
+

3.3. Spring WebFlux support

+
+
    +
  • +

    Documentation will be available in yaml format as well, on the following path : /v3/api-docs.yaml

    +
  • +
  • +

    Add the library to the list of your project dependencies (No additional configuration is needed)

    +
  • +
+
+
+
+
   <dependency>
+      <groupId>org.springdoc</groupId>
+      <artifactId>springdoc-openapi-starter-webflux-api</artifactId>
+      <version>2.8.10</version>
+   </dependency>
+
+
+
+
+

3.4. Spring Hateoas support

+
+

The support for Spring Hateoas is available using the dependency springdoc-openapi-hateoas.

+
+
+

The projects that use spring-boot-starter-hateoas should use:

+
+
+
    +
  • +

    springdoc-openapi-starter-webmvc-api if they need only the access to the OpenAPI endpoints

    +
  • +
  • +

    OR springdoc-openapi-starter-webmvc-ui, if they need also the access to the swagger-ui

    +
  • +
+
+
+
+

3.5. Spring Data Rest support

+
+

springdoc-openapi project supports spring-boot-starter-data-rest types like: @RepositoryRestResource and QuerydslPredicate annotations.

+
+
+

The projects that use spring-boot-starter-data-rest should use:

+
+
+
    +
  • +

    springdoc-openapi-starter-webmvc-api if they need only the access to the OpenAPI endpoints

    +
  • +
  • +

    OR springdoc-openapi-starter-webmvc-ui, if they need also the access to the swagger-ui

    +
  • +
+
+
+
+

3.6. Spring Security support

+
+

springdoc-openapi helps ignoring @AuthenticationPrincipal type in case it is used on REST Controllers.

+
+
+

springdoc-openapi supports also exposing Oauth2 endpoints of spring-security-oauth2-authorization-server.

+
+
+

The projects that use spring-boot-starter-security or spring-security-oauth2-authorization-server should use:

+
+
+
    +
  • +

    springdoc-openapi-starter-webmvc-api if they depend on spring-boot-starter-web and they only need the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webmvc-ui, if they depend on spring-boot-starter-web and they also need the access to the swagger-ui.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-api if they depend on spring-boot-starter-webflux and they only the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-ui, if they depend on spring-boot-starter-webflux and they also need the access to the swagger-ui.

    +
  • +
+
+
+
+

3.7. Actuator support

+
+
    +
  • +

    In order to display spring-boot-actuator endpoints, simply add the following property:

    +
  • +
+
+
+
+
springdoc.show-actuator=true
+
+
+
+

Starting from the release 1.5.1, it will be possible to expose the swagger-ui and the openapi endpoints on actuator port.

+
+
+ + + + + +
+ + +The actuator management port has to be different from the application port. +
+
+
+

To expose the swagger-ui, on the management port, you should set

+
+
+
+
springdoc.use-management-port=true
+# This property enables the openapi and swagger-ui endpoints to be exposed beneath the actuator base path.
+management.endpoints.web.exposure.include=openapi, swagger-ui
+
+
+
+

Once enabled, you should also be able to see the springdoc-openapi endpoints under: (host and port depends on your settings) +- http://serverName:managementPort/actuator

+
+
+

For example, if you have the following settings:

+
+
+

Two endpoints will be available:

+
+
+
    +
  1. +

    REST API that holdes the OpenAPI definition:

    +
    +
      +
    • +

      http://serverName:managementPort/actuator/openapi

      +
    • +
    +
    +
  2. +
  3. +

    An Endpoint, that routes to the swagger-ui:

    +
    +
      +
    • +

      http://serverName:managementPort/actuator/swagger-ui

      +
    • +
    +
    +
  4. +
+
+
+
+
management.server.port=9090
+
+
+
+

For the example, you should also be able to see the springdoc-openapi endpoints:

+
+
+
    +
  • +

    http://serverName:9090/actuator

    +
  • +
  • +

    http://serverName:9090/actuator/swagger-ui

    +
  • +
  • +

    http://serverName:9090/actuator/openapi

    +
  • +
+
+
+

All the path springdoc-openapi properties are not applicable when springdoc.use-management-port=true.

+
+
+ + + + + +
+ + +If you want to reach the application endpoints, from the swagger-ui deployed beneath the actuator base path, using a different port from your application, CORS for your endpoints on your application level should be enabled. +
+
+
+

Additionally, it is also possible to combine this property, with the existing property to display the actuator endpoints in the swagger-ui.

+
+
+
+
springdoc.show-actuator=true
+
+
+
+

Once enabled: +- A dedicated group for the actuator endpoints will be by default added. +- If no group is defined for the application, a default one will be added.

+
+
+

The swagger-ui will be then accessible through the actuator port:

+
+
+
    +
  • +

    http://serverName:managementPort/actuator/swagger-ui

    +
  • +
+
+
+

If the management port is different from the application port and springdoc.use-management-port is not defined but springdoc.show-actuator is set to true:

+
+
+
    +
  • +

    The swagger-ui will be then accessible through the application port. For example: http://serverName:applicationPort/swagger-ui.html

    +
  • +
  • +

    A dedicated group for the actuator endpoints will be by default added.

    +
  • +
  • +

    If no group is defined for the application, a default one will be added.

    +
  • +
+
+
+ + + + + +
+ + +If you want to reach the actuator endpoints for this case (different port from your application), CORS for your actuator endpoints should be enabled. +
+
+
+

Note: The naming of these new endpoints beneath the actuator base path cannot be customized for now.

+
+
+
+

3.8. Spring Cloud Function Web support

+
+

spring-cloud-function-web exposes Java Function as REST endpoint automatically. +* Since version v1.6.3, the support of functional endpoints has been added.

+
+
+
    +
  • +

    These starters will display the OpenAPI description of the spring-cloud-function-web endpoints.

    +
    +
      +
    • +

      If you are using spring-web, simply add the springdoc-openapi-starter-webmvc-ui dependency.

      +
    • +
    • +

      If you are using spring-webflux, simply add the springdoc-openapi-starter-webflux-ui dependency.

      +
    • +
    +
    +
  • +
+
+
+

The customisation of the output can be achieved programmatically through OpenApiCustomizer or with the annotations: @RouterOperations and @RouterOperation. +For annotation usage, you have: +* @RouterOperation: It can be used alone, if the customisation is related to a single REST API. +When using @RouterOperation, it’s not mandatory to fill the path

+
+
+
    +
  • +

    @RouterOperation, contains the @Operation annotation. +The @Operation annotation can also be placed on the bean method level if the property beanMethod is declared.

    +
  • +
+
+
+ + + + + +
+ + +Don’t forget to set operationId which is mandatory. +
+
+
+
+
@Bean
+@RouterOperation(operation = @Operation(description = "Say hello", operationId = "hello", tags = "persons",
+        responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = PersonDTO.class)))))
+public Supplier<PersonDTO> helloSupplier() {
+    return () -> new PersonDTO();
+}
+
+
+
+
+
    +
  • +

    @RouterOperations: This annotation should be used to describe the multiple REST APIs exposed by spring-cloud-function-web. +When using RouterOperations, it’s mandatory to fill the method property.

    +
  • +
  • +

    A @RouterOperations, contains many @RouterOperation.

    +
  • +
+
+
+
+
@Bean
+@RouterOperations({
+        @RouterOperation(method = RequestMethod.GET, operation = @Operation(description = "Say hello GET", operationId = "lowercaseGET", tags = "persons")),
+        @RouterOperation(method = RequestMethod.POST, operation = @Operation(description = "Say hello POST", operationId = "lowercasePOST", tags = "positions"))
+})
+public Function<Flux<String>, Flux<String>> lowercase() {
+    return flux -> flux.map(value -> value.toLowerCase());
+}
+
+
+
+
+

Some code samples are available on GITHUB of demos:

+
+ +
+
+

3.9. Kotlin support

+
+

springdoc-openapi supports Kotlin types.

+
+
+

The projects that use Kotlin should use:

+
+
+
    +
  • +

    springdoc-openapi-starter-webmvc-api if they depend on spring-boot-starter-web and they only need the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webmvc-ui, if they depend on spring-boot-starter-web and they also need the access to the swagger-ui.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-api if they depend on spring-boot-starter-webflux and they only the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-ui, if they depend on spring-boot-starter-webflux and they also need the access to the swagger-ui.

    +
  • +
+
+
+ + + + + +
+ + +In addition, your project should add jackson-module-kotlin as well to have the full support of Kotlin types: +
+
+
+
+
    <dependency>
+        <groupId>com.fasterxml.jackson.module</groupId>
+        <artifactId>jackson-module-kotlin</artifactId>
+    </dependency>
+
+
+
+
+

3.10. Groovy support

+
+

The projects that use Groovy should use:

+
+
+
    +
  • +

    springdoc-openapi-starter-webmvc-api if they depend on spring-boot-starter-web and they only need the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webmvc-ui, if they depend on spring-boot-starter-web and they also need the access to the swagger-ui.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-api if they depend on spring-boot-starter-webflux and they only the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-ui, if they depend on spring-boot-starter-webflux and they also need the access to the swagger-ui.

    +
  • +
+
+
+
+

3.11. Javadoc support

+
+

springdoc-openapi can introspect Javadoc annotations and comments:

+
+
+
    +
  • +

    The javadoc comment of a method: is resolved as the @Operation description

    +
  • +
  • +

    @return : is resolved as the @Operation response description

    +
  • +
  • +

    The javadoc comment of an attribute: is resolved as '@Schema' description for this field.

    +
  • +
+
+
+

The projects that needs Javadoc support should use:

+
+
+
    +
  • +

    springdoc-openapi-starter-webmvc-api if they depend on spring-boot-starter-web and they only need the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webmvc-ui, if they depend on spring-boot-starter-web and they also need the access to the swagger-ui.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-api if they depend on spring-boot-starter-webflux and they only the access to the OpenAPI endpoints.

    +
  • +
  • +

    OR springdoc-openapi-starter-webflux-ui, if they depend on spring-boot-starter-webflux and they also need the access to the swagger-ui.

    +
  • +
+
+
+ + + + + +
+ + +In addition, your project should add therapi-runtime-javadoc to read Javadoc comments at runtime. +Ensure that you add it as well as its annotation processor to your project’s dependencies. Otherwise, the Javadoc support will fail silently. +
+
+
+
+
    <!--Annotation processor -->
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>com.github.therapi</groupId>
+                            <artifactId>therapi-runtime-javadoc-scribe</artifactId>
+                            <version>0.15.0</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <!-- Runtime library -->
+    <dependency>
+        <groupId>com.github.therapi</groupId>
+        <artifactId>therapi-runtime-javadoc</artifactId>
+        <version>0.15.0</version>
+    </dependency>
+
+
+
+ + + + + +
+ + +If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. +
+
+
+
+

3.12. Springdoc-openapi BOM

+
+

Starting from version v2.8.7, springdoc-openapi provides a BOM (Bill of Materials) to manage the dependencies of the project. +You can declare it in your project as follows:

+
+
+
+
    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springdoc</groupId>
+                <artifactId>springdoc-openapi-bom</artifactId>
+                <version>2.8.10</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+
+
+
+
+
+

4. Springdoc-openapi Features

+
+
+

4.1. Adding API Information and Security documentation

+
+

The library uses spring-boot application auto-configured packages to scan for the following annotations in spring beans: OpenAPIDefinition and Info. +These annotations declare, API Information: Title, version, licence, security, servers, tags, security and externalDocs. +For better performance of documentation generation, declare @OpenAPIDefinition and @SecurityScheme annotations within a spring managed bean.

+
+
+
+

4.2. Error Handling for REST using @ControllerAdvice

+
+

To generate documentation automatically, make sure all the methods declare the HTTP Code responses using the annotation: @ResponseStatus

+
+
+
+

4.3. Disabling the springdoc-openapi endpoints

+
+

In order to disable the springdoc-openapi endpoint (/v3/api-docs by default) use the following property:

+
+
+
+
# Disabling the /v3/api-docs endpoint
+springdoc.api-docs.enabled=false
+
+
+
+
+

4.4. Disabling the swagger-ui

+
+

In order to disable the swagger-ui, use the following property:

+
+
+
+
# Disabling the swagger-ui
+springdoc.swagger-ui.enabled=false
+
+
+
+
+

4.5. Swagger-ui configuration

+
+

The library supports the swagger-ui official properties:

+
+ +
+

You need to declare swagger-ui properties as spring-boot properties. +All these properties should be declared with the following prefix: springdoc.swagger-ui

+
+
+
+

4.6. Selecting the Rest Controllers to include in the documentation

+
+

Additionally, to @Hidden annotation from swagger-annotations, its possible to restrict the generated OpenAPI description using package or path configuration.

+
+
+

For the list of packages to include, use the following property:

+
+
+
+
# Packages to include
+springdoc.packagesToScan=com.package1, com.package2
+
+
+
+

For the list of paths to include, use the following property:

+
+
+
+
# Paths to include
+springdoc.pathsToMatch=/v1, /api/balance/**
+
+
+
+
+

4.7. Spring-webflux/WebMvc.fn with Functional Endpoints

+
+

Since version v1.5.0, a functional DSL has been introduced, thanks to this enhancement in the spring-framework: #25938

+
+
+

It’s an alternative functional API to the @RouterOperations annotations.

+
+
+

This is a sample DSL, to generate OpenAPI description to the webflux/WebMvc.fn REST endpoints:

+
+
+
+
@Bean
+RouterFunction<?> routes() {
+    return route().GET("/foo", HANDLER_FUNCTION, ops -> ops
+            .operationId("hello")
+            .parameter(parameterBuilder().name("key1").description("My key1 description"))
+            .parameter(parameterBuilder().name("key2").description("My key2 description"))
+            .response(responseBuilder().responseCode("200").description("This is normal response description"))
+            .response(responseBuilder().responseCode("404").description("This is another response description"))
+    ).build();
+}
+
+
+
+
+

Here is the link for some sample codes:

+
+ +
+

And the Demo code, using the functional endpoints DSL:

+
+ +
+

Since version v1.3.8, the support of functional endpoints has been added. +Two main annotations have been added for this purpose: @RouterOperations and @RouterOperation.

+
+
+

Only REST APIs with the @RouterOperations and @RouterOperation can be displayed on the swagger-ui.

+
+
+
    +
  • +

    @RouterOperation: It can be used alone, if the Router bean contains one single route related to the REST API.. +When using @RouterOperation, its not mandatory to fill the path

    +
  • +
  • +

    @RouterOperation, can reference directly a spring Bean (beanClass property) and the underlying method (beanMethod property): Springdoc-openapi, will then inspect this method and the swagger annotations on this method level.

    +
  • +
+
+
+
+
@Bean
+@RouterOperation(beanClass = EmployeeService.class, beanMethod = "findAllEmployees")
+RouterFunction<ServerResponse> getAllEmployeesRoute() {
+   return route(GET("/employees").and(accept(MediaType.APPLICATION_JSON)),
+         req -> ok().body(
+               employeeService().findAllEmployees(), Employee.class));
+}
+
+
+
+
+
    +
  • +

    @RouterOperation, contains the @Operation annotation. +The @Operation annotation can also be placed on the bean method level if the property beanMethod is declared.

    +
  • +
+
+
+ + + + + +
+ + +Don’t forget to set operationId which is mandatory. +
+
+
+
+
@Bean
+@RouterOperation(operation = @Operation(operationId = "findEmployeeById", summary = "Find purchase order by ID", tags = { "MyEmployee" },
+      parameters = { @Parameter(in = ParameterIn.PATH, name = "id", description = "Employee Id") },
+      responses = { @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(schema = @Schema(implementation = Employee.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Employee ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Employee not found") }))
+RouterFunction<ServerResponse> getEmployeeByIdRoute() {
+   return route(GET("/employees/{id}"),
+         req -> ok().body(
+               employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class));
+}
+
+
+
+
+
    +
  • +

    @RouterOperations: This annotation should be used if the Router bean contains multiple routes. +When using RouterOperations, its mandatory to fill the path property.

    +
  • +
  • +

    A @RouterOperations, contains many @RouterOperation.

    +
  • +
+
+
+
+
@RouterOperations({ @RouterOperation(path = "/getAllPersons", beanClass = PersonService.class, beanMethod = "getAll"),
+      @RouterOperation(path = "/getPerson/{id}", beanClass = PersonService.class, beanMethod = "getById"),
+      @RouterOperation(path = "/createPerson", beanClass = PersonService.class, beanMethod = "save"),
+      @RouterOperation(path = "/deletePerson/{id}", beanClass = PersonService.class, beanMethod = "delete") })
+@Bean
+public RouterFunction<ServerResponse> personRoute(PersonHandler handler) {
+   return RouterFunctions
+         .route(GET("/getAllPersons").and(accept(MediaType.APPLICATION_JSON)), handler::findAll)
+         .andRoute(GET("/getPerson/{id}").and(accept(MediaType.APPLICATION_STREAM_JSON)), handler::findById)
+         .andRoute(POST("/createPerson").and(accept(MediaType.APPLICATION_JSON)), handler::save)
+         .andRoute(DELETE("/deletePerson/{id}").and(accept(MediaType.APPLICATION_JSON)), handler::delete);
+}
+
+
+
+
+

All the documentations filled using @RouterOperation, might be completed by the router function data. +For that, @RouterOperation fields must help identify uniquely the concerned route. +springdoc-openpi scans for a unique route related to a @RouterOperation annotation, using on the following criteria:

+
+
+
    +
  • +

    by path

    +
  • +
  • +

    by path and RequestMethod

    +
  • +
  • +

    by path and produces

    +
  • +
  • +

    by path and consumes

    +
  • +
  • +

    by path and RequestMethod and produces

    +
  • +
  • +

    by path and RequestMethod and consumes

    +
  • +
  • +

    by path and produces and consumes

    +
  • +
  • +

    by path and RequestMethod and produces and consumes

    +
  • +
+
+
+

Some code samples are available on GITHUB of demos:

+
+ +
+

And some project tests: (from app69 to app75)

+
+ +
+
+

4.8. Integration with WildFly

+
+
    +
  • +

    For WildFly users, you need to add the following dependency to make the swagger-ui work:

    +
  • +
+
+
+
+
   <dependency>
+     <groupId>org.webjars</groupId>
+     <artifactId>webjars-locator-jboss-vfs</artifactId>
+     <version>0.1.0</version>
+   </dependency>
+
+
+ + + +
+
+
+
+

5. Springdoc-openapi Properties

+
+
+

springdoc-openapi relies on standard spring configuration properties (yml or properties) using the standard files locations.

+
+
+

5.1. springdoc-openapi core properties

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter nameDefault ValueDescription

springdoc.api-docs.path

/v3/api-docs

String, For custom path of the OpenAPI documentation in Json format.

springdoc.api-docs.enabled

true

Boolean. To disable the springdoc-openapi endpoint (/v3/api-docs by default).

springdoc.packages-to-scan

*

List of Strings. The list of packages to scan (comma separated)

springdoc.paths-to-match

/*

List of Strings. The list of paths to match (comma separated)

springdoc.produces-to-match

/*

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.headers-to-match

/*

List of Strings. The list of headers to match (comma separated)

springdoc.consumes-to-match

/*

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.paths-to-exclude

List of Strings. The list of paths to exclude (comma separated)

springdoc.packages-to-exclude

List of Strings. The list of packages to exclude (comma separated)

springdoc.default-consumes-media-type

application/json

String. The default consumes media type.

springdoc.default-produces-media-type

/

String. The default produces media type.

springdoc.cache.disabled

false

Boolean. To disable the springdoc-openapi cache of the calculated OpenAPI.

springdoc.show-actuator

false

Boolean. To display the actuator endpoints.

springdoc.auto-tag-classes

true

Boolean. To disable the springdoc-openapi automatic tags.

springdoc.model-and-view-allowed

false

Boolean. To allow RestControllers with ModelAndView return to appear in the OpenAPI description.

springdoc.override-with-generic-response

true

Boolean. When true, automatically adds @ControllerAdvice responses to all the generated responses.

springdoc.group-configs[0].group

String. The group name

springdoc.group-configs[0].display-name

String. The display name of the group.

springdoc.group-configs[0].packages-to-scan

*

List of Strings. The list of packages to scan for a group (comma separated)

springdoc.group-configs[0].paths-to-match

/*

List of Strings. The list of paths to match for a group (comma separated)

springdoc.group-configs[0].paths-to-exclude

``

List of Strings. The list of paths to exclude for a group (comma separated)

springdoc.group-configs[0].packages-to-exclude

List of Strings. The list of packages to exclude for a group (comma separated)

springdoc.group-configs[0].produces-to-match

/*

List of Strings. The list of produces mediaTypes to match (comma separated)

springdoc.group-configs[0].consumes-to-match

/*

List of Strings. The list of consumes mediaTypes to match (comma separated)

springdoc.group-configs[0].headers-to-match

/*

List of Strings. The list of headers to match (comma separated)

springdoc.webjars.prefix

/webjars

String. To change the webjars prefix that is visible the URL of swagger-ui for spring-webflux.

springdoc.api-docs.resolve-schema-properties

false

Boolean. To enable property resolver on @Schema (name, title and description).

springdoc.remove-broken-reference-definitions

true

Boolean. To disable removal of broken reference definitions.

springdoc.writer-with-default-pretty-printer

false

Boolean. To enable pretty print of the OpenApi specification.

springdoc.model-converters.deprecating-converter.enabled

true

Boolean. To disable deprecating model converter.

springdoc.model-converters.polymorphic-converter.enabled

true

Boolean. To disable polymorphic model converter.

springdoc.model-converters.pageable-converter.enabled

true

Boolean. To disable pageable model converter.

springdoc.model-converters.sort-converter.enabled

true

Boolean. To disable Sort converter.

springdoc.use-fqn

false

Boolean. To enable fully qualified names.

springdoc.show-login-endpoint

false

Boolean. To make spring security login-endpoint visible.

springdoc.pre-loading-locales

List of Strings. The list of locales to load OpenAPI on application startup (comma separated). If not specified, it will preload with the default Locale.

springdoc.writer-with-order-by-keys

false

Boolean. Enable a deterministic/alphabetical ordering.

springdoc.use-management-port

false

Boolean. To expose the swagger-ui on the actuator management port.

springdoc.disable-i18n

false

Boolean. To disable automatic translation using i18n.

springdoc.show-spring-cloud-functions

true

Boolean. To display the spring-cloud-function web endpoints.

springdoc.enable-groovy

true

Boolean. To enable Groovy support.

springdoc.enable-spring-security

true

Boolean. To enable spring-security support.

springdoc.enable-kotlin

true

Boolean. To enable Kotlin support.

springdoc.enable-hateoas

true

Boolean. To enable spring-hateoas support.

springdoc.enable-data-rest

true

Boolean. To enable spring-data-rest support.

springdoc.api-docs.version

openapi_3_1

String. To choose OpenAPI 3.0 or OpenAPI 3.1 (using the value OPENAPI_3_1).

springdoc.default-flat-param-object

false

Boolean. To default flatten parameter.

springdoc.default-support-form-data

false

Boolean. To default set parameters to form data when specifying api to accept form data.

springdoc.nullable-request-parameter-enabled

true

Boolean. To default Enable Support for nullable request parameters in Kotlin.

springdoc.show-oauth2-endpoints

false

Boolean. To make spring security oauth2-endpoint visible.

springdoc.api-docs.resolve-extensions-properties

false

Boolean. To enable support of spring property resolver for @ExtensionProperty.

springdoc.enable-default-api-docs

true

Boolean. To enable default OpenAPI endpoint /v3/api-docs.

springdoc.trim-kotlin-indent

false

Boolean. Adjust indentation when parsing the @Operation annotation in Kotlin.

springdoc.allowed-locales

List of Strings. The list of allowed locales for OpenAPI (comma separated, for example US,fr-CA).

springdoc.enable-extra-schemas

true

Boolean. To enable default support for extra Schemas, from java.time package like LocalTime, Duration, but also other Java classes like java.util.Locale or java.nio.charset.Charset

springdoc.explicit-object-schema

false

Boolean. Set explicit-object-schema to true to always include type: object in the schema, or to false to omit type: object.

springdoc.use-arbitrary-schemas

false

Boolean. When set to true, schemas without a defined type will be deserialized as an ArbitrarySchema (with no type), instead of an ObjectSchema with type: object.

+
+
+

5.2. swagger-ui properties

+
+
    +
  • +

    The support of the swagger-ui properties is available on springdoc-openapi. See Official documentation.

    +
  • +
  • +

    You can use the same swagger-ui properties in the documentation as Spring Boot properties.

    +
  • +
+
+
+ + + + + +
+ + +All these properties should be declared with the following prefix: springdoc.swagger-ui +
+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter nameDefault ValueDescription

springdoc.swagger-ui.path

/swagger-ui.html

String, For custom path of the swagger-ui HTML documentation.

springdoc.swagger-ui.enabled

true

Boolean. To disable the swagger-ui endpoint (/swagger-ui.html by default).

springdoc.swagger-ui.configUrl

/v3/api-docs/swagger-config

String. URL to fetch external configuration document from.

springdoc.swagger-ui.layout

BaseLayout

String. The name of a component available via the plugin system to use as the top-level layout for Swagger UI.

springdoc.swagger-ui.validatorUrl

By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator.

springdoc.swagger-ui.tryItOutEnabled

false

Boolean. Controls whether the "Try it out" section should be enabled by default.

springdoc.swagger-ui.filter

false

Boolean OR String. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag.

springdoc.swagger-ui.operationsSorter

Function=(a ⇒ a). Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged.

springdoc.swagger-ui.tagsSorter

Function=(a ⇒ a). Apply a sort to the tag list of each API. It can be 'alpha' (sort by paths alphanumerically) or a function see Array.prototype.sort() to learn how to write a sort function). Two tag name strings are passed to the sorter for each pass. Default is the order determined by Swagger UI.

springdoc.swagger-ui.oauth2RedirectUrl

/swagger-ui/oauth2-redirect.html

String. OAuth redirect URL.

springdoc.swagger-ui.displayOperationId

false

Boolean. Controls the display of operationId in operations list. The default is false.

springdoc.swagger-ui.displayRequestDuration

false

Boolean. Controls the display of the request duration (in milliseconds) for "Try it out" requests.

springdoc.swagger-ui.deepLinking

false

Boolean. If set to true, enables deep linking for tags and operations. See the [Deep Linking documentation](swagger.io/docs/open-source-tools/swagger-ui/usage/deep-linking) for more information.

springdoc.swagger-ui.defaultModelsExpandDepth

1

Number. The default expansion depth for models (set to -1 completely hide the models).

springdoc.swagger-ui.defaultModelExpandDepth

1

Number. The default expansion depth for the model on the model-example section.

springdoc.swagger-ui.defaultModelRendering

String=["example"*, "model"]. Controls how the model is shown when the API is first rendered. (The user can always switch the rendering for a given model by clicking the 'Model' and 'Example Value' links.)

springdoc.swagger-ui.docExpansion

String=["list"*, "full", "none"]. Controls the default expansion setting for the operations and tags. It can be 'list' (expands only the tags), 'full' (expands the tags and operations) or 'none' (expands nothing).

springdoc.swagger-ui.maxDisplayedTags

Number. If set, limits the number of tagged operations displayed to at most this many. The default is to show all operations.

springdoc.swagger-ui.showExtensions

false

Boolean. Controls the display of vendor extension (x-) fields and values for Operations, Parameters, and Schema.

springdoc.swagger-ui.url

String.To configure, the path of a custom OpenAPI file . Will be ignored if urls is used.

springdoc.swagger-ui.showCommonExtensions

false

Boolean. Controls the display of extensions (pattern, maxLength, minLength, maximum, minimum) fields and values for Parameters.

springdoc.swagger-ui.supportedSubmitMethods

Array=[get, put, post, delete, options, head, patch, trace]. List of HTTP methods that have the "Try it out" feature enabled. An empty array disables "Try it out" for all operations. This does not filter the operations from the display.

springdoc.swagger-ui.queryConfigEnabled

false

Boolean. Disabled since v1.6.0. This parameter enables (legacy) overriding configuration parameters via URL search params. See security advisory before enabling this feature.

springdoc.swagger-ui.oauth. additionalQueryStringParams

String. Additional query parameters added to authorizationUrl and tokenUrl.

springdoc.swagger-ui.disable-swagger-default-url

false

Boolean. To disable the swagger-ui default petstore url. (Available since v1.4.1).

springdoc.swagger-ui.urls[0].url

URL. The url of the swagger group, used by Topbar plugin. URLs must be unique among all items in this array, since they’re used as identifiers.

springdoc.swagger-ui.urls[0].name

String. The name of the swagger group, used by Topbar plugin. Names must be unique among all items in this array, since they’re used as identifiers.

springdoc.swagger-ui.urlsPrimaryName

String. The name of the swagger group which will be displayed when Swagger UI loads.

springdoc.swagger-ui.oauth.clientId

String. Default clientId. MUST be a string.

springdoc.swagger-ui.oauth.clientSecret

String. Default clientSecret. Never use this parameter in your production environment. It exposes crucial security information. This feature is intended for dev/test environments only.

springdoc.swagger-ui.oauth.realm

String. realm query parameter (for OAuth 1) added to authorizationUrl and tokenUrl.

springdoc.swagger-ui.oauth.appName

String. OAuth application name, displayed in authorization popup.

springdoc.swagger-ui.oauth.scopeSeparator

String. OAuth scope separator for passing scopes, encoded before calling, default value is a space (encoded value %20).

springdoc.swagger-ui.csrf.enabled

false

Boolean. To enable CSRF support

springdoc.swagger-ui.csrf.use-local-storage

false

Boolean. To get the CSRF token from the Local Storage.

springdoc.swagger-ui.csrf.use-session-storage

false

Boolean. To get the CSRF token from the Session Storage.

springdoc.swagger-ui.csrf.cookie-name

XSRF-TOKEN

String. Optional CSRF, to set the CSRF cookie name.

springdoc.swagger-ui.csrf.header-name

X-XSRF-TOKEN

String. Optional CSRF, to set the CSRF header name.

springdoc.swagger-ui.syntaxHighlight.activated

true

Boolean. Whether syntax highlighting should be activated or not.

springdoc.swagger-ui.syntaxHighlight.theme

agate

String. String=["agate"*, "arta", "monokai", "nord", "obsidian", "tomorrow-night"]. Highlight.js syntax coloring theme to use. (Only these 6 styles are available.)

springdoc.swagger-ui.oauth. useBasicAuthentication WithAccessCodeGrant

false

Boolean. Only activated for the accessCode flow. During the authorization_code request to the tokenUrl, pass the Client Password using the HTTP Basic Authentication scheme (Authorization header with Basic base64encode(client_id + client_secret)).

springdoc.swagger-ui.oauth. usePkceWithAuthorization CodeGrant

false

Boolean.Only applies to authorizatonCode flows. Proof Key for Code Exchange brings enhanced security for OAuth public clients.

springdoc.swagger-ui.persistAuthorization

false

Boolean. If set to true, it persists authorization data and it would not be lost on browser close/refresh

springdoc.swagger-ui.use-root-path

false

Boolean. If set to true, the swagger-ui will be accessible from the application root path directly.

+ + + +
+
+
+
+

6. Springdoc-openapi Plugins

+
+
+

6.1. Maven plugin

+
+

The aim of springdoc-openapi-maven-plugin is to generate json and yaml OpenAPI description during build time. +The plugin works during integration-tests phase, and generate the OpenAPI description. +The plugin works in conjunction with spring-boot-maven plugin.

+
+
+

You can test it during the integration tests phase using the maven command:

+
+
+
+
mvn verify
+
+
+
+

In order to use this functionality, you need to add the plugin declaration on the plugins section of your pom.xml:

+
+
+
+
<plugin>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-maven-plugin</artifactId>
+    <version>${spring-boot-maven-plugin.version}</version>
+    <configuration>
+        <jvmArguments>-Dspring.application.admin.enabled=true</jvmArguments>
+    </configuration>
+    <executions>
+        <execution>
+            <goals>
+                <goal>start</goal>
+                <goal>stop</goal>
+            </goals>
+        </execution>
+    </executions>
+</plugin>
+<plugin>
+    <groupId>org.springdoc</groupId>
+    <artifactId>springdoc-openapi-maven-plugin</artifactId>
+    <version>1.5</version>
+    <executions>
+        <execution>
+            <id>integration-test</id>
+            <goals>
+                <goal>generate</goal>
+            </goals>
+        </execution>
+    </executions>
+</plugin>
+
+
+
+

For more custom settings of the springdoc-openapi-maven-plugin, you can consult the plugin documentation:

+
+ +
+
+

6.2. Gradle plugin

+
+

This plugin allows you to generate an OpenAPI 3 specification for a Spring Boot application from a Gradle build.

+
+
+
+
plugins {
+      id("org.springframework.boot") version "3.1.2"
+      id("org.springdoc.openapi-gradle-plugin") version "1.9.0"
+}
+
+
+
+
+

When you add this plugin and its runtime dependency plugins to your build file, the plugin creates the following tasks:

+
+
+
    +
  • +

    forkedSpringBootRun

    +
  • +
  • +

    generateOpenApiDocs

    +
  • +
+
+
+
+
gradle clean generateOpenApiDocs
+
+
+
+

For more custom configuration of springdoc-openapi-gradle-plugin ,you can consult the plugin documentation:

+
+ +
+
+
+
+

7. Springdoc-openapi Demos

+ +
+
+

8. Migrating from SpringFox

+
+
+
    +
  • +

    Remove springfox and swagger 2 dependencies. Add springdoc-openapi-starter-webmvc-ui dependency instead.

    +
  • +
+
+
+
+
   <dependency>
+      <groupId>org.springdoc</groupId>
+      <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+      <version>2.8.10</version>
+   </dependency>
+
+
+
+
    +
  • +

    Replace swagger 2 annotations with swagger 3 annotations (it is already included with springdoc-openapi-starter-webmvc-ui dependency). +Package for swagger 3 annotations is io.swagger.v3.oas.annotations.

    +
    +
      +
    • +

      @Api@Tag

      +
    • +
    • +

      @ApiIgnore@Parameter(hidden = true) or @Operation(hidden = true) or @Hidden

      +
    • +
    • +

      @ApiImplicitParam@Parameter

      +
    • +
    • +

      @ApiImplicitParams@Parameters

      +
    • +
    • +

      @ApiModel@Schema

      +
    • +
    • +

      @ApiModelProperty(allowEmptyValue = true)@Schema(nullable = true)

      +
    • +
    • +

      @ApiModelProperty@Schema

      +
    • +
    • +

      @ApiOperation(value = "foo", notes = "bar")@Operation(summary = "foo", description = "bar")

      +
    • +
    • +

      @ApiParam@Parameter

      +
    • +
    • +

      @ApiResponse(code = 404, message = "foo")@ApiResponse(responseCode = "404", description = "foo")

      +
    • +
    +
    +
  • +
  • +

    This step is optional: Only if you have multiple Docket beans replace them with GroupedOpenApi beans.

    +
  • +
+
+
+

Before:

+
+
+
+
  @Bean
+  public Docket publicApi() {
+      return new Docket(DocumentationType.SWAGGER_2)
+              .select()
+              .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.public"))
+              .paths(PathSelectors.regex("/public.*"))
+              .build()
+              .groupName("springshop-public")
+              .apiInfo(apiInfo());
+  }
+
+  @Bean
+  public Docket adminApi() {
+      return new Docket(DocumentationType.SWAGGER_2)
+              .select()
+              .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.admin"))
+              .paths(PathSelectors.regex("/admin.*"))
+              .apis(RequestHandlerSelectors.withMethodAnnotation(Admin.class))
+              .build()
+              .groupName("springshop-admin")
+              .apiInfo(apiInfo());
+  }
+
+
+
+
+

Now:

+
+
+
+
  @Bean
+  public GroupedOpenApi publicApi() {
+      return GroupedOpenApi.builder()
+              .group("springshop-public")
+              .pathsToMatch("/public/**")
+              .build();
+  }
+  @Bean
+  public GroupedOpenApi adminApi() {
+      return GroupedOpenApi.builder()
+              .group("springshop-admin")
+              .pathsToMatch("/admin/**")
+              .addOpenApiMethodFilter(method -> method.isAnnotationPresent(Admin.class))
+              .build();
+  }
+
+
+
+
+

If you have only one Docket — remove it and instead add properties to your application.properties:

+
+
+
+
springdoc.packagesToScan=package1, package2
+springdoc.pathsToMatch=/v1, /api/balance/**
+
+
+
+
    +
  • +

    Add bean of OpenAPI type. See example:

    +
  • +
+
+
+
+
  @Bean
+  public OpenAPI springShopOpenAPI() {
+      return new OpenAPI()
+              .info(new Info().title("SpringShop API")
+              .description("Spring shop sample application")
+              .version("v0.0.1")
+              .license(new License().name("Apache 2.0").url("http://springdoc.org")))
+              .externalDocs(new ExternalDocumentation()
+              .description("SpringShop Wiki Documentation")
+              .url("https://springshop.wiki.github.org/docs"));
+  }
+
+
+
+
+ +
+
+
+
+

9. Other resources

+
+ +
+

9.2. Dependencies repository

+
+

The springdoc-openapi libraries are hosted on maven central repository. +The artifacts can be viewed accessed at the following locations:

+
+
+

Releases:

+
+ +
+

Snapshots:

+
+ +
+
+
+
+ +
+
+

springdoc-openapi is on Open Collective.

+
+
+

If you ❤️ this project consider becoming a sponsor.

+
+
+

This money is used to cover project expenses and your donation will help the project live and grow successfully.

+
+
+

Thank you to our bronze sponsors!

+
+

+ + +    + + + + + + + + + + + + +

+
+

10.1. Benefits of being a bronze sponsor

+
+

Bronze sponsors donate $50 per month to the project, and get the following benefits:

+
+
+
    +
  • +

    You will receive a Sponsor badge 🎖!. Visibility on the front page of springdoc.org in the welcome page (about 55,000 views/month on May, 2022).

    +
  • +
  • +

    “Thank you” tweet from `springdoc team'.

    +
  • +
+
+
+
+

10.2. Benefits of being a silver sponsor

+
+

Silver sponsors donate $100 per month to the project, and get the following benefits:

+
+
+
    +
  • +

    Same benefits as bronze sponsors (visibility on main pages, and thank you tweet).

    +
  • +
  • +

    The ability to get support for 2 issues every month, non transferable.

    +
  • +
  • +

    If issues are not created by the end of the month, it is lost

    +
  • +
+
+
+
+

10.3. Benefits of being a gold sponsor

+
+

Gold sponsors donate $500 per month to the project, and get the following benefits:

+
+
+
    +
  • +

    Same benefits as silver sponsors (visibility on main pages, and thank you tweet).

    +
  • +
  • +

    The ability to get support for 10 issues every month, non transferable.

    +
  • +
  • +

    Company logos on all springdoc.org page footers

    +
  • +
  • +

    If issues are not created by the end of the month, the remaining ones are lost.

    +
  • +
+
+
+
+
+
+

11. Special Thanks

+
+
+
    +
  • +

    Thank you to The Spring Team for sharing all relevant resources around Spring projects.

    +
  • +
  • +

    Thanks a lot JetBrains for supporting springdoc-openapi project.

    +
  • +
+
+
+
+JetBrains logo +
+
+
+
+
+

12. F.A.Q

+
+
+

12.1. How can I define multiple OpenAPI definitions in one Spring Boot project?

+
+

You can define your own groups of API based on the combination of: API paths and packages to scan. Each group should have a unique groupName. +The OpenAPI description of this group, will be available by default on:

+
+
+
    +
  • +

    http://server:port/context-path/v3/api-docs/groupName

    +
  • +
+
+
+

To enable the support of multiple OpenAPI definitions, a bean of type GroupedOpenApi needs to be defined.

+
+
+

For the following Group definition(based on package path), the OpenAPI description URL will be : /v3/api-docs/stores

+
+
+
+
@Bean
+public GroupedOpenApi storeOpenApi() {
+   String paths[] = {"/store/**"};
+   return GroupedOpenApi.builder().group("stores").pathsToMatch(paths)
+         .build();
+}
+
+
+
+
+

For the following Group definition (based on package name), the OpenAPI description URL will be: /v3/api-docs/users

+
+
+
+
@Bean
+public GroupedOpenApi userOpenApi() {
+   String packagesToscan[] = {"test.org.springdoc.api.app68.api.user"};
+   return GroupedOpenApi.builder().group("users").packagesToScan(packagesToscan)
+         .build();
+}
+
+
+
+
+

For the following Group definition(based on path), the OpenAPI description URL will be: /v3/api-docs/pets

+
+
+
+
@Bean
+public GroupedOpenApi petOpenApi() {
+   String paths[] = {"/pet/**"};
+   return GroupedOpenApi.builder().group("pets").pathsToMatch(paths)
+         .build();
+}
+
+
+
+
+

For the following Group definition (based on package name and path), the OpenAPI description URL will be: /v3/api-docs/groups

+
+
+
+
@Bean
+public GroupedOpenApi groupOpenApi() {
+   String paths[] = {"/v1/**"};
+   String packagesToscan[] = {"test.org.springdoc.api.app68.api.user", "test.org.springdoc.api.app68.api.store"};
+   return GroupedOpenApi.builder().group("groups").pathsToMatch(paths).packagesToScan(packagesToscan)
+         .build();
+}
+
+
+
+
+

For more details about the usage, you can have a look at the following sample Test:

+
+ +
+
+

12.2. How can I configure Swagger UI?

+
+
    +
  • +

    The support of the swagger official properties is available on springdoc-openapi. See Official documentation.

    +
  • +
  • +

    You can use the same swagger properties in the documentation as Spring Boot properties.

    +
  • +
+
+
+ + + + + +
+ + +All these properties should be declared with the following prefix: springdoc.swagger-ui +
+
+
+
+

12.3. How can I filter the resources documented in the output specification by the provided group?

+
+
    +
  • +

    You can use the standard swagger-ui property filter.

    +
  • +
+
+
+
+
springdoc.swagger-ui.filter=group-a
+
+
+
+
+

12.4. How can I disable/enable Swagger UI generation based on env variable?

+
+
    +
  • +

    This property helps you disable only the UI.

    +
  • +
+
+
+
+
springdoc.swagger-ui.enabled=false
+
+
+
+
+

12.5. How can I control the default expansion setting for the operations and tags, in the Swagger UI ,

+
+
    +
  • +

    You can set this property in your application.yml like so for example:

    +
  • +
+
+
+
+
springdoc.swagger-ui.doc-expansion= none
+
+
+
+
+

12.6. How can I change the layout of the swagger-ui?

+
+
    +
  • +

    For layout options, you can use swagger-ui configuration options. For example:

    +
  • +
+
+
+
+
springdoc.swagger-ui.layout=BaseLayout
+
+
+
+
+

12.7. How can I sort endpoints alphabetically?

+
+
    +
  • +

    You can use the following springdoc-openapi properties:

    +
  • +
+
+
+
+
#For sorting endpoints alphabetically
+springdoc.swagger-ui.operationsSorter=alpha
+#For sorting tags alphabetically
+springdoc.swagger-ui.tagsSorter=alpha
+
+
+
+
+

12.8. How can I disable the try it out button?

+
+
    +
  • +

    You have to set the following property:

    +
  • +
+
+
+
+
springdoc.swagger-ui.supportedSubmitMethods=get, put, post, delete, options, head, patch, trace
+
+
+
+
+

12.9. How can I add Reusable Enums ?

+
+
    +
  • +

    You should add @Schema(enumAsRef = true) on your enum.

    +
  • +
+
+
+
+

12.10. How can i apply enumAsRef = true to all enums ?

+
+
    +
  • +

    Declare the following property:

    +
  • +
+
+
+
+
static {
+    io.swagger.v3.core.jackson.ModelResolver.enumsAsRef = true;
+}
+
+
+
+
+

12.11. How can I explicitly set which paths to filter?

+
+
    +
  • +

    You can set list of paths to include using the following property:

    +
  • +
+
+
+
+
springdoc.pathsToMatch=/v1, /api/balance/**
+
+
+
+
+

12.12. How can I explicitly set which packages to scan?

+
+
    +
  • +

    You can set list of packages to include using the following property:

    +
  • +
+
+
+
+
springdoc.packagesToScan=package1, package2
+
+
+
+
+

12.13. How can I set Swagger properties programmatically?

+
+

These can be set by creating a swaggerUiConfig bean as follows:

+
+
+
+
@Bean
+@Primary
+fun swaggerUiConfig(config: SwaggerUiConfigProperties): SwaggerUiConfigProperties {
+    config.showCommonExtensions = true
+    config.queryConfigEnabled = true
+    return config
+}
+
+
+
+
+
+

12.14. How can I ignore some field of model ?

+
+
    +
  • +

    You can use the following annotation on the top of the field that you want to hide:

    +
  • +
  • +

    @Schema(hidden = true)

    +
  • +
+
+
+
+

12.15. How can I ignore @AuthenticationPrincipal parameter from spring-security ?

+
+
    +
  • +

    A solution workaround would be to use: @Parameter(hidden = true)

    +
  • +
  • +

    The projects that use spring-boot-starter-security or spring-security-oauth2-authorization-server should use:

    +
    +
      +
    • +

      springdoc-openapi-starter-webmvc-api if they depend on spring-boot-starter-web and they only need the access to the OpenAPI endpoints.

      +
    • +
    • +

      OR springdoc-openapi-starter-webmvc-ui, if they depend on spring-boot-starter-web and they also need the access to the swagger-ui.

      +
    • +
    • +

      OR springdoc-openapi-starter-webflux-api if they depend on spring-boot-starter-webflux and they only the access to the OpenAPI endpoints.

      +
    • +
    • +

      OR springdoc-openapi-starter-webflux-ui, if they depend on spring-boot-starter-webflux and they also need the access to the swagger-ui.

      +
    • +
    +
    +
  • +
+
+
+
+

12.16. Is there a Gradle plugin available?

+
+
    +
  • +

    Yes. More details are available, in the gradle plugin section.

    +
  • +
+
+
+
+

12.17. How can I hide a parameter from the documentation ?

+
+
    +
  • +

    You can use @Parameter(hidden = true)

    +
  • +
+
+
+
+

12.18. Is @Parameters annotation supported ?

+
+
    +
  • +

    Yes

    +
  • +
+
+
+
+

12.19. Does springdoc-openapi support Jersey?

+
+ +
+
+
+

12.20. Can springdoc-openapi generate API only for @RestController?

+
+
    +
  • +

    @RestController is equivalent to @Controller + @RequestMapping on the type level.

    +
  • +
  • +

    For some legacy apps, we are constrained to still support both.

    +
  • +
  • +

    If you need to hide the @Controller on the type level, in this case, you can use: @Hidden on controller level.

    +
  • +
  • +

    Please note this annotation can be also used to hide some methods from the generated documentation.

    +
  • +
+
+
+
+

12.21. Are the following validation annotations supported : @NotEmpty @NotBlank @PositiveOrZero @NegativeOrZero?

+
+
    +
  • +

    Yes

    +
  • +
+
+
+
+

12.22. How can I map Pageable (spring-data-commons) object to correct URL-Parameter in Swagger UI?

+
+

The support for Pageable of spring-data-commons is available out-of-the box since springdoc-openapi v1.6.0. +For this, you have to combine @ParameterObject annotation with the Pageable type.

+
+
+

Before springdoc-openapi v1.6.0:

+
+
+
    +
  • +

    You can use as well @ParameterObject instead of @PageableAsQueryParam for HTTP GET methods.

    +
  • +
+
+
+
+
static {
+    getConfig().replaceParameterObjectWithClass(org.springframework.data.domain.Pageable.class, Pageable.class)
+            .replaceParameterObjectWithClass(org.springframework.data.domain.PageRequest.class, Pageable.class);
+}
+
+
+
+
+
    +
  • +

    Another solution, is to configure Pageable manually:

    +
    +
      +
    • +

      you will have to declare the explicit mapping of Pageable fields as Query Params and add the @Parameter(hidden = true) Pageable pageable on your pageable parameter.

      +
    • +
    • +

      You should also, declare the annotation @PageableAsQueryParam provided by springdoc-openapi on the method level, or declare your own if need to define your custom description, defaultValue, …​

      +
    • +
    +
    +
  • +
+
+
+

If you want to disable the support of spring Pageable Type, you can use:

+
+
+
+
springdoc.model-converters.pageable-converter.enabled=false
+
+
+
+ + + + + +
+ + +The property springdoc.model-converters.pageable-converter.enabled is only available since v1.5.11+ +
+
+
+
+

12.23. How can I generate enums in the generated description?

+
+
    +
  • +

    You could add a property allowableValues, to @Parameter. For example:

    +
  • +
+
+
+
+
@GetMapping("/example")
+public Object example(@Parameter(name ="json", schema = @Schema(description = "var 1",type = "string", allowableValues = {"1", "2"}))
+String json) {
+   return null;
+}
+
+
+
+
+
    +
  • +

    or you could override toString on your enum:

    +
  • +
+
+
+
+
@Override
+@JsonValue
+public String toString() {
+   return String.valueOf(action);
+}
+
+
+
+
+
+

12.24. How can I deploy springdoc-openapi-starter-webmvc-ui behind a reverse proxy?

+
+
    +
  • +

    If your application is running behind a proxy, a load-balancer or in the cloud, the request information (like the host, port, scheme…​) might change along the way. Your application may be running on 10.10.10.10:8080, but HTTP clients should only see example.org.

    +
  • +
  • +

    RFC7239 "Forwarded Headers" defines the Forwarded HTTP header; proxies can use this header to provide information about the original request. You can configure your application to read those headers and automatically use that information when creating links and sending them to clients in HTTP 302 responses, JSON documents or HTML pages. There are also non-standard headers, like X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Proto, X-Forwarded-Ssl, and X-Forwarded-Prefix.

    +
  • +
  • +

    If the proxy adds the commonly used X-Forwarded-For and X-Forwarded-Proto headers, setting server.forward-headers-strategy to NATIVE is enough to support those. With this option, the Web servers themselves natively support this feature; you can check their specific documentation to learn about specific behavior.

    +
  • +
  • +

    You need to make sure the following header is set in your reverse proxy configuration: X-Forwarded-Prefix

    +
  • +
  • +

    For example, using Apache 2, configuration:

    +
  • +
+
+
+
+
RequestHeader set X-Forwarded-Prefix "/custom-path"
+
+
+
+
    +
  • +

    Then, in your Spring Boot application make sure your application handles this header: X-Forwarded-For. There are two ways to achieve this:

    +
  • +
+
+
+
+
server.use-forward-headers=true
+
+
+
+
    +
  • +

    If this is not enough, Spring Framework provides a ForwardedHeaderFilter. You can register it as a Servlet Filter in your application by setting server.forward-headers-strategy is set to FRAMEWORK.

    +
  • +
  • +

    Since Spring Boot 2.2, this is the new property to handle reverse proxy headers:

    +
  • +
+
+
+
+
server.forward-headers-strategy=framework
+
+
+
+
    +
  • +

    And you can add the following bean to your application:

    +
  • +
+
+
+
+
@Bean
+ForwardedHeaderFilter forwardedHeaderFilter() {
+   return new ForwardedHeaderFilter();
+}
+
+
+
+
+
    +
  • +

    If you need to manually adjust the URL displayed in the Swagger UI, implement the ServerBaseUrlCustomizer interface. This might be necessary to remove the port number, for example.

    +
  • +
+
+
+
+
@Bean
+public class CustomServerBaseUrlCustomizer implements ServerBaseUrlCustomizer {
+    @Override
+    public String customize(String serverBaseUrl) {
+        try {
+            URL url = new URL(serverBaseUrl);
+            if (url.getHost().contains(".com")) {
+                serverBaseUrl = new URL(url.getProtocol(),url.getHost(),url.getFile()).toString();
+            }
+        } catch (MalformedURLException ex) {
+            // nothing we can do
+        }
+
+        return serverBaseUrl;
+    }
+}
+
+
+
+
+
+

12.25. Is @JsonView annotations in Spring MVC APIs supported?

+
+
    +
  • +

    Yes

    +
  • +
+
+
+
+

12.26. Adding springdoc-openapi-starter-webmvc-ui dependency breaks my public/index.html welcome page

+
+
    +
  • +

    If you already have static content on your root, and you don’t want it to be overridden by springdoc-openapi-starter-webmvc-ui configuration, you can just define a custom configuration of the swagger-ui, in order not to override the configuration of your files from in your context-root:

    +
  • +
  • +

    For example use:

    +
  • +
+
+
+
+
springdoc.swagger-ui.path= /swagger-ui/api-docs.html
+
+
+
+
+

12.27. How can I test the Swagger UI?

+ +
+
+

12.28. How can I customise the OpenAPI object ?

+
+ +
+
+
+
@Bean
+public OpenApiCustomizer consumerTypeHeaderOpenAPICustomizer() {
+return openApi -> openApi.getPaths().values().stream().flatMap(pathItem -> pathItem.readOperations().stream())
+    .forEach(operation -> operation.addParametersItem(new HeaderParameter().$ref("#/components/parameters/myConsumerTypeHeader")));
+}
+
+
+
+
+ + + + + +
+ + +This bean OpenApiCustomizer will be applied to the Default OpenAPI only. +
+
+
+

If you need the OpenApiCustomizer to applied to GroupedOpenApi as well, then use GlobalOpenApiCustomizer instead.

+
+
+
+

12.29. How can I return an empty content as response?

+
+
    +
  • +

    It is be possible to handle as return an empty content as response using, one of the following syntaxes:

    +
  • +
  • +

    content = @Content

    +
  • +
  • +

    content = @Content(schema = @Schema(hidden = true))

    +
  • +
  • +

    For example:

    +
  • +
+
+
+
+
@Operation(summary = "Get thing", responses = {
+      @ApiResponse(description = "Successful Operation", responseCode = "200", content = @Content(mediaType = "application/json", schema = @Schema(implementation = String.class))),
+      @ApiResponse(responseCode = "404", description = "Not found", content = @Content),
+      @ApiResponse(responseCode = "401", description = "Authentication Failure", content = @Content(schema = @Schema(hidden = true))) })
+@RequestMapping(path = "/testme", method = RequestMethod.GET)
+ResponseEntity<String> testme() {
+   return ResponseEntity.ok("Hello");
+}
+
+
+
+
+
+

12.30. How are endpoints with multiple consuming media types supported?

+
+
    +
  • +

    An overloaded method on the same class, with the same HTTP Method and path, will have as a result, only one OpenAPI Operation generated.

    +
  • +
  • +

    In addition, it’s recommended to have the @Operation in the level of one of the overloaded methods. Otherwise it might be overridden if it’s declared many times within the same overloaded method.

    +
  • +
+
+
+
+

12.31. How can I get yaml and json (OpenAPI) in compile time?

+
+ +
+
+
+

12.32. What are the ignored types in the documentation?

+
+ +
+
+
+

12.33. How can i disable ignored types:

+
+

If you don’t want to ignore the types Principal, Locale, HttpServletRequest, and others,:

+
+
+
+
SpringDocUtils.getConfig().removeRequestWrapperToIgnore(HttpServletRequest.class)
+
+
+
+
+
+

12.34. How do I add authorization header in requests?

+
+
    +
  • +

    You should add the @SecurityRequirement tags to your protected APIs.

    +
  • +
  • +

    For example:

    +
  • +
+
+
+
+
@Operation(security = { @SecurityRequirement(name = "bearer-key") })
+
+
+
+
    +
  • +

    And the security definition sample:

    +
  • +
+
+
+
+
@Bean
+ public OpenAPI customOpenAPI() {
+   return new OpenAPI()
+          .components(new Components()
+          .addSecuritySchemes("bearer-key",
+          new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));
+}
+
+
+
+
+
+

12.35. Differentiation to Springfox project

+
+
    +
  • +

    OAS 3 was released in July 2017, and there was no release of springfox to support OAS 3. +springfox covers for the moment only swagger 2 integration with Spring Boot. The latest release date is June 2018. So, in terms of maintenance there is a big lack of support lately.

    +
  • +
  • +

    We decided to move forward and share the library that we already used on our internal projects, with the community.

    +
  • +
  • +

    The biggest difference with springfox, is that we integrate new features not covered by springfox:

    +
  • +
  • +

    The integration between Spring Boot and OpenAPI 3 standard.

    +
  • +
  • +

    We rely on on swagger-annotations and swagger-ui only official libraries.

    +
  • +
  • +

    We support new features on Spring 5, like spring-webflux with annotated and functional style.

    +
  • +
  • +

    We do our best to answer all the questions and address all issues or enhancement requests

    +
  • +
+
+
+
+

12.36. How do I migrate to OpenAPI 3 with springdoc-openapi

+
+
    +
  • +

    There is no relation between springdoc-openapi and springfox.If you want to migrate to OpenAPI 3:

    +
  • +
  • +

    Remove all the dependencies and the related code to springfox

    +
  • +
  • +

    Add springdoc-openapi-starter-webmvc-ui dependency

    +
  • +
  • +

    If you don’t want to serve the UI from your root path or there is a conflict with an existing configuration, you can just change the following property:

    +
  • +
+
+
+
+
springdoc.swagger-ui.path=/you-path/swagger-ui.html
+
+
+
+
+

12.37. How can I set a global header?

+
+
    +
  • +

    You may have global parameters with Standard OpenAPI description.

    +
  • +
  • +

    If you need the definitions to appear globally (within every group), no matter if the group fulfills the conditions specified on the GroupedOpenApi , you can use OpenAPI Bean.

    +
  • +
  • +

    You can define common parameters under parameters in the global components section and reference them elsewhere via $ref. You can also define global header parameters.

    +
  • +
  • +

    For this, you can override to OpenAPI Bean, and set the global headers or parameters definition on the components level.

    +
  • +
+
+
+
+
@Bean
+public OpenAPI customOpenAPI(@Value("${springdoc.version}") String appVersion) {
+ return new OpenAPI()
+        .components(new Components().addSecuritySchemes("basicScheme", new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic"))
+        .addParameters("myHeader1", new Parameter().in("header").schema(new StringSchema()).name("myHeader1")).addHeaders("myHeader2", new Header().description("myHeader2 header").schema(new StringSchema())))
+        .info(new Info()
+        .title("Petstore API")
+        .version(appVersion)
+        .description("This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.")
+        .termsOfService("http://swagger.io/terms/")
+        .license(new License().name("Apache 2.0").url("http://springdoc.org")));
+}
+
+
+
+
+
+

12.38. Are Callbacks supported?

+
+
    +
  • +

    Yes

    +
  • +
+
+
+
+

12.39. How can I define SecurityScheme ?

+
+
    +
  • +

    You can use: @SecurityScheme annotation.

    +
  • +
  • +

    Or you can define it programmatically, by overriding OpenAPI Bean:

    +
  • +
+
+
+
+
 @Bean
+ public OpenAPI customOpenAPI(@Value("${springdoc.version}") String appVersion) {
+  return new OpenAPI()
+   .components(new Components().addSecuritySchemes("basicScheme",
+   new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic")))
+   info(new Info().title("SpringShop API").version(appVersion)
+   .license(new License().name("Apache 2.0").url("http://springdoc.org")));
+ }
+
+
+
+
+
+

12.40. How can I hide an operation or a controller from documentation ?

+
+
    +
  • +

    You can use @io.swagger.v3.oas.annotations.Hidden annotation at @RestController, @RestControllerAdvice and method level

    +
  • +
  • +

    The @Hidden annotation on exception handler methods, is considered when building generic (error) responses from @ControllerAdvice exception handlers.

    +
  • +
  • +

    Or use: @Operation(hidden = true)

    +
  • +
+
+
+
+

12.41. How to configure global security schemes?

+
+
    +
  • +

    For global SecurityScheme, you can add it inside your own OpenAPI definition:

    +
  • +
+
+
+
+
@Bean
+public OpenAPI customOpenAPI() {
+    return new OpenAPI().components(new Components()
+    .addSecuritySchemes("basicScheme", new SecurityScheme()
+    .type(SecurityScheme.Type.HTTP).scheme("basic"))).info(new Info().title("Custom API")
+    .version("100")).addTagsItem(new Tag().name("mytag"));
+}
+
+
+
+
+
+

12.42. Can I use spring property with swagger annotations?

+
+
    +
  • +

    The support of spring property resolver for @Info: title * description * version * termsOfService

    +
  • +
  • +

    The support of spring property resolver for @Info.license: name * url

    +
  • +
  • +

    The support of spring property resolver for @Info.contact: name * email * url

    +
  • +
  • +

    The support of spring property resolver for @Operation: description * summary

    +
  • +
  • +

    The support of spring property resolver for @Parameter: description * name

    +
  • +
  • +

    The support of spring property resolver for @ApiResponse: description

    +
  • +
  • +

    Its also possible to declare security URLs for @OAuthFlow: openIdConnectUrl * authorizationUrl * refreshUrl * tokenUrl

    +
  • +
  • +

    The support of spring property resolver for @Schema: name * title * description , by setting springdoc.api-docs.resolve-schema-properties to true

    +
  • +
  • +

    The support of spring property resolver for @ExtensionProperty by setting springdoc.api-docs.resolve-extensions-properties to true

    +
  • +
+
+
+
+

12.43. How is server URL generated ?

+
+
    +
  • +

    Generating automatically server URL may be useful, if the documentation is not present.

    +
  • +
  • +

    If the server annotations are present, they will be used instead.

    +
  • +
+
+
+
+

12.44. How can I disable springdoc-openapi cache?

+
+
    +
  • +

    By default, the OpenAPI description is calculated once, and then cached.

    +
  • +
  • +

    Sometimes the same swagger-ui is served behind internal and external proxies. some users want the server URL, to be computed on each http request.

    +
  • +
  • +

    In order to disable springdoc cache, you will have to set the following property:

    +
  • +
+
+
+
+
springdoc.cache.disabled= true
+
+
+
+
+

12.45. How can I expose the mvc api-docs endpoints without using the swagger-ui?

+
+
    +
  • +

    You should use the springdoc-openapi-core dependency only:

    +
  • +
+
+
+
+
<dependency>
+  <groupId>org.springdoc</groupId>
+  <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
+  <version>latest.version</version>
+</dependency>
+
+
+
+
+

12.46. How can I disable springdoc-openapi endpoints ?

+
+
    +
  • +

    Use the following property:

    +
  • +
+
+
+
+
springdoc.api-docs.enabled=false
+
+
+
+
+

12.47. How can I hide Schema of the the response ?

+
+
    +
  • +

    To hide the response element, using @Schema annotation, as follows, at operation level:

    +
  • +
+
+
+
+
@Operation(responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(hidden = true))))
+
+
+
+
    +
  • +

    Or directly at @ApiResponses level:

    +
  • +
+
+
+
+
@ApiResponses(value = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(hidden = true))) })
+OR
+@ApiResponse(responseCode = "404", description = "Not found", content = @Content)
+
+
+
+
+

12.48. What is the URL of the swagger-ui, when I set a different context-path?

+
+
    +
  • +

    If you use different context-path:

    +
  • +
+
+
+
+
server.servlet.context-path= /foo
+
+
+
+
    +
  • +

    The swagger-ui will be available on the following URL:

    +
    +
      +
    • +

      http://server:port/foo/swagger-ui.html

      +
    • +
    +
    +
  • +
+
+
+
+

12.49. Can I customize OpenAPI object programmatically?

+
+
    +
  • +

    You can Define your own OpenAPI Bean: If you need the definitions to appear globally (within every group), no matter if the group fulfills the conditions specified on the GroupedOpenApi , you can use OpenAPI Bean.

    +
  • +
+
+
+
+
@Bean
+public OpenAPI customOpenAPI(@Value("${springdoc.version}") String appVersion) {
+   return new OpenAPI()
+    .components(new Components().addSecuritySchemes("basicScheme",
+            new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic")))
+    .info(new Info().title("SpringShop API").version(appVersion)
+            .license(new License().name("Apache 2.0").url("http://springdoc.org")));
+}
+
+
+
+
+
    +
  • +

    If you need the definitions to appear within a specific group, and respect the conditions specified on the GroupedOpenApi, you can add OpenApiCustomizer to your GroupedOpenApi definition.

    +
  • +
+
+
+
+
GroupedOpenApi.builder().group("users").pathsToMatch(paths).packagesToScan(packagedToMatch).addOpenApiCustomizer(customerGlobalHeaderOpenApiCustomizer())
+                .build()
+
+@Bean
+public OpenApiCustomizer customerGlobalHeaderOpenApiCustomizer() {
+   return openApi -> openApi.path("/foo",
+   new PathItem().get(new Operation().operationId("foo").responses(new ApiResponses()
+   .addApiResponse("default",new ApiResponse().description("")
+   .content(new Content().addMediaType("fatz", new MediaType()))))));
+}
+
+
+
+
+
+

12.50. Where can I find the source code of the demo applications?

+
+ +
+
+
+

12.51. Does this library supports annotations from interfaces?

+
+
    +
  • +

    Yes

    +
  • +
+
+
+
+

12.52. What is the list of the excluded parameter types?

+ +
+
+

12.53. Is file upload supported ?

+
+
    +
  • +

    The library supports the main file types: MultipartFile, @RequestPart, FilePart

    +
  • +
  • +

    You can upload a file as follows:

    +
  • +
+
+
+
+
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Encoding;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+
+@PostMapping(value = "/upload", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity<?> upload(@Parameter(description = "file") final MultipartFile file) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithQuery", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity<?> uploadFileWithQuery(@Parameter(description = "file") @RequestPart("file") final MultipartFile file,
+        @Parameter(description = "An extra query parameter") @RequestParam String name) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithJson", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {
+        MediaType.APPLICATION_JSON_VALUE})
+public ResponseEntity<?> uploadFileWithJson(
+        @RequestBody(content = @Content(encoding = @Encoding(name = "jsonRequest", contentType = MediaType.APPLICATION_JSON_VALUE)))
+        @Parameter(description = "An extra JSON payload sent with file") @RequestPart("jsonRequest") final JsonRequest jsonRequest,
+        @RequestPart("file") final MultipartFile file) {
+    return null;
+}
+
+
+
+
+
+

12.54. Can I use @Parameter inside @Operation annotation?

+
+
    +
  • +

    Yes, it’s supported

    +
  • +
+
+
+
+

12.55. Why my parameter is marked as required?

+
+
    +
  • +

    Any @GetMapping parameters is marked as required, even if @RequestParam is missing.

    +
  • +
  • +

    You can add @Parameter(required=false) annotation if you need different behaviour.

    +
  • +
  • +

    Query parameters with defaultValue specified are marked as required.

    +
  • +
+
+
+
+

12.56. How are overloaded methods with the same endpoints, but with different parameters

+
+
    +
  • +

    springdoc-openapi renders these methods as a single endpoint. It detects the overloaded endpoints, and generates parameters.schema.oneOf.

    +
  • +
+
+
+
+

12.57. What is a proper way to set up Swagger UI to use provided spec.yml?

+
+
    +
  • +

    With this property, all the springdoc-openapi auto-configuration beans are disabled:

    +
  • +
+
+
+
+
springdoc.api-docs.enabled=false
+
+
+
+
    +
  • +

    Then enable the minimal Beans configuration, by adding this Bean:

    +
  • +
+
+
+
+
@Bean
+SpringDocConfiguration springDocConfiguration(){
+   return new SpringDocConfiguration();
+}
+
+@Bean
+SpringDocConfigProperties springDocConfigProperties() {
+   return new SpringDocConfigProperties();
+}
+
+@Bean
+ObjectMapperProvider objectMapperProvider(SpringDocConfigProperties springDocConfigProperties){
+    return new ObjectMapperProvider(springDocConfigProperties);
+}
+
+
+
+
+
    +
  • +

    Then configure, the path of your custom UI yaml file.

    +
  • +
+
+
+
+
springdoc.swagger-ui.url=/api-docs.yaml
+
+
+
+
+

12.58. Is there a way to send authorization header through the @Parameter tag?

+
+ +
+
+
+

12.59. My Rest Controller using @Controller annotation is ignored?

+
+
    +
  • +

    This is the default behaviour if your @Controller doesn’t have annotation @ResponseBody

    +
  • +
  • +

    You can change your controllers to @RestControllers. Or add @ResponseBody + @Controller.

    +
  • +
  • +

    If its not possible, you can configure springdoc to scan you additional controller using SpringDocUtils. For example:

    +
  • +
+
+
+
+
static {
+   SpringDocUtils.getConfig().addRestControllers(HelloController.class);
+}
+
+
+
+
+
+

12.60. How can I define groups using application.yml?

+
+
    +
  • +

    You can load groups dynamically using spring-boot configuration files.

    +
  • +
  • +

    Note that, for this usage, you don’t have to declare the GroupedOpenApi Bean.

    +
  • +
  • +

    You need to declare the following properties, under the prefix springdoc.group-configs.

    +
  • +
  • +

    For example:

    +
  • +
+
+
+
+
springdoc.group-configs[0].group=users
+springdoc.group-configs[0].paths-to-match=/user/**
+springdoc.group-configs[0].packages-to-scan=test.org.springdoc.api
+
+
+
+ +
+
+
+

12.61. How can I extract fields from parameter object ?

+
+
    +
  • +

    You can use springdoc annotation @ParameterObject.

    +
  • +
  • +

    Request parameter annotated with @ParameterObject will help adding each field of the parameter as a separate request parameter.

    +
  • +
  • +

    This is compatible with Spring MVC request parameters mapping to POJO object.

    +
  • +
  • +

    This annotation does not support nested parameter objects.

    +
  • +
  • +

    POJO object must contain getters for fields with mandatory prefix get. Otherwise, the swagger documentation will not show the fields of the annotated entity.

    +
  • +
+
+
+
+

12.62. How can I use the last springdoc-openapi SNAPSHOT ?

+
+
    +
  • +

    For testing purposes only, you can test temporarily using the last springdoc-openapi SNAPSHOT

    +
  • +
  • +

    To achieve that, configure your pom.xml file with the following <repositories> section:

    +
  • +
+
+
+
+
    <repositories>
+      <repository>
+        <name>Central Portal Snapshots</name>
+        <id>central-portal-snapshots</id>
+        <url>https://central.sonatype.com/repository/maven-snapshots/</url>
+        <releases>
+          <enabled>false</enabled>
+        </releases>
+        <snapshots>
+          <enabled>true</enabled>
+        </snapshots>
+      </repository>
+    </repositories>
+
+
+
+
+

12.63. How can I use enable springdoc-openapi MonetaryAmount support ?

+
+
    +
  • +

    If an application wants to enable the springdoc-openapi support, it declares:

    +
  • +
+
+
+
+
SpringDocUtils.getConfig().replaceWithClass(MonetaryAmount.class, org.springdoc.core.converters.models.MonetaryAmount.class);
+
+
+
+
+
    +
  • +

    Another solution, without using springdoc-openapi MonetaryAmount, would be:

    +
  • +
+
+
+
+
SpringDocUtils.getConfig().replaceWithSchema(MonetaryAmount.class, new ObjectSchema()
+            .addProperties("amount", new NumberSchema()).example(99.96)
+            .addProperties("currency", new StringSchema().example("USD")));
+
+
+
+
+
+

12.64. How can i aggregate external endpoints (exposing OPENAPI 3 spec) inside one single application?

+
+

The properties springdoc.swagger-ui.urls.*, are suitable to configure external (/v3/api-docs url). +For example if you want to agreagte all the endpoints of other services, inside one single application. +IMPORTANT: Don’t forget that CORS needs to be enabled as well.

+
+
+
+

12.65. How can use custom json/yml file instead of generated one ?

+
+

If your file open-api.json, contains the OpenAPI documentation in OpenAPI 3 format. +Then simply declare: The file name can be anything you want, from the moment your declaration is consistent yaml or json OpenAPI Spec.

+
+
+
+
   springdoc.swagger-ui.url=/open-api.json
+
+
+
+

Then the file open-api.json, should be located in: src/main/resources/static +No additional configuration is needed.

+
+
+
+

12.66. How can i enable CSRF support?

+
+

If you are using standard headers.( For example using spring-security headers) +If the CSRF Token is required, swagger-ui automatically sends the new XSRF-TOKEN during each HTTP REQUEST.

+
+
+

If your XSRF-TOKEN isn’t standards-based, you can use a requestInterceptor to manually capture and attach the latest xsrf token to requests programmatically via spring resource transformer:

+
+ +
+

Starting from release v1.4.4 of springdoc-openapi, a new property is added to enable CSRF support, while using standard header names:

+
+
+
+
springdoc.swagger-ui.csrf.enabled=true
+
+
+
+
+

12.67. How can i disable the default swagger petstore URL?

+
+

You can use the following property:

+
+
+
+
springdoc.swagger-ui.disable-swagger-default-url=true
+
+
+
+
+

12.68. Is @PageableDefault supported, to enhance the OpenAPI 3 docuementation?

+
+

Yes, you can use it in conjunction with @ParameterObject annotation. +Also, the spring-boot spring.data.web. and spring.data.rest.default. properties are supported since v1.4.5

+
+
+
+

12.69. How can i make spring security login-endpoint visible ?

+
+

You can use the following property:

+
+
+
+
springdoc.show-login-endpoint=true
+
+
+
+
+

12.70. How can i show schema definitions even the schema is not referenced?

+
+

You can use the following property:

+
+
+
+
springdoc.remove-broken-reference-definitions=false
+
+
+
+
+

12.71. How to override @Deprecated?

+
+

The whole idea of springdoc-openapi is to get your documentation the closest to the code, with minimal code changes. +If the code contains @Deprecated, sprindoc-openapi will consider its schema as Deprecated as well. +If you want to declare a field on swagger as non deprecated, even with the java code, the field contains @Depreacted, +You can use the following property that is available since release v1.4.3:

+
+
+
+
springdoc.model-converters.deprecating-converter.enabled=false
+
+
+
+
+

12.72. How can i display a method that returns ModelAndView?

+
+

You can use the following property:

+
+
+
+
springdoc.model-and-view-allowed=true
+
+
+
+
+

12.73. How can i have pretty-printed output of the OpenApi specification?

+
+

You can use the following property:

+
+
+
+
springdoc.writer-with-default-pretty-printer=true
+
+
+
+
+

12.74. How can i define different schemas for the same class?

+
+

Complex objects are always resolved as a reference to a schema defined in components. +For example let’s consider a Instance class with an workAddress and homeAddress attribute of type Address:

+
+
+
+
public class PersonDTO {
+
+    @JsonProperty
+    private String email;
+
+    @JsonProperty
+    private String firstName;
+
+    @JsonProperty
+    private String lastName;
+
+    @Schema(ref = "WorkAddressSchema")
+    @JsonProperty
+    private Address workAddress;
+
+    @Schema(ref = "HomeAddressSchema")
+    @JsonProperty
+    private Address homeAddress;
+
+}
+
+public class Address {
+
+    @JsonProperty
+    private String addressName;
+
+}
+
+
+
+
+

If you want to define two different schemas for this class, you can set up 2 different schemas as follow:

+
+
+
+
@Bean
+public OpenAPI customOpenAPI() {
+return new OpenAPI().components(new Components()
+.addSchemas("WorkAddressSchema", getSchemaWithDifferentDescription(Address.class, "work Address" ))
+.addSchemas("HomeAddressSchema", getSchemaWithDifferentDescription(Address.class, "home Address" )));
+}
+
+private Schema getSchemaWithDifferentDescription(Class className, String description){
+ResolvedSchema resolvedSchema = ModelConverters.getInstance()
+.resolveAsResolvedSchema(
+new AnnotatedType(className).resolveAsRef(false));
+return resolvedSchema.schema.description(description);
+}
+
+
+
+
+
+

12.75. How can i define different description for a class attribute depending on usage?

+
+

For example let’s consider a Instance class with an email attribute:

+
+
+
+
public class PersonDTO {
+
+    @JsonProperty
+    private String email;
+
+    @JsonProperty
+    private String firstName;
+
+    @JsonProperty
+    private String lastName;
+
+
+}
+
+
+
+
+

If you want to define two different description for the email, you can set up 2 different schemas as follow:

+
+
+
+
@Bean
+public OpenAPI customOpenAPI() {
+return new OpenAPI().components(new Components()
+.addSchemas("PersonDTO1", getFieldSchemaWithDifferentDescription(PersonDTO.class, "work email" ))
+.addSchemas("PersonDTO2", getFieldSchemaWithDifferentDescription(PersonDTO.class, "home email" )));
+}
+
+private Schema getFieldSchemaWithDifferentDescription(Class className, String description){
+    ResolvedSchema resolvedSchema = ModelConverters.getInstance()
+            .resolveAsResolvedSchema(
+                    new AnnotatedType(className).resolveAsRef(false));
+    return resolvedSchema.schema.addProperties("email", new StringSchema().description(description));
+}
+
+
+
+
+
+

12.76. Customizing swagger static resources

+
+

You can customize swagger documentation static resources located in META-INF/resources/webjars/swagger-ui/{swagger.version}/. The list of resources includes:

+
+
+
    +
  • +

    index.html

    +
  • +
  • +

    swagger-ui-bundle.js

    +
  • +
  • +

    swagger-ui.css

    +
  • +
  • +

    swagger-ui-standalone-preset.js

    +
  • +
  • +

    swagger-ui.css.map

    +
  • +
  • +

    swagger-ui-bundle.js.map

    +
  • +
  • +

    swagger-ui-standalone-preset.js.map

    +
  • +
  • +

    favicon-32x32.png

    +
  • +
+
+
+

To do this, you need to extend the implementation of SwaggerIndexPageTransformer

+
+
+
+
public class SwaggerCodeBlockTransformer
+       extends SwaggerIndexPageTransformer {
+  // < constructor >
+  @Override
+  public Resource transform(HttpServletRequest request,
+                            Resource resource,
+                            ResourceTransformerChain transformer)
+                            throws IOException {
+      if (resource.toString().contains("swagger-ui.css")) {
+          final InputStream is = resource.getInputStream();
+          final InputStreamReader isr = new InputStreamReader(is);
+          try (BufferedReader br = new BufferedReader(isr)) {
+              final String css = br.lines().collect(Collectors.joining());
+              final byte[] transformedContent = css.replace("old", "new").getBytes();
+              return  new TransformedResource(resource, transformedContent);
+          } // AutoCloseable br > isr > is
+      }
+      return super.transform(request, resource, transformer);
+  }
+
+}
+
+
+
+
+

Next, add transformer @Bean to your @Configuration

+
+
+
+
@Configuration
+public class OpenApiConfig {
+    @Bean
+    public SwaggerIndexTransformer swaggerIndexTransformer(
+            SwaggerUiConfigProperties a,
+            SwaggerUiOAuthProperties b,
+            SwaggerUiConfigParameters c,
+            SwaggerWelcomeCommon d) {
+        return new SwaggerCodeBlockTransformer(a, b, c, d);
+    }
+}
+
+
+
+
+

Illustrative example

+
+
+
+Illustrative example +
+
+
+
+

12.77. Is GraalVM supported ?

+
+

The native support available added in spring-boot 3. +If you have some time, do not hesitate to test it before the next release.

+
+
+

For the OpenAPI REST endpoints, you just need to build your application with the spring native profile.

+
+
+

If you give @OpenAPIDefinition or @SecurityScheme to a class that has no implementation, that class will disappear when you natively compile. +To avoid this, give the class a @Configuration.

+
+
+
+
@Configuration
+@OpenAPIDefinition(info = @Info(title = "My App", description = "description"))
+public class OpenAPIConfig {
+}
+
+
+
+
+

12.78. How to Integrate Open API 3 with Spring project (not Spring Boot)?

+
+

When your application is using spring without (spring-boot), you need to add beans and auto-configuration that are natively provided in spring-boot.

+
+
+

For example, lets assume you want load the swagger-ui in spring-mvc application:

+
+
+
    +
  • +

    You mainly, need to add the springdoc-openapi module

    +
  • +
+
+
+
+
<dependency>
+   <groupId>org.springdoc</groupId>
+   <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+   <version>last.version</version>
+</dependency>
+
+
+
+
    +
  • +

    If you don’t have the spring-boot and spring-boot-autoconfigure dependencies, you need to add them. And pay attention to the compatibility matrix, between you spring.version and spring-boot.version. For example, in this case (spring.version=5.1.12.RELEASE):

    +
  • +
+
+
+
+
        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+
+
+
+
    +
  • +

    Scan for the springdoc-openapi 'auto-configuration classes that spring-boot automatically loads for you.

    +
  • +
  • +

    Depending on your module, you can find them on the file: spring.factories of each springdoc-openapi module.

    +
  • +
+
+
+
+
@Configuration
+@EnableWebMvc
+public class WebConfig implements WebApplicationInitializer {
+
+    @Override
+    public void onStartup(ServletContext servletContext)  {
+        WebApplicationContext context = getContext();
+        servletContext.addListener(new ContextLoaderListener(context));
+        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("RestServlet",
+                new DispatcherServlet(context));
+        dispatcher.setLoadOnStartup(1);
+        dispatcher.addMapping("/*");
+    }
+
+    private AnnotationConfigWebApplicationContext getContext() {
+        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+        context.register(this.getClass(),
+                SpringDocConfiguration.class,
+                SpringDocConfigProperties.class,
+                SpringDocSpecPropertiesConfiguration.class,
+                SpringDocWebMvcConfiguration.class,
+                MultipleOpenApiSupportConfiguration.class,
+                SwaggerConfig.class,
+                SwaggerUiConfigProperties.class,
+                SwaggerUiOAuthProperties.class,
+        );
+        return context;
+    }
+}
+
+
+
+
+
    +
  • +

    Depending on your module, you can find them on the file: org.springframework.boot.autoconfigure.AutoConfiguration.imports of each springdoc-openapi module.

    +
  • +
  • +

    For groups usage make sure your GroupedOpenApi Beans are scanned.

    +
  • +
  • +

    If additionally, you are using custom context path: /my-servlet-path. Make sure you declare the following property:

    +
  • +
+
+
+
+
spring.mvc.servlet.path=/my-servlet-path
+
+
+
+
+

12.79. What is the compatibility matrix of springdoc-openapi with spring-boot ?

+
+

springdoc-openapi 2.x is compatible with spring-boot 3.

+
+
+

In general, you should only pick the last stable version as per today 2.8.10.

+
+
+

More precisely, this the exhaustive list of spring-boot versions against which springdoc-openapi has been built:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Spring Boot Versions

Springdoc OpenAPI Versions

3.5.x

2.8.x

3.4.x

2.7.x - 2.8.x

3.3.x

2.6.x

3.2.x

2.3.x - 2.5.x

3.1.x

2.2.x

3.0.x

2.0.x - 2.1.x

2.7.x, 1.5.x

1.6.0+

2.6.x, 1.5.x

1.6.0+

2.5.x, 1.5.x

1.5.9+

2.4.x, 1.5.x

1.5.0+

2.3.x, 1.5.x

1.4.0+

2.2.x, 1.5.x

1.2.1+

2.0.x, 1.5.x

1.0.0+

+
+
+

12.80. Why am i getting an error: Swagger UI unable to render definition, when overriding the default spring registered HttpMessageConverter?

+
+

When overriding the default spring-boot registered HttpMessageConverter, you should have ByteArrayHttpMessageConverter registered as well to have proper springdoc-openapi support.

+
+
+
+
    converters.add(new ByteArrayHttpMessageConverter());
+    converters.add(new MappingJackson2HttpMessageConverter(jacksonBuilder.build()));
+
+
+
+
+ + + + + +
+ + +Order is very important, when registering HttpMessageConverters. +
+
+
+
+

12.81. Some parameters are not generated in the resulting OpenAPI spec.

+
+

The issue is caused by the changes introduced by Spring-Boot 3.2.0 +in particular for the Parameter Name Discovery. +This can be fixed by adding the -parameters arg to the Maven Compiler Plugin.

+
+
+
+
<plugin>
+    <groupId>org.apache.maven.plugins</groupId>
+    <artifactId>maven-compiler-plugin</artifactId>
+    <configuration>
+        <parameters>true</parameters>
+    </configuration>
+</plugin>
+
+
+
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/docs/v4/intro.html b/docs/v4/intro.html new file mode 100644 index 0000000..9181077 --- /dev/null +++ b/docs/v4/intro.html @@ -0,0 +1,91 @@ + + + + + + + +Introduction + + + + + + +
+
+
+ +
+
+

Introduction

+
+
+

springdoc-openapi java library helps to automate the generation of API documentation using spring boot projects. +springdoc-openapi works by examining an application at runtime to infer API semantics based on spring configurations, class structure and various annotations.

+
+
+

Automatically generates documentation in JSON/YAML and HTML format APIs. +This documentation can be completed by comments using swagger-api annotations.

+
+
+

This library supports:

+
+
+
    +
  • +

    OpenAPI 3

    +
  • +
  • +

    Spring-boot v3 (Java 17 & Jakarta EE 9)

    +
  • +
  • +

    JSR-303, specifically for @NotNull, @Min, @Max, and @Size.

    +
  • +
  • +

    Swagger-ui

    +
  • +
  • +

    OAuth 2

    +
  • +
  • +

    GraalVM native images

    +
  • +
+
+
+

The following video introduces the Library:

+
+
+
+spring.io conference +
+
+
+

This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal).

+
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/docs/v4/js/setup.js b/docs/v4/js/setup.js new file mode 100644 index 0000000..ae5b1b7 --- /dev/null +++ b/docs/v4/js/setup.js @@ -0,0 +1,3 @@ +!function(){"use strict";document.getElementsByTagName("html")[0].classList.add("js")}(); +!function(){var t=function(t,n,e){if("function"!=typeof t)throw new TypeError("Expected a function");return setTimeout((function(){t.apply(void 0,e)}),n)};var n=function(t){return t};var e=function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)},r=Math.max;var o=function(t,n,o){return n=r(void 0===n?t.length-1:n,0),function(){for(var c=arguments,u=-1,i=r(c.length-n,0),a=Array(i);++u0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}},D=C(R);var G=/\s/;var U=function(t){for(var n=t.length;n--&&G.test(t.charAt(n)););return n},z=/^\s+/;var B=function(t){return t?t.slice(0,U(t)+1).replace(z,""):t};var H=function(t){return null!=t&&"object"==typeof t};var J=function(t){return"symbol"==typeof t||H(t)&&"[object Symbol]"==g(t)},K=/^[-+]0x[0-9a-f]+$/i,Q=/^0b[01]+$/i,V=/^0o[0-7]+$/i,W=parseInt;var X=function(t){if("number"==typeof t)return t;if(J(t))return NaN;if(m(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=m(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=B(t);var e=Q.test(t);return e||V.test(t)?W(t.slice(2),e?2:8):K.test(t)?NaN:+t},Y=function(t,e){return D(o(t,e,n),t+"")}((function(n,e,r){return t(n,X(e)||0,r)}));!function(){"use strict";const t=window.localStorage,n=document.documentElement,e=window.matchMedia("(prefers-color-scheme: dark)");function r(){const n=null!==t?t.getItem("theme"):null;return n?"dark"===n:e.matches}function o(){this.checked?(Y((function(){n.classList.add("dark-theme")}),100),c("dark")):(Y((function(){n.classList.remove("dark-theme")}),100),c("light"))}function c(n){t&&t.setItem("theme",n)}r()&&n.classList.add("dark-theme"),window.addEventListener("load",(function(){const t=document.querySelector("#switch-theme-checkbox");t.checked=r(),t.addEventListener("change",o.bind(t))}))}()}(); +//# sourceMappingURL=setup.js.map diff --git a/docs/v4/js/setup.js.map b/docs/v4/js/setup.js.map new file mode 100644 index 0000000..2971105 --- /dev/null +++ b/docs/v4/js/setup.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["setup/src/main/js/setup/layout.js","setup/node_modules/browser-pack-flat/_prelude","setup/node_modules/lodash/_baseDelay.js","setup/switchtheme.js","setup/node_modules/lodash/identity.js","setup/node_modules/lodash/_apply.js","setup/node_modules/lodash/_overRest.js","setup/node_modules/lodash/constant.js","setup/node_modules/lodash/_freeGlobal.js","setup/node_modules/lodash/_root.js","setup/node_modules/lodash/_Symbol.js","setup/node_modules/lodash/_getRawTag.js","setup/node_modules/lodash/_objectToString.js","setup/node_modules/lodash/_baseGetTag.js","setup/node_modules/lodash/isObject.js","setup/node_modules/lodash/isFunction.js","setup/node_modules/lodash/_isMasked.js","setup/node_modules/lodash/_coreJsData.js","setup/node_modules/lodash/_toSource.js","setup/node_modules/lodash/_baseIsNative.js","setup/node_modules/lodash/_getValue.js","setup/node_modules/lodash/_getNative.js","setup/node_modules/lodash/_defineProperty.js","setup/node_modules/lodash/_baseSetToString.js","setup/node_modules/lodash/_shortOut.js","setup/node_modules/lodash/_setToString.js","setup/node_modules/lodash/_baseRest.js","setup/node_modules/lodash/_trimmedEndIndex.js","setup/node_modules/lodash/_baseTrim.js","setup/node_modules/lodash/isObjectLike.js","setup/node_modules/lodash/isSymbol.js","setup/node_modules/lodash/toNumber.js","setup/node_modules/lodash/delay.js","setup/src/main/js/setup/switchtheme.js","setup/node_modules/browser-pack-flat/_postlude"],"names":["document","getElementsByTagName","classList","add","_$baseDelay_3","func","wait","args","TypeError","setTimeout","apply","undefined","_$identity_25","value","_$apply_2","thisArg","length","call","nativeMax","Math","max","_$overRest_17","start","transform","arguments","index","array","Array","otherArgs","this","_$constant_23","_$freeGlobal_11","global","freeGlobal","Object","self","window","freeSelf","_$root_18","Function","_$Symbol_1","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","_$getRawTag_13","isOwn","tag","unmasked","e","result","__nativeObjectToString_16","_$objectToString_16","__symToStringTag_4","_$baseGetTag_4","_$isObject_27","type","uid","_$isFunction_26","_$coreJsData_9","maskSrcKey","exec","keys","IE_PROTO","_$isMasked_15","funcToString","_$toSource_21","reIsHostCtor","__funcProto_5","__objectProto_5","__funcToString_5","__hasOwnProperty_5","reIsNative","RegExp","replace","_$baseIsNative_5","test","_$getValue_14","object","key","_$getNative_12","_$defineProperty_10","_$baseSetToString_7","string","configurable","enumerable","writable","nativeNow","Date","now","_$shortOut_20","count","lastCalled","stamp","remaining","_$setToString_19","reWhitespace","_$trimmedEndIndex_22","charAt","reTrimStart","_$baseTrim_8","slice","_$isObjectLike_28","_$isSymbol_29","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","_$toNumber_30","other","valueOf","isBinary","_$delay_24","_$baseRest_6","localStorage","htmlElement","documentElement","prefersDarkColorScheme","matchMedia","isInitialThemeDark","theme","getItem","matches","onThemeChange","checked","saveTheme","remove","setItem","addEventListener","toggleCheckboxElement","querySelector","bind"],"mappings":"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","file":"setup.js","sourcesContent":["/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n document.getElementsByTagName(\"html\")[0].classList.add(\"js\");\n})();\n","(function(){\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nmodule.exports = baseDelay;\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n const delay = require(\"lodash/delay\");\n\n const localStorage = window.localStorage;\n const htmlElement = document.documentElement;\n const prefersDarkColorScheme = window.matchMedia(\n \"(prefers-color-scheme: dark)\"\n );\n\n swithInitialTheme();\n window.addEventListener(\"load\", onWindowLoad);\n\n function swithInitialTheme() {\n if (isInitialThemeDark()) {\n htmlElement.classList.add(\"dark-theme\");\n }\n }\n\n function onWindowLoad() {\n const toggleCheckboxElement = document.querySelector(\n \"#switch-theme-checkbox\"\n );\n toggleCheckboxElement.checked = isInitialThemeDark();\n toggleCheckboxElement.addEventListener(\n \"change\",\n onThemeChange.bind(toggleCheckboxElement)\n );\n }\n\n function isInitialThemeDark() {\n const theme = loadTheme();\n return theme ? theme === \"dark\" : prefersDarkColorScheme.matches;\n }\n\n function onThemeChange() {\n if (this.checked) {\n delay(function () {\n htmlElement.classList.add(\"dark-theme\");\n }, 100);\n saveTheme(\"dark\");\n } else {\n delay(function () {\n htmlElement.classList.remove(\"dark-theme\");\n }, 100);\n saveTheme(\"light\");\n }\n }\n\n function saveTheme(theme) {\n if (localStorage) {\n localStorage.setItem(\"theme\", theme);\n }\n }\n\n function loadTheme() {\n return localStorage !== null ? localStorage.getItem(\"theme\") : null;\n }\n})();\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var baseDelay = require('./_baseDelay'),\n baseRest = require('./_baseRest'),\n toNumber = require('./toNumber');\n\n/**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\nvar delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n});\n\nmodule.exports = delay;\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n const delay = require(\"lodash/delay\");\n\n const localStorage = window.localStorage;\n const htmlElement = document.documentElement;\n const prefersDarkColorScheme = window.matchMedia(\n \"(prefers-color-scheme: dark)\"\n );\n\n swithInitialTheme();\n window.addEventListener(\"load\", onWindowLoad);\n\n function swithInitialTheme() {\n if (isInitialThemeDark()) {\n htmlElement.classList.add(\"dark-theme\");\n }\n }\n\n function onWindowLoad() {\n const toggleCheckboxElement = document.querySelector(\n \"#switch-theme-checkbox\"\n );\n toggleCheckboxElement.checked = isInitialThemeDark();\n toggleCheckboxElement.addEventListener(\n \"change\",\n onThemeChange.bind(toggleCheckboxElement)\n );\n }\n\n function isInitialThemeDark() {\n const theme = loadTheme();\n return theme ? theme === \"dark\" : prefersDarkColorScheme.matches;\n }\n\n function onThemeChange() {\n if (this.checked) {\n delay(function () {\n htmlElement.classList.add(\"dark-theme\");\n }, 100);\n saveTheme(\"dark\");\n } else {\n delay(function () {\n htmlElement.classList.remove(\"dark-theme\");\n }, 100);\n saveTheme(\"light\");\n }\n }\n\n function saveTheme(theme) {\n if (localStorage) {\n localStorage.setItem(\"theme\", theme);\n }\n }\n\n function loadTheme() {\n return localStorage !== null ? localStorage.getItem(\"theme\") : null;\n }\n})();\n","\n}());"]} \ No newline at end of file diff --git a/docs/v4/js/site.js b/docs/v4/js/site.js new file mode 100644 index 0000000..24a40b4 --- /dev/null +++ b/docs/v4/js/site.js @@ -0,0 +1,7 @@ +!function(){"use strict";function n(){const n=document.getElementById("anchor-rewrite"),o=window.location.hash.substr(1);n&&o&&function(n,o){const e=[n];for(console.debug(n);o[n];){if(n=o[n],e.includes(n))return void console.error("Skipping circular anchor update");e.push(n)}window.location.hash=n}(o,JSON.parse(n.innerHTML))}window.addEventListener("load",n),window.addEventListener("hashchange",n)}(); +!function(){"use strict";!function(){let t=document.getElementById("author"),n=t;for(;t;)t.classList.contains("author")&&(n=t),t=t.nextElementSibling;n&&n.classList.add("last-author")}()}(); +!function(){var t=function(t,n,e){if("function"!=typeof t)throw new TypeError("Expected a function");return setTimeout((function(){t.apply(void 0,e)}),n)};var n=function(t){return t};var e=function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)},r=Math.max;var o=function(t,n,o){return n=r(void 0===n?t.length-1:n,0),function(){for(var c=arguments,i=-1,u=r(c.length-n,0),a=Array(u);++i0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}},G=D(I);var M=/\s/;var U=function(t){for(var n=t.length;n--&&M.test(t.charAt(n)););return n},z=/^\s+/;var B=function(t){return t?t.slice(0,U(t)+1).replace(z,""):t};var H=function(t){return null!=t&&"object"==typeof t};var J=function(t){return"symbol"==typeof t||H(t)&&"[object Symbol]"==g(t)},K=/^[-+]0x[0-9a-f]+$/i,Q=/^0b[01]+$/i,V=/^0o[0-7]+$/i,W=parseInt;var X=function(t){if("number"==typeof t)return t;if(J(t))return NaN;if(m(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=m(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=B(t);var e=Q.test(t);return e||V.test(t)?W(t.slice(2),e?2:8):K.test(t)?NaN:+t},Y=function(t,e){return G(o(t,e,n),t+"")}((function(n,e,r){return t(n,X(e)||0,r)}));!function(){"use strict";function t(t){const e=t.querySelector("code").cloneNode(!0);for(const t of e.querySelectorAll(".hide-when-unfolded"))t.parentNode.removeChild(t);const r=e.innerText;r&&window.navigator.clipboard.writeText(r+"\n").then(n.bind(this))}function n(){this.classList.add("clicked")}function e(){this.classList.remove("clicked")}function r(t){const n=t.querySelector("code"),e=!n.classList.contains("unfolded");n.classList.remove(e?"folding":"unfolding"),n.classList.add(e?"unfolding":"folding"),Y((function(){n.classList.remove(e?"unfolding":"folding"),n.classList.toggle("unfolded")}),1100),o(this,!e)}function o(t,n){const e=n?"Expand folded text":"Collapse foldable text";t.classList.remove(n?"fold-button":"unfold-button"),t.classList.add(n?"unfold-button":"fold-button"),t.querySelector("span.label").innerText=e,t.title=e}!function(){for(const t of document.querySelectorAll(".doc pre.highlight")){const e=document.createElement("div");e.className="codetools",n(t,e)&&t.appendChild(e)}function n(n,i){let u=0;return function(t){return!!t.querySelector("span.hide-when-folded")}(n)&&(!function(t,n){const e=c();o(e,!0),e.addEventListener("click",r.bind(e,t)),n.appendChild(e)}(n,i),u++),window.navigator.clipboard&&(!function(n,r){const o=c("Copy to clipboard","copy-button");o.addEventListener("click",t.bind(o,n)),o.addEventListener("mouseleave",e.bind(o)),o.addEventListener("blur",e.bind(o));const i=document.createElement("span");o.appendChild(i),i.className="copied",r.appendChild(o)}(n,i),u++),u>0}function c(t,n){const e=document.createElement("button");e.className=n,e.title=t,e.type="button";const r=document.createElement("span");return r.appendChild(document.createTextNode(t)),r.className="label",e.appendChild(r),e}}()}()}(); +!function(){function e(n){return n instanceof Map?n.clear=n.delete=n.set=function(){throw new Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=function(){throw new Error("set is read-only")}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((function(t){var a=n[t];"object"!=typeof a||Object.isFrozen(a)||e(a)})),n}var n=e,t=e;n.default=t;class a{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function i(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function s(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}const r=e=>!!e.kind;class o{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=i(e)}openNode(e){if(!r(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){r(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}class l{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{l._collapse(e)})))}}class c extends l{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new o(this,this.options).value()}finalize(){return!0}}function g(e){return e?"string"==typeof e?e:e.source:null}const d=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const u="[a-zA-Z]\\w*",b="[a-zA-Z_]\\w*",m="\\b\\d+(\\.\\d+)?",h="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",p="\\b(0b[01]+)",f={begin:"\\\\[\\s\\S]",relevance:0},_={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[f]},E={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[f]},v={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},N=function(e,n,t={}){const a=s({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(v),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},y=N("//","$"),w=N("/\\*","\\*/"),x=N("#","$"),M={className:"number",begin:m,relevance:0},O={className:"number",begin:h,relevance:0},k={className:"number",begin:p,relevance:0},R={className:"number",begin:m+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},S={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[f,{begin:/\[/,end:/\]/,relevance:0,contains:[f]}]}]},A={className:"title",begin:u,relevance:0},T={className:"title",begin:b,relevance:0},C={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0};var D=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:u,UNDERSCORE_IDENT_RE:b,NUMBER_RE:m,C_NUMBER_RE:h,BINARY_NUMBER_RE:p,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map((e=>g(e))).join("")}(n,/.*\b/,e.binary,/\b.*/)),s({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:f,APOS_STRING_MODE:_,QUOTE_STRING_MODE:E,PHRASAL_WORDS_MODE:v,COMMENT:N,C_LINE_COMMENT_MODE:y,C_BLOCK_COMMENT_MODE:w,HASH_COMMENT_MODE:x,NUMBER_MODE:M,C_NUMBER_MODE:O,BINARY_NUMBER_MODE:k,CSS_NUMBER_MODE:R,REGEXP_MODE:S,TITLE_MODE:A,UNDERSCORE_TITLE_MODE:T,METHOD_GUARD:C,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}});function L(e,n){"."===e.input[e.index-1]&&n.ignoreMatch()}function B(e,n){n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=L,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function $(e,n){Array.isArray(e.illegal)&&(e.illegal=function(...e){return"("+e.map((e=>g(e))).join("|")+")"}(...e.illegal))}function I(e,n){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function j(e,n){void 0===e.relevance&&(e.relevance=1)}const z=["of","and","for","in","not","or","if","then","parent","list","value"];function P(e,n,t="keyword"){const a={};return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((function(t){Object.assign(a,P(e[t],n,t))})),a;function i(e,t){n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((function(n){const t=n.split("|");a[t[0]]=[e,U(t[0],t[1])]}))}}function U(e,n){return n?Number(n):function(e){return z.includes(e.toLowerCase())}(e)?0:1}function K(e,{plugins:n}){function t(n,t){return new RegExp(g(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class a{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=t(function(e,n="|"){let t=0;return e.map((e=>{t+=1;const n=t;let a=g(e),i="";for(;a.length>0;){const e=d.exec(a);if(!e){i+=a;break}i+=a.substring(0,e.index),a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+String(Number(e[1])+n):(i+=e[0],"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new a;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let t=n.exec(e);if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&this.considerAll()),t}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=s(e.classNameAliases||{}),function n(a,r){const o=a;if(a.isCompiled)return o;[I].forEach((e=>e(a,r))),e.compilerExtensions.forEach((e=>e(a,r))),a.__beforeBegin=null,[B,$,j].forEach((e=>e(a,r))),a.isCompiled=!0;let l=null;if("object"==typeof a.keywords&&(l=a.keywords.$pattern,delete a.keywords.$pattern),a.keywords&&(a.keywords=P(a.keywords,e.case_insensitive)),a.lexemes&&l)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l=l||a.lexemes||/\w+/,o.keywordPatternRe=t(l,!0),r&&(a.begin||(a.begin=/\B|\b/),o.beginRe=t(a.begin),a.endSameAsBegin&&(a.end=a.begin),a.end||a.endsWithParent||(a.end=/\B|\b/),a.end&&(o.endRe=t(a.end)),o.terminatorEnd=g(a.end)||"",a.endsWithParent&&r.terminatorEnd&&(o.terminatorEnd+=(a.end?"|":"")+r.terminatorEnd)),a.illegal&&(o.illegalRe=t(a.illegal)),a.contains||(a.contains=[]),a.contains=[].concat(...a.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(n){return s(e,{variants:null},n)})));if(e.cachedVariants)return e.cachedVariants;if(H(e))return s(e,{starts:e.starts?s(e.starts):null});if(Object.isFrozen(e))return s(e);return e}("self"===e?a:e)}))),a.contains.forEach((function(e){n(e,o)})),a.starts&&n(a.starts,r),o.matcher=function(e){const n=new i;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(o),o}(e)}function H(e){return!!e&&(e.endsWithParent||H(e.starts))}function Z(e){const n={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,i(this.code);let n={};return this.autoDetect?(n=e.highlightAuto(this.code),this.detectedLanguage=n.language):(n=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),n.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:n,VuePlugin:{install(e){e.component("highlightjs",n)}}}}const G={"after:highlightElement":({el:e,result:n,text:t})=>{const a=F(e);if(!a.length)return;const s=document.createElement("div");s.innerHTML=n.value,n.value=function(e,n,t){let a=0,s="";const r=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function c(e){s+=""}function g(e){("start"===e.event?l:c)(e.node)}for(;e.length||n.length;){let n=o();if(s+=i(t.substring(a,n[0].offset)),a=n[0].offset,n===e){r.reverse().forEach(c);do{g(n.splice(0,1)[0]),n=o()}while(n===e&&n.length&&n[0].offset===a);r.reverse().forEach(l)}else"start"===n[0].event?r.push(n[0].node):r.pop(),g(n.splice(0,1)[0])}return s+i(t.substr(a))}(a,F(s),t)}};function q(e){return e.nodeName.toLowerCase()}function F(e){const n=[];return function e(t,a){for(let i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=e(i,a),q(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}const W={},Q=e=>{console.error(e)},X=(e,...n)=>{console.log(`WARN: ${e}`,...n)},V=(e,n)=>{W[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),W[`${e}/${n}`]=!0)},J=i,Y=s,ee=Symbol("nomatch");var ne=function(e){const t=Object.create(null),i=Object.create(null),s=[];let r=!0;const o=/(^(<[^>]+>|\t|)+|\n)/gm,l="Could not find the language '{}', did you forget to load/include a language module?",g={disableAutodetect:!0,name:"Plain text",contains:[]};let d={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:c};function u(e){return d.noHighlightRe.test(e)}function b(e,n,t,a){let i="",s="";"object"==typeof n?(i=e,t=n.ignoreIllegals,s=n.language,a=void 0):(V("10.7.0","highlight(lang, code, ...args) has been deprecated."),V("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),s=e,i=n);const r={code:i,language:s};O("before:highlight",r);const o=r.result?r.result:m(r.language,r.code,t,a);return o.code=r.code,O("after:highlight",o),o}function m(e,n,i,o){function c(e,n){const t=N.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function g(){null!=M.subLanguage?function(){if(""===R)return;let e=null;if("string"==typeof M.subLanguage){if(!t[M.subLanguage])return void k.addText(R);e=m(M.subLanguage,R,!0,O[M.subLanguage]),O[M.subLanguage]=e.top}else e=h(R,M.subLanguage.length?M.subLanguage:null);M.relevance>0&&(S+=e.relevance),k.addSublanguage(e.emitter,e.language)}():function(){if(!M.keywords)return void k.addText(R);let e=0;M.keywordPatternRe.lastIndex=0;let n=M.keywordPatternRe.exec(R),t="";for(;n;){t+=R.substring(e,n.index);const a=c(M,n);if(a){const[e,i]=a;if(k.addText(t),t="",S+=i,e.startsWith("_"))t+=n[0];else{const t=N.classNameAliases[e]||e;k.addKeyword(n[0],t)}}else t+=n[0];e=M.keywordPatternRe.lastIndex,n=M.keywordPatternRe.exec(R)}t+=R.substr(e),k.addText(t)}(),R=""}function u(e){return e.className&&k.openNode(N.classNameAliases[e.className]||e.className),M=Object.create(e,{parent:{value:M}}),M}function b(e,n,t){let i=function(e,n){const t=e&&e.exec(n);return t&&0===t.index}(e.endRe,t);if(i){if(e["on:end"]){const t=new a(e);e["on:end"](n,t),t.isMatchIgnored&&(i=!1)}if(i){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return b(e.parent,n,t)}function p(e){return 0===M.matcher.regexIndex?(R+=e[0],1):(C=!0,0)}function f(e){const n=e[0],t=e.rule,i=new a(t),s=[t.__beforeBegin,t["on:begin"]];for(const t of s)if(t&&(t(e,i),i.isMatchIgnored))return p(n);return t&&t.endSameAsBegin&&(t.endRe=new RegExp(n.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),t.skip?R+=n:(t.excludeBegin&&(R+=n),g(),t.returnBegin||t.excludeBegin||(R=n)),u(t),t.returnBegin?0:n.length}function _(e){const t=e[0],a=n.substr(e.index),i=b(M,e,a);if(!i)return ee;const s=M;s.skip?R+=t:(s.returnEnd||s.excludeEnd||(R+=t),g(),s.excludeEnd&&(R=t));do{M.className&&k.closeNode(),M.skip||M.subLanguage||(S+=M.relevance),M=M.parent}while(M!==i.parent);return i.starts&&(i.endSameAsBegin&&(i.starts.endRe=i.endRe),u(i.starts)),s.returnEnd?0:t.length}let E={};function v(t,a){const s=a&&a[0];if(R+=t,null==s)return g(),0;if("begin"===E.type&&"end"===a.type&&E.index===a.index&&""===s){if(R+=n.slice(a.index,a.index+1),!r){const n=new Error("0 width match regex");throw n.languageName=e,n.badRule=E.rule,n}return 1}if(E=a,"begin"===a.type)return f(a);if("illegal"===a.type&&!i){const e=new Error('Illegal lexeme "'+s+'" for mode "'+(M.className||"")+'"');throw e.mode=M,e}if("end"===a.type){const e=_(a);if(e!==ee)return e}if("illegal"===a.type&&""===s)return 1;if(T>1e5&&T>3*a.index){throw new Error("potential infinite loop, way more iterations than matches")}return R+=s,s.length}const N=w(e);if(!N)throw Q(l.replace("{}",e)),new Error('Unknown language: "'+e+'"');const y=K(N,{plugins:s});let x="",M=o||y;const O={},k=new d.__emitter(d);!function(){const e=[];for(let n=M;n!==N;n=n.parent)n.className&&e.unshift(n.className);e.forEach((e=>k.openNode(e)))}();let R="",S=0,A=0,T=0,C=!1;try{for(M.matcher.considerAll();;){T++,C?C=!1:M.matcher.considerAll(),M.matcher.lastIndex=A;const e=M.matcher.exec(n);if(!e)break;const t=v(n.substring(A,e.index),e);A=e.index+t}return v(n.substr(A)),k.closeAllNodes(),k.finalize(),x=k.toHTML(),{relevance:Math.floor(S),value:x,language:e,illegal:!1,emitter:k,top:M}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(A-100,A+100),mode:t.mode},sofar:x,relevance:0,value:J(n),emitter:k};if(r)return{illegal:!1,relevance:0,value:J(n),emitter:k,language:e,top:M,errorRaised:t};throw t}}function h(e,n){n=n||d.languages||Object.keys(t);const a=function(e){const n={relevance:0,emitter:new d.__emitter(d),value:J(e),illegal:!1,top:g};return n.emitter.addText(e),n}(e),i=n.filter(w).filter(M).map((n=>m(n,e,!1)));i.unshift(a);const s=i.sort(((e,n)=>{if(e.relevance!==n.relevance)return n.relevance-e.relevance;if(e.language&&n.language){if(w(e.language).supersetOf===n.language)return 1;if(w(n.language).supersetOf===e.language)return-1}return 0})),[r,o]=s,l=r;return l.second_best=o,l}const p={"before:highlightElement":({el:e})=>{d.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":({result:e})=>{d.useBR&&(e.value=e.value.replace(/\n/g,"
"))}},f=/^(<[^>]+>|\t)+/gm,_={"after:highlightElement":({result:e})=>{d.tabReplace&&(e.value=e.value.replace(f,(e=>e.replace(/\t/g,d.tabReplace))))}};function E(e){let n=null;const t=function(e){let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=d.languageDetectRe.exec(n);if(t){const n=w(t[1]);return n||(X(l.replace("{}",t[1])),X("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}return n.split(/\s+/).find((e=>u(e)||w(e)))}(e);if(u(t))return;O("before:highlightElement",{el:e,language:t}),n=e;const a=n.textContent,s=t?b(a,{language:t,ignoreIllegals:!0}):h(a);O("after:highlightElement",{el:e,result:s,text:a}),e.innerHTML=s.value,function(e,n,t){const a=n?i[n]:t;e.classList.add("hljs"),a&&e.classList.add(a)}(e,t,s.language),e.result={language:s.language,re:s.relevance,relavance:s.relevance},s.second_best&&(e.second_best={language:s.second_best.language,re:s.second_best.relevance,relavance:s.second_best.relevance})}const v=()=>{if(v.called)return;v.called=!0,V("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(E)};let N=!1;function y(){if("loading"===document.readyState)return void(N=!0);document.querySelectorAll("pre code").forEach(E)}function w(e){return e=(e||"").toLowerCase(),t[e]||t[i[e]]}function x(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{i[e.toLowerCase()]=n}))}function M(e){const n=w(e);return n&&!n.disableAutodetect}function O(e,n){const t=e;s.forEach((function(e){e[t]&&e[t](n)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){N&&y()}),!1),Object.assign(e,{highlight:b,highlightAuto:h,highlightAll:y,fixMarkup:function(e){return V("10.2.0","fixMarkup will be removed entirely in v11.0"),V("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),n=e,d.tabReplace||d.useBR?n.replace(o,(e=>"\n"===e?d.useBR?"
":e:d.tabReplace?e.replace(/\t/g,d.tabReplace):e)):n;var n},highlightElement:E,highlightBlock:function(e){return V("10.7.0","highlightBlock will be removed entirely in v12.0"),V("10.7.0","Please use highlightElement now."),E(e)},configure:function(e){e.useBR&&(V("10.3.0","'useBR' will be removed entirely in v11.0"),V("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),d=Y(d,e)},initHighlighting:v,initHighlightingOnLoad:function(){V("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),N=!0},registerLanguage:function(n,a){let i=null;try{i=a(e)}catch(e){if(Q("Language definition for '{}' could not be registered.".replace("{}",n)),!r)throw e;Q(e),i=g}i.name||(i.name=n),t[n]=i,i.rawDefinition=a.bind(null,e),i.aliases&&x(i.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const n of Object.keys(i))i[n]===e&&delete i[n]},listLanguages:function(){return Object.keys(t)},getLanguage:w,registerAliases:x,requireLanguage:function(e){V("10.4.0","requireLanguage will be removed entirely in v11."),V("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const n=w(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:M,inherit:Y,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{e["before:highlightBlock"](Object.assign({block:n.el},n))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{e["after:highlightBlock"](Object.assign({block:n.el},n))})}(e),s.push(e)},vuePlugin:Z(e).VuePlugin}),e.debugMode=function(){r=!1},e.safeMode=function(){r=!0},e.versionString="10.7.3";for(const e in D)"object"==typeof D[e]&&n(D[e]);return Object.assign(e,D),e.addPlugin(p),e.addPlugin(G),e.addPlugin(_),e}({});function te(...e){return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}var ae=function(e){const n=[{className:"strong",begin:/\*{2}([^\n]+?)\*{2}/},{className:"strong",begin:te(/\*\*/,/((\*(?!\*)|\\[^\n]|[^*\n\\])+\n)+/,/(\*(?!\*)|\\[^\n]|[^*\n\\])*/,/\*\*/),relevance:0},{className:"strong",begin:/\B\*(\S|\S[^\n]*?\S)\*(?!\w)/},{className:"strong",begin:/\*[^\s]([^\n]+\n)+([^\n]+)\*/}],t=[{className:"emphasis",begin:/_{2}([^\n]+?)_{2}/},{className:"emphasis",begin:te(/__/,/((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,/(_(?!_)|\\[^\n]|[^_\n\\])*/,/__/),relevance:0},{className:"emphasis",begin:/\b_(\S|\S[^\n]*?\S)_(?!\w)/},{className:"emphasis",begin:/_[^\s]([^\n]+\n)+([^\n]+)_/},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0}];return{name:"AsciiDoc",aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,6})[ \t].+?([ \t]\\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{begin:/\\[*_`]/},{begin:/\\\\\*{2}[^\n]*?\*{2}/},{begin:/\\\\_{2}[^\n]*_{2}/},{begin:/\\\\`{2}[^\n]*`{2}/},{begin:/[:;}][*_`](?![*_`])/},...n,...t,{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:/`{2}/,end:/(\n{2}|`{2})/},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}};function ie(...e){return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}var se=function(e){const n={},t={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:ie(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},t]});const a={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,a]};a.contains.push(s);const r={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,n]},o=e.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"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 autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[o,e.SHEBANG(),l,r,e.HASH_COMMENT_MODE,i,s,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}};const re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],oe=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],le=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],ce=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],ge=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse();function de(e){return function(...e){return e.map((e=>function(e){return e?"string"==typeof e?e:e.source:null}(e))).join("")}("(?=",e,")")}var ue=function(e){const n=(e=>({IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}}))(e),t=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[e.C_BLOCK_COMMENT_MODE,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},e.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+le.join("|")+")"},{begin:"::("+ce.join("|")+")"}]},{className:"attribute",begin:"\\b("+ge.join("|")+")\\b"},{begin:":",end:"[;}]",contains:[n.HEXCOLOR,n.IMPORTANT,e.CSS_NUMBER_MODE,...t,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},{className:"built_in",begin:/[\w-]+(?=\()/}]},{begin:de(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:oe.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...t,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+re.join("|")+")\\b"}]}};var be=function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^--- +\d+,\d+ +----$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/^index/,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/},{begin:/^diff --git/,end:/$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}};var me=function(e){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"function(e){return e?"string"==typeof e?e:e.source:null}(e))).join("")}("(?=",e,")")}function _e(e,n={}){return n.variants=e,n}var Ee=function(e){const n="[A-Za-z0-9_$]+",t=_e([e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]})]),a={className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[e.BACKSLASH_ESCAPE]},i=_e([e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]),s=_e([{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:"\\$/",end:"/\\$",relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE],{className:"string"});return{name:"Groovy",keywords:{built_in:"this super",literal:"true false null",keyword:"byte short char int long boolean float double void def as in assert trait abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},contains:[e.SHEBANG({binary:"groovy",relevance:10}),t,s,a,i,{className:"class",beginKeywords:"class interface trait enum",end:/\{/,illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{className:"meta",begin:"@[A-Za-z]+",relevance:0},{className:"attr",begin:n+"[ \t]*:",relevance:0},{begin:/\?/,end:/:/,relevance:0,contains:[t,s,a,i,"self"]},{className:"symbol",begin:"^[ \t]*"+fe(n+":"),excludeBegin:!0,end:n+":",relevance:0}],illegal:/#|<\//}};function ve(...e){return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}var Ne=function(e){const n="HTTP/(2|1\\.[01])",t={className:"attribute",begin:ve("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},a=[t,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+n+" \\d{3})",end:/$/,contains:[{className:"meta",begin:n},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:a}},{begin:"(?=^[A-Z]+ (.*?) "+n+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:n},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:a}},e.inherit(t,{relevance:0})]}},ye="\\.([0-9](_*[0-9])*)",we="[0-9a-fA-F](_*[0-9a-fA-F])*",xe={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${ye})|\\.)?|(${ye}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${ye})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${ye})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${we})\\.?|(${we})?\\.(${we}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${we})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};var Me=function(e){var n="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",a={className:"meta",begin:"@"+n,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]};const i=xe;return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface enum",end:/[{;=]/,excludeEnd:!0,relevance:1,keywords:"class interface enum",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"class",begin:"record\\s+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,excludeEnd:!0,end:/[{;=]/,keywords:t,contains:[{beginKeywords:"record"},{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},i,a]}};const Oe="[A-Za-z$_][0-9A-Za-z$_]*",ke=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],Re=["true","false","null","undefined","NaN","Infinity"],Se=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function Ae(e){return Te("(?=",e,")")}function Te(...e){return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}var Ce=function(e){const n=Oe,t="<>",a="",i={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const t=e[0].length+e.index,a=e.input[t];"<"!==a?">"===a&&(((e,{after:n})=>{const t="",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:p}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:t,end:a},{begin:i.begin,"on:begin":i.isTrulyOpeningTag,end:i.end}],subLanguage:"xml",contains:[{begin:i.begin,end:i.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:s,contains:["self",e.inherit(e.TITLE_MODE,{begin:n}),f],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[f,e.inherit(e.TITLE_MODE,{begin:n})]},{variants:[{begin:"\\."+n},{begin:"\\$"+n}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:n}),"self",f]},{begin:"(get|set)\\s+(?="+n+"\\()",end:/\{/,keywords:"get set",contains:[e.inherit(e.TITLE_MODE,{begin:n}),{begin:/\(\)/},f]},{begin:/\$[(.]/}]}};var De=function(e){const n={literal:"true false null"},t=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],a=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],i={end:",",endsWithParent:!0,excludeEnd:!0,contains:a,keywords:n},s={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(i,{begin:/:/})].concat(t),illegal:"\\S"},r={begin:"\\[",end:"\\]",contains:[e.inherit(i)],illegal:"\\S"};return a.push(s,r),t.forEach((function(e){a.push(e)})),{name:"JSON",contains:a,keywords:n,illegal:"\\S"}},Le="\\.([0-9](_*[0-9])*)",Be="[0-9a-fA-F](_*[0-9a-fA-F])*",$e={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${Le})|\\.)?|(${Le}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${Le})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${Le})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${Be})\\.?|(${Be})?\\.(${Be}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${Be})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};var Ie=function(e){const n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},s={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(s);const r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(s,{className:"meta-string"})]}]},l=$e,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),g={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=g;return d.variants[1].contains=[g],g.variants[1].contains=[d],{name:"Kotlin",aliases:["kt","kts"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},t,r,o,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[g,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,o,s,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,o]},s,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},l]}};function je(...e){return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}var ze=function(e){const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:je(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.+?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},i={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};a.contains.push(i),i.contains.push(a);let s=[n,t];return a.contains=a.contains.concat(s),i.contains=i.contains.concat(s),s=s.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:s},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:s}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:s,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}};var Pe=function(e){const n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},t={className:"subst",begin:/\$\{/,end:/\}/,keywords:n},a={className:"string",contains:[t],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},i=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return t.contains=i,{name:"Nix",aliases:["nixos"],keywords:n,contains:i}};var Ue=function(e){const n={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},t={begin:"`[\\s\\S]",relevance:0},a={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},i={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[t,a,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},s={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},r=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),o={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},c={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[a]}]},g={begin:/using\s/,end:/$/,returnBegin:!0,contains:[i,s,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},d={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},u={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(n.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},b=[u,r,t,e.NUMBER_MODE,i,s,o,a,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],m={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",b,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return u.contains.unshift(m),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:n,contains:b.concat(l,c,g,d,m)}};var Ke=function(e){var n="[ \\t\\f]*",t=n+"[:=]"+n,a="[ \\t\\f]+",i="("+t+"|"+"[ \\t\\f]+)",s="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",r="([^\\\\:= \\t\\f\\n]|\\\\.)+",o={end:i,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\\\"},{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{returnBegin:!0,variants:[{begin:s+t,relevance:1},{begin:s+a,relevance:0}],contains:[{className:"attr",begin:s,endsParent:!0,relevance:0}],starts:o},{begin:r+i,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:r,endsParent:!0,relevance:0}],starts:o},{className:"attr",relevance:0,begin:r+n+"$"}]}};function He(...e){return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}var Ze=function(e){const n="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",t={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__",built_in:"proc lambda",literal:"true false nil"},a={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},s=[e.COMMENT("#","$",{contains:[a]}),e.COMMENT("^=begin","^=end",{contains:[a],relevance:10}),e.COMMENT("^__END__","\\n$")],r={className:"subst",begin:/#\{/,end:/\}/,keywords:t},o={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:/<<[-~]?'?(\w+)\n(?:[^\n]*\n)*?\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,r]})]}]},l="[0-9](_?[0-9])*",c={className:"number",relevance:0,variants:[{begin:`\\b([1-9](_?[0-9])*|0)(\\.(${l}))?([eE][+-]?(${l})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},g={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:t},d=[o,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE,relevance:0}]}].concat(s)},{className:"function",begin:He(/def\s+/,(u=n+"\\s*(\\(|;|$)",He("(?=",u,")"))),relevance:0,keywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),g].concat(s)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[o,{begin:n}],relevance:0},c,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:t},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(i,s),relevance:0}].concat(i,s);var u;r.contains=d,g.contains=d;const b=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",contains:d}}];return s.unshift(i),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:t,illegal:/\/\*/,contains:[e.SHEBANG({binary:"ruby"})].concat(b).concat(s).concat(d)}};var Ge=function(e){const n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:/\$\{/,end:/\}/}]},t={className:"string",variants:[{begin:'"""',end:'"""'},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},a={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},i={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},s={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},i]},r={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[i]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},a,r,s,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}};var qe=function(e){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#]/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}};function Fe(e){return e?"string"==typeof e?e:e.source:null}function We(...e){return e.map((e=>Fe(e))).join("")}function Qe(...e){return"("+e.map((e=>Fe(e))).join("|")+")"}var Xe=function(e){const n=e.COMMENT("--","$"),t=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],r=i,o=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update ","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={begin:We(/\b/,Qe(...r),/\s*\(/),keywords:{built_in:r}};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function(e,{exceptions:n,when:t}={}){const a=t;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?`${e}|0`:e))}(o,{when:e=>e.length<3}),literal:t,type:a,built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{begin:Qe(...s),keywords:{$pattern:/[\w\.]+/,keyword:o.concat(s),literal:t,type:a}},{className:"type",begin:Qe("double precision","large object","with timezone","without timezone")},l,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}};function Ve(e){return e?"string"==typeof e?e:e.source:null}function Je(e){return Ye("(?=",e,")")}function Ye(...e){return e.map((e=>Ve(e))).join("")}function en(...e){return"("+e.map((e=>Ve(e))).join("|")+")"}var nn=function(e){const n=Ye(/[A-Z_]/,Ye("(",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),t={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},a={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},i=e.inherit(a,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),r=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),o={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[a,r,s,i,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[a,i,r,s]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[o],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[o],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:Ye(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:o}]},{className:"tag",begin:Ye(/<\//,Je(Ye(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}};var tn=function(e){var n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),s={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},r={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},o={begin:/\{/,end:/\}/,contains:[r],illegal:"\\n",relevance:0},l={begin:"\\[",end:"\\]",contains:[r],illegal:"\\n",relevance:0},c=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type",begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},s,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},o,l,a],g=[...c];return g.pop(),g.push(i),r.contains=g,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:c}};!function(){"use strict";ne.registerLanguage("asciidoc",ae),ne.registerLanguage("bash",se),ne.registerLanguage("css",ue),ne.registerLanguage("diff",be),ne.registerLanguage("dockerfile",me),ne.registerLanguage("dos",he),ne.registerLanguage("gradle",pe),ne.registerLanguage("groovy",Ee),ne.registerLanguage("http",Ne),ne.registerLanguage("java",Me),ne.registerLanguage("javascript",Ce),ne.registerLanguage("json",De),ne.registerLanguage("kotlin",Ie),ne.registerLanguage("markdown",ze),ne.registerLanguage("nix",Pe),ne.registerLanguage("powershell",Ue),ne.registerLanguage("properties",Ke),ne.registerLanguage("ruby",Ze),ne.registerLanguage("scala",Ge),ne.registerLanguage("shell",qe),ne.registerLanguage("sql",Xe),ne.registerLanguage("xml",nn),ne.registerLanguage("yaml",tn),ne.configure({ignoreUnescapedHTML:!0});for(const e of document.querySelectorAll("pre.highlight > code"))ne.highlightBlock(e)}()}(); +!function(){"use strict";function t(t){const e=n('
');return t.prepend(e),e}function e(t,e){const o=t.querySelector(".title").textContent,c=t.querySelectorAll(".content").item(0),s=function(t,e,n){let o=t.nextElementSibling;for(;o;){if(o.matches(e))return o;if(o.matches(n))return;o=o.nextElementSibling}}(t,".colist",".listingblock");s&&c.append(s);const i=n('
'+o+"
");return i.dataset.blockName=o,c.dataset.blockName=o,e.append(i),{tabElement:i,content:c}}function n(t){const e=document.createElement("template");return e.innerHTML=t,e.content.firstChild}function o(t){let e=t.previousElementSibling;for(;e&&!e.classList.contains("primary");)e=e.previousElementSibling;return e}function c(t){const e=this.textContent;window.localStorage.setItem(t,e);for(const n of document.querySelectorAll(".tab"))i(n)===t&&n.textContent===e&&s(n)}function s(t){for(const e of t.parentNode.children)e.classList.remove("selected");t.classList.add("selected");for(const e of t.parentNode.parentNode.children)e.classList.contains("content")&&(t.dataset.blockName===e.dataset.blockName?e.classList.remove("hidden"):e.classList.add("hidden"))}function i(t){const e=[];for(t of t.parentNode.querySelectorAll(".tab"))e.push(t.textContent.toLowerCase());return e.sort().join("-")}window.addEventListener("load",(function(){(function(){for(const n of document.querySelectorAll(".primary")){if(n.querySelector("div.switch"))return void console.debug("Skipping tabs due to existing blockswitches");e(n,t(n)).tabElement.classList.add("selected"),n.querySelector(".title").remove(),n.classList.add("tabs-content")}for(const t of document.querySelectorAll(".secondary")){const n=o(t);if(n){const o=e(t,n.querySelector(".tabs"));o.content.classList.add("hidden"),n.append(o.content),t.remove()}else console.error("Found secondary block with no primary sibling")}})(),function(){for(const t of document.querySelectorAll(".tab")){const e=i(t);t.addEventListener("click",c.bind(t,e)),t.textContent===window.localStorage.getItem(e)&&s(t)}}()}))}(); +!function(){var t=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},e={};(function(t){(function(){var n="object"==typeof t&&t&&t.Object===Object&&t;e=n}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{});var n="object"==typeof self&&self&&self.Object===Object&&self,o=e||n||Function("return this")(),r=function(){return o.Date.now()},i=/\s/;var c=function(t){for(var e=t.length;e--&&i.test(t.charAt(e)););return e},u=/^\s+/;var a=function(t){return t?t.slice(0,c(t)+1).replace(u,""):t},l=o.Symbol,f=Object.prototype,d=f.hasOwnProperty,s=f.toString,m=l?l.toStringTag:void 0;var v=function(t){var e=d.call(t,m),n=t[m];try{t[m]=void 0;var o=!0}catch(t){}var r=s.call(t);return o&&(e?t[m]=n:delete t[m]),r},p=Object.prototype.toString;var g=function(t){return p.call(t)},h=l?l.toStringTag:void 0;var y=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":h&&h in Object(t)?v(t):g(t)};var w=function(t){return null!=t&&"object"==typeof t};var E=function(t){return"symbol"==typeof t||w(t)&&"[object Symbol]"==y(t)},b=/^[-+]0x[0-9a-f]+$/i,L=/^0b[01]+$/i,j=/^0o[0-7]+$/i,x=parseInt;var S=function(e){if("number"==typeof e)return e;if(E(e))return NaN;if(t(e)){var n="function"==typeof e.valueOf?e.valueOf():e;e=t(n)?n+"":n}if("string"!=typeof e)return 0===e?e:+e;e=a(e);var o=L.test(e);return o||j.test(e)?x(e.slice(2),o?2:8):b.test(e)?NaN:+e},T=Math.max,O=Math.min;var N=function(e,n,o){var i,c,u,a,l,f,d=0,s=!1,m=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var n=i,o=c;return i=c=void 0,d=t,a=e.apply(o,n)}function g(t){return d=t,l=setTimeout(y,n),s?p(t):a}function h(t){var e=t-f;return void 0===f||e>=n||e<0||m&&t-d>=u}function y(){var t=r();if(h(t))return w(t);l=setTimeout(y,function(t){var e=n-(t-f);return m?O(e,u-(t-d)):e}(t))}function w(t){return l=void 0,v&&i?p(t):(i=c=void 0,a)}function E(){var t=r(),e=h(t);if(i=arguments,c=this,f=t,e){if(void 0===l)return g(f);if(m)return clearTimeout(l),l=setTimeout(y,n),p(f)}return void 0===l&&(l=setTimeout(y,n)),a}return n=S(n)||0,t(o)&&(s=!!o.leading,u=(m="maxWait"in o)?T(S(o.maxWait)||0,n):u,v="trailing"in o?!!o.trailing:v),E.cancel=function(){void 0!==l&&clearTimeout(l),d=0,i=f=c=l=void 0},E.flush=function(){return void 0===l?a:w(r())},E};var q=function(e,n,o){var r=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return t(o)&&(r="leading"in o?!!o.leading:r,i="trailing"in o?!!o.trailing:i),N(e,n,{leading:r,maxWait:n,trailing:i})};!function(){"use strict";let t,e,n,o,r,i,c=null,u=!1;function a(){v();const t=r.get(window.location.hash),e=g(window.location.hash);t&&E(e)&&(u=!0,b("activating window location hash"),y(t.parentElement)),f()}window.addEventListener("load",(function(){if(t=document.querySelector("#toc"),e=document.querySelector("#toggle-toc"),n=document.querySelector("#content"),!t||!n)return;o=function(){const e=r(),o=[];for(let t=0;t<=e;t++)o.push("h"+(t+1)+"[id]");return n.querySelectorAll(o);function r(){let e=1;for(const n of t.querySelectorAll("ul","ol"))e=Math.max(e,i(n));return e}function i(e){let n=0;for(;e&&e!==t;)n+="UL"===e.nodeName||"OL"===e.nodeName?1:0,e=e.parentElement;return e?n:-1}}(),r=function(){const e=new Map;for(const n of t.querySelectorAll("li > a")){const t=n.getAttribute("href");t&&e.set(t,n)}return e}(),i=function(){const t=new Map;for(const e of o){const n=h(e);if(n){const o=r.get(n);if(o){const n=o.parentElement;t.set(e,n)}}}return t}(),a(),window.addEventListener("hashchange",a),window.addEventListener("scroll",l),window.addEventListener("scroll",f),window.addEventListener("resize",d),t.addEventListener("click",s),e.addEventListener("click",m)}));const l=q((function(){v(),u||p()}),50,{leading:!0}),f=N((function(){if(b("scrolling ended"),v(),u=!1,c){E(g(h(c)))||p()}else p()}),50),d=q((function(){v()}),50,{leading:!0});function s(t){if("A"===t.target.nodeName){const e=t.target.parentElement;if(e&&"back-to-index"===e.id)return;u=!0,b("activating clicked toc element"),y(t.target.parentElement)}}function m(t){t.stopPropagation();document.body.classList.toggle("show-toc")?document.documentElement.addEventListener("click",m):document.documentElement.removeEventListener("click",m)}function v(){const t=window.getComputedStyle(document.documentElement),e=parseInt(t.getPropertyValue("--layout-banner-height"),10);w()>=e?document.body.classList.add("fixed-toc"):document.body.classList.remove("fixed-toc")}function p(){b("activating top header element");const t=function(){const t=w()+45;for(let e=0;et)return o[e-1>=0?e-1:0];return o[o.length-1]}();y(i.get(t))}function g(t){for(let e=0;e=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)}function b(t){false}}()}(); +//# sourceMappingURL=site.js.map diff --git a/docs/v4/js/site.js.map b/docs/v4/js/site.js.map new file mode 100644 index 0000000..89de670 --- /dev/null +++ b/docs/v4/js/site.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["site/src/main/js/site/anchorrewrite.js","site/anchorrewrite.js","site/src/main/js/site/author.js","site/author.js","site/node_modules/browser-pack-flat/_prelude","site/node_modules/lodash/_baseDelay.js","site/codetools.js","site/node_modules/lodash/identity.js","site/node_modules/lodash/_apply.js","site/node_modules/lodash/_overRest.js","site/node_modules/lodash/constant.js","site/node_modules/lodash/_freeGlobal.js","site/node_modules/lodash/_root.js","site/node_modules/lodash/_Symbol.js","site/node_modules/lodash/_getRawTag.js","site/node_modules/lodash/_objectToString.js","site/node_modules/lodash/_baseGetTag.js","site/node_modules/lodash/isObject.js","site/node_modules/lodash/isFunction.js","site/node_modules/lodash/_isMasked.js","site/node_modules/lodash/_coreJsData.js","site/node_modules/lodash/_toSource.js","site/node_modules/lodash/_baseIsNative.js","site/node_modules/lodash/_getValue.js","site/node_modules/lodash/_getNative.js","site/node_modules/lodash/_defineProperty.js","site/node_modules/lodash/_baseSetToString.js","site/node_modules/lodash/_shortOut.js","site/node_modules/lodash/_setToString.js","site/node_modules/lodash/_baseRest.js","site/node_modules/lodash/_trimmedEndIndex.js","site/node_modules/lodash/_baseTrim.js","site/node_modules/lodash/isObjectLike.js","site/node_modules/lodash/isSymbol.js","site/node_modules/lodash/toNumber.js","site/node_modules/lodash/delay.js","site/src/main/js/site/codetools.js","site/node_modules/browser-pack-flat/_postlude","site/node_modules/highlight.js/lib/core.js","site/highlight.js","site/node_modules/highlight.js/lib/languages/asciidoc.js","site/node_modules/highlight.js/lib/languages/bash.js","site/node_modules/highlight.js/lib/languages/css.js","site/node_modules/highlight.js/lib/languages/diff.js","site/node_modules/highlight.js/lib/languages/dockerfile.js","site/node_modules/highlight.js/lib/languages/dos.js","site/node_modules/highlight.js/lib/languages/gradle.js","site/node_modules/highlight.js/lib/languages/groovy.js","site/node_modules/highlight.js/lib/languages/http.js","site/node_modules/highlight.js/lib/languages/java.js","site/node_modules/highlight.js/lib/languages/javascript.js","site/node_modules/highlight.js/lib/languages/json.js","site/node_modules/highlight.js/lib/languages/kotlin.js","site/node_modules/highlight.js/lib/languages/markdown.js","site/node_modules/highlight.js/lib/languages/nix.js","site/node_modules/highlight.js/lib/languages/powershell.js","site/node_modules/highlight.js/lib/languages/properties.js","site/node_modules/highlight.js/lib/languages/ruby.js","site/node_modules/highlight.js/lib/languages/scala.js","site/node_modules/highlight.js/lib/languages/shell.js","site/node_modules/highlight.js/lib/languages/sql.js","site/node_modules/highlight.js/lib/languages/xml.js","site/node_modules/highlight.js/lib/languages/yaml.js","site/src/main/js/site/highlight.js","site/src/main/js/site/tabs.js","site/tabs.js","site/toc.js","site/node_modules/lodash/now.js","site/node_modules/lodash/debounce.js","site/node_modules/lodash/throttle.js","site/src/main/js/site/toc.js"],"names":["onChange","element","document","getElementById","anchor","window","location","hash","substr","rewrites","seen","console","debug","includes","error","push","updateAnchor","JSON","parse","innerHTML","addEventListener","candidate","lastAuthorElement","classList","contains","nextElementSibling","add","markLastAuthor","_$baseDelay_3","func","wait","args","TypeError","setTimeout","apply","undefined","_$identity_25","value","_$apply_2","thisArg","length","call","nativeMax","Math","max","_$overRest_17","start","transform","arguments","index","array","Array","otherArgs","this","_$constant_23","_$freeGlobal_11","global","freeGlobal","Object","self","freeSelf","_$root_18","Function","_$Symbol_1","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","_$getRawTag_13","isOwn","tag","unmasked","e","result","__nativeObjectToString_16","_$objectToString_16","__symToStringTag_4","_$baseGetTag_4","_$isObject_27","type","uid","_$isFunction_26","_$coreJsData_9","maskSrcKey","exec","keys","IE_PROTO","_$isMasked_15","funcToString","_$toSource_21","reIsHostCtor","__funcProto_5","__objectProto_5","__funcToString_5","__hasOwnProperty_5","reIsNative","RegExp","replace","_$baseIsNative_5","test","_$getValue_14","object","key","_$getNative_12","_$defineProperty_10","_$baseSetToString_7","string","configurable","enumerable","writable","nativeNow","Date","now","_$shortOut_20","count","lastCalled","stamp","remaining","_$setToString_19","reWhitespace","_$trimmedEndIndex_22","charAt","reTrimStart","_$baseTrim_8","slice","_$isObjectLike_28","_$isSymbol_29","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","_$toNumber_30","other","valueOf","isBinary","_$delay_24","_$baseRest_6","onCopyButtonClick","preElement","copy","querySelector","cloneNode","hideWhenFoldedElement","querySelectorAll","parentNode","removeChild","text","innerText","navigator","clipboard","writeText","then","markClicked","bind","clearClicked","remove","onFoldUnfoldButtonClick","codeElement","unfolding","toggle","updateFoldUnfoldButton","button","unfold","label","title","codeToolsElement","createElement","className","addButtons","appendChild","numberOfButtons","hasHideWhenFoldedSpans","foldUnfoldButton","createButton","addFoldUnfoldButton","copyButton","copiedPopup","addCopyButton","buttonElement","labelElement","createTextNode","addCodeToolElements","deepFreeze","obj","Map","clear","delete","set","Error","Set","freeze","getOwnPropertyNames","forEach","name","prop","isFrozen","deepFreezeEs6","_default","default","Response","constructor","mode","data","isMatchIgnored","ignoreMatch","escapeHTML","inherit","original","objects","create","emitsWrappingTags","node","kind","HTMLRenderer","parseTree","options","buffer","classPrefix","walk","addText","openNode","sublanguage","span","closeNode","TokenTree","rootNode","children","stack","top","root","pop","closeAllNodes","toJSON","stringify","builder","_walk","static","child","every","el","join","_collapse","TokenTreeEmitter","super","addKeyword","addSublanguage","emitter","toHTML","finalize","source","re","BACKREF_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","begin","relevance","APOS_STRING_MODE","end","illegal","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","__proto__","MATCH_NOTHING_RE","RE_STARTERS_RE","SHEBANG","opts","beginShebang","binary","map","x","concat","m","resp","END_SAME_AS_BEGIN","assign","_beginMatch","skipIfhasPrecedingDot","match","response","input","beginKeywords","parent","split","__beforeBegin","keywords","compileIllegal","_parent","isArray","either","compileMatch","compileRelevance","COMMON_KEYWORDS","compileKeywords","rawKeywords","caseInsensitive","compiledKeywords","compileList","keywordList","toLowerCase","keyword","pair","scoreForKeyword","providedScore","Number","commonKeyword","compileLanguage","language","plugins","langRe","case_insensitive","MultiRegex","matchIndexes","regexes","matchAt","position","addRule","countMatchGroups","compile","terminators","matcherRe","regexps","separator","numCaptures","regex","offset","out","substring","String","lastIndex","s","i","findIndex","matchData","splice","ResumableMultiRegex","rules","multiRegexes","regexIndex","getMatcher","matcher","resumingScanAtSamePosition","considerAll","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","ext","keywordPattern","$pattern","lexemes","keywordPatternRe","beginRe","endSameAsBegin","endsWithParent","endRe","terminatorEnd","illegalRe","c","variants","cachedVariants","variant","dependencyOnParent","starts","expandOrCloneMode","mm","term","rule","buildModeRegex","BuildVuePlugin","hljs","Component","props","detectedLanguage","unknownLanguage","computed","highlighted","autoDetect","getLanguage","warn","code","highlightAuto","highlight","ignoreIllegals","autodetect","Boolean","render","class","domProps","VuePlugin","install","Vue","component","mergeHTMLPlugin","originalStream","nodeStream","resultNode","processed","nodeStack","selectStream","event","open","attributeString","attr","nodeName","attributes","close","stream","reverse","mergeStreams","_nodeStream","firstChild","nextSibling","nodeType","nodeValue","seenDeprecations","message","log","deprecated","version","escape$1","inherit$1","NO_MATCH","_$highlight_1","languages","aliases","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","noHighlightRe","languageDetectRe","tabReplace","useBR","__emitter","shouldNotHighlight","languageName","codeOrlanguageName","optionsOrCode","continuation","context","fire","_highlight","codeToHighlight","keywordData","matchText","processBuffer","subLanguage","modeBuffer","continuations","processSubLanguage","buf","keywordRelevance","startsWith","cssClass","processKeywords","startNewMode","endOfMode","matchPlusRemainder","matched","lexeme","endsParent","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","skip","excludeBegin","returnBegin","doEndMatch","endMode","origin","returnEnd","excludeEnd","lastMatch","processLexeme","textBeforeMatch","err","badRule","iterations","md","list","current","unshift","item","processContinuations","processedCount","floor","illegalBy","msg","sofar","errorRaised","languageSubset","plaintext","justTextHighlightResult","results","filter","autoDetection","sorted","sort","a","b","supersetOf","best","secondBest","second_best","brPlugin","TAB_REPLACE_RE","tabReplacePlugin","highlightElement","block","classes","find","_class","blockLanguage","textContent","currentLang","resultLang","updateClassName","relavance","initHighlighting","called","wantsHighlight","highlightAll","readyState","registerAliases","aliasList","alias","lang","plugin","fixMarkup","arg","html","highlightBlock","configure","userOptions","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","unregisterLanguage","listLanguages","requireLanguage","addPlugin","upgradePluginAPI","vuePlugin","debugMode","safeMode","versionString","HLJS","__concat_2","__source_2","_$asciidoc_2","STRONG","EMPHASIS","__concat_3","__source_3","_$bash_3","VAR","BRACED_VAR","SUBST","HERE_DOC","QUOTE_STRING","ARITHMETIC","KNOWN_SHEBANG","FUNCTION","literal","built_in","TAGS","MEDIA_FEATURES","PSEUDO_CLASSES","PSEUDO_ELEMENTS","ATTRIBUTES","lookahead","__source_4","__concat_4","_$css_4","modes","IMPORTANT","HEXCOLOR","ATTRIBUTE_SELECTOR_MODE","__MODES_4","STRINGS","keyframePosition","attribute","_$diff_5","_$dockerfile_6","_$dos_7","_$gradle_8","__lookahead_9","__source_9","__concat_9","_$groovy_9","REGEXP","NUMBER","STRING","__concat_10","__source_10","_$http_10","VERSION","HEADER","HEADERS_AND_BODY","frac","hexDigits","NUMERIC","_$java_11","JAVA_IDENT_RE","KEYWORDS","ANNOTATION","__IDENT_RE_12","LITERALS","BUILT_INS","__lookahead_12","__concat_12","__source_12","_$javascript_12","IDENT_RE$1","FRAGMENT","XML_TAG","isTrulyOpeningTag","afterMatchIndex","nextChar","after","indexOf","hasClosingTag","KEYWORDS$1","decimalInteger","HTML_TEMPLATE","CSS_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","exports","_$json_13","ALLOWED_COMMENTS","TYPES","VALUE_CONTAINER","OBJECT","ARRAY","__frac_14","__hexDigits_14","__NUMERIC_14","_$kotlin_14","LABEL","VARIABLE","ANNOTATION_USE_SITE","KOTLIN_NUMBER_MODE","KOTLIN_NESTED_COMMENT","KOTLIN_PAREN_TYPE","KOTLIN_PAREN_TYPE2","__concat_15","__source_15","_$markdown_15","INLINE_HTML","LINK","BOLD","ITALIC","CONTAINABLE","_$nix_16","NIX_KEYWORDS","ANTIQUOTE","EXPRESSIONS","_$powershell_17","BACKTICK_ESCAPE","APOS_STRING","PS_COMMENT","CMDLETS","PS_CLASS","PS_FUNCTION","PS_USING","PS_ARGUMENTS","PS_METHODS","GENTLEMANS_SET","PS_TYPE","_$properties_18","WS0","EQUAL_DELIM","WS_DELIM","DELIM","KEY_ALPHANUM","KEY_OTHER","DELIM_AND_VALUE","__concat_19","__source_19","_$ruby_19","RUBY_METHOD_RE","RUBY_KEYWORDS","YARDOCTAG","IRB_OBJECT","COMMENT_MODES","digits","RUBY_DEFAULT_CONTAINS","IRB_DEFAULT","_$scala_20","TYPE","NAME","CLASS","METHOD","_$shell_21","__source_22","__concat_22","__either_22","_$sql_22","COMMENT_MODE","RESERVED_FUNCTIONS","COMBOS","FUNCTIONS","FUNCTION_CALL","exceptions","when","qualifyFn","reduceRelevancy","__source_23","__lookahead_23","__concat_23","__either_23","_$xml_23","TAG_NAME_RE","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","_$yaml_24","URI_CHARACTERS","CONTAINER_STRING","TIMESTAMP","VALUE_MODES","ignoreUnescapedHTML","createTabsElement","primaryElement","tabsElement","createElementFromHtml","prepend","createTab","blockElement","content","colist","selector","stopSelector","sibling","matches","append","tabElement","dataset","blockName","template","findPrimaryElement","secondaryElement","previousElementSibling","onTabClick","tabId","localStorage","setItem","getTabId","select","id","tab","addTabs","getItem","configureTabs","_$isObject_10","_$freeGlobal_4","_$root_7","_$now_13","_$trimmedEndIndex_8","_$baseTrim_3","_$getRawTag_5","__nativeObjectToString_6","_$objectToString_6","__symToStringTag_2","_$baseGetTag_2","_$isObjectLike_11","_$isSymbol_12","_$toNumber_15","nativeMin","min","_$debounce_9","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","cancel","flush","_$throttle_14","tocElement","toggleTocElement","contentElement","headingElements","hrefToTocAnchorElement","headingElementToTocElement","lastActiveTocElement","disableOnScroll","onLocationHashChange","updateFixedPositionClass","tocAnchorElement","get","headingElement","getHeadingElementByHref","isInViewport","activateTocElement","parentElement","onEndScroll","maxHeadingLevel","getMaxHeadingLevel","headingSelectors","headingLevel","listElement","getHeadingLevel","findHeadingElements","href","getAttribute","buildHrefToTocAnchorElement","getChildAnchorHref","buildHeadingElementToTocElement","onScroll","onResize","onTocElementClick","onToggleTocClick","activateTopHeadingTocElement","target","stopPropagation","body","documentElement","removeEventListener","computedStyle","getComputedStyle","bannerHeight","getPropertyValue","getTop","topHeadingElement","topHeadingPos","offsetTop","getTopHeading","achorElement","deactivateTocElement","scrollTop","rect","getBoundingClientRect","bottom","innerHeight","clientHeight"],"mappings":"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CL9F,UAAW,cAKbka,EAAe,CACnBla,UAAW,SACX2F,MAAO,IAAKG,IAAK,IACjBlP,SAAU,CACRkX,EAAKpI,iBACLoU,EACAE,IAGJA,EAAMpjB,SAAST,KAAK+jB,GACpB,MASMC,EAAa,CACjBxU,MAAO,SACPG,IAAK,OACLlP,SAAU,CACR,CAAE+O,MAAO,gBAAiB3F,UAAW,UACrC8N,EAAKvH,YACLuT,IAcEM,EAAgBtM,EAAK3G,QAAQ,CACjCG,OAAQ,IAZa,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,QAG2B7C,KAAK,QAChCmB,UAAW,KAEPyU,EAAW,CACfra,UAAW,WACX2F,MAAO,4BACPwO,aAAa,EACbvd,SAAU,CAACkX,EAAKvL,QAAQuL,EAAKlH,WAAY,CAACjB,MAAO,gBACjDC,UAAW,GAGb,MAAO,CACLlE,KAAM,OACN2P,QAAS,CAAC,KAAM,OAChB9I,SAAU,CACRkE,SAAU,gBACVnD,QACE,+DACFgR,QACE,aACFC,SAGE,6uBAeJ3jB,SAAU,CACRwjB,EACAtM,EAAK3G,UACLkT,EACAF,EACArM,EAAKxH,kBACL2T,EACAC,EA3EkB,CACpBla,UAAW,GACX2F,MAAO,OAGW,CAClB3F,UAAW,SACX2F,MAAO,IAAKG,IAAK,KAuEfgU,GF0wFN,EG76FA,MAuBMU,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,SAGIC,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cAIIC,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SAIIC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBAGIC,GAAa,CACjB,gBACA,cACA,aACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,OACA,sBACA,aACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,QACA,OACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,oBACA,gBACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,eACA,yBACA,0BACA,cACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,UACA,UACA,kBACA,OACA,iBACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,gBACA,cACA,eACA,aACA,QACA,OACA,aACA,YACA,aACA,YACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,iBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,cACA,qBACA,iBACA,WACA,SACA,SACA,QACA,MACA,WACA,eACA,aACA,kBACA,kBACA,wBACA,uBACA,wBACA,cACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,cACA,SACA,QACA,aACA,eACA,YACA,WAGAxK,UAsBF,SAASyK,GAAU1V,GACjB,OAOF,YAAmBhO,GAEjB,OADeA,EAAKoQ,KAAKC,GApB3B,SAAgBrC,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAGD,OAHM,IHq7FlB,CGl6FiC4V,CAAOtT,KAAI/C,KAAK,GHm7FjD,CG37FSsW,CAAO,MAAO5V,EAAI,IHk7F3B,CGpxFA,IAAA6V,GA3IA,SAAalN,GACX,MAAMmN,EArdM,CAACnN,IACN,CACLoN,UAAW,CACTlb,UAAW,OACX2F,MAAO,cAETwV,SAAU,CACRnb,UAAW,SACX2F,MAAO,oCAETyV,wBAAyB,CACvBpb,UAAW,gBACX2F,MAAO,KACPG,IAAK,KACLC,QAAS,IACTnP,SAAU,CACRkX,EAAKjI,iBACLiI,EAAK9H,sBAocGqV,CAAMvN,GAWdwN,EAAU,CACdxN,EAAKjI,iBACLiI,EAAK9H,mBAGP,MAAO,CACLtE,KAAM,MACNsI,kBAAkB,EAClBjE,QAAS,UACTwC,SAAU,CACRgT,iBAAkB,WAEpBpP,iBAAkB,CAGhBoP,iBAAkB,gBAEpB3kB,SAAU,CACRkX,EAAKzH,qBAxBa,CACpBV,MAAO,gCA2BLmI,EAAKpH,gBACL,CACE1G,UAAW,cACX2F,MAAO,kBACPC,UAAW,GAEb,CACE5F,UAAW,iBACX2F,MAAO,6BACPC,U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,EAAKzH,uBAGT6V,EACAc,GV2iIN,EW1tIA,MAAMC,GAAW,2BACXF,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,WAEIG,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAoFIC,GAAY,GAAG1V,OAlCI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGyB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,SACA,UA9EY,CACZ,OACA,WACA,SACA,OACA,OACA,SACA,SACA,SACA,WACA,UACA,QACA,SACA,MACA,MACA,UACA,UACA,QACA,UACA,OACA,UACA,eACA,aACA,aACA,YACA,cACA,cACA,eACA,QACA,aACA,oBACA,cACA,gBACA,iBACA,UAGkB,CAClB,YACA,gBACA,aACA,iBACA,cACA,YACA,aAgEF,SAAS2V,GAAUjY,GACjB,OAAOkY,GAAO,MAAOlY,EAAI,IX+tI3B,CWxtIA,SAASkY,MAAUlmB,GAEjB,OADeA,EAAKoQ,KAAKC,IAAM8V,OApBjBnY,EAoBwBqC,GAlBpB,iBAAPrC,EAAwBA,EAE5BA,EAAGD,OAHM,KADlB,IAAgBC,CAoB0B,IAAEV,KAAK,GXguIjD,CW/yHA,IAAA8Y,GAraA,SAAoBzP,GAQlB,MAMM0P,EAAaP,GACbQ,EACG,KADHA,EAEC,MAEDC,EAAU,CACd/X,MAAO,sBACPG,IAAK,4BAKL6X,kBAAmB,CAAC3V,EAAOC,KACzB,MAAM2V,EAAkB5V,EAAM,GAAGpQ,OAASoQ,EAAM3P,MAC1CwlB,EAAW7V,EAAME,MAAM0V,GAIZ,MAAbC,EAMa,MAAbA,IA9Bc,EAAC7V,GAAS8V,YAC9B,MAAMhkB,EAAM,KAAOkO,EAAM,GAAG5K,MAAM,GAElC,OAAgB,IADJ4K,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W,SACX2F,MAAO,uBAmEL6c,EACAG,EACAD,EACA5U,EAAKtH,cA5HU,CACjBxG,UAAW,OACX2F,MAAO,enBi4MX,EoB/2MA,IAAAid,GApBA,SAAe9U,GACb,MAAO,CACLpM,KAAM,gBACN2P,QAAS,CAAE,WACXza,SAAU,CACR,CACEoJ,UAAW,OAIX2F,MAAO,iCACP4H,OAAQ,CACNzH,IAAK,gBACL8M,YAAa,UpBq5MvB,EqBl6MA,SAASiQ,GAAO1d,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAGD,OAHM,IrBm7MlB,CqBz6MA,SAAS4d,MAAU3rB,GAEjB,OADeA,EAAKoQ,KAAKC,GAAMqb,GAAOrb,KAAI/C,KAAK,GrBi7MjD,CqBt6MA,SAASse,MAAU5rB,GAEjB,MADe,IAAMA,EAAKoQ,KAAKC,GAAMqb,GAAOrb,KAAI/C,KAAK,KAAO,GrBi7M9D,CqBxxLA,IAAAue,GA/oBA,SAAalV,GACX,MAAMmV,EAAenV,EAAK5H,QAAQ,KAAM,KAmBlCgX,EAAW,CACf,OACA,QAGA,WAUI2B,EAAQ,CACZ,SACA,SACA,OACA,UACA,OACA,YACA,OACA,OACA,MACA,WACA,UACA,QACA,MACA,UACA,WACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,OACA,YACA,UACA,UACA,aAmYIqE,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,gBAwBIC,EAAS,CACb,eACA,cACA,cACA,cACA,WACA,cACA,iBACA,gBACA,cACA,gBACA,gBACA,eACA,cACA,aACA,cACA,iBAGIC,EAAYF,EAEZnG,EAAW,CArff,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,YACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,OAzXA,MACA,MACA,YACA,OACA,QACA,QACA,OACA,QA0f0DhH,QAAQzM,IAC1D4Z,EAAmBjtB,SAASqT,KAchC+Z,EAAgB,CACpB1d,MAAOmd,GAAO,KAAMC,MAAUK,GAAY,SAC1C7a,SAAU,CACRgS,SAAU6I,IAmBd,MAAO,CACL1hB,KAAM,MACNsI,kBAAkB,EAElBjE,QAAS,WACTwC,SAAU,CACRkE,SAAU,YACVnD,QArBJ,SAAyB0L,GAAMsO,WAACA,EAAUC,KAAEA,GAAQ,CAAA,GAClD,MAAMC,EAAYD,EAElB,OADAD,EAAaA,GAAc,GACpBtO,EAAKzN,KAAK4N,GACXA,EAAKnN,MAAM,WAAasb,EAAWrtB,SAASkf,GACvCA,EACEqO,EAAUrO,GACZ,GAAGA,MAEHA,G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","file":"site.js","sourcesContent":["/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n window.addEventListener(\"load\", onChange);\n window.addEventListener(\"hashchange\", onChange);\n\n function onChange() {\n const element = document.getElementById(\"anchor-rewrite\");\n const anchor = window.location.hash.substr(1);\n if (element && anchor) {\n const rewites = JSON.parse(element.innerHTML);\n updateAnchor(anchor, rewites);\n }\n }\n\n function updateAnchor(anchor, rewrites) {\n const seen = [anchor];\n console.debug(anchor);\n while (rewrites[anchor]) {\n anchor = rewrites[anchor];\n if (seen.includes(anchor)) {\n console.error(\"Skipping circular anchor update\");\n return;\n }\n seen.push(anchor);\n }\n window.location.hash = anchor;\n }\n})();\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n window.addEventListener(\"load\", onChange);\n window.addEventListener(\"hashchange\", onChange);\n\n function onChange() {\n const element = document.getElementById(\"anchor-rewrite\");\n const anchor = window.location.hash.substr(1);\n if (element && anchor) {\n const rewites = JSON.parse(element.innerHTML);\n updateAnchor(anchor, rewites);\n }\n }\n\n function updateAnchor(anchor, rewrites) {\n const seen = [anchor];\n console.debug(anchor);\n while (rewrites[anchor]) {\n anchor = rewrites[anchor];\n if (seen.includes(anchor)) {\n console.error(\"Skipping circular anchor update\");\n return;\n }\n seen.push(anchor);\n }\n window.location.hash = anchor;\n }\n})();\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n markLastAuthor();\n\n function markLastAuthor() {\n let candidate = document.getElementById(\"author\");\n let lastAuthorElement = candidate;\n while (candidate) {\n if (candidate.classList.contains(\"author\")) {\n lastAuthorElement = candidate;\n }\n candidate = candidate.nextElementSibling;\n }\n if (lastAuthorElement) {\n lastAuthorElement.classList.add(\"last-author\");\n }\n }\n})();\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n markLastAuthor();\n\n function markLastAuthor() {\n let candidate = document.getElementById(\"author\");\n let lastAuthorElement = candidate;\n while (candidate) {\n if (candidate.classList.contains(\"author\")) {\n lastAuthorElement = candidate;\n }\n candidate = candidate.nextElementSibling;\n }\n if (lastAuthorElement) {\n lastAuthorElement.classList.add(\"last-author\");\n }\n }\n})();\n","(function(){\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nmodule.exports = baseDelay;\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n const delay = require(\"lodash/delay\");\n\n addCodeToolElements();\n\n function addCodeToolElements() {\n for (const preElement of document.querySelectorAll(\".doc pre.highlight\")) {\n const codeToolsElement = document.createElement(\"div\");\n codeToolsElement.className = \"codetools\";\n if (addButtons(preElement, codeToolsElement)) {\n preElement.appendChild(codeToolsElement);\n }\n }\n\n function addButtons(preElement, codeToolsElement) {\n let numberOfButtons = 0;\n if (hasHideWhenFoldedSpans(preElement)) {\n addFoldUnfoldButton(preElement, codeToolsElement);\n numberOfButtons++;\n }\n if (window.navigator.clipboard) {\n addCopyButton(preElement, codeToolsElement);\n numberOfButtons++;\n }\n return numberOfButtons > 0;\n }\n\n function hasHideWhenFoldedSpans(preElement) {\n return !!preElement.querySelector(\"span.hide-when-folded\");\n }\n\n function addFoldUnfoldButton(preElement, codeToolsElement) {\n const foldUnfoldButton = createButton();\n updateFoldUnfoldButton(foldUnfoldButton, true);\n foldUnfoldButton.addEventListener(\n \"click\",\n onFoldUnfoldButtonClick.bind(foldUnfoldButton, preElement)\n );\n codeToolsElement.appendChild(foldUnfoldButton);\n }\n\n function addCopyButton(preElement, codeToolsElement) {\n const copyButton = createButton(\"Copy to clipboard\", \"copy-button\");\n copyButton.addEventListener(\n \"click\",\n onCopyButtonClick.bind(copyButton, preElement)\n );\n copyButton.addEventListener(\"mouseleave\", clearClicked.bind(copyButton));\n copyButton.addEventListener(\"blur\", clearClicked.bind(copyButton));\n const copiedPopup = document.createElement(\"span\");\n copyButton.appendChild(copiedPopup);\n copiedPopup.className = \"copied\";\n codeToolsElement.appendChild(copyButton);\n }\n\n function createButton(label, className) {\n const buttonElement = document.createElement(\"button\");\n buttonElement.className = className;\n buttonElement.title = label;\n buttonElement.type = \"button\";\n const labelElement = document.createElement(\"span\");\n labelElement.appendChild(document.createTextNode(label));\n labelElement.className = \"label\";\n buttonElement.appendChild(labelElement);\n return buttonElement;\n }\n }\n\n function onCopyButtonClick(preElement) {\n const codeElement = preElement.querySelector(\"code\");\n const copy = codeElement.cloneNode(true);\n for (const hideWhenFoldedElement of copy.querySelectorAll(\n \".hide-when-unfolded\"\n )) {\n hideWhenFoldedElement.parentNode.removeChild(hideWhenFoldedElement);\n }\n const text = copy.innerText;\n if (text) {\n window.navigator.clipboard\n .writeText(text + \"\\n\")\n .then(markClicked.bind(this));\n }\n }\n\n function markClicked() {\n this.classList.add(\"clicked\");\n }\n\n function clearClicked() {\n this.classList.remove(\"clicked\");\n }\n\n function onFoldUnfoldButtonClick(preElement) {\n const codeElement = preElement.querySelector(\"code\");\n const unfolding = !codeElement.classList.contains(\"unfolded\");\n codeElement.classList.remove(unfolding ? \"folding\" : \"unfolding\");\n codeElement.classList.add(unfolding ? \"unfolding\" : \"folding\");\n delay(function () {\n codeElement.classList.remove(unfolding ? \"unfolding\" : \"folding\");\n codeElement.classList.toggle(\"unfolded\");\n }, 1100);\n updateFoldUnfoldButton(this, !unfolding);\n }\n\n function updateFoldUnfoldButton(button, unfold) {\n const label = unfold ? \"Expand folded text\" : \"Collapse foldable text\";\n button.classList.remove(unfold ? \"fold-button\" : \"unfold-button\");\n button.classList.add(unfold ? \"unfold-button\" : \"fold-button\");\n button.querySelector(\"span.label\").innerText = label;\n button.title = label;\n }\n})();\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var baseDelay = require('./_baseDelay'),\n baseRest = require('./_baseRest'),\n toNumber = require('./toNumber');\n\n/**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\nvar delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n});\n\nmodule.exports = delay;\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n \"use strict\";\n\n const delay = require(\"lodash/delay\");\n\n addCodeToolElements();\n\n function addCodeToolElements() {\n for (const preElement of document.querySelectorAll(\".doc pre.highlight\")) {\n const codeToolsElement = document.createElement(\"div\");\n codeToolsElement.className = \"codetools\";\n if (addButtons(preElement, codeToolsElement)) {\n preElement.appendChild(codeToolsElement);\n }\n }\n\n function addButtons(preElement, codeToolsElement) {\n let numberOfButtons = 0;\n if (hasHideWhenFoldedSpans(preElement)) {\n addFoldUnfoldButton(preElement, codeToolsElement);\n numberOfButtons++;\n }\n if (window.navigator.clipboard) {\n addCopyButton(preElement, codeToolsElement);\n numberOfButtons++;\n }\n return numberOfButtons > 0;\n }\n\n function hasHideWhenFoldedSpans(preElement) {\n return !!preElement.querySelector(\"span.hide-when-folded\");\n }\n\n function addFoldUnfoldButton(preElement, codeToolsElement) {\n const foldUnfoldButton = createButton();\n updateFoldUnfoldButton(foldUnfoldButton, true);\n foldUnfoldButton.addEventListener(\n \"click\",\n onFoldUnfoldButtonClick.bind(foldUnfoldButton, preElement)\n );\n codeToolsElement.appendChild(foldUnfoldButton);\n }\n\n function addCopyButton(preElement, codeToolsElement) {\n const copyButton = createButton(\"Copy to clipboard\", \"copy-button\");\n copyButton.addEventListener(\n \"click\",\n onCopyButtonClick.bind(copyButton, preElement)\n );\n copyButton.addEventListener(\"mouseleave\", clearClicked.bind(copyButton));\n copyButton.addEventListener(\"blur\", clearClicked.bind(copyButton));\n const copiedPopup = document.createElement(\"span\");\n copyButton.appendChild(copiedPopup);\n copiedPopup.className = \"copied\";\n codeToolsElement.appendChild(copyButton);\n }\n\n function createButton(label, className) {\n const buttonElement = document.createElement(\"button\");\n buttonElement.className = className;\n buttonElement.title = label;\n buttonElement.type = \"button\";\n const labelElement = document.createElement(\"span\");\n labelElement.appendChild(document.createTextNode(label));\n labelElement.className = \"label\";\n buttonElement.appendChild(labelElement);\n return buttonElement;\n }\n }\n\n function onCopyButtonClick(preElement) {\n const codeElement = preElement.querySelector(\"code\");\n const copy = codeElement.cloneNode(true);\n for (const hideWhenFoldedElement of copy.querySelectorAll(\n \".hide-when-unfolded\"\n )) {\n hideWhenFoldedElement.parentNode.removeChild(hideWhenFoldedElement);\n }\n const text = copy.innerText;\n if (text) {\n window.navigator.clipboard\n .writeText(text + \"\\n\")\n .then(markClicked.bind(this));\n }\n }\n\n function markClicked() {\n this.classList.add(\"clicked\");\n }\n\n function clearClicked() {\n this.classList.remove(\"clicked\");\n }\n\n function onFoldUnfoldButtonClick(preElement) {\n const codeElement = preElement.querySelector(\"code\");\n const unfolding = !codeElement.classList.contains(\"unfolded\");\n codeElement.classList.remove(unfolding ? \"folding\" : \"unfolding\");\n codeElement.classList.add(unfolding ? \"unfolding\" : \"folding\");\n delay(function () {\n codeElement.classList.remove(unfolding ? \"unfolding\" : \"folding\");\n codeElement.classList.toggle(\"unfolded\");\n }, 1100);\n updateFoldUnfoldButton(this, !unfolding);\n }\n\n function updateFoldUnfoldButton(button, unfold) {\n const label = unfold ? \"Expand folded text\" : \"Collapse foldable text\";\n button.classList.remove(unfold ? \"fold-button\" : \"unfold-button\");\n button.classList.add(unfold ? \"unfold-button\" : \"fold-button\");\n button.querySelector(\"span.label\").innerText = label;\n button.title = label;\n }\n})();\n","\n}());","function deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear = obj.delete = obj.set = function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add = obj.clear = obj.delete = function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach(function (name) {\n var prop = obj[name];\n\n // Freeze prop if it is an object\n if (typeof prop == 'object' && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\nvar deepFreezeEs6 = deepFreeze;\nvar _default = deepFreeze;\ndeepFreezeEs6.default = _default;\n\n/** @implements CallbackResponse */\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record[]} objects\n * @returns {T} a single new object\n */\nfunction inherit(original, ...objects) {\n /** @type Record */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{kind?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '
';\n\n/**\n * Determines if a node needs to be wrapped in \n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n return !!node.kind;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n let className = node.kind;\n if (!node.sublanguage) {\n className = `${this.classPrefix}${className}`;\n }\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += ``;\n }\n}\n\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} | string} Node */\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} } DataNode */\n/** */\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = { children: [] };\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} kind */\n openNode(kind) {\n /** @type Node */\n const node = { kind, children: [] };\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addKeyword(text, kind)\n - addText(text)\n - addSublanguage(emitter, subLanguageName)\n - finalize()\n - openNode(kind)\n - closeNode()\n - closeAllNodes()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n * @param {string} kind\n */\n addKeyword(text, kind) {\n if (text === \"\") { return; }\n\n this.openNode(kind);\n this.addText(text);\n this.closeNode();\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n node.kind = name;\n node.sublanguage = true;\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\nfunction escape(value) {\n return new RegExp(value.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'm');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {string} separator\n * @returns {string}\n */\nfunction join(regexps, separator = \"|\") {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(separator);\n}\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit({\n className: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n className: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n className: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit(\n {\n className: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push(PHRASAL_WORDS_MODE);\n mode.contains.push({\n className: 'doctag',\n begin: '(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',\n relevance: 0\n });\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n className: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n className: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n className: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst CSS_NUMBER_MODE = {\n className: 'number',\n begin: NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n};\nconst REGEXP_MODE = {\n // this outer rule makes sure we actually have a WHOLE regex and not simply\n // an expression such as:\n //\n // 3 / something\n //\n // (which will then blow up when regex's `illegal` sees the newline)\n begin: /(?=\\/[^/\\n]*\\/)/,\n contains: [{\n className: 'regexp',\n begin: /\\//,\n end: /\\/[gimuy]*/,\n illegal: /\\n/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n }]\n};\nconst TITLE_MODE = {\n className: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n className: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n IDENT_RE: IDENT_RE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n NUMBER_RE: NUMBER_RE,\n C_NUMBER_RE: C_NUMBER_RE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n APOS_STRING_MODE: APOS_STRING_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n COMMENT: COMMENT,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n NUMBER_MODE: NUMBER_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n CSS_NUMBER_MODE: CSS_NUMBER_MODE,\n REGEXP_MODE: REGEXP_MODE,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\n METHOD_GUARD: METHOD_GUARD,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\n});\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfhasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfhasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_CLASSNAME = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record | Array} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, className = DEFAULT_KEYWORD_CLASSNAME) {\n /** @type KeywordDict */\n const compiledKeywords = {};\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing className (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(className, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(className, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(className) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[className], caseInsensitive, className)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} className\n * @param {Array} keywordList\n */\n function compileList(className, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [className, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @param {{plugins: HLJSPlugin[]}} opts\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language, { plugins }) {\n /**\n * Builds a regex with the case sensativility of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(join(terminators), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\") {\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n // both are not allowed\n if (mode.lexemes && keywordPattern) {\n throw new Error(\"ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) \");\n }\n\n // `mode.lexemes` was the old standard before we added and now recommend\n // using `keywords.$pattern` to pass the keyword pattern\n keywordPattern = keywordPattern || mode.lexemes || /\\w+/;\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(mode.begin);\n if (mode.endSameAsBegin) mode.end = mode.begin;\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(mode.end);\n cmode.terminatorEnd = source(mode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit(mode, { starts: mode.starts ? inherit(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"10.7.3\";\n\n// @ts-nocheck\n\nfunction hasValueOrEmptyAttribute(value) {\n return Boolean(value || value === \"\");\n}\n\nfunction BuildVuePlugin(hljs) {\n const Component = {\n props: [\"language\", \"code\", \"autodetect\"],\n data: function() {\n return {\n detectedLanguage: \"\",\n unknownLanguage: false\n };\n },\n computed: {\n className() {\n if (this.unknownLanguage) return \"\";\n\n return \"hljs \" + this.detectedLanguage;\n },\n highlighted() {\n // no idea what language to use, return raw code\n if (!this.autoDetect && !hljs.getLanguage(this.language)) {\n console.warn(`The language \"${this.language}\" you specified could not be found.`);\n this.unknownLanguage = true;\n return escapeHTML(this.code);\n }\n\n let result = {};\n if (this.autoDetect) {\n result = hljs.highlightAuto(this.code);\n this.detectedLanguage = result.language;\n } else {\n result = hljs.highlight(this.language, this.code, this.ignoreIllegals);\n this.detectedLanguage = this.language;\n }\n return result.value;\n },\n autoDetect() {\n return !this.language || hasValueOrEmptyAttribute(this.autodetect);\n },\n ignoreIllegals() {\n return true;\n }\n },\n // this avoids needing to use a whole Vue compilation pipeline just\n // to build Highlight.js\n render(createElement) {\n return createElement(\"pre\", {}, [\n createElement(\"code\", {\n class: this.className,\n domProps: { innerHTML: this.highlighted }\n })\n ]);\n }\n // template: `
`\n };\n\n const VuePlugin = {\n install(Vue) {\n Vue.component('highlightjs', Component);\n }\n };\n\n return { Component, VuePlugin };\n}\n\n/* plugin itself */\n\n/** @type {HLJSPlugin} */\nconst mergeHTMLPlugin = {\n \"after:highlightElement\": ({ el, result, text }) => {\n const originalStream = nodeStream(el);\n if (!originalStream.length) return;\n\n const resultNode = document.createElement('div');\n resultNode.innerHTML = result.value;\n result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n }\n};\n\n/* Stream merging support functions */\n\n/**\n * @typedef Event\n * @property {'start'|'stop'} event\n * @property {number} offset\n * @property {Node} node\n */\n\n/**\n * @param {Node} node\n */\nfunction tag(node) {\n return node.nodeName.toLowerCase();\n}\n\n/**\n * @param {Node} node\n */\nfunction nodeStream(node) {\n /** @type Event[] */\n const result = [];\n (function _nodeStream(node, offset) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n if (child.nodeType === 3) {\n offset += child.nodeValue.length;\n } else if (child.nodeType === 1) {\n result.push({\n event: 'start',\n offset: offset,\n node: child\n });\n offset = _nodeStream(child, offset);\n // Prevent void elements from having an end tag that would actually\n // double them in the output. There are more void elements in HTML\n // but we list only those realistically expected in code display.\n if (!tag(child).match(/br|hr|img|input/)) {\n result.push({\n event: 'stop',\n offset: offset,\n node: child\n });\n }\n }\n }\n return offset;\n })(node, 0);\n return result;\n}\n\n/**\n * @param {any} original - the original stream\n * @param {any} highlighted - stream of the highlighted source\n * @param {string} value - the original source itself\n */\nfunction mergeStreams(original, highlighted, value) {\n let processed = 0;\n let result = '';\n const nodeStack = [];\n\n function selectStream() {\n if (!original.length || !highlighted.length) {\n return original.length ? original : highlighted;\n }\n if (original[0].offset !== highlighted[0].offset) {\n return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n }\n\n /*\n To avoid starting the stream just before it should stop the order is\n ensured that original always starts first and closes last:\n\n if (event1 == 'start' && event2 == 'start')\n return original;\n if (event1 == 'start' && event2 == 'stop')\n return highlighted;\n if (event1 == 'stop' && event2 == 'start')\n return original;\n if (event1 == 'stop' && event2 == 'stop')\n return highlighted;\n\n ... which is collapsed to:\n */\n return highlighted[0].event === 'start' ? original : highlighted;\n }\n\n /**\n * @param {Node} node\n */\n function open(node) {\n /** @param {Attr} attr */\n function attributeString(attr) {\n return ' ' + attr.nodeName + '=\"' + escapeHTML(attr.value) + '\"';\n }\n // @ts-ignore\n result += '<' + tag(node) + [].map.call(node.attributes, attributeString).join('') + '>';\n }\n\n /**\n * @param {Node} node\n */\n function close(node) {\n result += '';\n }\n\n /**\n * @param {Event} event\n */\n function render(event) {\n (event.event === 'start' ? open : close)(event.node);\n }\n\n while (original.length || highlighted.length) {\n let stream = selectStream();\n result += escapeHTML(value.substring(processed, stream[0].offset));\n processed = stream[0].offset;\n if (stream === original) {\n /*\n On any opening or closing tag of the original markup we first close\n the entire highlighted node stack, then render the original tag along\n with all the following original tags at the same offset and then\n reopen all the tags on the highlighted stack.\n */\n nodeStack.reverse().forEach(close);\n do {\n render(stream.splice(0, 1)[0]);\n stream = selectStream();\n } while (stream === original && stream.length && stream[0].offset === processed);\n nodeStack.reverse().forEach(open);\n } else {\n if (stream[0].event === 'start') {\n nodeStack.push(stream[0].node);\n } else {\n nodeStack.pop();\n }\n render(stream.splice(0, 1)[0]);\n }\n }\n return result + escapeHTML(value.substr(processed));\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\nconst escape$1 = escapeHTML;\nconst inherit$1 = inherit;\nconst NO_MATCH = Symbol(\"nomatch\");\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record} */\n const languages = Object.create(null);\n /** @type {Record} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const fixMarkupRe = /(^(<[^>]+>|\\t|)+|\\n)/gm;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n tabReplace: null,\n useBR: false,\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrlanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode} [continuation] - current continuation mode, if any\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrlanguageName, optionsOrCode, ignoreIllegals, continuation) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrlanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n // continuation not supported at all via the new API\n // eslint-disable-next-line no-undefined\n continuation = undefined;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrlanguageName;\n code = optionsOrCode;\n }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals, continuation);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {RegExpMatchArray} match - regexp match data\n * @returns {KeywordData | false}\n */\n function keywordData(mode, match) {\n const matchText = language.case_insensitive ? match[0].toLowerCase() : match[0];\n return Object.prototype.hasOwnProperty.call(mode.keywords, matchText) && mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const data = keywordData(top, match);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitter.addKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substr(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result.top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.addSublanguage(result.emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {Mode} mode - new mode to start\n */\n function startNewMode(mode) {\n if (mode.className) {\n emitter.openNode(language.classNameAliases[mode.className] || mode.className);\n }\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexs to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode && newMode.endSameAsBegin) {\n newMode.endRe = escape(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode);\n // if (mode[\"after:begin\"]) {\n // let resp = new Response(mode);\n // mode[\"after:begin\"](match, resp);\n // }\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substr(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.className) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n if (endMode.endSameAsBegin) {\n endMode.starts.endRe = endMode.endRe;\n }\n startNewMode(endMode.starts);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.className) {\n list.unshift(current.className);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceeding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error('0 width match regex');\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? Only one occasion now. An end match that was\n triggered but could not be completed. When might this happen? When an `endSameasBegin`\n rule sets the end rule to a specific match. Since the overall mode termination rule that's\n being used to scan the text isn't recompiled that means that any match that LOOKS like\n the end (but is not, because it is not an exact match to the beginning) will\n end up here. A definite end match, but when `doEndMatch` tries to \"reapply\"\n the end rule and fails to match, we wind up here, and just silently ignore the end.\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language, { plugins });\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substr(index));\n emitter.closeAllNodes();\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n // avoid possible breakage with v10 clients expecting\n // this to always be an integer\n relevance: Math.floor(relevance),\n value: result,\n language: languageName,\n illegal: false,\n emitter: emitter,\n top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n illegal: true,\n illegalBy: {\n msg: err.message,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode\n },\n sofar: result,\n relevance: 0,\n value: escape$1(codeToHighlight),\n emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n illegal: false,\n relevance: 0,\n value: escape$1(codeToHighlight),\n emitter: emitter,\n language: languageName,\n top: top,\n errorRaised: err\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n relevance: 0,\n emitter: new options.__emitter(options),\n value: escape$1(code),\n illegal: false,\n top: PLAINTEXT_LANGUAGE\n };\n result.emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - second_best (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.second_best = secondBest;\n\n return result;\n }\n\n /**\n Post-processing of the highlighted markup:\n\n - replace TABs with something more useful\n - replace real line-breaks with '
' for non-pre containers\n\n @param {string} html\n @returns {string}\n */\n function fixMarkup(html) {\n if (!(options.tabReplace || options.useBR)) {\n return html;\n }\n\n return html.replace(fixMarkupRe, match => {\n if (match === '\\n') {\n return options.useBR ? '
' : match;\n } else if (options.tabReplace) {\n return match.replace(/\\t/g, options.tabReplace);\n }\n return match;\n });\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = currentLang ? aliases[currentLang] : resultLang;\n\n element.classList.add(\"hljs\");\n if (language) element.classList.add(language);\n }\n\n /** @type {HLJSPlugin} */\n const brPlugin = {\n \"before:highlightElement\": ({ el }) => {\n if (options.useBR) {\n el.innerHTML = el.innerHTML.replace(/\\n/g, '').replace(//g, '\\n');\n }\n },\n \"after:highlightElement\": ({ result }) => {\n if (options.useBR) {\n result.value = result.value.replace(/\\n/g, \"
\");\n }\n }\n };\n\n const TAB_REPLACE_RE = /^(<[^>]+>|\\t)+/gm;\n /** @type {HLJSPlugin} */\n const tabReplacePlugin = {\n \"after:highlightElement\": ({ result }) => {\n if (options.tabReplace) {\n result.value = result.value.replace(TAB_REPLACE_RE, (m) =>\n m.replace(/\\t/g, options.tabReplace)\n );\n }\n }\n };\n\n /**\n * Applies highlighting to a DOM node containing code. Accepts a DOM node and\n * two optional parameters for fixMarkup.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n // support for v10 API\n fire(\"before:highlightElement\",\n { el: element, language: language });\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n // support for v10 API\n fire(\"after:highlightElement\", { el: element, result, text });\n\n element.innerHTML = result.value;\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relavance: result.relevance\n };\n if (result.second_best) {\n element.second_best = {\n language: result.second_best.language,\n // TODO: remove with version 11.0\n re: result.second_best.relevance,\n relavance: result.second_best.relevance\n };\n }\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial} userOptions\n */\n function configure(userOptions) {\n if (userOptions.useBR) {\n deprecated(\"10.3.0\", \"'useBR' will be removed entirely in v11.0\");\n deprecated(\"10.3.0\", \"Please see https://github.com/highlightjs/highlight.js/issues/2559\");\n }\n options = inherit$1(options, userOptions);\n }\n\n /**\n * Highlights to all
 blocks on a page\n   *\n   * @type {Function & {called?: boolean}}\n   */\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    if (initHighlighting.called) return;\n    initHighlighting.called = true;\n\n    deprecated(\"10.6.0\", \"initHighlighting() is deprecated.  Use highlightAll() instead.\");\n\n    const blocks = document.querySelectorAll('pre code');\n    blocks.forEach(highlightElement);\n  };\n\n  // Higlights all when DOMContentLoaded fires\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() is deprecated.  Use highlightAll() instead.\");\n    wantsHighlight = true;\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll('pre code');\n    blocks.forEach(highlightElement);\n  }\n\n  function boot() {\n    // if a highlight was requested before DOM was loaded, do now\n    if (wantsHighlight) highlightAll();\n  }\n\n  // make sure we are in the browser environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('DOMContentLoaded', boot, false);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n    intended usage: When one language truly requires another\n\n    Unlike `getLanguage`, this will throw when the requested language\n    is not available.\n\n    @param {string} name - name of the language to fetch/require\n    @returns {Language | never}\n  */\n  function requireLanguage(name) {\n    deprecated(\"10.4.0\", \"requireLanguage will be removed entirely in v11.\");\n    deprecated(\"10.4.0\", \"Please see https://github.com/highlightjs/highlight.js/pull/2844\");\n\n    const lang = getLanguage(name);\n    if (lang) { return lang; }\n\n    const err = new Error('The \\'{}\\' language is required, but not loaded.'.replace('{}', name));\n    throw err;\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n  Note: fixMarkup is deprecated and will be removed entirely in v11\n\n  @param {string} arg\n  @returns {string}\n  */\n  function deprecateFixMarkup(arg) {\n    deprecated(\"10.2.0\", \"fixMarkup will be removed entirely in v11.0\");\n    deprecated(\"10.2.0\", \"Please see https://github.com/highlightjs/highlight.js/issues/2534\");\n\n    return fixMarkup(arg);\n  }\n\n  /**\n   *\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    fixMarkup: deprecateFixMarkup,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    requireLanguage,\n    autoDetection,\n    inherit: inherit$1,\n    addPlugin,\n    // plugins for frameworks\n    vuePlugin: BuildVuePlugin(hljs).VuePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreezeEs6(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexs into our main object\n  Object.assign(hljs, MODES);\n\n  // built-in plugins, likely to be moved out of core in the future\n  hljs.addPlugin(brPlugin); // slated to be removed in v11\n  hljs.addPlugin(mergeHTMLPlugin);\n  hljs.addPlugin(tabReplacePlugin);\n  return hljs;\n};\n\n// export an \"instance\" of the highlighter\nvar highlight = HLJS({});\n\nmodule.exports = highlight;\n","/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function () {\n  'use strict';\n\n  const highlightJs = require('highlight.js/lib/core');\n\n  highlightJs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc'));\n  highlightJs.registerLanguage('bash', require('highlight.js/lib/languages/bash'));\n  highlightJs.registerLanguage('css', require('highlight.js/lib/languages/css'));\n  highlightJs.registerLanguage('diff', require('highlight.js/lib/languages/diff'));\n  highlightJs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile'));\n  highlightJs.registerLanguage('dos', require('highlight.js/lib/languages/dos'));\n  highlightJs.registerLanguage('gradle', require('highlight.js/lib/languages/gradle'));\n  highlightJs.registerLanguage('groovy', require('highlight.js/lib/languages/groovy'));\n  highlightJs.registerLanguage('http', require('highlight.js/lib/languages/http'));\n  highlightJs.registerLanguage('java', require('highlight.js/lib/languages/java'));\n  highlightJs.registerLanguage('javascript',require('highlight.js/lib/languages/javascript'));\n  highlightJs.registerLanguage('json', require('highlight.js/lib/languages/json'));\n  highlightJs.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin'));\n  highlightJs.registerLanguage('markdown', require('highlight.js/lib/languages/markdown'));\n  highlightJs.registerLanguage('nix', require('highlight.js/lib/languages/nix'));\n  highlightJs.registerLanguage('powershell', require('highlight.js/lib/languages/powershell'));\n  highlightJs.registerLanguage('properties', require('highlight.js/lib/languages/properties'));\n  highlightJs.registerLanguage('ruby', require('highlight.js/lib/languages/ruby'));\n  highlightJs.registerLanguage('scala', require('highlight.js/lib/languages/scala'));\n  highlightJs.registerLanguage('shell', require('highlight.js/lib/languages/shell'));\n  highlightJs.registerLanguage('sql', require('highlight.js/lib/languages/sql'));\n  highlightJs.registerLanguage('xml', require('highlight.js/lib/languages/xml'));\n  highlightJs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml'));\n\n  highlightJs.configure({ignoreUnescapedHTML: true});\n\n  for(const codeElement of document.querySelectorAll('pre.highlight > code')) {\n    highlightJs.highlightBlock(codeElement);\n  }\n\n})();\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: AsciiDoc\nRequires: xml.js\nAuthor: Dan Allen \nWebsite: http://asciidoc.org\nDescription: A semantic, text-based document format that can be exported to HTML, DocBook and other backends.\nCategory: markup\n*/\n\n/** @type LanguageFn */\nfunction asciidoc(hljs) {\n  const HORIZONTAL_RULE = {\n    begin: '^\\'{3,}[ \\\\t]*$',\n    relevance: 10\n  };\n  const ESCAPED_FORMATTING = [\n    // escaped constrained formatting marks (i.e., \\* \\_ or \\`)\n    {\n      begin: /\\\\[*_`]/\n    },\n    // escaped unconstrained formatting marks (i.e., \\\\** \\\\__ or \\\\``)\n    // must ignore until the next formatting marks\n    // this rule might not be 100% compliant with Asciidoctor 2.0 but we are entering undefined behavior territory...\n    {\n      begin: /\\\\\\\\\\*{2}[^\\n]*?\\*{2}/\n    },\n    {\n      begin: /\\\\\\\\_{2}[^\\n]*_{2}/\n    },\n    {\n      begin: /\\\\\\\\`{2}[^\\n]*`{2}/\n    },\n    // guard: constrained formatting mark may not be preceded by \":\", \";\" or\n    // \"}\". match these so the constrained rule doesn't see them\n    {\n      begin: /[:;}][*_`](?![*_`])/\n    }\n  ];\n  const STRONG = [\n    // inline unconstrained strong (single line)\n    {\n      className: 'strong',\n      begin: /\\*{2}([^\\n]+?)\\*{2}/\n    },\n    // inline unconstrained strong (multi-line)\n    {\n      className: 'strong',\n      begin: concat(\n        /\\*\\*/,\n        /((\\*(?!\\*)|\\\\[^\\n]|[^*\\n\\\\])+\\n)+/,\n        /(\\*(?!\\*)|\\\\[^\\n]|[^*\\n\\\\])*/,\n        /\\*\\*/\n      ),\n      relevance: 0\n    },\n    // inline constrained strong (single line)\n    {\n      className: 'strong',\n      // must not precede or follow a word character\n      begin: /\\B\\*(\\S|\\S[^\\n]*?\\S)\\*(?!\\w)/\n    },\n    // inline constrained strong (multi-line)\n    {\n      className: 'strong',\n      // must not precede or follow a word character\n      begin: /\\*[^\\s]([^\\n]+\\n)+([^\\n]+)\\*/\n    }\n  ];\n  const EMPHASIS = [\n    // inline unconstrained emphasis (single line)\n    {\n      className: 'emphasis',\n      begin: /_{2}([^\\n]+?)_{2}/\n    },\n    // inline unconstrained emphasis (multi-line)\n    {\n      className: 'emphasis',\n      begin: concat(\n        /__/,\n        /((_(?!_)|\\\\[^\\n]|[^_\\n\\\\])+\\n)+/,\n        /(_(?!_)|\\\\[^\\n]|[^_\\n\\\\])*/,\n        /__/\n      ),\n      relevance: 0\n    },\n    // inline constrained emphasis (single line)\n    {\n      className: 'emphasis',\n      // must not precede or follow a word character\n      begin: /\\b_(\\S|\\S[^\\n]*?\\S)_(?!\\w)/\n    },\n    // inline constrained emphasis (multi-line)\n    {\n      className: 'emphasis',\n      // must not precede or follow a word character\n      begin: /_[^\\s]([^\\n]+\\n)+([^\\n]+)_/\n    },\n    // inline constrained emphasis using single quote (legacy)\n    {\n      className: 'emphasis',\n      // must not follow a word character or be followed by a single quote or space\n      begin: '\\\\B\\'(?![\\'\\\\s])',\n      end: '(\\\\n{2}|\\')',\n      // allow escaped single quote followed by word char\n      contains: [{\n        begin: '\\\\\\\\\\'\\\\w',\n        relevance: 0\n      }],\n      relevance: 0\n    }\n  ];\n  const ADMONITION = {\n    className: 'symbol',\n    begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+',\n    relevance: 10\n  };\n  const BULLET_LIST = {\n    className: 'bullet',\n    begin: '^(\\\\*+|-+|\\\\.+|[^\\\\n]+?::)\\\\s+'\n  };\n\n  return {\n    name: 'AsciiDoc',\n    aliases: ['adoc'],\n    contains: [\n      // block comment\n      hljs.COMMENT(\n        '^/{4,}\\\\n',\n        '\\\\n/{4,}$',\n        // can also be done as...\n        // '^/{4,}$',\n        // '^/{4,}$',\n        {\n          relevance: 10\n        }\n      ),\n      // line comment\n      hljs.COMMENT(\n        '^//',\n        '$',\n        {\n          relevance: 0\n        }\n      ),\n      // title\n      {\n        className: 'title',\n        begin: '^\\\\.\\\\w.*$'\n      },\n      // example, admonition & sidebar blocks\n      {\n        begin: '^[=\\\\*]{4,}\\\\n',\n        end: '\\\\n^[=\\\\*]{4,}$',\n        relevance: 10\n      },\n      // headings\n      {\n        className: 'section',\n        relevance: 10,\n        variants: [\n          {\n            begin: '^(={1,6})[ \\t].+?([ \\t]\\\\1)?$'\n          },\n          {\n            begin: '^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$'\n          }\n        ]\n      },\n      // document attributes\n      {\n        className: 'meta',\n        begin: '^:.+?:',\n        end: '\\\\s',\n        excludeEnd: true,\n        relevance: 10\n      },\n      // block attributes\n      {\n        className: 'meta',\n        begin: '^\\\\[.+?\\\\]$',\n        relevance: 0\n      },\n      // quoteblocks\n      {\n        className: 'quote',\n        begin: '^_{4,}\\\\n',\n        end: '\\\\n_{4,}$',\n        relevance: 10\n      },\n      // listing and literal blocks\n      {\n        className: 'code',\n        begin: '^[\\\\-\\\\.]{4,}\\\\n',\n        end: '\\\\n[\\\\-\\\\.]{4,}$',\n        relevance: 10\n      },\n      // passthrough blocks\n      {\n        begin: '^\\\\+{4,}\\\\n',\n        end: '\\\\n\\\\+{4,}$',\n        contains: [{\n          begin: '<',\n          end: '>',\n          subLanguage: 'xml',\n          relevance: 0\n        }],\n        relevance: 10\n      },\n\n      BULLET_LIST,\n      ADMONITION,\n      ...ESCAPED_FORMATTING,\n      ...STRONG,\n      ...EMPHASIS,\n\n      // inline smart quotes\n      {\n        className: 'string',\n        variants: [\n          {\n            begin: \"``.+?''\"\n          },\n          {\n            begin: \"`.+?'\"\n          }\n        ]\n      },\n      // inline unconstrained emphasis\n      {\n        className: 'code',\n        begin: /`{2}/,\n        end: /(\\n{2}|`{2})/\n      },\n      // inline code snippets (TODO should get same treatment as strong and emphasis)\n      {\n        className: 'code',\n        begin: '(`.+?`|\\\\+.+?\\\\+)',\n        relevance: 0\n      },\n      // indented literal block\n      {\n        className: 'code',\n        begin: '^[ \\\\t]',\n        end: '$',\n        relevance: 0\n      },\n      HORIZONTAL_RULE,\n      // images and links\n      {\n        begin: '(link:)?(http|https|ftp|file|irc|image:?):\\\\S+?\\\\[[^[]*?\\\\]',\n        returnBegin: true,\n        contains: [\n          {\n            begin: '(link|image:?):',\n            relevance: 0\n          },\n          {\n            className: 'link',\n            begin: '\\\\w',\n            end: '[^\\\\[]+',\n            relevance: 0\n          },\n          {\n            className: 'string',\n            begin: '\\\\[',\n            end: '\\\\]',\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          }\n        ],\n        relevance: 10\n      }\n    ]\n  };\n}\n\nmodule.exports = asciidoc;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: Bash\nAuthor: vah \nContributrors: Benjamin Pannell \nWebsite: https://www.gnu.org/software/bash/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/,\n    end:/\\}/,\n    contains: [\n      \"self\",\n      {\n        begin: /:-/,\n        contains: [ VAR ]\n      } // default values\n    ]\n  };\n  Object.assign(VAR,{\n    className: 'variable',\n    variants: [\n      {begin: concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![\\\\w\\\\d])(?![$])`) },\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/, end: /\\)/,\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  const HERE_DOC = {\n    begin: /<<-?\\s*(?=\\w+)/,\n    starts: {\n      contains: [\n        hljs.END_SAME_AS_BEGIN({\n          begin: /(\\w+)/,\n          end: /(\\w+)/,\n          className: 'string'\n        })\n      ]\n    }\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/, end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    className: '',\n    begin: /\\\\\"/\n\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/, end: /'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      { begin: /\\d+#[0-9a-f]+/, className: \"number\" },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SH_LIKE_SHELLS = [\n    \"fish\",\n    \"bash\",\n    \"zsh\",\n    \"sh\",\n    \"csh\",\n    \"ksh\",\n    \"tcsh\",\n    \"dash\",\n    \"scsh\",\n  ];\n  const KNOWN_SHEBANG = hljs.SHEBANG({\n    binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n    relevance: 10\n  });\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n    relevance: 0\n  };\n\n  return {\n    name: 'Bash',\n    aliases: ['sh', 'zsh'],\n    keywords: {\n      $pattern: /\\b[a-z._-]+\\b/,\n      keyword:\n        'if then else elif fi for while in do done case esac function',\n      literal:\n        'true false',\n      built_in:\n        // Shell built-ins\n        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n        'trap umask unset ' +\n        // Bash built-ins\n        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n        'read readarray source type typeset ulimit unalias ' +\n        // Shell modifiers\n        'set shopt ' +\n        // Zsh built-ins\n        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n        'zpty zregexparse zsocket zstyle ztcp'\n    },\n    contains: [\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n      FUNCTION,\n      ARITHMETIC,\n      hljs.HASH_COMMENT_MODE,\n      HERE_DOC,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      VAR\n    ]\n  };\n}\n\nmodule.exports = bash;\n","const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      className: 'meta',\n      begin: '!important'\n    },\n    HEXCOLOR: {\n      className: 'number',\n      begin: '#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})'\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      className: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'auto',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'border',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'clear',\n  'clip',\n  'clip-path',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'content',\n  'counter-increment',\n  'counter-reset',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-variant-ligatures',\n  'font-variation-settings',\n  'font-weight',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inherit',\n  'initial',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-bottom',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'max-height',\n  'max-width',\n  'min-height',\n  'min-width',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-bottom',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'right',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-last',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-indent',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'white-space',\n  'widows',\n  'width',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: CSS\nCategory: common, css\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n/** @type LanguageFn */\nfunction css(hljs) {\n  const modes = MODES(hljs);\n  const FUNCTION_DISPATCH = {\n    className: \"built_in\",\n    begin: /[\\w-]+(?=\\()/\n  };\n  const VENDOR_PREFIX = {\n    begin: /-(webkit|moz|ms|o)-(?=[a-z])/\n  };\n  const AT_MODIFIERS = \"and or not only\";\n  const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const STRINGS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ];\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=|'\\$]/,\n    keywords: {\n      keyframePosition: \"from to\"\n    },\n    classNameAliases: {\n      // for visual continuity with `tag {}` and because we\n      // don't have a great class for this?\n      keyframePosition: \"selector-tag\"\n    },\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      VENDOR_PREFIX,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      hljs.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: /#[A-Za-z0-9_-]+/,\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.' + IDENT_RE,\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        variants: [\n          {\n            begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n          },\n          {\n            begin: '::(' + PSEUDO_ELEMENTS.join('|') + ')'\n          }\n        ]\n      },\n      // we may actually need this (12/2020)\n      // { // pseudo-selector params\n      //   begin: /\\(/,\n      //   end: /\\)/,\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\n      // },\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      // attribute values\n      {\n        begin: ':',\n        end: '[;}]',\n        contains: [\n          modes.HEXCOLOR,\n          modes.IMPORTANT,\n          hljs.CSS_NUMBER_MODE,\n          ...STRINGS,\n          // needed to highlight these as strings and to avoid issues with\n          // illegal characters that might be inside urls that would tigger the\n          // languages illegal stack\n          {\n            begin: /(url|data-uri)\\(/,\n            end: /\\)/,\n            relevance: 0, // from keywords\n            keywords: {\n              built_in: \"url data-uri\"\n            },\n            contains: [\n              {\n                className: \"string\",\n                // any character other than `)` as in `url()` will be the start\n                // of a string, which ends with `)` (from the parent mode)\n                begin: /[^)]/,\n                endsWithParent: true,\n                excludeEnd: true\n              }\n            ]\n          },\n          FUNCTION_DISPATCH\n        ]\n      },\n      {\n        begin: lookahead(/@/),\n        end: '[{;]',\n        relevance: 0,\n        illegal: /:/, // break on Less variables @var: ...\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/,\n            endsWithParent: true,\n            excludeEnd: true,\n            relevance: 0,\n            keywords: {\n              $pattern: /[a-z-]+/,\n              keyword: AT_MODIFIERS,\n              attribute: MEDIA_FEATURES.join(\" \")\n            },\n            contains: [\n              {\n                begin: /[a-z-]+(?=:)/,\n                className: \"attribute\"\n              },\n              ...STRINGS,\n              hljs.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n      }\n    ]\n  };\n}\n\nmodule.exports = css;\n","/*\nLanguage: Diff\nDescription: Unified and context diff\nAuthor: Vasily Polovnyov \nWebsite: https://www.gnu.org/software/diffutils/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction diff(hljs) {\n  return {\n    name: 'Diff',\n    aliases: ['patch'],\n    contains: [\n      {\n        className: 'meta',\n        relevance: 10,\n        variants: [\n          {\n            begin: /^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/\n          },\n          {\n            begin: /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/\n          },\n          {\n            begin: /^--- +\\d+,\\d+ +----$/\n          }\n        ]\n      },\n      {\n        className: 'comment',\n        variants: [\n          {\n            begin: /Index: /,\n            end: /$/\n          },\n          {\n            begin: /^index/,\n            end: /$/\n          },\n          {\n            begin: /={3,}/,\n            end: /$/\n          },\n          {\n            begin: /^-{3}/,\n            end: /$/\n          },\n          {\n            begin: /^\\*{3} /,\n            end: /$/\n          },\n          {\n            begin: /^\\+{3}/,\n            end: /$/\n          },\n          {\n            begin: /^\\*{15}$/\n          },\n          {\n            begin: /^diff --git/,\n            end: /$/\n          }\n        ]\n      },\n      {\n        className: 'addition',\n        begin: /^\\+/,\n        end: /$/\n      },\n      {\n        className: 'deletion',\n        begin: /^-/,\n        end: /$/\n      },\n      {\n        className: 'addition',\n        begin: /^!/,\n        end: /$/\n      }\n    ]\n  };\n}\n\nmodule.exports = diff;\n","/*\nLanguage: Dockerfile\nRequires: bash.js\nAuthor: Alexis Hénaut \nDescription: language definition for Dockerfile files\nWebsite: https://docs.docker.com/engine/reference/builder/\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction dockerfile(hljs) {\n  return {\n    name: 'Dockerfile',\n    aliases: ['docker'],\n    case_insensitive: true,\n    keywords: 'from maintainer expose env arg user onbuild stopsignal',\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      {\n        beginKeywords: 'run cmd entrypoint volume add copy workdir label healthcheck shell',\n        starts: {\n          end: /[^\\\\]$/,\n          subLanguage: 'bash'\n        }\n      }\n    ],\n    illegal: '\nContributors: Anton Kochkov \nWebsite: https://en.wikipedia.org/wiki/Batch_file\n*/\n\n/** @type LanguageFn */\nfunction dos(hljs) {\n  const COMMENT = hljs.COMMENT(\n    /^\\s*@?rem\\b/, /$/,\n    {\n      relevance: 10\n    }\n  );\n  const LABEL = {\n    className: 'symbol',\n    begin: '^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)',\n    relevance: 0\n  };\n  return {\n    name: 'Batch file (DOS)',\n    aliases: [\n      'bat',\n      'cmd'\n    ],\n    case_insensitive: true,\n    illegal: /\\/\\*/,\n    keywords: {\n      keyword:\n        'if else goto for in do call exit not exist errorlevel defined ' +\n        'equ neq lss leq gtr geq',\n      built_in:\n        'prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux ' +\n        'shift cd dir echo setlocal endlocal set pause copy ' +\n        'append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color ' +\n        'comp compact convert date dir diskcomp diskcopy doskey erase fs ' +\n        'find findstr format ftype graftabl help keyb label md mkdir mode more move path ' +\n        'pause print popd pushd promt rd recover rem rename replace restore rmdir shift ' +\n        'sort start subst time title tree type ver verify vol ' +\n        // winutils\n        'ping net ipconfig taskkill xcopy ren del'\n    },\n    contains: [\n      {\n        className: 'variable',\n        begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/\n      },\n      {\n        className: 'function',\n        begin: LABEL.begin,\n        end: 'goto:eof',\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {\n            begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*'\n          }),\n          COMMENT\n        ]\n      },\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d+',\n        relevance: 0\n      },\n      COMMENT\n    ]\n  };\n}\n\nmodule.exports = dos;\n","/*\nLanguage: Gradle\nDescription: Gradle is an open-source build automation tool focused on flexibility and performance.\nWebsite: https://gradle.org\nAuthor: Damian Mee \n*/\n\nfunction gradle(hljs) {\n  return {\n    name: 'Gradle',\n    case_insensitive: true,\n    keywords: {\n      keyword:\n        'task project allprojects subprojects artifacts buildscript configurations ' +\n        'dependencies repositories sourceSets description delete from into include ' +\n        'exclude source classpath destinationDir includes options sourceCompatibility ' +\n        'targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant ' +\n        'def abstract break case catch continue default do else extends final finally ' +\n        'for if implements instanceof native new private protected public return static ' +\n        'switch synchronized throw throws transient try volatile while strictfp package ' +\n        'import false null super this true antlrtask checkstyle codenarc copy boolean ' +\n        'byte char class double float int interface long short void compile runTime ' +\n        'file fileTree abs any append asList asWritable call collect compareTo count ' +\n        'div dump each eachByte eachFile eachLine every find findAll flatten getAt ' +\n        'getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods ' +\n        'isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter ' +\n        'newReader newWriter next plus pop power previous print println push putAt read ' +\n        'readBytes readLines reverse reverseEach round size sort splitEachLine step subMap ' +\n        'times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader ' +\n        'withStream withWriter withWriterAppend write writeLine'\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      hljs.REGEXP_MODE\n\n    ]\n  };\n}\n\nmodule.exports = gradle;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\n Language: Groovy\n Author: Guillaume Laforge \n Description: Groovy programming language implementation inspired from Vsevolod's Java mode\n Website: https://groovy-lang.org\n */\n\nfunction variants(variants, obj = {}) {\n  obj.variants = variants;\n  return obj;\n}\n\nfunction groovy(hljs) {\n  const IDENT_RE = '[A-Za-z0-9_$]+';\n  const COMMENT = variants([\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.COMMENT(\n      '/\\\\*\\\\*',\n      '\\\\*/',\n      {\n        relevance: 0,\n        contains: [\n          {\n            // eat up @'s in emails to prevent them to be recognized as doctags\n            begin: /\\w+@/,\n            relevance: 0\n          },\n          {\n            className: 'doctag',\n            begin: '@[A-Za-z]+'\n          }\n        ]\n      }\n    )\n  ]);\n  const REGEXP = {\n    className: 'regexp',\n    begin: /~?\\/[^\\/\\n]+\\//,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const NUMBER = variants([\n    hljs.BINARY_NUMBER_MODE,\n    hljs.C_NUMBER_MODE\n  ]);\n  const STRING = variants([\n    {\n      begin: /\"\"\"/,\n      end: /\"\"\"/\n    },\n    {\n      begin: /'''/,\n      end: /'''/\n    },\n    {\n      begin: \"\\\\$/\",\n      end: \"/\\\\$\",\n      relevance: 10\n    },\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ],\n  {\n    className: \"string\"\n  }\n  );\n\n  return {\n    name: 'Groovy',\n    keywords: {\n      built_in: 'this super',\n      literal: 'true false null',\n      keyword:\n            'byte short char int long boolean float double void ' +\n            // groovy specific keywords\n            'def as in assert trait ' +\n            // common keywords with Java\n            'abstract static volatile transient public private protected synchronized final ' +\n            'class interface enum if else for while switch case break default continue ' +\n            'throw throws try catch finally implements extends new import package return instanceof'\n    },\n    contains: [\n      hljs.SHEBANG({\n        binary: \"groovy\",\n        relevance: 10\n      }),\n      COMMENT,\n      STRING,\n      REGEXP,\n      NUMBER,\n      {\n        className: 'class',\n        beginKeywords: 'class interface trait enum',\n        end: /\\{/,\n        illegal: ':',\n        contains: [\n          {\n            beginKeywords: 'extends implements'\n          },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        className: 'meta',\n        begin: '@[A-Za-z]+',\n        relevance: 0\n      },\n      {\n        // highlight map keys and named parameters as attrs\n        className: 'attr',\n        begin: IDENT_RE + '[ \\t]*:',\n        relevance: 0\n      },\n      {\n        // catch middle element of the ternary operator\n        // to avoid highlight it as a label, named parameter, or map key\n        begin: /\\?/,\n        end: /:/,\n        relevance: 0,\n        contains: [\n          COMMENT,\n          STRING,\n          REGEXP,\n          NUMBER,\n          'self'\n        ]\n      },\n      {\n        // highlight labeled statements\n        className: 'symbol',\n        begin: '^[ \\t]*' + lookahead(IDENT_RE + ':'),\n        excludeBegin: true,\n        end: IDENT_RE + ':',\n        relevance: 0\n      }\n    ],\n    illegal: /#|<\\//\n  };\n}\n\nmodule.exports = groovy;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: HTTP\nDescription: HTTP request and response headers with automatic body highlighting\nAuthor: Ivan Sagalaev \nCategory: common, protocols\nWebsite: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview\n*/\n\nfunction http(hljs) {\n  const VERSION = 'HTTP/(2|1\\\\.[01])';\n  const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/;\n  const HEADER = {\n    className: 'attribute',\n    begin: concat('^', HEADER_NAME, '(?=\\\\:\\\\s)'),\n    starts: {\n      contains: [\n        {\n          className: \"punctuation\",\n          begin: /: /,\n          relevance: 0,\n          starts: {\n            end: '$',\n            relevance: 0\n          }\n        }\n      ]\n    }\n  };\n  const HEADERS_AND_BODY = [\n    HEADER,\n    {\n      begin: '\\\\n\\\\n',\n      starts: { subLanguage: [], endsWithParent: true }\n    }\n  ];\n\n  return {\n    name: 'HTTP',\n    aliases: ['https'],\n    illegal: /\\S/,\n    contains: [\n      // response\n      {\n        begin: '^(?=' + VERSION + \" \\\\d{3})\",\n        end: /$/,\n        contains: [\n          {\n            className: \"meta\",\n            begin: VERSION\n          },\n          {\n            className: 'number', begin: '\\\\b\\\\d{3}\\\\b'\n          }\n        ],\n        starts: {\n          end: /\\b\\B/,\n          illegal: /\\S/,\n          contains: HEADERS_AND_BODY\n        }\n      },\n      // request\n      {\n        begin: '(?=^[A-Z]+ (.*?) ' + VERSION + '$)',\n        end: /$/,\n        contains: [\n          {\n            className: 'string',\n            begin: ' ',\n            end: ' ',\n            excludeBegin: true,\n            excludeEnd: true\n          },\n          {\n            className: \"meta\",\n            begin: VERSION\n          },\n          {\n            className: 'keyword',\n            begin: '[A-Z]+'\n          }\n        ],\n        starts: {\n          end: /\\b\\B/,\n          illegal: /\\S/,\n          contains: HEADERS_AND_BODY\n        }\n      },\n      // to allow headers to work even without a preamble\n      hljs.inherit(HEADER, {\n        relevance: 0\n      })\n    ]\n  };\n}\n\nmodule.exports = http;\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov \nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\nfunction java(hljs) {\n  var JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\\\s*,\\\\s*' + JAVA_IDENT_RE + ')*>)?';\n  var KEYWORDS = 'false synchronized int abstract float private char boolean var static null if const ' +\n    'for true while long strictfp finally protected import native final void ' +\n    'enum else break transient catch instanceof byte super volatile case assert short ' +\n    'package default double public try this switch continue throws protected public private ' +\n    'module requires exports do';\n\n  var ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\"self\"] // allow nested () inside our annotation\n      },\n    ]\n  };\n  const NUMBER = NUMERIC;\n\n  return {\n    name: 'Java',\n    aliases: ['jsp'],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/, relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      // relevance boost\n      {\n        begin: /import java\\.[a-z]+\\./,\n        keywords: \"import\",\n        relevance: 2\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'class',\n        beginKeywords: 'class interface enum', end: /[{;=]/, excludeEnd: true,\n        // TODO: can this be removed somehow?\n        // an extra boost because Java is more popular than other languages with\n        // this same syntax feature (this is just to preserve our tests passing\n        // for now)\n        relevance: 1,\n        keywords: 'class interface enum',\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        className: 'class',\n        begin: 'record\\\\s+' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n        returnBegin: true,\n        excludeEnd: true,\n        end: /[{;=]/,\n        keywords: KEYWORDS,\n        contains: [\n          { beginKeywords: \"record\" },\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n            returnBegin: true,\n            relevance: 0,\n            contains: [hljs.UNDERSCORE_TITLE_MODE]\n          },\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        className: 'function',\n        begin: '(' + GENERIC_IDENT_RE + '\\\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true, end: /[{;=]/,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true,\n            relevance: 0,\n            contains: [hljs.UNDERSCORE_TITLE_MODE]\n          },\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              NUMBER,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      NUMBER,\n      ANNOTATION\n    ]\n  };\n}\n\nmodule.exports = java;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\nconst TYPES = [\n  \"Intl\",\n  \"DataView\",\n  \"Number\",\n  \"Math\",\n  \"Date\",\n  \"String\",\n  \"RegExp\",\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Error\",\n  \"Symbol\",\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  \"Proxy\",\n  \"Reflect\",\n  \"JSON\",\n  \"Promise\",\n  \"Float64Array\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Int8Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"Float32Array\",\n  \"Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"ArrayBuffer\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  \"BigInt\"\n];\n\nconst ERROR_TYPES = [\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  BUILT_IN_VARIABLES,\n  TYPES,\n  ERROR_TYPES\n);\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  /**\n   * Takes a string like \" {\n    const tag = \"',\n    end: ''\n  };\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      // nested type?\n      // HTML should not include another raw `<` inside a tag\n      // But a type might: `>`, etc.\n      if (nextChar === \"<\") {\n        response.ignoreMatch();\n        return;\n      }\n      // \n      // This is now either a tag or a type.\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          className: 'doctag',\n          begin: '@[A-Za-z]+',\n          contains: [\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    TEMPLATE_STRING,\n    NUMBER,\n    hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  return {\n    name: 'Javascript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      {\n        label: \"use_strict\",\n        className: 'meta',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      NUMBER,\n      { // object attr container\n        begin: concat(/[{,\\n]\\s*/,\n          // we need to look ahead to make sure that we actually have an\n          // attribute coming up so we don't steal a comma from a potential\n          // \"value\" container\n          //\n          // NOTE: this might not work how you think.  We don't actually always\n          // enter this mode and stay.  Instead it might merely match `,\n          // ` and then immediately end after the , because it\n          // fails to find any actual attrs. But this still does the job because\n          // it prevents the value contain rule from grabbing this instead and\n          // prevening this rule from firing when we actually DO have keys.\n          lookahead(concat(\n            // we also need to allow for multiple possible comments inbetween\n            // the first key:value pairing\n            /(((\\/\\/.*$)|(\\/\\*(\\*[^/]|[^*])*\\*\\/))\\s*)*/,\n            IDENT_RE$1 + '\\\\s*:'))),\n        relevance: 0,\n        contains: [\n          {\n            className: 'attr',\n            begin: IDENT_RE$1 + lookahead('\\\\s*:'),\n            relevance: 0\n          }\n        ]\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: '(\\\\(' +\n            '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n            '[^()]*' +\n            '\\\\)[^()]*)*' +\n            '\\\\)[^()]*)*' +\n            '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>',\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/, relevance: 0\n          },\n          {\n            className: '',\n            begin: /\\s/,\n            end: /\\s*/,\n            skip: true\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: /[{;]/,\n        excludeEnd: true,\n        keywords: KEYWORDS$1,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n          PARAMS\n        ],\n        illegal: /%/\n      },\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        className: 'function',\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n        ]\n      },\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        variants: [\n          { begin: '\\\\.' + IDENT_RE$1 },\n          { begin: '\\\\$' + IDENT_RE$1 }\n        ],\n        relevance: 0\n      },\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class',\n        end: /[{;=]/,\n        excludeEnd: true,\n        illegal: /[:\"[\\]]/,\n        contains: [\n          { beginKeywords: 'extends' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        begin: /\\b(?=constructor)/,\n        end: /[{;]/,\n        excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n          'self',\n          PARAMS\n        ]\n      },\n      {\n        begin: '(get|set)\\\\s+(?=' + IDENT_RE$1 + '\\\\()',\n        end: /\\{/,\n        keywords: \"get set\",\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n          { begin: /\\(\\)/ }, // eat to avoid empty params\n          PARAMS\n        ]\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nmodule.exports = javascript;\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev \nWebsite: http://www.json.org\nCategory: common, protocols\n*/\n\nfunction json(hljs) {\n  const LITERALS = {\n    literal: 'true false null'\n  };\n  const ALLOWED_COMMENTS = [\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE\n  ];\n  const TYPES = [\n    hljs.QUOTE_STRING_MODE,\n    hljs.C_NUMBER_MODE\n  ];\n  const VALUE_CONTAINER = {\n    end: ',',\n    endsWithParent: true,\n    excludeEnd: true,\n    contains: TYPES,\n    keywords: LITERALS\n  };\n  const OBJECT = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: [\n      {\n        className: 'attr',\n        begin: /\"/,\n        end: /\"/,\n        contains: [hljs.BACKSLASH_ESCAPE],\n        illegal: '\\\\n'\n      },\n      hljs.inherit(VALUE_CONTAINER, {\n        begin: /:/\n      })\n    ].concat(ALLOWED_COMMENTS),\n    illegal: '\\\\S'\n  };\n  const ARRAY = {\n    begin: '\\\\[',\n    end: '\\\\]',\n    contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents\n    illegal: '\\\\S'\n  };\n  TYPES.push(OBJECT, ARRAY);\n  ALLOWED_COMMENTS.forEach(function(rule) {\n    TYPES.push(rule);\n  });\n  return {\n    name: 'JSON',\n    contains: TYPES,\n    keywords: LITERALS,\n    illegal: '\\\\S'\n  };\n}\n\nmodule.exports = json;\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov \n Website: https://kotlinlang.org\n Category: common\n */\n\nfunction kotlin(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'abstract as val var vararg get set class object open private protected public noinline ' +\n      'crossinline dynamic final enum if else do while for when throw try catch finally ' +\n      'import package is in fun override companion reified inline lateinit init ' +\n      'interface annotation data sealed internal infix operator out by constructor super ' +\n      'tailrec where const inner suspend typealias external expect actual',\n    built_in:\n      'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n    literal:\n      'true false null'\n  };\n  const KEYWORDS_WITH_LABEL = {\n    className: 'keyword',\n    begin: /\\b(break|continue|return|this)\\b/,\n    starts: {\n      contains: [\n        {\n          className: 'symbol',\n          begin: /@\\w+/\n        }\n      ]\n    }\n  };\n  const LABEL = {\n    className: 'symbol',\n    begin: hljs.UNDERSCORE_IDENT_RE + '@'\n  };\n\n  // for string templates\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [ hljs.C_NUMBER_MODE ]\n  };\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n  };\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"(?=[^\"])',\n        contains: [\n          VARIABLE,\n          SUBST\n        ]\n      },\n      // Can't use built-in modes easily, as we want to use STRING in the meta\n      // context as 'meta-string' and there's no syntax to remove explicitly set\n      // classNames in built-in modes.\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: /\\n/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: /\\n/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VARIABLE,\n          SUBST\n        ]\n      }\n    ]\n  };\n  SUBST.contains.push(STRING);\n\n  const ANNOTATION_USE_SITE = {\n    className: 'meta',\n    begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n  };\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          hljs.inherit(STRING, {\n            className: 'meta-string'\n          })\n        ]\n      }\n    ]\n  };\n\n  // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n  // According to the doc above, the number mode of kotlin is the same as java 8,\n  // so the code below is copied from java.js\n  const KOTLIN_NUMBER_MODE = NUMERIC;\n  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n    '/\\\\*', '\\\\*/',\n    {\n      contains: [ hljs.C_BLOCK_COMMENT_MODE ]\n    }\n  );\n  const KOTLIN_PAREN_TYPE = {\n    variants: [\n      {\n        className: 'type',\n        begin: hljs.UNDERSCORE_IDENT_RE\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [] // defined later\n      }\n    ]\n  };\n  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n  KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n  KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n  return {\n    name: 'Kotlin',\n    aliases: [ 'kt', 'kts' ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      KOTLIN_NESTED_COMMENT,\n      KEYWORDS_WITH_LABEL,\n      LABEL,\n      ANNOTATION_USE_SITE,\n      ANNOTATION,\n      {\n        className: 'function',\n        beginKeywords: 'fun',\n        end: '[(]|$',\n        returnBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        relevance: 5,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n            returnBegin: true,\n            relevance: 0,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          },\n          {\n            className: 'type',\n            begin: //,\n            keywords: 'reified',\n            relevance: 0\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              {\n                begin: /:/,\n                end: /[=,\\/]/,\n                endsWithParent: true,\n                contains: [\n                  KOTLIN_PAREN_TYPE,\n                  hljs.C_LINE_COMMENT_MODE,\n                  KOTLIN_NESTED_COMMENT\n                ],\n                relevance: 0\n              },\n              hljs.C_LINE_COMMENT_MODE,\n              KOTLIN_NESTED_COMMENT,\n              ANNOTATION_USE_SITE,\n              ANNOTATION,\n              STRING,\n              hljs.C_NUMBER_MODE\n            ]\n          },\n          KOTLIN_NESTED_COMMENT\n        ]\n      },\n      {\n        className: 'class',\n        beginKeywords: 'class interface trait', // remove 'trait' when removed from KEYWORDS\n        end: /[:\\{(]|$/,\n        excludeEnd: true,\n        illegal: 'extends implements',\n        contains: [\n          {\n            beginKeywords: 'public protected internal private constructor'\n          },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'type',\n            begin: //,\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          },\n          {\n            className: 'type',\n            begin: /[,:]\\s*/,\n            end: /[<\\(,]|$/,\n            excludeBegin: true,\n            returnEnd: true\n          },\n          ANNOTATION_USE_SITE,\n          ANNOTATION\n        ]\n      },\n      STRING,\n      {\n        className: 'meta',\n        begin: \"^#!/usr/bin/env\",\n        end: '$',\n        illegal: '\\n'\n      },\n      KOTLIN_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = kotlin;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi \nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n  const INLINE_HTML = {\n    begin: /<\\/?[A-Za-z_]/,\n    end: '>',\n    subLanguage: 'xml',\n    relevance: 0\n  };\n  const HORIZONTAL_RULE = {\n    begin: '^[-\\\\*]{3,}',\n    end: '$'\n  };\n  const CODE = {\n    className: 'code',\n    variants: [\n      // TODO: fix to allow these to work with sublanguage also\n      {\n        begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*'\n      },\n      {\n        begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*'\n      },\n      // needed to allow markdown as a sublanguage to work\n      {\n        begin: '```',\n        end: '```+[ ]*$'\n      },\n      {\n        begin: '~~~',\n        end: '~~~+[ ]*$'\n      },\n      {\n        begin: '`.+?`'\n      },\n      {\n        begin: '(?=^( {4}|\\\\t))',\n        // use contains to gobble up multiple lines to allow the block to be whatever size\n        // but only have a single open/close tag vs one per line\n        contains: [\n          {\n            begin: '^( {4}|\\\\t)',\n            end: '(\\\\n)$'\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n  const LIST = {\n    className: 'bullet',\n    begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n    end: '\\\\s+',\n    excludeEnd: true\n  };\n  const LINK_REFERENCE = {\n    begin: /^\\[[^\\n]+\\]:/,\n    returnBegin: true,\n    contains: [\n      {\n        className: 'symbol',\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'link',\n        begin: /:\\s*/,\n        end: /$/,\n        excludeBegin: true\n      }\n    ]\n  };\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n  const LINK = {\n    variants: [\n      // too much like nested array access in so many languages\n      // to have any real relevance\n      {\n        begin: /\\[.+?\\]\\[.*?\\]/,\n        relevance: 0\n      },\n      // popular internet URLs\n      {\n        begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n        relevance: 2\n      },\n      {\n        begin: concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n        relevance: 2\n      },\n      // relative urls\n      {\n        begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n        relevance: 1\n      },\n      // whatever else, lower relevance (might not be a link at all)\n      {\n        begin: /\\[.+?\\]\\(.*?\\)/,\n        relevance: 0\n      }\n    ],\n    returnBegin: true,\n    contains: [\n      {\n        className: 'string',\n        relevance: 0,\n        begin: '\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        returnEnd: true\n      },\n      {\n        className: 'link',\n        relevance: 0,\n        begin: '\\\\]\\\\(',\n        end: '\\\\)',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'symbol',\n        relevance: 0,\n        begin: '\\\\]\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n  const BOLD = {\n    className: 'strong',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /_{2}/,\n        end: /_{2}/\n      },\n      {\n        begin: /\\*{2}/,\n        end: /\\*{2}/\n      }\n    ]\n  };\n  const ITALIC = {\n    className: 'emphasis',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /\\*(?!\\*)/,\n        end: /\\*/\n      },\n      {\n        begin: /_(?!_)/,\n        end: /_/,\n        relevance: 0\n      }\n    ]\n  };\n  BOLD.contains.push(ITALIC);\n  ITALIC.contains.push(BOLD);\n\n  let CONTAINABLE = [\n    INLINE_HTML,\n    LINK\n  ];\n\n  BOLD.contains = BOLD.contains.concat(CONTAINABLE);\n  ITALIC.contains = ITALIC.contains.concat(CONTAINABLE);\n\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n  const HEADER = {\n    className: 'section',\n    variants: [\n      {\n        begin: '^#{1,6}',\n        end: '$',\n        contains: CONTAINABLE\n      },\n      {\n        begin: '(?=^.+?\\\\n[=-]{2,}$)',\n        contains: [\n          {\n            begin: '^[=-]*$'\n          },\n          {\n            begin: '^',\n            end: \"\\\\n\",\n            contains: CONTAINABLE\n          }\n        ]\n      }\n    ]\n  };\n\n  const BLOCKQUOTE = {\n    className: 'quote',\n    begin: '^>\\\\s+',\n    contains: CONTAINABLE,\n    end: '$'\n  };\n\n  return {\n    name: 'Markdown',\n    aliases: [\n      'md',\n      'mkdown',\n      'mkd'\n    ],\n    contains: [\n      HEADER,\n      INLINE_HTML,\n      LIST,\n      BOLD,\n      ITALIC,\n      BLOCKQUOTE,\n      CODE,\n      HORIZONTAL_RULE,\n      LINK,\n      LINK_REFERENCE\n    ]\n  };\n}\n\nmodule.exports = markdown;\n","/*\nLanguage: Nix\nAuthor: Domen Kožar \nDescription: Nix functional language\nWebsite: http://nixos.org/nix\n*/\n\nfunction nix(hljs) {\n  const NIX_KEYWORDS = {\n    keyword:\n      'rec with let in inherit assert if else then',\n    literal:\n      'true false or and null',\n    built_in:\n      'import abort baseNameOf dirOf isNull builtins map removeAttrs throw ' +\n      'toString derivation'\n  };\n  const ANTIQUOTE = {\n    className: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    keywords: NIX_KEYWORDS\n  };\n  const ATTRS = {\n    begin: /[a-zA-Z0-9-_]+(\\s*=)/,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: /\\S+/\n      }\n    ]\n  };\n  const STRING = {\n    className: 'string',\n    contains: [ ANTIQUOTE ],\n    variants: [\n      {\n        begin: \"''\",\n        end: \"''\"\n      },\n      {\n        begin: '\"',\n        end: '\"'\n      }\n    ]\n  };\n  const EXPRESSIONS = [\n    hljs.NUMBER_MODE,\n    hljs.HASH_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING,\n    ATTRS\n  ];\n  ANTIQUOTE.contains = EXPRESSIONS;\n  return {\n    name: 'Nix',\n    aliases: [ \"nixos\" ],\n    keywords: NIX_KEYWORDS,\n    contains: EXPRESSIONS\n  };\n}\n\nmodule.exports = nix;\n","/*\nLanguage: PowerShell\nDescription: PowerShell is a task-based command-line shell and scripting language built on .NET.\nAuthor: David Mohundro \nContributors: Nicholas Blumhardt , Victor Zhou , Nicolas Le Gall \nWebsite: https://docs.microsoft.com/en-us/powershell/\n*/\n\nfunction powershell(hljs) {\n  const TYPES = [\n    \"string\",\n    \"char\",\n    \"byte\",\n    \"int\",\n    \"long\",\n    \"bool\",\n    \"decimal\",\n    \"single\",\n    \"double\",\n    \"DateTime\",\n    \"xml\",\n    \"array\",\n    \"hashtable\",\n    \"void\"\n  ];\n\n  // https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands\n  const VALID_VERBS =\n    'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|' +\n    'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|' +\n    'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|' +\n    'Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|' +\n    'ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|' +\n    'Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|' +\n    'Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|' +\n    'Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|' +\n    'Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|' +\n    'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|' +\n    'Unprotect|Use|ForEach|Sort|Tee|Where';\n\n  const COMPARISON_OPERATORS =\n    '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|' +\n    '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|' +\n    '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|' +\n    '-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|' +\n    '-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|' +\n    '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|' +\n    '-split|-wildcard|-xor';\n\n  const KEYWORDS = {\n    $pattern: /-?[A-z\\.\\-]+\\b/,\n    keyword:\n      'if else foreach return do while until elseif begin for trap data dynamicparam ' +\n      'end break throw param continue finally in switch exit filter try process catch ' +\n      'hidden static parameter',\n    // \"echo\" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts\n    built_in:\n      'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp ' +\n      'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx ' +\n      'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group ' +\n      'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi ' +\n      'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh ' +\n      'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp ' +\n      'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp ' +\n      'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write'\n    // TODO: 'validate[A-Z]+' can't work in keywords\n  };\n\n  const TITLE_NAME_RE = /\\w[\\w\\d]*((-)[\\w\\d]+)*/;\n\n  const BACKTICK_ESCAPE = {\n    begin: '`[\\\\s\\\\S]',\n    relevance: 0\n  };\n\n  const VAR = {\n    className: 'variable',\n    variants: [\n      {\n        begin: /\\$\\B/\n      },\n      {\n        className: 'keyword',\n        begin: /\\$this/\n      },\n      {\n        begin: /\\$[\\w\\d][\\w\\d_:]*/\n      }\n    ]\n  };\n\n  const LITERAL = {\n    className: 'literal',\n    begin: /\\$(null|true|false)\\b/\n  };\n\n  const QUOTE_STRING = {\n    className: \"string\",\n    variants: [\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /@\"/,\n        end: /^\"@/\n      }\n    ],\n    contains: [\n      BACKTICK_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$[A-z]/,\n        end: /[^A-z]/\n      }\n    ]\n  };\n\n  const APOS_STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /@'/,\n        end: /^'@/\n      }\n    ]\n  };\n\n  const PS_HELPTAGS = {\n    className: \"doctag\",\n    variants: [\n      /* no paramater help tags */\n      {\n        begin: /\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/\n      },\n      /* one parameter help tags */\n      {\n        begin: /\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/\n      }\n    ]\n  };\n\n  const PS_COMMENT = hljs.inherit(\n    hljs.COMMENT(null, null),\n    {\n      variants: [\n        /* single-line comment */\n        {\n          begin: /#/,\n          end: /$/\n        },\n        /* multi-line comment */\n        {\n          begin: /<#/,\n          end: /#>/\n        }\n      ],\n      contains: [ PS_HELPTAGS ]\n    }\n  );\n\n  const CMDLETS = {\n    className: 'built_in',\n    variants: [\n      {\n        begin: '('.concat(VALID_VERBS, ')+(-)[\\\\w\\\\d]+')\n      }\n    ]\n  };\n\n  const PS_CLASS = {\n    className: 'class',\n    beginKeywords: 'class enum',\n    end: /\\s*[{]/,\n    excludeEnd: true,\n    relevance: 0,\n    contains: [ hljs.TITLE_MODE ]\n  };\n\n  const PS_FUNCTION = {\n    className: 'function',\n    begin: /function\\s+/,\n    end: /\\s*\\{|$/,\n    excludeEnd: true,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        begin: \"function\",\n        relevance: 0,\n        className: \"keyword\"\n      },\n      {\n        className: \"title\",\n        begin: TITLE_NAME_RE,\n        relevance: 0\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        className: \"params\",\n        relevance: 0,\n        contains: [ VAR ]\n      }\n      // CMDLETS\n    ]\n  };\n\n  // Using statment, plus type, plus assembly name.\n  const PS_USING = {\n    begin: /using\\s/,\n    end: /$/,\n    returnBegin: true,\n    contains: [\n      QUOTE_STRING,\n      APOS_STRING,\n      {\n        className: 'keyword',\n        begin: /(using|assembly|command|module|namespace|type)/\n      }\n    ]\n  };\n\n  // Comperison operators & function named parameters.\n  const PS_ARGUMENTS = {\n    variants: [\n      // PS literals are pretty verbose so it's a good idea to accent them a bit.\n      {\n        className: 'operator',\n        begin: '('.concat(COMPARISON_OPERATORS, ')\\\\b')\n      },\n      {\n        className: 'literal',\n        begin: /(-)[\\w\\d]+/,\n        relevance: 0\n      }\n    ]\n  };\n\n  const HASH_SIGNS = {\n    className: 'selector-tag',\n    begin: /@\\B/,\n    relevance: 0\n  };\n\n  // It's a very general rule so I'll narrow it a bit with some strict boundaries\n  // to avoid any possible false-positive collisions!\n  const PS_METHODS = {\n    className: 'function',\n    begin: /\\[.*\\]\\s*[\\w]+[ ]??\\(/,\n    end: /$/,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        className: 'keyword',\n        begin: '('.concat(\n          KEYWORDS.keyword.toString().replace(/\\s/g, '|'\n          ), ')\\\\b'),\n        endsParent: true,\n        relevance: 0\n      },\n      hljs.inherit(hljs.TITLE_MODE, {\n        endsParent: true\n      })\n    ]\n  };\n\n  const GENTLEMANS_SET = [\n    // STATIC_MEMBER,\n    PS_METHODS,\n    PS_COMMENT,\n    BACKTICK_ESCAPE,\n    hljs.NUMBER_MODE,\n    QUOTE_STRING,\n    APOS_STRING,\n    // PS_NEW_OBJECT_TYPE,\n    CMDLETS,\n    VAR,\n    LITERAL,\n    HASH_SIGNS\n  ];\n\n  const PS_TYPE = {\n    begin: /\\[/,\n    end: /\\]/,\n    excludeBegin: true,\n    excludeEnd: true,\n    relevance: 0,\n    contains: [].concat(\n      'self',\n      GENTLEMANS_SET,\n      {\n        begin: \"(\" + TYPES.join(\"|\") + \")\",\n        className: \"built_in\",\n        relevance: 0\n      },\n      {\n        className: 'type',\n        begin: /[\\.\\w\\d]+/,\n        relevance: 0\n      }\n    )\n  };\n\n  PS_METHODS.contains.unshift(PS_TYPE);\n\n  return {\n    name: 'PowerShell',\n    aliases: [\n      \"ps\",\n      \"ps1\"\n    ],\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: GENTLEMANS_SET.concat(\n      PS_CLASS,\n      PS_FUNCTION,\n      PS_USING,\n      PS_ARGUMENTS,\n      PS_TYPE\n    )\n  };\n}\n\nmodule.exports = powershell;\n","/*\nLanguage: .properties\nContributors: Valentin Aitken , Egor Rogov \nWebsite: https://en.wikipedia.org/wiki/.properties\nCategory: common, config\n*/\n\nfunction properties(hljs) {\n\n  // whitespaces: space, tab, formfeed\n  var WS0 = '[ \\\\t\\\\f]*';\n  var WS1 = '[ \\\\t\\\\f]+';\n  // delimiter\n  var EQUAL_DELIM = WS0+'[:=]'+WS0;\n  var WS_DELIM = WS1;\n  var DELIM = '(' + EQUAL_DELIM + '|' + WS_DELIM + ')';\n  var KEY_ALPHANUM = '([^\\\\\\\\\\\\W:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+';\n  var KEY_OTHER = '([^\\\\\\\\:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+';\n\n  var DELIM_AND_VALUE = {\n          // skip DELIM\n          end: DELIM,\n          relevance: 0,\n          starts: {\n            // value: everything until end of line (again, taking into account backslashes)\n            className: 'string',\n            end: /$/,\n            relevance: 0,\n            contains: [\n              { begin: '\\\\\\\\\\\\\\\\'},\n              { begin: '\\\\\\\\\\\\n' }\n            ]\n          }\n        };\n\n  return {\n    name: '.properties',\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [\n      hljs.COMMENT('^\\\\s*[!#]', '$'),\n      // key: everything until whitespace or = or : (taking into account backslashes)\n      // case of a \"normal\" key\n      {\n        returnBegin: true,\n        variants: [\n          { begin: KEY_ALPHANUM + EQUAL_DELIM, relevance: 1 },\n          { begin: KEY_ALPHANUM + WS_DELIM, relevance: 0 }\n        ],\n        contains: [\n          {\n            className: 'attr',\n            begin: KEY_ALPHANUM,\n            endsParent: true,\n            relevance: 0\n          }\n        ],\n        starts: DELIM_AND_VALUE\n      },\n      // case of key containing non-alphanumeric chars => relevance = 0\n      {\n        begin: KEY_OTHER + DELIM,\n        returnBegin: true,\n        relevance: 0,\n        contains: [\n          {\n            className: 'meta',\n            begin: KEY_OTHER,\n            endsParent: true,\n            relevance: 0\n          }\n        ],\n        starts: DELIM_AND_VALUE\n      },\n      // case of an empty key\n      {\n        className: 'attr',\n        relevance: 0,\n        begin: KEY_OTHER + WS0 + '$'\n      }\n    ]\n  };\n}\n\nmodule.exports = properties;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov \nContributors: Peter Leonov , Vasily Polovnyov , Loren Segal , Pascal Hurni , Cedric Sohrauer \nCategory: common\n*/\n\nfunction ruby(hljs) {\n  const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n  const RUBY_KEYWORDS = {\n    keyword:\n      'and then defined module in return redo if BEGIN retry end for self when ' +\n      'next until do begin unless END rescue else break undef not super class case ' +\n      'require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor ' +\n      '__FILE__',\n    built_in: 'proc lambda',\n    literal:\n      'true false nil'\n  };\n  const YARDOCTAG = {\n    className: 'doctag',\n    begin: '@[A-Za-z]+'\n  };\n  const IRB_OBJECT = {\n    begin: '#<',\n    end: '>'\n  };\n  const COMMENT_MODES = [\n    hljs.COMMENT(\n      '#',\n      '$',\n      {\n        contains: [ YARDOCTAG ]\n      }\n    ),\n    hljs.COMMENT(\n      '^=begin',\n      '^=end',\n      {\n        contains: [ YARDOCTAG ],\n        relevance: 10\n      }\n    ),\n    hljs.COMMENT('^__END__', '\\\\n$')\n  ];\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: RUBY_KEYWORDS\n  };\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /`/,\n        end: /`/\n      },\n      {\n        begin: /%[qQwWx]?\\(/,\n        end: /\\)/\n      },\n      {\n        begin: /%[qQwWx]?\\[/,\n        end: /\\]/\n      },\n      {\n        begin: /%[qQwWx]?\\{/,\n        end: /\\}/\n      },\n      {\n        begin: /%[qQwWx]?/\n      },\n      {\n        begin: /%[qQwWx]?\\//,\n        end: /\\//\n      },\n      {\n        begin: /%[qQwWx]?%/,\n        end: /%/\n      },\n      {\n        begin: /%[qQwWx]?-/,\n        end: /-/\n      },\n      {\n        begin: /%[qQwWx]?\\|/,\n        end: /\\|/\n      },\n      // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n      // where ? is the last character of a preceding identifier, as in: `func?4`\n      {\n        begin: /\\B\\?(\\\\\\d{1,3})/\n      },\n      {\n        begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/\n      },\n      {\n        begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/\n      },\n      {\n        begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/\n      },\n      {\n        begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/\n      },\n      {\n        begin: /\\B\\?\\\\?\\S/\n      },\n      { // heredocs\n        begin: /<<[-~]?'?(\\w+)\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/,\n        returnBegin: true,\n        contains: [\n          {\n            begin: /<<[-~]?'?/\n          },\n          hljs.END_SAME_AS_BEGIN({\n            begin: /(\\w+)/,\n            end: /(\\w+)/,\n            contains: [\n              hljs.BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          })\n        ]\n      }\n    ]\n  };\n\n  // Ruby syntax is underdocumented, but this grammar seems to be accurate\n  // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n  // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n  const decimal = '[1-9](_?[0-9])*|0';\n  const digits = '[0-9](_?[0-9])*';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal integer/float, optionally exponential or rational, optionally imaginary\n      {\n        begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b`\n      },\n\n      // explicit decimal/binary/octal/hexadecimal integer,\n      // optionally rational and/or imaginary\n      {\n        begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\"\n      },\n      {\n        begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\"\n      },\n      {\n        begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\"\n      },\n      {\n        begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\"\n      },\n\n      // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n      {\n        begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\"\n      }\n    ]\n  };\n\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\(',\n    end: '\\\\)',\n    endsParent: true,\n    keywords: RUBY_KEYWORDS\n  };\n\n  const RUBY_DEFAULT_CONTAINS = [\n    STRING,\n    {\n      className: 'class',\n      beginKeywords: 'class module',\n      end: '$|;',\n      illegal: /=/,\n      contains: [\n        hljs.inherit(hljs.TITLE_MODE, {\n          begin: '[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|!)?'\n        }),\n        {\n          begin: '<\\\\s*',\n          contains: [\n            {\n              begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE,\n              // we already get points for <, we don't need poitns\n              // for the name also\n              relevance: 0\n            }\n          ]\n        }\n      ].concat(COMMENT_MODES)\n    },\n    {\n      className: 'function',\n      // def method_name(\n      // def method_name;\n      // def method_name (end of line)\n      begin: concat(/def\\s+/, lookahead(RUBY_METHOD_RE + \"\\\\s*(\\\\(|;|$)\")),\n      relevance: 0, // relevance comes from kewords\n      keywords: \"def\",\n      end: '$|;',\n      contains: [\n        hljs.inherit(hljs.TITLE_MODE, {\n          begin: RUBY_METHOD_RE\n        }),\n        PARAMS\n      ].concat(COMMENT_MODES)\n    },\n    {\n      // swallow namespace qualifiers before symbols\n      begin: hljs.IDENT_RE + '::'\n    },\n    {\n      className: 'symbol',\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ':(?!\\\\s)',\n      contains: [\n        STRING,\n        {\n          begin: RUBY_METHOD_RE\n        }\n      ],\n      relevance: 0\n    },\n    NUMBER,\n    {\n      // negative-look forward attemps to prevent false matches like:\n      // @ident@ or $ident$ that might indicate this is not ruby at all\n      className: \"variable\",\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n    },\n    {\n      className: 'params',\n      begin: /\\|/,\n      end: /\\|/,\n      relevance: 0, // this could be a lot of things (in other languages) other than params\n      keywords: RUBY_KEYWORDS\n    },\n    { // regexp container\n      begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n      keywords: 'unless',\n      contains: [\n        {\n          className: 'regexp',\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ],\n          illegal: /\\n/,\n          variants: [\n            {\n              begin: '/',\n              end: '/[a-z]*'\n            },\n            {\n              begin: /%r\\{/,\n              end: /\\}[a-z]*/\n            },\n            {\n              begin: '%r\\\\(',\n              end: '\\\\)[a-z]*'\n            },\n            {\n              begin: '%r!',\n              end: '![a-z]*'\n            },\n            {\n              begin: '%r\\\\[',\n              end: '\\\\][a-z]*'\n            }\n          ]\n        }\n      ].concat(IRB_OBJECT, COMMENT_MODES),\n      relevance: 0\n    }\n  ].concat(IRB_OBJECT, COMMENT_MODES);\n\n  SUBST.contains = RUBY_DEFAULT_CONTAINS;\n  PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n  // >>\n  // ?>\n  const SIMPLE_PROMPT = \"[>?]>\";\n  // irb(main):001:0>\n  const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\";\n  const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n  const IRB_DEFAULT = [\n    {\n      begin: /^\\s*=>/,\n      starts: {\n        end: '$',\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    },\n    {\n      className: 'meta',\n      begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n      starts: {\n        end: '$',\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    }\n  ];\n\n  COMMENT_MODES.unshift(IRB_OBJECT);\n\n  return {\n    name: 'Ruby',\n    aliases: [\n      'rb',\n      'gemspec',\n      'podspec',\n      'thor',\n      'irb'\n    ],\n    keywords: RUBY_KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: [\n      hljs.SHEBANG({\n        binary: \"ruby\"\n      })\n    ]\n      .concat(IRB_DEFAULT)\n      .concat(COMMENT_MODES)\n      .concat(RUBY_DEFAULT_CONTAINS)\n  };\n}\n\nmodule.exports = ruby;\n","/*\nLanguage: Scala\nCategory: functional\nAuthor: Jan Berkel \nContributors: Erik Osheim \nWebsite: https://www.scala-lang.org\n*/\n\nfunction scala(hljs) {\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@[A-Za-z]+'\n  };\n\n  // used in strings for escaping/interpolation/substitution\n  const SUBST = {\n    className: 'subst',\n    variants: [\n      {\n        begin: '\\\\$[A-Za-z0-9_]+'\n      },\n      {\n        begin: /\\$\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"'\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '[a-z]+\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST\n        ]\n      },\n      {\n        className: 'string',\n        begin: '[a-z]+\"\"\"',\n        end: '\"\"\"',\n        contains: [ SUBST ],\n        relevance: 10\n      }\n    ]\n\n  };\n\n  const SYMBOL = {\n    className: 'symbol',\n    begin: '\\'\\\\w[\\\\w\\\\d_]*(?!\\')'\n  };\n\n  const TYPE = {\n    className: 'type',\n    begin: '\\\\b[A-Z][A-Za-z0-9_]*',\n    relevance: 0\n  };\n\n  const NAME = {\n    className: 'title',\n    begin: /[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/,\n    relevance: 0\n  };\n\n  const CLASS = {\n    className: 'class',\n    beginKeywords: 'class object trait type',\n    end: /[:={\\[\\n;]/,\n    excludeEnd: true,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        beginKeywords: 'extends with',\n        relevance: 10\n      },\n      {\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true,\n        relevance: 0,\n        contains: [ TYPE ]\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        relevance: 0,\n        contains: [ TYPE ]\n      },\n      NAME\n    ]\n  };\n\n  const METHOD = {\n    className: 'function',\n    beginKeywords: 'def',\n    end: /[:={\\[(\\n;]/,\n    excludeEnd: true,\n    contains: [ NAME ]\n  };\n\n  return {\n    name: 'Scala',\n    keywords: {\n      literal: 'true false null',\n      keyword: 'type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit'\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      STRING,\n      SYMBOL,\n      TYPE,\n      METHOD,\n      CLASS,\n      hljs.C_NUMBER_MODE,\n      ANNOTATION\n    ]\n  };\n}\n\nmodule.exports = scala;\n","/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune \nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: [ 'console' ],\n    contains: [\n      {\n        className: 'meta',\n        // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n        // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n        // echo /path/to/home > t.exe\n        begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#]/,\n        starts: {\n          end: /[^\\\\](?=\\s*$)/,\n          subLanguage: 'bash'\n        }\n      }\n    ]\n  };\n}\n\nmodule.exports = shell;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n  const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\nfunction sql(hljs) {\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [\n          {begin: /''/ }\n        ]\n      }\n    ]\n  };\n  const QUOTED_IDENTIFIER = {\n    begin: /\"/,\n    end: /\"/,\n    contains: [ { begin: /\"\"/ } ]\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n    // \"null\",\n    \"unknown\"\n  ];\n\n  const MULTI_WORD_TYPES = [\n    \"double precision\",\n    \"large object\",\n    \"with timezone\",\n    \"without timezone\"\n  ];\n\n  const TYPES = [\n    'bigint',\n    'binary',\n    'blob',\n    'boolean',\n    'char',\n    'character',\n    'clob',\n    'date',\n    'dec',\n    'decfloat',\n    'decimal',\n    'float',\n    'int',\n    'integer',\n    'interval',\n    'nchar',\n    'nclob',\n    'national',\n    'numeric',\n    'real',\n    'row',\n    'smallint',\n    'time',\n    'timestamp',\n    'varchar',\n    'varying', // modifier (character varying)\n    'varbinary'\n  ];\n\n  const NON_RESERVED_WORDS = [\n    \"add\",\n    \"asc\",\n    \"collation\",\n    \"desc\",\n    \"final\",\n    \"first\",\n    \"last\",\n    \"view\"\n  ];\n\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n  const RESERVED_WORDS = [\n    \"abs\",\n    \"acos\",\n    \"all\",\n    \"allocate\",\n    \"alter\",\n    \"and\",\n    \"any\",\n    \"are\",\n    \"array\",\n    \"array_agg\",\n    \"array_max_cardinality\",\n    \"as\",\n    \"asensitive\",\n    \"asin\",\n    \"asymmetric\",\n    \"at\",\n    \"atan\",\n    \"atomic\",\n    \"authorization\",\n    \"avg\",\n    \"begin\",\n    \"begin_frame\",\n    \"begin_partition\",\n    \"between\",\n    \"bigint\",\n    \"binary\",\n    \"blob\",\n    \"boolean\",\n    \"both\",\n    \"by\",\n    \"call\",\n    \"called\",\n    \"cardinality\",\n    \"cascaded\",\n    \"case\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"char\",\n    \"char_length\",\n    \"character\",\n    \"character_length\",\n    \"check\",\n    \"classifier\",\n    \"clob\",\n    \"close\",\n    \"coalesce\",\n    \"collate\",\n    \"collect\",\n    \"column\",\n    \"commit\",\n    \"condition\",\n    \"connect\",\n    \"constraint\",\n    \"contains\",\n    \"convert\",\n    \"copy\",\n    \"corr\",\n    \"corresponding\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"create\",\n    \"cross\",\n    \"cube\",\n    \"cume_dist\",\n    \"current\",\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_row\",\n    \"current_schema\",\n    \"current_time\",\n    \"current_timestamp\",\n    \"current_path\",\n    \"current_role\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"cursor\",\n    \"cycle\",\n    \"date\",\n    \"day\",\n    \"deallocate\",\n    \"dec\",\n    \"decimal\",\n    \"decfloat\",\n    \"declare\",\n    \"default\",\n    \"define\",\n    \"delete\",\n    \"dense_rank\",\n    \"deref\",\n    \"describe\",\n    \"deterministic\",\n    \"disconnect\",\n    \"distinct\",\n    \"double\",\n    \"drop\",\n    \"dynamic\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"empty\",\n    \"end\",\n    \"end_frame\",\n    \"end_partition\",\n    \"end-exec\",\n    \"equals\",\n    \"escape\",\n    \"every\",\n    \"except\",\n    \"exec\",\n    \"execute\",\n    \"exists\",\n    \"exp\",\n    \"external\",\n    \"extract\",\n    \"false\",\n    \"fetch\",\n    \"filter\",\n    \"first_value\",\n    \"float\",\n    \"floor\",\n    \"for\",\n    \"foreign\",\n    \"frame_row\",\n    \"free\",\n    \"from\",\n    \"full\",\n    \"function\",\n    \"fusion\",\n    \"get\",\n    \"global\",\n    \"grant\",\n    \"group\",\n    \"grouping\",\n    \"groups\",\n    \"having\",\n    \"hold\",\n    \"hour\",\n    \"identity\",\n    \"in\",\n    \"indicator\",\n    \"initial\",\n    \"inner\",\n    \"inout\",\n    \"insensitive\",\n    \"insert\",\n    \"int\",\n    \"integer\",\n    \"intersect\",\n    \"intersection\",\n    \"interval\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"language\",\n    \"large\",\n    \"last_value\",\n    \"lateral\",\n    \"lead\",\n    \"leading\",\n    \"left\",\n    \"like\",\n    \"like_regex\",\n    \"listagg\",\n    \"ln\",\n    \"local\",\n    \"localtime\",\n    \"localtimestamp\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"match\",\n    \"match_number\",\n    \"match_recognize\",\n    \"matches\",\n    \"max\",\n    \"member\",\n    \"merge\",\n    \"method\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"modifies\",\n    \"module\",\n    \"month\",\n    \"multiset\",\n    \"national\",\n    \"natural\",\n    \"nchar\",\n    \"nclob\",\n    \"new\",\n    \"no\",\n    \"none\",\n    \"normalize\",\n    \"not\",\n    \"nth_value\",\n    \"ntile\",\n    \"null\",\n    \"nullif\",\n    \"numeric\",\n    \"octet_length\",\n    \"occurrences_regex\",\n    \"of\",\n    \"offset\",\n    \"old\",\n    \"omit\",\n    \"on\",\n    \"one\",\n    \"only\",\n    \"open\",\n    \"or\",\n    \"order\",\n    \"out\",\n    \"outer\",\n    \"over\",\n    \"overlaps\",\n    \"overlay\",\n    \"parameter\",\n    \"partition\",\n    \"pattern\",\n    \"per\",\n    \"percent\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"period\",\n    \"portion\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"precedes\",\n    \"precision\",\n    \"prepare\",\n    \"primary\",\n    \"procedure\",\n    \"ptf\",\n    \"range\",\n    \"rank\",\n    \"reads\",\n    \"real\",\n    \"recursive\",\n    \"ref\",\n    \"references\",\n    \"referencing\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"release\",\n    \"result\",\n    \"return\",\n    \"returns\",\n    \"revoke\",\n    \"right\",\n    \"rollback\",\n    \"rollup\",\n    \"row\",\n    \"row_number\",\n    \"rows\",\n    \"running\",\n    \"savepoint\",\n    \"scope\",\n    \"scroll\",\n    \"search\",\n    \"second\",\n    \"seek\",\n    \"select\",\n    \"sensitive\",\n    \"session_user\",\n    \"set\",\n    \"show\",\n    \"similar\",\n    \"sin\",\n    \"sinh\",\n    \"skip\",\n    \"smallint\",\n    \"some\",\n    \"specific\",\n    \"specifictype\",\n    \"sql\",\n    \"sqlexception\",\n    \"sqlstate\",\n    \"sqlwarning\",\n    \"sqrt\",\n    \"start\",\n    \"static\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"submultiset\",\n    \"subset\",\n    \"substring\",\n    \"substring_regex\",\n    \"succeeds\",\n    \"sum\",\n    \"symmetric\",\n    \"system\",\n    \"system_time\",\n    \"system_user\",\n    \"table\",\n    \"tablesample\",\n    \"tan\",\n    \"tanh\",\n    \"then\",\n    \"time\",\n    \"timestamp\",\n    \"timezone_hour\",\n    \"timezone_minute\",\n    \"to\",\n    \"trailing\",\n    \"translate\",\n    \"translate_regex\",\n    \"translation\",\n    \"treat\",\n    \"trigger\",\n    \"trim\",\n    \"trim_array\",\n    \"true\",\n    \"truncate\",\n    \"uescape\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"update   \",\n    \"upper\",\n    \"user\",\n    \"using\",\n    \"value\",\n    \"values\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"varbinary\",\n    \"varchar\",\n    \"varying\",\n    \"versioning\",\n    \"when\",\n    \"whenever\",\n    \"where\",\n    \"width_bucket\",\n    \"window\",\n    \"with\",\n    \"within\",\n    \"without\",\n    \"year\",\n  ];\n\n  // these are reserved words we have identified to be functions\n  // and should only be highlighted in a dispatch-like context\n  // ie, array_agg(...), etc.\n  const RESERVED_FUNCTIONS = [\n    \"abs\",\n    \"acos\",\n    \"array_agg\",\n    \"asin\",\n    \"atan\",\n    \"avg\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"coalesce\",\n    \"corr\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"cume_dist\",\n    \"dense_rank\",\n    \"deref\",\n    \"element\",\n    \"exp\",\n    \"extract\",\n    \"first_value\",\n    \"floor\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"last_value\",\n    \"lead\",\n    \"listagg\",\n    \"ln\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"nth_value\",\n    \"ntile\",\n    \"nullif\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"rank\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"row_number\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"substring\",\n    \"substring_regex\",\n    \"sum\",\n    \"tan\",\n    \"tanh\",\n    \"translate\",\n    \"translate_regex\",\n    \"treat\",\n    \"trim\",\n    \"trim_array\",\n    \"unnest\",\n    \"upper\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"width_bucket\",\n  ];\n\n  // these functions can\n  const POSSIBLE_WITHOUT_PARENS = [\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_schema\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"session_user\",\n    \"system_time\",\n    \"system_user\",\n    \"current_time\",\n    \"localtime\",\n    \"current_timestamp\",\n    \"localtimestamp\"\n  ];\n\n  // those exist to boost relevance making these very\n  // \"SQL like\" keyword combos worth +1 extra relevance\n  const COMBOS = [\n    \"create table\",\n    \"insert into\",\n    \"primary key\",\n    \"foreign key\",\n    \"not null\",\n    \"alter table\",\n    \"add constraint\",\n    \"grouping sets\",\n    \"on overflow\",\n    \"character set\",\n    \"respect nulls\",\n    \"ignore nulls\",\n    \"nulls first\",\n    \"nulls last\",\n    \"depth first\",\n    \"breadth first\"\n  ];\n\n  const FUNCTIONS = RESERVED_FUNCTIONS;\n\n  const KEYWORDS = [...RESERVED_WORDS, ...NON_RESERVED_WORDS].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    className: \"variable\",\n    begin: /@[a-z0-9]+/,\n  };\n\n  const OPERATOR = {\n    className: \"operator\",\n    begin: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    begin: concat(/\\b/, either(...FUNCTIONS), /\\s*\\(/),\n    keywords: {\n      built_in: FUNCTIONS\n    }\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {exceptions, when} = {}) {\n    const qualifyFn = when;\n    exceptions = exceptions || [];\n    return list.map((item) => {\n      if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n        return item;\n      } else if (qualifyFn(item)) {\n        return `${item}|0`;\n      } else {\n        return item;\n      }\n    });\n  }\n\n  return {\n    name: 'SQL',\n    case_insensitive: true,\n    // does not include {} or HTML tags ` x.length < 3 }),\n      literal: LITERALS,\n      type: TYPES,\n      built_in: POSSIBLE_WITHOUT_PARENS\n    },\n    contains: [\n      {\n        begin: either(...COMBOS),\n        keywords: {\n          $pattern: /[\\w\\.]+/,\n          keyword: KEYWORDS.concat(COMBOS),\n          literal: LITERALS,\n          type: TYPES\n        },\n      },\n      {\n        className: \"type\",\n        begin: either(...MULTI_WORD_TYPES)\n      },\n      FUNCTION_CALL,\n      VARIABLE,\n      STRING,\n      QUOTED_IDENTIFIER,\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      OPERATOR\n    ]\n  };\n}\n\nmodule.exports = sql;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n  const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  // Element names can contain letters, digits, hyphens, underscores, and periods\n  const TAG_NAME_RE = concat(/[A-Z_]/, optional(/[A-Z0-9_.-]*:/), /[A-Z0-9_.-]*/);\n  const XML_IDENT_RE = /[A-Za-z0-9._:-]+/;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'meta-keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {\n    className: 'meta-string'\n  });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n    className: 'meta-string'\n  });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /`]+/\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: //,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: //,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        //,\n        {\n          relevance: 10\n        }\n      ),\n      {\n        begin: //,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      {\n        className: 'meta',\n        begin: /<\\?xml/,\n        end: /\\?>/,\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        ')/,\n        end: />/,\n        keywords: {\n          name: 'style'\n        },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the 
+
+
+
+
\ No newline at end of file
diff --git a/src/docs/asciidoc/v4/faq.adoc b/src/docs/asciidoc/v4/faq.adoc
new file mode 100644
index 0000000..b19118d
--- /dev/null
+++ b/src/docs/asciidoc/v4/faq.adoc
@@ -0,0 +1,1109 @@
+[[faq]]
+== F.A.Q
+
+=== How can I define multiple OpenAPI definitions in one Spring Boot project?
+You can define your own groups of API based on the combination of: API paths and packages to scan. Each group should have a unique `groupName`.
+The OpenAPI description of this group, will be available by default on:
+
+* `\http://server:port/context-path/v3/api-docs/groupName`
+
+To enable the support of multiple OpenAPI definitions, a bean of type `GroupedOpenApi` needs to be defined.
+
+For the following Group definition(based on package path), the OpenAPI description URL will be :  /v3/api-docs/**stores**
+
+[source,java]
+----
+@Bean
+public GroupedOpenApi storeOpenApi() {
+   String paths[] = {"/store/**"};
+   return GroupedOpenApi.builder().group("stores").pathsToMatch(paths)
+         .build();
+}
+----
+
+For the following Group definition (based on package name), the OpenAPI description URL will be:  /v3/api-docs/**users**
+
+[source,java]
+----
+@Bean
+public GroupedOpenApi userOpenApi() {
+   String packagesToscan[] = {"test.org.springdoc.api.app68.api.user"};
+   return GroupedOpenApi.builder().group("users").packagesToScan(packagesToscan)
+         .build();
+}
+----
+
+For the following Group definition(based on path), the OpenAPI description URL will be:  /v3/api-docs/**pets**
+
+[source,java]
+----
+@Bean
+public GroupedOpenApi petOpenApi() {
+   String paths[] = {"/pet/**"};
+   return GroupedOpenApi.builder().group("pets").pathsToMatch(paths)
+         .build();
+}
+----
+
+For the following Group definition (based on package name and path), the OpenAPI description URL will be:  /v3/api-docs/**groups**
+
+[source,java]
+----
+@Bean
+public GroupedOpenApi groupOpenApi() {
+   String paths[] = {"/v1/**"};
+   String packagesToscan[] = {"test.org.springdoc.api.app68.api.user", "test.org.springdoc.api.app68.api.store"};
+   return GroupedOpenApi.builder().group("groups").pathsToMatch(paths).packagesToScan(packagesToscan)
+         .build();
+}
+----
+
+For more details about the usage, you can have a look at the following sample Test:
+
+* link:https://github.com/springdoc/springdoc-openapi/tree/main/springdoc-openapi-tests/springdoc-openapi-actuator-webmvc-tests/src/test/java/test/org/springdoc/api/app68[https://github.com/springdoc/springdoc-openapi/tree/main/springdoc-openapi-tests/springdoc-openapi-actuator-webmvc-tests/src/test/java/test/org/springdoc/api/app68, window="_blank"]
+
+=== How can I configure Swagger UI?
+* The support of the swagger official properties is available on `springdoc-openapi`.  See link:https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/[Official documentation, window="_blank"].
+
+* You can use the same swagger properties in the documentation as Spring Boot properties.
+
+NOTE: All these properties should be declared with the following prefix: `springdoc.swagger-ui`
+
+=== How can I filter the resources documented in the output specification by the provided group?
+* You can use the standard `swagger-ui` property filter.
+[source,properties]
+----
+springdoc.swagger-ui.filter=group-a
+----
+
+=== How can I disable/enable Swagger UI generation based on env variable?
+* This property helps you disable only the UI.
+[source,properties]
+----
+springdoc.swagger-ui.enabled=false
+----
+=== How can I control the default expansion setting for the operations and tags, in the Swagger UI ,
+* You can set this property in your application.yml like so for example:
+[source,properties]
+----
+springdoc.swagger-ui.doc-expansion= none
+----
+
+=== How can I change the layout of the `swagger-ui`?
+* For layout options, you can use swagger-ui configuration options. For example:
+[source,properties]
+----
+springdoc.swagger-ui.layout=BaseLayout
+----
+
+=== How can I sort endpoints alphabetically?
+* You can use the following `springdoc-openapi` properties:
+[source,properties]
+----
+#For sorting endpoints alphabetically
+springdoc.swagger-ui.operationsSorter=alpha
+#For sorting tags alphabetically
+springdoc.swagger-ui.tagsSorter=alpha
+----
+
+=== How can I disable the try it out button?
+* You have to set the following property:
+[source,properties]
+----
+springdoc.swagger-ui.supportedSubmitMethods=get, put, post, delete, options, head, patch, trace
+----
+
+=== How can I add  Reusable Enums ?
+* You should add `@Schema(enumAsRef = true)` on your enum.
+
+=== How can i apply `enumAsRef = true` to all enums ?
+* Declare the following property:
+[source,java]
+----
+static {
+    io.swagger.v3.core.jackson.ModelResolver.enumsAsRef = true;
+}
+----
+
+=== How can I explicitly set which paths to filter?
+* You can set list of paths to include using the following property:
+[source,properties]
+----
+springdoc.pathsToMatch=/v1, /api/balance/**
+----
+
+=== How can I explicitly set which packages to scan?
+* You can set list of packages to include using the following property:
+[source,properties]
+----
+springdoc.packagesToScan=package1, package2
+----
+
+=== How can I set Swagger properties programmatically?
+
+These can be set by creating a `swaggerUiConfig` bean as follows:
+[source,kotlin]
+----
+@Bean
+@Primary
+fun swaggerUiConfig(config: SwaggerUiConfigProperties): SwaggerUiConfigProperties {
+    config.showCommonExtensions = true
+    config.queryConfigEnabled = true
+    return config
+}
+----
+
+=== How can I ignore some field of model ?
+* You can use the following annotation on the top of the field that you want to hide:
+* `@Schema(hidden = true)`
+
+=== How can I ignore `@AuthenticationPrincipal` parameter from spring-security ?
+* A solution workaround would be to use: `@Parameter(hidden = true)`
+* The projects that use `spring-boot-starter-security` or `spring-security-oauth2-authorization-server`  should use:
+
+- `springdoc-openapi-starter-webmvc-api` if they depend on `spring-boot-starter-web` and they only need the access to the OpenAPI endpoints.
+- OR `springdoc-openapi-starter-webmvc-ui`, if they depend on `spring-boot-starter-web` and they also need the access to the swagger-ui.
+- OR `springdoc-openapi-starter-webflux-api` if they depend on `spring-boot-starter-webflux` and they only the access to the OpenAPI endpoints.
+- OR `springdoc-openapi-starter-webflux-ui`, if they depend on `spring-boot-starter-webflux` and they also need the access to the swagger-ui.
+
+
+
+=== Is there a Gradle plugin available?
+* Yes. More details are available, in the link:https://springdoc.org/#gradle-plugin[gradle plugin] section.
+
+=== How can I hide a parameter from the documentation ?
+* You can use `@Parameter(hidden = true)`
+
+=== Is `@Parameters` annotation supported ?
+* Yes
+
+=== Does `springdoc-openapi` support Jersey?
+* If you are using JAX-RS and as implementation Jersey (`@Path` for example), we do not support it.
+* We only support exposing Rest Endpoints using Spring managed beans (`@RestController` for example).
+* You can have a look at swagger-jaxrs2 project:
+** link:https://github.com/swagger-api/swagger-samples/tree/2.0/java/java-jersey2-minimal[https://github.com/swagger-api/swagger-samples/tree/2.0/java/java-jersey2-minimal, window="_blank"]
+
+=== Can `springdoc-openapi` generate API only for `@RestController`?
+* `@RestController` is equivalent to `@Controller` + `@RequestMapping` on the type level.
+* For some legacy apps, we are constrained to still support both.
+* If you need to hide the `@Controller` on the type level, in this case, you can use: `@Hidden` on controller level.
+* Please note this annotation can be also used to hide some methods from the generated documentation.
+
+=== Are the following validation annotations supported : `@NotEmpty` `@NotBlank` `@PositiveOrZero` `@NegativeOrZero`?
+* Yes
+
+===  How can I map `Pageable` (spring-data-commons) object to correct URL-Parameter in Swagger UI?
+
+The support for Pageable of spring-data-commons is available out-of-the box since `springdoc-openapi v1.6.0`.
+For this, you have to combine `@ParameterObject` annotation with the `Pageable` type.
+
+
+Before `springdoc-openapi v1.6.0`:
+
+* You can use as well `@ParameterObject` instead of `@PageableAsQueryParam` for HTTP `GET` methods.
+
+[source,java]
+----
+static {
+    getConfig().replaceParameterObjectWithClass(org.springframework.data.domain.Pageable.class, Pageable.class)
+            .replaceParameterObjectWithClass(org.springframework.data.domain.PageRequest.class, Pageable.class);
+}
+----
+
+* Another solution, is to configure Pageable manually:
+    - you will have to declare the explicit mapping of Pageable fields as Query Params and add the `@Parameter(hidden = true) Pageable pageable` on your pageable parameter.
+    - You should also, declare the annotation `@PageableAsQueryParam` provided by `springdoc-openapi` on the method level, or declare your own if need to define your custom description, defaultValue, ...
+
+If you want to disable the support of spring Pageable Type, you can use:
+[source,properties]
+----
+springdoc.model-converters.pageable-converter.enabled=false
+----
+
+NOTE: The property `springdoc.model-converters.pageable-converter.enabled` is only available since v1.5.11+
+
+=== How can I generate enums in the generated description?
+* You could add a property `allowableValues`, to `@Parameter`. For example:
+
+[source,java]
+----
+@GetMapping("/example")
+public Object example(@Parameter(name ="json", schema = @Schema(description = "var 1",type = "string", allowableValues = {"1", "2"}))
+String json) {
+   return null;
+}
+----
+
+* or you could override `toString` on your enum:
+
+[source,java]
+----
+@Override
+@JsonValue
+public String toString() {
+   return String.valueOf(action);
+}
+----
+
+=== How can I deploy `springdoc-openapi-starter-webmvc-ui` behind a reverse proxy?
+* If your application is running behind a proxy, a load-balancer or in the cloud, the request information (like the host, port, scheme…​) might change along the way. Your application may be running on `10.10.10.10:8080`, but HTTP clients should only see `example.org`.
+
+* link:https://tools.ietf.org/html/rfc7239[RFC7239 "Forwarded Headers", window="_blank"] defines the Forwarded HTTP header; proxies can use this header to provide information about the original request. You can configure your application to read those headers and automatically use that information when creating links and sending them to clients in HTTP 302 responses, JSON documents or HTML pages. There are also non-standard headers, like `X-Forwarded-Host`, `X-Forwarded-Port`, `X-Forwarded-Proto`, `X-Forwarded-Ssl`, and `X-Forwarded-Prefix`.
+
+* If the proxy adds the commonly used `X-Forwarded-For` and `X-Forwarded-Proto headers`, setting server.forward-headers-strategy to NATIVE is enough to support those. With this option, the Web servers themselves natively support this feature; you can check their specific documentation to learn about specific behavior.
+
+* You need to make sure the following header is set in your reverse proxy configuration: `X-Forwarded-Prefix`
+* For example, using Apache 2, configuration:
+[source,properties]
+----
+RequestHeader set X-Forwarded-Prefix "/custom-path"
+----
+* Then, in your Spring Boot application make sure your application handles this header: `X-Forwarded-For`. There are two ways to achieve this:
+[source,properties]
+----
+server.use-forward-headers=true
+----
+* If this is not enough, Spring Framework provides a `ForwardedHeaderFilter`. You can register it as a Servlet Filter in your application by setting server.forward-headers-strategy is set to FRAMEWORK.
+* Since Spring Boot 2.2, this is the new property to handle reverse proxy headers:
+
+[source,properties]
+----
+server.forward-headers-strategy=framework
+----
+
+* And you can add the following bean to your application:
+
+[source,java]
+----
+@Bean
+ForwardedHeaderFilter forwardedHeaderFilter() {
+   return new ForwardedHeaderFilter();
+}
+----
+
+* If you need to manually adjust the URL displayed in the Swagger UI, implement the `ServerBaseUrlCustomizer` interface. This might be necessary to remove the port number, for example.
+
+[source,java]
+----
+@Bean
+public class CustomServerBaseUrlCustomizer implements ServerBaseUrlCustomizer {
+    @Override
+    public String customize(String serverBaseUrl) {
+        try {
+            URL url = new URL(serverBaseUrl);
+            if (url.getHost().contains(".com")) {
+                serverBaseUrl = new URL(url.getProtocol(),url.getHost(),url.getFile()).toString();
+            }
+        } catch (MalformedURLException ex) {
+            // nothing we can do
+        }
+
+        return serverBaseUrl;
+    }
+}
+----
+
+===  Is `@JsonView` annotations in Spring MVC APIs supported?
+* Yes
+
+=== Adding `springdoc-openapi-starter-webmvc-ui` dependency breaks my `public/index.html` welcome page
+* If you already have static content on your root, and you don't want it to be overridden by `springdoc-openapi-starter-webmvc-ui` configuration, you can just define a custom configuration of the `swagger-ui`, in order not to override the configuration of your files from in your context-root:
+* For example use:
+[source,properties]
+----
+springdoc.swagger-ui.path= /swagger-ui/api-docs.html
+----
+
+=== How can I test the Swagger UI?
+* You can have a look on this sample test of the UI:
+** link:https://github.com/springdoc/springdoc-openapi/blob/main/springdoc-openapi-starter-webmvc-ui/src/test/java/test/org/springdoc/ui/app1/SpringDocApp1Test.java[https://github.com/springdoc/springdoc-openapi/blob/main/springdoc-openapi-starter-webmvc-ui/src/test/java/test/org/springdoc/ui/app1/SpringDocApp1Test.java, window="_blank"]
+
+=== How can I customise the OpenAPI object ?
+* You can write your own implementation of `OpenApiCustomizer`.
+* An example is available on:
+** link:https://github.com/springdoc/springdoc-openapi/blob/main/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app39/SpringDocTestApp.java[https://github.com/springdoc/springdoc-openapi/blob/main/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app39/SpringDocTestApp.java, window="_blank"]
+
+[source,java]
+----
+@Bean
+public OpenApiCustomizer consumerTypeHeaderOpenAPICustomizer() {
+return openApi -> openApi.getPaths().values().stream().flatMap(pathItem -> pathItem.readOperations().stream())
+    .forEach(operation -> operation.addParametersItem(new HeaderParameter().$ref("#/components/parameters/myConsumerTypeHeader")));
+}
+----
+
+NOTE: This bean `OpenApiCustomizer` will be applied to the Default OpenAPI only.
+
+If you need the `OpenApiCustomizer` to applied to `GroupedOpenApi` as well, then use `GlobalOpenApiCustomizer` instead.
+
+=== How can I return an empty content as response?
+* It is be possible to handle as return an empty content as response using, one of the following syntaxes:
+* `content = @Content`
+* `content = @Content(schema = @Schema(hidden = true))`
+* For example:
+
+[source,java]
+----
+@Operation(summary = "Get thing", responses = {
+      @ApiResponse(description = "Successful Operation", responseCode = "200", content = @Content(mediaType = "application/json", schema = @Schema(implementation = String.class))),
+      @ApiResponse(responseCode = "404", description = "Not found", content = @Content),
+      @ApiResponse(responseCode = "401", description = "Authentication Failure", content = @Content(schema = @Schema(hidden = true))) })
+@RequestMapping(path = "/testme", method = RequestMethod.GET)
+ResponseEntity testme() {
+   return ResponseEntity.ok("Hello");
+}
+----
+
+=== How are endpoints with multiple consuming media types supported?
+* An overloaded method on the same class, with the same HTTP Method and path, will have as a result, only one OpenAPI Operation generated.
+* In addition, it's recommended to have the `@Operation` in the level of one of the overloaded methods. Otherwise it might be overridden if it's declared many times within the same overloaded method.
+
+=== How can I get yaml and json (OpenAPI) in compile time?
+* You can use `springdoc-openapi-maven-plugin` for this functionality:
+** link:https://github.com/springdoc/springdoc-openapi-maven-plugin.git[https://github.com/springdoc/springdoc-openapi-maven-plugin.git, window="_blank"]
+* You can customise the output directory (property outputDir): The default value is: ${project.build.directory}
+
+=== What are the ignored types in the documentation?
+* `Principal`, `Locale`, `HttpServletRequest` and `HttpServletResponse` and other injectable parameters supported by Spring MVC are excluded.
+* Full documentation here:
+** link:https://docs.spring.io/spring/docs/5.1.x/spring-framework-reference/web.html#mvc-ann-arguments[https://docs.spring.io/spring/docs/5.1.x/spring-framework-reference/web.html#mvc-ann-arguments, window="_blank"]
+
+=== How can i disable ignored types:
+
+If you don't want to ignore the types `Principal`, `Locale`, `HttpServletRequest`, and others,:
+
+[source,java]
+----
+SpringDocUtils.getConfig().removeRequestWrapperToIgnore(HttpServletRequest.class)
+----
+
+
+=== How do I add authorization header in requests?
+* You should add the `@SecurityRequirement` tags to your protected APIs.
+* For example:
+----
+@Operation(security = { @SecurityRequirement(name = "bearer-key") })
+----
+* And the security definition sample:
+
+[source,java]
+----
+@Bean
+ public OpenAPI customOpenAPI() {
+   return new OpenAPI()
+          .components(new Components()
+          .addSecuritySchemes("bearer-key",
+          new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));
+}
+----
+
+=== Differentiation to Springfox project
+
+* OAS 3 was released in July 2017, and there was no release of `springfox` to support OAS 3.
+`springfox` covers for the moment only swagger 2 integration with Spring Boot. The latest release date is June 2018. So, in terms of maintenance there is a big lack of support lately.
+
+* We decided to move forward and share the library that we already used on our internal projects, with the community.
+* The biggest difference with `springfox`, is that we integrate new features not covered by `springfox`:
+
+* The integration between Spring Boot and OpenAPI 3 standard.
+* We rely on on `swagger-annotations` and `swagger-ui` only official libraries.
+* We support new features on Spring 5, like `spring-webflux` with annotated and functional style.
+* We do our best to answer all the questions and address all issues or enhancement requests
+
+=== How do I migrate to OpenAPI 3 with springdoc-openapi
+* There is no relation between `springdoc-openapi` and `springfox`.If you want to migrate to OpenAPI 3:
+* Remove all the dependencies and the related code to springfox
+* Add `springdoc-openapi-starter-webmvc-ui` dependency
+* If you don't want to serve the UI from your root path or there is a conflict with an existing configuration, you can just change the following property:
+[source,properties]
+----
+springdoc.swagger-ui.path=/you-path/swagger-ui.html
+----
+
+=== How can I set a global header?
+* You may have global parameters with Standard OpenAPI description.
+* If you need the definitions to appear globally (within every group), no matter if the group fulfills the conditions specified on the GroupedOpenApi , you can use OpenAPI Bean.
+* You can define common parameters under parameters in the global components section and reference them elsewhere via `$ref`. You can also define global header parameters.
+* For this, you can override to OpenAPI Bean, and set the global headers or parameters definition on the components level.
+
+[source,java]
+----
+@Bean
+public OpenAPI customOpenAPI(@Value("${springdoc.version}") String appVersion) {
+ return new OpenAPI()
+        .components(new Components().addSecuritySchemes("basicScheme", new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic"))
+        .addParameters("myHeader1", new Parameter().in("header").schema(new StringSchema()).name("myHeader1")).addHeaders("myHeader2", new Header().description("myHeader2 header").schema(new StringSchema())))
+        .info(new Info()
+        .title("Petstore API")
+        .version(appVersion)
+        .description("This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.")
+        .termsOfService("http://swagger.io/terms/")
+        .license(new License().name("Apache 2.0").url("http://springdoc.org")));
+}
+----
+
+=== Are Callbacks supported?
+* Yes
+
+=== How can I define SecurityScheme ?
+* You can use: `@SecurityScheme` annotation.
+* Or you can define it programmatically, by overriding OpenAPI Bean:
+
+[source,java]
+----
+ @Bean
+ public OpenAPI customOpenAPI(@Value("${springdoc.version}") String appVersion) {
+  return new OpenAPI()
+   .components(new Components().addSecuritySchemes("basicScheme",
+   new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic")))
+   info(new Info().title("SpringShop API").version(appVersion)
+   .license(new License().name("Apache 2.0").url("http://springdoc.org")));
+ }
+----
+
+=== How can I hide an operation or a controller from documentation ?
+* You can use `@io.swagger.v3.oas.annotations.Hidden` annotation at `@RestController`, `@RestControllerAdvice` and method level
+* The `@Hidden` annotation on exception handler methods, is considered when building generic (error) responses from `@ControllerAdvice` exception handlers.
+* Or use: `@Operation(hidden = true)`
+
+
+
+
+=== How to configure global security schemes?
+* For global SecurityScheme, you can add it inside your own OpenAPI definition:
+
+[source,java]
+----
+@Bean
+public OpenAPI customOpenAPI() {
+    return new OpenAPI().components(new Components()
+    .addSecuritySchemes("basicScheme", new SecurityScheme()
+    .type(SecurityScheme.Type.HTTP).scheme("basic"))).info(new Info().title("Custom API")
+    .version("100")).addTagsItem(new Tag().name("mytag"));
+}
+----
+
+===  Can I use spring property with swagger annotations?
+* The support of spring property resolver for `@Info`: `title` * `description` * `version` * `termsOfService`
+* The support of spring property resolver for `@Info.license`: `name` * `url`
+* The support of spring property resolver for `@Info.contact`: `name` * `email` * `url`
+* The support of spring property resolver for `@Operation`: `description` * `summary`
+* The support of spring property resolver for `@Parameter`: `description` * `name`
+* The support of spring property resolver for `@ApiResponse`: `description`
+* Its also possible to declare security URLs for `@OAuthFlow`: `openIdConnectUrl` * `authorizationUrl` * `refreshUrl` * `tokenUrl`
+* The support of spring property resolver for `@Schema`: `name` * `title` * `description` , by setting `springdoc.api-docs.resolve-schema-properties` to `true`
+* The support of spring property resolver for `@ExtensionProperty` by setting `springdoc.api-docs.resolve-extensions-properties` to `true`
+
+===  How is server URL generated ?
+* Generating automatically server URL may be useful, if the documentation is not present.
+* If the server annotations are present, they will be used instead.
+
+=== How can I disable springdoc-openapi cache?
+* By default, the OpenAPI description is calculated once, and then cached.
+* Sometimes the same swagger-ui is served behind internal and external proxies. some users want the server URL, to be computed on each http request.
+* In order to disable springdoc cache, you will have to set the following property:
+[source,properties]
+----
+springdoc.cache.disabled= true
+----
+
+=== How can I expose the mvc api-docs endpoints without using the `swagger-ui`?
+* You should use the `springdoc-openapi-core` dependency only:
+
+[source,xml]
+----
+
+  org.springdoc
+  springdoc-openapi-starter-webmvc-api
+  latest.version
+
+----
+=== How can I disable `springdoc-openapi` endpoints ?
+* Use the following property:
+----
+springdoc.api-docs.enabled=false
+----
+
+=== How can I hide Schema of the the response ?
+
+* To hide the response element, using `@Schema` annotation, as follows, at operation level:
+
+----
+@Operation(responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(hidden = true))))
+----
+
+* Or directly at `@ApiResponses` level:
+
+----
+@ApiResponses(value = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(hidden = true))) })
+OR
+@ApiResponse(responseCode = "404", description = "Not found", content = @Content)
+----
+
+=== What is the URL of the `swagger-ui`, when I set a different context-path?
+
+* If you use different context-path:
+[source,properties]
+----
+server.servlet.context-path= /foo
+----
+* The `swagger-ui` will be available on the following URL:
+** `\http://server:port/foo/swagger-ui.html`
+
+=== Can I customize OpenAPI object programmatically?
+
+* You can Define your own OpenAPI Bean: If you need the definitions to appear globally (within every group), no matter if the group fulfills the conditions specified on the GroupedOpenApi , you can use OpenAPI Bean.
+
+[source,java]
+----
+@Bean
+public OpenAPI customOpenAPI(@Value("${springdoc.version}") String appVersion) {
+   return new OpenAPI()
+    .components(new Components().addSecuritySchemes("basicScheme",
+            new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("basic")))
+    .info(new Info().title("SpringShop API").version(appVersion)
+            .license(new License().name("Apache 2.0").url("http://springdoc.org")));
+}
+----
+* If you need the definitions to appear within a specific group, and respect the conditions specified on the GroupedOpenApi, you can add OpenApiCustomizer to your GroupedOpenApi definition.
+
+[source,java]
+----
+GroupedOpenApi.builder().group("users").pathsToMatch(paths).packagesToScan(packagedToMatch).addOpenApiCustomizer(customerGlobalHeaderOpenApiCustomizer())
+                .build()
+
+@Bean
+public OpenApiCustomizer customerGlobalHeaderOpenApiCustomizer() {
+   return openApi -> openApi.path("/foo",
+   new PathItem().get(new Operation().operationId("foo").responses(new ApiResponses()
+   .addApiResponse("default",new ApiResponse().description("")
+   .content(new Content().addMediaType("fatz", new MediaType()))))));
+}
+----
+
+
+=== Where can I find the source code of the demo applications?
+* The source code of the application is available at the following GitHub repository:
+** link:https://github.com/springdoc/springdoc-openapi-demos[https://github.com/springdoc/springdoc-openapi-demos, window="_blank"]
+
+=== Does this library supports annotations from interfaces?
+* Yes
+
+=== What is the list of the excluded parameter types?
+* link:https://docs.spring.io/spring/docs/5.1.x/spring-framework-reference/web.html#mvc-ann-arguments[https://docs.spring.io/spring/docs/5.1.x/spring-framework-reference/web.html#mvc-ann-arguments, window="_blank"].
+
+=== Is file upload supported ?
+* The library supports the main file types: `MultipartFile`,  `@RequestPart`, `FilePart`
+* You can upload a file as follows:
+
+[source,java]
+----
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Encoding;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+
+@PostMapping(value = "/upload", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity upload(@Parameter(description = "file") final MultipartFile file) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithQuery", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+public ResponseEntity uploadFileWithQuery(@Parameter(description = "file") @RequestPart("file") final MultipartFile file,
+        @Parameter(description = "An extra query parameter") @RequestParam String name) {
+    return null;
+}
+
+@PostMapping(value = "/uploadFileWithJson", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {
+        MediaType.APPLICATION_JSON_VALUE})
+public ResponseEntity uploadFileWithJson(
+        @RequestBody(content = @Content(encoding = @Encoding(name = "jsonRequest", contentType = MediaType.APPLICATION_JSON_VALUE)))
+        @Parameter(description = "An extra JSON payload sent with file") @RequestPart("jsonRequest") final JsonRequest jsonRequest,
+        @RequestPart("file") final MultipartFile file) {
+    return null;
+}
+----
+
+=== Can I use `@Parameter` inside `@Operation` annotation?
+* Yes, it's supported
+
+=== Why my parameter is marked as required?
+* Any `@GetMapping` parameters is marked as required, even if `@RequestParam` is missing.
+* You can add `@Parameter(required=false)` annotation if you need different behaviour.
+* Query parameters with `defaultValue` specified are marked as required.
+
+=== How are overloaded methods with the same endpoints, but with different parameters
+* `springdoc-openapi` renders these methods as a single endpoint. It detects the overloaded endpoints, and generates parameters.schema.oneOf.
+
+=== What is a proper way to set up Swagger UI to use provided spec.yml?
+* With this property, all the `springdoc-openapi` auto-configuration beans are disabled:
+[source,properties]
+----
+springdoc.api-docs.enabled=false
+----
+* Then enable the minimal Beans configuration, by adding this Bean:
+
+[source,java]
+----
+@Bean
+SpringDocConfiguration springDocConfiguration(){
+   return new SpringDocConfiguration();
+}
+
+@Bean
+SpringDocConfigProperties springDocConfigProperties() {
+   return new SpringDocConfigProperties();
+}
+
+@Bean
+ObjectMapperProvider objectMapperProvider(SpringDocConfigProperties springDocConfigProperties){
+    return new ObjectMapperProvider(springDocConfigProperties);
+}
+----
+
+* Then configure, the path of your custom UI yaml file.
+[source,properties]
+----
+springdoc.swagger-ui.url=/api-docs.yaml
+----
+
+=== Is there a way to send authorization header through the @Parameter tag?
+* The OpenAPI 3 specification does not allow explicitly adding Authorization header.
+`Note: Header parameters named Accept, Content-Type and Authorization are not allowed. To describe these headers`
+* For more information, you can read:
+** link:https://swagger.io/docs/specification/describing-parameters/#header-parameters[https://swagger.io/docs/specification/describing-parameters/#header-parameters, window="_blank"]
+
+=== My Rest Controller using @Controller annotation is ignored?
+* This is the default behaviour if your `@Controller` doesn't have annotation `@ResponseBody`
+* You can change your controllers to `@RestControllers`. Or add `@ResponseBody` + `@Controller`.
+* If its not possible, you can configure springdoc to scan you additional controller using SpringDocUtils. For example:
+
+[source,java]
+----
+static {
+   SpringDocUtils.getConfig().addRestControllers(HelloController.class);
+}
+----
+
+=== How can I define groups using application.yml?
+* You can load groups dynamically using spring-boot configuration files.
+* Note that, for this usage, you don't have to declare the **GroupedOpenApi** Bean.
+* You need to declare the following properties, under the prefix **springdoc.group-configs**.
+* For example:
+[source,properties]
+----
+springdoc.group-configs[0].group=users
+springdoc.group-configs[0].paths-to-match=/user/**
+springdoc.group-configs[0].packages-to-scan=test.org.springdoc.api
+----
+* The list of properties under this prefix, are available here:
+** link:index.html#properties[springdoc-openapi-properties]
+
+=== How can I extract fields from parameter object ?
+* You can use springdoc annotation @ParameterObject.
+* Request parameter annotated with @ParameterObject will help adding each field of the parameter as a separate request parameter.
+* This is compatible with Spring MVC request parameters mapping to POJO object.
+* This annotation does not support nested parameter objects.
+* POJO object must contain getters for fields with mandatory prefix `get`. Otherwise, the swagger documentation will not show the fields of the annotated entity.
+
+=== How can I use the last `springdoc-openapi` SNAPSHOT ?
+* For testing purposes only, you can test temporarily using the last `springdoc-openapi` SNAPSHOT
+* To achieve that, configure your pom.xml file with the following `` section:
+
+[source,xml]
+----
+    
+      
+        Central Portal Snapshots
+        central-portal-snapshots
+        https://central.sonatype.com/repository/maven-snapshots/
+        
+          false
+        
+        
+          true
+        
+      
+    
+----
+
+=== How can I use enable `springdoc-openapi` MonetaryAmount support ?
+* If an application wants to enable the `springdoc-openapi` support, it declares:
+
+[source,java]
+----
+SpringDocUtils.getConfig().replaceWithClass(MonetaryAmount.class, org.springdoc.core.converters.models.MonetaryAmount.class);
+----
+
+* Another solution, without using springdoc-openapi MonetaryAmount, would be:
+
+[source,java]
+----
+SpringDocUtils.getConfig().replaceWithSchema(MonetaryAmount.class, new ObjectSchema()
+            .addProperties("amount", new NumberSchema()).example(99.96)
+            .addProperties("currency", new StringSchema().example("USD")));
+----
+
+=== How can i aggregate external endpoints (exposing OPENAPI 3 spec) inside one single application?
+The properties `springdoc.swagger-ui.urls.*`, are suitable to configure external (/v3/api-docs url).
+For example if you want to agreagte all the endpoints of other services, inside one single application.
+IMPORTANT: Don't forget that CORS needs to be enabled as well.
+
+=== How can use custom json/yml file instead of generated one ?
+If your file open-api.json, contains the OpenAPI documentation in OpenAPI 3 format.
+Then simply declare: The file name can be anything you want, from the moment your declaration is consistent yaml or json OpenAPI Spec.
+[source,properties]
+----
+   springdoc.swagger-ui.url=/open-api.json
+----
+
+Then the file open-api.json, should be located in: src/main/resources/static
+No additional configuration is needed.
+
+=== How can i enable CSRF support?
+If you are using standard headers.( For example using spring-security headers)
+If the CSRF Token is required, swagger-ui automatically sends the new XSRF-TOKEN during each HTTP REQUEST.
+
+If your XSRF-TOKEN isn't standards-based, you can use a requestInterceptor to manually capture and attach the latest xsrf token to requests programmatically via spring resource transformer:
+
+* link:https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md#requestinterceptor[https://github.com/swagger-api/swagger-ui/blob/main/docs/usage/configuration.md#requestinterceptor, window="_blank"]
+
+Starting from release v1.4.4 of springdoc-openapi, a new property is added to enable CSRF support, while using standard header names:
+[source,properties]
+----
+springdoc.swagger-ui.csrf.enabled=true
+----
+
+=== How can i disable the default swagger petstore URL?
+You can use the following property:
+[source,properties]
+----
+springdoc.swagger-ui.disable-swagger-default-url=true
+----
+
+=== Is @PageableDefault supported, to enhance the OpenAPI 3 docuementation?
+Yes, you can use it in conjunction with  `@ParameterObject` annotation.
+Also, the spring-boot `spring.data.web.*` and `spring.data.rest.default.*` properties are supported since v1.4.5
+
+=== How can i make spring security login-endpoint visible ?
+You can use the following property:
+[source,properties]
+----
+springdoc.show-login-endpoint=true
+----
+
+=== How can i show schema definitions even the schema is not referenced?
+You can use the following property:
+[source,properties]
+----
+springdoc.remove-broken-reference-definitions=false
+----
+
+=== How to override @Deprecated?
+The whole idea of `springdoc-openapi` is to get your documentation the closest to the code, with minimal code changes.
+If the code contains `@Deprecated`, `sprindoc-openapi` will consider its schema as Deprecated as well.
+If you want to declare a field on swagger as non deprecated, even with the java code, the field contains `@Depreacted`,
+You can use the following property that is available since release v1.4.3:
+[source,properties]
+----
+springdoc.model-converters.deprecating-converter.enabled=false
+----
+
+=== How can i display a method that returns ModelAndView?
+
+You can use the following property:
+[source,properties]
+----
+springdoc.model-and-view-allowed=true
+----
+
+
+=== How can i have pretty-printed output of the OpenApi specification?
+
+You can use the following property:
+[source,properties]
+----
+springdoc.writer-with-default-pretty-printer=true
+----
+
+=== How can i define different schemas for the same class?
+Complex objects are always resolved as a reference to a schema defined in components.
+For example let's consider a `Instance` class with an `workAddress` and `homeAddress` attribute of type `Address`:
+
+[source,java]
+----
+public class PersonDTO {
+
+	@JsonProperty
+	private String email;
+
+	@JsonProperty
+	private String firstName;
+
+	@JsonProperty
+	private String lastName;
+
+	@Schema(ref = "WorkAddressSchema")
+	@JsonProperty
+	private Address workAddress;
+
+	@Schema(ref = "HomeAddressSchema")
+	@JsonProperty
+	private Address homeAddress;
+
+}
+
+public class Address {
+
+	@JsonProperty
+	private String addressName;
+
+}
+----
+
+If you want to define two different schemas for this class, you can set up 2 different schemas as follow:
+
+[source,java]
+----
+@Bean
+public OpenAPI customOpenAPI() {
+return new OpenAPI().components(new Components()
+.addSchemas("WorkAddressSchema", getSchemaWithDifferentDescription(Address.class, "work Address" ))
+.addSchemas("HomeAddressSchema", getSchemaWithDifferentDescription(Address.class, "home Address" )));
+}
+
+private Schema getSchemaWithDifferentDescription(Class className, String description){
+ResolvedSchema resolvedSchema = ModelConverters.getInstance()
+.resolveAsResolvedSchema(
+new AnnotatedType(className).resolveAsRef(false));
+return resolvedSchema.schema.description(description);
+}
+----
+
+=== How can i define different description for a class attribute depending on usage?
+For example let's consider a `Instance` class with an `email` attribute:
+
+[source,java]
+----
+public class PersonDTO {
+
+	@JsonProperty
+	private String email;
+
+	@JsonProperty
+	private String firstName;
+
+	@JsonProperty
+	private String lastName;
+
+
+}
+----
+
+If you want to define two different description for the  `email`, you can set up 2 different schemas as follow:
+
+[source,java]
+----
+@Bean
+public OpenAPI customOpenAPI() {
+return new OpenAPI().components(new Components()
+.addSchemas("PersonDTO1", getFieldSchemaWithDifferentDescription(PersonDTO.class, "work email" ))
+.addSchemas("PersonDTO2", getFieldSchemaWithDifferentDescription(PersonDTO.class, "home email" )));
+}
+
+private Schema getFieldSchemaWithDifferentDescription(Class className, String description){
+    ResolvedSchema resolvedSchema = ModelConverters.getInstance()
+            .resolveAsResolvedSchema(
+                    new AnnotatedType(className).resolveAsRef(false));
+    return resolvedSchema.schema.addProperties("email", new StringSchema().description(description));
+}
+----
+
+=== Customizing swagger static resources
+
+You can customize swagger documentation static resources located in `META-INF/resources/webjars/swagger-ui/{swagger.version}/`. The list of resources includes:
+
+- `index.html`
+- `swagger-ui-bundle.js`
+- `swagger-ui.css`
+- `swagger-ui-standalone-preset.js`
+- `swagger-ui.css.map`
+- `swagger-ui-bundle.js.map`
+- `swagger-ui-standalone-preset.js.map`
+- `favicon-32x32.png`
+
+To do this, you need to extend the implementation of `SwaggerIndexPageTransformer`
+
+[source,java]
+----
+public class SwaggerCodeBlockTransformer
+       extends SwaggerIndexPageTransformer {
+  // < constructor >
+  @Override
+  public Resource transform(HttpServletRequest request,
+                            Resource resource,
+                            ResourceTransformerChain transformer)
+                            throws IOException {
+      if (resource.toString().contains("swagger-ui.css")) {
+          final InputStream is = resource.getInputStream();
+          final InputStreamReader isr = new InputStreamReader(is);
+          try (BufferedReader br = new BufferedReader(isr)) {
+              final String css = br.lines().collect(Collectors.joining());
+              final byte[] transformedContent = css.replace("old", "new").getBytes();
+              return  new TransformedResource(resource, transformedContent);
+          } // AutoCloseable br > isr > is
+      }
+      return super.transform(request, resource, transformer);
+  }
+
+}
+----
+
+Next, add transformer `@Bean` to your `@Configuration`
+
+[source,java]
+----
+@Configuration
+public class OpenApiConfig {
+    @Bean
+    public SwaggerIndexTransformer swaggerIndexTransformer(
+            SwaggerUiConfigProperties a,
+            SwaggerUiOAuthProperties b,
+            SwaggerUiConfigParameters c,
+            SwaggerWelcomeCommon d) {
+        return new SwaggerCodeBlockTransformer(a, b, c, d);
+    }
+}
+----
+
+Illustrative example
+
+image::img/static_content_transformation.png[Illustrative example]
+
+=== Is GraalVM supported ?
+The native support available added in spring-boot 3.
+If you have some time, do not hesitate to test it before the next release.
+
+For the OpenAPI REST endpoints, you just need to build your application with the spring `native` profile.
+
+If you give `@OpenAPIDefinition` or `@SecurityScheme` to a class that has no implementation, that class will disappear when you natively compile.
+To avoid this, give the class a `@Configuration`.
+----
+@Configuration
+@OpenAPIDefinition(info = @Info(title = "My App", description = "description"))
+public class OpenAPIConfig {
+}
+----
+
+=== How to Integrate Open API 3 with Spring project (not Spring Boot)?
+When your application is using spring without (spring-boot), you need to add beans and  auto-configuration that are natively provided in spring-boot.
+
+For example, lets assume you want load the swagger-ui in spring-mvc application:
+
+* You mainly, need to add the springdoc-openapi module
+
+[source,xml]
+----
+
+   org.springdoc
+   springdoc-openapi-starter-webmvc-ui
+   last.version
+
+----
+
+* If you don't have the spring-boot and spring-boot-autoconfigure dependencies, you need to add them. And pay attention to the compatibility matrix, between you spring.version and spring-boot.version. For example, in this case (spring.version=5.1.12.RELEASE):
+
+[source,xml]
+----
+		
+			org.springframework.boot
+			spring-boot-autoconfigure
+			3.3.3
+		
+----
+
+* Scan for the `springdoc-openapi` 'auto-configuration classes that spring-boot automatically loads for you.
+* Depending on your module, you can find them on the file: `spring.factories` of each `springdoc-openapi` module.
+
+[source,java]
+----
+@Configuration
+@EnableWebMvc
+public class WebConfig implements WebApplicationInitializer {
+
+	@Override
+	public void onStartup(ServletContext servletContext)  {
+		WebApplicationContext context = getContext();
+		servletContext.addListener(new ContextLoaderListener(context));
+		ServletRegistration.Dynamic dispatcher = servletContext.addServlet("RestServlet",
+				new DispatcherServlet(context));
+		dispatcher.setLoadOnStartup(1);
+		dispatcher.addMapping("/*");
+	}
+
+	private AnnotationConfigWebApplicationContext getContext() {
+		AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+		context.register(this.getClass(),
+				SpringDocConfiguration.class,
+				SpringDocConfigProperties.class,
+				SpringDocSpecPropertiesConfiguration.class,
+				SpringDocWebMvcConfiguration.class, 
+				MultipleOpenApiSupportConfiguration.class,
+				SwaggerConfig.class,
+				SwaggerUiConfigProperties.class,
+				SwaggerUiOAuthProperties.class,
+		);
+		return context;
+	}
+}
+----
+
+* Depending on your module, you can find them on the file: `org.springframework.boot.autoconfigure.AutoConfiguration.imports` of each `springdoc-openapi` module.
+* For groups usage make sure your  `GroupedOpenApi` Beans are scanned.
+* If additionally, you are using custom `context path`: `/my-servlet-path`. Make sure you declare the following property:
+[source,properties]
+----
+spring.mvc.servlet.path=/my-servlet-path
+----
+
+=== What is the compatibility matrix of `springdoc-openapi` with `spring-boot` ?
+`springdoc-openapi 3.x` is compatible with `spring-boot 4`.
+
+In general, **you should only pick the last stable version as per today {springdoc-upcoming-version}.**
+
+More precisely, this the exhaustive list of spring-boot versions against which `springdoc-openapi` has been built:
+
+|===
+| Spring Boot Versions | Springdoc OpenAPI Versions
+|`4.0.x` | `3.0.x` 
+
+|===
+
+
+=== Why am i getting an error: `Swagger UI unable to render definition`, when overriding the default spring registered `HttpMessageConverter`?
+When overriding the default spring-boot registered `HttpMessageConverter`, you should have `ByteArrayHttpMessageConverter` registered as well to have proper `springdoc-openapi` support.
+
+[source,java]
+----
+    converters.add(new ByteArrayHttpMessageConverter());
+    converters.add(new MappingJackson2HttpMessageConverter(jacksonBuilder.build()));
+----
+NOTE:  Order is very important, when registering `HttpMessageConverters`.
+
+=== Some parameters are not generated in the resulting OpenAPI spec.
+
+The issue is caused by the changes introduced by link:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes[Spring-Boot 3.2.0, window="_blank"]
+in particular for the **Parameter Name Discovery**.
+This can be fixed by adding the `-parameters` arg to the Maven Compiler Plugin.
+
+[source,xml, subs="attributes+"]
+----
+
+    org.apache.maven.plugins
+    maven-compiler-plugin
+    
+        true
+    
+
+----
+
diff --git a/src/docs/asciidoc/v4/favicon.ico b/src/docs/asciidoc/v4/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..45468e6bdc0bf260cfe760cb74d127dccba082bc
GIT binary patch
literal 182726
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
z
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

@DgZG)j$0 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 literal 0 HcmV?d00001 diff --git a/src/docs/asciidoc/v4/features.adoc b/src/docs/asciidoc/v4/features.adoc new file mode 100644 index 0000000..34e8863 --- /dev/null +++ b/src/docs/asciidoc/v4/features.adoc @@ -0,0 +1,194 @@ +[[features]] +== Springdoc-openapi Features + +=== Adding API Information and Security documentation +The library uses spring-boot application auto-configured packages to scan for the following annotations in spring beans: OpenAPIDefinition and Info. +These annotations declare, API Information: Title, version, licence, security, servers, tags, security and externalDocs. +For better performance of documentation generation, declare @OpenAPIDefinition and @SecurityScheme annotations within a spring managed bean. + +=== Error Handling for REST using @ControllerAdvice +To generate documentation automatically, make sure all the methods declare the HTTP Code responses using the annotation: @ResponseStatus + +=== Disabling the `springdoc-openapi` endpoints +In order to disable the `springdoc-openapi` endpoint (/v3/api-docs by default) use the following property: +[source,properties] +---- +# Disabling the /v3/api-docs endpoint +springdoc.api-docs.enabled=false +---- + +=== Disabling the swagger-ui +In order to disable the swagger-ui, use the following property: +[source,properties] +---- +# Disabling the swagger-ui +springdoc.swagger-ui.enabled=false +---- + +=== Swagger-ui configuration +The library supports the swagger-ui official properties: + +* link:https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/[https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/, window="_blank"] + +You need to declare swagger-ui properties as spring-boot properties. +All these properties should be declared with the following prefix: **springdoc.swagger-ui** + +=== Selecting the Rest Controllers to include in the documentation +Additionally, to @Hidden annotation from swagger-annotations, its possible to restrict the generated OpenAPI description using package or path configuration. + +For the list of packages to include, use the following property: +[source,properties] +---- +# Packages to include +springdoc.packagesToScan=com.package1, com.package2 +---- + +For the list of paths to include, use the following property: +[source,properties] +---- +# Paths to include +springdoc.pathsToMatch=/v1, /api/balance/** +---- + +=== Spring-webflux/WebMvc.fn with Functional Endpoints +Since version v1.5.0, a functional DSL has been introduced, thanks to this enhancement in the spring-framework: link:https://github.com/spring-projects/spring-framework/issues/25938[#25938] + +It's an alternative functional API to the `@RouterOperations` annotations. + +This is a sample DSL, to generate OpenAPI description to the webflux/WebMvc.fn REST endpoints: + +[source,java] +---- +@Bean +RouterFunction routes() { + return route().GET("/foo", HANDLER_FUNCTION, ops -> ops + .operationId("hello") + .parameter(parameterBuilder().name("key1").description("My key1 description")) + .parameter(parameterBuilder().name("key2").description("My key2 description")) + .response(responseBuilder().responseCode("200").description("This is normal response description")) + .response(responseBuilder().responseCode("404").description("This is another response description")) + ).build(); +} +---- + +Here is the link for some sample codes: + +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/HelloRouter.java[HelloRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/quotes/QuotesRouter.java[QuotesRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/book/BookRouter.java[BookRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/employee/EmployeeRouter.java[EmployeeRouter] +- link:https://github.com/springdoc/springdoc-openapi/blob/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app90/position/PositionRouter.java[PositionRouter] + +And the Demo code, using the functional endpoints DSL: + +- link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample webflux application using functional DSL] + +Since version `v1.3.8`, the support of functional endpoints has been added. +Two main annotations have been added for this purpose: `@RouterOperations` and `@RouterOperation`. + +Only REST APIs with the `@RouterOperations` and `@RouterOperation` can be displayed on the swagger-ui. + +* `@RouterOperation`: It can be used alone, if the Router bean contains one single route related to the REST API.. +When using @RouterOperation, its not mandatory to fill the path + +* `@RouterOperation`, can reference directly a spring Bean (beanClass property) and the underlying method (beanMethod property): Springdoc-openapi, will then inspect this method and the swagger annotations on this method level. + +[source,java] +---- +@Bean +@RouterOperation(beanClass = EmployeeService.class, beanMethod = "findAllEmployees") +RouterFunction getAllEmployeesRoute() { + return route(GET("/employees").and(accept(MediaType.APPLICATION_JSON)), + req -> ok().body( + employeeService().findAllEmployees(), Employee.class)); +} +---- + +* `@RouterOperation`, contains the `@Operation` annotation. +The `@Operation` annotation can also be placed on the bean method level if the property beanMethod is declared. + +IMPORTANT: Don't forget to set **operationId** which is **mandatory**. + +[source,java] +---- +@Bean +@RouterOperation(operation = @Operation(operationId = "findEmployeeById", summary = "Find purchase order by ID", tags = { "MyEmployee" }, + parameters = { @Parameter(in = ParameterIn.PATH, name = "id", description = "Employee Id") }, + responses = { @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(schema = @Schema(implementation = Employee.class))), + @ApiResponse(responseCode = "400", description = "Invalid Employee ID supplied"), + @ApiResponse(responseCode = "404", description = "Employee not found") })) +RouterFunction getEmployeeByIdRoute() { + return route(GET("/employees/{id}"), + req -> ok().body( + employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class)); +} +---- + +* `@RouterOperations`: This annotation should be used if the Router bean contains multiple routes. +When using RouterOperations, its mandatory to fill the path property. + +* A `@RouterOperations`, contains many `@RouterOperation`. + +[source,java] +---- +@RouterOperations({ @RouterOperation(path = "/getAllPersons", beanClass = PersonService.class, beanMethod = "getAll"), + @RouterOperation(path = "/getPerson/{id}", beanClass = PersonService.class, beanMethod = "getById"), + @RouterOperation(path = "/createPerson", beanClass = PersonService.class, beanMethod = "save"), + @RouterOperation(path = "/deletePerson/{id}", beanClass = PersonService.class, beanMethod = "delete") }) +@Bean +public RouterFunction personRoute(PersonHandler handler) { + return RouterFunctions + .route(GET("/getAllPersons").and(accept(MediaType.APPLICATION_JSON)), handler::findAll) + .andRoute(GET("/getPerson/{id}").and(accept(MediaType.APPLICATION_STREAM_JSON)), handler::findById) + .andRoute(POST("/createPerson").and(accept(MediaType.APPLICATION_JSON)), handler::save) + .andRoute(DELETE("/deletePerson/{id}").and(accept(MediaType.APPLICATION_JSON)), handler::delete); +} +---- + +All the documentations filled using @RouterOperation, might be completed by the router function data. +For that, `@RouterOperation` fields must help identify uniquely the concerned route. +`springdoc-openpi` scans for a unique route related to a `@RouterOperation` annotation, using on the following criteria: + +* by path +* by path and RequestMethod +* by path and produces +* by path and consumes +* by path and RequestMethod and produces +* by path and RequestMethod and consumes +* by path and produces and consumes +* by path and RequestMethod and produces and consumes + +Some code samples are available on GITHUB of demos: + +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-boot-3-webflux-functional[Sample application with Functional Endpoints documentation, window="_blank"] + +And some project tests: (from app69 to app75) + +* link:https://github.com/springdoc/springdoc-openapi/tree/master/springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api[Sample code with Functional Endpoints documentation, window="_blank"] + +=== Integration with WildFly + +* For WildFly users, you need to add the following dependency to make the swagger-ui work: + +[source,xml] +---- + + org.webjars + webjars-locator-jboss-vfs + 0.1.0 + +---- + +++++ + + + +++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v4/getting-started.adoc b/src/docs/asciidoc/v4/getting-started.adoc new file mode 100644 index 0000000..08fcd18 --- /dev/null +++ b/src/docs/asciidoc/v4/getting-started.adoc @@ -0,0 +1,46 @@ +[[getting-started]] +== Getting Started + +For the integration between spring-boot and swagger-ui, add the library to the list of your project dependencies (No additional configuration is needed) + +[source,xml, subs="attributes+"] +---- + + org.springdoc + springdoc-openapi-starter-webmvc-ui + {springdoc-upcoming-version} + +---- + + +This will automatically deploy swagger-ui to a spring-boot application: + +* Documentation will be available in HTML format, using the official link:https://github.com/swagger-api/swagger-ui.git[swagger-ui jars, window="_blank"] +* The Swagger UI page will then be available at `\http://server:port/context-path/swagger-ui.html` and the OpenAPI description will be available at the following url for json format: `\http://server:port/context-path/v3/api-docs` +** server: The server name or IP +** port: The server port +** context-path: The context path of the application +* Documentation will be available in yaml format as well, on the following path : /v3/api-docs.yaml + +TIP: For custom path of the swagger documentation in HTML format, add a custom springdoc property, in your spring-boot configuration file: . + + +[source,properties] +---- +# swagger-ui custom path +springdoc.swagger-ui.path=/swagger-ui.html +---- + +++++ + + + +++++ \ No newline at end of file diff --git a/src/docs/asciidoc/v4/index.adoc b/src/docs/asciidoc/v4/index.adoc new file mode 100644 index 0000000..1d7e2bd --- /dev/null +++ b/src/docs/asciidoc/v4/index.adoc @@ -0,0 +1,55 @@ += springdoc-openapi v{springdoc-upcoming-version} +include::_attributes.adoc[] + +IMPORTANT: ``springdoc-openapi v1.8.0 `` is the latest Open Source release supporting Spring Boot 2.x and 1.x. + +An extended support for https://springdoc.org/v1[*springdoc-openapi v1*] project is now available for organizations that need support beyond 2023. + +For more details, feel free to reach out: sales@springdoc.org + +`springdoc-openapi` is on link:https://opencollective.com/springdoc[Open Collective, window="_blank"]. If you ❤️ this project consider becoming a link:https://github.com/sponsors/springdoc[sponsor, window="_blank"]. + +This project is sponsored by +++++ +

+ + +    + + + + + + + + + + + + +

+++++ + +link:https://github.com/springdoc/springdoc-openapi[View project on GitHub, window="_blank"] image:img/github-logo.png[link="https://github.com/springdoc/springdoc-openapi"] + +include::intro.adoc[] + +include::getting-started.adoc[] + +include::modules.adoc[] + +include::features.adoc[] + +include::properties.adoc[] + +include::plugins.adoc[] + +include::demos.adoc[] + +include::migrating-from-springfox.adoc[] + +include::other-resources.adoc[] + +include::sponsor.adoc[] + +include::thanks.adoc[] + +include::faq.adoc[] diff --git a/src/docs/asciidoc/v4/intro.adoc b/src/docs/asciidoc/v4/intro.adoc new file mode 100644 index 0000000..5859101 --- /dev/null +++ b/src/docs/asciidoc/v4/intro.adoc @@ -0,0 +1,28 @@ +[[Introduction]] +== Introduction + + +`springdoc-openapi` java library helps to automate the generation of API documentation using spring boot projects. +`springdoc-openapi` works by examining an application at runtime to infer API semantics based on spring configurations, class structure and various annotations. + +Automatically generates documentation in JSON/YAML and HTML format APIs. +This documentation can be completed by comments using swagger-api annotations. + +This library supports: + +* OpenAPI 3 +* Spring-boot v3 (Java 17 & Jakarta EE 9) +* JSR-303, specifically for @NotNull, @Min, @Max, and @Size. +* Swagger-ui +* OAuth 2 +* GraalVM native images + +The following video introduces the Library: + + +[link=https://youtu.be/ondlnm5ZoFM?t=9,window=_blank] +image::img/spring-io-24.png[spring.io conference] + + +This is a community-based project, not maintained by the Spring Framework Contributors (Pivotal). + diff --git a/src/docs/asciidoc/migrating-from-springdoc-v1.adoc b/src/docs/asciidoc/v4/migrating-from-springdoc-v1.adoc similarity index 100% rename from src/docs/asciidoc/migrating-from-springdoc-v1.adoc rename to src/docs/asciidoc/v4/migrating-from-springdoc-v1.adoc diff --git a/src/docs/asciidoc/v4/migrating-from-springfox.adoc b/src/docs/asciidoc/v4/migrating-from-springfox.adoc new file mode 100644 index 0000000..a4c67ca --- /dev/null +++ b/src/docs/asciidoc/v4/migrating-from-springfox.adoc @@ -0,0 +1,113 @@ +[[migrating-from-springfox]] +== Migrating from SpringFox + +* Remove springfox and swagger 2 dependencies. Add `springdoc-openapi-starter-webmvc-ui` dependency instead. + +[source,xml, subs="attributes+"] +---- + + org.springdoc + springdoc-openapi-starter-webmvc-ui + {springdoc-upcoming-version} + +---- + +* Replace swagger 2 annotations with swagger 3 annotations (it is already included with `springdoc-openapi-starter-webmvc-ui` dependency). +Package for swagger 3 annotations is `io.swagger.v3.oas.annotations`. + +- `@Api` -> `@Tag` +- `@ApiIgnore` -> `@Parameter(hidden = true)` or `@Operation(hidden = true)` or `@Hidden` +- `@ApiImplicitParam` -> `@Parameter` +- `@ApiImplicitParams` -> `@Parameters` +- `@ApiModel` -> `@Schema` +- `@ApiModelProperty(allowEmptyValue = true)` -> `@Schema(nullable = true)` +- `@ApiModelProperty` -> `@Schema` +- `@ApiOperation(value = "foo", notes = "bar")` -> `@Operation(summary = "foo", description = "bar")` +- `@ApiParam` -> `@Parameter` +- `@ApiResponse(code = 404, message = "foo")` -> `@ApiResponse(responseCode = "404", description = "foo")` + +* This step is optional: Only if you have **multiple** `Docket` beans replace them with `GroupedOpenApi` beans. + +Before: + +[source,java, subs="attributes+"] +---- + @Bean + public Docket publicApi() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.public")) + .paths(PathSelectors.regex("/public.*")) + .build() + .groupName("springshop-public") + .apiInfo(apiInfo()); + } + + @Bean + public Docket adminApi() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.admin")) + .paths(PathSelectors.regex("/admin.*")) + .apis(RequestHandlerSelectors.withMethodAnnotation(Admin.class)) + .build() + .groupName("springshop-admin") + .apiInfo(apiInfo()); + } +---- + +Now: + +[source,java, subs="attributes+"] +---- + @Bean + public GroupedOpenApi publicApi() { + return GroupedOpenApi.builder() + .group("springshop-public") + .pathsToMatch("/public/**") + .build(); + } + @Bean + public GroupedOpenApi adminApi() { + return GroupedOpenApi.builder() + .group("springshop-admin") + .pathsToMatch("/admin/**") + .addOpenApiMethodFilter(method -> method.isAnnotationPresent(Admin.class)) + .build(); + } +---- + +If you have **only one** `Docket` -- remove it and instead add properties to your `application.properties`: + +[source,properties, subs="attributes+"] +---- +springdoc.packagesToScan=package1, package2 +springdoc.pathsToMatch=/v1, /api/balance/** +---- + +* Add bean of `OpenAPI` type. See example: + +[source,java, subs="attributes+"] +---- + @Bean + public OpenAPI springShopOpenAPI() { + return new OpenAPI() + .info(new Info().title("SpringShop API") + .description("Spring shop sample application") + .version("v0.0.1") + .license(new License().name("Apache 2.0").url("http://springdoc.org"))) + .externalDocs(new ExternalDocumentation() + .description("SpringShop Wiki Documentation") + .url("https://springshop.wiki.github.org/docs")); + } +---- + +* If the swagger-ui is served behind a proxy: + ** link:index.html#how-can-i-deploy-springdoc-openapi-starter-webmvc-ui-behind-a-reverse-proxy[how-can-i-deploy-springdoc-openapi-starter-webmvc-ui-behind-a-reverse-proxy] +* To customise the Swagger UI + ** link:index.html#how-can-i-configure-swagger-ui[how-can-i-configure-swagger-ui] +* To hide an operation or a controller from documentation + ** link:index.html#how-can-i-hide-an-operation-or-a-controller-from-documentation[how-can-i-hide-an-operation-or-a-controller-from-documentation] + + + diff --git a/src/docs/asciidoc/v4/modules.adoc b/src/docs/asciidoc/v4/modules.adoc new file mode 100644 index 0000000..293da87 --- /dev/null +++ b/src/docs/asciidoc/v4/modules.adoc @@ -0,0 +1,308 @@ +[[modules]] +== Springdoc-openapi Modules + +=== General overview +image::img/common.png[Architecture] + +=== Spring WebMvc support + +* Documentation will be available at the following url for json format: `\http://server:port/context-path/v3/api-docs` +** server: The server name or IP +** port: The server port +** context-path: The context path of the application +* Documentation will be available in yaml format as well, on the following path : /v3/api-docs.yaml +* Add the library to the list of your project dependencies. (No additional configuration is needed) + +[source,xml, subs="attributes+"] +---- + + org.springdoc + springdoc-openapi-starter-webmvc-api + {springdoc-upcoming-version} + +---- + +NOTE: This dependency is relevant if you want to generate the OpenAPI description without using the swagger-ui. + +TIP: For custom path of the OpenAPI documentation in Json format, add a custom springdoc property, in your spring-boot configuration file: + +[source,properties, subs="attributes+"] +---- +# /api-docs endpoint custom path +springdoc.api-docs.path=/api-docs +---- + + +=== Spring WebFlux support + +* Documentation will be available in yaml format as well, on the following path : /v3/api-docs.yaml +* Add the library to the list of your project dependencies (No additional configuration is needed) + +[source,xml, subs="attributes+"] +---- + + org.springdoc + springdoc-openapi-starter-webflux-api + {springdoc-upcoming-version} + +---- + + +=== Spring Hateoas support +The support for Spring Hateoas is available using the dependency springdoc-openapi-hateoas. + +The projects that use `spring-boot-starter-hateoas` should use: + +- `springdoc-openapi-starter-webmvc-api` if they need only the access to the OpenAPI endpoints +- OR `springdoc-openapi-starter-webmvc-ui`, if they need also the access to the swagger-ui + + +=== Spring Data Rest support + +`springdoc-openapi` project supports `spring-boot-starter-data-rest` types like: `@RepositoryRestResource` and `QuerydslPredicate` annotations. + +The projects that use `spring-boot-starter-data-rest` should use: + +- `springdoc-openapi-starter-webmvc-api` if they need only the access to the OpenAPI endpoints +- OR `springdoc-openapi-starter-webmvc-ui`, if they need also the access to the swagger-ui + +=== Spring Security support + +`springdoc-openapi` helps ignoring @AuthenticationPrincipal type in case it is used on REST Controllers. + +`springdoc-openapi` supports also exposing Oauth2 endpoints of `spring-security-oauth2-authorization-server`. + +The projects that use `spring-boot-starter-security` or `spring-security-oauth2-authorization-server` should use: + +- `springdoc-openapi-starter-webmvc-api` if they depend on `spring-boot-starter-web` and they only need the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webmvc-ui`, if they depend on `spring-boot-starter-web` and they also need the access to the swagger-ui. +- OR `springdoc-openapi-starter-webflux-api` if they depend on `spring-boot-starter-webflux` and they only the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webflux-ui`, if they depend on `spring-boot-starter-webflux` and they also need the access to the swagger-ui. + +=== Actuator support + +* In order to display `spring-boot-actuator` endpoints, simply add the following property: + +[source,properties] +---- +springdoc.show-actuator=true +---- + +Starting from the release `1.5.1`, it will be possible to expose the **swagger-ui** and the **openapi** endpoints on **actuator port**. + +NOTE: The actuator management port has to be different from the application port. + +To expose the swagger-ui, on the management port, you should set + +[source,properties] +---- +springdoc.use-management-port=true +# This property enables the openapi and swagger-ui endpoints to be exposed beneath the actuator base path. +management.endpoints.web.exposure.include=openapi, swagger-ui +---- + +Once enabled, you should also be able to see the springdoc-openapi endpoints under: (host and port depends on your settings) +- `\http://serverName:managementPort/actuator` + +For example, if you have the following settings: + +Two endpoints will be available: + +. REST API that holdes the OpenAPI definition: + +- `\http://serverName:managementPort/actuator/openapi` + +. An Endpoint, that routes to the swagger-ui: + +- `\http://serverName:managementPort/actuator/swagger-ui` + +[source,properties] +---- +management.server.port=9090 +---- + +For the example, you should also be able to see the springdoc-openapi endpoints: + +- `\http://serverName:9090/actuator` +- `\http://serverName:9090/actuator/swagger-ui` +- `\http://serverName:9090/actuator/openapi` + +All the path `springdoc-openapi` properties are not applicable when `springdoc.use-management-port=true`. + +TIP: If you want to reach the application endpoints, from the swagger-ui deployed beneath the actuator base path, using a different port from your application, `CORS for your endpoints` on your application level should be enabled. + +Additionally, it is also possible to combine this property, with the existing property to display the actuator endpoints in the swagger-ui. + +[source,properties] +---- +springdoc.show-actuator=true +---- + +Once enabled: +- A dedicated group for the actuator endpoints will be by default added. +- If no group is defined for the application, a default one will be added. + +The swagger-ui will be then accessible through the actuator port: + +- `\http://serverName:managementPort/actuator/swagger-ui` + +If the management port is different from the application port and `springdoc.use-management-port` is not defined but `springdoc.show-actuator` is set to true: + +- The swagger-ui will be then accessible through the application port. For example: `\http://serverName:applicationPort/swagger-ui.html` +- A dedicated group for the actuator endpoints will be by default added. +- If no group is defined for the application, a default one will be added. + + +TIP: If you want to reach the actuator endpoints for this case (different port from your application), `CORS` for your actuator endpoints should be enabled. + +Note: The naming of these new endpoints beneath the actuator base path cannot be customized for now. + +=== Spring Cloud Function Web support + +`spring-cloud-function-web` exposes Java Function as REST endpoint automatically. +* Since version `v1.6.3`, the support of functional endpoints has been added. + +* These starters will display the OpenAPI description of the `spring-cloud-function-web` endpoints. +- If you are using `spring-web`, simply add the `springdoc-openapi-starter-webmvc-ui` dependency. +- If you are using `spring-webflux`, simply add the `springdoc-openapi-starter-webflux-ui` dependency. + + +The customisation of the output can be achieved programmatically through `OpenApiCustomizer` or with the annotations: `@RouterOperations` and `@RouterOperation`. +For annotation usage, you have: +* `@RouterOperation`: It can be used alone, if the customisation is related to a single REST API. +When using `@RouterOperation`, it's not mandatory to fill the path + +* `@RouterOperation`, contains the `@Operation` annotation. +The `@Operation` annotation can also be placed on the bean method level if the property beanMethod is declared. + +IMPORTANT: Don't forget to set **operationId** which is **mandatory**. + +[source,java] +---- +@Bean +@RouterOperation(operation = @Operation(description = "Say hello", operationId = "hello", tags = "persons", + responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = PersonDTO.class))))) +public Supplier helloSupplier() { + return () -> new PersonDTO(); +} +---- + +* `@RouterOperations`: This annotation should be used to describe the multiple REST APIs exposed by `spring-cloud-function-web`. +When using `RouterOperations`, it's mandatory to fill the method property. + +* A `@RouterOperations`, contains many `@RouterOperation`. + +[source,java] +---- +@Bean +@RouterOperations({ + @RouterOperation(method = RequestMethod.GET, operation = @Operation(description = "Say hello GET", operationId = "lowercaseGET", tags = "persons")), + @RouterOperation(method = RequestMethod.POST, operation = @Operation(description = "Say hello POST", operationId = "lowercasePOST", tags = "positions")) +}) +public Function, Flux> lowercase() { + return flux -> flux.map(value -> value.toLowerCase()); +} +---- + +Some code samples are available on GITHUB of demos: + +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master/demo-spring-cloud-function[Sample applications with Spring Cloud Function Web, window="_blank"] + + +=== Kotlin support + +`springdoc-openapi` supports Kotlin types. + +The projects that use `Kotlin` should use: + +- `springdoc-openapi-starter-webmvc-api` if they depend on `spring-boot-starter-web` and they only need the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webmvc-ui`, if they depend on `spring-boot-starter-web` and they also need the access to the swagger-ui. +- OR `springdoc-openapi-starter-webflux-api` if they depend on `spring-boot-starter-webflux` and they only the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webflux-ui`, if they depend on `spring-boot-starter-webflux` and they also need the access to the swagger-ui. + +NOTE: In addition, your project should add `jackson-module-kotlin` as well to have the full support of `Kotlin` types: +[source,xml, subs="attributes+"] +---- + + com.fasterxml.jackson.module + jackson-module-kotlin + +---- + +=== Groovy support + +The projects that use `Groovy` should use: + +- `springdoc-openapi-starter-webmvc-api` if they depend on `spring-boot-starter-web` and they only need the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webmvc-ui`, if they depend on `spring-boot-starter-web` and they also need the access to the swagger-ui. +- OR `springdoc-openapi-starter-webflux-api` if they depend on `spring-boot-starter-webflux` and they only the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webflux-ui`, if they depend on `spring-boot-starter-webflux` and they also need the access to the swagger-ui. + + +=== Javadoc support + +`springdoc-openapi` can introspect `Javadoc` annotations and comments: + +- The javadoc comment of a method: is resolved as the `@Operation` description +- ``@return ``: is resolved as the `@Operation` response description +- The javadoc comment of an attribute: is resolved as '@Schema' description for this field. + +The projects that needs `Javadoc` support should use: + +- `springdoc-openapi-starter-webmvc-api` if they depend on `spring-boot-starter-web` and they only need the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webmvc-ui`, if they depend on `spring-boot-starter-web` and they also need the access to the swagger-ui. +- OR `springdoc-openapi-starter-webflux-api` if they depend on `spring-boot-starter-webflux` and they only the access to the OpenAPI endpoints. +- OR `springdoc-openapi-starter-webflux-ui`, if they depend on `spring-boot-starter-webflux` and they also need the access to the swagger-ui. + +NOTE: In addition, your project should add https://github.com/dnault/therapi-runtime-javadoc[`therapi-runtime-javadoc`] to read Javadoc comments at runtime. +Ensure that you add it as well as its annotation processor to your project's dependencies. Otherwise, the Javadoc support will fail silently. + +[source,xml, subs="attributes+"] +---- + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + com.github.therapi + therapi-runtime-javadoc-scribe + 0.15.0 + + + + + + + + + + com.github.therapi + therapi-runtime-javadoc + 0.15.0 + +---- + +TIP: If both a swagger-annotation description and a javadoc comment are present. The value of the swagger-annotation description will be used. + +=== Springdoc-openapi BOM +Starting from version `v2.8.7`, `springdoc-openapi` provides a BOM (Bill of Materials) to manage the dependencies of the project. +You can declare it in your project as follows: + +[source,xml, subs="attributes+"] +---- + + + + org.springdoc + springdoc-openapi-bom + {springdoc-upcoming-version} + pom + import + + + +---- \ No newline at end of file diff --git a/src/docs/asciidoc/v4/other-resources.adoc b/src/docs/asciidoc/v4/other-resources.adoc new file mode 100644 index 0000000..eca3349 --- /dev/null +++ b/src/docs/asciidoc/v4/other-resources.adoc @@ -0,0 +1,27 @@ +[[other-resources]] +== Other resources + +=== Additional resources to get started +- link:https://github.com/springdoc/springdoc-openapi[View project on GitHub, window="_blank"] image:img/github-logo.png[link="https://github.com/springdoc/springdoc-openapi"] +- link:https://prezi.com/view/r4DP4TCmYUJk1eaqjKG4/[Springdoc-openapi presentation, window="_blank"] +- link:https://www.baeldung.com/spring-rest-openapi-documentation[Baeldung, window="_blank"] +- link:https://dzone.com/articles/openapi-3-documentation-with-spring-boot[DZone Part1, window="_blank"] +- link:https://dzone.com/articles/doing-more-with-springdoc-openapi[DZone Part2, window="_blank"] +- link:https://dzone.com/articles/extending-swagger-and-spring-doc-open-api[Extending Swagger and Spring Doc Open API, window="_blank"] +- link:https://piotrminkowski.com/2020/02/20/microservices-api-documentation-with-springdoc-openapi/[Piotrminkowski Blog, window="_blank"] + + +=== Dependencies repository + +The `springdoc-openapi` libraries are hosted on maven central repository. +The artifacts can be viewed accessed at the following locations: + +Releases: + +* link:https://central.sonatype.com/search?q=g:org.springdoc[https://central.sonatype.com/search?q=g:org.springdoc, window="_blank"] + +Snapshots: + +* link:https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/org/springdoc/[https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/org/springdoc/, window="_blank", window="_blank"] + + diff --git a/src/docs/asciidoc/v4/plugins.adoc b/src/docs/asciidoc/v4/plugins.adoc new file mode 100644 index 0000000..aabccf4 --- /dev/null +++ b/src/docs/asciidoc/v4/plugins.adoc @@ -0,0 +1,81 @@ +[[plugins]] +== Springdoc-openapi Plugins + +=== Maven plugin + +The aim of `springdoc-openapi-maven-plugin` is to generate json and yaml OpenAPI description during build time. +The plugin works during integration-tests phase, and generate the OpenAPI description. +The plugin works in conjunction with spring-boot-maven plugin. + +You can test it during the integration tests phase using the maven command: + +[source,bash] +---- +mvn verify +---- + +In order to use this functionality, you need to add the plugin declaration on the plugins section of your pom.xml: + +[source,xml] +---- + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} + + -Dspring.application.admin.enabled=true + + + + + start + stop + + + + + + org.springdoc + springdoc-openapi-maven-plugin + 1.5 + + + integration-test + + generate + + + + +---- + +For more custom settings of the springdoc-openapi-maven-plugin, you can consult the plugin documentation: + +* link:https://github.com/springdoc/springdoc-openapi-maven-plugin[https://github.com/springdoc/springdoc-openapi-maven-plugin, window="_blank"] + +=== Gradle plugin + +This plugin allows you to generate an OpenAPI 3 specification for a Spring Boot application from a Gradle build. + +[source,groovy] +---- +plugins { + id("org.springframework.boot") version "3.1.2" + id("org.springdoc.openapi-gradle-plugin") version "1.9.0" +} +---- + +When you add this plugin and its runtime dependency plugins to your build file, the plugin creates the following tasks: + +* forkedSpringBootRun +* generateOpenApiDocs + +[source,bash] +---- +gradle clean generateOpenApiDocs +---- + +For more custom configuration of `springdoc-openapi-gradle-plugin` ,you can consult the plugin documentation: + +* link:https://github.com/springdoc/springdoc-openapi-gradle-plugin[https://github.com/springdoc/springdoc-openapi-gradle-plugin, window="_blank"] + diff --git a/src/docs/asciidoc/v4/properties.adoc b/src/docs/asciidoc/v4/properties.adoc new file mode 100644 index 0000000..b0948ba --- /dev/null +++ b/src/docs/asciidoc/v4/properties.adoc @@ -0,0 +1,18 @@ +[[properties]] +== Springdoc-openapi Properties + +`springdoc-openapi` relies on standard link:https://docs.spring.io/spring-boot/reference/features/external-config.html[spring configuration properties, window="_blank"] (yml or properties) using the standard files locations. + + +=== springdoc-openapi core properties + +include::core-properties.adoc[] + +=== swagger-ui properties +- The support of the swagger-ui properties is available on `springdoc-openapi`. See link:https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/[Official documentation, window="_blank"]. + +- You can use the same swagger-ui properties in the documentation as Spring Boot properties. + +NOTE: All these properties should be declared with the following prefix: `springdoc.swagger-ui` + +include::ui-properties.adoc[] diff --git a/src/docs/asciidoc/v4/sponsor.adoc b/src/docs/asciidoc/v4/sponsor.adoc new file mode 100644 index 0000000..ed4bc53 --- /dev/null +++ b/src/docs/asciidoc/v4/sponsor.adoc @@ -0,0 +1,53 @@ +[[sponsor]] +== Sponsor + +`springdoc-openapi` is on link:https://opencollective.com/springdoc[Open Collective, window="_blank"]. + +If you ❤️ this project consider becoming a link:https://github.com/sponsors/springdoc[sponsor, window="_blank"]. + +This money is used to cover project expenses and your donation will help the project live and grow successfully. + +Thank you to our bronze sponsors! +++++ +

+ + +    + + + + + + + + + + + + +

+++++ + +=== Benefits of being a bronze sponsor +Bronze sponsors donate $50 per month to the project, and get the following benefits: + +- You will receive a Sponsor badge 🎖!. Visibility on the front page of https://springdoc.org in the `welcome` page (about 55,000 views/month on May, 2022). +- “Thank you” tweet from `springdoc team'. + +=== Benefits of being a silver sponsor +Silver sponsors donate $100 per month to the project, and get the following benefits: + +- Same benefits as bronze sponsors (visibility on main pages, and thank you tweet). +- The ability to get support for 2 `issues` every month, non transferable. +- If issues are not created by the end of the month, it is lost + +=== Benefits of being a gold sponsor +Gold sponsors donate $500 per month to the project, and get the following benefits: + +- Same benefits as silver sponsors (visibility on main pages, and thank you tweet). +- The ability to get support for 10 `issues` every month, non transferable. +- Company logos on all https://springdoc.org page footers +- If issues are not created by the end of the month, the remaining ones are lost. + + + diff --git a/src/docs/asciidoc/v4/thanks.adoc b/src/docs/asciidoc/v4/thanks.adoc new file mode 100644 index 0000000..2034eaf --- /dev/null +++ b/src/docs/asciidoc/v4/thanks.adoc @@ -0,0 +1,9 @@ +[[thanks]] +== Special Thanks + +* Thank you to link:https://spring.io/team[The Spring Team , window="_blank"] for sharing all relevant resources around Spring projects. + +* Thanks a lot link:https://www.jetbrains.com/?from=springdoc-openapi[JetBrains, window="_blank"] for supporting springdoc-openapi project. + +image::https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg[JetBrains logo] + diff --git a/src/docs/asciidoc/v4/ui-properties.adoc b/src/docs/asciidoc/v4/ui-properties.adoc new file mode 100644 index 0000000..ecce440 --- /dev/null +++ b/src/docs/asciidoc/v4/ui-properties.adoc @@ -0,0 +1,66 @@ +[[ui-properties]] + +|=== +|Parameter name | Default Value | Description + +|springdoc.swagger-ui.path | `/swagger-ui.html` |`String`, For custom path of the swagger-ui HTML documentation. +|springdoc.swagger-ui.enabled | `true` | `Boolean`. To disable the swagger-ui endpoint (/swagger-ui.html by default). +|springdoc.swagger-ui.configUrl | `/v3/api-docs/swagger-config` | `String`. URL to fetch external configuration document from. +|springdoc.swagger-ui.layout | `BaseLayout` | `String`. The name of a component available via the plugin system to use as the top-level layout for Swagger UI. +|springdoc.swagger-ui.validatorUrl | | By default, Swagger UI does not validate specs. You can use this parameter to set a validator URL, for example for against swagger.io’s online validator. +|springdoc.swagger-ui.tryItOutEnabled | `false` |`Boolean`. Controls whether the "Try it out" section should be enabled by default. +|springdoc.swagger-ui.filter | `false` | `Boolean OR String`. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag. +|springdoc.swagger-ui.operationsSorter | | `Function=(a => a)`. Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged. +|springdoc.swagger-ui.tagsSorter | | `Function=(a => a)`. Apply a sort to the tag list of each API. It can be 'alpha' (sort by paths alphanumerically) or a function link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort[see Array.prototype.sort() , window="_blank"] to learn how to write a sort function). Two tag name strings are passed to the sorter for each pass. Default is the order determined by Swagger UI. +|springdoc.swagger-ui.oauth2RedirectUrl | `/swagger-ui/oauth2-redirect.html` | `String`. OAuth redirect URL. +|springdoc.swagger-ui.displayOperationId | `false` | `Boolean`. Controls the display of operationId in operations list. The default is `false`. +|springdoc.swagger-ui.displayRequestDuration | `false` | `Boolean`. Controls the display of the request duration (in milliseconds) for "Try it out" requests. +|springdoc.swagger-ui.deepLinking | `false` | `Boolean`. If set to `true`, enables deep linking for tags and operations. See the [Deep Linking documentation](https://swagger.io/docs/open-source-tools/swagger-ui/usage/deep-linking) for more information. +|springdoc.swagger-ui.defaultModelsExpandDepth | `1` | `Number`. The default expansion depth for models (set to -1 completely hide the models). +|springdoc.swagger-ui.defaultModelExpandDepth | `1` | `Number`. The default expansion depth for the model on the model-example section. +|springdoc.swagger-ui.defaultModelRendering | | `String=["example"*, "model"]`. Controls how the model is shown when the API is first rendered. (The user can always switch the rendering for a given model by clicking the 'Model' and 'Example Value' links.) +|springdoc.swagger-ui.docExpansion | | `String=["list"*, "full", "none"]`. Controls the default expansion setting for the operations and tags. It can be 'list' (expands only the tags), 'full' (expands the tags and operations) or 'none' (expands nothing). +|springdoc.swagger-ui.maxDisplayedTags | | `Number`. If set, limits the number of tagged operations displayed to at most this many. The default is to show all operations. +|springdoc.swagger-ui.showExtensions | `false` | `Boolean`. Controls the display of vendor extension (`x-`) fields and values for Operations, Parameters, and Schema. +|springdoc.swagger-ui.url | | `String`.To configure, the path of a custom OpenAPI file . Will be ignored if `urls` is used. +|springdoc.swagger-ui.showCommonExtensions | `false` | `Boolean`. Controls the display of extensions (`pattern`, `maxLength`, `minLength`, `maximum`, `minimum`) fields and values for Parameters. +|springdoc.swagger-ui.supportedSubmitMethods | | `Array=[get, put, post, delete, options, head, patch, trace]`. List of HTTP methods that have the "Try it out" feature enabled. An empty array disables "Try it out" for all operations. This does not filter the operations from the display. +|springdoc.swagger-ui.queryConfigEnabled | `false` | `Boolean`. Disabled since `v1.6.0`. This parameter enables (legacy) overriding configuration parameters via URL search params. link:https://github.com/swagger-api/swagger-ui/security/advisories/GHSA-qrmm-w75w-3wpx[See security advisory , window="_blank"] before enabling this feature. +|springdoc.swagger-ui.oauth. additionalQueryStringParams | | `String`. Additional query parameters added to authorizationUrl and tokenUrl. +|springdoc.swagger-ui.disable-swagger-default-url | `false` | `Boolean`. To disable the swagger-ui default petstore url. (Available since v1.4.1). +|springdoc.swagger-ui.urls[0].url | | `URL`. The url of the swagger group, used by Topbar plugin. URLs must be unique among all items in this array, since they're used as identifiers. +|springdoc.swagger-ui.urls[0].name | | `String`. The name of the swagger group, used by Topbar plugin. Names must be unique among all items in this array, since they're used as identifiers. +|springdoc.swagger-ui.urlsPrimaryName | | `String`. The name of the swagger group which will be displayed when Swagger UI loads. +|springdoc.swagger-ui.oauth.clientId | | `String`. Default clientId. MUST be a string. +|springdoc.swagger-ui.oauth.clientSecret | | `String`. Default clientSecret. Never use this parameter in your production environment. It exposes crucial security information. This feature is intended for dev/test environments only. +|springdoc.swagger-ui.oauth.realm | | `String`. realm query parameter (for OAuth 1) added to authorizationUrl and tokenUrl. +|springdoc.swagger-ui.oauth.appName | | `String`. OAuth application name, displayed in authorization popup. +|springdoc.swagger-ui.oauth.scopeSeparator | | `String`. OAuth scope separator for passing scopes, encoded before calling, default value is a space (encoded value %20). +|springdoc.swagger-ui.csrf.enabled | `false` | `Boolean`. To enable CSRF support +|springdoc.swagger-ui.csrf.use-local-storage | `false` | `Boolean`. To get the CSRF token from the Local Storage. +|springdoc.swagger-ui.csrf.use-session-storage | `false` | `Boolean`. To get the CSRF token from the Session Storage. +|springdoc.swagger-ui.csrf.cookie-name | `XSRF-TOKEN` | `String`. Optional CSRF, to set the CSRF cookie name. +|springdoc.swagger-ui.csrf.header-name | `X-XSRF-TOKEN` | `String`. Optional CSRF, to set the CSRF header name. +|springdoc.swagger-ui.syntaxHighlight.activated | `true` | `Boolean`. Whether syntax highlighting should be activated or not. +|springdoc.swagger-ui.syntaxHighlight.theme | `agate` | `String`. `String=["agate"*, "arta", "monokai", "nord", "obsidian", "tomorrow-night"]`. link:https://highlightjs.org/static/demo/[Highlight.js, window="_blank"] syntax coloring theme to use. (Only these 6 styles are available.) +|springdoc.swagger-ui.oauth. useBasicAuthentication WithAccessCodeGrant | `false` | `Boolean`. Only activated for the accessCode flow. During the authorization_code request to the tokenUrl, pass the Client Password using the HTTP Basic Authentication scheme (Authorization header with Basic base64encode(client_id + client_secret)). +|springdoc.swagger-ui.oauth. usePkceWithAuthorization CodeGrant | `false` | `Boolean`.Only applies to authorizatonCode flows. Proof Key for Code Exchange brings enhanced security for OAuth public clients. +|springdoc.swagger-ui.persistAuthorization | `false` | `Boolean`. If set to true, it persists authorization data and it would not be lost on browser close/refresh +|springdoc.swagger-ui.use-root-path | `false` | `Boolean`. If set to true, the swagger-ui will be accessible from the application root path directly. + +|=== + +++++ + + + +++++ + From 7c9e6447b88685b2c2219d179efd1ec8db6c8faf Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Fri, 22 Aug 2025 13:35:32 +0200 Subject: [PATCH 184/196] Adding spring-boot 4 pages --- docs/v4/demos.html | 16 ++++++++-------- docs/v4/faq.html | 8 ++++---- docs/v4/features.html | 6 +++--- docs/v4/modules.html | 4 ++-- src/docs/asciidoc/v4/demos.adoc | 14 +++++++------- src/docs/asciidoc/v4/faq.adoc | 6 +++--- src/docs/asciidoc/v4/features.adoc | 4 ++-- src/docs/asciidoc/v4/modules.adoc | 2 +- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/v4/demos.html b/docs/v4/demos.html index ecfb903..90a7771 100644 --- a/docs/v4/demos.html +++ b/docs/v4/demos.html @@ -37,22 +37,22 @@

@@ -67,7 +67,7 @@

@@ -88,7 +88,7 @@

diff --git a/docs/v4/faq.html b/docs/v4/faq.html index deee771..bf7b21f 100644 --- a/docs/v4/faq.html +++ b/docs/v4/faq.html @@ -111,7 +111,7 @@

@@ -668,7 +668,7 @@

@@ -688,7 +688,7 @@

@@ -2081,7 +2081,7 @@

diff --git a/docs/v4/features.html b/docs/v4/features.html index dfa5983..b8192ce 100644 --- a/docs/v4/features.html +++ b/docs/v4/features.html @@ -165,7 +165,7 @@

@@ -302,7 +302,7 @@

@@ -352,7 +352,7 @@

diff --git a/docs/v4/modules.html b/docs/v4/modules.html index 509c6eb..942176e 100644 --- a/docs/v4/modules.html +++ b/docs/v4/modules.html @@ -450,7 +450,7 @@

@@ -641,7 +641,7 @@

diff --git a/src/docs/asciidoc/v4/demos.adoc b/src/docs/asciidoc/v4/demos.adoc index 684630a..83b65ba 100644 --- a/src/docs/asciidoc/v4/demos.adoc +++ b/src/docs/asciidoc/v4/demos.adoc @@ -2,17 +2,17 @@ == Springdoc-openapi Demos === springdoc applications demos -* link:https://demos.springdoc.org/demo-spring-boot-3-webmvc[Demo Spring Boot 3 Web MVC with OpenAPI 3, window="_blank"] -* link:https://demos.springdoc.org/demo-spring-boot-3-webflux-functional/swagger-ui.html[Demo Spring Boot 3 WebFlux with Functional endpoints OpenAPI 3, window="_blank"] -* link:https://demos.springdoc.org/demo-spring-hateoas[Demo Spring Boot 3 and Spring Hateoas with OpenAPI 3, window="_blank"] -* link:https://demos.springdoc.org/spring-cloud-function-webmvc[Demo Spring Boot 3 and Spring Cloud Function Web MVC, window="_blank"] -* link:https://demos.springdoc.org/spring-cloud-function-webflux/swagger-ui.html[Demo Spring Boot 3 and Spring Cloud Function WebFlux, window="_blank"] -* link:https://demos.springdoc.org/demo-microservices/swagger-ui.html[Demo Spring Boot 3 and Spring Cloud Gateway, window="_blank"] +* link:https://demos1.springdoc.org/demo-spring-boot-webmvc[Demo Spring Boot 4 Web MVC with OpenAPI 3, window="_blank"] +* link:https://demos1.springdoc.org/demo-spring-boot-webflux-functional/swagger-ui.html[Demo Spring Boot 4 WebFlux with Functional endpoints OpenAPI 3, window="_blank"] +* link:https://demos1.springdoc.org/demo-spring-hateoas[Demo Spring Boot 4 and Spring Hateoas with OpenAPI 3, window="_blank"] +* link:https://demos1.springdoc.org/spring-cloud-function-webmvc[Demo Spring Boot 4 and Spring Cloud Function Web MVC, window="_blank"] +* link:https://demos1.springdoc.org/spring-cloud-function-webflux/swagger-ui.html[Demo Spring Boot 4 and Spring Cloud Function WebFlux, window="_blank"] +* link:https://demos1.springdoc.org/demo-microservices/swagger-ui.html[Demo Spring Boot 4 and Spring Cloud Gateway, window="_blank"] image::img/pets.png[pets.png] === Source code of the Demo Applications -* link:https://github.com/springdoc/springdoc-openapi-demos/tree/master[https://github.com/springdoc/springdoc-openapi-demos/tree/master, window="_blank"] +* link:https://github.com/springdoc/springdoc-openapi-demos/tree/4.x[https://github.com/springdoc/springdoc-openapi-demos/tree/4.x, window="_blank"] ++++ -++++ \ No newline at end of file +++++ From 5968981c878e062f5a6034b4d8242e9b27a0224a Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Mon, 1 Sep 2025 17:51:58 +0200 Subject: [PATCH 190/196] update 2.8.12 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e87fac4..938faa3 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 3.1.2-SNAPSHOT - 2.8.11 + 2.8.12 1.8.0 3.0.0-M1 1.8 From 2090c0318ef5fe5a890a9b8c70a19b9b297d6ae9 Mon Sep 17 00:00:00 2001 From: "Badr.NassLahsen" Date: Mon, 1 Sep 2025 17:52:20 +0200 Subject: [PATCH 191/196] update 2.8.12 --- docs/faq.html | 2 +- docs/getting-started.html | 2 +- docs/index.html | 16 ++++++++-------- docs/migrating-from-springfox.html | 2 +- docs/modules.html | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index 042567c..6a111c7 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2010,7 +2010,7 @@

springdoc-openapi 2.x is compatible with spring-boot 3.

-

In general, you should only pick the last stable version as per today 2.8.11.

+

In general, you should only pick the last stable version as per today 2.8.12.

diff --git a/docs/index.html b/docs/index.html index 767ebcb..e1de840 100644 --- a/docs/index.html +++ b/docs/index.html @@ -18,7 +18,7 @@ -springdoc-openapi v2.8.11 +springdoc-openapi v2.8.12