@redocly/openapi-docs 3.24.0-next.9 → 3.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/dist/{redocly-openapi-docs.min.AiChatProvider-DcsGB2gP.js → redocly-openapi-docs.min.AiChatProvider-j-VDfFJ9.js} +3 -3
  2. package/dist/{redocly-openapi-docs.min.AiChatSqliteDBStorage-wCZA4usG.js → redocly-openapi-docs.min.AiChatSqliteDBStorage-BBRBmffc.js} +1 -1
  3. package/dist/{redocly-openapi-docs.min.AiPanel-jo7fqtSt.js → redocly-openapi-docs.min.AiPanel-DTzHqAiI.js} +116 -116
  4. package/dist/redocly-openapi-docs.min.FileWatcher-DDoyaS7A.js +1 -0
  5. package/dist/redocly-openapi-docs.min.Observable-D6wKbFwB.js +1 -0
  6. package/dist/redocly-openapi-docs.min.SemanticSearchService-DNFOPBZK.js +1 -0
  7. package/dist/{redocly-openapi-docs.min.SqliteDBStorage-B_f6WR8o.js → redocly-openapi-docs.min.SqliteDBStorage-Dy40Vq04.js} +1 -1
  8. package/dist/redocly-openapi-docs.min.TauriFileSystemAdapter-CpViFqJQ.js +1 -0
  9. package/dist/redocly-openapi-docs.min.TauriRootStorage-TCUrp2uB.js +1 -0
  10. package/dist/redocly-openapi-docs.min.ai-chat-mappers-CmX-8902.js +1 -0
  11. package/dist/redocly-openapi-docs.min.core-BYyFOtMX.js +1 -0
  12. package/dist/redocly-openapi-docs.min.external-resolver-BkceRyB4.js +2 -0
  13. package/dist/redocly-openapi-docs.min.index-BCcol5vU.js +1 -0
  14. package/dist/redocly-openapi-docs.min.index-C6uU_v-b.js +1 -0
  15. package/dist/redocly-openapi-docs.min.index-CmXZfuiZ.js +7730 -0
  16. package/dist/redocly-openapi-docs.min.index-DVWw0ICA.js +1 -0
  17. package/dist/redocly-openapi-docs.min.index-YnvLQkG_.js +1 -0
  18. package/dist/redocly-openapi-docs.min.index-xl_tBaHD.js +1 -0
  19. package/dist/redocly-openapi-docs.min.js +1 -1
  20. package/dist/{redocly-openapi-docs.min.lint-C-zlwxhp.js → redocly-openapi-docs.min.lint-2YpbCz3r.js} +69 -69
  21. package/dist/{redocly-openapi-docs.min.lint-graphql-qEh9cZHx.js → redocly-openapi-docs.min.lint-graphql-Bgfcu2tP.js} +1 -1
  22. package/dist/redocly-openapi-docs.min.periodic-revalidation-Dsp-n7ui.js +1 -0
  23. package/dist/redocly-openapi-docs.min.promise-map-limit-Db_42GvV.js +1 -0
  24. package/dist/{redocly-openapi-docs.min.respect-run-hfNPYQ9x.js → redocly-openapi-docs.min.respect-run-Ct8taisL.js} +1 -1
  25. package/dist/redocly-openapi-docs.min.standalone-BPCdJgtH.js +11995 -0
  26. package/dist/redocly-openapi-docs.min.tauri-path-CmqBCxGb.js +1 -0
  27. package/dist/{redocly-openapi-docs.min.useAiChatQueries-DgSsCKMW.js → redocly-openapi-docs.min.useAiChatQueries-t8oy8jik.js} +80 -80
  28. package/lib/components/ApiInfo/__tests__/ApiInfo.test.d.ts +1 -0
  29. package/lib/components/ApiInfo/__tests__/ApiInfo.test.js +46 -0
  30. package/lib/components/Callbacks/CallbackOperation.js +1 -1
  31. package/lib/components/Callbacks/__tests__/Callbacks.test.d.ts +1 -0
  32. package/lib/components/Callbacks/__tests__/Callbacks.test.js +46 -0
  33. package/lib/components/Content/__tests__/useAutoScroll.test.d.ts +1 -0
  34. package/lib/components/Content/__tests__/useAutoScroll.test.js +88 -0
  35. package/lib/components/Content/useAutoScroll.js +1 -1
  36. package/lib/components/ContentItem/__tests__/useIsExpanded.test.d.ts +1 -0
  37. package/lib/components/ContentItem/__tests__/useIsExpanded.test.js +123 -0
  38. package/lib/components/ContentItem/useIsExpanded.js +1 -1
  39. package/lib/components/ContentItems/ContentItems.js +1 -1
  40. package/lib/components/ContentItems/VirtualList.js +1 -1
  41. package/lib/components/ContentItems/__tests__/Items.test.d.ts +1 -0
  42. package/lib/components/ContentItems/__tests__/Items.test.js +66 -0
  43. package/lib/components/ContentItems/__tests__/VirtualList.test.d.ts +1 -0
  44. package/lib/components/ContentItems/__tests__/VirtualList.test.js +135 -0
  45. package/lib/components/ContentItems/useScrollOnRender.js +1 -1
  46. package/lib/components/Discriminator/__tests__/DiscriminatorDropdown.test.d.ts +1 -0
  47. package/lib/components/Discriminator/__tests__/DiscriminatorDropdown.test.js +63 -0
  48. package/lib/components/Download/__tests__/DownloadSpecification.test.d.ts +1 -0
  49. package/lib/components/Download/__tests__/DownloadSpecification.test.js +52 -0
  50. package/lib/components/ExpandAllButton/__tests__/ExpandAllButton.test.d.ts +1 -0
  51. package/lib/components/ExpandAllButton/__tests__/ExpandAllButton.test.js +60 -0
  52. package/lib/components/ExpandAllButton/__tests__/helpers.test.d.ts +1 -0
  53. package/lib/components/ExpandAllButton/__tests__/helpers.test.js +133 -0
  54. package/lib/components/Language/__tests__/LanguageDropdown.test.d.ts +1 -0
  55. package/lib/components/Language/__tests__/LanguageDropdown.test.js +23 -0
  56. package/lib/components/Markdown/__tests__/Markdown.test.d.ts +1 -0
  57. package/lib/components/Markdown/__tests__/Markdown.test.js +34 -0
  58. package/lib/components/McpOverview/__tests__/McpOverview.test.d.ts +1 -0
  59. package/lib/components/McpOverview/__tests__/McpOverview.test.js +66 -0
  60. package/lib/components/McpTool/__tests__/McpPrompt.test.d.ts +1 -0
  61. package/lib/components/McpTool/__tests__/McpPrompt.test.js +57 -0
  62. package/lib/components/McpTool/__tests__/McpResource.test.d.ts +1 -0
  63. package/lib/components/McpTool/__tests__/McpResource.test.js +81 -0
  64. package/lib/components/McpTool/__tests__/McpTool.test.d.ts +1 -0
  65. package/lib/components/McpTool/__tests__/McpTool.test.js +82 -0
  66. package/lib/components/MediaTypeSwitch/__tests__/MediaTypesSwitch.test.d.ts +1 -0
  67. package/lib/components/MediaTypeSwitch/__tests__/MediaTypesSwitch.test.js +79 -0
  68. package/lib/components/OperationItem/__tests__/OperationItem.test.d.ts +1 -0
  69. package/lib/components/OperationItem/__tests__/OperationItem.test.js +70 -0
  70. package/lib/components/OperationItem/__tests__/__mocks__/mock-intersection-observer.d.ts +16 -0
  71. package/lib/components/OperationItem/__tests__/__mocks__/mock-intersection-observer.js +42 -0
  72. package/lib/components/Overview/__tests__/Overview.test.d.ts +1 -0
  73. package/lib/components/Overview/__tests__/Overview.test.js +59 -0
  74. package/lib/components/PayloadSamples/__tests__/Example.test.d.ts +1 -0
  75. package/lib/components/PayloadSamples/__tests__/Example.test.js +36 -0
  76. package/lib/components/PayloadSamples/__tests__/ExampleValue.test.d.ts +1 -0
  77. package/lib/components/PayloadSamples/__tests__/ExampleValue.test.js +197 -0
  78. package/lib/components/PayloadSamples/__tests__/PayloadSamples.test.d.ts +1 -0
  79. package/lib/components/PayloadSamples/__tests__/PayloadSamples.test.js +38 -0
  80. package/lib/components/PropertyDetails/__tests__/Extensions.test.d.ts +1 -0
  81. package/lib/components/PropertyDetails/__tests__/Extensions.test.js +21 -0
  82. package/lib/components/PropertyDetails/__tests__/FieldDetail.test.d.ts +1 -0
  83. package/lib/components/PropertyDetails/__tests__/FieldDetail.test.js +52 -0
  84. package/lib/components/PropertyDetails/__tests__/FieldDetails.test.d.ts +1 -0
  85. package/lib/components/PropertyDetails/__tests__/FieldDetails.test.js +191 -0
  86. package/lib/components/PropertyDetails/__tests__/PropertyDetails.test.d.ts +1 -0
  87. package/lib/components/PropertyDetails/__tests__/PropertyDetails.test.js +365 -0
  88. package/lib/components/PropertyDetails/__tests__/cycleColorsByLevel.test.d.ts +1 -0
  89. package/lib/components/PropertyDetails/__tests__/cycleColorsByLevel.test.js +23 -0
  90. package/lib/components/RedoclyOpenAPIDocs/__tests__/AppProvider.test.d.ts +1 -0
  91. package/lib/components/RedoclyOpenAPIDocs/__tests__/AppProvider.test.js +16 -0
  92. package/lib/components/RedoclyOpenAPIDocs/__tests__/RedoclyOpenAPIDocs.test.d.ts +1 -0
  93. package/lib/components/RedoclyOpenAPIDocs/__tests__/RedoclyOpenAPIDocs.test.js +104 -0
  94. package/lib/components/RenderHook/__tests__/RenderHook.test.d.ts +1 -0
  95. package/lib/components/RenderHook/__tests__/RenderHook.test.js +15 -0
  96. package/lib/components/Replay/__tests__/utils.test.d.ts +1 -0
  97. package/lib/components/Replay/__tests__/utils.test.js +526 -0
  98. package/lib/components/Request/__tests__/RequestDetails.test.d.ts +1 -0
  99. package/lib/components/Request/__tests__/RequestDetails.test.js +98 -0
  100. package/lib/components/RequestSamples/__tests__/Example.test.d.ts +1 -0
  101. package/lib/components/RequestSamples/__tests__/Example.test.js +384 -0
  102. package/lib/components/RequestSamples/__tests__/RequestSamples.test.d.ts +1 -0
  103. package/lib/components/RequestSamples/__tests__/RequestSamples.test.js +226 -0
  104. package/lib/components/RequestSamples/__tests__/useCodeSamples.test.d.ts +1 -0
  105. package/lib/components/RequestSamples/__tests__/useCodeSamples.test.js +64 -0
  106. package/lib/components/ResponseSamples/__tests__/ResponseSamples.test.d.ts +1 -0
  107. package/lib/components/ResponseSamples/__tests__/ResponseSamples.test.js +29 -0
  108. package/lib/components/Responses/OperationResponseList.js +1 -1
  109. package/lib/components/Responses/__tests__/OperationResponseList.test.d.ts +1 -0
  110. package/lib/components/Responses/__tests__/OperationResponseList.test.js +89 -0
  111. package/lib/components/Responses/__tests__/ResponseDetails.test.d.ts +1 -0
  112. package/lib/components/Responses/__tests__/ResponseDetails.test.js +111 -0
  113. package/lib/components/Responses/__tests__/ResponsesHeaders.test.d.ts +1 -0
  114. package/lib/components/Responses/__tests__/ResponsesHeaders.test.js +26 -0
  115. package/lib/components/Schema/Schema.js +1 -1
  116. package/lib/components/Schema/SubSchema.js +1 -1
  117. package/lib/components/Schema/__tests__/ArraySchema.test.d.ts +1 -0
  118. package/lib/components/Schema/__tests__/ArraySchema.test.js +93 -0
  119. package/lib/components/Schema/__tests__/ObjectSchema.test.d.ts +1 -0
  120. package/lib/components/Schema/__tests__/ObjectSchema.test.js +115 -0
  121. package/lib/components/Schema/__tests__/OneOfSchema.test.d.ts +1 -0
  122. package/lib/components/Schema/__tests__/OneOfSchema.test.js +33 -0
  123. package/lib/components/Schema/__tests__/Schema.test.d.ts +1 -0
  124. package/lib/components/Schema/__tests__/Schema.test.js +67 -0
  125. package/lib/components/Schema/__tests__/useOneOfLocationIdx.test.d.ts +1 -0
  126. package/lib/components/Schema/__tests__/useOneOfLocationIdx.test.js +22 -0
  127. package/lib/components/Schema/useOneOfLocationIdx.js +1 -1
  128. package/lib/components/SchemaCatalogLink/__tests__/SchemaCatalogLink.test.d.ts +1 -0
  129. package/lib/components/SchemaCatalogLink/__tests__/SchemaCatalogLink.test.js +95 -0
  130. package/lib/components/Security/__tests__/Security.test.d.ts +1 -0
  131. package/lib/components/Security/__tests__/Security.test.js +38 -0
  132. package/lib/components/Security/__tests__/SecurityButton.test.d.ts +1 -0
  133. package/lib/components/Security/__tests__/SecurityButton.test.js +92 -0
  134. package/lib/components/Security/__tests__/SecurityModal.test.d.ts +1 -0
  135. package/lib/components/Security/__tests__/SecurityModal.test.js +172 -0
  136. package/lib/components/ServerList/__tests__/ServerList.test.d.ts +1 -0
  137. package/lib/components/ServerList/__tests__/ServerList.test.js +83 -0
  138. package/lib/components/SideMenu/hooks/useMenuItems.js +1 -1
  139. package/lib/components/StickySidebar/StickyResponsiveSidebar.js +1 -1
  140. package/lib/components/Tabs/__tests__/Tabs.test.d.ts +1 -0
  141. package/lib/components/Tabs/__tests__/Tabs.test.js +27 -0
  142. package/lib/components/TagItem/OperationsNavigation.js +1 -1
  143. package/lib/components/TagItem/TagItem.js +1 -1
  144. package/lib/components/ViewNested/__tests__/ViewNested.test.d.ts +1 -0
  145. package/lib/components/ViewNested/__tests__/ViewNested.test.js +42 -0
  146. package/lib/components/__tests__/Samples/ExampleSwitch.test.d.ts +1 -0
  147. package/lib/components/__tests__/Samples/ExampleSwitch.test.js +45 -0
  148. package/lib/components/__tests__/Samples/use-example-key.test.d.ts +1 -0
  149. package/lib/components/__tests__/Samples/use-example-key.test.js +28 -0
  150. package/lib/components/__tests__/common/ClearButton.test.d.ts +1 -0
  151. package/lib/components/__tests__/common/ClearButton.test.js +18 -0
  152. package/lib/components/__tests__/common/Dropdown.test.d.ts +1 -0
  153. package/lib/components/__tests__/common/Dropdown.test.js +52 -0
  154. package/lib/components/__tests__/mocks/examples.d.ts +4 -0
  155. package/lib/components/__tests__/mocks/examples.js +115 -0
  156. package/lib/components/common/LinkToField.js +1 -1
  157. package/lib/components/common/__tests__/Dropdown.test.d.ts +1 -0
  158. package/lib/components/common/__tests__/Dropdown.test.js +129 -0
  159. package/lib/components/common/__tests__/LinkToField.test.d.ts +1 -0
  160. package/lib/components/common/__tests__/LinkToField.test.js +39 -0
  161. package/lib/components/common/linkify.js +1 -1
  162. package/lib/hooks/useRouter.js +1 -1
  163. package/lib/hooks/useUppercase2LowercaseRedirect.js +1 -1
  164. package/lib/jotai/__tests__/app.test.d.ts +1 -0
  165. package/lib/jotai/__tests__/app.test.js +53 -0
  166. package/lib/models/__tests__/Callback.test.d.ts +1 -0
  167. package/lib/models/__tests__/Callback.test.js +15 -0
  168. package/lib/models/__tests__/FieldModel.test.d.ts +1 -0
  169. package/lib/models/__tests__/FieldModel.test.js +117 -0
  170. package/lib/models/__tests__/MediaContent.test.d.ts +1 -0
  171. package/lib/models/__tests__/MediaContent.test.js +105 -0
  172. package/lib/models/__tests__/Operation.test.d.ts +1 -0
  173. package/lib/models/__tests__/Operation.test.js +459 -0
  174. package/lib/models/__tests__/Response.test.d.ts +1 -0
  175. package/lib/models/__tests__/Response.test.js +221 -0
  176. package/lib/models/__tests__/Schema.circular.test.d.ts +1 -0
  177. package/lib/models/__tests__/Schema.circular.test.js +694 -0
  178. package/lib/models/__tests__/Schema.test.d.ts +1 -0
  179. package/lib/models/__tests__/Schema.test.js +1395 -0
  180. package/lib/models/__tests__/example.test.d.ts +1 -0
  181. package/lib/models/__tests__/example.test.js +90 -0
  182. package/lib/models/__tests__/group.test.d.ts +1 -0
  183. package/lib/models/__tests__/group.test.js +52 -0
  184. package/lib/models/__tests__/helpers.d.ts +5 -0
  185. package/lib/models/__tests__/helpers.js +62 -0
  186. package/lib/models/__tests__/request.test.d.ts +1 -0
  187. package/lib/models/__tests__/request.test.js +119 -0
  188. package/lib/services/__tests__/OpenAPIParser.test.d.ts +1 -0
  189. package/lib/services/__tests__/OpenAPIParser.test.js +80 -0
  190. package/lib/services/__tests__/check.test.d.ts +1 -0
  191. package/lib/services/__tests__/check.test.js +22 -0
  192. package/lib/services/__tests__/utils.test.d.ts +1 -0
  193. package/lib/services/__tests__/utils.test.js +42 -0
  194. package/lib/services/code-samples/__tests__/apply-environments.test.d.ts +1 -0
  195. package/lib/services/code-samples/__tests__/apply-environments.test.js +64 -0
  196. package/lib/services/code-samples/__tests__/build-code-samples.test.d.ts +1 -0
  197. package/lib/services/code-samples/__tests__/build-code-samples.test.js +70 -0
  198. package/lib/services/code-samples/__tests__/convertSampleToString.test.d.ts +1 -0
  199. package/lib/services/code-samples/__tests__/convertSampleToString.test.js +116 -0
  200. package/lib/services/code-samples/__tests__/generator-data-value.test.d.ts +1 -0
  201. package/lib/services/code-samples/__tests__/generator-data-value.test.js +277 -0
  202. package/lib/services/code-samples/__tests__/generator-serialized-value.test.d.ts +1 -0
  203. package/lib/services/code-samples/__tests__/generator-serialized-value.test.js +258 -0
  204. package/lib/services/code-samples/__tests__/generator-value.test.d.ts +1 -0
  205. package/lib/services/code-samples/__tests__/generator-value.test.js +273 -0
  206. package/lib/services/code-samples/__tests__/generator.test.d.ts +249 -0
  207. package/lib/services/code-samples/__tests__/generator.test.js +1201 -0
  208. package/lib/services/code-samples/__tests__/get-example-value-by-mime-type.test.d.ts +1 -0
  209. package/lib/services/code-samples/__tests__/get-example-value-by-mime-type.test.js +31 -0
  210. package/lib/services/code-samples/httpsnippet/__tests__/device-authorization.test.d.ts +1 -0
  211. package/lib/services/code-samples/httpsnippet/__tests__/device-authorization.test.js +222 -0
  212. package/lib/services/code-samples/httpsnippet/helpers/__tests__/code-helpers.test.d.ts +1 -0
  213. package/lib/services/code-samples/httpsnippet/helpers/__tests__/code-helpers.test.js +129 -0
  214. package/lib/services/code-samples/httpsnippet/helpers/__tests__/string-utility.test.d.ts +1 -0
  215. package/lib/services/code-samples/httpsnippet/helpers/__tests__/string-utility.test.js +49 -0
  216. package/lib/services/code-samples/httpsnippet/targets/csharp/__tests__/httpclient.test.d.ts +1 -0
  217. package/lib/services/code-samples/httpsnippet/targets/csharp/__tests__/httpclient.test.js +172 -0
  218. package/lib/services/code-samples/httpsnippet/targets/csharpNewtonsoft/__tests__/httpclient.test.d.ts +1 -0
  219. package/lib/services/code-samples/httpsnippet/targets/csharpNewtonsoft/__tests__/httpclient.test.js +172 -0
  220. package/lib/services/code-samples/httpsnippet/targets/go/__tests__/native.test.d.ts +1 -0
  221. package/lib/services/code-samples/httpsnippet/targets/go/__tests__/native.test.js +130 -0
  222. package/lib/services/code-samples/httpsnippet/targets/java/__tests__/httpclient.test.d.ts +1 -0
  223. package/lib/services/code-samples/httpsnippet/targets/java/__tests__/httpclient.test.js +191 -0
  224. package/lib/services/code-samples/httpsnippet/targets/java8/__tests__/apachehttp.test.d.ts +1 -0
  225. package/lib/services/code-samples/httpsnippet/targets/java8/__tests__/apachehttp.test.js +172 -0
  226. package/lib/services/code-samples/httpsnippet/targets/javascript/__tests__/fetch.test.d.ts +1 -0
  227. package/lib/services/code-samples/httpsnippet/targets/javascript/__tests__/fetch.test.js +85 -0
  228. package/lib/services/code-samples/httpsnippet/targets/node/__tests__/fetch.test.d.ts +1 -0
  229. package/lib/services/code-samples/httpsnippet/targets/node/__tests__/fetch.test.js +85 -0
  230. package/lib/services/code-samples/httpsnippet/targets/php/__tests__/curl.test.d.ts +1 -0
  231. package/lib/services/code-samples/httpsnippet/targets/php/__tests__/curl.test.js +126 -0
  232. package/lib/services/code-samples/httpsnippet/targets/python/__tests__/requests.test.d.ts +1 -0
  233. package/lib/services/code-samples/httpsnippet/targets/python/__tests__/requests.test.js +105 -0
  234. package/lib/services/code-samples/httpsnippet/targets/r/__tests__/httr.test.d.ts +1 -0
  235. package/lib/services/code-samples/httpsnippet/targets/r/__tests__/httr.test.js +126 -0
  236. package/lib/services/code-samples/httpsnippet/targets/ruby/__tests__/native.test.d.ts +1 -0
  237. package/lib/services/code-samples/httpsnippet/targets/ruby/__tests__/native.test.js +129 -0
  238. package/lib/services/code-samples/httpsnippet/targets/shell/__tests__/curl.test.d.ts +1 -0
  239. package/lib/services/code-samples/httpsnippet/targets/shell/__tests__/curl.test.js +129 -0
  240. package/lib/services/config-options/__tests__/helpers.test.d.ts +1 -0
  241. package/lib/services/config-options/__tests__/helpers.test.js +234 -0
  242. package/lib/services/history/__tests__/helpers.test.d.ts +1 -0
  243. package/lib/services/history/__tests__/helpers.test.js +19 -0
  244. package/lib/services/menu/__tests__/buildNestedTagsItems.test.d.ts +1 -0
  245. package/lib/services/menu/__tests__/buildNestedTagsItems.test.js +109 -0
  246. package/lib/services/menu/__tests__/builder.test.d.ts +1 -0
  247. package/lib/services/menu/__tests__/builder.test.js +307 -0
  248. package/lib/services/menu/__tests__/operation.test.d.ts +1 -0
  249. package/lib/services/menu/__tests__/operation.test.js +240 -0
  250. package/lib/services/menu/__tests__/tags.test.d.ts +1 -0
  251. package/lib/services/menu/__tests__/tags.test.js +71 -0
  252. package/lib/telemetry/RedocTelemetry.js +31 -1
  253. package/lib/telemetry/__tests__/RedocTelemetry.test.d.ts +1 -0
  254. package/lib/telemetry/__tests__/RedocTelemetry.test.js +107 -0
  255. package/lib/testProviders.d.ts +6 -0
  256. package/lib/testProviders.js +14 -0
  257. package/lib/utils/__tests__/areArraysEqual.test.d.ts +1 -0
  258. package/lib/utils/__tests__/areArraysEqual.test.js +33 -0
  259. package/lib/utils/__tests__/argValuesHelpers.d.ts +1 -0
  260. package/lib/utils/__tests__/argValuesHelpers.js +56 -0
  261. package/lib/utils/__tests__/calculateMaxLength.test.d.ts +1 -0
  262. package/lib/utils/__tests__/calculateMaxLength.test.js +119 -0
  263. package/lib/utils/__tests__/configure-helpers.test.d.ts +1 -0
  264. package/lib/utils/__tests__/configure-helpers.test.js +356 -0
  265. package/lib/utils/__tests__/convertSwagger2OpenAPI.test.d.ts +1 -0
  266. package/lib/utils/__tests__/convertSwagger2OpenAPI.test.js +392 -0
  267. package/lib/utils/__tests__/debounce.test.d.ts +1 -0
  268. package/lib/utils/__tests__/debounce.test.js +54 -0
  269. package/lib/utils/__tests__/debug.test.d.ts +1 -0
  270. package/lib/utils/__tests__/debug.test.js +23 -0
  271. package/lib/utils/__tests__/dom.test.d.ts +1 -0
  272. package/lib/utils/__tests__/dom.test.js +108 -0
  273. package/lib/utils/__tests__/getBreadcrumbs.test.d.ts +1 -0
  274. package/lib/utils/__tests__/getBreadcrumbs.test.js +98 -0
  275. package/lib/utils/__tests__/hasNestedFields.test.d.ts +1 -0
  276. package/lib/utils/__tests__/hasNestedFields.test.js +147 -0
  277. package/lib/utils/__tests__/helpers.test.d.ts +1 -0
  278. package/lib/utils/__tests__/helpers.test.js +174 -0
  279. package/lib/utils/__tests__/isMobile.test.d.ts +1 -0
  280. package/lib/utils/__tests__/isMobile.test.js +28 -0
  281. package/lib/utils/__tests__/loadAndBundleSpec.test.d.ts +1 -0
  282. package/lib/utils/__tests__/loadAndBundleSpec.test.js +22 -0
  283. package/lib/utils/__tests__/local-storage.test.d.ts +1 -0
  284. package/lib/utils/__tests__/local-storage.test.js +48 -0
  285. package/lib/utils/__tests__/object.test.d.ts +1 -0
  286. package/lib/utils/__tests__/object.test.js +45 -0
  287. package/lib/utils/__tests__/openapi.test.d.ts +1 -0
  288. package/lib/utils/__tests__/openapi.test.js +1378 -0
  289. package/lib/utils/__tests__/path.test.d.ts +1 -0
  290. package/lib/utils/__tests__/path.test.js +16 -0
  291. package/lib/utils/__tests__/queryString.test.d.ts +1 -0
  292. package/lib/utils/__tests__/queryString.test.js +60 -0
  293. package/lib/utils/__tests__/replaceVariables.test.d.ts +1 -0
  294. package/lib/utils/__tests__/replaceVariables.test.js +46 -0
  295. package/lib/utils/__tests__/simplifyAstStructure.test.d.ts +1 -0
  296. package/lib/utils/__tests__/simplifyAstStructure.test.js +26 -0
  297. package/lib/utils/__tests__/sort.test.d.ts +1 -0
  298. package/lib/utils/__tests__/sort.test.js +16 -0
  299. package/lib/utils/__tests__/string.test.d.ts +1 -0
  300. package/lib/utils/__tests__/string.test.js +16 -0
  301. package/lib/utils/__tests__/theme-helpers.test.d.ts +1 -0
  302. package/lib/utils/__tests__/theme-helpers.test.js +24 -0
  303. package/lib/utils/__tests__/url.test.d.ts +1 -0
  304. package/lib/utils/__tests__/url.test.js +134 -0
  305. package/lib/utils/path.d.ts +1 -1
  306. package/package.json +12 -12
  307. package/dist/redocly-openapi-docs.min.ai-chat-mappers-MY79QAeW.js +0 -1
  308. package/dist/redocly-openapi-docs.min.external-resolver-3KMJv7SC.js +0 -2
  309. package/dist/redocly-openapi-docs.min.index-BYVMr_la.js +0 -1
  310. package/dist/redocly-openapi-docs.min.index-CsqzTi3Z.js +0 -7586
  311. package/dist/redocly-openapi-docs.min.index-D8F7x0S6.js +0 -1
  312. package/dist/redocly-openapi-docs.min.index-qqKTpI_q.js +0 -1
  313. package/dist/redocly-openapi-docs.min.standalone-Ci6886Cr.js +0 -12114
  314. package/dist/redocly-openapi-docs.min.tauri-path-Bs1-AQjc.js +0 -1
