vue-instantsearch 4.10.6 → 4.10.8

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 (231) hide show
  1. package/package.json +4 -4
  2. package/src/__tests__/common-connectors.test.js +10 -10
  3. package/src/__tests__/common-shared.test.js +3 -3
  4. package/src/__tests__/common-widgets.test.js +2 -2
  5. package/src/__tests__/index.js +2 -2
  6. package/src/components/Autocomplete.vue +2 -1
  7. package/src/components/Breadcrumb.vue +1 -0
  8. package/src/components/ClearRefinements.vue +1 -0
  9. package/src/components/Configure.js +3 -2
  10. package/src/components/ConfigureRelatedItems.js +2 -1
  11. package/src/components/CurrentRefinements.vue +2 -1
  12. package/src/components/DynamicWidgets.js +2 -1
  13. package/src/components/ExperimentalDynamicWidgets.js +2 -1
  14. package/src/components/HierarchicalMenu.vue +4 -2
  15. package/src/components/Highlight.vue +1 -0
  16. package/src/components/Highlighter.vue +1 -1
  17. package/src/components/Hits.vue +2 -1
  18. package/src/components/HitsPerPage.vue +2 -1
  19. package/src/components/Index.js +2 -1
  20. package/src/components/InfiniteHits.vue +2 -1
  21. package/src/components/InstantSearch.js +2 -1
  22. package/src/components/Menu.vue +2 -1
  23. package/src/components/MenuSelect.vue +2 -1
  24. package/src/components/NumericMenu.vue +2 -1
  25. package/src/components/Pagination.vue +2 -1
  26. package/src/components/Panel.vue +1 -1
  27. package/src/components/QueryRuleContext.js +2 -1
  28. package/src/components/QueryRuleCustomData.vue +2 -1
  29. package/src/components/RangeInput.vue +2 -1
  30. package/src/components/RatingMenu.vue +2 -1
  31. package/src/components/RefinementList.vue +5 -3
  32. package/src/components/RelevantSort.vue +2 -1
  33. package/src/components/SearchBox.vue +2 -0
  34. package/src/components/Snippet.vue +1 -0
  35. package/src/components/SortBy.vue +1 -0
  36. package/src/components/StateResults.vue +1 -1
  37. package/src/components/Stats.vue +2 -1
  38. package/src/components/ToggleRefinement.vue +2 -1
  39. package/src/components/VoiceSearch.vue +1 -0
  40. package/src/components/__tests__/Autocomplete.js +1 -1
  41. package/src/components/__tests__/CurrentRefinements.js +1 -1
  42. package/src/components/__tests__/DynamicWidgets.js +1 -1
  43. package/src/components/__tests__/ExperimentalDynamicWidgets.js +2 -2
  44. package/src/components/__tests__/HitsPerPage.js +4 -3
  45. package/src/components/__tests__/Index-integration.js +3 -2
  46. package/src/components/__tests__/Index.js +1 -1
  47. package/src/components/__tests__/InstantSearch-integration.js +1 -1
  48. package/src/components/__tests__/InstantSearch.js +4 -3
  49. package/src/components/__tests__/InstantSearchSsr.js +4 -3
  50. package/src/components/__tests__/MenuSelect.js +1 -1
  51. package/src/components/__tests__/QueryRuleContext.js +1 -1
  52. package/src/components/__tests__/QueryRuleCustomData.js +1 -1
  53. package/src/components/__tests__/RatingMenu.js +1 -1
  54. package/src/components/__tests__/RefinementList.js +1 -1
  55. package/src/components/__tests__/RelevantSort.js +1 -1
  56. package/src/components/__tests__/SearchBox.js +1 -1
  57. package/src/components/__tests__/SortBy.js +3 -3
  58. package/src/components/__tests__/StateResults.js +1 -1
  59. package/src/components/__tests__/Stats.js +2 -3
  60. package/src/components/__tests__/VoiceSearch.js +1 -1
  61. package/src/components/__tests__/__Template.js +1 -1
  62. package/src/mixins/__tests__/panel.test.js +2 -1
  63. package/src/mixins/panel.js +2 -1
  64. package/src/util/__tests__/createServerRootMixin.test.js +12 -11
  65. package/src/util/createInstantSearchComponent.js +2 -1
  66. package/src/util/createServerRootMixin.js +1 -0
  67. package/src/util/parseAlgoliaHit.js +1 -0
  68. package/vue2/cjs/index.js +1 -1
  69. package/vue2/cjs/index.js.map +1 -1
  70. package/vue2/es/package.json.js +1 -1
  71. package/vue2/es/src/components/Configure.js.map +1 -1
  72. package/vue2/es/src/components/ConfigureRelatedItems.js.map +1 -1
  73. package/vue2/es/src/components/DynamicWidgets.js.map +1 -1
  74. package/vue2/es/src/components/ExperimentalDynamicWidgets.js.map +1 -1
  75. package/vue2/es/src/components/Highlighter.vue_rollup-plugin-vue=script.js.map +1 -1
  76. package/vue2/es/src/components/Index.js.map +1 -1
  77. package/vue2/es/src/components/InstantSearch.js.map +1 -1
  78. package/vue2/es/src/components/QueryRuleContext.js.map +1 -1
  79. package/vue2/es/src/components/RefinementList.vue_rollup-plugin-vue=script.js.map +1 -1
  80. package/vue2/es/src/mixins/panel.js.map +1 -1
  81. package/vue2/es/src/util/createInstantSearchComponent.js.map +1 -1
  82. package/vue2/es/src/util/createServerRootMixin.js.map +1 -1
  83. package/vue2/es/src/util/parseAlgoliaHit.js.map +1 -1
  84. package/vue2/umd/index.js +1 -1
  85. package/vue2/umd/index.js.map +1 -1
  86. package/vue3/cjs/index.js +1 -1
  87. package/vue3/cjs/index.js.map +1 -1
  88. package/vue3/es/package.json.js +1 -1
  89. package/vue3/es/src/components/Autocomplete.vue.js +1 -1
  90. package/vue3/es/src/components/Autocomplete.vue_vue&type=script&lang.js.map +1 -1
  91. package/vue3/es/src/components/{Autocomplete.vue_vue&type=template&id=7ca53d64&lang.js → Autocomplete.vue_vue&type=template&id=52a2a414&lang.js} +1 -1
  92. package/vue3/es/src/components/Autocomplete.vue_vue&type=template&id=52a2a414&lang.js.map +1 -0
  93. package/vue3/es/src/components/Breadcrumb.vue.js +1 -1
  94. package/vue3/es/src/components/Breadcrumb.vue_vue&type=script&lang.js.map +1 -1
  95. package/vue3/es/src/components/{Breadcrumb.vue_vue&type=template&id=136e0623&lang.js → Breadcrumb.vue_vue&type=template&id=ea18edbe&lang.js} +1 -1
  96. package/vue3/es/src/components/Breadcrumb.vue_vue&type=template&id=ea18edbe&lang.js.map +1 -0
  97. package/vue3/es/src/components/ClearRefinements.vue.js +1 -1
  98. package/vue3/es/src/components/ClearRefinements.vue_vue&type=script&lang.js.map +1 -1
  99. package/vue3/es/src/components/{ClearRefinements.vue_vue&type=template&id=1b5799b9&lang.js → ClearRefinements.vue_vue&type=template&id=302b873a&lang.js} +1 -1
  100. package/vue3/es/src/components/ClearRefinements.vue_vue&type=template&id=302b873a&lang.js.map +1 -0
  101. package/vue3/es/src/components/Configure.js.map +1 -1
  102. package/vue3/es/src/components/ConfigureRelatedItems.js.map +1 -1
  103. package/vue3/es/src/components/CurrentRefinements.vue.js +1 -1
  104. package/vue3/es/src/components/CurrentRefinements.vue_vue&type=script&lang.js.map +1 -1
  105. package/vue3/es/src/components/{CurrentRefinements.vue_vue&type=template&id=6256a290&lang.js → CurrentRefinements.vue_vue&type=template&id=3ffbec3c&lang.js} +1 -1
  106. package/vue3/es/src/components/CurrentRefinements.vue_vue&type=template&id=3ffbec3c&lang.js.map +1 -0
  107. package/vue3/es/src/components/DynamicWidgets.js.map +1 -1
  108. package/vue3/es/src/components/ExperimentalDynamicWidgets.js.map +1 -1
  109. package/vue3/es/src/components/HierarchicalMenu.vue.js +1 -1
  110. package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=script&lang.js.map +1 -1
  111. package/vue3/es/src/components/{HierarchicalMenu.vue_vue&type=template&id=3548a9a1&lang.js → HierarchicalMenu.vue_vue&type=template&id=15099ac6&lang.js} +1 -1
  112. package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=template&id=15099ac6&lang.js.map +1 -0
  113. package/vue3/es/src/components/Highlight.vue.js +1 -1
  114. package/vue3/es/src/components/Highlight.vue_vue&type=script&lang.js.map +1 -1
  115. package/vue3/es/src/components/{Highlight.vue_vue&type=template&id=7592ff40&lang.js → Highlight.vue_vue&type=template&id=1d5c1fda&lang.js} +1 -1
  116. package/vue3/es/src/components/Highlight.vue_vue&type=template&id=1d5c1fda&lang.js.map +1 -0
  117. package/vue3/es/src/components/Highlighter.vue.js +1 -1
  118. package/vue3/es/src/components/Highlighter.vue_vue&type=script&lang.js.map +1 -1
  119. package/vue3/es/src/components/{Highlighter.vue_vue&type=template&id=11ec06d9&lang.js → Highlighter.vue_vue&type=template&id=f822f802&lang.js} +1 -1
  120. package/vue3/es/src/components/{Highlighter.vue_vue&type=template&id=11ec06d9&lang.js.map → Highlighter.vue_vue&type=template&id=f822f802&lang.js.map} +1 -1
  121. package/vue3/es/src/components/Hits.vue.js +1 -1
  122. package/vue3/es/src/components/Hits.vue_vue&type=script&lang.js.map +1 -1
  123. package/vue3/es/src/components/{Hits.vue_vue&type=template&id=d5fcff04&lang.js → Hits.vue_vue&type=template&id=026646d2&lang.js} +1 -1
  124. package/vue3/es/src/components/Hits.vue_vue&type=template&id=026646d2&lang.js.map +1 -0
  125. package/vue3/es/src/components/HitsPerPage.vue.js +1 -1
  126. package/vue3/es/src/components/HitsPerPage.vue_vue&type=script&lang.js.map +1 -1
  127. package/vue3/es/src/components/{HitsPerPage.vue_vue&type=template&id=d68f3530&lang.js → HitsPerPage.vue_vue&type=template&id=5d43db9c&lang.js} +1 -1
  128. package/vue3/es/src/components/HitsPerPage.vue_vue&type=template&id=5d43db9c&lang.js.map +1 -0
  129. package/vue3/es/src/components/Index.js.map +1 -1
  130. package/vue3/es/src/components/InfiniteHits.vue.js +1 -1
  131. package/vue3/es/src/components/InfiniteHits.vue_vue&type=script&lang.js.map +1 -1
  132. package/vue3/es/src/components/{InfiniteHits.vue_vue&type=template&id=0abcf352&lang.js → InfiniteHits.vue_vue&type=template&id=39939af3&lang.js} +1 -1
  133. package/vue3/es/src/components/InfiniteHits.vue_vue&type=template&id=39939af3&lang.js.map +1 -0
  134. package/vue3/es/src/components/InstantSearch.js.map +1 -1
  135. package/vue3/es/src/components/Menu.vue.js +1 -1
  136. package/vue3/es/src/components/Menu.vue_vue&type=script&lang.js.map +1 -1
  137. package/vue3/es/src/components/{Menu.vue_vue&type=template&id=577979d0&lang.js → Menu.vue_vue&type=template&id=8e757064&lang.js} +1 -1
  138. package/vue3/es/src/components/Menu.vue_vue&type=template&id=8e757064&lang.js.map +1 -0
  139. package/vue3/es/src/components/MenuSelect.vue.js +1 -1
  140. package/vue3/es/src/components/MenuSelect.vue_vue&type=script&lang.js.map +1 -1
  141. package/vue3/es/src/components/{MenuSelect.vue_vue&type=template&id=12bad393&lang.js → MenuSelect.vue_vue&type=template&id=11a03a77&lang.js} +1 -1
  142. package/vue3/es/src/components/MenuSelect.vue_vue&type=template&id=11a03a77&lang.js.map +1 -0
  143. package/vue3/es/src/components/NumericMenu.vue.js +1 -1
  144. package/vue3/es/src/components/NumericMenu.vue_vue&type=script&lang.js.map +1 -1
  145. package/vue3/es/src/components/{NumericMenu.vue_vue&type=template&id=ada9761c&lang.js → NumericMenu.vue_vue&type=template&id=583b28d4&lang.js} +1 -1
  146. package/vue3/es/src/components/NumericMenu.vue_vue&type=template&id=583b28d4&lang.js.map +1 -0
  147. package/vue3/es/src/components/Pagination.vue.js +1 -1
  148. package/vue3/es/src/components/Pagination.vue_vue&type=script&lang.js.map +1 -1
  149. package/vue3/es/src/components/{Pagination.vue_vue&type=template&id=455c122a&lang.js → Pagination.vue_vue&type=template&id=5a680db4&lang.js} +1 -1
  150. package/vue3/es/src/components/{Pagination.vue_vue&type=template&id=455c122a&lang.js.map → Pagination.vue_vue&type=template&id=5a680db4&lang.js.map} +1 -1
  151. package/vue3/es/src/components/Panel.vue.js +1 -1
  152. package/vue3/es/src/components/Panel.vue_vue&type=script&lang.js.map +1 -1
  153. package/vue3/es/src/components/{Panel.vue_vue&type=template&id=766abb5d&lang.js → Panel.vue_vue&type=template&id=7fcc1827&lang.js} +1 -1
  154. package/vue3/es/src/components/{Panel.vue_vue&type=template&id=766abb5d&lang.js.map → Panel.vue_vue&type=template&id=7fcc1827&lang.js.map} +1 -1
  155. package/vue3/es/src/components/QueryRuleContext.js.map +1 -1
  156. package/vue3/es/src/components/QueryRuleCustomData.vue.js +1 -1
  157. package/vue3/es/src/components/QueryRuleCustomData.vue_vue&type=script&lang.js.map +1 -1
  158. package/vue3/es/src/components/{QueryRuleCustomData.vue_vue&type=template&id=31c98630&lang.js → QueryRuleCustomData.vue_vue&type=template&id=1e550962&lang.js} +1 -1
  159. package/vue3/es/src/components/QueryRuleCustomData.vue_vue&type=template&id=1e550962&lang.js.map +1 -0
  160. package/vue3/es/src/components/RangeInput.vue.js +1 -1
  161. package/vue3/es/src/components/RangeInput.vue_vue&type=script&lang.js.map +1 -1
  162. package/vue3/es/src/components/{RangeInput.vue_vue&type=template&id=2c7c21d8&lang.js → RangeInput.vue_vue&type=template&id=3e30e816&lang.js} +1 -1
  163. package/vue3/es/src/components/RangeInput.vue_vue&type=template&id=3e30e816&lang.js.map +1 -0
  164. package/vue3/es/src/components/RatingMenu.vue.js +1 -1
  165. package/vue3/es/src/components/RatingMenu.vue_vue&type=script&lang.js.map +1 -1
  166. package/vue3/es/src/components/{RatingMenu.vue_vue&type=template&id=0fb40347&lang.js → RatingMenu.vue_vue&type=template&id=6effe1ff&lang.js} +1 -1
  167. package/vue3/es/src/components/{RatingMenu.vue_vue&type=template&id=0fb40347&lang.js.map → RatingMenu.vue_vue&type=template&id=6effe1ff&lang.js.map} +1 -1
  168. package/vue3/es/src/components/RefinementList.vue.js +1 -1
  169. package/vue3/es/src/components/RefinementList.vue_vue&type=script&lang.js.map +1 -1
  170. package/vue3/es/src/components/{RefinementList.vue_vue&type=template&id=00083417&lang.js → RefinementList.vue_vue&type=template&id=80c1baee&lang.js} +1 -1
  171. package/vue3/es/src/components/RefinementList.vue_vue&type=template&id=80c1baee&lang.js.map +1 -0
  172. package/vue3/es/src/components/RelevantSort.vue.js +1 -1
  173. package/vue3/es/src/components/RelevantSort.vue_vue&type=script&lang.js.map +1 -1
  174. package/vue3/es/src/components/{RelevantSort.vue_vue&type=template&id=0d400606&lang.js → RelevantSort.vue_vue&type=template&id=d83cf556&lang.js} +1 -1
  175. package/vue3/es/src/components/RelevantSort.vue_vue&type=template&id=d83cf556&lang.js.map +1 -0
  176. package/vue3/es/src/components/SearchBox.vue.js +1 -1
  177. package/vue3/es/src/components/SearchBox.vue_vue&type=script&lang.js.map +1 -1
  178. package/vue3/es/src/components/{SearchBox.vue_vue&type=template&id=30bd05ae&lang.js → SearchBox.vue_vue&type=template&id=27000fa5&lang.js} +1 -1
  179. package/vue3/es/src/components/SearchBox.vue_vue&type=template&id=27000fa5&lang.js.map +1 -0
  180. package/vue3/es/src/components/Snippet.vue.js +1 -1
  181. package/vue3/es/src/components/Snippet.vue_vue&type=script&lang.js.map +1 -1
  182. package/vue3/es/src/components/{Snippet.vue_vue&type=template&id=1cd4c392&lang.js → Snippet.vue_vue&type=template&id=1e214b4c&lang.js} +1 -1
  183. package/vue3/es/src/components/Snippet.vue_vue&type=template&id=1e214b4c&lang.js.map +1 -0
  184. package/vue3/es/src/components/SortBy.vue.js +1 -1
  185. package/vue3/es/src/components/SortBy.vue_vue&type=script&lang.js.map +1 -1
  186. package/vue3/es/src/components/{SortBy.vue_vue&type=template&id=6a94a4c1&lang.js → SortBy.vue_vue&type=template&id=507e7d3a&lang.js} +1 -1
  187. package/vue3/es/src/components/SortBy.vue_vue&type=template&id=507e7d3a&lang.js.map +1 -0
  188. package/vue3/es/src/components/StateResults.vue.js +1 -1
  189. package/vue3/es/src/components/StateResults.vue_vue&type=script&lang.js.map +1 -1
  190. package/vue3/es/src/components/{StateResults.vue_vue&type=template&id=2ea5b184&lang.js → StateResults.vue_vue&type=template&id=f5047700&lang.js} +1 -1
  191. package/vue3/es/src/components/{StateResults.vue_vue&type=template&id=2ea5b184&lang.js.map → StateResults.vue_vue&type=template&id=f5047700&lang.js.map} +1 -1
  192. package/vue3/es/src/components/Stats.vue.js +1 -1
  193. package/vue3/es/src/components/Stats.vue_vue&type=script&lang.js.map +1 -1
  194. package/vue3/es/src/components/{Stats.vue_vue&type=template&id=05ff9d6a&lang.js → Stats.vue_vue&type=template&id=6d9c672c&lang.js} +1 -1
  195. package/vue3/es/src/components/Stats.vue_vue&type=template&id=6d9c672c&lang.js.map +1 -0
  196. package/vue3/es/src/components/ToggleRefinement.vue.js +1 -1
  197. package/vue3/es/src/components/ToggleRefinement.vue_vue&type=script&lang.js.map +1 -1
  198. package/vue3/es/src/components/{ToggleRefinement.vue_vue&type=template&id=461db228&lang.js → ToggleRefinement.vue_vue&type=template&id=1e8d14ba&lang.js} +1 -1
  199. package/vue3/es/src/components/ToggleRefinement.vue_vue&type=template&id=1e8d14ba&lang.js.map +1 -0
  200. package/vue3/es/src/components/VoiceSearch.vue.js +1 -1
  201. package/vue3/es/src/components/VoiceSearch.vue_vue&type=script&lang.js.map +1 -1
  202. package/vue3/es/src/components/{VoiceSearch.vue_vue&type=template&id=1cf17560&lang.js → VoiceSearch.vue_vue&type=template&id=c25adbd0&lang.js} +1 -1
  203. package/vue3/es/src/components/VoiceSearch.vue_vue&type=template&id=c25adbd0&lang.js.map +1 -0
  204. package/vue3/es/src/mixins/panel.js.map +1 -1
  205. package/vue3/es/src/util/createInstantSearchComponent.js.map +1 -1
  206. package/vue3/es/src/util/createServerRootMixin.js.map +1 -1
  207. package/vue3/es/src/util/parseAlgoliaHit.js.map +1 -1
  208. package/vue3/umd/index.js +1 -1
  209. package/vue3/umd/index.js.map +1 -1
  210. package/vue3/es/src/components/Autocomplete.vue_vue&type=template&id=7ca53d64&lang.js.map +0 -1
  211. package/vue3/es/src/components/Breadcrumb.vue_vue&type=template&id=136e0623&lang.js.map +0 -1
  212. package/vue3/es/src/components/ClearRefinements.vue_vue&type=template&id=1b5799b9&lang.js.map +0 -1
  213. package/vue3/es/src/components/CurrentRefinements.vue_vue&type=template&id=6256a290&lang.js.map +0 -1
  214. package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=template&id=3548a9a1&lang.js.map +0 -1
  215. package/vue3/es/src/components/Highlight.vue_vue&type=template&id=7592ff40&lang.js.map +0 -1
  216. package/vue3/es/src/components/Hits.vue_vue&type=template&id=d5fcff04&lang.js.map +0 -1
  217. package/vue3/es/src/components/HitsPerPage.vue_vue&type=template&id=d68f3530&lang.js.map +0 -1
  218. package/vue3/es/src/components/InfiniteHits.vue_vue&type=template&id=0abcf352&lang.js.map +0 -1
  219. package/vue3/es/src/components/Menu.vue_vue&type=template&id=577979d0&lang.js.map +0 -1
  220. package/vue3/es/src/components/MenuSelect.vue_vue&type=template&id=12bad393&lang.js.map +0 -1
  221. package/vue3/es/src/components/NumericMenu.vue_vue&type=template&id=ada9761c&lang.js.map +0 -1
  222. package/vue3/es/src/components/QueryRuleCustomData.vue_vue&type=template&id=31c98630&lang.js.map +0 -1
  223. package/vue3/es/src/components/RangeInput.vue_vue&type=template&id=2c7c21d8&lang.js.map +0 -1
  224. package/vue3/es/src/components/RefinementList.vue_vue&type=template&id=00083417&lang.js.map +0 -1
  225. package/vue3/es/src/components/RelevantSort.vue_vue&type=template&id=0d400606&lang.js.map +0 -1
  226. package/vue3/es/src/components/SearchBox.vue_vue&type=template&id=30bd05ae&lang.js.map +0 -1
  227. package/vue3/es/src/components/Snippet.vue_vue&type=template&id=1cd4c392&lang.js.map +0 -1
  228. package/vue3/es/src/components/SortBy.vue_vue&type=template&id=6a94a4c1&lang.js.map +0 -1
  229. package/vue3/es/src/components/Stats.vue_vue&type=template&id=05ff9d6a&lang.js.map +0 -1
  230. package/vue3/es/src/components/ToggleRefinement.vue_vue&type=template&id=461db228&lang.js.map +0 -1
  231. package/vue3/es/src/components/VoiceSearch.vue_vue&type=template&id=1cf17560&lang.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createServerRootMixin.js","sources":["../../../../src/util/createServerRootMixin.js"],"sourcesContent":["import instantsearch from 'instantsearch.js/es';\nimport {\n waitForResults,\n getInitialResults,\n} from 'instantsearch.js/es/lib/server';\nimport { isVue3, isVue2, Vue2, createSSRApp } from './vue-compat';\nimport { warn } from './warn';\n\nfunction defaultCloneComponent(componentInstance, { mixins = [] } = {}) {\n const options = {\n serverPrefetch: undefined,\n fetch: undefined,\n _base: undefined,\n name: 'ais-ssr-root-component',\n };\n\n let app;\n\n if (isVue3) {\n const appOptions = Object.assign({}, componentInstance.$options, options);\n appOptions.mixins = [...mixins, ...(appOptions.mixins || [])];\n app = createSSRApp(appOptions);\n if (componentInstance.$router) {\n app.use(componentInstance.$router);\n }\n if (componentInstance.$store) {\n app.use(componentInstance.$store);\n }\n if (componentInstance.$i18n) {\n app.use(componentInstance.$i18n);\n }\n } else {\n // copy over global Vue APIs\n options.router = componentInstance.$router;\n options.store = componentInstance.$store;\n options.i18n = componentInstance.$i18n;\n\n const Extended = componentInstance.$vnode\n ? componentInstance.$vnode.componentOptions.Ctor.extend(options)\n : Vue2.component(\n options.name,\n Object.assign({}, componentInstance.$options, options)\n );\n\n app = new Extended({\n propsData: componentInstance.$options.propsData,\n mixins: [...mixins],\n });\n }\n\n // https://stackoverflow.com/a/48195006/3185307\n app.$slots = componentInstance.$slots;\n app.$root = componentInstance.$root;\n if (isVue2) {\n app.$options.serverPrefetch = [];\n }\n\n return app;\n}\n\nfunction augmentInstantSearch(instantSearchOptions, cloneComponent) {\n const search = instantsearch(instantSearchOptions);\n\n let initialResults;\n\n /**\n * main API for SSR, called in serverPrefetch of a root component which contains instantsearch\n * @param {Object} props the object including `component` and `renderToString`\n * @param {Object} props.component the calling component's `this`\n * @param {Function} props.renderToString the function to render componentInstance to string\n * @returns {Promise} result of the search, to save for .hydrate\n */\n search.findResultsState = function ({ component, renderToString }) {\n if (!renderToString) {\n throw new Error(\n 'findResultsState requires `renderToString: (component) => Promise<string>` in the first argument.'\n );\n }\n\n let app;\n let instance;\n\n return Promise.resolve()\n .then(() => {\n app = cloneComponent(component, {\n mixins: [\n {\n beforeCreate() {\n const descriptor = Object.getOwnPropertyDescriptor(\n component,\n '$nuxt'\n );\n\n const isWritable = descriptor\n ? descriptor.writable || descriptor.set\n : false;\n\n if (component.$nuxt && isWritable) {\n // In case of Nuxt (3), we ensure the context is shared between\n // the real and cloned component\n this.$nuxt = component.$nuxt;\n }\n },\n created() {\n instance = this.instantsearch;\n\n instance.start();\n // although we use start for initializing the main index,\n // we don't want to send search requests yet\n instance.started = false;\n },\n },\n ],\n });\n })\n .then(() => renderToString(app))\n .then(() => waitForResults(instance))\n .then(() => {\n initialResults = getInitialResults(instance.mainIndex);\n search.hydrate(initialResults);\n return search.getState();\n });\n };\n\n /**\n * @returns {Promise} result state to serialize and enter into .hydrate\n */\n search.getState = function () {\n if (!initialResults) {\n throw new Error('You need to wait for findResultsState to finish');\n }\n return initialResults;\n };\n\n /**\n * make sure correct data is available in each widget's state.\n * called in widget mixin with (this.widget, this)\n *\n * @param {object} widget The widget instance\n * @param {object} parent The local parent index\n * @returns {void}\n */\n search.__forceRender = function (widget, parent) {\n const results = parent.getResults();\n\n // this happens when a different InstantSearch gets rendered initially,\n // after the hydrate finished. There's thus no initial results available.\n if (results === null) {\n return;\n }\n\n const state = results._state;\n\n const localHelper = parent.getHelper();\n // helper gets created in init, but that means it doesn't get the injected\n // parameters, because those are from the lastResults\n localHelper.state = state;\n\n widget.render({\n helper: localHelper,\n results,\n scopedResults: parent.getScopedResults(),\n parent,\n state,\n templatesConfig: {},\n createURL: parent.createURL,\n instantSearchInstance: search,\n searchMetadata: {\n isSearchStalled: false,\n },\n });\n };\n\n /**\n * Called both in server\n * @param {object} results a map of indexId: SearchResults\n * @returns {void}\n */\n search.hydrate = function (results) {\n if (!results) {\n warn(\n 'The result of `findResultsState()` needs to be passed to `hydrate()`.'\n );\n return;\n }\n\n search._initialResults = results;\n\n search.start();\n search.started = false;\n };\n return search;\n}\n\nexport function createServerRootMixin(instantSearchOptions = {}) {\n const { $cloneComponent = defaultCloneComponent } = instantSearchOptions;\n\n const search = augmentInstantSearch(instantSearchOptions, $cloneComponent);\n\n // put this in the user's root Vue instance\n // we can then reuse that InstantSearch instance seamlessly from `ais-instant-search-ssr`\n const rootMixin = {\n provide() {\n return {\n $_ais_ssrInstantSearchInstance: this.instantsearch,\n };\n },\n data() {\n return {\n // this is in data, so that the real & cloned render do not share\n // the same instantsearch instance.\n instantsearch: search,\n };\n },\n };\n\n return rootMixin;\n}\n"],"names":["defaultCloneComponent","componentInstance","const","app","options","serverPrefetch","undefined","fetch","_base","name","appOptions","Object","assign","$options","mixins","createSSRApp","$router","use","$store","$i18n","$slots","$root","createServerRootMixin","instantSearchOptions","search","cloneComponent","initialResults","instantsearch","findResultsState","instance","renderToString","Error","Promise","resolve","then","component","beforeCreate","descriptor","getOwnPropertyDescriptor","isWritable","writable","set","$nuxt","this","created","start","started","waitForResults","getInitialResults","mainIndex","hydrate","getState","__forceRender","widget","parent","results","getResults","state","_state","localHelper","getHelper","render","helper","scopedResults","getScopedResults","templatesConfig","createURL","instantSearchInstance","searchMetadata","isSearchStalled","_initialResults","warn","augmentInstantSearch","$cloneComponent","provide","$_ais_ssrInstantSearchInstance","data"],"mappings":"6OAQA,SAASA,EAAsBC,oBAAqC,kCAAP,IAC3DC,IAOIC,EAPEC,EAAU,CACdC,oBAAgBC,EAChBC,WAAOD,EACPE,WAAOF,EACPG,KAAM,0BAMAC,EAAaC,OAAOC,OAAO,GAAIX,EAAkBY,SAAUT,GAsCnE,OArCEM,EAAWI,OAAaA,SAAYJ,EAAWI,QAAU,IACzDX,EAAMY,EAAaL,GACfT,EAAkBe,SACpBb,EAAIc,IAAIhB,EAAkBe,SAExBf,EAAkBiB,QACpBf,EAAIc,IAAIhB,EAAkBiB,QAExBjB,EAAkBkB,OACpBhB,EAAIc,IAAIhB,EAAkBkB,OAsB9BhB,EAAIiB,OAASnB,EAAkBmB,OAC/BjB,EAAIkB,MAAQpB,EAAkBoB,MAKvBlB,EAyIF,SAASmB,EAAsBC,kBAAuB,2CACjCvB,GAE1BE,IAAMsB,EAzIR,SAA8BD,EAAsBE,GAClDvB,IAEIwB,EAFEF,EAASG,EAAcJ,GAkI7B,OAvHAC,EAAOI,iBAAmB,gBAOpBzB,EACA0B,mCAPJ,IAAKC,EACH,MAAM,IAAIC,MACR,qGAOJ,OAAOC,QAAQC,UACZC,gBACC/B,EAAMsB,EAAeU,EAAW,CAC9BrB,OAAQ,CACN,CACEsB,wBACElC,IAAMmC,EAAa1B,OAAO2B,yBACxBH,EACA,SAGII,IAAaF,IACfA,EAAWG,UAAYH,EAAWI,KAGlCN,EAAUO,OAASH,IAGrBI,KAAKD,MAAQP,EAAUO,QAG3BE,oBACEf,EAAWc,KAAKhB,eAEPkB,QAGThB,EAASiB,SAAU,SAM5BZ,uBAAWJ,EAAe3B,KAC1B+B,uBAAWa,EAAelB,KAC1BK,gBAGC,OAFAR,EAAiBsB,EAAkBnB,EAASoB,WAC5CzB,EAAO0B,QAAQxB,GACRF,EAAO2B,cAOpB3B,EAAO2B,SAAW,WAChB,IAAKzB,EACH,MAAM,IAAIK,MAAM,mDAElB,OAAOL,GAWTF,EAAO4B,cAAgB,SAAUC,EAAQC,GACvCpD,IAAMqD,EAAUD,EAAOE,aAIvB,GAAgB,OAAZD,EAAJ,CAIArD,IAAMuD,EAAQF,EAAQG,OAEhBC,EAAcL,EAAOM,YAG3BD,EAAYF,MAAQA,EAEpBJ,EAAOQ,OAAO,CACZC,OAAQH,UACRJ,EACAQ,cAAeT,EAAOU,0BACtBV,QACAG,EACAQ,gBAAiB,GACjBC,UAAWZ,EAAOY,UAClBC,sBAAuB3C,EACvB4C,eAAgB,CACdC,iBAAiB,OAUvB7C,EAAO0B,QAAU,SAAUK,GACpBA,GAOL/B,EAAO8C,gBAAkBf,EAEzB/B,EAAOqB,QACPrB,EAAOsB,SAAU,GATfyB,EACE,0EAUC/C,EAMQgD,CAAqBjD,EAAsBkD,GAmB1D,MAfkB,CAChBC,mBACE,MAAO,CACLC,+BAAgChC,KAAKhB,gBAGzCiD,gBACE,MAAO,CAGLjD,cAAeH"}
1
+ {"version":3,"file":"createServerRootMixin.js","sources":["../../../../src/util/createServerRootMixin.js"],"sourcesContent":["import instantsearch from 'instantsearch.js/es';\nimport {\n waitForResults,\n getInitialResults,\n} from 'instantsearch.js/es/lib/server';\n\nimport { isVue3, isVue2, Vue2, createSSRApp } from './vue-compat';\nimport { warn } from './warn';\n\nfunction defaultCloneComponent(componentInstance, { mixins = [] } = {}) {\n const options = {\n serverPrefetch: undefined,\n fetch: undefined,\n _base: undefined,\n name: 'ais-ssr-root-component',\n };\n\n let app;\n\n if (isVue3) {\n const appOptions = Object.assign({}, componentInstance.$options, options);\n appOptions.mixins = [...mixins, ...(appOptions.mixins || [])];\n app = createSSRApp(appOptions);\n if (componentInstance.$router) {\n app.use(componentInstance.$router);\n }\n if (componentInstance.$store) {\n app.use(componentInstance.$store);\n }\n if (componentInstance.$i18n) {\n app.use(componentInstance.$i18n);\n }\n } else {\n // copy over global Vue APIs\n options.router = componentInstance.$router;\n options.store = componentInstance.$store;\n options.i18n = componentInstance.$i18n;\n\n const Extended = componentInstance.$vnode\n ? componentInstance.$vnode.componentOptions.Ctor.extend(options)\n : Vue2.component(\n options.name,\n Object.assign({}, componentInstance.$options, options)\n );\n\n app = new Extended({\n propsData: componentInstance.$options.propsData,\n mixins: [...mixins],\n });\n }\n\n // https://stackoverflow.com/a/48195006/3185307\n app.$slots = componentInstance.$slots;\n app.$root = componentInstance.$root;\n if (isVue2) {\n app.$options.serverPrefetch = [];\n }\n\n return app;\n}\n\nfunction augmentInstantSearch(instantSearchOptions, cloneComponent) {\n const search = instantsearch(instantSearchOptions);\n\n let initialResults;\n\n /**\n * main API for SSR, called in serverPrefetch of a root component which contains instantsearch\n * @param {Object} props the object including `component` and `renderToString`\n * @param {Object} props.component the calling component's `this`\n * @param {Function} props.renderToString the function to render componentInstance to string\n * @returns {Promise} result of the search, to save for .hydrate\n */\n search.findResultsState = function ({ component, renderToString }) {\n if (!renderToString) {\n throw new Error(\n 'findResultsState requires `renderToString: (component) => Promise<string>` in the first argument.'\n );\n }\n\n let app;\n let instance;\n\n return Promise.resolve()\n .then(() => {\n app = cloneComponent(component, {\n mixins: [\n {\n beforeCreate() {\n const descriptor = Object.getOwnPropertyDescriptor(\n component,\n '$nuxt'\n );\n\n const isWritable = descriptor\n ? descriptor.writable || descriptor.set\n : false;\n\n if (component.$nuxt && isWritable) {\n // In case of Nuxt (3), we ensure the context is shared between\n // the real and cloned component\n this.$nuxt = component.$nuxt;\n }\n },\n created() {\n instance = this.instantsearch;\n\n instance.start();\n // although we use start for initializing the main index,\n // we don't want to send search requests yet\n instance.started = false;\n },\n },\n ],\n });\n })\n .then(() => renderToString(app))\n .then(() => waitForResults(instance))\n .then(() => {\n initialResults = getInitialResults(instance.mainIndex);\n search.hydrate(initialResults);\n return search.getState();\n });\n };\n\n /**\n * @returns {Promise} result state to serialize and enter into .hydrate\n */\n search.getState = function () {\n if (!initialResults) {\n throw new Error('You need to wait for findResultsState to finish');\n }\n return initialResults;\n };\n\n /**\n * make sure correct data is available in each widget's state.\n * called in widget mixin with (this.widget, this)\n *\n * @param {object} widget The widget instance\n * @param {object} parent The local parent index\n * @returns {void}\n */\n search.__forceRender = function (widget, parent) {\n const results = parent.getResults();\n\n // this happens when a different InstantSearch gets rendered initially,\n // after the hydrate finished. There's thus no initial results available.\n if (results === null) {\n return;\n }\n\n const state = results._state;\n\n const localHelper = parent.getHelper();\n // helper gets created in init, but that means it doesn't get the injected\n // parameters, because those are from the lastResults\n localHelper.state = state;\n\n widget.render({\n helper: localHelper,\n results,\n scopedResults: parent.getScopedResults(),\n parent,\n state,\n templatesConfig: {},\n createURL: parent.createURL,\n instantSearchInstance: search,\n searchMetadata: {\n isSearchStalled: false,\n },\n });\n };\n\n /**\n * Called both in server\n * @param {object} results a map of indexId: SearchResults\n * @returns {void}\n */\n search.hydrate = function (results) {\n if (!results) {\n warn(\n 'The result of `findResultsState()` needs to be passed to `hydrate()`.'\n );\n return;\n }\n\n search._initialResults = results;\n\n search.start();\n search.started = false;\n };\n return search;\n}\n\nexport function createServerRootMixin(instantSearchOptions = {}) {\n const { $cloneComponent = defaultCloneComponent } = instantSearchOptions;\n\n const search = augmentInstantSearch(instantSearchOptions, $cloneComponent);\n\n // put this in the user's root Vue instance\n // we can then reuse that InstantSearch instance seamlessly from `ais-instant-search-ssr`\n const rootMixin = {\n provide() {\n return {\n $_ais_ssrInstantSearchInstance: this.instantsearch,\n };\n },\n data() {\n return {\n // this is in data, so that the real & cloned render do not share\n // the same instantsearch instance.\n instantsearch: search,\n };\n },\n };\n\n return rootMixin;\n}\n"],"names":["defaultCloneComponent","componentInstance","const","app","options","serverPrefetch","undefined","fetch","_base","name","appOptions","Object","assign","$options","mixins","createSSRApp","$router","use","$store","$i18n","$slots","$root","createServerRootMixin","instantSearchOptions","search","cloneComponent","initialResults","instantsearch","findResultsState","instance","renderToString","Error","Promise","resolve","then","component","beforeCreate","descriptor","getOwnPropertyDescriptor","isWritable","writable","set","$nuxt","this","created","start","started","waitForResults","getInitialResults","mainIndex","hydrate","getState","__forceRender","widget","parent","results","getResults","state","_state","localHelper","getHelper","render","helper","scopedResults","getScopedResults","templatesConfig","createURL","instantSearchInstance","searchMetadata","isSearchStalled","_initialResults","warn","augmentInstantSearch","$cloneComponent","provide","$_ais_ssrInstantSearchInstance","data"],"mappings":"6OASA,SAASA,EAAsBC,oBAAqC,kCAAP,IAC3DC,IAOIC,EAPEC,EAAU,CACdC,oBAAgBC,EAChBC,WAAOD,EACPE,WAAOF,EACPG,KAAM,0BAMAC,EAAaC,OAAOC,OAAO,GAAIX,EAAkBY,SAAUT,GAsCnE,OArCEM,EAAWI,OAAaA,SAAYJ,EAAWI,QAAU,IACzDX,EAAMY,EAAaL,GACfT,EAAkBe,SACpBb,EAAIc,IAAIhB,EAAkBe,SAExBf,EAAkBiB,QACpBf,EAAIc,IAAIhB,EAAkBiB,QAExBjB,EAAkBkB,OACpBhB,EAAIc,IAAIhB,EAAkBkB,OAsB9BhB,EAAIiB,OAASnB,EAAkBmB,OAC/BjB,EAAIkB,MAAQpB,EAAkBoB,MAKvBlB,EAyIF,SAASmB,EAAsBC,kBAAuB,2CACjCvB,GAE1BE,IAAMsB,EAzIR,SAA8BD,EAAsBE,GAClDvB,IAEIwB,EAFEF,EAASG,EAAcJ,GAkI7B,OAvHAC,EAAOI,iBAAmB,gBAOpBzB,EACA0B,mCAPJ,IAAKC,EACH,MAAM,IAAIC,MACR,qGAOJ,OAAOC,QAAQC,UACZC,gBACC/B,EAAMsB,EAAeU,EAAW,CAC9BrB,OAAQ,CACN,CACEsB,wBACElC,IAAMmC,EAAa1B,OAAO2B,yBACxBH,EACA,SAGII,IAAaF,IACfA,EAAWG,UAAYH,EAAWI,KAGlCN,EAAUO,OAASH,IAGrBI,KAAKD,MAAQP,EAAUO,QAG3BE,oBACEf,EAAWc,KAAKhB,eAEPkB,QAGThB,EAASiB,SAAU,SAM5BZ,uBAAWJ,EAAe3B,KAC1B+B,uBAAWa,EAAelB,KAC1BK,gBAGC,OAFAR,EAAiBsB,EAAkBnB,EAASoB,WAC5CzB,EAAO0B,QAAQxB,GACRF,EAAO2B,cAOpB3B,EAAO2B,SAAW,WAChB,IAAKzB,EACH,MAAM,IAAIK,MAAM,mDAElB,OAAOL,GAWTF,EAAO4B,cAAgB,SAAUC,EAAQC,GACvCpD,IAAMqD,EAAUD,EAAOE,aAIvB,GAAgB,OAAZD,EAAJ,CAIArD,IAAMuD,EAAQF,EAAQG,OAEhBC,EAAcL,EAAOM,YAG3BD,EAAYF,MAAQA,EAEpBJ,EAAOQ,OAAO,CACZC,OAAQH,UACRJ,EACAQ,cAAeT,EAAOU,0BACtBV,QACAG,EACAQ,gBAAiB,GACjBC,UAAWZ,EAAOY,UAClBC,sBAAuB3C,EACvB4C,eAAgB,CACdC,iBAAiB,OAUvB7C,EAAO0B,QAAU,SAAUK,GACpBA,GAOL/B,EAAO8C,gBAAkBf,EAEzB/B,EAAOqB,QACPrB,EAAOsB,SAAU,GATfyB,EACE,0EAUC/C,EAMQgD,CAAqBjD,EAAsBkD,GAmB1D,MAfkB,CAChBC,mBACE,MAAO,CACLC,+BAAgChC,KAAKhB,gBAGzCiD,gBACE,MAAO,CAGLjD,cAAeH"}
@@ -1 +1 @@
1
- {"version":3,"file":"parseAlgoliaHit.js","sources":["../../../../src/util/parseAlgoliaHit.js"],"sourcesContent":["// copied from React InstantSearch\nimport { getPropertyByPath } from 'instantsearch.js/es/lib/utils';\nimport { unescape } from '../util/unescape';\n\nconst TAG_PLACEHOLDER = {\n highlightPreTag: '__ais-highlight__',\n highlightPostTag: '__/ais-highlight__',\n};\n\n/**\n * Parses an highlighted attribute into an array of objects with the string value, and\n * a boolean that indicated if this part is highlighted.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightedValue - highlighted attribute as returned by Algolia highlight feature\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nfunction parseHighlightedAttribute({ preTag, postTag, highlightedValue = '' }) {\n const splitByPreTag = highlightedValue.split(preTag);\n const firstValue = splitByPreTag.shift();\n const elements =\n firstValue === '' ? [] : [{ value: firstValue, isHighlighted: false }];\n\n if (postTag === preTag) {\n let isHighlighted = true;\n splitByPreTag.forEach((split) => {\n elements.push({ value: split, isHighlighted });\n isHighlighted = !isHighlighted;\n });\n } else {\n splitByPreTag.forEach((split) => {\n const splitByPostTag = split.split(postTag);\n\n elements.push({\n value: splitByPostTag[0],\n isHighlighted: true,\n });\n\n if (splitByPostTag[1] !== '') {\n elements.push({\n // Vue removes nodes which are just a single space (vuejs/vue#9208),\n // we replace this by two spaces, which does not have an impact,\n // unless someone would have `white-space: pre` on the highlights\n value: splitByPostTag[1] === ' ' ? ' ' : splitByPostTag[1],\n isHighlighted: false,\n });\n }\n });\n }\n\n return elements;\n}\n\n/**\n * Find an highlighted attribute given an `attribute` and an `highlightProperty`, parses it,\n * and provided an array of objects with the string value and a boolean if this\n * value is highlighted.\n *\n * In order to use this feature, highlight must be activated in the configuration of\n * the index. The `preTag` and `postTag` attributes are respectively highlightPreTag and\n * highlightPostTag in Algolia configuration.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightProperty - the property that contains the highlight structure in the results\n * @param {string} attribute - the highlighted attribute to look for\n * @param {object} hit - the actual hit returned by Algolia.\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nexport function parseAlgoliaHit({\n preTag = TAG_PLACEHOLDER.highlightPreTag,\n postTag = TAG_PLACEHOLDER.highlightPostTag,\n highlightProperty,\n attribute,\n hit,\n}) {\n if (!hit) throw new Error('`hit`, the matching record, must be provided');\n\n const highlightObject =\n getPropertyByPath(hit[highlightProperty], attribute) || {};\n\n if (Array.isArray(highlightObject)) {\n return highlightObject.map((item) =>\n parseHighlightedAttribute({\n preTag,\n postTag,\n highlightedValue: unescape(item.value),\n })\n );\n }\n\n return parseHighlightedAttribute({\n preTag,\n postTag,\n highlightedValue: unescape(highlightObject.value),\n });\n}\n"],"names":["const","TAG_PLACEHOLDER","highlightPreTag","highlightPostTag","parseHighlightedAttribute","splitByPreTag","highlightedValue","split","preTag","firstValue","shift","elements","value","isHighlighted","postTag","let","forEach","push","splitByPostTag","parseAlgoliaHit","hit","Error","highlightObject","getPropertyByPath","highlightProperty","attribute","Array","isArray","map","item","unescape"],"mappings":"oHAIAA,IAAMC,EAAkB,CACtBC,gBAAiB,oBACjBC,iBAAkB,sBAYpB,SAASC,oEAAgE,IACvEJ,IAAMK,EAAgBC,EAAiBC,MAAMC,GACvCC,EAAaJ,EAAcK,QAC3BC,EACW,KAAfF,EAAoB,GAAK,CAAC,CAAEG,MAAOH,EAAYI,eAAe,IAEhE,GAAIC,IAAYN,EAAQ,CACtBO,IAAIF,GAAgB,EACpBR,EAAcW,iBAAST,GACrBI,EAASM,KAAK,CAAEL,MAAOL,gBAAOM,IAC9BA,GAAiBA,SAGnBR,EAAcW,iBAAST,GACrBP,IAAMkB,EAAiBX,EAAMA,MAAMO,GAEnCH,EAASM,KAAK,CACZL,MAAOM,EAAe,GACtBL,eAAe,IAGS,KAAtBK,EAAe,IACjBP,EAASM,KAAK,CAIZL,MAA6B,MAAtBM,EAAe,GAAa,KAAOA,EAAe,GACzDL,eAAe,MAMvB,OAAOF,EAmBF,SAASQ,mCACLlB,EAAgBC,gDACfD,EAAgBE,kEAK1B,IAAKiB,EAAK,MAAM,IAAIC,MAAM,gDAE1BrB,IAAMsB,EACJC,EAAkBH,EAAII,GAAoBC,IAAc,GAE1D,OAAIC,MAAMC,QAAQL,GACTA,EAAgBM,aAAKC,UAC1BzB,EAA0B,QACxBI,UACAM,EACAR,iBAAkBwB,EAASD,EAAKjB,WAK/BR,EAA0B,QAC/BI,UACAM,EACAR,iBAAkBwB,EAASR,EAAgBV"}
1
+ {"version":3,"file":"parseAlgoliaHit.js","sources":["../../../../src/util/parseAlgoliaHit.js"],"sourcesContent":["// copied from React InstantSearch\nimport { getPropertyByPath } from 'instantsearch.js/es/lib/utils';\n\nimport { unescape } from '../util/unescape';\n\nconst TAG_PLACEHOLDER = {\n highlightPreTag: '__ais-highlight__',\n highlightPostTag: '__/ais-highlight__',\n};\n\n/**\n * Parses an highlighted attribute into an array of objects with the string value, and\n * a boolean that indicated if this part is highlighted.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightedValue - highlighted attribute as returned by Algolia highlight feature\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nfunction parseHighlightedAttribute({ preTag, postTag, highlightedValue = '' }) {\n const splitByPreTag = highlightedValue.split(preTag);\n const firstValue = splitByPreTag.shift();\n const elements =\n firstValue === '' ? [] : [{ value: firstValue, isHighlighted: false }];\n\n if (postTag === preTag) {\n let isHighlighted = true;\n splitByPreTag.forEach((split) => {\n elements.push({ value: split, isHighlighted });\n isHighlighted = !isHighlighted;\n });\n } else {\n splitByPreTag.forEach((split) => {\n const splitByPostTag = split.split(postTag);\n\n elements.push({\n value: splitByPostTag[0],\n isHighlighted: true,\n });\n\n if (splitByPostTag[1] !== '') {\n elements.push({\n // Vue removes nodes which are just a single space (vuejs/vue#9208),\n // we replace this by two spaces, which does not have an impact,\n // unless someone would have `white-space: pre` on the highlights\n value: splitByPostTag[1] === ' ' ? ' ' : splitByPostTag[1],\n isHighlighted: false,\n });\n }\n });\n }\n\n return elements;\n}\n\n/**\n * Find an highlighted attribute given an `attribute` and an `highlightProperty`, parses it,\n * and provided an array of objects with the string value and a boolean if this\n * value is highlighted.\n *\n * In order to use this feature, highlight must be activated in the configuration of\n * the index. The `preTag` and `postTag` attributes are respectively highlightPreTag and\n * highlightPostTag in Algolia configuration.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightProperty - the property that contains the highlight structure in the results\n * @param {string} attribute - the highlighted attribute to look for\n * @param {object} hit - the actual hit returned by Algolia.\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nexport function parseAlgoliaHit({\n preTag = TAG_PLACEHOLDER.highlightPreTag,\n postTag = TAG_PLACEHOLDER.highlightPostTag,\n highlightProperty,\n attribute,\n hit,\n}) {\n if (!hit) throw new Error('`hit`, the matching record, must be provided');\n\n const highlightObject =\n getPropertyByPath(hit[highlightProperty], attribute) || {};\n\n if (Array.isArray(highlightObject)) {\n return highlightObject.map((item) =>\n parseHighlightedAttribute({\n preTag,\n postTag,\n highlightedValue: unescape(item.value),\n })\n );\n }\n\n return parseHighlightedAttribute({\n preTag,\n postTag,\n highlightedValue: unescape(highlightObject.value),\n });\n}\n"],"names":["const","TAG_PLACEHOLDER","highlightPreTag","highlightPostTag","parseHighlightedAttribute","splitByPreTag","highlightedValue","split","preTag","firstValue","shift","elements","value","isHighlighted","postTag","let","forEach","push","splitByPostTag","parseAlgoliaHit","hit","Error","highlightObject","getPropertyByPath","highlightProperty","attribute","Array","isArray","map","item","unescape"],"mappings":"oHAKAA,IAAMC,EAAkB,CACtBC,gBAAiB,oBACjBC,iBAAkB,sBAYpB,SAASC,oEAAgE,IACvEJ,IAAMK,EAAgBC,EAAiBC,MAAMC,GACvCC,EAAaJ,EAAcK,QAC3BC,EACW,KAAfF,EAAoB,GAAK,CAAC,CAAEG,MAAOH,EAAYI,eAAe,IAEhE,GAAIC,IAAYN,EAAQ,CACtBO,IAAIF,GAAgB,EACpBR,EAAcW,iBAAST,GACrBI,EAASM,KAAK,CAAEL,MAAOL,gBAAOM,IAC9BA,GAAiBA,SAGnBR,EAAcW,iBAAST,GACrBP,IAAMkB,EAAiBX,EAAMA,MAAMO,GAEnCH,EAASM,KAAK,CACZL,MAAOM,EAAe,GACtBL,eAAe,IAGS,KAAtBK,EAAe,IACjBP,EAASM,KAAK,CAIZL,MAA6B,MAAtBM,EAAe,GAAa,KAAOA,EAAe,GACzDL,eAAe,MAMvB,OAAOF,EAmBF,SAASQ,mCACLlB,EAAgBC,gDACfD,EAAgBE,kEAK1B,IAAKiB,EAAK,MAAM,IAAIC,MAAM,gDAE1BrB,IAAMsB,EACJC,EAAkBH,EAAII,GAAoBC,IAAc,GAE1D,OAAIC,MAAMC,QAAQL,GACTA,EAAgBM,aAAKC,UAC1BzB,EAA0B,QACxBI,UACAM,EACAR,iBAAkBwB,EAASD,EAAKjB,WAK/BR,EAA0B,QAC/BI,UACAM,EACAR,iBAAkBwB,EAASR,EAAgBV"}