@stacksjs/search-engine 0.75.70 → 0.75.71

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 (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -2,4 +2,4 @@
2
2
  var lt=Object.defineProperty;var gt=(e)=>e;function dt(e,t){this[e]=gt.bind(null,t)}var E=(e,t)=>{for(var n in t)lt(e,n,{get:t[n],enumerable:!0,configurable:!0,set:dt.bind(t,n)})};var R=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(r){n=[r]}if(n)throw n[0];return t};var Ue={};E(Ue,{algolia:()=>Ne,browse:()=>Ce,clearObjects:()=>we,clearRules:()=>Me,clearSynonyms:()=>ve,configure:()=>de,copyIndex:()=>Re,default:()=>Le,deleteBy:()=>Te,deleteIndex:()=>De,deleteObject:()=>he,deleteObjects:()=>Ae,getObject:()=>Pe,getObjects:()=>Se,getSettings:()=>xe,indexExists:()=>Ie,listIndices:()=>Ee,moveIndex:()=>$e,multiSearch:()=>ye,partialUpdateObject:()=>be,saveObject:()=>fe,saveObjects:()=>me,saveRule:()=>je,saveSynonym:()=>qe,search:()=>pe,searchRules:()=>Fe,searchSynonyms:()=>_e,setSettings:()=>ke,waitTask:()=>Oe});import{searchEngine as le}from"@stacksjs/config";import{log as Ft}from"@stacksjs/logging";function ge(){if(!I){let e=le.algolia?.appId||process.env.ALGOLIA_APP_ID||"",t=le.algolia?.apiKey||process.env.ALGOLIA_API_KEY||"";if(!e||!t)throw Ft.error("Algolia credentials not configured. Set ALGOLIA_APP_ID and ALGOLIA_API_KEY."),Error("Algolia credentials not configured. Set ALGOLIA_APP_ID and ALGOLIA_API_KEY.");I={appId:e,apiKey:t}}return I}function Mt(){let{appId:e}=ge();return`https://${e}.algolia.net`}function Ct(){let{appId:e,apiKey:t}=ge();return{"X-Algolia-Application-Id":e,"X-Algolia-API-Key":t,"Content-Type":"application/json"}}async function u(e,t,n){let r=await fetch(`${Mt()}${t}`,{method:e,headers:Ct(),body:n?JSON.stringify(n):void 0});if(!r.ok){let i=await r.json().catch(()=>({message:r.statusText}));throw Error(`Algolia API error: ${i.message||r.statusText}`)}return r.json()}function de(e){I=e}async function pe(e,t={}){return u("POST",`/1/indexes/${e}/query`,{query:t.query||"",page:t.page||0,hitsPerPage:t.hitsPerPage||20,filters:t.filters,facets:t.facets,attributesToRetrieve:t.attributesToRetrieve,attributesToHighlight:t.attributesToHighlight,attributesToSnippet:t.attributesToSnippet})}async function ye(e){return u("POST","/1/indexes/*/queries",{requests:e.map((t)=>({indexName:t.indexName,params:new URLSearchParams({query:t.params?.query||"",page:String(t.params?.page||0),hitsPerPage:String(t.params?.hitsPerPage||20),...t.params?.filters&&{filters:t.params.filters}}).toString()}))})}async function fe(e,t,n){if(n)return u("PUT",`/1/indexes/${e}/${n}`,t);return u("POST",`/1/indexes/${e}`,t)}async function me(e,t){return u("POST",`/1/indexes/${e}/batch`,{requests:t.map((n)=>({action:n.objectID?"updateObject":"addObject",body:n}))})}async function be(e,t,n,r=!0){return u("POST",`/1/indexes/${e}/${t}/partial${r?"":"?createIfNotExists=false"}`,n)}async function he(e,t){return u("DELETE",`/1/indexes/${e}/${t}`)}async function Ae(e,t){return u("POST",`/1/indexes/${e}/batch`,{requests:t.map((n)=>({action:"deleteObject",body:{objectID:n}}))})}async function Te(e,t){return u("POST",`/1/indexes/${e}/deleteByQuery`,{filters:t})}async function Pe(e,t,n){let r=n?`?attributesToRetrieve=${n.join(",")}`:"";return u("GET",`/1/indexes/${e}/${t}${r}`)}async function Se(e,t,n){return u("POST","/1/indexes/*/objects",{requests:t.map((r)=>({indexName:e,objectID:r,attributesToRetrieve:n}))})}async function we(e){return u("POST",`/1/indexes/${e}/clear`)}async function xe(e){return u("GET",`/1/indexes/${e}/settings`)}async function ke(e,t,n=!1){return u("PUT",`/1/indexes/${e}/settings${n?"?forwardToReplicas=true":""}`,t)}async function Ee(){return u("GET","/1/indexes")}async function Re(e,t,n){return u("POST",`/1/indexes/${e}/operation`,{operation:"copy",destination:t,scope:n})}async function $e(e,t){return u("POST",`/1/indexes/${e}/operation`,{operation:"move",destination:t})}async function De(e){return u("DELETE",`/1/indexes/${e}`)}async function Ie(e){try{return await u("GET",`/1/indexes/${e}/settings`),!0}catch{return!1}}async function Oe(e,t,n=1e4,r=100){let i=Date.now();while(Date.now()-i<n){let o=await u("GET",`/1/indexes/${e}/task/${t}`);if(o.status==="published")return o;await new Promise((a)=>setTimeout(a,r))}throw Error(`Task ${t} timed out after ${n}ms`)}async function qe(e,t,n=!1){return u("PUT",`/1/indexes/${e}/synonyms/${t.objectID}${n?"?forwardToReplicas=true":""}`,t)}async function _e(e,t="",n,r=0,i=20){return u("POST",`/1/indexes/${e}/synonyms/search`,{query:t,type:n,page:r,hitsPerPage:i})}async function ve(e,t=!1){return u("POST",`/1/indexes/${e}/synonyms/clear${t?"?forwardToReplicas=true":""}`)}async function je(e,t,n=!1){return u("PUT",`/1/indexes/${e}/rules/${t.objectID}${n?"?forwardToReplicas=true":""}`,t)}async function Fe(e,t="",n,r,i=0,o=20){return u("POST",`/1/indexes/${e}/rules/search`,{query:t,anchoring:n,context:r,page:i,hitsPerPage:o})}async function Me(e,t=!1){return u("POST",`/1/indexes/${e}/rules/clear${t?"?forwardToReplicas=true":""}`)}async function*Ce(e,t={}){let n;do{let r=await u("POST",`/1/indexes/${e}/browse`,{...t,cursor:n});for(let i of r.hits)yield i;n=r.cursor}while(n)}var I=null,Ne,Le;var U=R(()=>{Ne={configure:de,search:pe,multiSearch:ye,saveObject:fe,saveObjects:me,partialUpdateObject:be,deleteObject:he,deleteObjects:Ae,deleteBy:Te,getObject:Pe,getObjects:Se,clearObjects:we,getSettings:xe,setSettings:ke,listIndices:Ee,copyIndex:Re,moveIndex:$e,deleteIndex:De,indexExists:Ie,waitTask:Oe,saveSynonym:qe,searchSynonyms:_e,clearSynonyms:ve,saveRule:je,searchRules:Fe,clearRules:Me,browse:Ce},Le=Ne});var Ke={};E(Ke,{default:()=>ze});import{searchEngine as Nt}from"@stacksjs/config";function V(){let e=Nt.opensearch,t=String(e?.host||"localhost").replace(/\/+$/,""),n=/^https?:\/\//i.test(t),r=String(e?.protocol||"http").replace(/:$/,""),i=Number(e?.port||9200),o=`${r}://${t}${i?`:${i}`:""}`;if(n){let a=new URL(t);if(!a.port&&e?.port)a.port=String(e.port);o=a.toString().replace(/\/+$/,"")}return{baseUrl:o,auth:String(e?.auth||"")}}function Ut(e="application/json"){let{auth:t}=V();return{"Content-Type":e,...t?{Authorization:`Basic ${btoa(t)}`}:{}}}async function f(e,t,n,r){let{baseUrl:i}=V(),o=await fetch(`${i}${t}`,{method:e,headers:Ut(r),body:n===void 0?void 0:typeof n==="string"?n:JSON.stringify(n)});if(!o.ok){let d=await o.text();throw new q(o.status,e,t,d||o.statusText)}let a=await o.text();return a?JSON.parse(a):{}}function m(e){return`/${encodeURIComponent(e)}`}function T(e,t){return{taskUid:Date.now(),indexUid:e,status:"succeeded",type:t,enqueuedAt:new Date().toISOString()}}async function Z(e){return(await f("GET",`${m(e)}/_mapping`))[e]?.mappings?._meta?.stacks||{}}async function O(e,t){let n;try{n=await Z(e)}catch(r){if(!(r instanceof q)||r.status!==404)throw r;await f("PUT",m(e)),n={}}return await f("PUT",`${m(e)}/_mapping`,{_meta:{stacks:{...n,...t}}}),T(e,"settingsUpdate")}async function Lt(e,t={}){if(typeof t==="string")t={q:t};let n=String(t.q??t.query??""),r=Math.max(1,Number(t.limit??t.perPage??20)),i=Math.max(0,Number(t.offset??(Number(t.page||1)-1)*r)),o=Array.isArray(t.filter)?t.filter:t.filter?[t.filter]:[],a=n?{multi_match:{query:n,fields:t.attributesToSearchOn||["*"]}}:{match_all:{}},d=o.length>0?{bool:{must:[a],filter:o.map((y)=>({query_string:{query:typeof y==="string"?y:JSON.stringify(y)}}))}}:a,l=await f("POST",`${m(e)}/_search`,{query:d,from:i,size:r,...t.sort?{sort:t.sort}:{},...t.attributesToRetrieve?{_source:t.attributesToRetrieve}:{}}),c=typeof l.hits?.total==="number"?l.hits.total:Number(l.hits?.total?.value||0);return{hits:(l.hits?.hits||[]).map((y)=>({id:y._source?.id??y._id,...y._source})),estimatedTotalHits:c,processingTimeMs:Number(l.took||0),query:n,limit:r,offset:i}}async function Ht(e,t={}){return await f("PUT",m(e),t),T(e,"indexCreation")}async function Bt(e){return await f("GET",m(e))}async function Gt(e,t){return await f("PUT",`${m(e)}/_settings`,t),T(e,"indexUpdate")}async function Kt(e){try{await f("DELETE",m(e))}catch(t){if(!(t instanceof q)||t.status!==404)throw t}return T(e,"indexDeletion")}async function He(){let t=(await f("GET","/_cat/indices?format=json")).map((n)=>({uid:n.index,primaryKey:null,createdAt:null,updatedAt:null}));return{results:t,total:t.length,limit:t.length,offset:0}}async function Be(e,t){let n=t?.id??t?.objectID,r=n===void 0||n===null?`${m(e)}/_doc?refresh=wait_for`:`${m(e)}/_doc/${encodeURIComponent(String(n))}?refresh=wait_for`;return await f(n===void 0||n===null?"POST":"PUT",r,t),T(e,"documentAdditionOrUpdate")}async function Ge(e,t){if(!Array.isArray(t))throw TypeError("[search/opensearch] addDocuments requires an array of documents");if(t.length===0)return T(e,"documentAdditionOrUpdate");let n=t.flatMap((i)=>{let o=i?.id??i?.objectID;return[JSON.stringify({index:{_index:e,...o===void 0||o===null?{}:{_id:o}}}),JSON.stringify(i)]}),r=await f("POST","/_bulk?refresh=wait_for",`${n.join(`
3
3
  `)}
4
4
  `,"application/x-ndjson");if(r.errors){let i=r.items?.filter((o)=>Number(o.index?.status||0)>=400)||[];throw Error(`[search/opensearch] Bulk indexing failed for ${i.length} document(s)`)}return T(e,"documentAdditionOrUpdate")}async function zt(e,t,n){let r=n?`?_source=${encodeURIComponent(Array.isArray(n)?n.join(","):String(n))}`:"",i=await f("GET",`${m(e)}/_doc/${encodeURIComponent(String(t))}${r}`);return{id:i._source?.id??i._id,...i._source}}async function Wt(e,t){return await f("DELETE",`${m(e)}/_doc/${encodeURIComponent(String(t))}?refresh=wait_for`),T(e,"documentDeletion")}async function Yt(e,t){let n=(Array.isArray(t)?t:[t]).filter(Boolean);return await f("POST",`${m(e)}/_delete_by_query?refresh=true`,{query:n.length>0?{bool:{filter:n.map((r)=>({query_string:{query:r}}))}}:{match_all:{}}}),T(e,"documentDeletion")}function h(e,t){return{get:async(n)=>(await Z(n))[e]??t,update:async(n,r)=>O(n,{[e]:r}),reset:async(n)=>O(n,{[e]:t})}}async function Jt(e){let t=await Z(e);return{filterableAttributes:t.filterableAttributes||[],searchableAttributes:t.searchableAttributes||[],sortableAttributes:t.sortableAttributes||[],displayedAttributes:t.displayedAttributes||[],pagination:t.pagination||{},synonyms:t.synonyms||{},rankingRules:t.rankingRules||[],distinctAttribute:t.distinctAttribute??null,faceting:t.faceting||{},typoTolerance:t.typoTolerance||{},dictionary:t.dictionary||[]}}async function Qt(e,t){let r=Object.fromEntries(["filterableAttributes","searchableAttributes","sortableAttributes","displayedAttributes","pagination","synonyms","rankingRules","distinctAttribute","faceting","typoTolerance","dictionary"].filter((i)=>(i in t)).map((i)=>[i,t[i]]));return await O(e,r)}async function Xt(e){return await O(e,{filterableAttributes:[],searchableAttributes:[],sortableAttributes:[],displayedAttributes:[],pagination:{},synonyms:{},rankingRules:[],distinctAttribute:null,faceting:{},typoTolerance:{},dictionary:[]})}var q,L,H,B,G,K,z,W,Y,J,Q,X,Vt,ze;var ee=R(()=>{q=class q extends Error{status;constructor(e,t,n,r){super(`[search/opensearch] ${t} ${n} failed (${e}): ${r}`);this.status=e}};L=h("filterableAttributes",[]),H=h("searchableAttributes",[]),B=h("sortableAttributes",[]),G=h("displayedAttributes",[]),K=h("pagination",{}),z=h("synonyms",{}),W=h("rankingRules",[]),Y=h("distinctAttribute",null),J=h("faceting",{}),Q=h("typoTolerance",{}),X=h("dictionary",[]);Vt={client:()=>({request:f,configuration:V}),search:Lt,createIndex:Ht,getIndex:Bt,updateIndex:Gt,deleteIndex:Kt,listAllIndexes:He,listAllIndices:He,addDocument:Be,addDocuments:Ge,updateDocument:Be,updateDocuments:Ge,getDocument:zt,deleteDocument:Wt,deleteDocuments:Yt,getFilterableAttributes:L.get,updateFilterableAttributes:L.update,resetFilterableAttributes:L.reset,getSearchableAttributes:H.get,updateSearchableAttributes:H.update,resetSearchableAttributes:H.reset,getSortableAttributes:B.get,updateSortableAttributes:B.update,resetSortableAttributes:B.reset,getDisplayedAttributes:G.get,updateDisplayedAttributes:G.update,resetDisplayedAttributes:G.reset,getSettings:Jt,updateSettings:Qt,resetSettings:Xt,getPagination:K.get,updatePagination:K.update,resetPagination:K.reset,getSynonyms:z.get,updateSynonyms:z.update,resetSynonyms:z.reset,getRankingRules:W.get,updateRankingRules:W.update,resetRankingRules:W.reset,getDistinctAttribute:Y.get,updateDistinctAttribute:Y.update,resetDistinctAttribute:Y.reset,getFaceting:J.get,updateFaceting:J.update,resetFaceting:J.reset,getTypoTolerance:Q.get,updateTypoTolerance:Q.update,resetTypoTolerance:Q.reset,getDictionary:X.get,updateDictionary:X.update,resetDictionary:X.reset},ze=Vt});var rt={};E(rt,{default:()=>it});import{searchEngine as _}from"@stacksjs/config";import{log as Zt}from"@stacksjs/logging";function Qe(){if(!v){let e=_.typesense?.host||process.env.TYPESENSE_HOST||"127.0.0.1",t=_.typesense?.port||Number(process.env.TYPESENSE_PORT||8108),n=_.typesense?.protocol||process.env.TYPESENSE_PROTOCOL||"http",r=_.typesense?.apiKey||process.env.TYPESENSE_API_KEY||"xyz";v={host:e,port:t,protocol:n,apiKey:r}}return v}function Xe(){let{protocol:e,host:t,port:n}=Qe();return`${e}://${t}:${n}`}function Ve(){return{"Content-Type":"application/json","X-TYPESENSE-API-KEY":Qe().apiKey}}function P(e){return{taskUid:0,indexUid:e,status:"succeeded",type:"documentAddition",enqueuedAt:new Date}}async function A(e,t,n){let r=await fetch(`${Xe()}${t}`,{method:e,headers:Ve(),body:n==null?void 0:JSON.stringify(n)});if(!r.ok){let i=await r.text().catch(()=>"");throw Error(`[search/typesense] ${e} ${t} failed (${r.status}): ${i}`)}if(r.status===204)return;return await r.json()}function en(e){if(!e)return;let t=[];for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if(!Ze.test(n))throw Error(`[search/typesense] Refusing to build filter with unsafe field name: ${n}`);let r=e[n];if(r==null||r==="")continue;let i=String(r).replace(/`/g,"\\`");t.push(`${n}:=\`${i}\``)}return t.length?t.join(" && "):void 0}function tn(e){if(!e)return;let t=[];for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if(!Ze.test(n))continue;let r=String(e[n]).toLowerCase()==="desc"?"desc":"asc";t.push(`${n}:${r}`)}return t.length?t.join(","):void 0}function nn(e){if(typeof e==="boolean")return"bool";if(typeof e==="number")return Number.isInteger(e)?"int64":"float";if(Array.isArray(e)){let t=e[0];if(typeof t==="boolean")return"bool[]";if(typeof t==="number")return Number.isInteger(t)?"int64[]":"float[]";return"string[]"}return"string"}async function j(e,t,n){try{await A("GET",`/collections/${e}`);return}catch{}if(!t)return;let r=new Set(["id"]),i=n?.searchableAttributes??[],o=n?.filterableAttributes??[],a=n?.sortableAttributes??[],d=n?.displayedAttributes??[];for(let c of[...i,...o,...a,...d])if(typeof c==="string")r.add(c);else for(let b of c.attributePatterns)r.add(b);if(t){for(let c of Object.keys(t))r.add(c);for(let c of r)if(t[c]===void 0)t[c]=""}let l=[...r].map((c)=>({name:c,type:c==="id"?"string":nn(t[c]),facet:o.includes(c),sort:a.includes(c),optional:c!=="id"}));await A("POST","/collections",{name:e,fields:l})}function te(e){let t={};for(let[n,r]of Object.entries(e)){if(r==null)continue;if(n==="id"||typeof r==="bigint")t[n]=String(r);else t[n]=r}if(e.id!=null&&t.id==null)t.id=String(e.id);return t}async function rn(e,t){let n=Number(t.page)||1,r=Number(t.perPage)||20,i=(n-1)*r,o=t.filter_by||en(t.filter),a=tn(t.sort),d=t.queryBy?.join(",")||t.query_by;if(!d)throw Error(`[search/typesense] search on "${e}" needs fields to search by. Pass \`query_by\`, or declare \`searchable\` on the model's \`useSearch\` trait so it can be supplied for you.`);let l=t.query??t.q,c=l==null||l===""?"*":String(l),b=new URLSearchParams({q:c,query_by:d,per_page:String(r),page:String(n)});if(o)b.set("filter_by",o);if(a)b.set("sort_by",a);let y=await A("GET",`/collections/${e}/documents/search?${b}`),S=(y.hits??[]).map((x)=>x.document);return{hits:S,query:c,processingTimeMs:y.search_time_ms??0,limit:r,offset:i,estimatedTotalHits:y.found??S.length}}async function We(e,t){let n=te(t);return await j(e,n),await A("POST",`/collections/${e}/documents?action=upsert`,n),P(e)}async function Ye(e,t){if(!Array.isArray(t)||t.length===0)return P(e);let n=t.map(te);await j(e,n[0]);let r=n.map((o)=>JSON.stringify(o)).join(`
5
- `),i=await fetch(`${Xe()}/collections/${e}/documents/import?action=upsert`,{method:"POST",headers:{...Ve(),"Content-Type":"text/plain"},body:r});if(!i.ok){let o=await i.text().catch(()=>"");throw Error(`[search/typesense] bulk import failed (${i.status}): ${o}`)}return P(e)}async function sn(e,t){return await A("DELETE",`/collections/${e}/documents/${String(t)}`),P(e)}async function Je(e){try{await A("DELETE",`/collections/${e}`)}catch(t){Zt.debug(`[search/typesense] deleteIndex ${e}: ${t.message}`)}return P(e)}async function on(e,t){let n=t?.sampleDocument;return await j(e,n?te(n):void 0,t?.settings),P(e)}async function an(e){return await A("GET",`/collections/${e}`)}async function cn(e,t){return await j(e,void 0,t),P(e)}async function ne(e){return((await A("GET",`/collections/${e}`)).fields??[]).map((n)=>n.name).filter((n)=>n!=="id")}async function et(e){return((await A("GET",`/collections/${e}`)).fields??[]).filter((n)=>n.facet).map((n)=>n.name)}async function tt(e){return((await A("GET",`/collections/${e}`)).fields??[]).map((n)=>n.name)}async function nt(e){return ne(e)}async function un(e){return{searchableAttributes:await ne(e),filterableAttributes:await et(e),sortableAttributes:await tt(e),displayedAttributes:await nt(e)}}function g(e,t){return Promise.resolve(P("typesense"))}var v=null,Ze,ln,it;var re=R(()=>{Ze=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;ln={client:()=>({}),resetClient:()=>{v=null},search:rn,getIndex:an,createIndex:on,deleteIndex:Je,updateIndex:g,listAllIndexes:async()=>({results:[]}),listAllIndices:async()=>({results:[]}),addDocument:We,addDocuments:Ye,updateDocument:(e,t)=>We(e,t),updateDocuments:(e,t)=>Ye(e,t),deleteDocument:sn,deleteDocuments:async(e)=>Je(e),getDocument:async()=>P("typesense"),getFilterableAttributes:et,updateFilterableAttributes:g,resetFilterableAttributes:g,updateDisplayedAttributes:g,resetDisplayedAttributes:g,getDisplayedAttributes:nt,updateSearchableAttributes:g,resetSearchableAttributes:g,getSearchableAttributes:ne,updateSortableAttributes:g,resetSortableAttributes:g,getSortableAttributes:tt,getSettings:un,updateSettings:cn,resetSettings:g,getPagination:async()=>({}),updatePagination:g,resetPagination:g,getSynonyms:async()=>({}),updateSynonyms:g,resetSynonyms:g,getRankingRules:async()=>[],updateRankingRules:g,resetRankingRules:g,getDistinctAttribute:async()=>null,updateDistinctAttribute:g,resetDistinctAttribute:g,getFaceting:async()=>({}),updateFaceting:g,resetFaceting:g,getTypoTolerance:async()=>({}),updateTypoTolerance:g,resetTypoTolerance:g,getDictionary:async()=>({}),updateDictionary:g,resetDictionary:g},it=ln});var at={};E(at,{default:()=>ct});import{searchEngine as st}from"@stacksjs/config";function s(){if(!ie)throw Error("The `meilisearch` search driver is selected but the `meilisearch` package is not installed. It is an opt-in dependency - run `bun add meilisearch` to enable it, or switch drivers in `config/search-engine.ts`.");if(!F){let e=st.meilisearch?.host||"http://127.0.0.1:7700",t=st.meilisearch?.apiKey||"";if(!e)throw Error("Meilisearch host is not configured. Please specify a search engine host.");F=new ie({host:e,apiKey:t})}return F}function gn(){F=null}async function dn(e,t){let n=Number(t.page)||1,r=Number(t.perPage)||20,i=(n-1)*r,o=ar(t.filter),a=cr(t.sort);return await s().index(e).search(t.query,{limit:r,filter:o,sort:a,offset:i})}async function pn(e,t){return await s().index(e).addDocuments([t])}async function yn(e,t){if(!Array.isArray(t))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(t.length<=1000)return await s().index(e).addDocuments(t);let r;for(let i=0;i<t.length;i+=1000){let o=t.slice(i,i+1000),a=await s().index(e).addDocuments(o);if(!r)r=a}return r}async function fn(e){return await s().getIndex(e)}async function mn(e,t){return await s().createIndex(e,t)}async function bn(e,t){return await s().updateIndex(e,t)}async function hn(e,t){return await s().index(e).updateDocuments([t])}async function An(e,t){return await s().index(e).updateDocuments(t)}async function Tn(e,t){return await s().index(e).deleteDocument(t)}async function Pn(e,t){return await s().index(e).deleteDocuments({filter:t})}async function Sn(e,t,n){return await s().index(e).getDocument(t,n)}async function wn(e){return await s().deleteIndex(e)}async function ot(){return await s().getIndexes()}async function xn(e){return(await s().index(e).getFilterableAttributes()??[]).filter((n)=>typeof n==="string")}async function kn(e,t){return s().index(e).updateFilterableAttributes(t)}async function En(e){return s().index(e).resetFilterableAttributes()}async function Rn(e,t){return s().index(e).updateSearchableAttributes(t)}async function $n(e){return s().index(e).resetSearchableAttributes()}async function Dn(e){return s().index(e).getSearchableAttributes()}async function In(e,t){return s().index(e).updateSortableAttributes(t)}async function On(e){return s().index(e).resetSortableAttributes()}async function qn(e){return s().index(e).getSortableAttributes()}async function _n(e,t){return s().index(e).updateDisplayedAttributes(t)}async function vn(e){return s().index(e).getDisplayedAttributes()}async function jn(e){return s().index(e).resetDisplayedAttributes()}async function Fn(e){return s().index(e).getSettings()}async function Mn(e,t){return s().index(e).updateSettings(t)}async function Cn(e){return s().index(e).resetSettings()}async function Nn(e){return s().index(e).getPagination()}async function Un(e,t){return s().index(e).updatePagination(t)}async function Ln(e){return s().index(e).resetPagination()}async function Hn(e){return s().index(e).getSynonyms()}async function Bn(e,t){return s().index(e).updateSynonyms(t)}async function Gn(e){return s().index(e).resetSynonyms()}async function Kn(e){return s().index(e).getRankingRules()}async function zn(e,t){return s().index(e).updateRankingRules(t)}async function Wn(e){return s().index(e).resetRankingRules()}async function Yn(e){return s().index(e).getDistinctAttribute()}async function Jn(e,t){return s().index(e).updateDistinctAttribute(t)}async function Qn(e){return s().index(e).resetDistinctAttribute()}async function Xn(e){return s().index(e).getFaceting()}async function Vn(e,t){return s().index(e).updateFaceting(t)}async function Zn(e){return s().index(e).resetFaceting()}async function er(e){return s().index(e).getTypoTolerance()}async function tr(e,t){return s().index(e).updateTypoTolerance(t)}async function nr(e){return s().index(e).resetTypoTolerance()}async function rr(e){return s().index(e).getDictionary()}async function ir(e,t){return s().index(e).updateDictionary(t)}async function sr(e){return s().index(e).resetDictionary()}function ar(e){if(!e)return[];let t=[];for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if(!or.test(n))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${n}`);let r=e[n],i=String(r).replace(/'/g,"\\'");t.push(`${n}='${i}'`)}return t}function cr(e){if(!e)return[];let t=[];for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=String(e[n]).toLowerCase()==="desc"?"desc":"asc";t.push(`${n}:${i}`)}return t}var ie,F=null,or,ur,ct;var se=R(async()=>{try{({Meilisearch:ie}=await import("meilisearch"))}catch{}or=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;ur={client:s,resetClient:gn,search:dn,getIndex:fn,createIndex:mn,deleteIndex:wn,updateIndex:bn,listAllIndexes:ot,listAllIndices:ot,addDocument:pn,addDocuments:yn,updateDocument:hn,updateDocuments:An,deleteDocument:Tn,deleteDocuments:Pn,getDocument:Sn,getFilterableAttributes:xn,updateFilterableAttributes:kn,resetFilterableAttributes:En,updateDisplayedAttributes:_n,resetDisplayedAttributes:jn,getDisplayedAttributes:vn,updateSearchableAttributes:Rn,resetSearchableAttributes:$n,getSearchableAttributes:Dn,updateSortableAttributes:In,resetSortableAttributes:On,getSortableAttributes:qn,getSettings:Fn,updateSettings:Mn,resetSettings:Cn,getPagination:Nn,updatePagination:Un,resetPagination:Ln,getSynonyms:Hn,updateSynonyms:Bn,resetSynonyms:Gn,getRankingRules:Kn,updateRankingRules:zn,resetRankingRules:Wn,getDistinctAttribute:Yn,updateDistinctAttribute:Jn,resetDistinctAttribute:Qn,getFaceting:Xn,updateFaceting:Vn,resetFaceting:Zn,getTypoTolerance:er,updateTypoTolerance:tr,resetTypoTolerance:nr,getDictionary:rr,updateDictionary:ir,resetDictionary:sr},ct=ur});import{overridesReady as lr,searchEngine as gr}from"@stacksjs/config";import{err as pt,ok as yt}from"@stacksjs/error-handling";import{log as w}from"@stacksjs/logging";import{getModelName as ft,getTableName as mt}from"@stacksjs/orm";import{path as ae}from"@stacksjs/path";import{useSearchEngine as bt}from"@stacksjs/search-engine";import{globSync as ht}from"@stacksjs/storage";import{snakeCase as D}from"@stacksjs/strings";async function Pr(e){try{let t=ht([ae.userModelsPath("*.ts"),ae.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:n,updateSettings:r}=bt();for(let i of t){let o=(await import(i)).default,a=o.traits?.useSearch,d=mt(o,i),l=ft(o,i);if(e&&l!==e)continue;if(a&&(typeof a==="boolean"||typeof a==="object")){if(typeof a==="object")await r(d,{searchableAttributes:(a.searchable??[]).map((p)=>D(p)),filterableAttributes:(a.filterable??[]).map((p)=>D(p)),sortableAttributes:(a.sortable??[]).map((p)=>D(p)),displayedAttributes:(a.displayable??[]).map((p)=>D(p))});let c=o;if(typeof c.all!=="function"){w.warn(`[search] ${l}: model has no .all() - run generate:model-files or use defineModel`);continue}let b=c.makeAllSearchable;if(typeof b==="function"){let p=await b.call(c);w.info(`[search] ${l}: imported ${p}, skipped 0`);continue}let y=typeof a==="object"?a.denormalize:void 0,S=y?Array.from(new Set(Object.values(y).map((p)=>p.split(".")[0]).filter((p)=>Boolean(p)))):[],x;if(S.length>0&&typeof c.query==="function")try{x=await c.query().with(...S).get()}catch(p){w.warn(`[search] ${l}: eager-load of [${S.join(", ")}] failed - falling back to .all(); denormalized fields will be null. (${p.message})`),x=await c.all()}else x=await c.all();let oe=0,C=0;for(let p of x)try{let k=p.toSearchableObject?.();if(k==null){C++;continue}await n(d,k),oe++}catch(k){C++,w.warn(`[search] Skipped ${l}#${p.id??"?"}: ${k.message}`)}w.info(`[search] ${l}: imported ${oe}, skipped ${C}`)}}return w.info(e),yt("Successfully imported models to search engine!")}catch(t){return w.error(t),pt(t?.message||String(t))}}import{ok as At}from"@stacksjs/error-handling";import{log as Tt}from"@stacksjs/logging";import{getModelName as Pt,getTableName as St}from"@stacksjs/orm";import{path as ce}from"@stacksjs/path";import{useSearchEngine as wt}from"@stacksjs/search-engine";import{globSync as xt}from"@stacksjs/storage";async function Dr(e){try{let t=xt([ce.userModelsPath("*.ts"),ce.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:n}=wt();for(let r of t){let i=(await import(r)).default,o=i.traits?.useSearch,a=St(i,r),d=Pt(i,r);if(e&&d!==e)continue;if(o&&(typeof o==="boolean"||typeof o==="object"))await n(a)}return At("Successfully flushed all model data from search engine!")}catch(t){return Tt.error(t),t(t)}}import{ok as kt}from"@stacksjs/error-handling";import{log as Et}from"@stacksjs/logging";import{getTableName as Rt}from"@stacksjs/orm";import{path as $t}from"@stacksjs/path";import{useSearchEngine as Dt}from"@stacksjs/search-engine";async function Fr(e){try{let t=$t.userModelsPath(`${e}.ts`),n=(await import(t)).default,{getFilterableAttributes:r,getSortableAttributes:i,getSearchableAttributes:o,getDisplayedAttributes:a}=Dt(),d=n.traits?.useSearch,l=Rt(n,t);if(d&&typeof d==="object"){let c=await a(l),b=await r(l),y=await i(l),S=await o(l);console.table({displayedAttributes:c,filterableAttributes:b,sortableAttributes:y,searchableAttributes:S})}return kt("Successfully update index settings!")}catch(t){return Et.error(t),t(t)}}import{err as It,ok as Ot}from"@stacksjs/error-handling";import{log as qt}from"@stacksjs/logging";import{getTableName as _t}from"@stacksjs/orm";import{path as ue}from"@stacksjs/path";import{useSearchEngine as vt}from"@stacksjs/search-engine";import{globSync as jt}from"@stacksjs/storage";import{snakeCase as N}from"@stacksjs/strings";async function Kr(){try{let e=jt([ue.userModelsPath("*.ts"),ue.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:t}=vt();for(let n of e){let r=(await import(n)).default,i=r.traits?.useSearch,o=_t(r,n);if(i&&typeof i==="object"){let a=(typeof r.traits?.useSearch==="object"&&r.traits?.useSearch.filterable||[]).map((c)=>N(c)),d=(typeof r.traits?.useSearch==="object"&&r.traits?.useSearch.sortable||[]).map((c)=>N(c)),l=(typeof r.traits?.useSearch==="object"&&r.traits?.useSearch.searchable||[]).map((c)=>N(c));await t(o,{filterableAttributes:a,sortableAttributes:d,searchableAttributes:l})}}return Ot("Successfully update index settings!")}catch(e){return qt.error(e),It(e?.message||String(e))}}function dr(e){if(e==="algolia")return Promise.resolve().then(() => (U(),Ue));if(e==="opensearch")return Promise.resolve().then(() => (ee(),Ke));if(e==="typesense")return Promise.resolve().then(() => (re(),rt));return se().then(() => at)}var M,ut=(async()=>(await lr,M=(await dr(gr.driver)).default,M))();function ei(){return new Proxy({},{get(e,t){if(M)return Reflect.get(M,t);return(...n)=>ut.then((r)=>{let i=Reflect.get(r,t);return typeof i==="function"?i.apply(r,n):i})}})}function ti(){return ut}function ni(){return Promise.resolve().then(() => (U(),{})).then((e)=>Le)}function ri(){return se().then(() => ({})).then((e)=>ct)}function ii(){return Promise.resolve().then(() => (ee(),{})).then((e)=>ze)}function si(){return Promise.resolve().then(() => (re(),{})).then((e)=>it)}export{Dr as flushModelDocuments,Pr as importModelDocuments,Fr as listIndexSettings,ti as searchEngineReady,Kr as updateIndexSettings,ni as useAlgolia,ri as useMeilisearch,ii as useOpensearch,ei as useSearchEngine,si as useTypesense};
5
+ `),i=await fetch(`${Xe()}/collections/${e}/documents/import?action=upsert`,{method:"POST",headers:{...Ve(),"Content-Type":"text/plain"},body:r});if(!i.ok){let o=await i.text().catch(()=>"");throw Error(`[search/typesense] bulk import failed (${i.status}): ${o}`)}return P(e)}async function sn(e,t){return await A("DELETE",`/collections/${e}/documents/${String(t)}`),P(e)}async function Je(e){try{await A("DELETE",`/collections/${e}`)}catch(t){Zt.debug(`[search/typesense] deleteIndex ${e}: ${t.message}`)}return P(e)}async function on(e,t){let n=t?.sampleDocument;return await j(e,n?te(n):void 0,t?.settings),P(e)}async function an(e){return await A("GET",`/collections/${e}`)}async function cn(e,t){return await j(e,void 0,t),P(e)}async function ne(e){return((await A("GET",`/collections/${e}`)).fields??[]).map((n)=>n.name).filter((n)=>n!=="id")}async function et(e){return((await A("GET",`/collections/${e}`)).fields??[]).filter((n)=>n.facet).map((n)=>n.name)}async function tt(e){return((await A("GET",`/collections/${e}`)).fields??[]).map((n)=>n.name)}async function nt(e){return ne(e)}async function un(e){return{searchableAttributes:await ne(e),filterableAttributes:await et(e),sortableAttributes:await tt(e),displayedAttributes:await nt(e)}}function g(e,t){return Promise.resolve(P("typesense"))}var v=null,Ze,ln,it;var re=R(()=>{Ze=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;ln={client:()=>({}),resetClient:()=>{v=null},search:rn,getIndex:an,createIndex:on,deleteIndex:Je,updateIndex:g,listAllIndexes:async()=>({results:[]}),listAllIndices:async()=>({results:[]}),addDocument:We,addDocuments:Ye,updateDocument:(e,t)=>We(e,t),updateDocuments:(e,t)=>Ye(e,t),deleteDocument:sn,deleteDocuments:async(e)=>Je(e),getDocument:async()=>P("typesense"),getFilterableAttributes:et,updateFilterableAttributes:g,resetFilterableAttributes:g,updateDisplayedAttributes:g,resetDisplayedAttributes:g,getDisplayedAttributes:nt,updateSearchableAttributes:g,resetSearchableAttributes:g,getSearchableAttributes:ne,updateSortableAttributes:g,resetSortableAttributes:g,getSortableAttributes:tt,getSettings:un,updateSettings:cn,resetSettings:g,getPagination:async()=>({}),updatePagination:g,resetPagination:g,getSynonyms:async()=>({}),updateSynonyms:g,resetSynonyms:g,getRankingRules:async()=>[],updateRankingRules:g,resetRankingRules:g,getDistinctAttribute:async()=>null,updateDistinctAttribute:g,resetDistinctAttribute:g,getFaceting:async()=>({}),updateFaceting:g,resetFaceting:g,getTypoTolerance:async()=>({}),updateTypoTolerance:g,resetTypoTolerance:g,getDictionary:async()=>({}),updateDictionary:g,resetDictionary:g},it=ln});var at={};E(at,{default:()=>ct});import{searchEngine as st}from"@stacksjs/config";function s(){if(!ie)throw Error("The `meilisearch` search driver is selected but the `meilisearch` package is not installed. It is an opt-in dependency - run `bun add meilisearch` to enable it, or switch drivers in `config/search-engine.ts`.");if(!F){let e=st.meilisearch?.host||"http://127.0.0.1:7700",t=st.meilisearch?.apiKey||"";if(!e)throw Error("Meilisearch host is not configured. Please specify a search engine host.");F=new ie({host:e,apiKey:t})}return F}function gn(){F=null}async function dn(e,t){let n=Number(t.page)||1,r=Number(t.perPage)||20,i=(n-1)*r,o=ar(t.filter),a=cr(t.sort);return await s().index(e).search(t.query,{limit:r,filter:o,sort:a,offset:i})}async function pn(e,t){return await s().index(e).addDocuments([t])}async function yn(e,t){if(!Array.isArray(t))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(t.length<=1000)return await s().index(e).addDocuments(t);let r;for(let i=0;i<t.length;i+=1000){let o=t.slice(i,i+1000),a=await s().index(e).addDocuments(o);if(!r)r=a}return r}async function fn(e){return await s().getIndex(e)}async function mn(e,t){return await s().createIndex(e,t)}async function bn(e,t){return await s().updateIndex(e,t)}async function hn(e,t){return await s().index(e).updateDocuments([t])}async function An(e,t){return await s().index(e).updateDocuments(t)}async function Tn(e,t){return await s().index(e).deleteDocument(t)}async function Pn(e,t){return await s().index(e).deleteDocuments({filter:t})}async function Sn(e,t,n){return await s().index(e).getDocument(t,n)}async function wn(e){return await s().deleteIndex(e)}async function ot(){return await s().getIndexes()}async function xn(e){return(await s().index(e).getFilterableAttributes()??[]).filter((n)=>typeof n==="string")}async function kn(e,t){return s().index(e).updateFilterableAttributes(t)}async function En(e){return s().index(e).resetFilterableAttributes()}async function Rn(e,t){return s().index(e).updateSearchableAttributes(t)}async function $n(e){return s().index(e).resetSearchableAttributes()}async function Dn(e){return s().index(e).getSearchableAttributes()}async function In(e,t){return s().index(e).updateSortableAttributes(t)}async function On(e){return s().index(e).resetSortableAttributes()}async function qn(e){return s().index(e).getSortableAttributes()}async function _n(e,t){return s().index(e).updateDisplayedAttributes(t)}async function vn(e){return s().index(e).getDisplayedAttributes()}async function jn(e){return s().index(e).resetDisplayedAttributes()}async function Fn(e){return s().index(e).getSettings()}async function Mn(e,t){return s().index(e).updateSettings(t)}async function Cn(e){return s().index(e).resetSettings()}async function Nn(e){return s().index(e).getPagination()}async function Un(e,t){return s().index(e).updatePagination(t)}async function Ln(e){return s().index(e).resetPagination()}async function Hn(e){return s().index(e).getSynonyms()}async function Bn(e,t){return s().index(e).updateSynonyms(t)}async function Gn(e){return s().index(e).resetSynonyms()}async function Kn(e){return s().index(e).getRankingRules()}async function zn(e,t){return s().index(e).updateRankingRules(t)}async function Wn(e){return s().index(e).resetRankingRules()}async function Yn(e){return s().index(e).getDistinctAttribute()}async function Jn(e,t){return s().index(e).updateDistinctAttribute(t)}async function Qn(e){return s().index(e).resetDistinctAttribute()}async function Xn(e){return s().index(e).getFaceting()}async function Vn(e,t){return s().index(e).updateFaceting(t)}async function Zn(e){return s().index(e).resetFaceting()}async function er(e){return s().index(e).getTypoTolerance()}async function tr(e,t){return s().index(e).updateTypoTolerance(t)}async function nr(e){return s().index(e).resetTypoTolerance()}async function rr(e){return s().index(e).getDictionary()}async function ir(e,t){return s().index(e).updateDictionary(t)}async function sr(e){return s().index(e).resetDictionary()}function ar(e){if(!e)return[];let t=[];for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if(!or.test(n))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${n}`);let r=e[n],i=String(r).replace(/'/g,"\\'");t.push(`${n}='${i}'`)}return t}function cr(e){if(!e)return[];let t=[];for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=String(e[n]).toLowerCase()==="desc"?"desc":"asc";t.push(`${n}:${i}`)}return t}var ie,F=null,or,ur,ct;var se=R(async()=>{try{({Meilisearch:ie}=await import("meilisearch"))}catch{}or=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;ur={client:s,resetClient:gn,search:dn,getIndex:fn,createIndex:mn,deleteIndex:wn,updateIndex:bn,listAllIndexes:ot,listAllIndices:ot,addDocument:pn,addDocuments:yn,updateDocument:hn,updateDocuments:An,deleteDocument:Tn,deleteDocuments:Pn,getDocument:Sn,getFilterableAttributes:xn,updateFilterableAttributes:kn,resetFilterableAttributes:En,updateDisplayedAttributes:_n,resetDisplayedAttributes:jn,getDisplayedAttributes:vn,updateSearchableAttributes:Rn,resetSearchableAttributes:$n,getSearchableAttributes:Dn,updateSortableAttributes:In,resetSortableAttributes:On,getSortableAttributes:qn,getSettings:Fn,updateSettings:Mn,resetSettings:Cn,getPagination:Nn,updatePagination:Un,resetPagination:Ln,getSynonyms:Hn,updateSynonyms:Bn,resetSynonyms:Gn,getRankingRules:Kn,updateRankingRules:zn,resetRankingRules:Wn,getDistinctAttribute:Yn,updateDistinctAttribute:Jn,resetDistinctAttribute:Qn,getFaceting:Xn,updateFaceting:Vn,resetFaceting:Zn,getTypoTolerance:er,updateTypoTolerance:tr,resetTypoTolerance:nr,getDictionary:rr,updateDictionary:ir,resetDictionary:sr},ct=ur});import{overridesReady as lr,searchEngine as gr}from"@stacksjs/config";import{err as pt,ok as yt}from"@stacksjs/error-handling";import{log as w}from"@stacksjs/logging";import{getModelName as ft,getTableName as mt}from"@stacksjs/orm";import{path as ae}from"@stacksjs/path";import{useSearchEngine as bt}from"@stacksjs/search-engine";import{globSync as ht}from"@stacksjs/storage";import{snakeCase as D}from"@stacksjs/strings";async function Pr(e){try{let t=ht([ae.userModelsPath("*.ts"),ae.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:n,updateSettings:r}=bt();for(let i of t){let o=(await import(i)).default,a=o.traits?.useSearch,d=mt(o,i),l=ft(o,i);if(e&&l!==e)continue;if(a&&(typeof a==="boolean"||typeof a==="object")){if(typeof a==="object")await r(d,{searchableAttributes:(a.searchable??[]).map((p)=>D(p)),filterableAttributes:(a.filterable??[]).map((p)=>D(p)),sortableAttributes:(a.sortable??[]).map((p)=>D(p)),displayedAttributes:(a.displayable??[]).map((p)=>D(p))});let c=o;if(typeof c.all!=="function"){w.warn(`[search] ${l}: model has no .all() - define it with defineModel`);continue}let b=c.makeAllSearchable;if(typeof b==="function"){let p=await b.call(c);w.info(`[search] ${l}: imported ${p}, skipped 0`);continue}let y=typeof a==="object"?a.denormalize:void 0,S=y?Array.from(new Set(Object.values(y).map((p)=>p.split(".")[0]).filter((p)=>Boolean(p)))):[],x;if(S.length>0&&typeof c.query==="function")try{x=await c.query().with(...S).get()}catch(p){w.warn(`[search] ${l}: eager-load of [${S.join(", ")}] failed - falling back to .all(); denormalized fields will be null. (${p.message})`),x=await c.all()}else x=await c.all();let oe=0,C=0;for(let p of x)try{let k=p.toSearchableObject?.();if(k==null){C++;continue}await n(d,k),oe++}catch(k){C++,w.warn(`[search] Skipped ${l}#${p.id??"?"}: ${k.message}`)}w.info(`[search] ${l}: imported ${oe}, skipped ${C}`)}}return w.info(e),yt("Successfully imported models to search engine!")}catch(t){return w.error(t),pt(t?.message||String(t))}}import{ok as At}from"@stacksjs/error-handling";import{log as Tt}from"@stacksjs/logging";import{getModelName as Pt,getTableName as St}from"@stacksjs/orm";import{path as ce}from"@stacksjs/path";import{useSearchEngine as wt}from"@stacksjs/search-engine";import{globSync as xt}from"@stacksjs/storage";async function Dr(e){try{let t=xt([ce.userModelsPath("*.ts"),ce.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:n}=wt();for(let r of t){let i=(await import(r)).default,o=i.traits?.useSearch,a=St(i,r),d=Pt(i,r);if(e&&d!==e)continue;if(o&&(typeof o==="boolean"||typeof o==="object"))await n(a)}return At("Successfully flushed all model data from search engine!")}catch(t){return Tt.error(t),t(t)}}import{ok as kt}from"@stacksjs/error-handling";import{log as Et}from"@stacksjs/logging";import{getTableName as Rt}from"@stacksjs/orm";import{path as $t}from"@stacksjs/path";import{useSearchEngine as Dt}from"@stacksjs/search-engine";async function Fr(e){try{let t=$t.userModelsPath(`${e}.ts`),n=(await import(t)).default,{getFilterableAttributes:r,getSortableAttributes:i,getSearchableAttributes:o,getDisplayedAttributes:a}=Dt(),d=n.traits?.useSearch,l=Rt(n,t);if(d&&typeof d==="object"){let c=await a(l),b=await r(l),y=await i(l),S=await o(l);console.table({displayedAttributes:c,filterableAttributes:b,sortableAttributes:y,searchableAttributes:S})}return kt("Successfully update index settings!")}catch(t){return Et.error(t),t(t)}}import{err as It,ok as Ot}from"@stacksjs/error-handling";import{log as qt}from"@stacksjs/logging";import{getTableName as _t}from"@stacksjs/orm";import{path as ue}from"@stacksjs/path";import{useSearchEngine as vt}from"@stacksjs/search-engine";import{globSync as jt}from"@stacksjs/storage";import{snakeCase as N}from"@stacksjs/strings";async function Kr(){try{let e=jt([ue.userModelsPath("*.ts"),ue.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:t}=vt();for(let n of e){let r=(await import(n)).default,i=r.traits?.useSearch,o=_t(r,n);if(i&&typeof i==="object"){let a=(typeof r.traits?.useSearch==="object"&&r.traits?.useSearch.filterable||[]).map((c)=>N(c)),d=(typeof r.traits?.useSearch==="object"&&r.traits?.useSearch.sortable||[]).map((c)=>N(c)),l=(typeof r.traits?.useSearch==="object"&&r.traits?.useSearch.searchable||[]).map((c)=>N(c));await t(o,{filterableAttributes:a,sortableAttributes:d,searchableAttributes:l})}}return Ot("Successfully update index settings!")}catch(e){return qt.error(e),It(e?.message||String(e))}}function dr(e){if(e==="algolia")return Promise.resolve().then(() => (U(),Ue));if(e==="opensearch")return Promise.resolve().then(() => (ee(),Ke));if(e==="typesense")return Promise.resolve().then(() => (re(),rt));return se().then(() => at)}var M,ut=(async()=>(await lr,M=(await dr(gr.driver)).default,M))();function ei(){return new Proxy({},{get(e,t){if(M)return Reflect.get(M,t);return(...n)=>ut.then((r)=>{let i=Reflect.get(r,t);return typeof i==="function"?i.apply(r,n):i})}})}function ti(){return ut}function ni(){return Promise.resolve().then(() => (U(),{})).then((e)=>Le)}function ri(){return se().then(() => ({})).then((e)=>ct)}function ii(){return Promise.resolve().then(() => (ee(),{})).then((e)=>ze)}function si(){return Promise.resolve().then(() => (re(),{})).then((e)=>it)}export{Dr as flushModelDocuments,Pr as importModelDocuments,Fr as listIndexSettings,ti as searchEngineReady,Kr as updateIndexSettings,ni as useAlgolia,ri as useMeilisearch,ii as useOpensearch,ei as useSearchEngine,si as useTypesense};
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/search-engine",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.75.70",
5
+ "version": "0.75.71",
6
6
  "description": "The Stacks search engine integrations.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -64,13 +64,13 @@
64
64
  "prepublishOnly": "bun run build"
65
65
  },
66
66
  "dependencies": {
67
- "@stacksjs/config": "0.75.70",
68
- "@stacksjs/error-handling": "0.75.70",
69
- "@stacksjs/logging": "0.75.70",
70
- "@stacksjs/orm": "0.75.70",
71
- "@stacksjs/path": "0.75.70",
72
- "@stacksjs/storage": "0.75.70",
73
- "@stacksjs/strings": "0.75.70"
67
+ "@stacksjs/config": "0.75.71",
68
+ "@stacksjs/error-handling": "0.75.71",
69
+ "@stacksjs/logging": "0.75.71",
70
+ "@stacksjs/orm": "0.75.71",
71
+ "@stacksjs/path": "0.75.71",
72
+ "@stacksjs/storage": "0.75.71",
73
+ "@stacksjs/strings": "0.75.71"
74
74
  },
75
75
  "peerDependencies": {
76
76
  "meilisearch": "^0.62.0"