@@ -0,0 +1,392 @@
1
+ import { vi } from 'vitest';
2
+ import swagger2openapi from 'swagger2openapi';
3
+ import { convertSwagger2OpenAPI } from '../convertSwagger2OpenAPI.js';
4
+ // Mock the swagger2openapi module
5
+ vi.mock('swagger2openapi');
6
+ const mockSwagger2OpenAPI = swagger2openapi;
7
+ describe('convertSwagger2OpenAPI', () => {
8
+ beforeEach(() => {
9
+ vi.clearAllMocks();
10
+ });
11
+ it('should convert a valid Swagger 2.0 spec to OpenAPI 3.0', async () => {
12
+ const swaggerSpec = {
13
+ swagger: '2.0',
14
+ info: {
15
+ title: 'Test API',
16
+ version: '1.0.0',
17
+ },
18
+ paths: {
19
+ '/test': {
20
+ get: {
21
+ responses: {
22
+ '200': {
23
+ description: 'OK',
24
+ },
25
+ },
26
+ },
27
+ },
28
+ },
29
+ };
30
+ const expectedOpenAPISpec = {
31
+ openapi: '3.0.0',
32
+ info: {
33
+ title: 'Test API',
34
+ version: '1.0.0',
35
+ },
36
+ paths: {
37
+ '/test': {
38
+ get: {
39
+ responses: {
40
+ '200': {
41
+ description: 'OK',
42
+ },
43
+ },
44
+ },
45
+ },
46
+ },
47
+ };
48
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
49
+ callback(null, { openapi: expectedOpenAPISpec });
50
+ return undefined;
51
+ });
52
+ const result = await convertSwagger2OpenAPI(swaggerSpec);
53
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith(swaggerSpec, { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
54
+ expect(result).toEqual(expectedOpenAPISpec);
55
+ });
56
+ it('should add empty paths object if paths is missing', async () => {
57
+ const swaggerSpec = {
58
+ swagger: '2.0',
59
+ info: {
60
+ title: 'Test API',
61
+ version: '1.0.0',
62
+ },
63
+ };
64
+ const expectedOpenAPISpec = {
65
+ openapi: '3.0.0',
66
+ info: {
67
+ title: 'Test API',
68
+ version: '1.0.0',
69
+ },
70
+ paths: {},
71
+ };
72
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
73
+ callback(null, { openapi: expectedOpenAPISpec });
74
+ return undefined;
75
+ });
76
+ await convertSwagger2OpenAPI(swaggerSpec);
77
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith({ ...swaggerSpec, paths: {} }, { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
78
+ });
79
+ it('should preserve existing paths if already present', async () => {
80
+ const swaggerSpec = {
81
+ swagger: '2.0',
82
+ info: {
83
+ title: 'Test API',
84
+ version: '1.0.0',
85
+ },
86
+ paths: {
87
+ '/existing': {
88
+ get: {
89
+ responses: {
90
+ '200': {
91
+ description: 'OK',
92
+ },
93
+ },
94
+ },
95
+ },
96
+ },
97
+ };
98
+ const expectedOpenAPISpec = {
99
+ openapi: '3.0.0',
100
+ info: {
101
+ title: 'Test API',
102
+ version: '1.0.0',
103
+ },
104
+ paths: {
105
+ '/existing': {
106
+ get: {
107
+ responses: {
108
+ '200': {
109
+ description: 'OK',
110
+ },
111
+ },
112
+ },
113
+ },
114
+ },
115
+ };
116
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
117
+ callback(null, { openapi: expectedOpenAPISpec });
118
+ return undefined;
119
+ });
120
+ await convertSwagger2OpenAPI(swaggerSpec);
121
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith(swaggerSpec, // Should not modify the original spec
122
+ { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
123
+ });
124
+ it('should reject with error when swagger2openapi conversion fails', async () => {
125
+ const swaggerSpec = {
126
+ swagger: '2.0',
127
+ info: {
128
+ title: 'Test API',
129
+ version: '1.0.0',
130
+ },
131
+ paths: {},
132
+ };
133
+ const conversionError = new Error('Invalid Swagger specification');
134
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
135
+ callback(conversionError, null);
136
+ return undefined;
137
+ });
138
+ await expect(convertSwagger2OpenAPI(swaggerSpec)).rejects.toThrow('Invalid Swagger specification');
139
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith(swaggerSpec, { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
140
+ });
141
+ it('should handle swagger2openapi returning null result', async () => {
142
+ const swaggerSpec = {
143
+ swagger: '2.0',
144
+ info: {
145
+ title: 'Test API',
146
+ version: '1.0.0',
147
+ },
148
+ paths: {},
149
+ };
150
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
151
+ callback(null, null);
152
+ return undefined;
153
+ });
154
+ const result = await convertSwagger2OpenAPI(swaggerSpec);
155
+ expect(result).toBeUndefined();
156
+ });
157
+ it('should handle swagger2openapi returning result without openapi property', async () => {
158
+ const swaggerSpec = {
159
+ swagger: '2.0',
160
+ info: {
161
+ title: 'Test API',
162
+ version: '1.0.0',
163
+ },
164
+ paths: {},
165
+ };
166
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
167
+ callback(null, { someOtherProperty: 'value' });
168
+ return undefined;
169
+ });
170
+ const result = await convertSwagger2OpenAPI(swaggerSpec);
171
+ expect(result).toBeUndefined();
172
+ });
173
+ it('should handle complex Swagger specification with all properties', async () => {
174
+ const swaggerSpec = {
175
+ swagger: '2.0',
176
+ info: {
177
+ title: 'Complex API',
178
+ version: '2.0.0',
179
+ description: 'A complex API with many features',
180
+ contact: {
181
+ name: 'API Support',
182
+ email: 'support@example.com',
183
+ },
184
+ license: {
185
+ name: 'MIT',
186
+ url: 'https://opensource.org/licenses/MIT',
187
+ },
188
+ },
189
+ host: 'api.example.com',
190
+ basePath: '/v1',
191
+ schemes: ['https'],
192
+ consumes: ['application/json'],
193
+ produces: ['application/json'],
194
+ paths: {
195
+ '/users': {
196
+ get: {
197
+ tags: ['users'],
198
+ summary: 'Get all users',
199
+ description: 'Retrieve a list of all users',
200
+ operationId: 'getUsers',
201
+ parameters: [
202
+ {
203
+ name: 'limit',
204
+ in: 'query',
205
+ description: 'Number of users to return',
206
+ required: false,
207
+ type: 'integer',
208
+ default: 10,
209
+ },
210
+ ],
211
+ responses: {
212
+ '200': {
213
+ description: 'Successful response',
214
+ schema: {
215
+ type: 'array',
216
+ items: {
217
+ $ref: '#/definitions/User',
218
+ },
219
+ },
220
+ },
221
+ '400': {
222
+ description: 'Bad request',
223
+ },
224
+ },
225
+ },
226
+ },
227
+ },
228
+ definitions: {
229
+ User: {
230
+ type: 'object',
231
+ properties: {
232
+ id: {
233
+ type: 'integer',
234
+ description: 'User ID',
235
+ },
236
+ name: {
237
+ type: 'string',
238
+ description: 'User name',
239
+ },
240
+ },
241
+ required: ['id', 'name'],
242
+ },
243
+ },
244
+ securityDefinitions: {
245
+ apiKey: {
246
+ type: 'apiKey',
247
+ name: 'X-API-Key',
248
+ in: 'header',
249
+ },
250
+ },
251
+ };
252
+ const expectedOpenAPISpec = {
253
+ openapi: '3.0.0',
254
+ info: {
255
+ title: 'Complex API',
256
+ version: '2.0.0',
257
+ description: 'A complex API with many features',
258
+ contact: {
259
+ name: 'API Support',
260
+ email: 'support@example.com',
261
+ },
262
+ license: {
263
+ name: 'MIT',
264
+ url: 'https://opensource.org/licenses/MIT',
265
+ },
266
+ },
267
+ servers: [
268
+ {
269
+ url: 'https://api.example.com/v1',
270
+ },
271
+ ],
272
+ paths: {
273
+ '/users': {
274
+ get: {
275
+ tags: ['users'],
276
+ summary: 'Get all users',
277
+ description: 'Retrieve a list of all users',
278
+ operationId: 'getUsers',
279
+ parameters: [
280
+ {
281
+ name: 'limit',
282
+ in: 'query',
283
+ description: 'Number of users to return',
284
+ required: false,
285
+ schema: {
286
+ type: 'integer',
287
+ default: 10,
288
+ },
289
+ },
290
+ ],
291
+ responses: {
292
+ '200': {
293
+ description: 'Successful response',
294
+ content: {
295
+ 'application/json': {
296
+ schema: {
297
+ type: 'array',
298
+ items: {
299
+ $ref: '#/components/schemas/User',
300
+ },
301
+ },
302
+ },
303
+ },
304
+ },
305
+ '400': {
306
+ description: 'Bad request',
307
+ },
308
+ },
309
+ },
310
+ },
311
+ },
312
+ components: {
313
+ schemas: {
314
+ User: {
315
+ type: 'object',
316
+ properties: {
317
+ id: {
318
+ type: 'integer',
319
+ description: 'User ID',
320
+ },
321
+ name: {
322
+ type: 'string',
323
+ description: 'User name',
324
+ },
325
+ },
326
+ required: ['id', 'name'],
327
+ },
328
+ },
329
+ securitySchemes: {
330
+ apiKey: {
331
+ type: 'apiKey',
332
+ name: 'X-API-Key',
333
+ in: 'header',
334
+ bearerFormat: '',
335
+ flows: {},
336
+ },
337
+ },
338
+ },
339
+ };
340
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
341
+ callback(null, { openapi: expectedOpenAPISpec });
342
+ return undefined;
343
+ });
344
+ const result = await convertSwagger2OpenAPI(swaggerSpec);
345
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith(swaggerSpec, { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
346
+ expect(result).toEqual(expectedOpenAPISpec);
347
+ });
348
+ it('should handle empty specification object', async () => {
349
+ const swaggerSpec = {};
350
+ const expectedOpenAPISpec = {
351
+ openapi: '3.0.0',
352
+ info: {
353
+ title: 'API',
354
+ version: '1.0.0',
355
+ },
356
+ paths: {},
357
+ };
358
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
359
+ callback(null, { openapi: expectedOpenAPISpec });
360
+ return undefined;
361
+ });
362
+ const result = await convertSwagger2OpenAPI(swaggerSpec);
363
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith({ paths: {} }, { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
364
+ expect(result).toEqual(expectedOpenAPISpec);
365
+ });
366
+ it('should handle specification with null paths', async () => {
367
+ const swaggerSpec = {
368
+ swagger: '2.0',
369
+ info: {
370
+ title: 'Test API',
371
+ version: '1.0.0',
372
+ },
373
+ paths: null,
374
+ };
375
+ const expectedOpenAPISpec = {
376
+ openapi: '3.0.0',
377
+ info: {
378
+ title: 'Test API',
379
+ version: '1.0.0',
380
+ },
381
+ paths: {},
382
+ };
383
+ mockSwagger2OpenAPI.convertObj.mockImplementation((_spec, _options, callback) => {
384
+ callback(null, { openapi: expectedOpenAPISpec });
385
+ return undefined;
386
+ });
387
+ const result = await convertSwagger2OpenAPI(swaggerSpec);
388
+ expect(mockSwagger2OpenAPI.convertObj).toHaveBeenCalledWith({ ...swaggerSpec, paths: {} }, { patch: true, warnOnly: true, text: '{}', anchors: true }, expect.any(Function));
389
+ expect(result).toEqual(expectedOpenAPISpec);
390
+ });
391
+ });
392
+ //# sourceMappingURL=convertSwagger2OpenAPI.test.js.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,54 @@
1
+ import { debounce } from '../debounce.js';
2
+ vi.useFakeTimers();
3
+ describe('debounce', () => {
4
+ it('should debounce function calls', () => {
5
+ const fn = vi.fn();
6
+ const debouncedFn = debounce(fn, 100);
7
+ // Call the debounced function multiple times within the threshold
8
+ debouncedFn('a');
9
+ debouncedFn('b');
10
+ debouncedFn('c');
11
+ // Advance time by 99ms
12
+ vi.advanceTimersByTime(99);
13
+ // The function should not have been called yet
14
+ expect(fn).not.toHaveBeenCalled();
15
+ // Call the function again
16
+ debouncedFn('d');
17
+ // Advance time by another 99ms
18
+ vi.advanceTimersByTime(99);
19
+ // The function should still not have been called yet
20
+ expect(fn).not.toHaveBeenCalled();
21
+ // Advance time by the remaining 1ms
22
+ vi.advanceTimersByTime(1);
23
+ // The function should have been called once with the last value passed to it
24
+ expect(fn).toHaveBeenCalledTimes(1);
25
+ expect(fn).toHaveBeenCalledWith('d');
26
+ });
27
+ it('should call the function immediately when the `leading` option is `true`', () => {
28
+ const fn = vi.fn();
29
+ const debouncedFn = debounce(fn, 100, true);
30
+ // Call the debounced function multiple times within the threshold
31
+ debouncedFn('a');
32
+ debouncedFn('b');
33
+ debouncedFn('c');
34
+ // The function should have been called immediately with the first value passed to it
35
+ expect(fn).toHaveBeenCalledTimes(1);
36
+ expect(fn).toHaveBeenCalledWith('a');
37
+ // Advance time by 99ms
38
+ vi.advanceTimersByTime(99);
39
+ // The function should not have been called again yet
40
+ expect(fn).toHaveBeenCalledTimes(1);
41
+ // Call the function again
42
+ debouncedFn('d');
43
+ // Advance time by another 99ms
44
+ vi.advanceTimersByTime(99);
45
+ // The function should still not have been called yet
46
+ expect(fn).toHaveBeenCalledTimes(1);
47
+ // Advance time by the remaining 1ms
48
+ vi.advanceTimersByTime(1);
49
+ // The function should have been called once more with the last value passed to it
50
+ expect(fn).toHaveBeenCalledTimes(2);
51
+ expect(fn).toHaveBeenCalledWith('d');
52
+ });
53
+ });
54
+ //# sourceMappingURL=debounce.test.js.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { debugTime } from '../debug.js';
2
+ describe('debug', () => {
3
+ let spy;
4
+ beforeEach(() => {
5
+ spy = vi.spyOn(console, 'time');
6
+ });
7
+ afterEach(() => {
8
+ spy.mockRestore();
9
+ });
10
+ describe('debugTime', () => {
11
+ it('should call console.time with the given label in non-production environment', () => {
12
+ process.env.NODE_ENV = 'development';
13
+ debugTime('test');
14
+ expect(spy).toHaveBeenCalledWith('test');
15
+ });
16
+ it('should not call console.time in production environment', () => {
17
+ process.env.NODE_ENV = 'production';
18
+ debugTime('test');
19
+ expect(spy).not.toHaveBeenCalled();
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=debug.test.js.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,108 @@
1
+ import { querySelector, html2Str, IS_BROWSER } from '../dom.js';
2
+ describe('DOM utils', () => {
3
+ describe('querySelector', () => {
4
+ afterEach(() => {
5
+ document.body.innerHTML = '';
6
+ });
7
+ it('should return element when document is defined', () => {
8
+ document.body.innerHTML = '<div></div>';
9
+ const div = querySelector('div');
10
+ expect(div).not.toBeNull();
11
+ expect(div?.tagName).toBe('DIV');
12
+ });
13
+ it('should return null for non-existent element', () => {
14
+ document.body.innerHTML = '<div></div>';
15
+ const span = querySelector('span');
16
+ expect(span).toBeNull();
17
+ });
18
+ it('should return null when document is undefined', () => {
19
+ expect(querySelector('div')).toBeNull();
20
+ });
21
+ });
22
+ describe('html2Str', () => {
23
+ it('should remove tags and keep text', () => {
24
+ expect(html2Str('<div><p>Hello</p> <span>World</span></div>')).toBe('Hello World');
25
+ });
26
+ it('should handle multiple spaces between chunks', () => {
27
+ expect(html2Str('<div> chunk1 </div> <div> chunk2 </div>')).toBe('chunk1 chunk2');
28
+ });
29
+ it('should return an empty string for empty input', () => {
30
+ expect(html2Str('')).toBe('');
31
+ });
32
+ it('should remove tags and newlines from HTML', () => {
33
+ expect(html2Str('<div>Hello\n<span>world</span></div>')).toBe('Hello world');
34
+ });
35
+ it('should return an empty string if input is empty', () => {
36
+ expect(html2Str('')).toBe('');
37
+ });
38
+ });
39
+ describe('IS_BROWSER', () => {
40
+ it('should be true in a browser-like environment', () => {
41
+ expect(IS_BROWSER).toBe(true);
42
+ });
43
+ });
44
+ describe('scrollIntoViewIfNeeded polyfill', () => {
45
+ let parent;
46
+ let child;
47
+ beforeEach(async () => {
48
+ parent = document.createElement('div');
49
+ child = document.createElement('div');
50
+ parent.appendChild(child);
51
+ document.body.appendChild(parent);
52
+ vi.spyOn(window, 'getComputedStyle').mockReturnValue({
53
+ getPropertyValue: (prop) => {
54
+ if (prop === 'border-top-width')
55
+ return '10';
56
+ if (prop === 'border-left-width')
57
+ return '10';
58
+ return '0';
59
+ },
60
+ });
61
+ Object.defineProperties(parent, {
62
+ offsetTop: { value: 100, configurable: true },
63
+ offsetLeft: { value: 100, configurable: true },
64
+ scrollTop: { value: 100, configurable: true, writable: true },
65
+ scrollLeft: { value: 100, configurable: true, writable: true },
66
+ clientHeight: { value: 200, configurable: true },
67
+ clientWidth: { value: 200, configurable: true },
68
+ });
69
+ Object.defineProperties(child, {
70
+ offsetTop: { value: 150, configurable: true },
71
+ offsetLeft: { value: 150, configurable: true },
72
+ clientHeight: { value: 50, configurable: true },
73
+ clientWidth: { value: 50, configurable: true },
74
+ scrollIntoView: { value: vi.fn(), configurable: true },
75
+ });
76
+ if (typeof Element.prototype.scrollIntoViewIfNeeded !== 'function') {
77
+ await import('../dom');
78
+ }
79
+ });
80
+ afterEach(() => {
81
+ if (parent.parentNode) {
82
+ parent.parentNode.removeChild(parent);
83
+ }
84
+ vi.restoreAllMocks();
85
+ });
86
+ it('should center the element when over top and centerIfNeeded is true', () => {
87
+ Object.defineProperty(child, 'offsetTop', { value: 50 });
88
+ child.scrollIntoViewIfNeeded(true);
89
+ expect(parent.scrollTop).toBe(-135);
90
+ });
91
+ it('should center the element when over bottom and centerIfNeeded is true', () => {
92
+ Object.defineProperty(child, 'offsetTop', { value: 350 });
93
+ child.scrollIntoViewIfNeeded(true);
94
+ expect(parent.scrollTop).toBe(100);
95
+ });
96
+ it('should scroll into view when over left and centerIfNeeded is false', () => {
97
+ Object.defineProperty(child, 'offsetLeft', { value: 50 });
98
+ child.scrollIntoViewIfNeeded(false);
99
+ expect(child.scrollIntoView).toHaveBeenCalled();
100
+ });
101
+ it('should scroll into view when over right and centerIfNeeded is false', () => {
102
+ Object.defineProperty(child, 'offsetLeft', { value: 350 });
103
+ child.scrollIntoViewIfNeeded(false);
104
+ expect(child.scrollIntoView).toHaveBeenCalled();
105
+ });
106
+ });
107
+ });
108
+ //# sourceMappingURL=dom.test.js.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { getBreadcrumbs } from '../getBreadcrumbs.js';
3
+ describe('getBreadcrumbs', () => {
4
+ it('should return empty array when tag has no parent', () => {
5
+ const tag = {
6
+ id: 'users-tag',
7
+ href: '/tags/users',
8
+ name: 'Users',
9
+ type: 'tag',
10
+ items: [],
11
+ depth: 0,
12
+ level: 1,
13
+ };
14
+ expect(getBreadcrumbs(tag)).toEqual([]);
15
+ });
16
+ it('should return single breadcrumb when tag has one parent', () => {
17
+ const parent = {
18
+ id: 'api-tag',
19
+ href: '/tag/api',
20
+ name: 'API',
21
+ type: 'tag',
22
+ items: [],
23
+ depth: 0,
24
+ level: 1,
25
+ };
26
+ const tag = {
27
+ id: 'users-tag',
28
+ href: '/tags/users',
29
+ name: 'Users',
30
+ type: 'tag',
31
+ items: [],
32
+ depth: 0,
33
+ level: 1,
34
+ parent,
35
+ };
36
+ expect(getBreadcrumbs(tag)).toEqual([
37
+ {
38
+ name: 'API',
39
+ href: '/tag/api',
40
+ },
41
+ ]);
42
+ });
43
+ it('should return empty array when provided element is not type "tag"', () => {
44
+ const tag = {
45
+ id: 'users-category',
46
+ href: '/category/users',
47
+ name: 'Users',
48
+ //@ts-ignore
49
+ type: 'category',
50
+ items: [],
51
+ depth: 0,
52
+ level: 1,
53
+ };
54
+ expect(getBreadcrumbs(tag)).toEqual([]);
55
+ });
56
+ it('should return breadcrumbs in correct order for multiple parents', () => {
57
+ const rootParent = {
58
+ id: 'root-tag',
59
+ href: '/tag/root',
60
+ name: 'Root',
61
+ type: 'tag',
62
+ items: [],
63
+ depth: 0,
64
+ level: 1,
65
+ };
66
+ const middleParent = {
67
+ id: 'api-tag',
68
+ href: '/tag/api',
69
+ name: 'API',
70
+ type: 'tag',
71
+ items: [],
72
+ depth: 0,
73
+ level: 2,
74
+ parent: rootParent,
75
+ };
76
+ const tag = {
77
+ id: 'users-tag',
78
+ href: '/tags/users',
79
+ name: 'Users',
80
+ type: 'tag',
81
+ items: [],
82
+ depth: 0,
83
+ level: 3,
84
+ parent: middleParent,
85
+ };
86
+ expect(getBreadcrumbs(tag)).toEqual([
87
+ {
88
+ name: 'Root',
89
+ href: '/tag/root',
90
+ },
91
+ {
92
+ name: 'API',
93
+ href: '/tag/api',
94
+ },
95
+ ]);
96
+ });
97
+ });
98
+ //# sourceMappingURL=getBreadcrumbs.test.js.map