@stacksjs/search-engine 0.70.310 → 0.70.311
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 +3 -3
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
2
|
+
var fy=Object.defineProperty;var $y=(u)=>u;function wy(u,y){this[u]=$y.bind(null,y)}var E=(u,y)=>{for(var f in y)fy(u,f,{get:y[f],enumerable:!0,configurable:!0,set:wy.bind(y,f)})};var K=(u,y)=>()=>(u&&(y=u(u=0)),y);var Py=import.meta.require;var q={};E(q,{waitTask:()=>Fu,setSettings:()=>Ku,searchSynonyms:()=>ou,searchRules:()=>qu,search:()=>Gu,saveSynonym:()=>hu,saveRule:()=>cu,saveObjects:()=>Mu,saveObject:()=>gu,partialUpdateObject:()=>Qu,multiSearch:()=>Hu,moveIndex:()=>Ru,listIndices:()=>Lu,indexExists:()=>Cu,getSettings:()=>Eu,getObjects:()=>Vu,getObject:()=>Xu,deleteObjects:()=>Zu,deleteObject:()=>Yu,deleteIndex:()=>Tu,deleteBy:()=>Wu,default:()=>Fy,copyIndex:()=>Bu,configure:()=>Ju,clearSynonyms:()=>bu,clearRules:()=>ku,clearObjects:()=>zu,browse:()=>vu,algolia:()=>ju});import{searchEngine as ru}from"@stacksjs/config";import{log as Ry}from"@stacksjs/logging";function Ou(){if(!B){let u=ru.algolia?.appId||process.env.ALGOLIA_APP_ID||"",y=ru.algolia?.apiKey||process.env.ALGOLIA_API_KEY||"";if(!u||!y)throw Ry.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.");B={appId:u,apiKey:y}}return B}function Ty(){let{appId:u}=Ou();return`https://${u}.algolia.net`}function Cy(){let{appId:u,apiKey:y}=Ou();return{"X-Algolia-Application-Id":u,"X-Algolia-API-Key":y,"Content-Type":"application/json"}}async function A(u,y,f){let $=await fetch(`${Ty()}${y}`,{method:u,headers:Cy(),body:f?JSON.stringify(f):void 0});if(!$.ok){let w=await $.json().catch(()=>({message:$.statusText}));throw Error(`Algolia API error: ${w.message||$.statusText}`)}return $.json()}function Ju(u){B=u}async function Gu(u,y={}){return A("POST",`/1/indexes/${u}/query`,{query:y.query||"",page:y.page||0,hitsPerPage:y.hitsPerPage||20,filters:y.filters,facets:y.facets,attributesToRetrieve:y.attributesToRetrieve,attributesToHighlight:y.attributesToHighlight,attributesToSnippet:y.attributesToSnippet})}async function Hu(u){return A("POST","/1/indexes/*/queries",{requests:u.map((y)=>({indexName:y.indexName,params:new URLSearchParams({query:y.params?.query||"",page:String(y.params?.page||0),hitsPerPage:String(y.params?.hitsPerPage||20),...y.params?.filters&&{filters:y.params.filters}}).toString()}))})}async function gu(u,y,f){if(f)return A("PUT",`/1/indexes/${u}/${f}`,y);return A("POST",`/1/indexes/${u}`,y)}async function Mu(u,y){return A("POST",`/1/indexes/${u}/batch`,{requests:y.map((f)=>({action:f.objectID?"updateObject":"addObject",body:f}))})}async function Qu(u,y,f,$=!0){return A("POST",`/1/indexes/${u}/${y}/partial${$?"":"?createIfNotExists=false"}`,f)}async function Yu(u,y){return A("DELETE",`/1/indexes/${u}/${y}`)}async function Zu(u,y){return A("POST",`/1/indexes/${u}/batch`,{requests:y.map((f)=>({action:"deleteObject",body:{objectID:f}}))})}async function Wu(u,y){return A("POST",`/1/indexes/${u}/deleteByQuery`,{filters:y})}async function Xu(u,y,f){let $=f?`?attributesToRetrieve=${f.join(",")}`:"";return A("GET",`/1/indexes/${u}/${y}${$}`)}async function Vu(u,y,f){return A("POST","/1/indexes/*/objects",{requests:y.map(($)=>({indexName:u,objectID:$,attributesToRetrieve:f}))})}async function zu(u){return A("POST",`/1/indexes/${u}/clear`)}async function Eu(u){return A("GET",`/1/indexes/${u}/settings`)}async function Ku(u,y,f=!1){return A("PUT",`/1/indexes/${u}/settings${f?"?forwardToReplicas=true":""}`,y)}async function Lu(){return A("GET","/1/indexes")}async function Bu(u,y,f){return A("POST",`/1/indexes/${u}/operation`,{operation:"copy",destination:y,scope:f})}async function Ru(u,y){return A("POST",`/1/indexes/${u}/operation`,{operation:"move",destination:y})}async function Tu(u){return A("DELETE",`/1/indexes/${u}`)}async function Cu(u){try{return await A("GET",`/1/indexes/${u}/settings`),!0}catch{return!1}}async function Fu(u,y,f=1e4,$=100){let w=Date.now();while(Date.now()-w<f){let S=await A("GET",`/1/indexes/${u}/task/${y}`);if(S.status==="published")return S;await new Promise((_)=>setTimeout(_,$))}throw Error(`Task ${y} timed out after ${f}ms`)}async function hu(u,y,f=!1){return A("PUT",`/1/indexes/${u}/synonyms/${y.objectID}${f?"?forwardToReplicas=true":""}`,y)}async function ou(u,y="",f,$=0,w=20){return A("POST",`/1/indexes/${u}/synonyms/search`,{query:y,type:f,page:$,hitsPerPage:w})}async function bu(u,y=!1){return A("POST",`/1/indexes/${u}/synonyms/clear${y?"?forwardToReplicas=true":""}`)}async function cu(u,y,f=!1){return A("PUT",`/1/indexes/${u}/rules/${y.objectID}${f?"?forwardToReplicas=true":""}`,y)}async function qu(u,y="",f,$,w=0,S=20){return A("POST",`/1/indexes/${u}/rules/search`,{query:y,anchoring:f,context:$,page:w,hitsPerPage:S})}async function ku(u,y=!1){return A("POST",`/1/indexes/${u}/rules/clear${y?"?forwardToReplicas=true":""}`)}async function*vu(u,y={}){let f;do{let $=await A("POST",`/1/indexes/${u}/browse`,{...y,cursor:f});for(let w of $.hits)yield w;f=$.cursor}while(f)}var B=null,ju,Fy;var k=K(()=>{ju={configure:Ju,search:Gu,multiSearch:Hu,saveObject:gu,saveObjects:Mu,partialUpdateObject:Qu,deleteObject:Yu,deleteObjects:Zu,deleteBy:Wu,getObject:Xu,getObjects:Vu,clearObjects:zu,getSettings:Eu,setSettings:Ku,listIndices:Lu,copyIndex:Bu,moveIndex:Ru,deleteIndex:Tu,indexExists:Cu,waitTask:Fu,saveSynonym:hu,searchSynonyms:ou,clearSynonyms:bu,saveRule:cu,searchRules:qu,clearRules:ku,browse:vu},Fy=ju});var a={};E(a,{default:()=>ly});import{searchEngine as hy}from"@stacksjs/config";function m(){let u=hy.opensearch,y=String(u?.host||"localhost").replace(/\/+$/,""),f=/^https?:\/\//i.test(y),$=String(u?.protocol||"http").replace(/:$/,""),w=Number(u?.port||9200),S=`${$}://${y}${w?`:${w}`:""}`;if(f){let _=new URL(y);if(!_.port&&u?.port)_.port=String(u.port);S=_.toString().replace(/\/+$/,"")}return{baseUrl:S,auth:String(u?.auth||"")}}function oy(u="application/json"){let{auth:y}=m();return{"Content-Type":u,...y?{Authorization:`Basic ${btoa(y)}`}:{}}}async function H(u,y,f,$){let{baseUrl:w}=m(),S=await fetch(`${w}${y}`,{method:u,headers:oy($),body:f===void 0?void 0:typeof f==="string"?f:JSON.stringify(f)});if(!S.ok){let O=await S.text();throw new T(S.status,u,y,O||S.statusText)}let _=await S.text();return _?JSON.parse(_):{}}function g(u){return`/${encodeURIComponent(u)}`}function Z(u,y){return{taskUid:Date.now(),indexUid:u,status:"succeeded",type:y,enqueuedAt:new Date().toISOString()}}async function d(u){return(await H("GET",`${g(u)}/_mapping`))[u]?.mappings?._meta?.stacks||{}}async function R(u,y){let f;try{f=await d(u)}catch($){if(!($ instanceof T)||$.status!==404)throw $;await H("PUT",g(u)),f={}}return await H("PUT",`${g(u)}/_mapping`,{_meta:{stacks:{...f,...y}}}),Z(u,"settingsUpdate")}async function by(u,y={}){if(typeof y==="string")y={q:y};let f=String(y.q??y.query??""),$=Math.max(1,Number(y.limit??y.perPage??20)),w=Math.max(0,Number(y.offset??(Number(y.page||1)-1)*$)),S=Array.isArray(y.filter)?y.filter:y.filter?[y.filter]:[],_=f?{multi_match:{query:f,fields:y.attributesToSearchOn||["*"]}}:{match_all:{}},O=S.length>0?{bool:{must:[_],filter:S.map((J)=>({query_string:{query:typeof J==="string"?J:JSON.stringify(J)}}))}}:_,r=await H("POST",`${g(u)}/_search`,{query:O,from:w,size:$,...y.sort?{sort:y.sort}:{},...y.attributesToRetrieve?{_source:y.attributesToRetrieve}:{}}),t=typeof r.hits?.total==="number"?r.hits.total:Number(r.hits?.total?.value||0);return{hits:(r.hits?.hits||[]).map((J)=>({id:J._source?.id??J._id,...J._source})),estimatedTotalHits:t,processingTimeMs:Number(r.took||0),query:f,limit:$,offset:w}}async function cy(u,y={}){return await H("PUT",g(u),y),Z(u,"indexCreation")}async function qy(u){return await H("GET",g(u))}async function ky(u,y){return await H("PUT",`${g(u)}/_settings`,y),Z(u,"indexUpdate")}async function vy(u){try{await H("DELETE",g(u))}catch(y){if(!(y instanceof T)||y.status!==404)throw y}return Z(u,"indexDeletion")}async function Iu(){let y=(await H("GET","/_cat/indices?format=json")).map((f)=>({uid:f.index,primaryKey:null,createdAt:null,updatedAt:null}));return{results:y,total:y.length,limit:y.length,offset:0}}async function Du(u,y){let f=y?.id??y?.objectID,$=f===void 0||f===null?`${g(u)}/_doc?refresh=wait_for`:`${g(u)}/_doc/${encodeURIComponent(String(f))}?refresh=wait_for`;return await H(f===void 0||f===null?"POST":"PUT",$,y),Z(u,"documentAdditionOrUpdate")}async function pu(u,y){if(!Array.isArray(y))throw TypeError("[search/opensearch] addDocuments requires an array of documents");if(y.length===0)return Z(u,"documentAdditionOrUpdate");let f=y.flatMap((w)=>{let S=w?.id??w?.objectID;return[JSON.stringify({index:{_index:u,...S===void 0||S===null?{}:{_id:S}}}),JSON.stringify(w)]}),$=await H("POST","/_bulk?refresh=wait_for",`${f.join(`
|
|
3
3
|
`)}
|
|
4
|
-
`,"application/x-ndjson");if(
|
|
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};
|
|
4
|
+
`,"application/x-ndjson");if($.errors){let w=$.items?.filter((S)=>Number(S.index?.status||0)>=400)||[];throw Error(`[search/opensearch] Bulk indexing failed for ${w.length} document(s)`)}return Z(u,"documentAdditionOrUpdate")}async function jy(u,y,f){let $=f?`?_source=${encodeURIComponent(Array.isArray(f)?f.join(","):String(f))}`:"",w=await H("GET",`${g(u)}/_doc/${encodeURIComponent(String(y))}${$}`);return{id:w._source?.id??w._id,...w._source}}async function Iy(u,y){return await H("DELETE",`${g(u)}/_doc/${encodeURIComponent(String(y))}?refresh=wait_for`),Z(u,"documentDeletion")}async function Dy(u,y){let f=(Array.isArray(y)?y:[y]).filter(Boolean);return await H("POST",`${g(u)}/_delete_by_query?refresh=true`,{query:f.length>0?{bool:{filter:f.map(($)=>({query_string:{query:$}}))}}:{match_all:{}}}),Z(u,"documentDeletion")}function Q(u,y){return{get:async(f)=>(await d(f))[u]??y,update:async(f,$)=>R(f,{[u]:$}),reset:async(f)=>R(f,{[u]:y})}}async function py(u){let y=await d(u);return{filterableAttributes:y.filterableAttributes||[],searchableAttributes:y.searchableAttributes||[],sortableAttributes:y.sortableAttributes||[],displayedAttributes:y.displayedAttributes||[],pagination:y.pagination||{},synonyms:y.synonyms||{},rankingRules:y.rankingRules||[],distinctAttribute:y.distinctAttribute??null,faceting:y.faceting||{},typoTolerance:y.typoTolerance||{},dictionary:y.dictionary||[]}}async function ny(u,y){let $=Object.fromEntries(["filterableAttributes","searchableAttributes","sortableAttributes","displayedAttributes","pagination","synonyms","rankingRules","distinctAttribute","faceting","typoTolerance","dictionary"].filter((w)=>(w in y)).map((w)=>[w,y[w]]));return await R(u,$)}async function Ny(u){return await R(u,{filterableAttributes:[],searchableAttributes:[],sortableAttributes:[],displayedAttributes:[],pagination:{},synonyms:{},rankingRules:[],distinctAttribute:null,faceting:{},typoTolerance:{},dictionary:[]})}var T,v,j,I,D,p,n,N,i,l,s,x,iy,ly;var e=K(()=>{T=class T extends Error{status;constructor(u,y,f,$){super(`[search/opensearch] ${y} ${f} failed (${u}): ${$}`);this.status=u}};v=Q("filterableAttributes",[]),j=Q("searchableAttributes",[]),I=Q("sortableAttributes",[]),D=Q("displayedAttributes",[]),p=Q("pagination",{}),n=Q("synonyms",{}),N=Q("rankingRules",[]),i=Q("distinctAttribute",null),l=Q("faceting",{}),s=Q("typoTolerance",{}),x=Q("dictionary",[]);iy={client:()=>({request:H,configuration:m}),search:by,createIndex:cy,getIndex:qy,updateIndex:ky,deleteIndex:vy,listAllIndexes:Iu,listAllIndices:Iu,addDocument:Du,addDocuments:pu,updateDocument:Du,updateDocuments:pu,getDocument:jy,deleteDocument:Iy,deleteDocuments:Dy,getFilterableAttributes:v.get,updateFilterableAttributes:v.update,resetFilterableAttributes:v.reset,getSearchableAttributes:j.get,updateSearchableAttributes:j.update,resetSearchableAttributes:j.reset,getSortableAttributes:I.get,updateSortableAttributes:I.update,resetSortableAttributes:I.reset,getDisplayedAttributes:D.get,updateDisplayedAttributes:D.update,resetDisplayedAttributes:D.reset,getSettings:py,updateSettings:ny,resetSettings:Ny,getPagination:p.get,updatePagination:p.update,resetPagination:p.reset,getSynonyms:n.get,updateSynonyms:n.update,resetSynonyms:n.reset,getRankingRules:N.get,updateRankingRules:N.update,resetRankingRules:N.reset,getDistinctAttribute:i.get,updateDistinctAttribute:i.update,resetDistinctAttribute:i.reset,getFaceting:l.get,updateFaceting:l.update,resetFaceting:l.reset,getTypoTolerance:s.get,updateTypoTolerance:s.update,resetTypoTolerance:s.reset,getDictionary:x.get,updateDictionary:x.update,resetDictionary:x.reset},ly=iy});var fu={};E(fu,{default:()=>Pf});import{searchEngine as C}from"@stacksjs/config";import{log as sy}from"@stacksjs/logging";function lu(){if(!F){let u=C.typesense?.host||process.env.TYPESENSE_HOST||"127.0.0.1",y=C.typesense?.port||Number(process.env.TYPESENSE_PORT||8108),f=C.typesense?.protocol||process.env.TYPESENSE_PROTOCOL||"http",$=C.typesense?.apiKey||process.env.TYPESENSE_API_KEY||"xyz";F={host:u,port:y,protocol:f,apiKey:$}}return F}function su(){let{protocol:u,host:y,port:f}=lu();return`${u}://${y}:${f}`}function xu(){return{"Content-Type":"application/json","X-TYPESENSE-API-KEY":lu().apiKey}}function W(u){return{taskUid:0,indexUid:u,status:"succeeded",type:"documentAddition",enqueuedAt:new Date}}async function Y(u,y,f){let $=await fetch(`${su()}${y}`,{method:u,headers:xu(),body:f==null?void 0:JSON.stringify(f)});if(!$.ok){let w=await $.text().catch(()=>"");throw Error(`[search/typesense] ${u} ${y} failed (${$.status}): ${w}`)}if($.status===204)return;return await $.json()}function xy(u){if(!u)return;let y=[];for(let f in u){if(!Object.prototype.hasOwnProperty.call(u,f))continue;if(!mu.test(f))throw Error(`[search/typesense] Refusing to build filter with unsafe field name: ${f}`);let $=u[f];if($==null||$==="")continue;let w=String($).replace(/`/g,"\\`");y.push(`${f}:=\`${w}\``)}return y.length?y.join(" && "):void 0}function my(u){if(!u)return;let y=[];for(let f in u){if(!Object.prototype.hasOwnProperty.call(u,f))continue;if(!mu.test(f))continue;let $=String(u[f]).toLowerCase()==="desc"?"desc":"asc";y.push(`${f}:${$}`)}return y.length?y.join(","):void 0}function dy(u){if(typeof u==="boolean")return"bool";if(typeof u==="number")return Number.isInteger(u)?"int64":"float";if(Array.isArray(u)){let y=u[0];if(typeof y==="boolean")return"bool[]";if(typeof y==="number")return Number.isInteger(y)?"int64[]":"float[]";return"string[]"}return"string"}async function h(u,y,f){try{await Y("GET",`/collections/${u}`);return}catch{}let $=new Set(["id"]),w=f?.searchableAttributes??[],S=f?.filterableAttributes??[],_=f?.sortableAttributes??[],O=f?.displayedAttributes??[];for(let t of[...w,...S,..._,...O])if(typeof t==="string")$.add(t);else for(let M of t.attributePatterns)$.add(M);if(y){for(let t of Object.keys(y))$.add(t);for(let t of $)if(y[t]===void 0)y[t]=""}let r=[...$].map((t)=>({name:t,type:t==="id"?"string":dy(y?.[t]),facet:S.includes(t),sort:_.includes(t),optional:t!=="id"}));await Y("POST","/collections",{name:u,fields:r})}function uu(u){let y={};for(let[f,$]of Object.entries(u)){if($==null)continue;if(f==="id"||typeof $==="bigint")y[f]=String($);else y[f]=$}if(u.id!=null&&y.id==null)y.id=String(u.id);return y}async function ay(u,y){let f=Number(y.page)||1,$=Number(y.perPage)||20,w=(f-1)*$,S=y.filter_by||xy(y.filter),_=my(y.sort),O=y.queryBy?.join(",")||y.query_by||"id",r=y.query==null||y.query===""?"*":String(y.query),t=new URLSearchParams({q:r,query_by:O,per_page:String($),page:String(f)});if(S)t.set("filter_by",S);if(_)t.set("sort_by",_);let M=await Y("GET",`/collections/${u}/documents/search?${t}`),J=(M.hits??[]).map((X)=>X.document);return{hits:J,query:r,processingTimeMs:M.search_time_ms??0,limit:$,offset:w,estimatedTotalHits:M.found??J.length}}async function nu(u,y){let f=uu(y);return await h(u,f),await Y("POST",`/collections/${u}/documents?action=upsert`,f),W(u)}async function Nu(u,y){if(!Array.isArray(y)||y.length===0)return W(u);let f=y.map(uu);await h(u,f[0]);let $=f.map((S)=>JSON.stringify(S)).join(`
|
|
5
|
+
`),w=await fetch(`${su()}/collections/${u}/documents/import?action=upsert`,{method:"POST",headers:{...xu(),"Content-Type":"text/plain"},body:$});if(!w.ok){let S=await w.text().catch(()=>"");throw Error(`[search/typesense] bulk import failed (${w.status}): ${S}`)}return W(u)}async function ey(u,y){return await Y("DELETE",`/collections/${u}/documents/${String(y)}`),W(u)}async function iu(u){try{await Y("DELETE",`/collections/${u}`)}catch(y){sy.debug(`[search/typesense] deleteIndex ${u}: ${y.message}`)}return W(u)}async function uf(u,y){let f=y?.sampleDocument;return await h(u,f?uu(f):void 0,y?.settings),W(u)}async function yf(u){return await Y("GET",`/collections/${u}`)}async function ff(u,y){return await h(u,void 0,y),W(u)}async function yu(u){return((await Y("GET",`/collections/${u}`)).fields??[]).map((f)=>f.name).filter((f)=>f!=="id")}async function du(u){return((await Y("GET",`/collections/${u}`)).fields??[]).filter((f)=>f.facet).map((f)=>f.name)}async function au(u){return((await Y("GET",`/collections/${u}`)).fields??[]).map((f)=>f.name)}async function eu(u){return yu(u)}async function $f(u){return{searchableAttributes:await yu(u),filterableAttributes:await du(u),sortableAttributes:await au(u),displayedAttributes:await eu(u)}}function U(u,y){return Promise.resolve(W("typesense"))}var F=null,mu,wf,Pf;var $u=K(()=>{mu=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;wf={client:()=>({}),resetClient:()=>{F=null},search:ay,getIndex:yf,createIndex:uf,deleteIndex:iu,updateIndex:U,listAllIndexes:async()=>({results:[]}),listAllIndices:async()=>({results:[]}),addDocument:nu,addDocuments:Nu,updateDocument:(u,y)=>nu(u,y),updateDocuments:(u,y)=>Nu(u,y),deleteDocument:ey,deleteDocuments:async(u)=>iu(u),getDocument:async()=>W("typesense"),getFilterableAttributes:du,updateFilterableAttributes:U,resetFilterableAttributes:U,updateDisplayedAttributes:U,resetDisplayedAttributes:U,getDisplayedAttributes:eu,updateSearchableAttributes:U,resetSearchableAttributes:U,getSearchableAttributes:yu,updateSortableAttributes:U,resetSortableAttributes:U,getSortableAttributes:au,getSettings:$f,updateSettings:ff,resetSettings:U,getPagination:async()=>({}),updatePagination:U,resetPagination:U,getSynonyms:async()=>({}),updateSynonyms:U,resetSynonyms:U,getRankingRules:async()=>[],updateRankingRules:U,resetRankingRules:U,getDistinctAttribute:async()=>null,updateDistinctAttribute:U,resetDistinctAttribute:U,getFaceting:async()=>({}),updateFaceting:U,resetFaceting:U,getTypoTolerance:async()=>({}),updateTypoTolerance:U,resetTypoTolerance:U,getDictionary:async()=>({}),updateDictionary:U,resetDictionary:U},Pf=wf});var Pu={};E(Pu,{default:()=>S$});import{searchEngine as uy}from"@stacksjs/config";function P(){if(!wu)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(!o){let u=uy.meilisearch?.host||"http://127.0.0.1:7700",y=uy.meilisearch?.apiKey||"";if(!u)throw Error("Meilisearch host is not configured. Please specify a search engine host.");o=new wu({host:u,apiKey:y})}return o}function Sf(){o=null}async function _f(u,y){let f=Number(y.page)||1,$=Number(y.perPage)||20,w=(f-1)*$,S=$$(y.filter),_=w$(y.sort);return await P().index(u).search(y.query,{limit:$,filter:S,sort:_,offset:w})}async function tf(u,y){return await P().index(u).addDocuments([y])}async function Af(u,y){if(!Array.isArray(y))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(y.length<=1000)return await P().index(u).addDocuments(y);let $;for(let w=0;w<y.length;w+=1000){let S=y.slice(w,w+1000),_=await P().index(u).addDocuments(S);if(!$)$=_}return $}async function Uf(u){return await P().getIndex(u)}async function rf(u,y){return await P().createIndex(u,y)}async function Of(u,y){return await P().updateIndex(u,y)}async function Jf(u,y){return await P().index(u).updateDocuments([y])}async function Gf(u,y){return await P().index(u).updateDocuments(y)}async function Hf(u,y){return await P().index(u).deleteDocument(y)}async function gf(u,y){return await P().index(u).deleteDocuments({filter:y})}async function Mf(u,y,f){return await P().index(u).getDocument(y,f)}async function Qf(u){return await P().deleteIndex(u)}async function yy(){return await P().getIndexes()}async function Yf(u){return P().index(u).getFilterableAttributes()}async function Zf(u,y){return P().index(u).updateFilterableAttributes(y)}async function Wf(u){return P().index(u).resetFilterableAttributes()}async function Xf(u,y){return P().index(u).updateSearchableAttributes(y)}async function Vf(u){return P().index(u).resetSearchableAttributes()}async function zf(u){return P().index(u).getSearchableAttributes()}async function Ef(u,y){return P().index(u).updateSortableAttributes(y)}async function Kf(u){return P().index(u).resetSortableAttributes()}async function Lf(u){return P().index(u).getSortableAttributes()}async function Bf(u,y){return P().index(u).updateDisplayedAttributes(y)}async function Rf(u){return P().index(u).getDisplayedAttributes()}async function Tf(u){return P().index(u).resetDisplayedAttributes()}async function Cf(u){return P().index(u).getSettings()}async function Ff(u,y){return P().index(u).updateSettings(y)}async function hf(u){return P().index(u).resetSettings()}async function of(u){return P().index(u).getPagination()}async function bf(u,y){return P().index(u).updatePagination(y)}async function cf(u){return P().index(u).resetPagination()}async function qf(u){return P().index(u).getSynonyms()}async function kf(u,y){return P().index(u).updateSynonyms(y)}async function vf(u){return P().index(u).resetSynonyms()}async function jf(u){return P().index(u).getRankingRules()}async function If(u,y){return P().index(u).updateRankingRules(y)}async function Df(u){return P().index(u).resetRankingRules()}async function pf(u){return P().index(u).getDistinctAttribute()}async function nf(u,y){return P().index(u).updateDistinctAttribute(y)}async function Nf(u){return P().index(u).resetDistinctAttribute()}async function lf(u){return P().index(u).getFaceting()}async function sf(u,y){return P().index(u).updateFaceting(y)}async function xf(u){return P().index(u).resetFaceting()}async function mf(u){return P().index(u).getTypoTolerance()}async function df(u,y){return P().index(u).updateTypoTolerance(y)}async function af(u){return P().index(u).resetTypoTolerance()}async function ef(u){return P().index(u).getDictionary()}async function u$(u,y){return P().index(u).updateDictionary(y)}async function y$(u){return P().index(u).resetDictionary()}function $$(u){if(!u)return[];let y=[];for(let f in u){if(!Object.prototype.hasOwnProperty.call(u,f))continue;if(!f$.test(f))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${f}`);let $=u[f],w=String($).replace(/'/g,"\\'");y.push(`${f}='${w}'`)}return y}function w$(u){if(!u)return[];let y=[];for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let w=String(u[f]).toLowerCase()==="desc"?"desc":"asc";y.push(`${f}:${w}`)}return y}var wu,o=null,f$,P$,S$;var Su=K(async()=>{try{({Meilisearch:wu}=await import("meilisearch"))}catch{}f$=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;P$={client:P,resetClient:Sf,search:_f,getIndex:Uf,createIndex:rf,deleteIndex:Qf,updateIndex:Of,listAllIndexes:yy,listAllIndices:yy,addDocument:tf,addDocuments:Af,updateDocument:Jf,updateDocuments:Gf,deleteDocument:Hf,deleteDocuments:gf,getDocument:Mf,getFilterableAttributes:Yf,updateFilterableAttributes:Zf,resetFilterableAttributes:Wf,updateDisplayedAttributes:Bf,resetDisplayedAttributes:Tf,getDisplayedAttributes:Rf,updateSearchableAttributes:Xf,resetSearchableAttributes:Vf,getSearchableAttributes:zf,updateSortableAttributes:Ef,resetSortableAttributes:Kf,getSortableAttributes:Lf,getSettings:Cf,updateSettings:Ff,resetSettings:hf,getPagination:of,updatePagination:bf,resetPagination:cf,getSynonyms:qf,updateSynonyms:kf,resetSynonyms:vf,getRankingRules:jf,updateRankingRules:If,resetRankingRules:Df,getDistinctAttribute:pf,updateDistinctAttribute:nf,resetDistinctAttribute:Nf,getFaceting:lf,updateFaceting:sf,resetFaceting:xf,getTypoTolerance:mf,updateTypoTolerance:df,resetTypoTolerance:af,getDictionary:ef,updateDictionary:u$,resetDictionary:y$},S$=P$});import{overridesReady as _$,searchEngine as t$}from"@stacksjs/config";import{err as Sy,ok as _y}from"@stacksjs/error-handling";import{log as V}from"@stacksjs/logging";import{getModelName as ty,getTableName as Ay}from"@stacksjs/orm";import{path as tu}from"@stacksjs/path";import{useSearchEngine as Uy}from"@stacksjs/search-engine";import{globSync as ry}from"@stacksjs/storage";import{snakeCase as L}from"@stacksjs/strings";async function Z$(u){try{let y=ry([tu.userModelsPath("*.ts"),tu.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:f,updateSettings:$}=Uy();for(let w of y){let S=(await import(w)).default,_=S.traits?.useSearch,O=Ay(S,w),r=ty(S,w);if(u&&r!==u)continue;if(_&&(typeof _==="boolean"||typeof _==="object")){if(typeof _==="object")await $(O,{searchableAttributes:(_.searchable??[]).map((G)=>L(G)),filterableAttributes:(_.filterable??[]).map((G)=>L(G)),sortableAttributes:(_.sortable??[]).map((G)=>L(G)),displayedAttributes:(_.displayable??[]).map((G)=>L(G))});let t=S;if(typeof t.all!=="function"){V.warn(`[search] ${r}: model has no .all() \u2014 run generate:model-files or use defineModel`);continue}let M=typeof _==="object"?_.denormalize:void 0,J=M?Array.from(new Set(Object.values(M).map((G)=>G.split(".")[0]).filter((G)=>Boolean(G)))):[],X;if(J.length>0&&typeof t.query==="function")try{X=await t.query().with(...J).get()}catch(G){V.warn(`[search] ${r}: eager-load of [${J.join(", ")}] failed \u2014 falling back to .all(); denormalized fields will be null. (${G.message})`),X=await t.all()}else X=await t.all();let _u=0,b=0;for(let G of X)try{let z=G.toSearchableObject?.();if(z==null){b++;continue}await f(O,z),_u++}catch(z){b++,V.warn(`[search] Skipped ${r}#${G.id??"?"}: ${z.message}`)}V.info(`[search] ${r}: imported ${_u}, skipped ${b}`)}}return V.info(u),_y("Successfully imported models to search engine!")}catch(y){return V.error(y),Sy(y?.message||String(y))}}import{ok as Oy}from"@stacksjs/error-handling";import{log as Jy}from"@stacksjs/logging";import{getModelName as Gy,getTableName as Hy}from"@stacksjs/orm";import{path as Au}from"@stacksjs/path";import{useSearchEngine as gy}from"@stacksjs/search-engine";import{globSync as My}from"@stacksjs/storage";async function B$(u){try{let y=My([Au.userModelsPath("*.ts"),Au.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:f}=gy();for(let $ of y){let w=(await import($)).default,S=w.traits?.useSearch,_=Hy(w,$),O=Gy(w,$);if(u&&O!==u)continue;if(S&&(typeof S==="boolean"||typeof S==="object"))await f(_)}return Oy("Successfully flushed all model data from search engine!")}catch(y){return Jy.error(y),y(y)}}import{ok as Qy}from"@stacksjs/error-handling";import{log as Yy}from"@stacksjs/logging";import{getTableName as Zy}from"@stacksjs/orm";import{path as Wy}from"@stacksjs/path";import{useSearchEngine as Xy}from"@stacksjs/search-engine";async function b$(u){try{let y=Wy.userModelsPath(`${u}.ts`),f=(await import(y)).default,{getFilterableAttributes:$,getSortableAttributes:w,getSearchableAttributes:S,getDisplayedAttributes:_}=Xy(),O=f.traits?.useSearch,r=Zy(f,y);if(O&&typeof O==="object"){let t=await _(r),M=await $(r),J=await w(r),X=await S(r);console.table({displayedAttributes:t,filterableAttributes:M,sortableAttributes:J,searchableAttributes:X})}return Qy("Successfully update index settings!")}catch(y){return Yy.error(y),y(y)}}import{err as Vy,ok as zy}from"@stacksjs/error-handling";import{log as Ey}from"@stacksjs/logging";import{getTableName as Ky}from"@stacksjs/orm";import{path as Uu}from"@stacksjs/path";import{useSearchEngine as Ly}from"@stacksjs/search-engine";import{globSync as By}from"@stacksjs/storage";import{snakeCase as c}from"@stacksjs/strings";async function n$(){try{let u=By([Uu.userModelsPath("*.ts"),Uu.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:y}=Ly();for(let f of u){let $=(await import(f)).default,w=$.traits?.useSearch,S=Ky($,f);if(w&&typeof w==="object"){let _=(typeof $.traits?.useSearch==="object"&&$.traits?.useSearch.filterable||[]).map((t)=>c(t)),O=(typeof $.traits?.useSearch==="object"&&$.traits?.useSearch.sortable||[]).map((t)=>c(t)),r=(typeof $.traits?.useSearch==="object"&&$.traits?.useSearch.searchable||[]).map((t)=>c(t));await y(S,{filterableAttributes:_,sortableAttributes:O,searchableAttributes:r})}}return zy("Successfully update index settings!")}catch(u){return Ey.error(u),Vy(u?.message||String(u))}}await _$;function A$(u){if(u==="algolia")return Promise.resolve().then(() => (k(),q));if(u==="opensearch")return Promise.resolve().then(() => (e(),a));if(u==="typesense")return Promise.resolve().then(() => ($u(),fu));return Su().then(() => Pu)}var U$=await A$(t$.driver),r$=U$.default;function e$(){return r$}function uw(){return Promise.resolve().then(() => (k(),q)).then((u)=>u.default)}function yw(){return Su().then(() => Pu).then((u)=>u.default)}function fw(){return Promise.resolve().then(() => (e(),a)).then((u)=>u.default)}function $w(){return Promise.resolve().then(() => ($u(),fu)).then((u)=>u.default)}export{$w as useTypesense,e$ as useSearchEngine,fw as useOpensearch,yw as useMeilisearch,uw as useAlgolia,n$ as updateIndexSettings,b$ as listIndexSettings,Z$ as importModelDocuments,B$ 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.311",
|
|
6
6
|
"description": "The Stacks search engine integrations.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@stacksjs/config": "0.70.
|
|
75
|
+
"@stacksjs/config": "0.70.311",
|
|
76
76
|
"better-dx": "^0.2.17",
|
|
77
77
|
"meilisearch": "^0.59.0"
|
|
78
78
|
}
|