@stacksjs/search-engine 0.70.25 → 0.70.26
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 +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{searchEngine as y}from"@stacksjs/config";import{searchEngine as F}from"@stacksjs/config";import{Meilisearch as q}from"meilisearch";var U=null;function M(){if(!U){let f=F.meilisearch?.host||"http://127.0.0.1:7700",G=F.meilisearch?.apiKey||"";if(!f)throw Error("Meilisearch host is not configured. Please specify a search engine host.");U=new q({host:f,apiKey:G})}return U}function I(){U=null}async function D(f,G){let J=Number(G.page)||1,Q=Number(G.perPage)||20,Y=(J-1)*Q,$=Af(G.filter),z=Tf(G.sort);return await M().index(f).search(G.query,{limit:Q,filter:$,sort:z,offset:Y})}async function j(f,G){return await M().index(f).addDocuments([G])}async function g(f,G){if(!Array.isArray(G))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(G.length<=1000)return await M().index(f).addDocuments(G);let Q;for(let Y=0;Y<G.length;Y+=1000){let $=G.slice(Y,Y+1000),z=await M().index(f).addDocuments($);if(!Q)Q=z}return Q}async function u(f){return await M().getIndex(f)}async function p(f,G){return await M().createIndex(f,G)}async function N(f,G){return await M().updateIndex(f,G)}async function b(f,G){return await M().index(f).updateDocuments([G])}async function o(f,G){return await M().index(f).updateDocuments(G)}async function m(f,G){return await M().index(f).deleteDocument(G)}async function c(f,G){return await M().index(f).deleteDocuments({filter:G})}async function r(f,G,J){return await M().index(f).getDocument(G,J)}async function x(f){return await M().deleteIndex(f)}async function h(){return await M().getIndexes()}async function l(f){return M().index(f).getFilterableAttributes()}async function d(f,G){return M().index(f).updateFilterableAttributes(G)}async function s(f){return M().index(f).resetFilterableAttributes()}async function n(f,G){return M().index(f).updateSearchableAttributes(G)}async function a(f){return M().index(f).resetSearchableAttributes()}async function i(f){return M().index(f).getSearchableAttributes()}async function t(f,G){return M().index(f).updateSortableAttributes(G)}async function e(f){return M().index(f).resetSortableAttributes()}async function ff(f){return M().index(f).getSortableAttributes()}async function Gf(f,G){return M().index(f).updateDisplayedAttributes(G)}async function Jf(f){return M().index(f).getDisplayedAttributes()}async function Mf(f){return M().index(f).resetDisplayedAttributes()}async function Qf(f){return M().index(f).getSettings()}async function Yf(f,G){return M().index(f).updateSettings(G)}async function Zf(f){return M().index(f).resetSettings()}async function $f(f){return M().index(f).getPagination()}async function zf(f,G){return M().index(f).updatePagination(G)}async function Ef(f){return M().index(f).resetPagination()}async function Hf(f){return M().index(f).getSynonyms()}async function Wf(f,G){return M().index(f).updateSynonyms(G)}async function Xf(f){return M().index(f).resetSynonyms()}async function Vf(f){return M().index(f).getRankingRules()}async function Bf(f,G){return M().index(f).updateRankingRules(G)}async function Uf(f){return M().index(f).resetRankingRules()}async function Cf(f){return M().index(f).getDistinctAttribute()}async function Kf(f,G){return M().index(f).updateDistinctAttribute(G)}async function Lf(f){return M().index(f).resetDistinctAttribute()}async function Sf(f){return M().index(f).getFaceting()}async function Of(f,G){return M().index(f).updateFaceting(G)}async function Pf(f){return M().index(f).resetFaceting()}async function _f(f){return M().index(f).getTypoTolerance()}async function vf(f,G){return M().index(f).updateTypoTolerance(G)}async function wf(f){return M().index(f).resetTypoTolerance()}async function Ff(f){return M().index(f).getDictionary()}async function hf(f,G){return M().index(f).updateDictionary(G)}async function Rf(f){return M().index(f).resetDictionary()}var kf=/^[a-z_][\w]*(\.[a-z_][\w]*)*$/i;function Af(f){if(!f)return[];let G=[];for(let J in f){if(!Object.prototype.hasOwnProperty.call(f,J))continue;if(!kf.test(J))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${J}`);let Q=f[J],Y=String(Q).replace(/'/g,"\\'");G.push(`${J}='${Y}'`)}return G}function Tf(f){if(!f)return[];let G=[];for(let J in f)if(Object.prototype.hasOwnProperty.call(f,J)){let Y=String(f[J]).toLowerCase()==="desc"?"desc":"asc";G.push(`${J}:${Y}`)}return G}var yf={client:M,resetClient:I,search:D,getIndex:u,createIndex:p,deleteIndex:x,updateIndex:N,listAllIndexes:h,listAllIndices:h,addDocument:j,addDocuments:g,updateDocument:b,updateDocuments:o,deleteDocument:m,deleteDocuments:c,getDocument:r,getFilterableAttributes:l,updateFilterableAttributes:d,resetFilterableAttributes:s,updateDisplayedAttributes:Gf,resetDisplayedAttributes:Mf,getDisplayedAttributes:Jf,updateSearchableAttributes:n,resetSearchableAttributes:a,getSearchableAttributes:i,updateSortableAttributes:t,resetSortableAttributes:e,getSortableAttributes:ff,getSettings:Qf,updateSettings:Yf,resetSettings:Zf,getPagination:$f,updatePagination:zf,resetPagination:Ef,getSynonyms:Hf,updateSynonyms:Wf,resetSynonyms:Xf,getRankingRules:Vf,updateRankingRules:Bf,resetRankingRules:Uf,getDistinctAttribute:Cf,updateDistinctAttribute:Kf,resetDistinctAttribute:Lf,getFaceting:Sf,updateFaceting:Of,resetFaceting:Pf,getTypoTolerance:_f,updateTypoTolerance:vf,resetTypoTolerance:wf,getDictionary:Ff,updateDictionary:hf,resetDictionary:Rf},S=yf;import{searchEngine as R}from"@stacksjs/config";import{log as qf}from"@stacksjs/logging";var C=null;function k(){if(!C){let f=R.algolia?.appId||process.env.ALGOLIA_APP_ID||"",G=R.algolia?.apiKey||process.env.ALGOLIA_API_KEY||"";if(!f||!G)throw qf.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.");C={appId:f,apiKey:G}}return C}function If(){let{appId:f}=k();return`https://${f}.algolia.net`}function Df(){let{appId:f,apiKey:G}=k();return{"X-Algolia-Application-Id":f,"X-Algolia-API-Key":G,"Content-Type":"application/json"}}async function Z(f,G,J){let Q=await fetch(`${If()}${G}`,{method:f,headers:Df(),body:J?JSON.stringify(J):void 0});if(!Q.ok){let Y=await Q.json().catch(()=>({message:Q.statusText}));throw Error(`Algolia API error: ${Y.message||Q.statusText}`)}return Q.json()}function jf(f){C=f}async function gf(f,G={}){return Z("POST",`/1/indexes/${f}/query`,{query:G.query||"",page:G.page||0,hitsPerPage:G.hitsPerPage||20,filters:G.filters,facets:G.facets,attributesToRetrieve:G.attributesToRetrieve,attributesToHighlight:G.attributesToHighlight,attributesToSnippet:G.attributesToSnippet})}async function uf(f){return Z("POST","/1/indexes/*/queries",{requests:f.map((G)=>({indexName:G.indexName,params:new URLSearchParams({query:G.params?.query||"",page:String(G.params?.page||0),hitsPerPage:String(G.params?.hitsPerPage||20),...G.params?.filters&&{filters:G.params.filters}}).toString()}))})}async function pf(f,G,J){if(J)return Z("PUT",`/1/indexes/${f}/${J}`,G);return Z("POST",`/1/indexes/${f}`,G)}async function Nf(f,G){return Z("POST",`/1/indexes/${f}/batch`,{requests:G.map((J)=>({action:J.objectID?"updateObject":"addObject",body:J}))})}async function bf(f,G,J,Q=!0){return Z("POST",`/1/indexes/${f}/${G}/partial${Q?"":"?createIfNotExists=false"}`,J)}async function of(f,G){return Z("DELETE",`/1/indexes/${f}/${G}`)}async function mf(f,G){return Z("POST",`/1/indexes/${f}/batch`,{requests:G.map((J)=>({action:"deleteObject",body:{objectID:J}}))})}async function cf(f,G){return Z("POST",`/1/indexes/${f}/deleteByQuery`,{filters:G})}async function rf(f,G,J){let Q=J?`?attributesToRetrieve=${J.join(",")}`:"";return Z("GET",`/1/indexes/${f}/${G}${Q}`)}async function xf(f,G,J){return Z("POST","/1/indexes/*/objects",{requests:G.map((Q)=>({indexName:f,objectID:Q,attributesToRetrieve:J}))})}async function lf(f){return Z("POST",`/1/indexes/${f}/clear`)}async function df(f){return Z("GET",`/1/indexes/${f}/settings`)}async function sf(f,G,J=!1){return Z("PUT",`/1/indexes/${f}/settings${J?"?forwardToReplicas=true":""}`,G)}async function nf(){return Z("GET","/1/indexes")}async function af(f,G,J){return Z("POST",`/1/indexes/${f}/operation`,{operation:"copy",destination:G,scope:J})}async function tf(f,G){return Z("POST",`/1/indexes/${f}/operation`,{operation:"move",destination:G})}async function ef(f){return Z("DELETE",`/1/indexes/${f}`)}async function fG(f){try{return await Z("GET",`/1/indexes/${f}/settings`),!0}catch{return!1}}async function GG(f,G,J=1e4,Q=100){let Y=Date.now();while(Date.now()-Y<J){let $=await Z("GET",`/1/indexes/${f}/task/${G}`);if($.status==="published")return $;await new Promise((z)=>setTimeout(z,Q))}throw Error(`Task ${G} timed out after ${J}ms`)}async function JG(f,G,J=!1){return Z("PUT",`/1/indexes/${f}/synonyms/${G.objectID}${J?"?forwardToReplicas=true":""}`,G)}async function MG(f,G="",J,Q=0,Y=20){return Z("POST",`/1/indexes/${f}/synonyms/search`,{query:G,type:J,page:Q,hitsPerPage:Y})}async function QG(f,G=!1){return Z("POST",`/1/indexes/${f}/synonyms/clear${G?"?forwardToReplicas=true":""}`)}async function YG(f,G,J=!1){return Z("PUT",`/1/indexes/${f}/rules/${G.objectID}${J?"?forwardToReplicas=true":""}`,G)}async function ZG(f,G="",J,Q,Y=0,$=20){return Z("POST",`/1/indexes/${f}/rules/search`,{query:G,anchoring:J,context:Q,page:Y,hitsPerPage:$})}async function $G(f,G=!1){return Z("POST",`/1/indexes/${f}/rules/clear${G?"?forwardToReplicas=true":""}`)}async function*zG(f,G={}){let J;do{let Q=await Z("POST",`/1/indexes/${f}/browse`,{...G,cursor:J});for(let Y of Q.hits)yield Y;J=Q.cursor}while(J)}var EG={configure:jf,search:gf,multiSearch:uf,saveObject:pf,saveObjects:Nf,partialUpdateObject:bf,deleteObject:of,deleteObjects:mf,deleteBy:cf,getObject:rf,getObjects:xf,clearObjects:lf,getSettings:df,setSettings:sf,listIndices:nf,copyIndex:af,moveIndex:tf,deleteIndex:ef,indexExists:fG,waitTask:GG,saveSynonym:JG,searchSynonyms:MG,clearSynonyms:QG,saveRule:YG,searchRules:ZG,clearRules:$G,browse:zG},O=EG;var HG={},P=HG;import{err as WG,ok as XG}from"@stacksjs/error-handling";import{log as K}from"@stacksjs/logging";import{getModelName as VG,getTableName as BG}from"@stacksjs/orm";import{path as _}from"@stacksjs/path";import{useSearchEngine as UG}from"@stacksjs/search-engine";import{globSync as CG}from"@stacksjs/storage";async function dG(f){try{let G=CG([_.userModelsPath("*.ts"),_.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:J}=UG();for(let Q of G){let Y=(await import(Q)).default,$=Y.traits?.useSearch,z=BG(Y,Q),E=VG(Y,Q);if($&&(typeof $==="boolean"||typeof $==="object")){let L=await(await import(_.storagePath(`framework/orm/src/models/${E}.ts`))).default.all(),V=0,X=0;for(let w of L)try{let B=w.toSearchableObject?.();if(B==null){X++;continue}await J(z,B),V++}catch(B){X++,K.warn(`[search] Skipped ${E}#${w.id??"?"}: ${B.message}`)}K.info(`[search] ${E}: imported ${V}, skipped ${X}`)}}return K.info(f),XG("Successfully imported models to search engine!")}catch(G){return K.error(G),WG(G?.message||String(G))}}import{ok as KG}from"@stacksjs/error-handling";import{log as LG}from"@stacksjs/logging";import{getModelName as SG,getTableName as OG}from"@stacksjs/orm";import{path as A}from"@stacksjs/path";import{useSearchEngine as PG}from"@stacksjs/search-engine";import{globSync as _G}from"@stacksjs/storage";async function GJ(f){try{let G=_G([A.userModelsPath("*.ts"),A.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:J}=PG();for(let Q of G){let Y=(await import(Q)).default,$=Y.traits?.useSearch,z=OG(Y,Q),E=SG(Y,Q);if(f&&E!==f)continue;if($&&(typeof $==="boolean"||typeof $==="object"))await J(z)}return KG("Successfully flushed all model data from search engine!")}catch(G){return LG.error(G),G(G)}}import{ok as vG}from"@stacksjs/error-handling";import{log as wG}from"@stacksjs/logging";import{getTableName as FG}from"@stacksjs/orm";import{path as hG}from"@stacksjs/path";import{useSearchEngine as RG}from"@stacksjs/search-engine";async function zJ(f){try{let G=hG.userModelsPath(`${f}.ts`),J=(await import(G)).default,{getFilterableAttributes:Q,getSortableAttributes:Y,getSearchableAttributes:$,getDisplayedAttributes:z}=RG(),E=J.traits?.useSearch,W=FG(J,G);if(E&&typeof E==="object"){let H=await z(W),L=await Q(W),V=await Y(W),X=await $(W);console.table({displayedAttributes:H,filterableAttributes:L,sortableAttributes:V,searchableAttributes:X})}return vG("Successfully update index settings!")}catch(G){return wG.error(G),G(G)}}import{ok as kG}from"@stacksjs/error-handling";import{log as AG}from"@stacksjs/logging";import{getTableName as TG}from"@stacksjs/orm";import{path as T}from"@stacksjs/path";import{useSearchEngine as yG}from"@stacksjs/search-engine";import{globSync as qG}from"@stacksjs/storage";import{snakeCase as v}from"@stacksjs/strings";async function KJ(){try{let f=qG([T.userModelsPath("*.ts"),T.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:G}=yG();for(let J of f){let Q=(await import(J)).default,Y=Q.traits?.useSearch,$=TG(Q,J);if(Y&&typeof Y==="object"){let z=(typeof Q.traits?.useSearch==="object"&&Q.traits?.useSearch.filterable||[]).map((H)=>v(H)),E=(typeof Q.traits?.useSearch==="object"&&Q.traits?.useSearch.sortable||[]).map((H)=>v(H)),W=(typeof Q.traits?.useSearch==="object"&&Q.traits?.useSearch.searchable||[]).map((H)=>v(H));await G($,{filterableAttributes:z,sortableAttributes:E,searchableAttributes:W})}}return kG("Successfully update index settings!")}catch(f){return AG.error(f),f(f)}}function IG(){switch(y.driver||"meilisearch"){case"algolia":return O;case"opensearch":return P;case"meilisearch":default:return S}}function kJ(){return IG()}function AJ(){return O}function TJ(){return S}function yJ(){return P}export{kJ as useSearchEngine,yJ as useOpensearch,TJ as useMeilisearch,AJ as useAlgolia,KJ as updateIndexSettings,P as opensearch,S as meilisearch,zJ as listIndexSettings,dG as importModelDocuments,GJ as flushModelDocuments,O as algolia};
|
|
2
|
+
import{searchEngine as y}from"@stacksjs/config";import{searchEngine as F}from"@stacksjs/config";import{Meilisearch as q}from"meilisearch";var U=null;function M(){if(!U){let f=F.meilisearch?.host||"http://127.0.0.1:7700",G=F.meilisearch?.apiKey||"";if(!f)throw Error("Meilisearch host is not configured. Please specify a search engine host.");U=new q({host:f,apiKey:G})}return U}function I(){U=null}async function D(f,G){let J=Number(G.page)||1,Q=Number(G.perPage)||20,Y=(J-1)*Q,$=Af(G.filter),z=Tf(G.sort);return await M().index(f).search(G.query,{limit:Q,filter:$,sort:z,offset:Y})}async function j(f,G){return await M().index(f).addDocuments([G])}async function g(f,G){if(!Array.isArray(G))throw TypeError("[search/meilisearch] addDocuments requires an array of documents");if(G.length<=1000)return await M().index(f).addDocuments(G);let Q;for(let Y=0;Y<G.length;Y+=1000){let $=G.slice(Y,Y+1000),z=await M().index(f).addDocuments($);if(!Q)Q=z}return Q}async function u(f){return await M().getIndex(f)}async function p(f,G){return await M().createIndex(f,G)}async function N(f,G){return await M().updateIndex(f,G)}async function b(f,G){return await M().index(f).updateDocuments([G])}async function o(f,G){return await M().index(f).updateDocuments(G)}async function m(f,G){return await M().index(f).deleteDocument(G)}async function c(f,G){return await M().index(f).deleteDocuments({filter:G})}async function r(f,G,J){return await M().index(f).getDocument(G,J)}async function x(f){return await M().deleteIndex(f)}async function h(){return await M().getIndexes()}async function l(f){return M().index(f).getFilterableAttributes()}async function d(f,G){return M().index(f).updateFilterableAttributes(G)}async function s(f){return M().index(f).resetFilterableAttributes()}async function n(f,G){return M().index(f).updateSearchableAttributes(G)}async function a(f){return M().index(f).resetSearchableAttributes()}async function i(f){return M().index(f).getSearchableAttributes()}async function t(f,G){return M().index(f).updateSortableAttributes(G)}async function e(f){return M().index(f).resetSortableAttributes()}async function ff(f){return M().index(f).getSortableAttributes()}async function Gf(f,G){return M().index(f).updateDisplayedAttributes(G)}async function Jf(f){return M().index(f).getDisplayedAttributes()}async function Mf(f){return M().index(f).resetDisplayedAttributes()}async function Qf(f){return M().index(f).getSettings()}async function Yf(f,G){return M().index(f).updateSettings(G)}async function Zf(f){return M().index(f).resetSettings()}async function $f(f){return M().index(f).getPagination()}async function zf(f,G){return M().index(f).updatePagination(G)}async function Ef(f){return M().index(f).resetPagination()}async function Hf(f){return M().index(f).getSynonyms()}async function Wf(f,G){return M().index(f).updateSynonyms(G)}async function Xf(f){return M().index(f).resetSynonyms()}async function Vf(f){return M().index(f).getRankingRules()}async function Bf(f,G){return M().index(f).updateRankingRules(G)}async function Uf(f){return M().index(f).resetRankingRules()}async function Cf(f){return M().index(f).getDistinctAttribute()}async function Kf(f,G){return M().index(f).updateDistinctAttribute(G)}async function Lf(f){return M().index(f).resetDistinctAttribute()}async function Sf(f){return M().index(f).getFaceting()}async function Of(f,G){return M().index(f).updateFaceting(G)}async function Pf(f){return M().index(f).resetFaceting()}async function _f(f){return M().index(f).getTypoTolerance()}async function vf(f,G){return M().index(f).updateTypoTolerance(G)}async function wf(f){return M().index(f).resetTypoTolerance()}async function Ff(f){return M().index(f).getDictionary()}async function hf(f,G){return M().index(f).updateDictionary(G)}async function Rf(f){return M().index(f).resetDictionary()}var kf=/^[a-z_][\w]*(?:\.[a-z_][\w]*)*$/i;function Af(f){if(!f)return[];let G=[];for(let J in f){if(!Object.prototype.hasOwnProperty.call(f,J))continue;if(!kf.test(J))throw Error(`[search/meilisearch] Refusing to build filter with unsafe field name: ${J}`);let Q=f[J],Y=String(Q).replace(/'/g,"\\'");G.push(`${J}='${Y}'`)}return G}function Tf(f){if(!f)return[];let G=[];for(let J in f)if(Object.prototype.hasOwnProperty.call(f,J)){let Y=String(f[J]).toLowerCase()==="desc"?"desc":"asc";G.push(`${J}:${Y}`)}return G}var yf={client:M,resetClient:I,search:D,getIndex:u,createIndex:p,deleteIndex:x,updateIndex:N,listAllIndexes:h,listAllIndices:h,addDocument:j,addDocuments:g,updateDocument:b,updateDocuments:o,deleteDocument:m,deleteDocuments:c,getDocument:r,getFilterableAttributes:l,updateFilterableAttributes:d,resetFilterableAttributes:s,updateDisplayedAttributes:Gf,resetDisplayedAttributes:Mf,getDisplayedAttributes:Jf,updateSearchableAttributes:n,resetSearchableAttributes:a,getSearchableAttributes:i,updateSortableAttributes:t,resetSortableAttributes:e,getSortableAttributes:ff,getSettings:Qf,updateSettings:Yf,resetSettings:Zf,getPagination:$f,updatePagination:zf,resetPagination:Ef,getSynonyms:Hf,updateSynonyms:Wf,resetSynonyms:Xf,getRankingRules:Vf,updateRankingRules:Bf,resetRankingRules:Uf,getDistinctAttribute:Cf,updateDistinctAttribute:Kf,resetDistinctAttribute:Lf,getFaceting:Sf,updateFaceting:Of,resetFaceting:Pf,getTypoTolerance:_f,updateTypoTolerance:vf,resetTypoTolerance:wf,getDictionary:Ff,updateDictionary:hf,resetDictionary:Rf},S=yf;import{searchEngine as R}from"@stacksjs/config";import{log as qf}from"@stacksjs/logging";var C=null;function k(){if(!C){let f=R.algolia?.appId||process.env.ALGOLIA_APP_ID||"",G=R.algolia?.apiKey||process.env.ALGOLIA_API_KEY||"";if(!f||!G)throw qf.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.");C={appId:f,apiKey:G}}return C}function If(){let{appId:f}=k();return`https://${f}.algolia.net`}function Df(){let{appId:f,apiKey:G}=k();return{"X-Algolia-Application-Id":f,"X-Algolia-API-Key":G,"Content-Type":"application/json"}}async function Z(f,G,J){let Q=await fetch(`${If()}${G}`,{method:f,headers:Df(),body:J?JSON.stringify(J):void 0});if(!Q.ok){let Y=await Q.json().catch(()=>({message:Q.statusText}));throw Error(`Algolia API error: ${Y.message||Q.statusText}`)}return Q.json()}function jf(f){C=f}async function gf(f,G={}){return Z("POST",`/1/indexes/${f}/query`,{query:G.query||"",page:G.page||0,hitsPerPage:G.hitsPerPage||20,filters:G.filters,facets:G.facets,attributesToRetrieve:G.attributesToRetrieve,attributesToHighlight:G.attributesToHighlight,attributesToSnippet:G.attributesToSnippet})}async function uf(f){return Z("POST","/1/indexes/*/queries",{requests:f.map((G)=>({indexName:G.indexName,params:new URLSearchParams({query:G.params?.query||"",page:String(G.params?.page||0),hitsPerPage:String(G.params?.hitsPerPage||20),...G.params?.filters&&{filters:G.params.filters}}).toString()}))})}async function pf(f,G,J){if(J)return Z("PUT",`/1/indexes/${f}/${J}`,G);return Z("POST",`/1/indexes/${f}`,G)}async function Nf(f,G){return Z("POST",`/1/indexes/${f}/batch`,{requests:G.map((J)=>({action:J.objectID?"updateObject":"addObject",body:J}))})}async function bf(f,G,J,Q=!0){return Z("POST",`/1/indexes/${f}/${G}/partial${Q?"":"?createIfNotExists=false"}`,J)}async function of(f,G){return Z("DELETE",`/1/indexes/${f}/${G}`)}async function mf(f,G){return Z("POST",`/1/indexes/${f}/batch`,{requests:G.map((J)=>({action:"deleteObject",body:{objectID:J}}))})}async function cf(f,G){return Z("POST",`/1/indexes/${f}/deleteByQuery`,{filters:G})}async function rf(f,G,J){let Q=J?`?attributesToRetrieve=${J.join(",")}`:"";return Z("GET",`/1/indexes/${f}/${G}${Q}`)}async function xf(f,G,J){return Z("POST","/1/indexes/*/objects",{requests:G.map((Q)=>({indexName:f,objectID:Q,attributesToRetrieve:J}))})}async function lf(f){return Z("POST",`/1/indexes/${f}/clear`)}async function df(f){return Z("GET",`/1/indexes/${f}/settings`)}async function sf(f,G,J=!1){return Z("PUT",`/1/indexes/${f}/settings${J?"?forwardToReplicas=true":""}`,G)}async function nf(){return Z("GET","/1/indexes")}async function af(f,G,J){return Z("POST",`/1/indexes/${f}/operation`,{operation:"copy",destination:G,scope:J})}async function tf(f,G){return Z("POST",`/1/indexes/${f}/operation`,{operation:"move",destination:G})}async function ef(f){return Z("DELETE",`/1/indexes/${f}`)}async function fG(f){try{return await Z("GET",`/1/indexes/${f}/settings`),!0}catch{return!1}}async function GG(f,G,J=1e4,Q=100){let Y=Date.now();while(Date.now()-Y<J){let $=await Z("GET",`/1/indexes/${f}/task/${G}`);if($.status==="published")return $;await new Promise((z)=>setTimeout(z,Q))}throw Error(`Task ${G} timed out after ${J}ms`)}async function JG(f,G,J=!1){return Z("PUT",`/1/indexes/${f}/synonyms/${G.objectID}${J?"?forwardToReplicas=true":""}`,G)}async function MG(f,G="",J,Q=0,Y=20){return Z("POST",`/1/indexes/${f}/synonyms/search`,{query:G,type:J,page:Q,hitsPerPage:Y})}async function QG(f,G=!1){return Z("POST",`/1/indexes/${f}/synonyms/clear${G?"?forwardToReplicas=true":""}`)}async function YG(f,G,J=!1){return Z("PUT",`/1/indexes/${f}/rules/${G.objectID}${J?"?forwardToReplicas=true":""}`,G)}async function ZG(f,G="",J,Q,Y=0,$=20){return Z("POST",`/1/indexes/${f}/rules/search`,{query:G,anchoring:J,context:Q,page:Y,hitsPerPage:$})}async function $G(f,G=!1){return Z("POST",`/1/indexes/${f}/rules/clear${G?"?forwardToReplicas=true":""}`)}async function*zG(f,G={}){let J;do{let Q=await Z("POST",`/1/indexes/${f}/browse`,{...G,cursor:J});for(let Y of Q.hits)yield Y;J=Q.cursor}while(J)}var EG={configure:jf,search:gf,multiSearch:uf,saveObject:pf,saveObjects:Nf,partialUpdateObject:bf,deleteObject:of,deleteObjects:mf,deleteBy:cf,getObject:rf,getObjects:xf,clearObjects:lf,getSettings:df,setSettings:sf,listIndices:nf,copyIndex:af,moveIndex:tf,deleteIndex:ef,indexExists:fG,waitTask:GG,saveSynonym:JG,searchSynonyms:MG,clearSynonyms:QG,saveRule:YG,searchRules:ZG,clearRules:$G,browse:zG},O=EG;var HG={},P=HG;import{err as WG,ok as XG}from"@stacksjs/error-handling";import{log as K}from"@stacksjs/logging";import{getModelName as VG,getTableName as BG}from"@stacksjs/orm";import{path as _}from"@stacksjs/path";import{useSearchEngine as UG}from"@stacksjs/search-engine";import{globSync as CG}from"@stacksjs/storage";async function dG(f){try{let G=CG([_.userModelsPath("*.ts"),_.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{addDocument:J}=UG();for(let Q of G){let Y=(await import(Q)).default,$=Y.traits?.useSearch,z=BG(Y,Q),E=VG(Y,Q);if($&&(typeof $==="boolean"||typeof $==="object")){let L=await(await import(_.storagePath(`framework/orm/src/models/${E}.ts`))).default.all(),V=0,X=0;for(let w of L)try{let B=w.toSearchableObject?.();if(B==null){X++;continue}await J(z,B),V++}catch(B){X++,K.warn(`[search] Skipped ${E}#${w.id??"?"}: ${B.message}`)}K.info(`[search] ${E}: imported ${V}, skipped ${X}`)}}return K.info(f),XG("Successfully imported models to search engine!")}catch(G){return K.error(G),WG(G?.message||String(G))}}import{ok as KG}from"@stacksjs/error-handling";import{log as LG}from"@stacksjs/logging";import{getModelName as SG,getTableName as OG}from"@stacksjs/orm";import{path as A}from"@stacksjs/path";import{useSearchEngine as PG}from"@stacksjs/search-engine";import{globSync as _G}from"@stacksjs/storage";async function GJ(f){try{let G=_G([A.userModelsPath("*.ts"),A.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{deleteIndex:J}=PG();for(let Q of G){let Y=(await import(Q)).default,$=Y.traits?.useSearch,z=OG(Y,Q),E=SG(Y,Q);if(f&&E!==f)continue;if($&&(typeof $==="boolean"||typeof $==="object"))await J(z)}return KG("Successfully flushed all model data from search engine!")}catch(G){return LG.error(G),G(G)}}import{ok as vG}from"@stacksjs/error-handling";import{log as wG}from"@stacksjs/logging";import{getTableName as FG}from"@stacksjs/orm";import{path as hG}from"@stacksjs/path";import{useSearchEngine as RG}from"@stacksjs/search-engine";async function zJ(f){try{let G=hG.userModelsPath(`${f}.ts`),J=(await import(G)).default,{getFilterableAttributes:Q,getSortableAttributes:Y,getSearchableAttributes:$,getDisplayedAttributes:z}=RG(),E=J.traits?.useSearch,W=FG(J,G);if(E&&typeof E==="object"){let H=await z(W),L=await Q(W),V=await Y(W),X=await $(W);console.table({displayedAttributes:H,filterableAttributes:L,sortableAttributes:V,searchableAttributes:X})}return vG("Successfully update index settings!")}catch(G){return wG.error(G),G(G)}}import{ok as kG}from"@stacksjs/error-handling";import{log as AG}from"@stacksjs/logging";import{getTableName as TG}from"@stacksjs/orm";import{path as T}from"@stacksjs/path";import{useSearchEngine as yG}from"@stacksjs/search-engine";import{globSync as qG}from"@stacksjs/storage";import{snakeCase as v}from"@stacksjs/strings";async function KJ(){try{let f=qG([T.userModelsPath("*.ts"),T.storagePath("framework/defaults/app/Models/**/*.ts")],{absolute:!0}),{updateSettings:G}=yG();for(let J of f){let Q=(await import(J)).default,Y=Q.traits?.useSearch,$=TG(Q,J);if(Y&&typeof Y==="object"){let z=(typeof Q.traits?.useSearch==="object"&&Q.traits?.useSearch.filterable||[]).map((H)=>v(H)),E=(typeof Q.traits?.useSearch==="object"&&Q.traits?.useSearch.sortable||[]).map((H)=>v(H)),W=(typeof Q.traits?.useSearch==="object"&&Q.traits?.useSearch.searchable||[]).map((H)=>v(H));await G($,{filterableAttributes:z,sortableAttributes:E,searchableAttributes:W})}}return kG("Successfully update index settings!")}catch(f){return AG.error(f),f(f)}}function IG(){switch(y.driver||"meilisearch"){case"algolia":return O;case"opensearch":return P;case"meilisearch":default:return S}}function kJ(){return IG()}function AJ(){return O}function TJ(){return S}function yJ(){return P}export{kJ as useSearchEngine,yJ as useOpensearch,TJ as useMeilisearch,AJ as useAlgolia,KJ as updateIndexSettings,P as opensearch,S as meilisearch,zJ as listIndexSettings,dG as importModelDocuments,GJ as flushModelDocuments,O as algolia};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/search-engine",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.70.
|
|
4
|
+
"version": "0.70.26",
|
|
5
5
|
"description": "The Stacks search engine integrations.",
|
|
6
6
|
"author": "Chris Breuer",
|
|
7
7
|
"contributors": [
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
],
|
|
34
34
|
"exports": {
|
|
35
35
|
".": {
|
|
36
|
-
"bun": "./src/index.ts",
|
|
37
36
|
"types": "./dist/index.d.ts",
|
|
37
|
+
"bun": "./src/index.ts",
|
|
38
38
|
"import": "./dist/index.js"
|
|
39
39
|
},
|
|
40
40
|
"./*": {
|