@stacksjs/search-engine 0.75.255 → 0.75.256
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.
- package/dist/index.js +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -3,4 +3,4 @@ var sn=Object.defineProperty;var on=(e)=>e;function an(e,t){this[e]=on.bind(null
|
|
|
3
3
|
`)}
|
|
4
4
|
`,"application/x-ndjson");if(r.errors){let s=r.items?.filter((i)=>Number(i.index?.status||0)>=400)||[];throw Error(`[search/opensearch] Bulk indexing failed for ${s.length} document(s)`)}return E(e,"documentAdditionOrUpdate")}async function pr(e,t,n){let r=n?`?_source=${encodeURIComponent(Array.isArray(n)?n.join(","):String(n))}`:"",s=await b("GET",`${S(e)}/_doc/${encodeURIComponent(String(t))}${r}`);return{id:s._source?.id??s._id,...s._source}}async function yr(e,t){return await b("DELETE",`${S(e)}/_doc/${encodeURIComponent(String(t))}?refresh=wait_for`),E(e,"documentDeletion")}async function fr(e,t){let n=(Array.isArray(t)?t:[t]).filter(Boolean);if(n.length===0)throw Error(`[search/opensearch] deleteDocuments on "${e}" needs a filter. Use deleteAllDocuments to empty the index.`);return await b("POST",`${S(e)}/_delete_by_query?refresh=true`,{query:{bool:{filter:n.map((r)=>({query_string:{query:r}}))}}}),E(e,"documentDeletion")}async function mr(e){try{await b("POST",`${S(e)}/_delete_by_query?refresh=true`,{query:{match_all:{}}})}catch(t){if(!(t instanceof K)||t.status!==404)throw t}return E(e,"documentDeletion")}function w(e,t){return{get:async(n)=>(await Ne(n))[e]??t,update:async(n,r)=>X(n,{[e]:r}),reset:async(n)=>X(n,{[e]:t})}}async function br(e){let t=await Ne(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 hr(e,t){let r=Object.fromEntries(["filterableAttributes","searchableAttributes","sortableAttributes","displayedAttributes","pagination","synonyms","rankingRules","distinctAttribute","faceting","typoTolerance","dictionary"].filter((s)=>(s in t)).map((s)=>[s,t[s]]));return await X(e,r)}async function Sr(e){return await X(e,{filterableAttributes:[],searchableAttributes:[],sortableAttributes:[],displayedAttributes:[],pagination:{},synonyms:{},rankingRules:[],distinctAttribute:null,faceting:{},typoTolerance:{},dictionary:[]})}var K,$e,Oe,qe,Fe,je,_e,ve,Ce,Ue,Me,Le,Ar,Ct;var Be=H(()=>{N();K=class K extends Error{status;constructor(e,t,n,r){super(`[search/opensearch] ${t} ${n} failed (${e}): ${r}`);this.status=e}};$e=w("filterableAttributes",[]),Oe=w("searchableAttributes",[]),qe=w("sortableAttributes",[]),Fe=w("displayedAttributes",[]),je=w("pagination",{}),_e=w("synonyms",{}),ve=w("rankingRules",[]),Ce=w("distinctAttribute",null),Ue=w("faceting",{}),Me=w("typoTolerance",{}),Le=w("dictionary",[]);Ar={client:()=>({request:b,configuration:He}),search:ur,createIndex:cr,getIndex:lr,updateIndex:dr,deleteIndex:gr,listAllIndexes:qt,listAllIndices:qt,addDocument:Ft,addDocuments:jt,updateDocument:Ft,updateDocuments:jt,getDocument:pr,deleteDocument:yr,deleteDocuments:fr,deleteAllDocuments:mr,getFilterableAttributes:$e.get,updateFilterableAttributes:$e.update,resetFilterableAttributes:$e.reset,getSearchableAttributes:Oe.get,updateSearchableAttributes:Oe.update,resetSearchableAttributes:Oe.reset,getSortableAttributes:qe.get,updateSortableAttributes:qe.update,resetSortableAttributes:qe.reset,getDisplayedAttributes:Fe.get,updateDisplayedAttributes:Fe.update,resetDisplayedAttributes:Fe.reset,getSettings:br,updateSettings:hr,resetSettings:Sr,getPagination:je.get,updatePagination:je.update,resetPagination:je.reset,getSynonyms:_e.get,updateSynonyms:_e.update,resetSynonyms:_e.reset,getRankingRules:ve.get,updateRankingRules:ve.update,resetRankingRules:ve.reset,getDistinctAttribute:Ce.get,updateDistinctAttribute:Ce.update,resetDistinctAttribute:Ce.reset,getFaceting:Ue.get,updateFaceting:Ue.update,resetFaceting:Ue.reset,getTypoTolerance:Me.get,updateTypoTolerance:Me.update,resetTypoTolerance:Me.reset,getDictionary:Le.get,updateDictionary:Le.update,resetDictionary:Le.reset},Ct=Ar});var Yt={};J(Yt,{TypesenseImportError:()=>Je,default:()=>Qt});import{searchEngine as G}from"@stacksjs/config";import{log as Tr}from"@stacksjs/logging";function Ht(){if(!te){let e=G.typesense?.host||process.env.TYPESENSE_HOST||"127.0.0.1",t=G.typesense?.port||Number(process.env.TYPESENSE_PORT||8108),n=G.typesense?.protocol||process.env.TYPESENSE_PROTOCOL||"http",r=G.typesense?.apiKey||process.env.TYPESENSE_API_KEY||"xyz";te={host:e,port:t,protocol:n,apiKey:r}}return te}function Nt(){let{protocol:e,host:t,port:n}=Ht();return`${e}://${t}:${n}`}function Bt(){return{"Content-Type":"application/json","X-TYPESENSE-API-KEY":Ht().apiKey}}function P(e){return{taskUid:0,indexUid:e,status:"succeeded",type:"documentAddition",enqueuedAt:new Date}}function Ge(e){return e instanceof Ke&&e.status===404}async function y(e,t,n){let r=await fetch(`${Nt()}${t}`,{method:e,headers:Bt(),body:n==null?void 0:JSON.stringify(n)});if(!r.ok){let s=await r.text().catch(()=>"");throw new Ke(r.status,e,t,s)}if(r.status===204)return;return await r.json()}function m(e){return`/collections/${encodeURIComponent(e)}`}function Wt(e){if(e==null||e==="")return;if(typeof e==="string")return e;if(Array.isArray(e))return e.map((r)=>Array.isArray(r)?`(${r.join(" || ")})`:r).filter(Boolean).join(" && ")||void 0;if(!R(e))throw TypeError(`[search/typesense] Unsupported filter: ${JSON.stringify(e)}`);let t=(r)=>`\`${String(r).replace(/`/g,"\\`")}\``,n=[];for(let[r,s]of Object.entries(e)){if(D("typesense",r),s==null||s==="")continue;n.push(Array.isArray(s)?`${r}:=[${s.map(t).join(",")}]`:`${r}:=${t(s)}`)}return n.length?n.join(" && "):void 0}function wr(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"}function Pr(e,t){let n={...ne.get(e)};for(let[r,s]of Object.entries(t??{}))if(s!==void 0)n[r]=s;return ne.set(e,n),n}function _(e){let t=[];for(let n of e??[])if(typeof n==="string")t.push(n);else t.push(...n.attributePatterns);return t}function kr(e){let t={};for(let n of e)for(let[r,s]of Object.entries(n)){if(s==null)continue;let i=t[r];if(i===void 0||Array.isArray(i)&&i.length===0&&Array.isArray(s)&&s.length>0)t[r]=s}return t}function Kt(e,t,n){let r={name:e,type:e==="id"?"string":wr(t??""),facet:_(n.filterableAttributes).includes(e),optional:e!=="id"};if(_(n.sortableAttributes).includes(e))r.sort=!0;return r}async function xr(e){try{return await y("GET",m(e))}catch(t){if(Ge(t))return;throw t}}function Er(e,t,n){let r={name:e.name,type:e.type,facet:t,optional:e.optional??!0};if(n!==void 0)r.sort=n;if(e.index===!1)r.index=!1;if(e.infix===!0)r.infix=!0;if(typeof e.locale==="string"&&e.locale!=="")r.locale=e.locale;return r}function Rr(e,t,n){let r=[],s=new Set(e.map((c)=>c.name)),i=n.filterableAttributes!=null,o=_(n.filterableAttributes),a=_(n.sortableAttributes);for(let c of e){if(c.name==="id"||c.name.includes("*"))continue;let l=i?o.includes(c.name):Boolean(c.facet),p=a.includes(c.name)?!0:c.sort;if(l!==Boolean(c.facet)||p!==c.sort)r.push({name:c.name,drop:!0},Er(c,l,p))}for(let[c,l]of Object.entries(t)){if(c==="id"||s.has(c))continue;r.push(Kt(c,l,n))}return r}async function re(e,t,n){let r=Pr(e,n),s=kr(t??[]),i=await xr(e);if(i){let a=Rr(i.fields??[],s,r);if(a.length>0)await y("PATCH",m(e),{fields:a});return}if(!t||t.length===0)return;let o=new Set(["id"]);for(let a of[..._(r.searchableAttributes),..._(r.filterableAttributes),..._(r.sortableAttributes),..._(r.displayedAttributes),...Object.keys(s)])o.add(a);await y("POST","/collections",{name:e,fields:[...o].map((a)=>Kt(a,s[a],r))})}function ze(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}function Dr(e){let t=e.queryBy??e.query_by;if(t==null)return;return(Array.isArray(t)?t.join(","):String(t))||void 0}async function Ir(e,t={}){let{query:n,limit:r,offset:s,filter:i,sort:o}=j(t,G.perPage??F),a=t.filter_by||Wt(i),c=t.sort_by||M("typesense",o).join(","),l=Dr(t);if(!l)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 p=n===""?"*":n,f=new URLSearchParams({q:p,query_by:l});if(r>0&&s%r===0)f.set("per_page",String(r)),f.set("page",String(s/r+1));else f.set("offset",String(s)),f.set("limit",String(r));if(a)f.set("filter_by",a);if(c)f.set("sort_by",c);let T=await y("GET",`${m(e)}/documents/search?${f}`),O=(T.hits??[]).map((k)=>k.document);return{hits:O,query:p,processingTimeMs:T.search_time_ms??0,limit:r,offset:s,estimatedTotalHits:T.found??O.length}}async function Ut(e,t){let n=ze(t);return await re(e,[n]),await y("POST",`${m(e)}/documents?action=upsert`,n),P(e)}async function Mt(e,t){if(!Array.isArray(t))throw TypeError("[search/typesense] addDocuments requires an array of documents");if(t.length===0)return P(e);let n=t.map(ze);await re(e,n);let r=n.map((a)=>JSON.stringify(a)).join(`
|
|
5
5
|
`),s=await fetch(`${Nt()}${m(e)}/documents/import?action=upsert`,{method:"POST",headers:{...Bt(),"Content-Type":"text/plain"},body:r}),i=await s.text().catch(()=>"");if(!s.ok)throw Error(`[search/typesense] bulk import failed (${s.status}): ${i}`);let o=[];if(i.split(`
|
|
6
|
-
`).filter((a)=>a.trim()!=="").forEach((a,c)=>{let l;try{l=JSON.parse(a)}catch{l={success:!1,error:a}}if(l.success!==!0)o.push({id:n[c]?.id,error:l.error??"not written"})}),o.length>0)throw new Je(e,o,n.length);return P(e)}async function $r(e,t){return await y("DELETE",`${m(e)}/documents/${encodeURIComponent(String(t))}`),P(e)}async function Or(e,t){let n=Wt(t);if(!n)throw Error(`[search/typesense] deleteDocuments on "${e}" needs a filter. Use deleteAllDocuments to empty the collection.`);return await y("DELETE",`${m(e)}/documents?${new URLSearchParams({filter_by:n})}`),P(e)}async function qr(e){try{await y("DELETE",`${m(e)}/documents?truncate=true`)}catch(t){if(!Ge(t))throw t}return P(e)}async function Fr(e){try{await y("DELETE",m(e))}catch(t){if(!Ge(t))throw t;Tr.debug(`[search/typesense] deleteIndex ${e}: already absent`)}return ne.delete(e),P(e)}async function jr(e,t){let n=t?.sampleDocument;return await re(e,n?[ze(n)]:void 0,t?.settings),P(e)}async function _r(e){return await y("GET",m(e))}async function We(e,t){return await re(e,void 0,t),P(e)}function Z(e){return(t,n)=>We(t,{[e]:n??[]})}async function Ve(e){return((await y("GET",m(e))).fields??[]).map((n)=>n.name).filter((n)=>n!=="id")}async function Gt(e){return((await y("GET",m(e))).fields??[]).filter((n)=>n.facet).map((n)=>n.name)}async function zt(e){return((await y("GET",m(e))).fields??[]).filter((n)=>n.sort).map((n)=>n.name)}async function Jt(e){return Ve(e)}async function vr(e){return{searchableAttributes:await Ve(e),filterableAttributes:await Gt(e),sortableAttributes:await zt(e),displayedAttributes:await Jt(e)}}function g(e,t){throw Error(`[search/typesense] ${e} is not supported by Typesense. ${t}`)}async function Lt(){let t=(await y("GET","/collections")).map((n)=>({...n,uid:n.name,primaryKey:"id"}));return{results:t,offset:0,limit:t.length,total:t.length}}async function Cr(e,t){return await y("GET",`${m(e)}/documents/${encodeURIComponent(String(t))}`)}async function Ur(e){let t=await y("GET",`${m(e)}/synonyms`),n={};for(let r of t.synonyms??[]){if(r.root){n[r.root]=[...n[r.root]??[],...r.synonyms];continue}for(let s of r.synonyms)n[s]=[...n[s]??[],...r.synonyms.filter((i)=>i!==s)]}return n}async function Mr(e,t){await Vt(e);for(let[n,r]of Object.entries(t??{})){if(!r?.length)continue;await y("PUT",`${m(e)}/synonyms/${encodeURIComponent(`stacks-${n}`)}`,{root:n,synonyms:r})}return P(e)}async function Vt(e){let t=await y("GET",`${m(e)}/synonyms`);for(let n of t.synonyms??[])await y("DELETE",`${m(e)}/synonyms/${encodeURIComponent(n.id)}`);return P(e)}var te=null,Ke,ne,Je,h="Typesense takes it per search request, not as an index setting.",ee="Typesense derives it from the collection schema: declare it in the model's useSearch trait.",Lr,Qt;var Ye=H(()=>{N();Ke=class Ke extends Error{status;constructor(e,t,n,r){super(`[search/typesense] ${t} ${n} failed (${e}): ${r}`);this.status=e}};ne=new Map;Je=class Je extends Error{indexName;failures;total;constructor(e,t,n){let r=t.slice(0,5).map((i)=>`#${String(i.id??"?")}: ${i.error}`).join("; "),s=t.length>5?`; and ${t.length-5} more`:"";super(`[search/typesense] import into "${e}" rejected ${t.length} of ${n} document(s): ${r}${s}`);this.indexName=e;this.failures=t;this.total=n}};Lr={client:()=>({}),resetClient:()=>{te=null,ne.clear()},search:Ir,getIndex:_r,createIndex:jr,deleteIndex:Fr,updateIndex:()=>g("updateIndex (changing the primary key)","A Typesense collection's key is always `id`."),listAllIndexes:Lt,listAllIndices:Lt,addDocument:Ut,addDocuments:Mt,updateDocument:(e,t)=>Ut(e,t),updateDocuments:(e,t)=>Mt(e,t),deleteDocument:$r,deleteDocuments:Or,deleteAllDocuments:qr,getDocument:Cr,getFilterableAttributes:Gt,updateFilterableAttributes:Z("filterableAttributes"),resetFilterableAttributes:(e)=>We(e,{filterableAttributes:[]}),updateDisplayedAttributes:Z("displayedAttributes"),resetDisplayedAttributes:()=>g("resetDisplayedAttributes",ee),getDisplayedAttributes:Jt,updateSearchableAttributes:Z("searchableAttributes"),resetSearchableAttributes:()=>g("resetSearchableAttributes",ee),getSearchableAttributes:Ve,updateSortableAttributes:Z("sortableAttributes"),resetSortableAttributes:()=>g("resetSortableAttributes",ee),getSortableAttributes:zt,getSettings:vr,updateSettings:We,resetSettings:()=>g("resetSettings",ee),getPagination:()=>g("Index pagination settings",h),updatePagination:()=>g("Index pagination settings",h),resetPagination:()=>g("Index pagination settings",h),getSynonyms:Ur,updateSynonyms:Mr,resetSynonyms:Vt,getRankingRules:()=>g("Ranking rules",h),updateRankingRules:()=>g("Ranking rules",h),resetRankingRules:()=>g("Ranking rules",h),getDistinctAttribute:()=>g("A distinct attribute",h),updateDistinctAttribute:()=>g("A distinct attribute",h),resetDistinctAttribute:()=>g("A distinct attribute",h),getFaceting:()=>g("Faceting settings",h),updateFaceting:()=>g("Faceting settings",h),resetFaceting:()=>g("Faceting settings",h),getTypoTolerance:()=>g("Typo tolerance settings",h),updateTypoTolerance:()=>g("Typo tolerance settings",h),resetTypoTolerance:()=>g("Typo tolerance settings",h),getDictionary:()=>g("Custom dictionaries","Typesense has no equivalent."),updateDictionary:()=>g("Custom dictionaries","Typesense has no equivalent."),resetDictionary:()=>g("Custom dictionaries","Typesense has no equivalent.")},Qt=Lr});var en={};J(en,{default:()=>tn});import{searchEngine as Qe}from"@stacksjs/config";function u(){if(!Xe)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(!se){let e=Qe.meilisearch?.host||"http://127.0.0.1:7700",t=Qe.meilisearch?.apiKey||"";if(!e)throw Error("Meilisearch host is not configured. Please specify a search engine host.");se=new Xe({host:e,apiKey:t})}return se}function Hr(){se=null}async function Br(e,t={}){let{query:n,limit:r,offset:s,filter:i,sort:o}=j(t,Qe.perPage??F),a={limit:r,offset:s},c=Us(i);if(c!==void 0)a.filter=c;let l=M("meilisearch",o);if(l.length>0)a.sort=l;for(let p of Nr)if(t[p]!==void 0)a[p]=t[p];return await u().index(e).search(n,a)}async function Wr(e,t){return await u().index(e).addDocuments([t])}async function Kr(e,t){if(!Array.isArray(t))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(t.length<=1000)return await u().index(e).addDocuments(t);let r;for(let s=0;s<t.length;s+=1000){let i=t.slice(s,s+1000),o=await u().index(e).addDocuments(i);if(!r)r=o}return r}async function Gr(e){return await u().getIndex(e)}async function zr(e,t){return await u().createIndex(e,t)}async function Jr(e,t){return await u().updateIndex(e,t)}async function Vr(e,t){return await u().index(e).updateDocuments([t])}async function Yr(e,t){return await u().index(e).updateDocuments(t)}async function Qr(e,t){return await u().index(e).deleteDocument(t)}async function Xr(e,t){return await u().index(e).deleteDocuments({filter:t})}async function Zr(e){return await u().index(e).deleteAllDocuments()}async function es(e,t,n){return await u().index(e).getDocument(t,n)}async function ts(e){return await u().deleteIndex(e)}async function Xt(){return await u().getIndexes()}async function ns(e){return(await u().index(e).getFilterableAttributes()??[]).filter((n)=>typeof n==="string")}async function rs(e,t){return u().index(e).updateFilterableAttributes(t)}async function ss(e){return u().index(e).resetFilterableAttributes()}async function is(e,t){return u().index(e).updateSearchableAttributes(t)}async function os(e){return u().index(e).resetSearchableAttributes()}async function as(e){return u().index(e).getSearchableAttributes()}async function us(e,t){return u().index(e).updateSortableAttributes(t)}async function cs(e){return u().index(e).resetSortableAttributes()}async function ls(e){return u().index(e).getSortableAttributes()}async function ds(e,t){return u().index(e).updateDisplayedAttributes(t)}async function gs(e){return u().index(e).getDisplayedAttributes()}async function ps(e){return u().index(e).resetDisplayedAttributes()}async function ys(e){return u().index(e).getSettings()}async function fs(e,t){return u().index(e).updateSettings(t)}async function ms(e){return u().index(e).resetSettings()}async function bs(e){return u().index(e).getPagination()}async function hs(e,t){return u().index(e).updatePagination(t)}async function Ss(e){return u().index(e).resetPagination()}async function As(e){return u().index(e).getSynonyms()}async function Ts(e,t){return u().index(e).updateSynonyms(t)}async function ws(e){return u().index(e).resetSynonyms()}async function Ps(e){return u().index(e).getRankingRules()}async function ks(e,t){return u().index(e).updateRankingRules(t)}async function xs(e){return u().index(e).resetRankingRules()}async function Es(e){return u().index(e).getDistinctAttribute()}async function Rs(e,t){return u().index(e).updateDistinctAttribute(t)}async function Ds(e){return u().index(e).resetDistinctAttribute()}async function Is(e){return u().index(e).getFaceting()}async function $s(e,t){return u().index(e).updateFaceting(t)}async function Os(e){return u().index(e).resetFaceting()}async function qs(e){return u().index(e).getTypoTolerance()}async function Fs(e,t){return u().index(e).updateTypoTolerance(t)}async function js(e){return u().index(e).resetTypoTolerance()}async function _s(e){return u().index(e).getDictionary()}async function vs(e,t){return u().index(e).updateDictionary(t)}async function Cs(e){return u().index(e).resetDictionary()}function Zt(e){return`'${String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function Us(e){if(e==null||e==="")return;if(typeof e==="string"||Array.isArray(e))return e;if(!R(e))throw TypeError(`[search/meilisearch] Unsupported filter: ${JSON.stringify(e)}`);let t=[];for(let[n,r]of Object.entries(e)){if(D("meilisearch",n),r===void 0)continue;if(r===null)t.push(`${n} IS NULL`);else if(Array.isArray(r))t.push(`${n} IN [${r.map(Zt).join(", ")}]`);else t.push(`${n} = ${Zt(r)}`)}return t.length>0?t:void 0}var Xe,se=null,Nr,Ms,tn;var Ze=H(async()=>{N();try{({Meilisearch:Xe}=await import("meilisearch"))}catch{}Nr=["attributesToRetrieve","attributesToHighlight","attributesToCrop","attributesToSearchOn","cropLength","cropMarker","distinct","facets","highlightPreTag","highlightPostTag","matchingStrategy","showMatchesPosition","showRankingScore"];Ms={client:u,resetClient:Hr,search:Br,getIndex:Gr,createIndex:zr,deleteIndex:ts,updateIndex:Jr,listAllIndexes:Xt,listAllIndices:Xt,addDocument:Wr,addDocuments:Kr,updateDocument:Vr,updateDocuments:Yr,deleteDocument:Qr,deleteDocuments:Xr,deleteAllDocuments:Zr,getDocument:es,getFilterableAttributes:ns,updateFilterableAttributes:rs,resetFilterableAttributes:ss,updateDisplayedAttributes:ds,resetDisplayedAttributes:ps,getDisplayedAttributes:gs,updateSearchableAttributes:is,resetSearchableAttributes:os,getSearchableAttributes:as,updateSortableAttributes:us,resetSortableAttributes:cs,getSortableAttributes:ls,getSettings:ys,updateSettings:fs,resetSettings:ms,getPagination:bs,updatePagination:hs,resetPagination:Ss,getSynonyms:As,updateSynonyms:Ts,resetSynonyms:ws,getRankingRules:Ps,updateRankingRules:ks,resetRankingRules:xs,getDistinctAttribute:Es,updateDistinctAttribute:Rs,resetDistinctAttribute:Ds,getFaceting:Is,updateFaceting:$s,resetFaceting:Os,getTypoTolerance:qs,updateTypoTolerance:Fs,resetTypoTolerance:js,getDictionary:_s,updateDictionary:vs,resetDictionary:Cs},tn=Ms});import{overridesReady as Ls,searchEngine as nn}from"@stacksjs/config";import{err as cn,ok as ln}from"@stacksjs/error-handling";import{log as v}from"@stacksjs/logging";import{getModelName as dn,getTableName as gn}from"@stacksjs/orm";import{path as et}from"@stacksjs/path";import{useSearchEngine as pn}from"@stacksjs/search-engine";import{globSync as yn}from"@stacksjs/storage";import{snakeCase as un}from"@stacksjs/strings";function V(e,t={}){let n={},r=(c)=>Array.isArray(c)?c.map((l)=>un(l)):void 0,s=r(e.searchable),i=r(e.filterable),o=r(e.sortable),a=t.displayed===!1?void 0:r(e.displayable);if(s)n.searchableAttributes=s;if(i)n.filterableAttributes=i;if(o)n.sortableAttributes=o;if(a)n.displayedAttributes=a;return n}function q(e,t){return typeof e==="object"&&e.index?e.index:t}async function Xs(e){try{let t=yn([et.userModelsPath("*.ts"),et.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:n,updateSettings:r}=pn();for(let s of t){let i=(await import(s)).default,o=i.traits?.useSearch,a=q(o,gn(i,s)),c=dn(i,s);if(e&&c!==e)continue;if(o&&(typeof o==="boolean"||typeof o==="object")){if(typeof o==="object")await r(a,V(o));let l=i;if(typeof l.all!=="function"){v.warn(`[search] ${c}: model has no .all() - define it with defineModel`);continue}let p=l.makeAllSearchable;if(typeof p==="function"){let x=await p.call(l);v.info(`[search] ${c}: imported ${x}, skipped 0`);continue}let f=typeof o==="object"?o.denormalize:void 0,T=f?Array.from(new Set(Object.values(f).map((x)=>x.split(".")[0]).filter((x)=>Boolean(x)))):[],O;if(T.length>0&&typeof l.query==="function")try{O=await l.query().with(...T).get()}catch(x){v.warn(`[search] ${c}: eager-load of [${T.join(", ")}] failed - falling back to .all(); denormalized fields will be null. (${x.message})`),O=await l.all()}else O=await l.all();let k=0,L=0;for(let x of O)try{let z=x.toSearchableObject?.();if(z==null){L++;continue}await n(a,z),k++}catch(z){L++,v.warn(`[search] Skipped ${c}#${x.id??"?"}: ${z.message}`)}v.info(`[search] ${c}: imported ${k}, skipped ${L}`)}}return v.info(e),ln("Successfully imported models to search engine!")}catch(t){return v.error(t),cn(t?.message||String(t))}}import{err as fn,ok as mn}from"@stacksjs/error-handling";import{log as bn}from"@stacksjs/logging";import{getModelName as hn,getTableName as Sn}from"@stacksjs/orm";import{path as tt}from"@stacksjs/path";import{useSearchEngine as An}from"@stacksjs/search-engine";import{globSync as Tn}from"@stacksjs/storage";async function ai(e){try{let t=Tn([tt.userModelsPath("*.ts"),tt.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:n}=An();for(let r of t){let s=(await import(r)).default,i=s.traits?.useSearch,o=q(i,Sn(s,r)),a=hn(s,r);if(e&&a!==e)continue;if(i&&(typeof i==="boolean"||typeof i==="object"))await n(o)}return mn("Successfully flushed all model data from search engine!")}catch(t){return bn.error(t),fn(t instanceof Error?t.message:String(t))}}import{err as wn,ok as Pn}from"@stacksjs/error-handling";import{log as kn}from"@stacksjs/logging";import{getTableName as xn}from"@stacksjs/orm";import{path as En}from"@stacksjs/path";import{useSearchEngine as Rn}from"@stacksjs/search-engine";async function fi(e){try{let t=En.userModelsPath(`${e}.ts`),n=(await import(t)).default,{getFilterableAttributes:r,getSortableAttributes:s,getSearchableAttributes:i,getDisplayedAttributes:o}=Rn(),a=n.traits?.useSearch,c=q(a,xn(n,t));if(a&&typeof a==="object"){let l=await o(c),p=await r(c),f=await s(c),T=await i(c);console.table({displayedAttributes:l,filterableAttributes:p,sortableAttributes:f,searchableAttributes:T})}return Pn("Successfully update index settings!")}catch(t){return kn.error(t),wn(t instanceof Error?t.message:String(t))}}import{err as Dn,ok as In}from"@stacksjs/error-handling";import{log as $n}from"@stacksjs/logging";import{getTableName as On}from"@stacksjs/orm";import{path as nt}from"@stacksjs/path";import{useSearchEngine as qn}from"@stacksjs/search-engine";import{globSync as Fn}from"@stacksjs/storage";async function ki(){try{let e=Fn([nt.userModelsPath("*.ts"),nt.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:t}=qn();for(let n of e){let r=(await import(n)).default,s=r.traits?.useSearch,i=q(s,On(r,n));if(s&&typeof s==="object")await t(i,V(s,{displayed:!1}))}return In("Successfully update index settings!")}catch(e){return $n.error(e),Dn(e?.message||String(e))}}function Hs(e){if(e==="algolia")return Promise.resolve().then(() => (Ie(),$t));if(e==="opensearch")return Promise.resolve().then(() => (Be(),vt));if(e==="typesense")return Promise.resolve().then(() => (Ye(),Yt));return Ze().then(() => en)}var ie,rn=(async()=>(await Ls,ie=(await Hs(nn.driver)).default,ie))();function Ui(){return new Proxy({},{get(e,t){if(ie)return Reflect.get(ie,t);if(typeof t==="symbol"||t==="then")return;return(...n)=>rn.then((r)=>{let s=Reflect.get(r,t);if(typeof s!=="function")throw TypeError(`The ${nn.driver??"configured"} search engine driver has no method "${t}"`);return s.apply(r,n)})}})}function Mi(){return rn}function Li(){return Promise.resolve().then(() => (Ie(),{})).then((e)=>Ot)}function Hi(){return Ze().then(() => ({})).then((e)=>tn)}function Ni(){return Promise.resolve().then(() => (Be(),{})).then((e)=>Ct)}function Bi(){return Promise.resolve().then(() => (Ye(),{})).then((e)=>Qt)}export{ai as flushModelDocuments,Xs as importModelDocuments,fi as listIndexSettings,Mi as searchEngineReady,q as searchIndexName,V as settingsFromSearchTrait,ki as updateIndexSettings,Li as useAlgolia,Hi as useMeilisearch,Ni as useOpensearch,Ui as useSearchEngine,Bi as useTypesense};
|
|
6
|
+
`).filter((a)=>a.trim()!=="").forEach((a,c)=>{let l;try{l=JSON.parse(a)}catch{l={success:!1,error:a}}if(l.success!==!0)o.push({id:n[c]?.id,error:l.error??"not written"})}),o.length>0)throw new Je(e,o,n.length);return P(e)}async function $r(e,t){return await y("DELETE",`${m(e)}/documents/${encodeURIComponent(String(t))}`),P(e)}async function Or(e,t){let n=Wt(t);if(!n)throw Error(`[search/typesense] deleteDocuments on "${e}" needs a filter. Use deleteAllDocuments to empty the collection.`);return await y("DELETE",`${m(e)}/documents?${new URLSearchParams({filter_by:n})}`),P(e)}async function qr(e){try{await y("DELETE",`${m(e)}/documents?truncate=true`)}catch(t){if(!Ge(t))throw t}return P(e)}async function Fr(e){try{await y("DELETE",m(e))}catch(t){if(!Ge(t))throw t;Tr.debug(`[search/typesense] deleteIndex ${e}: already absent`)}return ne.delete(e),P(e)}async function jr(e,t){let n=t?.sampleDocument;return await re(e,n?[ze(n)]:void 0,t?.settings),P(e)}async function _r(e){return await y("GET",m(e))}async function We(e,t){return await re(e,void 0,t),P(e)}function Z(e){return(t,n)=>We(t,{[e]:n??[]})}async function Ve(e){return((await y("GET",m(e))).fields??[]).map((n)=>n.name).filter((n)=>n!=="id")}async function Gt(e){return((await y("GET",m(e))).fields??[]).filter((n)=>n.facet).map((n)=>n.name)}async function zt(e){return((await y("GET",m(e))).fields??[]).filter((n)=>n.sort).map((n)=>n.name)}async function Jt(e){return Ve(e)}async function vr(e){return{searchableAttributes:await Ve(e),filterableAttributes:await Gt(e),sortableAttributes:await zt(e),displayedAttributes:await Jt(e)}}function g(e,t){throw Error(`[search/typesense] ${e} is not supported by Typesense. ${t}`)}async function Lt(){let t=(await y("GET","/collections")).map((n)=>({...n,uid:n.name,primaryKey:"id"}));return{results:t,offset:0,limit:t.length,total:t.length}}async function Cr(e,t){return await y("GET",`${m(e)}/documents/${encodeURIComponent(String(t))}`)}async function Ur(e){let t=await y("GET",`${m(e)}/synonyms`),n={};for(let r of t.synonyms??[]){if(r.root){n[r.root]=[...n[r.root]??[],...r.synonyms];continue}for(let s of r.synonyms)n[s]=[...n[s]??[],...r.synonyms.filter((i)=>i!==s)]}return n}async function Mr(e,t){await Vt(e);for(let[n,r]of Object.entries(t??{})){if(!r?.length)continue;await y("PUT",`${m(e)}/synonyms/${encodeURIComponent(`stacks-${n}`)}`,{root:n,synonyms:r})}return P(e)}async function Vt(e){let t=await y("GET",`${m(e)}/synonyms`);for(let n of t.synonyms??[])await y("DELETE",`${m(e)}/synonyms/${encodeURIComponent(n.id)}`);return P(e)}var te=null,Ke,ne,Je,h="Typesense takes it per search request, not as an index setting.",ee="Typesense derives it from the collection schema: declare it in the model's useSearch trait.",Lr,Qt;var Ye=H(()=>{N();Ke=class Ke extends Error{status;constructor(e,t,n,r){super(`[search/typesense] ${t} ${n} failed (${e}): ${r}`);this.status=e}};ne=new Map;Je=class Je extends Error{indexName;failures;total;constructor(e,t,n){let r=t.slice(0,5).map((i)=>`#${String(i.id??"?")}: ${i.error}`).join("; "),s=t.length>5?`; and ${t.length-5} more`:"";super(`[search/typesense] import into "${e}" rejected ${t.length} of ${n} document(s): ${r}${s}`);this.indexName=e;this.failures=t;this.total=n}};Lr={client:()=>({}),resetClient:()=>{te=null,ne.clear()},search:Ir,getIndex:_r,createIndex:jr,deleteIndex:Fr,updateIndex:()=>g("updateIndex (changing the primary key)","A Typesense collection's key is always `id`."),listAllIndexes:Lt,listAllIndices:Lt,addDocument:Ut,addDocuments:Mt,updateDocument:(e,t)=>Ut(e,t),updateDocuments:(e,t)=>Mt(e,t),deleteDocument:$r,deleteDocuments:Or,deleteAllDocuments:qr,getDocument:Cr,getFilterableAttributes:Gt,updateFilterableAttributes:Z("filterableAttributes"),resetFilterableAttributes:(e)=>We(e,{filterableAttributes:[]}),updateDisplayedAttributes:Z("displayedAttributes"),resetDisplayedAttributes:()=>g("resetDisplayedAttributes",ee),getDisplayedAttributes:Jt,updateSearchableAttributes:Z("searchableAttributes"),resetSearchableAttributes:()=>g("resetSearchableAttributes",ee),getSearchableAttributes:Ve,updateSortableAttributes:Z("sortableAttributes"),resetSortableAttributes:()=>g("resetSortableAttributes",ee),getSortableAttributes:zt,getSettings:vr,updateSettings:We,resetSettings:()=>g("resetSettings",ee),getPagination:()=>g("Index pagination settings",h),updatePagination:()=>g("Index pagination settings",h),resetPagination:()=>g("Index pagination settings",h),getSynonyms:Ur,updateSynonyms:Mr,resetSynonyms:Vt,getRankingRules:()=>g("Ranking rules",h),updateRankingRules:()=>g("Ranking rules",h),resetRankingRules:()=>g("Ranking rules",h),getDistinctAttribute:()=>g("A distinct attribute",h),updateDistinctAttribute:()=>g("A distinct attribute",h),resetDistinctAttribute:()=>g("A distinct attribute",h),getFaceting:()=>g("Faceting settings",h),updateFaceting:()=>g("Faceting settings",h),resetFaceting:()=>g("Faceting settings",h),getTypoTolerance:()=>g("Typo tolerance settings",h),updateTypoTolerance:()=>g("Typo tolerance settings",h),resetTypoTolerance:()=>g("Typo tolerance settings",h),getDictionary:()=>g("Custom dictionaries","Typesense has no equivalent."),updateDictionary:()=>g("Custom dictionaries","Typesense has no equivalent."),resetDictionary:()=>g("Custom dictionaries","Typesense has no equivalent.")},Qt=Lr});var en={};J(en,{default:()=>tn});import{searchEngine as Qe}from"@stacksjs/config";function u(){if(!Xe)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(!se){let e=Qe.meilisearch?.host||"http://127.0.0.1:7700",t=Qe.meilisearch?.apiKey||"";if(!e)throw Error("Meilisearch host is not configured. Please specify a search engine host.");se=new Xe({host:e,apiKey:t})}return se}function Hr(){se=null}async function Br(e,t={}){let{query:n,limit:r,offset:s,filter:i,sort:o}=j(t,Qe.perPage??F),a={limit:r,offset:s},c=Us(i);if(c!==void 0)a.filter=c;let l=M("meilisearch",o);if(l.length>0)a.sort=l;for(let p of Nr)if(t[p]!==void 0)a[p]=t[p];return await u().index(e).search(n,a)}async function Wr(e,t){return await u().index(e).addDocuments([t])}async function Kr(e,t){if(!Array.isArray(t))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(t.length<=1000)return await u().index(e).addDocuments(t);let r;for(let s=0;s<t.length;s+=1000){let i=t.slice(s,s+1000),o=await u().index(e).addDocuments(i);if(!r)r=o}return r}async function Gr(e){return await u().getIndex(e)}async function zr(e,t){return await u().createIndex(e,t)}async function Jr(e,t){return await u().updateIndex(e,t)}async function Vr(e,t){return await u().index(e).updateDocuments([t])}async function Yr(e,t){return await u().index(e).updateDocuments(t)}async function Qr(e,t){return await u().index(e).deleteDocument(t)}async function Xr(e,t){return await u().index(e).deleteDocuments({filter:t})}async function Zr(e){return await u().index(e).deleteAllDocuments()}async function es(e,t,n){return await u().index(e).getDocument(t,n)}async function ts(e){return await u().deleteIndex(e)}async function Xt(){return await u().getIndexes()}async function ns(e){return(await u().index(e).getFilterableAttributes()??[]).filter((n)=>typeof n==="string")}async function rs(e,t){return u().index(e).updateFilterableAttributes(t)}async function ss(e){return u().index(e).resetFilterableAttributes()}async function is(e,t){return u().index(e).updateSearchableAttributes(t)}async function os(e){return u().index(e).resetSearchableAttributes()}async function as(e){return u().index(e).getSearchableAttributes()}async function us(e,t){return u().index(e).updateSortableAttributes(t)}async function cs(e){return u().index(e).resetSortableAttributes()}async function ls(e){return u().index(e).getSortableAttributes()}async function ds(e,t){return u().index(e).updateDisplayedAttributes(t)}async function gs(e){return u().index(e).getDisplayedAttributes()}async function ps(e){return u().index(e).resetDisplayedAttributes()}async function ys(e){return u().index(e).getSettings()}async function fs(e,t){return u().index(e).updateSettings(t)}async function ms(e){return u().index(e).resetSettings()}async function bs(e){return u().index(e).getPagination()}async function hs(e,t){return u().index(e).updatePagination(t)}async function Ss(e){return u().index(e).resetPagination()}async function As(e){return u().index(e).getSynonyms()}async function Ts(e,t){return u().index(e).updateSynonyms(t)}async function ws(e){return u().index(e).resetSynonyms()}async function Ps(e){return u().index(e).getRankingRules()}async function ks(e,t){return u().index(e).updateRankingRules(t)}async function xs(e){return u().index(e).resetRankingRules()}async function Es(e){return u().index(e).getDistinctAttribute()}async function Rs(e,t){return u().index(e).updateDistinctAttribute(t)}async function Ds(e){return u().index(e).resetDistinctAttribute()}async function Is(e){return u().index(e).getFaceting()}async function $s(e,t){return u().index(e).updateFaceting(t)}async function Os(e){return u().index(e).resetFaceting()}async function qs(e){return u().index(e).getTypoTolerance()}async function Fs(e,t){return u().index(e).updateTypoTolerance(t)}async function js(e){return u().index(e).resetTypoTolerance()}async function _s(e){return u().index(e).getDictionary()}async function vs(e,t){return u().index(e).updateDictionary(t)}async function Cs(e){return u().index(e).resetDictionary()}function Zt(e){return`'${String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function Us(e){if(e==null||e==="")return;if(typeof e==="string"||Array.isArray(e))return e;if(!R(e))throw TypeError(`[search/meilisearch] Unsupported filter: ${JSON.stringify(e)}`);let t=[];for(let[n,r]of Object.entries(e)){if(D("meilisearch",n),r===void 0)continue;if(r===null)t.push(`${n} IS NULL`);else if(Array.isArray(r))t.push(`${n} IN [${r.map(Zt).join(", ")}]`);else t.push(`${n} = ${Zt(r)}`)}return t.length>0?t:void 0}var Xe,se=null,Nr,Ms,tn;var Ze=H(async()=>{N();try{({Meilisearch:Xe}=await import("meilisearch"))}catch{}Nr=["attributesToRetrieve","attributesToHighlight","attributesToCrop","attributesToSearchOn","cropLength","cropMarker","distinct","facets","highlightPreTag","highlightPostTag","matchingStrategy","showMatchesPosition","showRankingScore"];Ms={client:u,resetClient:Hr,search:Br,getIndex:Gr,createIndex:zr,deleteIndex:ts,updateIndex:Jr,listAllIndexes:Xt,listAllIndices:Xt,addDocument:Wr,addDocuments:Kr,updateDocument:Vr,updateDocuments:Yr,deleteDocument:Qr,deleteDocuments:Xr,deleteAllDocuments:Zr,getDocument:es,getFilterableAttributes:ns,updateFilterableAttributes:rs,resetFilterableAttributes:ss,updateDisplayedAttributes:ds,resetDisplayedAttributes:ps,getDisplayedAttributes:gs,updateSearchableAttributes:is,resetSearchableAttributes:os,getSearchableAttributes:as,updateSortableAttributes:us,resetSortableAttributes:cs,getSortableAttributes:ls,getSettings:ys,updateSettings:fs,resetSettings:ms,getPagination:bs,updatePagination:hs,resetPagination:Ss,getSynonyms:As,updateSynonyms:Ts,resetSynonyms:ws,getRankingRules:Ps,updateRankingRules:ks,resetRankingRules:xs,getDistinctAttribute:Es,updateDistinctAttribute:Rs,resetDistinctAttribute:Ds,getFaceting:Is,updateFaceting:$s,resetFaceting:Os,getTypoTolerance:qs,updateTypoTolerance:Fs,resetTypoTolerance:js,getDictionary:_s,updateDictionary:vs,resetDictionary:Cs},tn=Ms});import{overridesReady as Ls,searchEngine as nn}from"@stacksjs/config";import{err as cn,ok as ln}from"@stacksjs/error-handling";import{log as v}from"@stacksjs/logging";import{getModelName as dn,getTableName as gn}from"@stacksjs/orm";import{path as et}from"@stacksjs/path";import{useSearchEngine as pn}from"@stacksjs/search-engine";import{globSync as yn}from"@stacksjs/storage";import{snakeCase as un}from"@stacksjs/strings";function V(e,t={}){let n={},r=(c)=>Array.isArray(c)?c.map((l)=>un(l)):void 0,s=r(e.searchable),i=r(e.filterable),o=r(e.sortable),a=t.displayed===!1?void 0:r(e.displayable);if(s)n.searchableAttributes=s;if(i)n.filterableAttributes=i;if(o)n.sortableAttributes=o;if(a)n.displayedAttributes=a;return n}function q(e,t){return typeof e==="object"&&e.index?e.index:t}async function Xs(e){try{let t=yn([et.userModelsPath("*.ts"),et.defaultsPath("app/Models/**/*.ts")],{absolute:!0}),{addDocument:n,updateSettings:r}=pn();for(let s of t){let i=(await import(s)).default,o=i.traits?.useSearch,a=q(o,gn(i,s)),c=dn(i,s);if(e&&c!==e)continue;if(o&&(typeof o==="boolean"||typeof o==="object")){if(typeof o==="object")await r(a,V(o));let l=i;if(typeof l.all!=="function"){v.warn(`[search] ${c}: model has no .all() - define it with defineModel`);continue}let p=l.makeAllSearchable;if(typeof p==="function"){let x=await p.call(l);v.info(`[search] ${c}: imported ${x}, skipped 0`);continue}let f=typeof o==="object"?o.denormalize:void 0,T=f?Array.from(new Set(Object.values(f).map((x)=>x.split(".")[0]).filter((x)=>Boolean(x)))):[],O;if(T.length>0&&typeof l.query==="function")try{O=await l.query().with(...T).get()}catch(x){v.warn(`[search] ${c}: eager-load of [${T.join(", ")}] failed - falling back to .all(); denormalized fields will be null. (${x.message})`),O=await l.all()}else O=await l.all();let k=0,L=0;for(let x of O)try{let z=x.toSearchableObject?.();if(z==null){L++;continue}await n(a,z),k++}catch(z){L++,v.warn(`[search] Skipped ${c}#${x.id??"?"}: ${z.message}`)}v.info(`[search] ${c}: imported ${k}, skipped ${L}`)}}return v.info(e),ln("Successfully imported models to search engine!")}catch(t){return v.error(t),cn(t?.message||String(t))}}import{err as fn,ok as mn}from"@stacksjs/error-handling";import{log as bn}from"@stacksjs/logging";import{getModelName as hn,getTableName as Sn}from"@stacksjs/orm";import{path as tt}from"@stacksjs/path";import{useSearchEngine as An}from"@stacksjs/search-engine";import{globSync as Tn}from"@stacksjs/storage";async function ai(e){try{let t=Tn([tt.userModelsPath("*.ts"),tt.defaultsPath("app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:n}=An();for(let r of t){let s=(await import(r)).default,i=s.traits?.useSearch,o=q(i,Sn(s,r)),a=hn(s,r);if(e&&a!==e)continue;if(i&&(typeof i==="boolean"||typeof i==="object"))await n(o)}return mn("Successfully flushed all model data from search engine!")}catch(t){return bn.error(t),fn(t instanceof Error?t.message:String(t))}}import{err as wn,ok as Pn}from"@stacksjs/error-handling";import{log as kn}from"@stacksjs/logging";import{getTableName as xn}from"@stacksjs/orm";import{path as En}from"@stacksjs/path";import{useSearchEngine as Rn}from"@stacksjs/search-engine";async function fi(e){try{let t=En.userModelsPath(`${e}.ts`),n=(await import(t)).default,{getFilterableAttributes:r,getSortableAttributes:s,getSearchableAttributes:i,getDisplayedAttributes:o}=Rn(),a=n.traits?.useSearch,c=q(a,xn(n,t));if(a&&typeof a==="object"){let l=await o(c),p=await r(c),f=await s(c),T=await i(c);console.table({displayedAttributes:l,filterableAttributes:p,sortableAttributes:f,searchableAttributes:T})}return Pn("Successfully update index settings!")}catch(t){return kn.error(t),wn(t instanceof Error?t.message:String(t))}}import{err as Dn,ok as In}from"@stacksjs/error-handling";import{log as $n}from"@stacksjs/logging";import{getTableName as On}from"@stacksjs/orm";import{path as nt}from"@stacksjs/path";import{useSearchEngine as qn}from"@stacksjs/search-engine";import{globSync as Fn}from"@stacksjs/storage";async function ki(){try{let e=Fn([nt.userModelsPath("*.ts"),nt.defaultsPath("app/Models/**/*.ts")],{absolute:!0}),{updateSettings:t}=qn();for(let n of e){let r=(await import(n)).default,s=r.traits?.useSearch,i=q(s,On(r,n));if(s&&typeof s==="object")await t(i,V(s,{displayed:!1}))}return In("Successfully update index settings!")}catch(e){return $n.error(e),Dn(e?.message||String(e))}}function Hs(e){if(e==="algolia")return Promise.resolve().then(() => (Ie(),$t));if(e==="opensearch")return Promise.resolve().then(() => (Be(),vt));if(e==="typesense")return Promise.resolve().then(() => (Ye(),Yt));return Ze().then(() => en)}var ie,rn=(async()=>(await Ls,ie=(await Hs(nn.driver)).default,ie))();function Ui(){return new Proxy({},{get(e,t){if(ie)return Reflect.get(ie,t);if(typeof t==="symbol"||t==="then")return;return(...n)=>rn.then((r)=>{let s=Reflect.get(r,t);if(typeof s!=="function")throw TypeError(`The ${nn.driver??"configured"} search engine driver has no method "${t}"`);return s.apply(r,n)})}})}function Mi(){return rn}function Li(){return Promise.resolve().then(() => (Ie(),{})).then((e)=>Ot)}function Hi(){return Ze().then(() => ({})).then((e)=>tn)}function Ni(){return Promise.resolve().then(() => (Be(),{})).then((e)=>Ct)}function Bi(){return Promise.resolve().then(() => (Ye(),{})).then((e)=>Qt)}export{ai as flushModelDocuments,Xs as importModelDocuments,fi as listIndexSettings,Mi as searchEngineReady,q as searchIndexName,V as settingsFromSearchTrait,ki as updateIndexSettings,Li as useAlgolia,Hi as useMeilisearch,Ni as useOpensearch,Ui as useSearchEngine,Bi 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.
|
|
5
|
+
"version": "0.75.256",
|
|
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.
|
|
68
|
-
"@stacksjs/error-handling": "0.75.
|
|
69
|
-
"@stacksjs/logging": "0.75.
|
|
70
|
-
"@stacksjs/orm": "0.75.
|
|
71
|
-
"@stacksjs/path": "0.75.
|
|
72
|
-
"@stacksjs/storage": "0.75.
|
|
73
|
-
"@stacksjs/strings": "0.75.
|
|
67
|
+
"@stacksjs/config": "0.75.256",
|
|
68
|
+
"@stacksjs/error-handling": "0.75.256",
|
|
69
|
+
"@stacksjs/logging": "0.75.256",
|
|
70
|
+
"@stacksjs/orm": "0.75.256",
|
|
71
|
+
"@stacksjs/path": "0.75.256",
|
|
72
|
+
"@stacksjs/storage": "0.75.256",
|
|
73
|
+
"@stacksjs/strings": "0.75.256"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"meilisearch": "^0.62.0"
|