@stacksjs/search-engine 0.70.228 → 0.70.230
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 +4 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
`),$=await fetch(`${AG()}/collections/${G}/documents/import?action=upsert`,{method:"POST",headers:{...fG(),"Content-Type":"text/plain"},body:Y});if(!$.ok){let W=await $.text().catch(()=>"");throw Error(`[search/typesense] bulk import failed (${$.status}): ${W}`)}return O(G)}async function wJ(G,J){return await B("DELETE",`/collections/${G}/documents/${String(J)}`),O(G)}async function FG(G){try{await B("DELETE",`/collections/${G}`)}catch(J){LJ.debug(`[search/typesense] deleteIndex ${G}: ${J.message}`)}return O(G)}async function _J(G){return await T(G),O(G)}async function EJ(G){return await B("GET",`/collections/${G}`)}async function CJ(G,J){return await T(G,void 0,J),O(G)}async function D(G){return((await B("GET",`/collections/${G}`)).fields??[]).map((Q)=>Q.name).filter((Q)=>Q!=="id")}async function qG(G){return((await B("GET",`/collections/${G}`)).fields??[]).filter((Q)=>Q.facet).map((Q)=>Q.name)}async function kG(G){return((await B("GET",`/collections/${G}`)).fields??[]).map((Q)=>Q.name)}async function jG(G){return D(G)}async function SJ(G){return{searchableAttributes:await D(G),filterableAttributes:await qG(G),sortableAttributes:await kG(G),displayedAttributes:await jG(G)}}function z(G,J){return Promise.resolve(O("typesense"))}var f=null,TG,FJ,RJ;var b=S(()=>{TG=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;FJ={client:()=>({}),resetClient:()=>{f=null},search:PJ,getIndex:EJ,createIndex:_J,deleteIndex:FG,updateIndex:z,listAllIndexes:async()=>({results:[]}),listAllIndices:async()=>({results:[]}),addDocument:CG,addDocuments:SG,updateDocument:(G,J)=>CG(G,J),updateDocuments:(G,J)=>SG(G,J),deleteDocument:wJ,deleteDocuments:async(G)=>FG(G),getDocument:async()=>O("typesense"),getFilterableAttributes:qG,updateFilterableAttributes:z,resetFilterableAttributes:z,updateDisplayedAttributes:z,resetDisplayedAttributes:z,getDisplayedAttributes:jG,updateSearchableAttributes:z,resetSearchableAttributes:z,getSearchableAttributes:D,updateSortableAttributes:z,resetSortableAttributes:z,getSortableAttributes:kG,getSettings:SJ,updateSettings:CJ,resetSettings:z,getPagination:async()=>({}),updatePagination:z,resetPagination:z,getSynonyms:async()=>({}),updateSynonyms:z,resetSynonyms:z,getRankingRules:async()=>[],updateRankingRules:z,resetRankingRules:z,getDistinctAttribute:async()=>null,updateDistinctAttribute:z,resetDistinctAttribute:z,getFaceting:async()=>({}),updateFaceting:z,resetFaceting:z,getTypoTolerance:async()=>({}),updateTypoTolerance:z,resetTypoTolerance:z,getDictionary:async()=>({}),updateDictionary:z,resetDictionary:z},RJ=FJ});var u={};C(u,{default:()=>RQ});import{searchEngine as yG}from"@stacksjs/config";function Z(){if(!g)throw Error("The `meilisearch` search driver is selected but the `meilisearch` package is not installed. "+"It is an opt-in dependency \u2014 run `bun add meilisearch` to enable it, or switch drivers in `config/search-engine.ts`.");if(!v){let G=yG.meilisearch?.host||"http://127.0.0.1:7700",J=yG.meilisearch?.apiKey||"";if(!G)throw Error("Meilisearch host is not configured. Please specify a search engine host.");v=new g({host:G,apiKey:J})}return v}function AJ(){v=null}async function fJ(G,J){let Q=Number(J.page)||1,Y=Number(J.perPage)||20,$=(Q-1)*Y,W=CQ(J.filter),X=SQ(J.sort);return await Z().index(G).search(J.query,{limit:Y,filter:W,sort:X,offset:$})}async function TJ(G,J){return await Z().index(G).addDocuments([J])}async function vJ(G,J){if(!Array.isArray(J))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(J.length<=1000)return await Z().index(G).addDocuments(J);let Y;for(let $=0;$<J.length;$+=1000){let W=J.slice($,$+1000),X=await Z().index(G).addDocuments(W);if(!Y)Y=X}return Y}async function qJ(G){return await Z().getIndex(G)}async function kJ(G,J){return await Z().createIndex(G,J)}async function jJ(G,J){return await Z().updateIndex(G,J)}async function yJ(G,J){return await Z().index(G).updateDocuments([J])}async function IJ(G,J){return await Z().index(G).updateDocuments(J)}async function hJ(G,J){return await Z().index(G).deleteDocument(J)}async function DJ(G,J){return await Z().index(G).deleteDocuments({filter:J})}async function NJ(G,J,Q){return await Z().index(G).getDocument(J,Q)}async function bJ(G){return await Z().deleteIndex(G)}async function IG(){return await Z().getIndexes()}async function gJ(G){return Z().index(G).getFilterableAttributes()}async function uJ(G,J){return Z().index(G).updateFilterableAttributes(J)}async function pJ(G){return Z().index(G).resetFilterableAttributes()}async function xJ(G,J){return Z().index(G).updateSearchableAttributes(J)}async function cJ(G){return Z().index(G).resetSearchableAttributes()}async function oJ(G){return Z().index(G).getSearchableAttributes()}async function lJ(G,J){return Z().index(G).updateSortableAttributes(J)}async function mJ(G){return Z().index(G).resetSortableAttributes()}async function rJ(G){return Z().index(G).getSortableAttributes()}async function dJ(G,J){return Z().index(G).updateDisplayedAttributes(J)}async function sJ(G){return Z().index(G).getDisplayedAttributes()}async function iJ(G){return Z().index(G).resetDisplayedAttributes()}async function nJ(G){return Z().index(G).getSettings()}async function tJ(G,J){return Z().index(G).updateSettings(J)}async function aJ(G){return Z().index(G).resetSettings()}async function eJ(G){return Z().index(G).getPagination()}async function GQ(G,J){return Z().index(G).updatePagination(J)}async function JQ(G){return Z().index(G).resetPagination()}async function QQ(G){return Z().index(G).getSynonyms()}async function YQ(G,J){return Z().index(G).updateSynonyms(J)}async function ZQ(G){return Z().index(G).resetSynonyms()}async function $Q(G){return Z().index(G).getRankingRules()}async function HQ(G,J){return Z().index(G).updateRankingRules(J)}async function WQ(G){return Z().index(G).resetRankingRules()}async function XQ(G){return Z().index(G).getDistinctAttribute()}async function VQ(G,J){return Z().index(G).updateDistinctAttribute(J)}async function zQ(G){return Z().index(G).resetDistinctAttribute()}async function KQ(G){return Z().index(G).getFaceting()}async function UQ(G,J){return Z().index(G).updateFaceting(J)}async function LQ(G){return Z().index(G).resetFaceting()}async function MQ(G){return Z().index(G).getTypoTolerance()}async function BQ(G,J){return Z().index(G).updateTypoTolerance(J)}async function OQ(G){return Z().index(G).resetTypoTolerance()}async function PQ(G){return Z().index(G).getDictionary()}async function wQ(G,J){return Z().index(G).updateDictionary(J)}async function _Q(G){return Z().index(G).resetDictionary()}function CQ(G){if(!G)return[];let J=[];for(let Q in G){if(!Object.prototype.hasOwnProperty.call(G,Q))continue;if(!EQ.test(Q))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${Q}`);let Y=G[Q],$=String(Y).replace(/'/g,"\\'");J.push(`${Q}='${$}'`)}return J}function SQ(G){if(!G)return[];let J=[];for(let Q in G)if(Object.prototype.hasOwnProperty.call(G,Q)){let $=String(G[Q]).toLowerCase()==="desc"?"desc":"asc";J.push(`${Q}:${$}`)}return J}var g,v=null,EQ,FQ,RQ;var p=S(async()=>{try{({Meilisearch:g}=await import("meilisearch"))}catch{}EQ=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;FQ={client:Z,resetClient:AJ,search:fJ,getIndex:qJ,createIndex:kJ,deleteIndex:bJ,updateIndex:jJ,listAllIndexes:IG,listAllIndices:IG,addDocument:TJ,addDocuments:vJ,updateDocument:yJ,updateDocuments:IJ,deleteDocument:hJ,deleteDocuments:DJ,getDocument:NJ,getFilterableAttributes:gJ,updateFilterableAttributes:uJ,resetFilterableAttributes:pJ,updateDisplayedAttributes:dJ,resetDisplayedAttributes:iJ,getDisplayedAttributes:sJ,updateSearchableAttributes:xJ,resetSearchableAttributes:cJ,getSearchableAttributes:oJ,updateSortableAttributes:lJ,resetSortableAttributes:mJ,getSortableAttributes:rJ,getSettings:nJ,updateSettings:tJ,resetSettings:aJ,getPagination:eJ,updatePagination:GQ,resetPagination:JQ,getSynonyms:QQ,updateSynonyms:YQ,resetSynonyms:ZQ,getRankingRules:$Q,updateRankingRules:HQ,resetRankingRules:WQ,getDistinctAttribute:XQ,updateDistinctAttribute:VQ,resetDistinctAttribute:zQ,getFaceting:KQ,updateFaceting:UQ,resetFaceting:LQ,getTypoTolerance:MQ,updateTypoTolerance:BQ,resetTypoTolerance:OQ,getDictionary:PQ,updateDictionary:wQ,resetDictionary:_Q},RQ=FQ});import{overridesReady as AQ,searchEngine as fQ}from"@stacksjs/config";import{err as gG,ok as uG}from"@stacksjs/error-handling";import{log as _}from"@stacksjs/logging";import{getModelName as pG,getTableName as xG}from"@stacksjs/orm";import{path as c}from"@stacksjs/path";import{useSearchEngine as cG}from"@stacksjs/search-engine";import{globSync as oG}from"@stacksjs/storage";import{snakeCase as F}from"@stacksjs/strings";async function gQ(G){try{let J=oG([c.userModelsPath("*.ts"),c.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:Q,updateSettings:Y}=cG();for(let $ of J){let W=(await import($)).default,X=W.traits?.useSearch,L=xG(W,$),K=pG(W,$);if(G&&K!==G)continue;if(X&&(typeof X==="boolean"||typeof X==="object")){if(typeof X==="object")await Y(L,{searchableAttributes:(X.searchable??[]).map((U)=>F(U)),filterableAttributes:(X.filterable??[]).map((U)=>F(U)),sortableAttributes:(X.sortable??[]).map((U)=>F(U)),displayedAttributes:(X.displayable??[]).map((U)=>F(U))});let H=W;if(typeof H.all!=="function"){_.warn(`[search] ${K}: model has no .all() \u2014 run generate:model-files or use defineModel`);continue}let M=typeof X==="object"?X.denormalize:void 0,P=M?Array.from(new Set(Object.values(M).map((U)=>U.split(".")[0]).filter((U)=>Boolean(U)))):[],w;if(P.length>0&&typeof H.query==="function")try{w=await H.query().with(...P).get()}catch(U){_.warn(`[search] ${K}: eager-load of [${P.join(", ")}] failed \u2014 falling back to .all(); denormalized fields will be null. (${U.message})`),w=await H.all()}else w=await H.all();let x=0,q=0;for(let U of w)try{let E=U.toSearchableObject?.();if(E==null){q++;continue}await Q(L,E),x++}catch(E){q++,_.warn(`[search] Skipped ${K}#${U.id??"?"}: ${E.message}`)}_.info(`[search] ${K}: imported ${x}, skipped ${q}`)}}return _.info(G),uG("Successfully imported models to search engine!")}catch(J){return _.error(J),gG(J?.message||String(J))}}import{ok as lG}from"@stacksjs/error-handling";import{log as mG}from"@stacksjs/logging";import{getModelName as rG,getTableName as dG}from"@stacksjs/orm";import{path as o}from"@stacksjs/path";import{useSearchEngine as sG}from"@stacksjs/search-engine";import{globSync as iG}from"@stacksjs/storage";async function rQ(G){try{let J=iG([o.userModelsPath("*.ts"),o.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:Q}=sG();for(let Y of J){let $=(await import(Y)).default,W=$.traits?.useSearch,X=dG($,Y),L=rG($,Y);if(G&&L!==G)continue;if(W&&(typeof W==="boolean"||typeof W==="object"))await Q(X)}return lG("Successfully flushed all model data from search engine!")}catch(J){return mG.error(J),J(J)}}import{ok as nG}from"@stacksjs/error-handling";import{log as tG}from"@stacksjs/logging";import{getTableName as aG}from"@stacksjs/orm";import{path as eG}from"@stacksjs/path";import{useSearchEngine as GJ}from"@stacksjs/search-engine";async function eQ(G){try{let J=eG.userModelsPath(`${G}.ts`),Q=(await import(J)).default,{getFilterableAttributes:Y,getSortableAttributes:$,getSearchableAttributes:W,getDisplayedAttributes:X}=GJ(),L=Q.traits?.useSearch,K=aG(Q,J);if(L&&typeof L==="object"){let H=await X(K),M=await Y(K),P=await $(K),w=await W(K);console.table({displayedAttributes:H,filterableAttributes:M,sortableAttributes:P,searchableAttributes:w})}return nG("Successfully update index settings!")}catch(J){return tG.error(J),J(J)}}import{err as JJ,ok as QJ}from"@stacksjs/error-handling";import{log as YJ}from"@stacksjs/logging";import{getTableName as ZJ}from"@stacksjs/orm";import{path as l}from"@stacksjs/path";import{useSearchEngine as $J}from"@stacksjs/search-engine";import{globSync as HJ}from"@stacksjs/storage";import{snakeCase as k}from"@stacksjs/strings";async function XY(){try{let G=HJ([l.userModelsPath("*.ts"),l.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:J}=$J();for(let Q of G){let Y=(await import(Q)).default,$=Y.traits?.useSearch,W=ZJ(Y,Q);if($&&typeof $==="object"){let X=(typeof Y.traits?.useSearch==="object"&&Y.traits?.useSearch.filterable||[]).map((H)=>k(H)),L=(typeof Y.traits?.useSearch==="object"&&Y.traits?.useSearch.sortable||[]).map((H)=>k(H)),K=(typeof Y.traits?.useSearch==="object"&&Y.traits?.useSearch.searchable||[]).map((H)=>k(H));await J(W,{filterableAttributes:X,sortableAttributes:L,searchableAttributes:K})}}return QJ("Successfully update index settings!")}catch(G){return YJ.error(G),JJ(G?.message||String(G))}}await AQ;function TQ(G){if(G==="algolia")return Promise.resolve().then(() => (y(),j));if(G==="opensearch")return Promise.resolve().then(() => (h(),I));if(G==="typesense")return Promise.resolve().then(() => (b(),N));return p().then(() => u)}var vQ=await TQ(fQ.driver),qQ=vQ.default;function OY(){return qQ}function PY(){return Promise.resolve().then(() => (y(),j)).then((G)=>G.default)}function wY(){return p().then(() => u).then((G)=>G.default)}function _Y(){return Promise.resolve().then(() => (h(),I)).then((G)=>G.default)}function EY(){return Promise.resolve().then(() => (b(),N)).then((G)=>G.default)}export{EY as useTypesense,OY as useSearchEngine,_Y as useOpensearch,wY as useMeilisearch,PY as useAlgolia,XY as updateIndexSettings,eQ as listIndexSettings,gQ as importModelDocuments,rQ as flushModelDocuments};
|
|
2
|
+
var yt=Object.defineProperty;var ft=(u)=>u;function rt(u,t){this[u]=ft.bind(null,t)}var V=(u,t)=>{for(var y in t)yt(u,y,{get:t[y],enumerable:!0,configurable:!0,set:rt.bind(t,y)})};var E=(u,t)=>()=>(u&&(t=u(u=0)),t);var wt=import.meta.require;var v={};V(v,{waitTask:()=>Tu,setSettings:()=>Vu,searchSynonyms:()=>Cu,searchRules:()=>bu,search:()=>gu,saveSynonym:()=>hu,saveRule:()=>Fu,saveObjects:()=>Gu,saveObject:()=>Ju,partialUpdateObject:()=>Hu,multiSearch:()=>ou,moveIndex:()=>Lu,listIndices:()=>Eu,indexExists:()=>Ru,getSettings:()=>zu,getObjects:()=>Wu,getObject:()=>Zu,deleteObjects:()=>Qu,deleteObject:()=>Mu,deleteIndex:()=>Bu,deleteBy:()=>Yu,default:()=>ht,copyIndex:()=>Ku,configure:()=>Ou,clearSynonyms:()=>cu,clearRules:()=>vu,clearObjects:()=>Xu,browse:()=>qu,algolia:()=>ku});import{searchEngine as Au}from"@stacksjs/config";import{log as Bt}from"@stacksjs/logging";function Uu(){if(!L){let u=Au.algolia?.appId||process.env.ALGOLIA_APP_ID||"",t=Au.algolia?.apiKey||process.env.ALGOLIA_API_KEY||"";if(!u||!t)throw Bt.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.");L={appId:u,apiKey:t}}return L}function Rt(){let{appId:u}=Uu();return`https://${u}.algolia.net`}function Tt(){let{appId:u,apiKey:t}=Uu();return{"X-Algolia-Application-Id":u,"X-Algolia-API-Key":t,"Content-Type":"application/json"}}async function _(u,t,y){let f=await fetch(`${Rt()}${t}`,{method:u,headers:Tt(),body:y?JSON.stringify(y):void 0});if(!f.ok){let r=await f.json().catch(()=>({message:f.statusText}));throw Error(`Algolia API error: ${r.message||f.statusText}`)}return f.json()}function Ou(u){L=u}async function gu(u,t={}){return _("POST",`/1/indexes/${u}/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 ou(u){return _("POST","/1/indexes/*/queries",{requests:u.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 Ju(u,t,y){if(y)return _("PUT",`/1/indexes/${u}/${y}`,t);return _("POST",`/1/indexes/${u}`,t)}async function Gu(u,t){return _("POST",`/1/indexes/${u}/batch`,{requests:t.map((y)=>({action:y.objectID?"updateObject":"addObject",body:y}))})}async function Hu(u,t,y,f=!0){return _("POST",`/1/indexes/${u}/${t}/partial${f?"":"?createIfNotExists=false"}`,y)}async function Mu(u,t){return _("DELETE",`/1/indexes/${u}/${t}`)}async function Qu(u,t){return _("POST",`/1/indexes/${u}/batch`,{requests:t.map((y)=>({action:"deleteObject",body:{objectID:y}}))})}async function Yu(u,t){return _("POST",`/1/indexes/${u}/deleteByQuery`,{filters:t})}async function Zu(u,t,y){let f=y?`?attributesToRetrieve=${y.join(",")}`:"";return _("GET",`/1/indexes/${u}/${t}${f}`)}async function Wu(u,t,y){return _("POST","/1/indexes/*/objects",{requests:t.map((f)=>({indexName:u,objectID:f,attributesToRetrieve:y}))})}async function Xu(u){return _("POST",`/1/indexes/${u}/clear`)}async function zu(u){return _("GET",`/1/indexes/${u}/settings`)}async function Vu(u,t,y=!1){return _("PUT",`/1/indexes/${u}/settings${y?"?forwardToReplicas=true":""}`,t)}async function Eu(){return _("GET","/1/indexes")}async function Ku(u,t,y){return _("POST",`/1/indexes/${u}/operation`,{operation:"copy",destination:t,scope:y})}async function Lu(u,t){return _("POST",`/1/indexes/${u}/operation`,{operation:"move",destination:t})}async function Bu(u){return _("DELETE",`/1/indexes/${u}`)}async function Ru(u){try{return await _("GET",`/1/indexes/${u}/settings`),!0}catch{return!1}}async function Tu(u,t,y=1e4,f=100){let r=Date.now();while(Date.now()-r<y){let $=await _("GET",`/1/indexes/${u}/task/${t}`);if($.status==="published")return $;await new Promise((P)=>setTimeout(P,f))}throw Error(`Task ${t} timed out after ${y}ms`)}async function hu(u,t,y=!1){return _("PUT",`/1/indexes/${u}/synonyms/${t.objectID}${y?"?forwardToReplicas=true":""}`,t)}async function Cu(u,t="",y,f=0,r=20){return _("POST",`/1/indexes/${u}/synonyms/search`,{query:t,type:y,page:f,hitsPerPage:r})}async function cu(u,t=!1){return _("POST",`/1/indexes/${u}/synonyms/clear${t?"?forwardToReplicas=true":""}`)}async function Fu(u,t,y=!1){return _("PUT",`/1/indexes/${u}/rules/${t.objectID}${y?"?forwardToReplicas=true":""}`,t)}async function bu(u,t="",y,f,r=0,$=20){return _("POST",`/1/indexes/${u}/rules/search`,{query:t,anchoring:y,context:f,page:r,hitsPerPage:$})}async function vu(u,t=!1){return _("POST",`/1/indexes/${u}/rules/clear${t?"?forwardToReplicas=true":""}`)}async function*qu(u,t={}){let y;do{let f=await _("POST",`/1/indexes/${u}/browse`,{...t,cursor:y});for(let r of f.hits)yield r;y=f.cursor}while(y)}var L=null,ku,ht;var q=E(()=>{ku={configure:Ou,search:gu,multiSearch:ou,saveObject:Ju,saveObjects:Gu,partialUpdateObject:Hu,deleteObject:Mu,deleteObjects:Qu,deleteBy:Yu,getObject:Zu,getObjects:Wu,clearObjects:Xu,getSettings:zu,setSettings:Vu,listIndices:Eu,copyIndex:Ku,moveIndex:Lu,deleteIndex:Bu,indexExists:Ru,waitTask:Tu,saveSynonym:hu,searchSynonyms:Cu,clearSynonyms:cu,saveRule:Fu,searchRules:bu,clearRules:vu,browse:qu},ht=ku});var a={};V(a,{default:()=>it});import{searchEngine as Ct}from"@stacksjs/config";function m(){let u=Ct.opensearch,t=String(u?.host||"localhost").replace(/\/+$/,""),y=/^https?:\/\//i.test(t),f=String(u?.protocol||"http").replace(/:$/,""),r=Number(u?.port||9200),$=`${f}://${t}${r?`:${r}`:""}`;if(y){let P=new URL(t);if(!P.port&&u?.port)P.port=String(u.port);$=P.toString().replace(/\/+$/,"")}return{baseUrl:$,auth:String(u?.auth||"")}}function ct(u="application/json"){let{auth:t}=m();return{"Content-Type":u,...t?{Authorization:`Basic ${btoa(t)}`}:{}}}async function J(u,t,y,f){let{baseUrl:r}=m(),$=await fetch(`${r}${t}`,{method:u,headers:ct(f),body:y===void 0?void 0:typeof y==="string"?y:JSON.stringify(y)});if(!$.ok){let O=await $.text();throw new R($.status,u,t,O||$.statusText)}let P=await $.text();return P?JSON.parse(P):{}}function G(u){return`/${encodeURIComponent(u)}`}function Y(u,t){return{taskUid:Date.now(),indexUid:u,status:"succeeded",type:t,enqueuedAt:new Date().toISOString()}}async function d(u){return(await J("GET",`${G(u)}/_mapping`))[u]?.mappings?._meta?.stacks||{}}async function B(u,t){let y;try{y=await d(u)}catch(f){if(!(f instanceof R)||f.status!==404)throw f;await J("PUT",G(u)),y={}}return await J("PUT",`${G(u)}/_mapping`,{_meta:{stacks:{...y,...t}}}),Y(u,"settingsUpdate")}async function Ft(u,t={}){if(typeof t==="string")t={q:t};let y=String(t.q??t.query??""),f=Math.max(1,Number(t.limit??t.perPage??20)),r=Math.max(0,Number(t.offset??(Number(t.page||1)-1)*f)),$=Array.isArray(t.filter)?t.filter:t.filter?[t.filter]:[],P=y?{multi_match:{query:y,fields:t.attributesToSearchOn||["*"]}}:{match_all:{}},O=$.length>0?{bool:{must:[P],filter:$.map((g)=>({query_string:{query:typeof g==="string"?g:JSON.stringify(g)}}))}}:P,U=await J("POST",`${G(u)}/_search`,{query:O,from:r,size:f,...t.sort?{sort:t.sort}:{},...t.attributesToRetrieve?{_source:t.attributesToRetrieve}:{}}),S=typeof U.hits?.total==="number"?U.hits.total:Number(U.hits?.total?.value||0);return{hits:(U.hits?.hits||[]).map((g)=>({id:g._source?.id??g._id,...g._source})),estimatedTotalHits:S,processingTimeMs:Number(U.took||0),query:y,limit:f,offset:r}}async function bt(u,t={}){return await J("PUT",G(u),t),Y(u,"indexCreation")}async function vt(u){return await J("GET",G(u))}async function qt(u,t){return await J("PUT",`${G(u)}/_settings`,t),Y(u,"indexUpdate")}async function kt(u){try{await J("DELETE",G(u))}catch(t){if(!(t instanceof R)||t.status!==404)throw t}return Y(u,"indexDeletion")}async function Iu(){let t=(await J("GET","/_cat/indices?format=json")).map((y)=>({uid:y.index,primaryKey:null,createdAt:null,updatedAt:null}));return{results:t,total:t.length,limit:t.length,offset:0}}async function ju(u,t){let y=t?.id??t?.objectID,f=y===void 0||y===null?`${G(u)}/_doc?refresh=wait_for`:`${G(u)}/_doc/${encodeURIComponent(String(y))}?refresh=wait_for`;return await J(y===void 0||y===null?"POST":"PUT",f,t),Y(u,"documentAdditionOrUpdate")}async function Du(u,t){if(!Array.isArray(t))throw TypeError("[search/opensearch] addDocuments requires an array of documents");if(t.length===0)return Y(u,"documentAdditionOrUpdate");let y=t.flatMap((r)=>{let $=r?.id??r?.objectID;return[JSON.stringify({index:{_index:u,...$===void 0||$===null?{}:{_id:$}}}),JSON.stringify(r)]}),f=await J("POST","/_bulk?refresh=wait_for",`${y.join(`
|
|
3
|
+
`)}
|
|
4
|
+
`,"application/x-ndjson");if(f.errors){let r=f.items?.filter(($)=>Number($.index?.status||0)>=400)||[];throw Error(`[search/opensearch] Bulk indexing failed for ${r.length} document(s)`)}return Y(u,"documentAdditionOrUpdate")}async function It(u,t,y){let f=y?`?_source=${encodeURIComponent(Array.isArray(y)?y.join(","):String(y))}`:"",r=await J("GET",`${G(u)}/_doc/${encodeURIComponent(String(t))}${f}`);return{id:r._source?.id??r._id,...r._source}}async function jt(u,t){return await J("DELETE",`${G(u)}/_doc/${encodeURIComponent(String(t))}?refresh=wait_for`),Y(u,"documentDeletion")}async function Dt(u,t){let y=(Array.isArray(t)?t:[t]).filter(Boolean);return await J("POST",`${G(u)}/_delete_by_query?refresh=true`,{query:y.length>0?{bool:{filter:y.map((f)=>({query_string:{query:f}}))}}:{match_all:{}}}),Y(u,"documentDeletion")}function M(u,t){return{get:async(y)=>(await d(y))[u]??t,update:async(y,f)=>B(y,{[u]:f}),reset:async(y)=>B(y,{[u]:t})}}async function nt(u){let t=await d(u);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 pt(u,t){let f=Object.fromEntries(["filterableAttributes","searchableAttributes","sortableAttributes","displayedAttributes","pagination","synonyms","rankingRules","distinctAttribute","faceting","typoTolerance","dictionary"].filter((r)=>(r in t)).map((r)=>[r,t[r]]));return await B(u,f)}async function Nt(u){return await B(u,{filterableAttributes:[],searchableAttributes:[],sortableAttributes:[],displayedAttributes:[],pagination:{},synonyms:{},rankingRules:[],distinctAttribute:null,faceting:{},typoTolerance:{},dictionary:[]})}var R,k,I,j,D,n,p,N,l,i,s,x,lt,it;var e=E(()=>{R=class R extends Error{status;constructor(u,t,y,f){super(`[search/opensearch] ${t} ${y} failed (${u}): ${f}`);this.status=u}};k=M("filterableAttributes",[]),I=M("searchableAttributes",[]),j=M("sortableAttributes",[]),D=M("displayedAttributes",[]),n=M("pagination",{}),p=M("synonyms",{}),N=M("rankingRules",[]),l=M("distinctAttribute",null),i=M("faceting",{}),s=M("typoTolerance",{}),x=M("dictionary",[]);lt={client:()=>({request:J,configuration:m}),search:Ft,createIndex:bt,getIndex:vt,updateIndex:qt,deleteIndex:kt,listAllIndexes:Iu,listAllIndices:Iu,addDocument:ju,addDocuments:Du,updateDocument:ju,updateDocuments:Du,getDocument:It,deleteDocument:jt,deleteDocuments:Dt,getFilterableAttributes:k.get,updateFilterableAttributes:k.update,resetFilterableAttributes:k.reset,getSearchableAttributes:I.get,updateSearchableAttributes:I.update,resetSearchableAttributes:I.reset,getSortableAttributes:j.get,updateSortableAttributes:j.update,resetSortableAttributes:j.reset,getDisplayedAttributes:D.get,updateDisplayedAttributes:D.update,resetDisplayedAttributes:D.reset,getSettings:nt,updateSettings:pt,resetSettings:Nt,getPagination:n.get,updatePagination:n.update,resetPagination:n.reset,getSynonyms:p.get,updateSynonyms:p.update,resetSynonyms:p.reset,getRankingRules:N.get,updateRankingRules:N.update,resetRankingRules:N.reset,getDistinctAttribute:l.get,updateDistinctAttribute:l.update,resetDistinctAttribute:l.reset,getFaceting:i.get,updateFaceting:i.update,resetFaceting:i.reset,getTypoTolerance:s.get,updateTypoTolerance:s.update,resetTypoTolerance:s.reset,getDictionary:x.get,updateDictionary:x.update,resetDictionary:x.reset},it=lt});var tu={};V(tu,{default:()=>wy});import{searchEngine as T}from"@stacksjs/config";import{log as st}from"@stacksjs/logging";function lu(){if(!h){let u=T.typesense?.host||process.env.TYPESENSE_HOST||"127.0.0.1",t=T.typesense?.port||Number(process.env.TYPESENSE_PORT||8108),y=T.typesense?.protocol||process.env.TYPESENSE_PROTOCOL||"http",f=T.typesense?.apiKey||process.env.TYPESENSE_API_KEY||"xyz";h={host:u,port:t,protocol:y,apiKey:f}}return h}function iu(){let{protocol:u,host:t,port:y}=lu();return`${u}://${t}:${y}`}function su(){return{"Content-Type":"application/json","X-TYPESENSE-API-KEY":lu().apiKey}}function Z(u){return{taskUid:0,indexUid:u,status:"succeeded",type:"documentAddition",enqueuedAt:new Date}}async function Q(u,t,y){let f=await fetch(`${iu()}${t}`,{method:u,headers:su(),body:y==null?void 0:JSON.stringify(y)});if(!f.ok){let r=await f.text().catch(()=>"");throw Error(`[search/typesense] ${u} ${t} failed (${f.status}): ${r}`)}if(f.status===204)return;return await f.json()}function xt(u){if(!u)return;let t=[];for(let y in u){if(!Object.prototype.hasOwnProperty.call(u,y))continue;if(!xu.test(y))throw Error(`[search/typesense] Refusing to build filter with unsafe field name: ${y}`);let f=u[y];if(f==null||f==="")continue;let r=String(f).replace(/`/g,"\\`");t.push(`${y}:=\`${r}\``)}return t.length?t.join(" && "):void 0}function mt(u){if(!u)return;let t=[];for(let y in u){if(!Object.prototype.hasOwnProperty.call(u,y))continue;if(!xu.test(y))continue;let f=String(u[y]).toLowerCase()==="desc"?"desc":"asc";t.push(`${y}:${f}`)}return t.length?t.join(","):void 0}function dt(u){return"string"}async function C(u,t,y){try{await Q("GET",`/collections/${u}`);return}catch{}let f=new Set(["id"]),r=y?.searchableAttributes??[],$=y?.filterableAttributes??[],P=y?.sortableAttributes??[],O=y?.displayedAttributes??[];for(let S of[...r,...$,...P,...O])if(typeof S==="string")f.add(S);else for(let H of S.attributePatterns)f.add(H);if(t){for(let S of Object.keys(t))f.add(S);for(let S of f)if(t[S]===void 0)t[S]=""}let U=[...f].map((S)=>({name:S,type:S==="id"?"string":dt(t?.[S]),facet:$.includes(S),sort:P.includes(S),optional:S!=="id"}));await Q("POST","/collections",{name:u,fields:U})}function mu(u){let t={};for(let[y,f]of Object.entries(u)){if(f==null)continue;if(y==="id"||typeof f==="number"||typeof f==="bigint")t[y]=String(f);else t[y]=f}if(u.id!=null&&t.id==null)t.id=String(u.id);return t}async function at(u,t){let y=Number(t.page)||1,f=Number(t.perPage)||20,r=(y-1)*f,$=t.filter_by||xt(t.filter),P=mt(t.sort),O=t.queryBy?.join(",")||t.query_by||"id",U=t.query==null||t.query===""?"*":String(t.query),S=new URLSearchParams({q:U,query_by:O,per_page:String(f),page:String(y)});if($)S.set("filter_by",$);if(P)S.set("sort_by",P);let H=await Q("GET",`/collections/${u}/documents/search?${S}`),g=(H.hits??[]).map((W)=>W.document);return{hits:g,query:U,processingTimeMs:H.search_time_ms??0,limit:f,offset:r,estimatedTotalHits:H.found??g.length}}async function nu(u,t){let y=mu(t);return await C(u,y),await Q("POST",`/collections/${u}/documents?action=upsert`,y),Z(u)}async function pu(u,t){if(!Array.isArray(t)||t.length===0)return Z(u);let y=t.map(mu);await C(u,y[0]);let f=y.map(($)=>JSON.stringify($)).join(`
|
|
5
|
+
`),r=await fetch(`${iu()}/collections/${u}/documents/import?action=upsert`,{method:"POST",headers:{...su(),"Content-Type":"text/plain"},body:f});if(!r.ok){let $=await r.text().catch(()=>"");throw Error(`[search/typesense] bulk import failed (${r.status}): ${$}`)}return Z(u)}async function et(u,t){return await Q("DELETE",`/collections/${u}/documents/${String(t)}`),Z(u)}async function Nu(u){try{await Q("DELETE",`/collections/${u}`)}catch(t){st.debug(`[search/typesense] deleteIndex ${u}: ${t.message}`)}return Z(u)}async function uy(u){return await C(u),Z(u)}async function ty(u){return await Q("GET",`/collections/${u}`)}async function yy(u,t){return await C(u,void 0,t),Z(u)}async function uu(u){return((await Q("GET",`/collections/${u}`)).fields??[]).map((y)=>y.name).filter((y)=>y!=="id")}async function du(u){return((await Q("GET",`/collections/${u}`)).fields??[]).filter((y)=>y.facet).map((y)=>y.name)}async function au(u){return((await Q("GET",`/collections/${u}`)).fields??[]).map((y)=>y.name)}async function eu(u){return uu(u)}async function fy(u){return{searchableAttributes:await uu(u),filterableAttributes:await du(u),sortableAttributes:await au(u),displayedAttributes:await eu(u)}}function A(u,t){return Promise.resolve(Z("typesense"))}var h=null,xu,ry,wy;var yu=E(()=>{xu=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;ry={client:()=>({}),resetClient:()=>{h=null},search:at,getIndex:ty,createIndex:uy,deleteIndex:Nu,updateIndex:A,listAllIndexes:async()=>({results:[]}),listAllIndices:async()=>({results:[]}),addDocument:nu,addDocuments:pu,updateDocument:(u,t)=>nu(u,t),updateDocuments:(u,t)=>pu(u,t),deleteDocument:et,deleteDocuments:async(u)=>Nu(u),getDocument:async()=>Z("typesense"),getFilterableAttributes:du,updateFilterableAttributes:A,resetFilterableAttributes:A,updateDisplayedAttributes:A,resetDisplayedAttributes:A,getDisplayedAttributes:eu,updateSearchableAttributes:A,resetSearchableAttributes:A,getSearchableAttributes:uu,updateSortableAttributes:A,resetSortableAttributes:A,getSortableAttributes:au,getSettings:fy,updateSettings:yy,resetSettings:A,getPagination:async()=>({}),updatePagination:A,resetPagination:A,getSynonyms:async()=>({}),updateSynonyms:A,resetSynonyms:A,getRankingRules:async()=>[],updateRankingRules:A,resetRankingRules:A,getDistinctAttribute:async()=>null,updateDistinctAttribute:A,resetDistinctAttribute:A,getFaceting:async()=>({}),updateFaceting:A,resetFaceting:A,getTypoTolerance:async()=>({}),updateTypoTolerance:A,resetTypoTolerance:A,getDictionary:async()=>({}),updateDictionary:A,resetDictionary:A},wy=ry});var ru={};V(ru,{default:()=>wf});import{searchEngine as ut}from"@stacksjs/config";function w(){if(!fu)throw Error("The `meilisearch` search driver is selected but the `meilisearch` package is not installed. "+"It is an opt-in dependency \u2014 run `bun add meilisearch` to enable it, or switch drivers in `config/search-engine.ts`.");if(!c){let u=ut.meilisearch?.host||"http://127.0.0.1:7700",t=ut.meilisearch?.apiKey||"";if(!u)throw Error("Meilisearch host is not configured. Please specify a search engine host.");c=new fu({host:u,apiKey:t})}return c}function $y(){c=null}async function Py(u,t){let y=Number(t.page)||1,f=Number(t.perPage)||20,r=(y-1)*f,$=yf(t.filter),P=ff(t.sort);return await w().index(u).search(t.query,{limit:f,filter:$,sort:P,offset:r})}async function Sy(u,t){return await w().index(u).addDocuments([t])}async function _y(u,t){if(!Array.isArray(t))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(t.length<=1000)return await w().index(u).addDocuments(t);let f;for(let r=0;r<t.length;r+=1000){let $=t.slice(r,r+1000),P=await w().index(u).addDocuments($);if(!f)f=P}return f}async function Ay(u){return await w().getIndex(u)}async function Uy(u,t){return await w().createIndex(u,t)}async function Oy(u,t){return await w().updateIndex(u,t)}async function gy(u,t){return await w().index(u).updateDocuments([t])}async function oy(u,t){return await w().index(u).updateDocuments(t)}async function Jy(u,t){return await w().index(u).deleteDocument(t)}async function Gy(u,t){return await w().index(u).deleteDocuments({filter:t})}async function Hy(u,t,y){return await w().index(u).getDocument(t,y)}async function My(u){return await w().deleteIndex(u)}async function tt(){return await w().getIndexes()}async function Qy(u){return w().index(u).getFilterableAttributes()}async function Yy(u,t){return w().index(u).updateFilterableAttributes(t)}async function Zy(u){return w().index(u).resetFilterableAttributes()}async function Wy(u,t){return w().index(u).updateSearchableAttributes(t)}async function Xy(u){return w().index(u).resetSearchableAttributes()}async function zy(u){return w().index(u).getSearchableAttributes()}async function Vy(u,t){return w().index(u).updateSortableAttributes(t)}async function Ey(u){return w().index(u).resetSortableAttributes()}async function Ky(u){return w().index(u).getSortableAttributes()}async function Ly(u,t){return w().index(u).updateDisplayedAttributes(t)}async function By(u){return w().index(u).getDisplayedAttributes()}async function Ry(u){return w().index(u).resetDisplayedAttributes()}async function Ty(u){return w().index(u).getSettings()}async function hy(u,t){return w().index(u).updateSettings(t)}async function Cy(u){return w().index(u).resetSettings()}async function cy(u){return w().index(u).getPagination()}async function Fy(u,t){return w().index(u).updatePagination(t)}async function by(u){return w().index(u).resetPagination()}async function vy(u){return w().index(u).getSynonyms()}async function qy(u,t){return w().index(u).updateSynonyms(t)}async function ky(u){return w().index(u).resetSynonyms()}async function Iy(u){return w().index(u).getRankingRules()}async function jy(u,t){return w().index(u).updateRankingRules(t)}async function Dy(u){return w().index(u).resetRankingRules()}async function ny(u){return w().index(u).getDistinctAttribute()}async function py(u,t){return w().index(u).updateDistinctAttribute(t)}async function Ny(u){return w().index(u).resetDistinctAttribute()}async function ly(u){return w().index(u).getFaceting()}async function iy(u,t){return w().index(u).updateFaceting(t)}async function sy(u){return w().index(u).resetFaceting()}async function xy(u){return w().index(u).getTypoTolerance()}async function my(u,t){return w().index(u).updateTypoTolerance(t)}async function dy(u){return w().index(u).resetTypoTolerance()}async function ay(u){return w().index(u).getDictionary()}async function ey(u,t){return w().index(u).updateDictionary(t)}async function uf(u){return w().index(u).resetDictionary()}function yf(u){if(!u)return[];let t=[];for(let y in u){if(!Object.prototype.hasOwnProperty.call(u,y))continue;if(!tf.test(y))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${y}`);let f=u[y],r=String(f).replace(/'/g,"\\'");t.push(`${y}='${r}'`)}return t}function ff(u){if(!u)return[];let t=[];for(let y in u)if(Object.prototype.hasOwnProperty.call(u,y)){let r=String(u[y]).toLowerCase()==="desc"?"desc":"asc";t.push(`${y}:${r}`)}return t}var fu,c=null,tf,rf,wf;var wu=E(async()=>{try{({Meilisearch:fu}=await import("meilisearch"))}catch{}tf=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;rf={client:w,resetClient:$y,search:Py,getIndex:Ay,createIndex:Uy,deleteIndex:My,updateIndex:Oy,listAllIndexes:tt,listAllIndices:tt,addDocument:Sy,addDocuments:_y,updateDocument:gy,updateDocuments:oy,deleteDocument:Jy,deleteDocuments:Gy,getDocument:Hy,getFilterableAttributes:Qy,updateFilterableAttributes:Yy,resetFilterableAttributes:Zy,updateDisplayedAttributes:Ly,resetDisplayedAttributes:Ry,getDisplayedAttributes:By,updateSearchableAttributes:Wy,resetSearchableAttributes:Xy,getSearchableAttributes:zy,updateSortableAttributes:Vy,resetSortableAttributes:Ey,getSortableAttributes:Ky,getSettings:Ty,updateSettings:hy,resetSettings:Cy,getPagination:cy,updatePagination:Fy,resetPagination:by,getSynonyms:vy,updateSynonyms:qy,resetSynonyms:ky,getRankingRules:Iy,updateRankingRules:jy,resetRankingRules:Dy,getDistinctAttribute:ny,updateDistinctAttribute:py,resetDistinctAttribute:Ny,getFaceting:ly,updateFaceting:iy,resetFaceting:sy,getTypoTolerance:xy,updateTypoTolerance:my,resetTypoTolerance:dy,getDictionary:ay,updateDictionary:ey,resetDictionary:uf},wf=rf});import{overridesReady as $f,searchEngine as Pf}from"@stacksjs/config";import{err as $t,ok as Pt}from"@stacksjs/error-handling";import{log as X}from"@stacksjs/logging";import{getModelName as St,getTableName as _t}from"@stacksjs/orm";import{path as Pu}from"@stacksjs/path";import{useSearchEngine as At}from"@stacksjs/search-engine";import{globSync as Ut}from"@stacksjs/storage";import{snakeCase as K}from"@stacksjs/strings";async function Qf(u){try{let t=Ut([Pu.userModelsPath("*.ts"),Pu.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:y,updateSettings:f}=At();for(let r of t){let $=(await import(r)).default,P=$.traits?.useSearch,O=_t($,r),U=St($,r);if(u&&U!==u)continue;if(P&&(typeof P==="boolean"||typeof P==="object")){if(typeof P==="object")await f(O,{searchableAttributes:(P.searchable??[]).map((o)=>K(o)),filterableAttributes:(P.filterable??[]).map((o)=>K(o)),sortableAttributes:(P.sortable??[]).map((o)=>K(o)),displayedAttributes:(P.displayable??[]).map((o)=>K(o))});let S=$;if(typeof S.all!=="function"){X.warn(`[search] ${U}: model has no .all() \u2014 run generate:model-files or use defineModel`);continue}let H=typeof P==="object"?P.denormalize:void 0,g=H?Array.from(new Set(Object.values(H).map((o)=>o.split(".")[0]).filter((o)=>Boolean(o)))):[],W;if(g.length>0&&typeof S.query==="function")try{W=await S.query().with(...g).get()}catch(o){X.warn(`[search] ${U}: eager-load of [${g.join(", ")}] failed \u2014 falling back to .all(); denormalized fields will be null. (${o.message})`),W=await S.all()}else W=await S.all();let $u=0,F=0;for(let o of W)try{let z=o.toSearchableObject?.();if(z==null){F++;continue}await y(O,z),$u++}catch(z){F++,X.warn(`[search] Skipped ${U}#${o.id??"?"}: ${z.message}`)}X.info(`[search] ${U}: imported ${$u}, skipped ${F}`)}}return X.info(u),Pt("Successfully imported models to search engine!")}catch(t){return X.error(t),$t(t?.message||String(t))}}import{ok as Ot}from"@stacksjs/error-handling";import{log as gt}from"@stacksjs/logging";import{getModelName as ot,getTableName as Jt}from"@stacksjs/orm";import{path as Su}from"@stacksjs/path";import{useSearchEngine as Gt}from"@stacksjs/search-engine";import{globSync as Ht}from"@stacksjs/storage";async function Kf(u){try{let t=Ht([Su.userModelsPath("*.ts"),Su.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:y}=Gt();for(let f of t){let r=(await import(f)).default,$=r.traits?.useSearch,P=Jt(r,f),O=ot(r,f);if(u&&O!==u)continue;if($&&(typeof $==="boolean"||typeof $==="object"))await y(P)}return Ot("Successfully flushed all model data from search engine!")}catch(t){return gt.error(t),t(t)}}import{ok as Mt}from"@stacksjs/error-handling";import{log as Qt}from"@stacksjs/logging";import{getTableName as Yt}from"@stacksjs/orm";import{path as Zt}from"@stacksjs/path";import{useSearchEngine as Wt}from"@stacksjs/search-engine";async function cf(u){try{let t=Zt.userModelsPath(`${u}.ts`),y=(await import(t)).default,{getFilterableAttributes:f,getSortableAttributes:r,getSearchableAttributes:$,getDisplayedAttributes:P}=Wt(),O=y.traits?.useSearch,U=Yt(y,t);if(O&&typeof O==="object"){let S=await P(U),H=await f(U),g=await r(U),W=await $(U);console.table({displayedAttributes:S,filterableAttributes:H,sortableAttributes:g,searchableAttributes:W})}return Mt("Successfully update index settings!")}catch(t){return Qt.error(t),t(t)}}import{err as Xt,ok as zt}from"@stacksjs/error-handling";import{log as Vt}from"@stacksjs/logging";import{getTableName as Et}from"@stacksjs/orm";import{path as _u}from"@stacksjs/path";import{useSearchEngine as Kt}from"@stacksjs/search-engine";import{globSync as Lt}from"@stacksjs/storage";import{snakeCase as b}from"@stacksjs/strings";async function nf(){try{let u=Lt([_u.userModelsPath("*.ts"),_u.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:t}=Kt();for(let y of u){let f=(await import(y)).default,r=f.traits?.useSearch,$=Et(f,y);if(r&&typeof r==="object"){let P=(typeof f.traits?.useSearch==="object"&&f.traits?.useSearch.filterable||[]).map((S)=>b(S)),O=(typeof f.traits?.useSearch==="object"&&f.traits?.useSearch.sortable||[]).map((S)=>b(S)),U=(typeof f.traits?.useSearch==="object"&&f.traits?.useSearch.searchable||[]).map((S)=>b(S));await t($,{filterableAttributes:P,sortableAttributes:O,searchableAttributes:U})}}return zt("Successfully update index settings!")}catch(u){return Vt.error(u),Xt(u?.message||String(u))}}await $f;function Sf(u){if(u==="algolia")return Promise.resolve().then(() => (q(),v));if(u==="opensearch")return Promise.resolve().then(() => (e(),a));if(u==="typesense")return Promise.resolve().then(() => (yu(),tu));return wu().then(() => ru)}var _f=await Sf(Pf.driver),Af=_f.default;function ef(){return Af}function ur(){return Promise.resolve().then(() => (q(),v)).then((u)=>u.default)}function tr(){return wu().then(() => ru).then((u)=>u.default)}function yr(){return Promise.resolve().then(() => (e(),a)).then((u)=>u.default)}function fr(){return Promise.resolve().then(() => (yu(),tu)).then((u)=>u.default)}export{fr as useTypesense,ef as useSearchEngine,yr as useOpensearch,tr as useMeilisearch,ur as useAlgolia,nf as updateIndexSettings,cf as listIndexSettings,Qf as importModelDocuments,Kf as flushModelDocuments};
|
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.70.
|
|
5
|
+
"version": "0.70.230",
|
|
6
6
|
"description": "The Stacks search engine integrations.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@stacksjs/config": "0.70.
|
|
70
|
+
"@stacksjs/config": "0.70.230",
|
|
71
71
|
"better-dx": "^0.2.17",
|
|
72
72
|
"meilisearch": "^0.59.0"
|
|
73
73
|
}
|