@orama/orama
Advanced tools
Comparing version 1.0.4 to 1.0.5
@@ -1,2 +0,2 @@ | ||
import { Document, MultipleCallbackComponent, Orama, ProvidedTypes, SingleCallbackComponent } from '../types.js'; | ||
import { AfterSearch, Document, MultipleCallbackComponent, Orama, ProvidedTypes, Results, SearchParams, SingleCallbackComponent } from '../types.js'; | ||
export declare const OBJECT_COMPONENTS: string[]; | ||
@@ -7,1 +7,2 @@ export declare const FUNCTION_COMPONENTS: string[]; | ||
export declare function runMultipleHook<P extends ProvidedTypes>(hooks: MultipleCallbackComponent<P>[], orama: Orama<P>, docsOrIds: Document[] | string[]): Promise<void>; | ||
export declare function runAfterSearch<P extends ProvidedTypes, AggValue>(hooks: AfterSearch<P>[], db: Orama<P>, params: SearchParams<AggValue>, language: string | undefined, results: Results<AggValue>): Promise<void>; |
@@ -20,2 +20,3 @@ export const OBJECT_COMPONENTS = [ | ||
'afterUpdate', | ||
'afterSearch', | ||
'beforeMultipleInsert', | ||
@@ -29,3 +30,4 @@ 'afterMultipleInsert', | ||
export async function runSingleHook(hooks, orama, id, doc) { | ||
for(let i = 0; i < hooks.length; i++){ | ||
const hooksLength = hooks.length; | ||
for(let i = 0; i < hooksLength; i++){ | ||
await hooks[i](orama, id, doc); | ||
@@ -35,7 +37,14 @@ } | ||
export async function runMultipleHook(hooks, orama, docsOrIds) { | ||
for(let i = 0; i < hooks.length; i++){ | ||
const hooksLength = hooks.length; | ||
for(let i = 0; i < hooksLength; i++){ | ||
await hooks[i](orama, docsOrIds); | ||
} | ||
} | ||
export async function runAfterSearch(hooks, db, params, language, results) { | ||
const hooksLength = hooks.length; | ||
for(let i = 0; i < hooksLength; i++){ | ||
await hooks[i](db, params, language, results); | ||
} | ||
} | ||
//# sourceMappingURL=hooks.js.map |
@@ -29,3 +29,4 @@ import { formatElapsedTime, getDocumentIndexId, getDocumentProperties, validateSchema } from '../components/defaults.js'; | ||
const key = rawKey; | ||
if (!components[key]) { | ||
const component = components[key]; | ||
if (!component) { | ||
components[key] = []; | ||
@@ -80,3 +81,3 @@ } else if (!Array.isArray(components[key])) { | ||
// Assign only recognized components and hooks | ||
const { getDocumentProperties , getDocumentIndexId , validateSchema , beforeInsert , afterInsert , beforeRemove , afterRemove , beforeUpdate , afterUpdate , beforeMultipleInsert , afterMultipleInsert , beforeMultipleRemove , afterMultipleRemove , beforeMultipleUpdate , afterMultipleUpdate , formatElapsedTime } = components; | ||
const { getDocumentProperties , getDocumentIndexId , validateSchema , beforeInsert , afterInsert , beforeRemove , afterRemove , beforeUpdate , afterUpdate , afterSearch , beforeMultipleInsert , afterMultipleInsert , beforeMultipleRemove , afterMultipleRemove , beforeMultipleUpdate , afterMultipleUpdate , formatElapsedTime } = components; | ||
const orama = { | ||
@@ -99,2 +100,3 @@ data: {}, | ||
afterUpdate, | ||
afterSearch, | ||
beforeMultipleInsert, | ||
@@ -101,0 +103,0 @@ afterMultipleInsert, |
@@ -5,2 +5,3 @@ import { prioritizeTokenScores } from '../components/algorithms.js'; | ||
import { getGroups } from '../components/groups.js'; | ||
import { runAfterSearch } from '../components/hooks.js'; | ||
import { createError } from '../errors.js'; | ||
@@ -13,3 +14,3 @@ import { getNanosecondsTime, getNested, sortTokenScorePredicate } from '../utils.js'; | ||
}; | ||
async function createSearchContext(tokenizer, index, documentsStore, language, params, properties, tokens, docsCount) { | ||
async function createSearchContext(tokenizer, index, documentsStore, language, params, properties, tokens, docsCount, timeStart) { | ||
// If filters are enabled, we need to get the IDs of the documents that match the filters. | ||
@@ -54,3 +55,3 @@ // const hasFilters = Object.keys(params.where ?? {}).length > 0; | ||
return { | ||
timeStart: await getNanosecondsTime(), | ||
timeStart, | ||
tokenizer, | ||
@@ -68,2 +69,3 @@ index, | ||
export async function search(orama, params, language) { | ||
const timeStart = await getNanosecondsTime(); | ||
params.relevance = Object.assign(params.relevance ?? {}, defaultBM25Params); | ||
@@ -92,3 +94,3 @@ const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0; | ||
// Create the search context and the results | ||
const context = await createSearchContext(orama.tokenizer, orama.index, orama.documentsStore, language, params, propertiesToSearch, tokens, await orama.documentsStore.count(docs)); | ||
const context = await createSearchContext(orama.tokenizer, orama.index, orama.documentsStore, language, params, propertiesToSearch, tokens, await orama.documentsStore.count(docs), timeStart); | ||
// If filters are enabled, we need to get the IDs of the documents that match the filters. | ||
@@ -173,4 +175,4 @@ const hasFilters = Object.keys(params.where ?? {}).length > 0; | ||
elapsed: { | ||
raw: 0, | ||
formatted: '' | ||
formatted: '', | ||
raw: 0 | ||
}, | ||
@@ -192,2 +194,6 @@ // We keep the hits array empty if it's a preflight request. | ||
} | ||
if (orama.afterSearch) { | ||
await runAfterSearch(orama.afterSearch, orama, params, language, searchResult); | ||
} | ||
// Calculate elapsed time only at the end of the function | ||
searchResult.elapsed = await orama.formatElapsedTime(await getNanosecondsTime() - context.timeStart); | ||
@@ -194,0 +200,0 @@ return searchResult; |
@@ -170,3 +170,2 @@ const BALANCE_STATE = { | ||
} else { | ||
// assuming value is an array here | ||
current.value = current.value.concat(value); | ||
@@ -178,3 +177,4 @@ return root; | ||
if (!parent) { | ||
root = newNode; // tree was empty | ||
root = newNode // tree was empty | ||
; | ||
} else if (key < parent.key) { | ||
@@ -181,0 +181,0 @@ parent.left = newNode; |
@@ -326,4 +326,5 @@ import { Language } from './components/tokenizer/languages.js'; | ||
}; | ||
export type SingleCallbackComponent<A extends ProvidedTypes> = (orama: Orama<A>, id: string, doc?: Document) => SyncOrAsyncValue; | ||
export type MultipleCallbackComponent<A extends ProvidedTypes> = (orama: Orama<A>, doc: Document[] | string[]) => SyncOrAsyncValue; | ||
export type SingleCallbackComponent<P extends ProvidedTypes> = (orama: Orama<P>, id: string, doc?: Document) => SyncOrAsyncValue; | ||
export type MultipleCallbackComponent<P extends ProvidedTypes> = (orama: Orama<P>, doc: Document[] | string[]) => SyncOrAsyncValue; | ||
export type AfterSearch<P extends ProvidedTypes> = <AggValue>(db: Orama<P>, params: SearchParams<AggValue>, language: string | undefined, results: Results<AggValue>) => SyncOrAsyncValue; | ||
export type IIndexInsertOrRemoveHookFunction<I extends OpaqueIndex = OpaqueIndex, R = void> = (index: I, prop: string, id: string, value: SearchableValue, type: SearchableType, language: string | undefined, tokenizer: Tokenizer, docsCount: number) => SyncOrAsyncValue<R>; | ||
@@ -416,31 +417,33 @@ export interface IIndex<I extends OpaqueIndex = OpaqueIndex> { | ||
} | ||
export interface SingleOrArrayCallbackComponents<A extends ProvidedTypes> { | ||
beforeInsert: SingleOrArray<SingleCallbackComponent<A>>; | ||
afterInsert: SingleOrArray<SingleCallbackComponent<A>>; | ||
beforeRemove: SingleOrArray<SingleCallbackComponent<A>>; | ||
afterRemove: SingleOrArray<SingleCallbackComponent<A>>; | ||
beforeUpdate: SingleOrArray<SingleCallbackComponent<A>>; | ||
afterUpdate: SingleOrArray<SingleCallbackComponent<A>>; | ||
beforeMultipleInsert: SingleOrArray<MultipleCallbackComponent<A>>; | ||
afterMultipleInsert: SingleOrArray<MultipleCallbackComponent<A>>; | ||
beforeMultipleRemove: SingleOrArray<MultipleCallbackComponent<A>>; | ||
afterMultipleRemove: SingleOrArray<MultipleCallbackComponent<A>>; | ||
beforeMultipleUpdate: SingleOrArray<MultipleCallbackComponent<A>>; | ||
afterMultipleUpdate: SingleOrArray<MultipleCallbackComponent<A>>; | ||
export interface SingleOrArrayCallbackComponents<P extends ProvidedTypes> { | ||
beforeInsert: SingleOrArray<SingleCallbackComponent<P>>; | ||
afterInsert: SingleOrArray<SingleCallbackComponent<P>>; | ||
beforeRemove: SingleOrArray<SingleCallbackComponent<P>>; | ||
afterRemove: SingleOrArray<SingleCallbackComponent<P>>; | ||
beforeUpdate: SingleOrArray<SingleCallbackComponent<P>>; | ||
afterUpdate: SingleOrArray<SingleCallbackComponent<P>>; | ||
afterSearch: SingleOrArray<AfterSearch<P>>; | ||
beforeMultipleInsert: SingleOrArray<MultipleCallbackComponent<P>>; | ||
afterMultipleInsert: SingleOrArray<MultipleCallbackComponent<P>>; | ||
beforeMultipleRemove: SingleOrArray<MultipleCallbackComponent<P>>; | ||
afterMultipleRemove: SingleOrArray<MultipleCallbackComponent<P>>; | ||
beforeMultipleUpdate: SingleOrArray<MultipleCallbackComponent<P>>; | ||
afterMultipleUpdate: SingleOrArray<MultipleCallbackComponent<P>>; | ||
} | ||
export interface ArrayCallbackComponents<A extends ProvidedTypes> { | ||
beforeInsert: SingleCallbackComponent<A>[]; | ||
afterInsert: SingleCallbackComponent<A>[]; | ||
beforeRemove: SingleCallbackComponent<A>[]; | ||
afterRemove: SingleCallbackComponent<A>[]; | ||
beforeUpdate: SingleCallbackComponent<A>[]; | ||
afterUpdate: SingleCallbackComponent<A>[]; | ||
beforeMultipleInsert: MultipleCallbackComponent<A>[]; | ||
afterMultipleInsert: MultipleCallbackComponent<A>[]; | ||
beforeMultipleRemove: MultipleCallbackComponent<A>[]; | ||
afterMultipleRemove: MultipleCallbackComponent<A>[]; | ||
beforeMultipleUpdate: MultipleCallbackComponent<A>[]; | ||
afterMultipleUpdate: MultipleCallbackComponent<A>[]; | ||
export interface ArrayCallbackComponents<P extends ProvidedTypes> { | ||
beforeInsert: SingleCallbackComponent<P>[]; | ||
afterInsert: SingleCallbackComponent<P>[]; | ||
beforeRemove: SingleCallbackComponent<P>[]; | ||
afterRemove: SingleCallbackComponent<P>[]; | ||
beforeUpdate: SingleCallbackComponent<P>[]; | ||
afterUpdate: SingleCallbackComponent<P>[]; | ||
afterSearch: AfterSearch<P>[]; | ||
beforeMultipleInsert: MultipleCallbackComponent<P>[]; | ||
afterMultipleInsert: MultipleCallbackComponent<P>[]; | ||
beforeMultipleRemove: MultipleCallbackComponent<P>[]; | ||
afterMultipleRemove: MultipleCallbackComponent<P>[]; | ||
beforeMultipleUpdate: MultipleCallbackComponent<P>[]; | ||
afterMultipleUpdate: MultipleCallbackComponent<P>[]; | ||
} | ||
export type Components<A extends ProvidedTypes> = Partial<ObjectComponents<A['Index'], A['DocumentStore'], A['Sorter']> & FunctionComponents & SingleOrArrayCallbackComponents<A>>; | ||
export type Components<P extends ProvidedTypes> = Partial<ObjectComponents<P['Index'], P['DocumentStore'], P['Sorter']> & FunctionComponents & SingleOrArrayCallbackComponents<P>>; | ||
export declare const kInsertions: unique symbol; | ||
@@ -453,9 +456,9 @@ export declare const kRemovals: unique symbol; | ||
} | ||
type Internals<A extends ProvidedTypes> = { | ||
schema: A['Schema']; | ||
type Internals<P extends ProvidedTypes> = { | ||
schema: P['Schema']; | ||
tokenizer: Tokenizer; | ||
index: IIndex<A['Index']>; | ||
documentsStore: IDocumentsStore<A['DocumentStore']>; | ||
sorter: ISorter<A['Sorter']>; | ||
data: Data<A['Index'], A['DocumentStore'], A['Sorter']>; | ||
index: IIndex<P['Index']>; | ||
documentsStore: IDocumentsStore<P['DocumentStore']>; | ||
sorter: ISorter<P['Sorter']>; | ||
data: Data<P['Index'], P['DocumentStore'], P['Sorter']>; | ||
caches: Record<string, unknown>; | ||
@@ -477,3 +480,3 @@ [kInsertions]: number | undefined; | ||
}; | ||
export type Orama<A extends Partial<ProvidedTypes> = { | ||
export type Orama<P extends Partial<ProvidedTypes> = { | ||
Schema: Schema; | ||
@@ -483,3 +486,3 @@ Index: OpaqueIndex; | ||
Sorter: OpaqueSorter; | ||
}> = FunctionComponents & ArrayCallbackComponents<RequiredInner<A>> & Internals<RequiredInner<A>> & OramaID; | ||
}> = FunctionComponents & ArrayCallbackComponents<RequiredInner<P>> & Internals<RequiredInner<P>> & OramaID; | ||
export {}; |
{ | ||
"name": "@orama/orama", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"type": "module", | ||
@@ -78,3 +78,3 @@ "description": "Next generation full-text search engine, written in TypeScript", | ||
"vite": "^4.1.4", | ||
"@orama/stemmers": "1.0.4" | ||
"@orama/stemmers": "1.0.5" | ||
}, | ||
@@ -81,0 +81,0 @@ "engines": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
513734
6964