vue-instantsearch-ssr
Version:
👀 Lightning-fast Algolia search for Vue apps
3 lines (2 loc) • 2.72 kB
JavaScript
import{createSSRApp as e}from"vue";import"./vue-compat/index-vue3.js";import{warn as t}from"./warn.js";import n from"instantsearch.js/es/index.js";function r(t,n){void 0===n&&(n={});var r=n.mixins;void 0===r&&(r=[]);var s,i={serverPrefetch:void 0,fetch:void 0,_base:void 0,name:"ais-ssr-root-component"},o=Object.assign({},t.$options,i);return o.mixins=r.concat(o.mixins),s=e(o),t.$router&&s.use(t.$router),t.$store&&s.use(t.$store),s.$slots=t.$slots,s.$root=t.$root,s}function s(e){var s=e.$cloneComponent;void 0===s&&(s=r);var i,o=n(e);return o.findResultsState=function(e){var t,n,r=e.component,a=e.renderToString;if(!a)throw new Error("findResultsState requires `renderToString: (component) => Promise<string>` in the first argument.");return Promise.resolve().then(function(){t=s(r,{mixins:[{beforeCreate:function(){var e=Object.getOwnPropertyDescriptor(this,"$nuxt"),t=!!e&&(e.writable||e.set);r.$nuxt&&t&&(this.$nuxt=r.$nuxt)},created:function(){(n=this.instantsearch).start(),n.started=!1}}]})}).then(function(){return a(t)}).then(function(){return e=n.mainHelper,new Promise(function(t,n){e.searchOnlyWithDerivedHelpers(),e.derivedHelpers[0].on("result",function(){t()}),e.derivedHelpers.forEach(function(e){return e.on("error",function(e){n(e)})})});var e}).then(function(){return i={},function e(t,n){return n(t),t.getWidgets().forEach(function(t){"ais.index"===t.$$type&&(n(t),e(t,n))})}(n.mainIndex,function(e){var t=e.getResults(),n=t._state,r=t._rawResults;i[e.getIndexId()]={state:Object.keys(n).reduce(function(e,t){return e[t]=n[t],e},{}),results:r}}),o.hydrate(i),o.getState()})},o.getState=function(){if(!i)throw new Error("You need to wait for findResultsState to finish");return i},o.__forceRender=function(e,t){var n=t.getResults();if(null!==n){var r=n._state,s=t.getHelper();s.state=r,e.render({helper:s,results:n,scopedResults:t.getScopedResults(),parent:t,state:r,templatesConfig:{},createURL:t.createURL,instantSearchInstance:o,searchMetadata:{isSearchStalled:!1}})}},o.hydrate=function(e){e?(o._initialResults=e,o.start(),o.started=!1):t("The result of `findResultsState()` needs to be passed to `hydrate()`.")},o}function i(e){if(void 0===e&&(e={}),!e.searchClient)throw new Error("The `searchClient` option is required.\n\nSee documentation: https://www.algolia.com/doc/api-reference/widgets/instantsearch/js/");if(!e.indexName)throw new Error("The `indexName` option is required.\n\nSee documentation: https://www.algolia.com/doc/api-reference/widgets/instantsearch/js/");return{provide:function(){return{$_ais_ssrInstantSearchInstance:this.instantsearch}},data:function(){return{instantsearch:s(e)}}}}export{i as createServerRootMixin};
//# sourceMappingURL=createServerRootMixin.js.map