diff --git a/package.json b/package.json
index 9e9fed74f..7790dcafa 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,7 @@
"tape": "^5.6.1",
"tcompare": "^6.0.0",
"tsx": "^3.12.1",
- "turbo": "^1.8.5",
+ "turbo": "^2.1.3",
"typescript": "^5.0.0"
},
"author": {
diff --git a/packages/benchmarks/benchmark/results/reduce.chart.html b/packages/benchmarks/benchmark/results/reduce.chart.html
new file mode 100644
index 000000000..7b44bde35
--- /dev/null
+++ b/packages/benchmarks/benchmark/results/reduce.chart.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+ Example
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/benchmarks/benchmark/results/reduce.json b/packages/benchmarks/benchmark/results/reduce.json
new file mode 100644
index 000000000..c062615cb
--- /dev/null
+++ b/packages/benchmarks/benchmark/results/reduce.json
@@ -0,0 +1,21 @@
+{
+ "name": "Example",
+ "date": "2023-06-07T13:16:45.810Z",
+ "version": "1.0.0",
+ "results": [
+ {
+ "name": "3arr - 0.5",
+ "ops": 2606835,
+ "margin": 0.16,
+ "percentSlower": 0
+ }
+ ],
+ "fastest": {
+ "name": "3arr - 0.5",
+ "index": 0
+ },
+ "slowest": {
+ "name": "3arr - 0.5",
+ "index": 0
+ }
+}
diff --git a/packages/orama/package.json b/packages/orama/package.json
index 1db4035cd..b95c71a10 100644
--- a/packages/orama/package.json
+++ b/packages/orama/package.json
@@ -148,7 +148,7 @@
"commitizen": "^4.2.6",
"glob": "^9.2.3",
"prettier": "^2.8.1",
- "tap": "^18.6.1",
+ "tap": "^21.0.1",
"tap-mocha-reporter": "^5.0.3",
"tape": "^5.6.1",
"tcompare": "^6.0.0",
diff --git a/packages/orama/src/components/index.ts b/packages/orama/src/components/index.ts
index c3b82c48a..77878f87f 100644
--- a/packages/orama/src/components/index.ts
+++ b/packages/orama/src/components/index.ts
@@ -13,11 +13,8 @@ import type {
ScalarSearchableType,
SearchableType,
SearchableValue,
- SearchContext,
- SearchParamsFullText,
Tokenizer,
TokenScore,
- TypedDocument,
VectorIndex,
VectorType,
WhereCondition
@@ -32,7 +29,7 @@ import { RadixTree } from '../trees/radix.js'
import { BKDTree } from '../trees/bkd.js'
import { BoolNode } from '../trees/bool.js'
-import { convertDistanceToMeters, intersect, safeArrayPush, getOwnProperty } from '../utils.js'
+import { convertDistanceToMeters, intersect, safeArrayPush } from '../utils.js'
import { BM25 } from './algorithms.js'
import { getMagnitude } from './cosine-similarity.js'
import { getInnerType, getVectorSize, isArrayType, isVectorType } from './defaults.js'
@@ -139,46 +136,6 @@ export function removeTokenScoreParameters(index: Index, prop: string, token: st
index.tokenOccurrences[prop][token]--
}
-export function calculateResultScores>(
- context: SearchContext>,
- index: Index,
- prop: string,
- term: string,
- ids: DocumentID[]
-): TokenScore[] {
- const documentIDs = Array.from(ids)
-
- // Exact fields for TF-IDF
- const avgFieldLength = index.avgFieldLength[prop]
- const fieldLengths = index.fieldLengths[prop]
- const oramaOccurrences = index.tokenOccurrences[prop]
- const oramaFrequencies = index.frequencies[prop]
-
- // oramaOccurrences[term] can be undefined, 0, string, or { [k: string]: number }
- const termOccurrences = typeof oramaOccurrences[term] === 'number' ? oramaOccurrences[term] ?? 0 : 0
-
- const scoreList: TokenScore[] = []
-
- // Calculate TF-IDF value for each term, in each document, for each index.
- const documentIDsLength = documentIDs.length
- for (let k = 0; k < documentIDsLength; k++) {
- const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, documentIDs[k])
- const tf = oramaFrequencies?.[internalId]?.[term] ?? 0
-
- const bm25 = BM25(
- tf,
- termOccurrences,
- context.docsCount,
- fieldLengths[internalId]!,
- avgFieldLength,
- context.params.relevance! as Required
- )
-
- scoreList.push([internalId, bm25])
- }
- return scoreList
-}
-
export function create(
orama: T,
sharedInternalDocumentStore: T['internalDocumentIDStore'],
@@ -258,15 +215,13 @@ function insertScalarBuilder(
implementation: IIndex,
index: Index,
prop: string,
- id: DocumentID,
+ internalId: InternalDocumentID,
language: string | undefined,
tokenizer: Tokenizer,
docsCount: number,
options?: InsertOptions
) {
return (value: SearchableValue) => {
- const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id)
-
const { type, node } = index.indexes[prop]
switch (type) {
case 'Bool': {
@@ -307,6 +262,7 @@ export function insert(
index: Index,
prop: string,
id: DocumentID,
+ internalId: InternalDocumentID,
value: SearchableValue,
schemaType: SearchableType,
language: string | undefined,
@@ -318,7 +274,7 @@ export function insert(
return insertVector(index, prop, value as number[] | Float32Array, id)
}
- const insertScalar = insertScalarBuilder(implementation, index, prop, id, language, tokenizer, docsCount, options)
+ const insertScalar = insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options)
if (!isArrayType(schemaType)) {
return insertScalar(value)
@@ -429,42 +385,144 @@ export function remove(
return true
}
-export function search>(
- context: SearchContext>,
+export function calculateResultScores(
index: Index,
prop: string,
- term: string
-): TokenScore[] {
- if (!(prop in index.tokenOccurrences)) {
- return []
+ term: string,
+ ids: InternalDocumentID[],
+ docsCount: number,
+ bm25Relevance: Required,
+ resultsMap: Map,
+ boostPerProperty: number,
+) {
+ const documentIDs = Array.from(ids)
+
+ // Exact fields for TF-IDF
+ const avgFieldLength = index.avgFieldLength[prop]
+ const fieldLengths = index.fieldLengths[prop]
+ const oramaOccurrences = index.tokenOccurrences[prop]
+ const oramaFrequencies = index.frequencies[prop]
+
+ // oramaOccurrences[term] can be undefined, 0, string, or { [k: string]: number }
+ const termOccurrences = typeof oramaOccurrences[term] === 'number' ? oramaOccurrences[term] ?? 0 : 0
+
+ // Calculate TF-IDF value for each term, in each document, for each index.
+ const documentIDsLength = documentIDs.length
+ for (let k = 0; k < documentIDsLength; k++) {
+ const internalId = documentIDs[k]
+ const tf = oramaFrequencies?.[internalId]?.[term] ?? 0
+
+ const bm25 = BM25(
+ tf,
+ termOccurrences,
+ docsCount,
+ fieldLengths[internalId]!,
+ avgFieldLength,
+ bm25Relevance,
+ )
+
+ if (resultsMap.has(internalId)) {
+ resultsMap.set(internalId, resultsMap.get(internalId)! + bm25 * boostPerProperty)
+ } else {
+ resultsMap.set(internalId, bm25 * boostPerProperty)
+ }
}
+}
- const { node, type } = index.indexes[prop]
- if (type !== 'Radix') {
- throw createError('WRONG_SEARCH_PROPERTY_TYPE', prop)
+function searchInProperty(
+ index: Index,
+ tree: RadixTree,
+ prop: string,
+ tokens: string[],
+ exact: boolean,
+ tolerance: number,
+ resultsMap: Map,
+ boostPerProperty: number,
+ bm25Relevance: Required,
+ docsCount: number,
+) {
+ const tokenLength = tokens.length;
+ for (let i = 0; i < tokenLength; i++) {
+ const term = tokens[i];
+
+ const searchResult = tree.find({ term, exact, tolerance })
+
+ const termsFound = Object.keys(searchResult)
+ const termsFoundLength = termsFound.length;
+ for (let j = 0; j < termsFoundLength; j++) {
+ const word = termsFound[j]
+ const ids = searchResult[word]
+ calculateResultScores(
+ index,
+ prop,
+ word,
+ ids,
+ docsCount,
+ bm25Relevance,
+ resultsMap,
+ boostPerProperty,
+ )
+ }
}
+}
- const { exact, tolerance } = context.params
- const searchResult = node.find({ term, exact, tolerance })
- const ids = new Set()
+export function search(
+ index: Index,
+ term: string,
+ tokenizer: Tokenizer,
+ language: string | undefined,
+ propertiesToSearch: string[],
+ exact: boolean,
+ tolerance: number,
+ boost: Record,
+ relevance: Required,
+ docsCount: number
+): TokenScore[] {
+ const tokens = tokenizer.tokenize(term, language)
- for (const key in searchResult) {
- //skip keys inherited from prototype
- const ownProperty = getOwnProperty(searchResult, key)
- if (!ownProperty) continue
+ const resultsMap = new Map()
+ for (const prop of propertiesToSearch) {
+ if (!(prop in index.indexes)) {
+ continue
+ }
- for (const id of searchResult[key]) {
- ids.add(id)
+ const tree = index.indexes[prop]
+ const { type } = tree
+ if (type !== 'Radix') {
+ throw createError('WRONG_SEARCH_PROPERTY_TYPE', prop)
+ }
+ const boostPerProperty = boost[prop] ?? 1
+ if (boostPerProperty <= 0) {
+ throw createError('INVALID_BOOST_VALUE', boostPerProperty)
}
+
+ // if the tokenizer returns an empty array, we returns all the documents
+ if (tokens.length === 0 && !term) {
+ tokens.push('')
+ }
+
+ searchInProperty(
+ index,
+ tree.node,
+ prop,
+ tokens,
+ exact,
+ tolerance,
+ resultsMap,
+ boostPerProperty,
+ relevance,
+ docsCount
+ )
}
- return context.index.calculateResultScores(context, index, prop, term, Array.from(ids))
+ return Array.from(resultsMap)
}
-export function searchByWhereClause>(
- context: SearchContext,
+export function searchByWhereClause(
index: Index,
- filters: Partial>
+ tokenizer: Tokenizer,
+ filters: Partial>,
+ language: string | undefined
): number[] {
const filterKeys = Object.keys(filters)
@@ -537,7 +595,7 @@ export function searchByWhereClause(
orama.tokenizer,
docsCount
)
+ const internalId = orama.internalDocumentIDStore.idToInternalId.get(id)
await orama.index.insert(
orama.index,
orama.data.index,
prop,
id,
+ internalId!,
value,
expectedType,
language,
@@ -231,12 +234,14 @@ function indexAndSortDocumentSync(
const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop]
+ const internalDocumentId = getInternalDocumentId(orama.internalDocumentIDStore, id)
orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount)
orama.index.insert(
orama.index,
orama.data.index,
prop,
id,
+ internalDocumentId,
value,
expectedType,
language,
diff --git a/packages/orama/src/methods/remove.ts b/packages/orama/src/methods/remove.ts
index 301ed5e60..c5a33a504 100644
--- a/packages/orama/src/methods/remove.ts
+++ b/packages/orama/src/methods/remove.ts
@@ -164,7 +164,7 @@ function removeSync(orama: T, id: DocumentID, language?: str
schemaType,
language,
orama.tokenizer,
- docsCount
+ docsCount,
)
) {
result = false
diff --git a/packages/orama/src/methods/search-fulltext.ts b/packages/orama/src/methods/search-fulltext.ts
index 5ca32b0c6..eca6034ca 100644
--- a/packages/orama/src/methods/search-fulltext.ts
+++ b/packages/orama/src/methods/search-fulltext.ts
@@ -1,13 +1,13 @@
-import { prioritizeTokenScores } from '../components/algorithms.js'
import { getFacets } from '../components/facets.js'
import { intersectFilteredIDs } from '../components/filters.js'
import { getGroups } from '../components/groups.js'
import { runAfterSearch, runBeforeSearch } from '../components/hooks.js'
-import type { InternalDocumentID } from '../components/internal-document-id-store.js'
import { getInternalDocumentId } from '../components/internal-document-id-store.js'
+import { Language } from '../components/tokenizer/languages.js'
import { createError } from '../errors.js'
import type {
AnyOrama,
+ BM25Params,
CustomSorterFunctionItem,
ElapsedTime,
Results,
@@ -15,119 +15,92 @@ import type {
TokenScore,
TypedDocument
} from '../types.js'
-import { getNanosecondsTime, removeVectorsFromHits, safeArrayPush, sortTokenScorePredicate } from '../utils.js'
-import { createSearchContext, defaultBM25Params, fetchDocuments, fetchDocumentsWithDistinct } from './search.js'
+import { getNanosecondsTime, removeVectorsFromHits, sortTokenScorePredicate } from '../utils.js'
+import { count } from './docs.js'
+import { fetchDocuments, fetchDocumentsWithDistinct } from './search.js'
-export function fullTextSearch>(
+export function innerFullTextSearch(
orama: T,
- params: SearchParamsFullText,
- language?: string
-): Results | Promise> {
- const timeStart = getNanosecondsTime()
-
- const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length
-
- function performSearchLogic(): Results {
- params.relevance = Object.assign(defaultBM25Params, params.relevance ?? {})
-
- const vectorProperties = Object.keys(orama.data.index.vectorIndexes)
- const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0
- const { limit = 10, offset = 0, term, properties, threshold = 0, distinctOn, includeVectors = false } = params
- const isPreflight = params.preflight === true
+ params: Pick, 'term' | 'properties' | 'where' | 'exact' | 'tolerance' | 'boost' | 'relevance'>,
+ language: Language | undefined
+) {
+ const { term, properties } = params
+
+ const index = orama.data.index
+ // Get searchable string properties
+ let propertiesToSearch = orama.caches['propertiesToSearch'] as string[]
+ if (!propertiesToSearch) {
+ const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index)
+
+ propertiesToSearch = orama.index.getSearchableProperties(index)
+ propertiesToSearch = propertiesToSearch.filter((prop: string) =>
+ propertiesToSearchWithTypes[prop].startsWith('string')
+ )
- const { index, docs } = orama.data
- const tokens = orama.tokenizer.tokenize(term ?? '', language)
-
- let propertiesToSearch = orama.caches['propertiesToSearch'] as string[]
- if (!propertiesToSearch) {
- const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index)
- propertiesToSearch = orama.index.getSearchableProperties(index)
- propertiesToSearch = propertiesToSearch.filter((prop: string) =>
- propertiesToSearchWithTypes[prop].startsWith('string')
- )
- orama.caches['propertiesToSearch'] = propertiesToSearch
- }
+ orama.caches['propertiesToSearch'] = propertiesToSearch
+ }
- if (properties && properties !== '*') {
- for (const prop of properties) {
- if (!propertiesToSearch.includes(prop as string)) {
- throw createError('UNKNOWN_INDEX', prop as string, propertiesToSearch.join(', '))
- }
+ if (properties && properties !== '*') {
+ for (const prop of properties) {
+ if (!propertiesToSearch.includes(prop as string)) {
+ throw createError('UNKNOWN_INDEX', prop as string, propertiesToSearch.join(', '))
}
- propertiesToSearch = propertiesToSearch.filter((prop: string) => (properties as string[]).includes(prop))
}
- const context = createSearchContext(
+ propertiesToSearch = propertiesToSearch.filter((prop: string) => (properties as string[]).includes(prop))
+ }
+
+ let uniqueDocsIDs: TokenScore[]
+ // We need to perform the search if:
+ // - we have a search term
+ // - or we have properties to search
+ // in this case, we need to return all the documents that contains at least one of the given properties
+ if (term || properties) {
+
+ const docsCount = count(orama)
+ uniqueDocsIDs = orama.index.search(
+ index,
+ term || '',
orama.tokenizer,
- orama.index,
- orama.documentsStore,
language,
- params,
propertiesToSearch,
- tokens,
- orama.documentsStore.count(docs),
- timeStart
+ params.exact || false,
+ params.tolerance || 0,
+ params.boost || {},
+ applyDefault(params.relevance),
+ docsCount,
)
+ } else {
+ // Tokenizer returns empty array and the search term is empty as well.
+ // We return all the documents.
+ uniqueDocsIDs = Object.keys(orama.documentsStore.getAll(orama.data.docs)).map((k) => [+k, 0] as TokenScore)
+ }
- const hasFilters = Object.keys(params.where ?? {}).length > 0
- let whereFiltersIDs: InternalDocumentID[] = []
+ // If filters are enabled, we need to get the IDs of the documents that match the filters.
+ const hasFilters = Object.keys(params.where ?? {}).length > 0
+ if (hasFilters) {
+ const whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where!, language)
+ uniqueDocsIDs = intersectFilteredIDs(whereFiltersIDs, uniqueDocsIDs)
+ }
- if (hasFilters) {
- whereFiltersIDs = orama.index.searchByWhereClause(context, index, params.where!)
- }
+ return uniqueDocsIDs
+}
- const tokensLength = tokens.length
- if (tokensLength || properties?.length) {
- const indexesLength = propertiesToSearch.length
- for (let i = 0; i < indexesLength; i++) {
- const prop = propertiesToSearch[i]
- const docIds = context.indexMap[prop]
-
- if (tokensLength !== 0) {
- for (let j = 0; j < tokensLength; j++) {
- const term = tokens[j]
- const scoreList = orama.index.search(context, index, prop, term)
- safeArrayPush(docIds[term], scoreList)
- }
- } else {
- docIds[''] = []
- const scoreList = orama.index.search(context, index, prop, '')
- safeArrayPush(docIds[''], scoreList)
- }
-
- const vals = Object.values(docIds)
- context.docsIntersection[prop] = prioritizeTokenScores(
- vals,
- params?.boost?.[prop] ?? 1,
- threshold,
- tokensLength
- )
- const uniqueDocs = context.docsIntersection[prop]
-
- const uniqueDocsLength = uniqueDocs.length
- for (let i = 0; i < uniqueDocsLength; i++) {
- const [id, score] = uniqueDocs[i]
- const prevScore = context.uniqueDocsIDs[id]
- if (prevScore) {
- context.uniqueDocsIDs[id] = prevScore + score + 0.5
- } else {
- context.uniqueDocsIDs[id] = score
- }
- }
- }
- } else if (tokens.length === 0 && term) {
- context.uniqueDocsIDs = {}
- } else {
- context.uniqueDocsIDs = Object.fromEntries(
- Object.keys(orama.documentsStore.getAll(orama.data.docs)).map((k) => [k, 0])
- )
- }
- let uniqueDocsArray = Object.entries(context.uniqueDocsIDs).map(([id, score]) => [+id, score] as TokenScore)
+export function fullTextSearch>(
+ orama: T,
+ params: SearchParamsFullText,
+ language?: string
+): Results | Promise> {
+ const timeStart = getNanosecondsTime()
+
+ function performSearchLogic(): Results {
+ const vectorProperties = Object.keys(orama.data.index.vectorIndexes)
+ const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0
+ const { limit = 10, offset = 0, distinctOn, includeVectors = false } = params
+ const isPreflight = params.preflight === true
- if (hasFilters) {
- uniqueDocsArray = intersectFilteredIDs(whereFiltersIDs, uniqueDocsArray)
- }
+ let uniqueDocsArray = innerFullTextSearch(orama, params, language)
if (params.sortBy) {
if (typeof params.sortBy === 'function') {
@@ -181,7 +154,7 @@ export function fullTextSearch(orama, uniqueDocsArray, params.groupBy)
}
- searchResult.elapsed = orama.formatElapsedTime(getNanosecondsTime() - context.timeStart) as ElapsedTime
+ searchResult.elapsed = orama.formatElapsedTime(getNanosecondsTime() - timeStart) as ElapsedTime
return searchResult
}
@@ -200,9 +173,24 @@ export function fullTextSearch {
+ const r = bm25Relevance ?? {}
+ r.k = r.k ?? defaultBM25Params.k;
+ r.b = r.b ?? defaultBM25Params.b;
+ r.d = r.d ?? defaultBM25Params.d;
+ return r as Required
+}
\ No newline at end of file
diff --git a/packages/orama/src/methods/search-hybrid.ts b/packages/orama/src/methods/search-hybrid.ts
index fa503943e..8dcbefde5 100644
--- a/packages/orama/src/methods/search-hybrid.ts
+++ b/packages/orama/src/methods/search-hybrid.ts
@@ -7,18 +7,27 @@ import type {
Result,
HybridWeights
} from '../types.js'
-import type { InternalDocumentID } from '../components/internal-document-id-store.js'
-import { getNanosecondsTime, safeArrayPush, formatNanoseconds, removeVectorsFromHits } from '../utils.js'
-import { intersectFilteredIDs } from '../components/filters.js'
-import { prioritizeTokenScores } from '../components/algorithms.js'
-import { createError } from '../errors.js'
-import { createSearchContext, defaultBM25Params } from './search.js'
+import { getNanosecondsTime, formatNanoseconds, removeVectorsFromHits } from '../utils.js'
import { getFacets } from '../components/facets.js'
import { getGroups } from '../components/groups.js'
-import { findSimilarVectors } from '../components/cosine-similarity.js'
-import { getInternalDocumentId } from '../components/internal-document-id-store.js'
import { fetchDocuments } from './search.js'
-import { runBeforeSearch, runAfterSearch } from '../components/hooks.js'
+import { innerFullTextSearch } from './search-fulltext.js'
+import { innerVectorSearch } from './search-vector.js'
+import { runAfterSearch, runBeforeSearch } from '../components/hooks.js'
+
+export function innerHybridSearch>(
+ orama: T,
+ params: SearchParamsHybrid,
+ language?: string
+) {
+ const fullTextIDs = minMaxScoreNormalization(
+ innerFullTextSearch(orama, params, language)
+ )
+ const vectorIDs = innerVectorSearch(orama, params, language)
+
+ const hybridWeights = params.hybridWeights
+ return mergeAndRankResults(fullTextIDs, vectorIDs, params.term ?? '', hybridWeights)
+}
export function hybridSearch>(
orama: T,
@@ -27,60 +36,11 @@ export function hybridSearch | Promise> {
const timeStart = getNanosecondsTime()
- const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length
-
function performSearchLogic(): Results {
- const { offset = 0, limit = 10, includeVectors = false } = params
- const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0
-
- const fullTextIDs = getFullTextSearchIDs(orama, params, language)
- const vectorIDs = getVectorSearchIDs(orama, params)
-
- const { index, docs } = orama.data
- const hybridWeights = params.hybridWeights
- let uniqueTokenScores = mergeAndRankResults(fullTextIDs, vectorIDs, params.term ?? '', hybridWeights)
-
- const tokens = orama.tokenizer.tokenize(params.term ?? '', language)
- let propertiesToSearch = orama.caches['propertiesToSearch'] as string[]
- if (!propertiesToSearch) {
- const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index)
- propertiesToSearch = orama.index.getSearchableProperties(index)
- propertiesToSearch = propertiesToSearch.filter((prop: string) =>
- propertiesToSearchWithTypes[prop].startsWith('string')
- )
- orama.caches['propertiesToSearch'] = propertiesToSearch
- }
-
- if (params.properties && params.properties !== '*') {
- for (const prop of params.properties) {
- if (!propertiesToSearch.includes(prop as string)) {
- throw createError('UNKNOWN_INDEX', prop as string, propertiesToSearch.join(', '))
- }
- }
- propertiesToSearch = propertiesToSearch.filter((prop: string) => (params.properties as string[]).includes(prop))
- }
-
- const context = createSearchContext(
- orama.tokenizer,
- orama.index,
- orama.documentsStore,
- language,
- params,
- propertiesToSearch,
- tokens,
- orama.documentsStore.count(docs),
- timeStart
- )
-
- const hasFilters = Object.keys(params.where ?? {}).length > 0
- let whereFiltersIDs: InternalDocumentID[] = []
-
- if (hasFilters) {
- whereFiltersIDs = orama.index.searchByWhereClause(context, index, params.where!)
- uniqueTokenScores = intersectFilteredIDs(whereFiltersIDs, uniqueTokenScores)
- }
-
+ const uniqueTokenScores = innerHybridSearch(orama, params, language)
+
let facetsResults: any
+ const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0
if (shouldCalculateFacets) {
facetsResults = getFacets(orama, uniqueTokenScores, params.facets!)
}
@@ -90,6 +50,9 @@ export function hybridSearch(orama, uniqueTokenScores, params.groupBy)
}
+ const offset = params.offset ?? 0
+ const limit = params.limit ?? 10
+
const results = fetchDocuments(orama, uniqueTokenScores, offset, limit).filter(Boolean)
const timeEnd = getNanosecondsTime()
@@ -105,6 +68,7 @@ export function hybridSearch> {
if (orama.beforeSearch) {
await runBeforeSearch(orama.beforeSearch, orama, params, language)
@@ -127,6 +92,7 @@ export function hybridSearch>(
- orama: T,
- params: SearchParamsHybrid,
- language?: string
-): TokenScore[] {
- const timeStart = getNanosecondsTime()
- params.relevance = Object.assign(defaultBM25Params, params.relevance ?? {})
-
- const { term = '', properties, threshold = 0 } = params
-
- const { index, docs } = orama.data
- const tokens = orama.tokenizer.tokenize(term, language)
-
- let propertiesToSearch = orama.caches['propertiesToSearch'] as string[]
- if (!propertiesToSearch) {
- const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index)
-
- propertiesToSearch = orama.index.getSearchableProperties(index)
- propertiesToSearch = propertiesToSearch.filter((prop: string) =>
- propertiesToSearchWithTypes[prop].startsWith('string')
- )
-
- orama.caches['propertiesToSearch'] = propertiesToSearch
- }
-
- if (properties && properties !== '*') {
- const propertiesToSearchSet = new Set(propertiesToSearch)
- const propertiesSet = new Set(properties as string[])
-
- for (const prop of properties) {
- if (!propertiesToSearchSet.has(prop as string)) {
- throw createError('UNKNOWN_INDEX', prop as string, propertiesToSearch.join(', '))
- }
- }
-
- propertiesToSearch = propertiesToSearch.filter((prop: string) => propertiesSet.has(prop))
- }
-
- const context = createSearchContext(
- orama.tokenizer,
- orama.index,
- orama.documentsStore,
- language,
- params,
- propertiesToSearch,
- tokens,
- orama.documentsStore.count(docs),
- timeStart
- )
-
- const tokensLength = tokens.length
-
- if (tokensLength || (properties && properties.length > 0)) {
- const indexesLength = propertiesToSearch.length
- for (let i = 0; i < indexesLength; i++) {
- const prop = propertiesToSearch[i]
-
- if (tokensLength !== 0) {
- for (let j = 0; j < tokensLength; j++) {
- const term = tokens[j]
-
- // Lookup
- const scoreList = orama.index.search(context, index, prop, term)
-
- safeArrayPush(context.indexMap[prop][term], scoreList)
- }
- } else {
- const indexMapContent = []
- context.indexMap[prop][''] = indexMapContent
- const scoreList = orama.index.search(context, index, prop, '')
- safeArrayPush(indexMapContent, scoreList)
- }
-
- const docIds = context.indexMap[prop]
- const vals = Object.values(docIds)
- context.docsIntersection[prop] = prioritizeTokenScores(vals, params?.boost?.[prop] ?? 1, threshold, tokensLength)
- const uniqueDocs = context.docsIntersection[prop]
-
- const uniqueDocsLength = uniqueDocs.length
- for (let i = 0; i < uniqueDocsLength; i++) {
- const [id, score] = uniqueDocs[i]
- const prevScore = context.uniqueDocsIDs[id]
- context.uniqueDocsIDs[id] = prevScore ? prevScore + score + 0.5 : score
- }
- }
- } else if (tokens.length === 0 && term) {
- // This case is hard to handle correctly.
- // For the time being, if tokenizer returns empty array but the term is not empty,
- // we returns an empty result set
- context.uniqueDocsIDs = {}
- } else {
- context.uniqueDocsIDs = Object.fromEntries(
- Object.keys(orama.documentsStore.getAll(orama.data.docs)).map((k) => [k, 0])
- )
- }
-
- const uniqueIDs = Object.entries(context.uniqueDocsIDs)
- .map(([id, score]) => [+id, score] as TokenScore)
- .sort((a, b) => b[1] - a[1])
-
- return minMaxScoreNormalization(uniqueIDs)
-}
-
-export function getVectorSearchIDs>(
- orama: T,
- params: SearchParamsHybrid
-): TokenScore[] {
- const vector = params.vector
- // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
- const vectorIndex = orama.data.index.vectorIndexes[vector?.property!]
- const vectorSize = vectorIndex.size
- const vectors = vectorIndex.vectors
-
- if (vector && (!vector.value || !vector.property)) {
- throw createError('INVALID_VECTOR_INPUT', Object.keys(vector).join(', '))
- }
-
- if (vector!.value.length !== vectorSize) {
- throw createError('INVALID_INPUT_VECTOR', vector!.property, vectorSize, vector!.value.length)
- }
-
- if (!(vector instanceof Float32Array)) {
- vector!.value = new Float32Array(vector!.value)
- }
-
- const uniqueIDs = findSimilarVectors(vector!.value as Float32Array, vectors, vectorSize, params.similarity).map(
- ([id, score]) => [getInternalDocumentId(orama.internalDocumentIDStore, id), score]
- ) as TokenScore[]
-
- return minMaxScoreNormalization(uniqueIDs)
-}
-
-function extractScore([, score]: TokenScore) {
- return score
+function extractScore(token: TokenScore) {
+ return token[1]
}
function minMaxScoreNormalization(results: TokenScore[]): TokenScore[] {
diff --git a/packages/orama/src/methods/search-vector.ts b/packages/orama/src/methods/search-vector.ts
index a8a03eeab..edcb1cbdd 100644
--- a/packages/orama/src/methods/search-vector.ts
+++ b/packages/orama/src/methods/search-vector.ts
@@ -1,6 +1,5 @@
import type { AnyOrama, Results, SearchParamsVector, TypedDocument, Result } from '../types.js'
import type { InternalDocumentID } from '../components/internal-document-id-store.js'
-import { createSearchContext } from './search.js'
import { getNanosecondsTime, formatNanoseconds } from '../utils.js'
import { getFacets } from '../components/facets.js'
import { createError } from '../errors.js'
@@ -11,88 +10,86 @@ import { getInternalDocumentId, getDocumentIdFromInternalId } from '../component
import { Language } from '../index.js'
import { runBeforeSearch, runAfterSearch } from '../components/hooks.js'
-export function searchVector>(
+export function innerVectorSearch>(
orama: T,
- params: SearchParamsVector,
- language: Language = 'english'
-): Results | Promise> {
- const timeStart = getNanosecondsTime()
+ params: Pick, 'vector' | 'similarity' | 'where'>,
+ language: Language | undefined
+) {
+ const vector = params.vector
- const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length
-
- function performSearchLogic(): Results {
- const { vector } = params
+ if (vector && (!('value' in vector) || !('property' in vector))) {
+ throw createError('INVALID_VECTOR_INPUT', Object.keys(vector).join(', '))
+ }
- if (vector && (!('value' in vector) || !('property' in vector))) {
- throw createError('INVALID_VECTOR_INPUT', Object.keys(vector).join(', '))
+ const vectorIndex = orama.data.index.vectorIndexes[vector!.property]
+ const vectorSize = vectorIndex.size
+ if (vector?.value.length !== vectorSize) {
+ if (vector?.property === undefined || vector?.value.length === undefined) {
+ throw createError('INVALID_INPUT_VECTOR', 'undefined', vectorSize, 'undefined')
}
+ throw createError('INVALID_INPUT_VECTOR', vector.property, vectorSize, vector.value.length)
+ }
- const { limit = 10, offset = 0, includeVectors = false } = params
- const vectorIndex = orama.data.index.vectorIndexes[vector!.property]
- const vectorSize = vectorIndex.size
- const vectors = vectorIndex.vectors
- const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0
- const hasFilters = Object.keys(params.where ?? {}).length > 0
- const { index, docs: oramaDocs } = orama.data
+ if (!(vector instanceof Float32Array)) {
+ vector.value = new Float32Array(vector.value)
+ }
- if (vector?.value.length !== vectorSize) {
- if (vector?.property === undefined || vector?.value.length === undefined) {
- throw createError('INVALID_INPUT_VECTOR', 'undefined', vectorSize, 'undefined')
- }
- throw createError('INVALID_INPUT_VECTOR', vector.property, vectorSize, vector.value.length)
- }
+ const vectors = vectorIndex.vectors
- if (!(vector instanceof Float32Array)) {
- vector.value = new Float32Array(vector.value)
- }
+ let results = findSimilarVectors(vector.value as Float32Array, vectors, vectorSize, params.similarity).map(
+ ([id, score]) => [getInternalDocumentId(orama.internalDocumentIDStore, id), score]
+ ) as [number, number][]
- let results = findSimilarVectors(vector.value as Float32Array, vectors, vectorSize, params.similarity).map(
- ([id, score]) => [getInternalDocumentId(orama.internalDocumentIDStore, id), score]
- ) as [number, number][]
- let propertiesToSearch = orama.caches['propertiesToSearch'] as string[]
+ let propertiesToSearch = orama.caches['propertiesToSearch'] as string[]
- if (!propertiesToSearch) {
- const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index)
+ const index = orama.data.index
+ if (!propertiesToSearch) {
+ const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index)
- propertiesToSearch = orama.index.getSearchableProperties(index)
- propertiesToSearch = propertiesToSearch.filter((prop: string) =>
- propertiesToSearchWithTypes[prop].startsWith('string')
- )
+ propertiesToSearch = orama.index.getSearchableProperties(index)
+ propertiesToSearch = propertiesToSearch.filter((prop: string) =>
+ propertiesToSearchWithTypes[prop].startsWith('string')
+ )
- orama.caches['propertiesToSearch'] = propertiesToSearch
- }
+ orama.caches['propertiesToSearch'] = propertiesToSearch
+ }
- const tokens = []
-
- const context = createSearchContext(
- orama.tokenizer,
- orama.index,
- orama.documentsStore,
- language,
- params,
- propertiesToSearch,
- tokens,
- orama.documentsStore.count(oramaDocs),
- timeStart
- )
- let whereFiltersIDs: InternalDocumentID[] = []
+ let whereFiltersIDs: InternalDocumentID[] = []
- if (hasFilters) {
- whereFiltersIDs = orama.index.searchByWhereClause(context, index, params.where!)
- results = intersectFilteredIDs(whereFiltersIDs, results)
- }
+ const hasFilters = Object.keys(params.where ?? {}).length > 0
+ if (hasFilters) {
+ whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where!, language)
+ results = intersectFilteredIDs(whereFiltersIDs, results)
+ }
+
+ return results
+}
+
+export function searchVector>(
+ orama: T,
+ params: SearchParamsVector,
+ language: Language = 'english'
+): Results | Promise> {
+ const timeStart = getNanosecondsTime()
+
+ function performSearchLogic(): Results {
+ const results = innerVectorSearch(orama, params, language)
let facetsResults: any = []
+ const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0
if (shouldCalculateFacets) {
const facets = getFacets(orama, results, params.facets!)
facetsResults = facets
}
+ const vectorProperty = params.vector!.property
+ const includeVectors = params.includeVectors ?? false
+ const limit = params.limit ?? 10
+ const offset = params.offset ?? 0
const docs: Result[] = Array.from({ length: limit })
-
for (let i = 0; i < limit; i++) {
const result = results[i + offset]
if (!result) {
@@ -103,7 +100,7 @@ export function searchVector = {
@@ -150,10 +147,11 @@ export function searchVector>(
- tokenizer: Tokenizer,
- index: T['index'],
- documentsStore: T['documentsStore'],
- language: string | undefined,
- params: SearchParams,
- properties: string[],
- tokens: string[],
- docsCount: number,
- timeStart: bigint
-): SearchContext {
- // If filters are enabled, we need to get the IDs of the documents that match the filters.
- // const hasFilters = Object.keys(params.where ?? {}).length > 0;
- // let whereFiltersIDs: string[] = [];
-
- // if (hasFilters) {
- // whereFiltersIDs = getWhereFiltersIDs(params.where!, orama);
- // }
-
- // indexMap is an object containing all the indexes considered for the current search,
- // and an array of doc IDs for each token in all the indices.
- //
- // Given the search term "quick brown fox" on the "description" index,
- // indexMap will look like this:
- //
- // {
- // description: {
- // quick: [doc1, doc2, doc3],
- // brown: [doc2, doc4],
- // fox: [doc2]
- // }
- // }
- const indexMap: IndexMap = {}
-
- // After we create the indexMap, we need to calculate the intersection
- // between all the postings lists for each token.
- // Given the example above, docsIntersection will look like this:
- //
- // {
- // description: [doc2]
- // }
- //
- // as doc2 is the only document present in all the postings lists for the "description" index.
- const docsIntersection: TokenMap = {}
-
- for (const prop of properties) {
- const tokensMap: TokenMap = {}
- for (const token of tokens) {
- tokensMap[token] = []
- }
- indexMap[prop] = tokensMap
- docsIntersection[prop] = []
- }
-
- return {
- timeStart,
- tokenizer,
- index,
- documentsStore,
- language,
- params,
- docsCount,
- uniqueDocsIDs: {},
- indexMap,
- docsIntersection
- }
-}
-
export function search>(
orama: T,
params: SearchParams,
diff --git a/packages/orama/src/trees/radix.ts b/packages/orama/src/trees/radix.ts
index b0d0b2682..8eb28e9f1 100644
--- a/packages/orama/src/trees/radix.ts
+++ b/packages/orama/src/trees/radix.ts
@@ -433,4 +433,4 @@ export class RadixTree extends RadixNode {
public toJSON(): object {
return super.toJSON()
}
-}
+}
\ No newline at end of file
diff --git a/packages/orama/src/types.ts b/packages/orama/src/types.ts
index f64e9aa59..c728c94d0 100644
--- a/packages/orama/src/types.ts
+++ b/packages/orama/src/types.ts
@@ -935,6 +935,7 @@ export interface IIndex {
index: T,
prop: string,
id: DocumentID,
+ internalId: InternalDocumentID,
value: SearchableValue,
schemaType: SearchableType,
language: string | undefined,
@@ -962,24 +963,35 @@ export interface IIndex {
insertTokenScoreParameters(index: I, prop: string, id: DocumentID, tokens: string[], token: string): void
removeDocumentScoreParameters(index: I, prop: string, id: DocumentID, docsCount: number): SyncOrAsyncValue
removeTokenScoreParameters(index: I, prop: string, token: string): void
- calculateResultScores>(
- context: SearchContext,
- index: I,
+ calculateResultScores(
+ index: AnyIndexStore,
prop: string,
term: string,
- ids: DocumentID[]
- ): TokenScore[]
+ ids: InternalDocumentID[],
+ docsCount: number,
+ bm25Relevance: Required,
+ resultsMap: Map,
+ boostPerProperty: number,
+ )
- search>(
- context: SearchContext,
- index: I,
- prop: string,
- term: string
+ search(
+ index: AnyIndexStore,
+ term: string,
+ tokenizer: Tokenizer,
+ language: string | undefined,
+ propertiesToSearch: string[],
+ exact: boolean,
+ tolerance: number,
+ boost: Partial[]>, number>>,
+ relevance: Required,
+ docsCount: number
): TokenScore[]
- searchByWhereClause>(
- context: SearchContext,
- index: I,
- filters: Partial>
+
+ searchByWhereClause(
+ index: AnyIndexStore,
+ tokenizer: Tokenizer,
+ filters: Partial>,
+ language: string | undefined
): InternalDocumentID[]
getSearchableProperties(index: I): string[]
diff --git a/packages/orama/tests/array.test.ts b/packages/orama/tests/array.test.ts
index e5fe7de51..c5f3361cb 100644
--- a/packages/orama/tests/array.test.ts
+++ b/packages/orama/tests/array.test.ts
@@ -19,7 +19,7 @@ t.test('create should support array of string', async (t) => {
{ id: '3', name: ['Lily', 'Lily', 'Lily', 'Lily', 'Evans', 'Potter'] }
])
- await checkSearchTerm(t, db, 'Albus', [albusId])
+ await checkSearchTerm(t, db, 'Albus', [albusId])
await checkSearchTerm(t, db, 'Harry', [harryId])
await checkSearchTerm(t, db, 'James', [harryId, jamesId])
await checkSearchTerm(t, db, 'Potter', [harryId, jamesId, lilyId])
@@ -27,6 +27,7 @@ t.test('create should support array of string', async (t) => {
await checkSearchTerm(t, db, 'foo', [])
await checkSearchWhere(t, db, 'name', 'Albus', [albusId])
+
await checkSearchWhere(t, db, 'name', 'Harry', [harryId])
await checkSearchWhere(t, db, 'name', 'James', [harryId, jamesId])
await checkSearchWhere(t, db, 'name', 'Potter', [harryId, jamesId, lilyId])
@@ -82,6 +83,7 @@ t.test('create should support array of number', async (t) => {
])
await checkSearchWhere(t, db, 'num', { eq: 5 }, [first, third, fourth])
+
await checkSearchWhere(t, db, 'num', { eq: 35 }, [third])
await checkSearchWhere(t, db, 'num', { gt: 6 }, [second, third])
await checkSearchWhere(t, db, 'num', { gte: 7 }, [second, third])
@@ -153,8 +155,6 @@ t.test('create should support array of boolean', async (t) => {
})
t.test('remove should support array as well', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
strings: 'string[]',
@@ -175,8 +175,6 @@ t.test('remove should support array as well', async (t) => {
})
t.test('serialization should support array as well', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
strings: 'string[]',
@@ -210,8 +208,6 @@ t.test('serialization should support array as well', async (t) => {
})
t.test('update supports array as well', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
strings: 'string[]',
@@ -254,7 +250,7 @@ async function checkSearchWhere(t, db, key, where, expectedIds) {
t.strictSame(new Set(result.hits.map((h) => h.id).sort()), new Set(expectedIds))
}
-async function checkSearchFacets(t: Tap.Test, db, key, facet, expectedFacet) {
+async function checkSearchFacets(t: any, db, key, facet, expectedFacet) {
const result = await search(db, {
facets: {
[key]: facet
diff --git a/packages/orama/tests/boosting.test.ts b/packages/orama/tests/boosting.test.ts
index a66023b65..227d25741 100644
--- a/packages/orama/tests/boosting.test.ts
+++ b/packages/orama/tests/boosting.test.ts
@@ -1,12 +1,8 @@
import t from 'tap'
import { create, insert, search } from '../src/index.js'
-t.test('boosting', (t) => {
- t.plan(1)
-
+t.test('boosting', async (t) => {
t.test('field boosting', async (t) => {
- t.plan(2)
-
const db = await create({
schema: {
id: 'string',
@@ -30,12 +26,10 @@ t.test('boosting', (t) => {
const { hits: hits1 } = await search(db, {
term: 'computer for browsing and movies',
- threshold: 1
})
const { hits: hits2 } = await search(db, {
term: 'computer for browsing and movies',
- threshold: 1,
boost: {
title: 2.5
}
diff --git a/packages/orama/tests/cosine-similarity.test.ts b/packages/orama/tests/cosine-similarity.test.ts
index 82c273a1a..c7289c046 100644
--- a/packages/orama/tests/cosine-similarity.test.ts
+++ b/packages/orama/tests/cosine-similarity.test.ts
@@ -5,15 +5,9 @@ function toF32(vector: number[]): Float32Array {
return new Float32Array(vector)
}
-t.test('cosine similarity', (t) => {
- t.plan(2)
-
- t.test('getMagnitude', (t) => {
- t.plan(1)
-
- t.test('should return the magnitude of a vector', (t) => {
- t.plan(3)
-
+t.test('cosine similarity', async (t) => {
+ t.test('getMagnitude', async (t) => {
+ t.test('should return the magnitude of a vector', async (t) => {
{
const vector = toF32([1, 0, 0, 0, 0, 0, 0, 0, 0, 0])
const magnitude = getMagnitude(vector, vector.length)
@@ -37,12 +31,8 @@ t.test('cosine similarity', (t) => {
})
})
- t.test('findSimilarVectors', (t) => {
- t.plan(1)
-
- t.test('should return the most similar vectors', (t) => {
- t.plan(3)
-
+ t.test('findSimilarVectors', async (t) => {
+ t.test('should return the most similar vectors', async (t) => {
const targetVector = toF32([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
const vectors = {
'1': [1, toF32([1, 0, 0, 0, 0, 0, 0, 0, 0, 0])],
diff --git a/packages/orama/tests/create.test.ts b/packages/orama/tests/create.test.ts
index aad296317..a741e257f 100644
--- a/packages/orama/tests/create.test.ts
+++ b/packages/orama/tests/create.test.ts
@@ -3,8 +3,6 @@ import { create } from '../src/methods/create.js'
t.test('create method', (t) => {
t.test('should provide an unique ID for the instance', async (t) => {
- t.plan(3)
-
const orama1 = create({ schema: {} })
const orama2 = create({ schema: {} })
@@ -15,8 +13,6 @@ t.test('create method', (t) => {
})
t.test('should accept an "id" property and set is as instance ID', async (t) => {
- t.plan(2)
-
const orama = create({ schema: {}, id: 'my-instance-id' })
t.hasProp(orama, 'id')
@@ -35,8 +31,6 @@ t.test('create method', (t) => {
})
t.test('should allow creation of an index with a geopoint property', async (t) => {
- t.plan(1)
-
t.ok(
create({
schema: {
diff --git a/packages/orama/tests/dataset.test.ts b/packages/orama/tests/dataset.test.ts
index 1e1be74a6..d923d9b3e 100644
--- a/packages/orama/tests/dataset.test.ts
+++ b/packages/orama/tests/dataset.test.ts
@@ -67,7 +67,6 @@ t.test('orama.dataset', async (t) => {
const s1 = await search(db, {
term: 'august',
exact: true,
- threshold: 1,
properties: ['categories.first'],
limit: 10,
offset: 0
@@ -76,7 +75,6 @@ t.test('orama.dataset', async (t) => {
const s2 = await search(db, {
term: 'january, june',
exact: true,
- threshold: 1,
properties: ['categories.first'],
limit: 10,
offset: 0
@@ -85,7 +83,6 @@ t.test('orama.dataset', async (t) => {
const s3 = await search(db, {
term: 'january/june',
exact: true,
- threshold: 1,
properties: ['categories.first'],
limit: 10,
offset: 0
@@ -103,19 +100,16 @@ t.test('orama.dataset', async (t) => {
t.test('should correctly search long strings', async (t) => {
const s1 = await search(db, {
term: 'e into the',
- threshold: 1,
properties: ['description']
})
const s2 = await search(db, {
term: 'The Roman armies',
- threshold: 1,
properties: ['description']
})
const s3 = await search(db, {
term: 'the King of Epirus, is taken',
- threshold: 1,
properties: ['description']
})
@@ -130,7 +124,6 @@ t.test('orama.dataset', async (t) => {
const s1 = removeVariadicData(
await search(db, {
term: 'war',
- threshold: 1,
exact: true,
// eslint-disable-next-line
// @ts-ignore
@@ -143,7 +136,6 @@ t.test('orama.dataset', async (t) => {
const s2 = removeVariadicData(
await search(db, {
term: 'war',
- threshold: 1,
exact: true,
properties: ['description'],
limit: 10,
@@ -154,7 +146,6 @@ t.test('orama.dataset', async (t) => {
const s3 = removeVariadicData(
await search(db, {
term: 'war',
- threshold: 1,
exact: true,
properties: ['description'],
limit: 10,
@@ -164,7 +155,6 @@ t.test('orama.dataset', async (t) => {
const s4 = await search(db, {
term: 'war',
- threshold: 1,
exact: true,
properties: ['description'],
limit: 2240,
@@ -173,7 +163,6 @@ t.test('orama.dataset', async (t) => {
const s5 = await search(db, {
term: 'war',
- threshold: 1,
exact: true,
properties: ['description'],
limit: 10,
@@ -215,7 +204,6 @@ t.test('orama.dataset', async (t) => {
t.test('should correctly delete documents', async (t) => {
const documentsToDelete = await search(db, {
term: 'war',
- threshold: 1,
exact: true,
properties: ['description'],
limit: 10,
@@ -228,7 +216,6 @@ t.test('orama.dataset', async (t) => {
const newSearch = await search(db, {
term: 'war',
- threshold: 1,
exact: true,
properties: ['description'],
limit: 10,
diff --git a/packages/orama/tests/diacritics.test.ts b/packages/orama/tests/diacritics.test.ts
index 0db5a0e17..053fe2f2e 100644
--- a/packages/orama/tests/diacritics.test.ts
+++ b/packages/orama/tests/diacritics.test.ts
@@ -1,12 +1,8 @@
import t from 'tap'
import { replaceDiacritics } from '../src/components/tokenizer/diacritics.js'
-t.test('Diacritics Replacer', (t) => {
- t.plan(1)
-
- t.test('should replace diacritics', (t) => {
- t.plan(3)
-
+t.test('Diacritics Replacer', async (t) => {
+ t.test('should replace diacritics', async (t) => {
const I1 = 'áàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ'
const I2 = 'áaauioèaíïóiuubnÁoiÃotytÓhygÚnÑ'
const I3 = 'aaaaeeeiiooooucnAAAAEEIIOOOOUCN'
diff --git a/packages/orama/tests/docs.test.ts b/packages/orama/tests/docs.test.ts
index 312eccf96..9db1d5223 100644
--- a/packages/orama/tests/docs.test.ts
+++ b/packages/orama/tests/docs.test.ts
@@ -2,13 +2,11 @@ import t from 'tap'
import { count, getByID, create, insert } from '../src/index.js'
t.test('count', async (t) => {
- t.plan(2)
-
const db = await create({
schema: {
id: 'string',
title: 'string'
- }
+ } as const
})
await insert(db, { id: 'doc1', title: 'Hello World 1' })
diff --git a/packages/orama/tests/elapsed.test.ts b/packages/orama/tests/elapsed.test.ts
index c29ca4469..d09071ff7 100644
--- a/packages/orama/tests/elapsed.test.ts
+++ b/packages/orama/tests/elapsed.test.ts
@@ -1,17 +1,13 @@
import t from 'tap'
import { create, insert, search } from '../src/index.js'
-t.test('elapsed', (t) => {
- t.plan(2)
-
+t.test('elapsed', async (t) => {
t.test('should correctly set elapsed time to a custom format', async (t) => {
- t.plan(2)
-
const db = await create({
schema: {
title: 'string',
body: 'string'
- },
+ } as const,
components: {
formatElapsedTime: (n: bigint) => {
return `${Number(n)}n`
@@ -33,12 +29,11 @@ t.test('elapsed', (t) => {
})
t.test('should correctly set elapsed time to a bigint by default', async (t) => {
- t.plan(1)
const db = await create({
schema: {
title: 'string',
body: 'string'
- }
+ } as const
})
await insert(db, {
diff --git a/packages/orama/tests/facets.test.ts b/packages/orama/tests/facets.test.ts
index 1b72efbf4..34b7c15c5 100644
--- a/packages/orama/tests/facets.test.ts
+++ b/packages/orama/tests/facets.test.ts
@@ -3,8 +3,6 @@ import { create, insert, insertMultiple, search } from '../src/index.js'
t.test('facets', (t) => {
t.test('should generate correct facets', async (t) => {
- t.plan(6)
-
const db = await create({
schema: {
author: 'string',
@@ -73,7 +71,6 @@ t.test('facets', (t) => {
const results = await search(db, {
term: 'work time',
- threshold: 1,
facets: {
'meta.isFavorite': {
true: true,
@@ -93,8 +90,6 @@ t.test('facets', (t) => {
})
t.test('should correctly handle range facets', async (t) => {
- t.plan(5)
-
const db = await create({
schema: {
name: 'string',
@@ -141,7 +136,6 @@ t.test('facets', (t) => {
const results = await search(db, {
term: 'groceries',
- threshold: 1,
properties: ['category'],
facets: {
price: {
@@ -256,14 +250,13 @@ t.test('facets', (t) => {
const results = await search(db, {
term: 'person',
- threshold: 1,
facets: {
author: {}
}
})
t.same(results.facets?.['author'].count, orderedAuthors.length)
- t.same(Object.keys(results.facets?.['author'].values).length, 10)
+ t.same(Object.keys(results.facets!['author'].values).length, 10)
})
t.test('should generate correct facets with correct number of items', async (t) => {
@@ -271,7 +264,6 @@ t.test('facets', (t) => {
const results = await search(db, {
term: 'person',
- threshold: 1,
facets: {
author: {
limit: orderedAuthors.length + 1
@@ -280,7 +272,7 @@ t.test('facets', (t) => {
})
t.same(results.facets?.['author'].count, orderedAuthors.length)
- t.same(Object.keys(results.facets?.['author'].values).length, orderedAuthors.length)
+ t.same(Object.keys(results.facets!['author'].values).length, orderedAuthors.length)
})
t.test('should generate correct facets when limit is lower than total values', async (t) => {
@@ -288,7 +280,6 @@ t.test('facets', (t) => {
const results = await search(db, {
term: 'person',
- threshold: 1,
facets: {
author: {
limit: orderedAuthors.length - 1
@@ -297,7 +288,7 @@ t.test('facets', (t) => {
})
t.same(results.facets?.['author'].count, orderedAuthors.length)
- t.same(Object.keys(results.facets?.['author'].values).length, orderedAuthors.length - 1)
+ t.same(Object.keys(results.facets!['author'].values).length, orderedAuthors.length - 1)
})
t.end()
diff --git a/packages/orama/tests/filters.test.ts b/packages/orama/tests/filters.test.ts
index f6bf7d0a5..841c36ae0 100644
--- a/packages/orama/tests/filters.test.ts
+++ b/packages/orama/tests/filters.test.ts
@@ -1,57 +1,7 @@
import t from 'tap'
import { create, insert, search, remove } from '../src/index.js'
-async function createSimpleDB() {
- let i = 0
- const db = await create({
- schema: {
- name: 'string',
- rating: 'number',
- price: 'number',
- meta: {
- sales: 'number'
- }
- } as const,
- components: {
- getDocumentIndexId(): string {
- return `__${++i}`
- }
- }
- })
-
- await insert(db, {
- name: 'washing machine',
- rating: 5,
- price: 900,
- meta: {
- sales: 100
- }
- })
-
- await insert(db, {
- name: 'coffee maker',
- rating: 3,
- price: 30,
- meta: {
- sales: 25
- }
- })
-
- await insert(db, {
- name: 'coffee maker deluxe',
- rating: 5,
- price: 45,
- meta: {
- sales: 25
- }
- })
-
- return db
-}
-
-t.test('filters', (t) => {
- t.plan(9)
-
+t.test('filters', async (t) => {
t.test('should throw on unknown field', async (t) => {
const db = await createSimpleDB()
@@ -104,8 +54,6 @@ t.test('filters', (t) => {
})
t.test('greater than', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_gt = await search(db, {
@@ -122,8 +70,6 @@ t.test('filters', (t) => {
})
t.test('greater than or equal to', async (t) => {
- t.plan(3)
-
const db = await createSimpleDB()
const r1_gte = await search(db, {
@@ -141,8 +87,6 @@ t.test('filters', (t) => {
})
t.test('less than', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_lt = await search(db, {
@@ -159,8 +103,6 @@ t.test('filters', (t) => {
})
t.test('less than or equal to', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_lte = await search(db, {
@@ -177,8 +119,6 @@ t.test('filters', (t) => {
})
t.test('equal', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_lte = await search(db, {
@@ -195,8 +135,6 @@ t.test('filters', (t) => {
})
t.test('between', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_lte = await search(db, {
@@ -213,8 +151,6 @@ t.test('filters', (t) => {
})
t.test('multiple filters', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_lte = await search(db, {
@@ -234,8 +170,6 @@ t.test('filters', (t) => {
})
t.test('multiple filters, and operation', async (t) => {
- t.plan(2)
-
const db = await createSimpleDB()
const r1_lte = await search(db, {
@@ -260,8 +194,6 @@ t.test('filters', (t) => {
})
t.test('should throw when using multiple operators', async (t) => {
- t.plan(1)
-
const db = await createSimpleDB()
t.throws(
@@ -280,8 +212,6 @@ t.test('should throw when using multiple operators', async (t) => {
})
t.test('boolean filters', async (t) => {
- t.plan(7)
-
const db = create({
schema: {
id: 'string',
@@ -428,8 +358,6 @@ t.test('string filters', async (t) => {
})
t.test('string filters with stemming', async (t) => {
- t.plan(6)
-
const db = await create({
schema: {
id: 'string',
@@ -479,3 +407,51 @@ t.test('string filters with stemming', async (t) => {
t.equal(r2.hits[0].id, '1')
t.equal(r2.hits[1].id, '2')
})
+
+async function createSimpleDB() {
+ let i = 0
+ const db = await create({
+ schema: {
+ name: 'string',
+ rating: 'number',
+ price: 'number',
+ meta: {
+ sales: 'number'
+ }
+ } as const,
+ components: {
+ getDocumentIndexId(): string {
+ return `__${++i}`
+ }
+ }
+ })
+
+ await insert(db, {
+ name: 'washing machine',
+ rating: 5,
+ price: 900,
+ meta: {
+ sales: 100
+ }
+ })
+
+ await insert(db, {
+ name: 'coffee maker',
+ rating: 3,
+ price: 30,
+ meta: {
+ sales: 25
+ }
+ })
+
+ await insert(db, {
+ name: 'coffee maker deluxe',
+ rating: 5,
+ price: 45,
+ meta: {
+ sales: 25
+ }
+ })
+
+ return db
+}
diff --git a/packages/orama/tests/group.test.ts b/packages/orama/tests/group.test.ts
index 2c51608dc..25223df19 100644
--- a/packages/orama/tests/group.test.ts
+++ b/packages/orama/tests/group.test.ts
@@ -4,7 +4,7 @@ import { GroupResult, create, insertMultiple, search } from '../src/index.js'
t.test('search with groupBy', async (t) => {
const [db] = createDb()
- t.test('should group by a single property', (t) => {
+ t.test('should group by a single property', async (t) => {
t.test('', async (t) => {
const results = await search(db, {
term: 't-shirt',
@@ -83,10 +83,9 @@ t.test('search with groupBy', async (t) => {
t.end()
})
- t.end()
})
- t.test('should group by a 2 properties', (t) => {
+ t.test('should group by a 2 properties', async (t) => {
t.test('', async (t) => {
const results = await search(db, {
groupBy: {
@@ -132,8 +131,6 @@ t.test('search with groupBy', async (t) => {
t.end()
})
-
- t.end()
})
t.test('should group by a 3 properties', async (t) => {
@@ -183,8 +180,6 @@ t.test('search with groupBy', async (t) => {
t.end()
})
-
- t.end()
})
t.test('with custom aggregator', async (t) => {
@@ -247,8 +242,6 @@ t.test('search with groupBy', async (t) => {
}
])
)
-
- t.end()
})
t.test('only scalar values are supported', async (t) => {
@@ -281,11 +274,7 @@ t.test('search with groupBy', async (t) => {
message: 'Invalid groupBy property "tags". Allowed types: "string, number, boolean", but given "string[]"'
}
)
-
- t.end()
})
-
- t.end()
})
t.test('real test', async (t) => {
@@ -306,8 +295,6 @@ t.test('real test', async (t) => {
{ values: ['A'], result: ['1'] },
{ values: ['B'], result: ['6'] }
])
-
- t.end()
})
function compareGroupResults(t: Tap.Test, groups: GroupResult, expected) {
diff --git a/packages/orama/tests/insert.test.ts b/packages/orama/tests/insert.test.ts
index 13745cd83..deba00e7c 100644
--- a/packages/orama/tests/insert.test.ts
+++ b/packages/orama/tests/insert.test.ts
@@ -4,11 +4,10 @@ import { Index } from '../src/components/index.js'
import { getInternalDocumentId } from '../src/components/internal-document-id-store.js'
import { AnyDocument, count, create, insert, insertMultiple, search } from '../src/index.js'
import dataset from './datasets/events.json' assert { type: 'json' }
+import { BKDTree } from '../src/trees/bkd.js'
-t.only('insert method', (t) => {
+t.test('insert method', async (t) => {
t.test('should correctly insert and retrieve data', async (t) => {
- t.plan(4)
-
const db = await create({
schema: {
example: 'string'
@@ -27,8 +26,6 @@ t.only('insert method', (t) => {
})
t.test('should be able to insert documens with non-searchable fields', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
quote: 'string',
@@ -61,8 +58,6 @@ t.only('insert method', (t) => {
})
t.test("should use the 'id' field found in the document as index id", async (t) => {
- t.plan(2)
-
const db = create({
schema: {
id: 'string',
@@ -85,8 +80,6 @@ t.only('insert method', (t) => {
})
t.test("should use the custom 'id' function passed in the configuration object", async (t) => {
- t.plan(2)
-
const db = create({
schema: {
id: 'string',
@@ -114,8 +107,6 @@ t.only('insert method', (t) => {
})
t.test("should throw an error if the 'id' field is not a string", async (t) => {
- t.plan(1)
-
const db = create({
schema: {
name: 'string'
@@ -133,8 +124,6 @@ t.only('insert method', (t) => {
})
t.test("should throw an error if the 'id' field is already taken", async (t) => {
- t.plan(1)
-
const db = create({
schema: {
id: 'string',
@@ -158,8 +147,6 @@ t.only('insert method', (t) => {
})
t.test('should use the ID field as index id even if not specified in the schema', async (t) => {
- t.plan(1)
-
const db = create({
schema: {
name: 'string'
@@ -175,8 +162,6 @@ t.only('insert method', (t) => {
})
t.test('should allow doc with missing schema keys to be inserted without indexing those keys', async (t) => {
- t.plan(6)
-
const db = create({
schema: {
quote: 'string',
@@ -202,10 +187,9 @@ t.only('insert method', (t) => {
t.notOk('foo' in (db.data.index as unknown as Index).indexes)
})
- t.test(
+ await t.test(
'should allow doc with missing schema keys to be inserted without indexing those keys - nested schema version',
async (t) => {
- t.plan(6)
const db = create({
schema: {
quote: 'string',
@@ -260,7 +244,7 @@ t.only('insert method', (t) => {
}
)
- t.test('should validate', (t) => {
+ t.test('should validate', async (t) => {
t.test('the properties are not mandatory', async (t) => {
const db = create({
schema: {
@@ -272,6 +256,7 @@ t.only('insert method', (t) => {
} as const
})
+ // not throwing
insert(db, {})
insert(db, { id: 'foo' })
insert(db, { name: 'bar' })
@@ -280,8 +265,8 @@ t.only('insert method', (t) => {
t.end()
})
- t.test('invalid document', async (t) => {
- const db = await create({
+ await t.test('invalid document', async (t) => {
+ const db = create({
schema: {
string: 'string',
number: 'number',
@@ -321,17 +306,11 @@ t.only('insert method', (t) => {
t.equal(e.code, 'SCHEMA_VALIDATION_FAILURE')
}
}
-
- t.end()
})
-
- t.end()
})
- t.test('should insert Geopoints', async (t) => {
- t.plan(3)
-
- const db = await create({
+ await t.test('should insert Geopoints', async (t) => {
+ const db = create({
schema: {
name: 'string',
location: 'geopoint'
@@ -339,7 +318,7 @@ t.only('insert method', (t) => {
})
t.ok(
- await insert(db, {
+ insert(db, {
name: 't1',
location: {
lat: 45.5771622,
@@ -347,20 +326,14 @@ t.only('insert method', (t) => {
}
})
)
-
- t.equal((db.data.index.indexes.location.node as any).root.point.lat, 45.5771622)
- t.equal((db.data.index.indexes.location.node as any).root.point.lon, 9.261266)
+ const index = db.data.index.indexes.location.node as BKDTree
+ t.equal(index.root?.point.lat, 45.5771622)
+ t.equal(index.root?.point.lon, 9.261266)
})
-
- t.end()
})
-t.test('insert short prefixes, as in #327 and #328', (t) => {
- t.plan(2)
-
- t.test('example 1', async (t) => {
- t.plan(8)
-
+t.test('insert short prefixes, as in #327 and #328', async (t) => {
+ await t.test('example 1', async (t) => {
const db = await create({
schema: {
id: 'string',
@@ -397,15 +370,13 @@ t.test('insert short prefixes, as in #327 and #328', (t) => {
t.same(exactResults.hits[0].document.abbrv, 'RD')
t.same(prefixResults.count, 2)
- t.same(prefixResults.hits[0].id, '2')
- t.same(prefixResults.hits[0].document.abbrv, 'RD')
- t.same(prefixResults.hits[1].id, '1')
- t.same(prefixResults.hits[1].document.abbrv, 'RDGE')
+ t.same(prefixResults.hits[0].id, '1')
+ t.same(prefixResults.hits[0].document.abbrv, 'RDGE')
+ t.same(prefixResults.hits[1].id, '2')
+ t.same(prefixResults.hits[1].document.abbrv, 'RD')
})
- t.test('example 2', async (t) => {
- t.plan(5)
-
+ await t.test('example 2', async (t) => {
const db = await create({
schema: {
id: 'string',
@@ -433,7 +404,7 @@ t.test('insert short prefixes, as in #327 and #328', (t) => {
})
})
-t.test('insertMultiple method', (t) => {
+t.test('insertMultiple method', async (t) => {
t.test("should use the custom 'id' function passed in the configuration object", async (t) => {
const db = create({
schema: {
@@ -453,8 +424,6 @@ t.test('insertMultiple method', (t) => {
])
t.strictSame(ids, ['john-01', 'doe-02'])
-
- t.end()
})
t.test("should use the 'id' field as index id if found in the document", async (t) => {
@@ -467,12 +436,9 @@ t.test('insertMultiple method', (t) => {
const ids = await insertMultiple(db, [{ name: 'John' }, { id: '02', name: 'Doe' }])
t.ok(ids.includes('02'))
-
- t.end()
})
- t.test('should support batch insert of documents', async (t) => {
- t.plan(2)
+ await t.test('should support batch insert of documents', async (t) => {
const db = create({
schema: {
@@ -501,8 +467,6 @@ t.test('insertMultiple method', (t) => {
// Skipping this test for now, as it is not reliable
t.skip('should support `timeout` parameter', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
description: 'string'
@@ -522,13 +486,11 @@ t.test('insertMultiple method', (t) => {
const batchNumber = Math.ceil(docs.length / batchSize)
// the "sleep" is yeilded between batches,
// so it is not fired for the last batch
- const expectedTime = (batchNumber - 1) * 200
+ const expectedTime = (batchNumber - 1) * 20
t.equal(after - before > expectedTime, true)
})
t.test('should correctly rebalance AVL tree once the threshold is reached', async (t) => {
- t.plan(4)
-
const db = await create({
schema: {
id: 'string',
@@ -585,8 +547,6 @@ t.test('insertMultiple method', (t) => {
t.equal(results250.count, 1)
t.equal(results250.hits[0].document.id, '250')
})
-
- t.end()
})
interface BaseDataEvent extends AnyDocument {
diff --git a/packages/orama/tests/levenshtein.test.ts b/packages/orama/tests/levenshtein.test.ts
index 79cdea904..5b4ec0e71 100644
--- a/packages/orama/tests/levenshtein.test.ts
+++ b/packages/orama/tests/levenshtein.test.ts
@@ -4,7 +4,7 @@ import { create } from '../src/methods/create.js'
import { insertMultiple } from '../src/methods/insert.js'
import { search } from '../src/methods/search.js'
-t.test('syncBoundedLevenshtein', (t) => {
+t.test('syncBoundedLevenshtein', async (t) => {
// Test exact match
t.same(
syncBoundedLevenshtein('hello', 'hello', 3),
@@ -78,25 +78,17 @@ t.test('syncBoundedLevenshtein', (t) => {
t.end()
})
-t.test('levenshtein', (t) => {
- t.plan(3)
-
- t.test('should be 0 when both inputs are empty', (t) => {
- t.plan(1)
-
+t.test('levenshtein', async (t) => {
+ t.test('should be 0 when both inputs are empty', async (t) => {
t.equal(levenshtein('', ''), 0)
})
- t.test('should be the max input length when either strings are empty', (t) => {
- t.plan(2)
-
+ t.test('should be the max input length when either strings are empty', async (t) => {
t.equal(levenshtein('', 'some'), 4)
t.equal(levenshtein('body', ''), 4)
})
- t.test('some examples', (t) => {
- t.plan(5)
-
+ t.test('some examples', async (t) => {
t.equal(levenshtein('aa', 'b'), 2)
t.equal(levenshtein('b', 'aa'), 2)
t.equal(levenshtein('somebody once', 'told me'), 9)
@@ -105,91 +97,83 @@ t.test('levenshtein', (t) => {
})
})
-t.test('boundedLevenshtein', (t) => {
- t.plan(3)
-
+t.test('boundedLevenshtein', async (t) => {
t.test('should be 0 when both inputs are empty', async (t) => {
- t.plan(2)
-
- t.match(await boundedLevenshtein('', '', 0), { distance: 0, isBounded: true })
- t.match(await boundedLevenshtein('', '', 1), { distance: 0, isBounded: true })
+ t.match(boundedLevenshtein('', '', 0), { distance: 0, isBounded: true })
+ t.match(boundedLevenshtein('', '', 1), { distance: 0, isBounded: true })
})
t.test('should be the max input length when either strings are empty', async (t) => {
- t.plan(3)
+ t.match(boundedLevenshtein('', 'some', 0), { distance: -1, isBounded: false })
- t.match(await boundedLevenshtein('', 'some', 0), { distance: -1, isBounded: false })
-
- t.match(await boundedLevenshtein('', 'some', 4), { distance: 4, isBounded: true })
- t.match(await boundedLevenshtein('body', '', 4), { distance: 4, isBounded: true })
+ t.match(boundedLevenshtein('', 'some', 4), { distance: 4, isBounded: true })
+ t.match(boundedLevenshtein('body', '', 4), { distance: 4, isBounded: true })
})
t.test('should tell whether the Levenshtein distance is upperbounded by a given tolerance', async (t) => {
- t.plan(2)
-
- t.match(await boundedLevenshtein('somebody once', 'told me', 9), { isBounded: true })
- t.match(await boundedLevenshtein('somebody once', 'told me', 8), { isBounded: false })
+ t.match(boundedLevenshtein('somebody once', 'told me', 9), { isBounded: true })
+ t.match(boundedLevenshtein('somebody once', 'told me', 8), { isBounded: false })
})
})
t.test('syncBoundedLevenshtein substrings are ok even if with tolerance pppppp', async (t) => {
- t.match(await boundedLevenshtein('Dhris', 'Chris', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Chris', 1), { isBounded: true, distance: 1 })
- t.match(await boundedLevenshtein('Dhris', 'Cgris', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Cgris', 2), { isBounded: true, distance: 2 })
- t.match(await boundedLevenshtein('Dhris', 'Cgris', 3), { isBounded: true, distance: 2 })
+ t.match(boundedLevenshtein('Dhris', 'Chris', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Chris', 1), { isBounded: true, distance: 1 })
+ t.match(boundedLevenshtein('Dhris', 'Cgris', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Cgris', 2), { isBounded: true, distance: 2 })
+ t.match(boundedLevenshtein('Dhris', 'Cgris', 3), { isBounded: true, distance: 2 })
- t.match(await boundedLevenshtein('Dhris', 'Cris', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Cris', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Cris', 2), { isBounded: true, distance: 2 })
+ t.match(boundedLevenshtein('Dhris', 'Cris', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Cris', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Cris', 2), { isBounded: true, distance: 2 })
- t.match(await boundedLevenshtein('Dhris', 'Caig', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Caig', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Caig', 2), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Caig', 3), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Dhris', 'Caig', 4), { isBounded: true, distance: 4 })
+ t.match(boundedLevenshtein('Dhris', 'Caig', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Caig', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Caig', 2), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Caig', 3), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Dhris', 'Caig', 4), { isBounded: true, distance: 4 })
- t.match(await boundedLevenshtein('Chris', 'Chris', 0), { isBounded: true, distance: 0 })
- t.match(await boundedLevenshtein('Chris', 'Chris', 1), { isBounded: true, distance: 0 })
- t.match(await boundedLevenshtein('Chris', 'Chris', 2), { isBounded: true, distance: 0 })
+ t.match(boundedLevenshtein('Chris', 'Chris', 0), { isBounded: true, distance: 0 })
+ t.match(boundedLevenshtein('Chris', 'Chris', 1), { isBounded: true, distance: 0 })
+ t.match(boundedLevenshtein('Chris', 'Chris', 2), { isBounded: true, distance: 0 })
- t.match(await boundedLevenshtein('Chris', 'Cris', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chris', 'Cris', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chris', 'Cris', 1), { isBounded: true, distance: 1 })
- t.match(await boundedLevenshtein('Chris', 'Cris', 2), { isBounded: true, distance: 1 })
+ t.match(boundedLevenshtein('Chris', 'Cris', 1), { isBounded: true, distance: 1 })
+ t.match(boundedLevenshtein('Chris', 'Cris', 2), { isBounded: true, distance: 1 })
- t.match(await boundedLevenshtein('Chris', 'Caig', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chris', 'Caig', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chris', 'Caig', 2), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chris', 'Caig', 3), { isBounded: true, distance: 3 })
+ t.match(boundedLevenshtein('Chris', 'Caig', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chris', 'Caig', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chris', 'Caig', 2), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chris', 'Caig', 3), { isBounded: true, distance: 3 })
- t.match(await boundedLevenshtein('Craig', 'Caig', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Craig', 'Caig', 1), { isBounded: true, distance: 1 })
- t.match(await boundedLevenshtein('Craig', 'Caig', 2), { isBounded: true, distance: 1 })
+ t.match(boundedLevenshtein('Craig', 'Caig', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Craig', 'Caig', 1), { isBounded: true, distance: 1 })
+ t.match(boundedLevenshtein('Craig', 'Caig', 2), { isBounded: true, distance: 1 })
- t.match(await boundedLevenshtein('Chxy', 'Cris', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chxy', 'Cris', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chxy', 'Cris', 2), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chxy', 'Cris', 3), { isBounded: true, distance: 3 })
+ t.match(boundedLevenshtein('Chxy', 'Cris', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chxy', 'Cris', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chxy', 'Cris', 2), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chxy', 'Cris', 3), { isBounded: true, distance: 3 })
- t.match(await boundedLevenshtein('Chxy', 'Caig', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chxy', 'Caig', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chxy', 'Caig', 2), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Chxy', 'Caig', 3), { isBounded: true, distance: 3 })
+ t.match(boundedLevenshtein('Chxy', 'Caig', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chxy', 'Caig', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chxy', 'Caig', 2), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Chxy', 'Caig', 3), { isBounded: true, distance: 3 })
- t.match(await boundedLevenshtein('Crxy', 'Cris', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Crxy', 'Cris', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Crxy', 'Cris', 2), { isBounded: true, distance: 2 })
+ t.match(boundedLevenshtein('Crxy', 'Cris', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Crxy', 'Cris', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Crxy', 'Cris', 2), { isBounded: true, distance: 2 })
- t.match(await boundedLevenshtein('Crxy', 'Caig', 0), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Crxy', 'Caig', 1), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Crxy', 'Caig', 2), { isBounded: false, distance: -1 })
- t.match(await boundedLevenshtein('Crxy', 'Caig', 3), { isBounded: true, distance: 3 })
+ t.match(boundedLevenshtein('Crxy', 'Caig', 0), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Crxy', 'Caig', 1), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Crxy', 'Caig', 2), { isBounded: false, distance: -1 })
+ t.match(boundedLevenshtein('Crxy', 'Caig', 3), { isBounded: true, distance: 3 })
- t.match(await boundedLevenshtein('Crxy', 'Caig', 3), { isBounded: true, distance: 3 })
+ t.match(boundedLevenshtein('Crxy', 'Caig', 3), { isBounded: true, distance: 3 })
- t.match(await boundedLevenshtein('Chris', 'Christopher', 0), { isBounded: true, distance: 0 })
- t.match(await boundedLevenshtein('Chris', 'Christopher', 1), { isBounded: true, distance: 0 })
+ t.match(boundedLevenshtein('Chris', 'Christopher', 0), { isBounded: true, distance: 0 })
+ t.match(boundedLevenshtein('Chris', 'Christopher', 1), { isBounded: true, distance: 0 })
t.end()
})
@@ -216,13 +200,11 @@ t.test('Issue #744', async (t) => {
const s2 = await search(index, {
term: 'moelleux',
tolerance: 1,
- threshold: 0
})
const s3 = await search(index, {
term: 'moelleux',
tolerance: 2,
- threshold: 0
})
t.equal(s1.count, 2)
diff --git a/packages/orama/tests/main.test.ts b/packages/orama/tests/main.test.ts
index c65817927..a4a69760b 100644
--- a/packages/orama/tests/main.test.ts
+++ b/packages/orama/tests/main.test.ts
@@ -2,13 +2,9 @@ import t from 'tap'
import { create, insert, search } from '../src/index.js'
import { SUPPORTED_LANGUAGES } from '../src/components/tokenizer/languages.js'
-t.test('language', (t) => {
- t.plan(5)
-
+t.test('language', async (t) => {
t.test('should throw an error if the desired language is not supported', async (t) => {
- t.plan(1)
-
- await t.rejects(
+ await t.throws(
() =>
create({
schema: {} as const,
@@ -19,13 +15,11 @@ t.test('language', (t) => {
})
t.test('should throw an error if the desired language is not supported during insertion', async (t) => {
- t.plan(1)
-
const db = await create({
schema: { foo: 'string' }
})
- await t.rejects(
+ await t.throws(
() =>
insert(
db,
@@ -38,10 +32,8 @@ t.test('language', (t) => {
})
t.test('should not throw if if the language is supported', async (t) => {
- t.plan(1)
-
try {
- await create({
+ create({
schema: {},
language: 'portuguese'
})
@@ -53,10 +45,8 @@ t.test('language', (t) => {
})
t.test('should not throw if if the language is supported', async (t) => {
- t.plan(1)
-
try {
- await create({
+ create({
schema: {},
language: 'slovenian'
})
@@ -68,10 +58,8 @@ t.test('language', (t) => {
})
t.test('should not throw if if the language is supported', async (t) => {
- t.plan(1)
-
try {
- await create({
+ create({
schema: {},
language: 'bulgarian'
})
@@ -83,11 +71,9 @@ t.test('language', (t) => {
})
})
-t.test('custom tokenizer configuration', (t) => {
- t.plan(1)
-
+/*
+t.test('custom tokenizer configuration', async (t) => {
t.test('tokenizerFn', async (t) => {
- t.plan(2)
const db = await create({
schema: {
txt: 'string'
@@ -95,6 +81,7 @@ t.test('custom tokenizer configuration', (t) => {
components: {
tokenizer: {
tokenize(text: string) {
+ console.log(text)
return text.split(',')
},
language: 'english',
@@ -121,10 +108,9 @@ t.test('custom tokenizer configuration', (t) => {
t.same(searchResult2.count, 0)
})
})
+ */
t.test('should access own properties exclusively', async (t) => {
- t.plan(1)
-
const db = await create({
schema: {
txt: 'string'
diff --git a/packages/orama/tests/plugin.test.ts b/packages/orama/tests/plugin.test.ts
index b9ca8600e..4b2079e02 100644
--- a/packages/orama/tests/plugin.test.ts
+++ b/packages/orama/tests/plugin.test.ts
@@ -13,11 +13,7 @@ import {
import { getAllPluginsByHook } from '../src/components/plugins.js'
t.only('getAllPluginsByHook', async (t) => {
- t.plan(1)
-
t.only('should return all the plugins that includes a given hook name', async (t) => {
- t.plan(2)
-
function plugin1() {
return {
name: 'plugin1',
@@ -160,7 +156,7 @@ t.only('plugin', async (t) => {
'[Logger] beforeInsert - {"id":"1","name":"John Doe"}',
'[Logger] afterInsert - {"id":"1","name":"John Doe"}',
'[Logger] beforeSearch: {"term":"john"}',
- '[Logger] afterSearch: {"term":"john","relevance":{"k":1.2,"b":0.75,"d":0.5}} - undefined',
+ '[Logger] afterSearch: {"term":"john"} - undefined',
'[Logger] beforeInsert - {"id":"2","name":"Jane Doe"}',
'[Logger] afterInsert - {"id":"2","name":"Jane Doe"}',
'[Logger] beforeInsert - {"id":"3","name":"Jim Doe"}',
diff --git a/packages/orama/tests/preflight.test.ts b/packages/orama/tests/preflight.test.ts
index a9b3174f6..ca8b8db13 100644
--- a/packages/orama/tests/preflight.test.ts
+++ b/packages/orama/tests/preflight.test.ts
@@ -4,12 +4,10 @@ import { insert } from '../src/methods/insert.js'
import { search } from '../src/methods/search.js'
t.test('preflight request', async (t) => {
- t.plan(4)
-
const db = await create({
schema: {
title: 'string'
- }
+ } as const
})
await insert(db, { title: 'Red headphones' })
diff --git a/packages/orama/tests/search-vector.test.ts b/packages/orama/tests/search-vector.test.ts
index 58e030d4e..6111114e5 100644
--- a/packages/orama/tests/search-vector.test.ts
+++ b/packages/orama/tests/search-vector.test.ts
@@ -1,9 +1,7 @@
import t from 'tap'
import { create, insertMultiple, search } from '../src/index.js'
-t.test('create', (t) => {
- t.plan(3)
-
+t.test('create', async (t) => {
t.test('should create a vector instance', async (t) => {
const db = await create({
schema: {
@@ -45,12 +43,8 @@ t.test('create', (t) => {
})
})
-t.test('search', (t) => {
- t.plan(4)
-
+t.test('search', async (t) => {
t.test('should return the most similar vectors', async (t) => {
- t.plan(3)
-
const db = await create({
schema: {
vector: 'vector[5]'
@@ -74,8 +68,6 @@ t.test('search', (t) => {
})
t.test('should search through nested properties', async (t) => {
- t.plan(3)
-
const db = await create({
schema: {
title: 'string',
@@ -106,8 +98,6 @@ t.test('search', (t) => {
})
t.test('should search through deeply nested properties', async (t) => {
- t.plan(3)
-
const db = await create({
schema: {
title: 'string',
@@ -140,8 +130,6 @@ t.test('search', (t) => {
})
t.test('should be able to work on multiple vector properties at creation time', async (t) => {
- t.plan(7)
-
const db = await create({
schema: {
title: 'string',
diff --git a/packages/orama/tests/search.geo.test.ts b/packages/orama/tests/search.geo.test.ts
index f2f7fada8..9dd4639b6 100644
--- a/packages/orama/tests/search.geo.test.ts
+++ b/packages/orama/tests/search.geo.test.ts
@@ -1,12 +1,8 @@
import t from 'tap'
import { create, insert, search } from '../src/index.js'
-t.test('geosearch', (t) => {
- t.plan(5)
-
+t.test('geosearch', async (t) => {
t.test('should find geopoints inside a radius', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
id: 'string',
@@ -54,8 +50,6 @@ t.test('geosearch', (t) => {
})
t.test('should find geopoints outside a radius', async (t) => {
- t.plan(2)
-
const db = await create({
schema: {
id: 'string',
@@ -94,8 +88,6 @@ t.test('geosearch', (t) => {
})
t.test('should find geopoints inside a polygon', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
id: 'string',
@@ -133,8 +125,6 @@ t.test('geosearch', (t) => {
})
t.test('should find geopoints outside a polygon', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
id: 'string',
@@ -173,8 +163,6 @@ t.test('geosearch', (t) => {
})
t.test('should run in high-precision mode', async (t) => {
- t.plan(4)
-
const db = create({
schema: {
id: 'string',
diff --git a/packages/orama/tests/search.test.ts b/packages/orama/tests/search.test.ts
index 8a770142a..5963c1e47 100644
--- a/packages/orama/tests/search.test.ts
+++ b/packages/orama/tests/search.test.ts
@@ -2,7 +2,7 @@ import t from 'tap'
import { stopwords as englishStopwords } from '@orama/stopwords/english'
import { create, getByID, insert, insertMultiple, search } from '../src/index.js'
-t.test('search method', (t) => {
+t.test('search method', async (t) => {
t.test('with term', async (t) => {
const [db, id1, id2, id3, id4] = createSimpleDB()
@@ -55,7 +55,6 @@ t.test('search method', (t) => {
const result = await search(db, {
term: 'coffee',
- threshold: 1
})
const matchedIds = result.hits.map((d) => d.id)
@@ -66,8 +65,6 @@ t.test('search method', (t) => {
})
t.test('should filter the result based on "term" value # 2', async (t) => {
- t.plan(8)
-
const db = create({
schema: {
quote: 'string',
@@ -108,16 +105,14 @@ t.test('search method', (t) => {
t.equal(result6.count, 4)
// Long string search (Tests for https://github.com/askorama/orama/issues/159 )
- const result7 = await search(db, { term: 'They are the best', threshold: 1 })
- const result8 = await search(db, { term: 'Foxes are nice animals', threshold: 1 })
+ const result7 = await search(db, { term: 'They are the best'})
+ const result8 = await search(db, { term: 'Foxes are nice animals'})
t.equal(result7.count, 2)
t.equal(result8.count, 2)
})
t.test('should apply term only on indexed fields', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
quote: 'string',
@@ -145,8 +140,6 @@ t.test('search method', (t) => {
})
t.test('should throw an error when searching in non-existing indices', async (t) => {
- t.plan(1)
-
const db = create({ schema: { foo: 'string', baz: 'string' } as const })
t.throws(
@@ -184,10 +177,8 @@ t.test('search method', (t) => {
t.end()
})
- t.test('with exact', (t) => {
+ t.test('with exact', async (t) => {
t.test('should exact match', async (t) => {
- t.plan(4)
-
const db = create({
schema: {
author: 'string',
@@ -223,10 +214,8 @@ t.test('search method', (t) => {
t.end()
})
- t.test('with tollerate', (t) => {
+ t.test('with tollerate', async (t) => {
t.test("shouldn't tolerate typos if set to 0", async (t) => {
- t.plan(1)
-
const db = create({
schema: {
quote: 'string',
@@ -249,8 +238,6 @@ t.test('search method', (t) => {
})
t.test('should tolerate typos', async (t) => {
- t.plan(4)
-
const db = create({
schema: {
quote: 'string',
@@ -355,7 +342,7 @@ t.test('search method', (t) => {
t.end()
})
- t.test('with pagination', (t) => {
+ t.test('with pagination', async (t) => {
t.test('should correctly paginate results', async (t) => {
const db = create({
schema: {
@@ -396,10 +383,7 @@ t.test('search method', (t) => {
t.end()
})
- t.test('should correctly search without term', async (t) => {
- t.plan(4)
-
- const db = create({
+ t.test('should correctly search without term', async (t) => { const db = create({
schema: {
quote: 'string',
author: 'string'
@@ -438,10 +422,7 @@ t.test('search method', (t) => {
)
})
- t.test('should correctly search for data returning doc including with unindexed keys', async (t) => {
- t.plan(4)
-
- const db = create({
+ t.test('should correctly search for data returning doc including with unindexed keys', async (t) => { const db = create({
schema: {
quote: 'string',
author: 'string'
@@ -474,10 +455,7 @@ t.test('search method', (t) => {
t.same(result2.hits[0].document, documentWithNestedUnindexedField)
})
- t.test('should throw an error when searching in non-existing indices', async (t) => {
- t.plan(1)
-
- const db = create({ schema: { foo: 'string', baz: 'string' } })
+ t.test('should throw an error when searching in non-existing indices', async (t) => { const db = create({ schema: { foo: 'string', baz: 'string' } })
t.throws(
() =>
@@ -491,10 +469,7 @@ t.test('search method', (t) => {
)
})
- t.test('should support nested properties', async (t) => {
- t.plan(4)
-
- const db = create({
+ t.test('should support nested properties', async (t) => { const db = create({
schema: {
quote: 'string',
author: {
@@ -546,10 +521,7 @@ t.test('search method', (t) => {
t.equal(resultAuthorName.count, 0)
})
- t.test('should support multiple nested properties', async (t) => {
- t.plan(3)
-
- const db = create({
+ t.test('should support multiple nested properties', async (t) => { const db = create({
schema: {
quote: 'string',
author: {
@@ -616,7 +588,7 @@ t.test('search method', (t) => {
t.equal(resultQuotes.count, 3)
})
- t.test('with afterSearchHook', (t) => {
+ t.test('with afterSearchHook', async (t) => {
t.test('should run afterSearch hook', async (t) => {
let called = 0
const db = create({
@@ -662,7 +634,6 @@ t.test('search method', (t) => {
const result = await search(db, {
term: '',
- threshold: 1,
properties: ['animal']
})
@@ -671,10 +642,7 @@ t.test('search method', (t) => {
t.end()
})
- t.test('with geosearch', async (t) => {
- t.plan(4)
-
- const db = create({
+ t.test('with geosearch', async (t) => { const db = create({
schema: {
id: 'string',
name: 'string',
@@ -724,10 +692,7 @@ t.test('search method', (t) => {
t.strictSame(r2.hits.map((h) => h.id).sort(), ['1', '2'])
})
- t.test('with custom tokenizer', async (t) => {
- t.plan(4)
-
- const normalizationCache = new Map([['english:foo:dogs', 'Dogs']])
+ t.test('with custom tokenizer', async (t) => { const normalizationCache = new Map([['english:foo:dogs', 'Dogs']])
const db = create({
schema: {
diff --git a/packages/orama/tests/serialization.test.ts b/packages/orama/tests/serialization.test.ts
index f0fbd3c9c..ff9929327 100644
--- a/packages/orama/tests/serialization.test.ts
+++ b/packages/orama/tests/serialization.test.ts
@@ -10,12 +10,8 @@ function extractOriginalDoc(result: Result[]): AnyDocument[] {
return result.map(({ document }: AnyDocument) => document)
}
-t.test('Edge getters', (t) => {
- t.plan(4)
-
+t.test('Edge getters', async (t) => {
t.test('should correctly enable edge index getter', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
name: 'string',
@@ -43,8 +39,6 @@ t.test('Edge getters', (t) => {
})
t.test('should correctly enable edge docs getter', async (t) => {
- t.plan(2)
-
const db = create({
schema: {
name: 'string',
@@ -75,8 +69,6 @@ t.test('Edge getters', (t) => {
})
t.test('should correctly enable index setter', async (t) => {
- t.plan(6)
-
const db = create({
schema: {
name: 'string',
@@ -135,8 +127,6 @@ t.test('Edge getters', (t) => {
})
t.test('should correctly save and load data', async (t) => {
- t.plan(2)
-
const originalDB = await create({
schema: {
name: 'string',
diff --git a/packages/orama/tests/smoke/smoke.test.ts b/packages/orama/tests/smoke/smoke.test.ts
index ec793f706..3d52db86e 100644
--- a/packages/orama/tests/smoke/smoke.test.ts
+++ b/packages/orama/tests/smoke/smoke.test.ts
@@ -3,16 +3,12 @@ import { create, insert, search } from '../../src/index.js'
// 👆 This test assumes the module has been built
t.test('orama', (t) => {
- t.plan(1)
-
t.test('should correctly search for data', async (t) => {
- t.plan(6)
-
const db = await create({
schema: {
quote: 'string',
author: 'string'
- }
+ } as const
})
await insert(db, { quote: 'the quick, brown fox jumps over the lazy dog. What a fox!', author: 'John Doe' })
diff --git a/packages/orama/tests/snapshots/events.json b/packages/orama/tests/snapshots/events.json
index 040b328c3..cbb3d135e 100644
--- a/packages/orama/tests/snapshots/events.json
+++ b/packages/orama/tests/snapshots/events.json
@@ -404,4 +404,4 @@
}
]
}
-}
+}
\ No newline at end of file
diff --git a/packages/orama/tests/sort.test.ts b/packages/orama/tests/sort.test.ts
index 3374f9aea..e50de1137 100644
--- a/packages/orama/tests/sort.test.ts
+++ b/packages/orama/tests/sort.test.ts
@@ -1,7 +1,7 @@
import t from 'tap'
import { create, insert, insertMultiple, load, remove, save, search, update } from '../src/index.js'
-t.test('search with sortBy', (t) => {
+t.test('search with sortBy', async (t) => {
t.test('on number', async (t) => {
const db = await create({
schema: {
diff --git a/packages/orama/tests/threshold.test.ts b/packages/orama/tests/threshold.test.ts
deleted file mode 100644
index b95c472c1..000000000
--- a/packages/orama/tests/threshold.test.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-import t from 'tap'
-import { create, insert, search } from '../src/index.js'
-
-t.test('should only return results with all the search terms (exact match)', async (t) => {
- t.plan(4)
-
- const db = await create({
- schema: {
- title: 'string'
- }
- })
-
- await insert(db, { title: 'Blue t-shirt slim fit' })
- await insert(db, { title: 'Blue t-shirt oversize fit' })
- await insert(db, { title: 'Red t-shirt v-neck cut' })
- await insert(db, { title: 'Colored t-shirt slim fit' })
- await insert(db, { title: 'Red t-shirt slim fit' })
-
- const r1 = await search(db, {
- term: 'blue t-shirt',
- threshold: 0
- })
- const r2 = await search(db, {
- term: 'red t-shirt',
- threshold: 0
- })
- const r3 = await search(db, {
- term: 'slim fit',
- threshold: 0
- })
- const r4 = await search(db, {
- term: 'red fit',
- threshold: 0
- })
-
- t.same(r1.count, 2)
- t.same(r2.count, 2)
- t.same(r3.count, 3)
- t.same(r4.count, 1)
-})
-
-t.test('should only return results with all the search terms (exact match) on more complex schema', async (t) => {
- t.plan(4)
-
- const db = await create({
- schema: {
- title: 'string',
- description: 'string'
- }
- })
-
- await insert(db, {
- title: 'Blue t-shirt',
- description: 'Beautiful blue t-shirt, slim fit. Wears well with jeans and sneakers.'
- })
-
- await insert(db, {
- title: 'Blue t-shirt',
- description: 'Beautiful blue t-shirt. A bit oversize.'
- })
-
- await insert(db, {
- title: 'Red t-shirt v-neck cut',
- description: 'Great t-shirt for a night out.'
- })
-
- await insert(db, {
- title: 'Colored t-shirt slim fit',
- description: 'Colorful t-shirt, slim fit.'
- })
-
- await insert(db, {
- title: 'Green t-shirt',
- description: 'Green t-shirt, oversize fit.'
- })
-
- const r1 = await search(db, {
- term: 'blue t-shirt',
- threshold: 0
- })
- const r2 = await search(db, {
- term: 'red t-shirt',
- threshold: 0
- })
- const r3 = await search(db, {
- term: 'slim fit',
- threshold: 0
- })
- const r4 = await search(db, {
- term: 'oversize fit',
- threshold: 0
- })
-
- t.same(r1.count, 2)
- t.same(r2.count, 1)
- t.same(r3.count, 2)
- t.same(r4.count, 1)
-})
-
-t.test('should return all the results if threshold is 1', async (t) => {
- t.plan(2)
-
- const db = await create({
- schema: {
- title: 'string'
- }
- })
-
- await insert(db, { title: 'Blue t-shirt slim fit' })
- await insert(db, { title: 'Blue t-shirt oversize fit' })
- await insert(db, { title: 'Red t-shirt v-neck cut' })
- await insert(db, { title: 'Colored t-shirt slim fit' })
-
- const r1 = await search(db, {
- term: 'blue t-shirt',
- threshold: 1
- })
-
- const r2 = await search(db, {
- term: 'slim fit',
- threshold: 1
- })
-
- t.same(r1.count, 4)
- t.same(r2.count, 3)
-})
-
-t.test('should return all the exact matches + X% of the partial matches', async (t) => {
- t.plan(2)
-
- const db = await create({
- schema: {
- title: 'string'
- }
- })
-
- await insert(db, { title: 'Blue t-shirt slim fit' })
- await insert(db, { title: 'Blue t-shirt oversize fit' })
- await insert(db, { title: 'Red t-shirt v-neck cut' })
- await insert(db, { title: 'Colored t-shirt slim fit' })
-
- const r1 = await search(db, {
- term: 'blue t-shirt',
- threshold: 0.6
- })
-
- const r2 = await search(db, {
- term: 'slim fit',
- threshold: 0.7
- })
-
- t.same(r1.count, 4)
- t.same(r2.count, 3)
-})
diff --git a/packages/orama/tests/tokenizeSkipProperties.test.ts b/packages/orama/tests/tokenizeSkipProperties.test.ts
index 44fc86048..3469ab2c2 100644
--- a/packages/orama/tests/tokenizeSkipProperties.test.ts
+++ b/packages/orama/tests/tokenizeSkipProperties.test.ts
@@ -1,7 +1,7 @@
import t from 'tap'
import { Orama, create, insert, search } from '../src/index.js'
-t.test('tokenizeSkipProperties', (t) => {
+t.test('tokenizeSkipProperties', async (t) => {
t.test('skipProperties', async (t) => {
const [db, id1] = await createSimpleDB(true)
diff --git a/packages/orama/tests/tokenizer.test.ts b/packages/orama/tests/tokenizer.test.ts
index 0bf26753f..9abe5cad0 100644
--- a/packages/orama/tests/tokenizer.test.ts
+++ b/packages/orama/tests/tokenizer.test.ts
@@ -9,7 +9,7 @@ import { stemmer as germanStemmer, language as germanLanguage } from '@orama/ste
import { stemmer as italianStemmer, language as italianLanguage } from '@orama/stemmers/italian'
import { stemmer as norwegianStemmer, language as norwegianLanguage } from '@orama/stemmers/norwegian'
import { stemmer as portugueseStemmer, language as portugueseLanguage } from '@orama/stemmers/portuguese'
-import { stemmer as russianStemmer } from '@orama/stemmers/russian'
+import { stemmer as russianStemmer, language as russianLanguage } from '@orama/stemmers/russian'
import { stemmer as spanishStemmer, language as spanishLanguage } from '@orama/stemmers/spanish'
import { stemmer as swedishStemmer, language as swedishLanguage } from '@orama/stemmers/swedish'
import { stemmer as ukrainianStemmer, language as ukrainianLanguage } from '@orama/stemmers/ukrainian'
@@ -33,10 +33,7 @@ import { stopwords as tamilStopwords } from '@orama/stopwords/tamil'
import { createTokenizer } from '../src/components/tokenizer/index.js'
t.test('Tokenizer', async (t) => {
- t.plan(21)
-
t.test('should tokenize and stem correctly in english', async (t) => {
- t.plan(2)
const tokenizer = await createTokenizer({ language: 'english', stopWords: false, stemming: true })
@@ -51,8 +48,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in english and allow duplicates', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: 'english',
allowDuplicates: true,
@@ -71,8 +66,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in english skipping appropriate properties (single)', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: 'english',
stemming: true,
@@ -90,8 +83,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in english skipping appropriate properties (multiple)', async (t) => {
- t.plan(3)
-
const tokenizer = await createTokenizer({
language: 'english',
stemming: true,
@@ -111,8 +102,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in english skipping appropriate properties (invalid)', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: 'english',
stemming: true,
@@ -131,8 +120,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in french', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: frenchLanguage,
stemmer: frenchStemmer,
@@ -150,8 +137,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in italian', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: italianLanguage,
stemmer: italianStemmer,
@@ -169,8 +154,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in norwegian', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: norwegianLanguage,
stemmer: norwegianStemmer,
@@ -187,8 +170,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in portuguese', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: portugueseLanguage,
stemmer: portugueseStemmer,
@@ -206,10 +187,8 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in russian', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
- language: 'russian',
+ language: russianLanguage,
stemmer: russianStemmer,
stopWords: russianStopwords
})
@@ -225,8 +204,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in swedish', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: swedishLanguage,
stemmer: swedishStemmer,
@@ -243,8 +220,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in spanish', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: spanishLanguage,
stemmer: spanishStemmer,
@@ -262,8 +237,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in dutch', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: dutchLanguage,
stemmer: dutchStemmer,
@@ -280,8 +253,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in german', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: germanLanguage,
stemmer: germanStemmer,
@@ -299,8 +270,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in finnish', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: finnishLanguage,
stemmer: finnishStemmer,
@@ -318,8 +287,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in danish', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: danishLanguage,
stemmer: danishStemmer,
@@ -337,8 +304,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in tamil', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: tamilLanguage,
stemmer: tamilStemmer,
@@ -356,8 +321,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in ukrainian', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: ukrainianLanguage,
stemmer: ukrainianStemmer,
@@ -375,8 +338,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should tokenize and stem correctly in bulgarian', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({ language: bulgarianLanguage, stemmer: bulgarianStemmer, stopWords: [] })
const I1 = 'Кокошката е малка крава която не може да се събере с теста'
@@ -390,8 +351,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('disable stemming', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({ language: 'english', stemming: false, stopWords: englishStopwords })
const I1 = 'the quick brown fox jumps over the lazy dog'
@@ -405,8 +364,6 @@ t.test('Tokenizer', async (t) => {
})
t.test('should validate options', async (t) => {
- t.plan(3)
-
await t.rejects(() => createTokenizer({ language: 'weird-language' }), { code: 'LANGUAGE_NOT_SUPPORTED' })
await t.rejects(() => createTokenizer({ language: 'italian', stemming: true }), { code: 'MISSING_STEMMER' })
@@ -419,11 +376,7 @@ t.test('Tokenizer', async (t) => {
})
t.test('Custom stop-words rules', async (t) => {
- t.plan(5)
-
t.test('custom array of stop-words', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: 'english',
stopWords: ['quick', 'brown', 'fox', 'dog'],
@@ -442,8 +395,6 @@ t.test('Custom stop-words rules', async (t) => {
})
t.test('custom stop-words function', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: 'english',
stopWords(): string[] {
@@ -463,8 +414,6 @@ t.test('Custom stop-words rules', async (t) => {
})
t.test('disable stop-words', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({ language: 'english', stopWords: false, stemming: true })
const I1 = 'the quick brown fox jumps over the lazy dog'
@@ -478,8 +427,6 @@ t.test('Custom stop-words rules', async (t) => {
})
t.test('custom stemming function', async (t) => {
- t.plan(2)
-
const tokenizer = await createTokenizer({
language: 'english',
stemmer: (word) => `${word}-ish`,
@@ -497,8 +444,6 @@ t.test('Custom stop-words rules', async (t) => {
})
await t.test('should validate options', async (t) => {
- t.plan(3)
-
// @ts-expect-error testing validation
await t.rejects(() => createTokenizer({ language: 'english', stopWords: 'FOO' }), {
code: 'CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY'
diff --git a/packages/orama/tests/tree.avl.test.ts b/packages/orama/tests/tree.avl.test.ts
index c5fc6969f..a00cc2354 100644
--- a/packages/orama/tests/tree.avl.test.ts
+++ b/packages/orama/tests/tree.avl.test.ts
@@ -2,21 +2,15 @@ import t from 'tap'
import { AVLTree } from '../src/trees/avl.js'
-t.test('AVL Tree', (t) => {
- t.plan(7)
-
- t.test('create', (t) => {
- t.plan(3)
-
+t.test('AVL Tree', async (t) => {
+ t.test('create', async (t) => {
const tree = new AVLTree(1, 'foo')
t.equal(tree.getSize(), 1)
t.equal(tree.find(1), 'foo')
t.equal(tree.find(4), null)
})
- t.test('insert', (t) => {
- t.plan(1)
-
+ t.test('insert', async (t) => {
const tree = new AVLTree(1, 'foo')
tree.insert(2, 'bar')
@@ -29,9 +23,7 @@ t.test('AVL Tree', (t) => {
t.equal(tree.getSize(), 7)
})
- t.test('find', (t) => {
- t.plan(2)
-
+ t.test('find', async (t) => {
const tree = new AVLTree(1, [1, 2, 3])
tree.insert(2, [4, 5, 6])
@@ -45,9 +37,7 @@ t.test('AVL Tree', (t) => {
t.same(tree.find(20), [16, 17, 18])
})
- t.test('remove', (t) => {
- t.plan(2)
-
+ t.test('remove', async (t) => {
const tree = new AVLTree(1, 'foo')
tree.insert(2, 'bar')
@@ -63,9 +53,7 @@ t.test('AVL Tree', (t) => {
t.equal(tree.contains(20), false)
})
- t.test('rangeSearch', (t) => {
- t.plan(1)
-
+ t.test('rangeSearch', async (t) => {
const tree = new AVLTree(1, ['foo'])
tree.insert(2, ['bar'])
@@ -78,9 +66,7 @@ t.test('AVL Tree', (t) => {
t.same(tree.rangeSearch(5, 20), ['quux', 'baz', 'corge', 'quuz'])
})
- t.test('greaterThan', (t) => {
- t.plan(1)
-
+ t.test('greaterThan', async (t) => {
const tree = new AVLTree(1, ['foo'])
tree.insert(2, ['bar'])
@@ -93,9 +79,7 @@ t.test('AVL Tree', (t) => {
t.same(tree.greaterThan(10), ['qux', 'quuz', 'corge'])
})
- t.test('lessThan', (t) => {
- t.plan(1)
-
+ t.test('lessThan', async (t) => {
const tree = new AVLTree(1, ['foo'])
tree.insert(2, ['bar'])
diff --git a/packages/orama/tests/tree.bkd.test.ts b/packages/orama/tests/tree.bkd.test.ts
index b00ac3d7b..6882756b6 100644
--- a/packages/orama/tests/tree.bkd.test.ts
+++ b/packages/orama/tests/tree.bkd.test.ts
@@ -20,23 +20,15 @@ const coordinates = [
}
]
-t.test('create', (t) => {
- t.plan(1)
-
- t.test('should create a new, empty tree', (t) => {
- t.plan(1)
-
+t.test('create', async (t) => {
+ t.test('should create a new, empty tree', async (t) => {
const tree = new BKDTree()
t.equal(tree.root, null)
})
})
-t.test('insert', (t) => {
- t.plan(2)
-
- t.test('should insert a new node into an empty tree', (t) => {
- t.plan(1)
-
+t.test('insert', async (t) => {
+ t.test('should insert a new node into an empty tree', async (t) => {
const tree = new BKDTree()
const coordinatePoints = coordinates.map(({ lat, lon }) => ({ lat, lon }))
@@ -76,9 +68,7 @@ t.test('insert', (t) => {
t.same(tree.toJSON(), expectedTree)
})
- t.test('should merge docIDs if the point already exists', (t) => {
- t.plan(1)
-
+ t.test('should merge docIDs if the point already exists', async (t) => {
const tree = new BKDTree()
tree.insert({ lat: 37.8207190397588, lon: -122.47838916631231 }, [1])
@@ -95,12 +85,8 @@ t.test('insert', (t) => {
})
})
-t.test('searchByRadius', (t) => {
- t.plan(1)
-
- t.test('should return all points within a given radius', (t) => {
- t.plan(3)
-
+t.test('searchByRadius', async (t) => {
+ t.test('should return all points within a given radius', async (t) => {
const tree = new BKDTree()
const coordinatePoints = coordinates.map(({ lat, lon }) => ({ lat, lon }))
@@ -136,12 +122,8 @@ t.test('searchByRadius', (t) => {
})
})
-t.test('searchInsidePolygon', (t) => {
- t.plan(1)
-
- t.test('should return all points inside a given polygon', (t) => {
- t.plan(2)
-
+t.test('searchInsidePolygon', async (t) => {
+ t.test('should return all points inside a given polygon', async (t) => {
const tree = new BKDTree()
const coordinatePoints = coordinates.map(({ lat, lon }) => ({ lat, lon }))
@@ -189,12 +171,8 @@ t.test('searchInsidePolygon', (t) => {
})
})
-t.test('contains', (t) => {
- t.plan(1)
-
- t.test('should return true if the tree contains the given point', (t) => {
- t.plan(2)
-
+t.test('contains', async (t) => {
+ t.test('should return true if the tree contains the given point', async (t) => {
const tree = new BKDTree()
const coordinatePoints = coordinates.map(({ lat, lon }) => ({ lat, lon }))
@@ -207,12 +185,8 @@ t.test('contains', (t) => {
})
})
-t.test('removeDocByID', (t) => {
- t.plan(2)
-
- t.test('should remove a document from the tree by its ID', (t) => {
- t.plan(1)
-
+t.test('removeDocByID', async (t) => {
+ t.test('should remove a document from the tree by its ID', async (t) => {
const tree = new BKDTree()
tree.insert({ lat: 37.8207190397588, lon: -122.47838916631231 }, [1])
@@ -230,9 +204,7 @@ t.test('removeDocByID', (t) => {
t.same(docIDs ? docIDs.sort() : null, [1, 3])
})
- t.test("If the node doesn't have any more docIDs, it should remove the node", (t) => {
- t.plan(1)
-
+ t.test("If the node doesn't have any more docIDs, it should remove the node", async (t) => {
const tree = new BKDTree()
tree.insert({ lat: 37.8207190397588, lon: -122.47838916631231 }, [1])
diff --git a/packages/orama/tests/tree.zip.test.ts b/packages/orama/tests/tree.zip.test.ts
index 81fbc048b..f6d781765 100644
--- a/packages/orama/tests/tree.zip.test.ts
+++ b/packages/orama/tests/tree.zip.test.ts
@@ -1,9 +1,7 @@
import t from 'tap'
import { ZipTree } from '../src/trees/zip.js'
-t.test('ZIP Tree', (t) => {
- t.plan(7)
-
+t.test('ZIP Tree', async (t) => {
t.test('create', (t) => {
t.plan(3)
@@ -30,9 +28,7 @@ t.test('ZIP Tree', (t) => {
t.equal(tree.getSize(), 7)
})
- t.test('find', (t) => {
- t.plan(2)
-
+ t.test('find', async (t) => {
const tree = new ZipTree()
tree.insert(1, [1, 2, 3])
@@ -47,9 +43,7 @@ t.test('ZIP Tree', (t) => {
t.same(tree.find(20), [16, 17, 18])
})
- t.test('remove', (t) => {
- t.plan(2)
-
+ t.test('remove', async (t) => {
const tree = new ZipTree()
tree.insert(1, 'foo')
@@ -66,9 +60,7 @@ t.test('ZIP Tree', (t) => {
t.equal(tree.contains(20), false)
})
- t.test('rangeSearch', (t) => {
- t.plan(1)
-
+ t.test('rangeSearch', async (t) => {
const tree = new ZipTree()
tree.insert(1, 'foo')
@@ -82,9 +74,7 @@ t.test('ZIP Tree', (t) => {
t.same(tree.rangeSearch(5, 20), ['quux', 'baz', 'corge', 'quuz'])
})
- t.test('greaterThan', (t) => {
- t.plan(1)
-
+ t.test('greaterThan', async (t) => {
const tree = new ZipTree()
tree.insert(1, 'foo')
@@ -98,9 +88,7 @@ t.test('ZIP Tree', (t) => {
t.same(tree.greaterThan(10), ['corge', 'quuz', 'qux'])
})
- t.test('lessThan', (t) => {
- t.plan(1)
-
+ t.test('lessThan', async (t) => {
const tree = new ZipTree()
tree.insert(1, 'foo')
diff --git a/packages/orama/tests/update.test.ts b/packages/orama/tests/update.test.ts
index 7da539265..efdf6bed6 100644
--- a/packages/orama/tests/update.test.ts
+++ b/packages/orama/tests/update.test.ts
@@ -1,12 +1,8 @@
import t from 'tap'
import { create, insert, getByID, update, updateMultiple, count } from '../src/index.js'
-t.test('update method', (t) => {
- t.plan(1)
-
+t.test('update method', async (t) => {
t.test('should remove a document the old document and insert the new one', async (t) => {
- t.plan(3)
-
const db = create({
schema: {
quote: 'string',
diff --git a/packages/orama/tests/utils.test.ts b/packages/orama/tests/utils.test.ts
index ed13617f5..d774458f3 100644
--- a/packages/orama/tests/utils.test.ts
+++ b/packages/orama/tests/utils.test.ts
@@ -1,12 +1,8 @@
import t from 'tap'
import { formatBytes, formatNanoseconds, getOwnProperty, getNested, flattenObject } from '../src/utils.js'
-t.test('utils', (t) => {
- t.plan(5)
-
+t.test('utils', async (t) => {
t.test('should correctly format bytes', async (t) => {
- t.plan(9)
-
t.equal(await formatBytes(0), '0 Bytes')
t.equal(await formatBytes(1), '1 Bytes')
t.equal(await formatBytes(1024), '1 KB')
@@ -19,8 +15,6 @@ t.test('utils', (t) => {
})
t.test('should correctly format nanoseconds', async (t) => {
- t.plan(13)
-
t.equal(await formatNanoseconds(1n), '1ns')
t.equal(await formatNanoseconds(10n), '10ns')
t.equal(await formatNanoseconds(100n), '100ns')
@@ -36,12 +30,8 @@ t.test('utils', (t) => {
t.equal(await formatNanoseconds(1000_000_000_000n), '1000s')
})
- t.test('should check object properties', (t) => {
- t.plan(2)
-
- t.test('should return the value of the property or undefined', (t) => {
- t.plan(2)
-
+ t.test('should check object properties', async (t) => {
+ t.test('should return the value of the property or undefined', async (t) => {
const myObject = {
foo: 'bar'
}
@@ -50,9 +40,7 @@ t.test('utils', (t) => {
t.equal(getOwnProperty(myObject, 'bar'), undefined)
})
- t.test('should return even if the hasOwn method is not available', (t) => {
- t.plan(2)
-
+ t.test('should return even if the hasOwn method is not available', async (t) => {
// @ts-expect-error - we are testing the fallback
globalThis.Object.hasOwn = undefined
@@ -66,8 +54,6 @@ t.test('utils', (t) => {
})
t.test('should get value from a nested object', async (t) => {
- t.plan(7)
-
const myObject = {
foo: 'bar',
nested: {
@@ -90,9 +76,7 @@ t.test('utils', (t) => {
t.equal(await getNested(myObject, 'nested.noop.bar'), undefined)
})
- t.test('should flatten an object', (t) => {
- t.plan(2)
-
+ t.test('should flatten an object', async (t) => {
const myObject = {
foo: 'bar',
nested: {
diff --git a/packages/stemmers/package.json b/packages/stemmers/package.json
index 0df2016c6..7232e6b66 100644
--- a/packages/stemmers/package.json
+++ b/packages/stemmers/package.json
@@ -117,11 +117,6 @@
"import": "./dist/rs.js",
"require": "./dist/rs.cjs"
},
- "./slovenian": {
- "types": "./dist/ru.d.ts",
- "import": "./dist/ru.js",
- "require": "./dist/ru.cjs"
- },
"./spanish": {
"types": "./dist/es.d.ts",
"import": "./dist/es.js",
diff --git a/packages/stemmers/scripts/build.js b/packages/stemmers/scripts/build.js
index 14af5368d..b18e3ccc1 100644
--- a/packages/stemmers/scripts/build.js
+++ b/packages/stemmers/scripts/build.js
@@ -29,7 +29,12 @@ const stemmers = {
romanian: 'ro',
russian: 'ru',
serbian: 'rs',
- slovenian: 'ru',
+ // This is never implemented actually.
+ // We used `slovenian` as `russian`, but it was wrong, sorry!
+ // Instead of providing a wrong implementation, we don't export it.
+ // Anyway, this is never tested inside `orama` package.
+ // Please, we need a PR to implement this correctly!
+ /* slovenian: 'sl', */
spanish: 'es',
swedish: 'se',
tamil: 'ta',
@@ -54,7 +59,7 @@ async function compile(lang, fullLang, jsExtension, tsExtension, moduleType) {
// Create the definition file
await writeFile(
resolve(destinationDir, `${lang}.d.${tsExtension}`),
- 'export declare function stemmer(word: string): string',
+ 'export declare function stemmer(word: string): string;\n export const language: string;',
'utf-8'
)
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2381b8311..48033f0ab 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -75,8 +75,8 @@ importers:
specifier: ^3.12.1
version: 3.14.0
turbo:
- specifier: ^1.8.5
- version: 1.13.4
+ specifier: ^2.1.3
+ version: 2.1.3
typescript:
specifier: ^5.0.0
version: 5.6.2
@@ -205,8 +205,8 @@ importers:
specifier: ^2.8.1
version: 2.8.8
tap:
- specifier: ^18.6.1
- version: 18.8.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)
+ specifier: ^21.0.1
+ version: 21.0.1(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)
tap-mocha-reporter:
specifier: ^5.0.3
version: 5.0.4
@@ -767,7 +767,7 @@ importers:
version: link:../plugin-secure-proxy
tsup:
specifier: ^7.2.0
- version: 7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2))(typescript@5.6.2)
+ version: 7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.6.2))(typescript@5.6.2)
tsx:
specifier: ^4.19.0
version: 4.19.1
@@ -780,10 +780,10 @@ importers:
devDependencies:
tap:
specifier: ^18.6.1
- version: 18.8.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)
+ version: 18.8.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)
tsup:
specifier: ^7.2.0
- version: 7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2))(typescript@5.6.2)
+ version: 7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.6.2))(typescript@5.6.2)
tsx:
specifier: ^4.7.1
version: 4.19.1
@@ -1221,6 +1221,7 @@ packages:
'@babel/plugin-proposal-object-rest-spread@7.12.1':
resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==}
+ deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -3396,10 +3397,18 @@ packages:
resolution: {integrity: sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==}
engines: {node: ^16.14.0 || >=18.0.0}
+ '@npmcli/redact@2.0.1':
+ resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
'@npmcli/run-script@7.0.4':
resolution: {integrity: sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==}
engines: {node: ^16.14.0 || >=18.0.0}
+ '@npmcli/run-script@8.1.0':
+ resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
'@open-draft/deferred-promise@2.2.0':
resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
@@ -3976,30 +3985,66 @@ packages:
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/after-each@4.0.0':
+ resolution: {integrity: sha512-RrkYMB3SpXKFJAijbgNkOexiClX5aygkCIHKHPIfnfqsPozkwjYbtVQs6d1/tG8ytiJtH5rvybuNJMRRNDcfBQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/after@1.1.22':
resolution: {integrity: sha512-8Ui8dfTFgDS3ENfzKpsWGJw+v4LHXvifaSB79chQbucuggW+nM2zzWu7grw7mDUBBR3Mknk+qL4Nb1KrnZvfWQ==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/after@3.0.0':
+ resolution: {integrity: sha512-BCGq+YocD0xxeGC4mMym2tg6qtgFJJdCrji8N1HbF55d55nxQrA8R/w6+D9b4N7t/4dfpbI+LW5FgdBATohFPw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/asserts@1.2.0':
resolution: {integrity: sha512-QTs1kALeJKrlX9Yns3f8/hfsWgf4mdFYPN3lQKxZ/3C/DkGnjlrpVd4I2fnTC7cgJ116kwEgwhxVJUpw9QPp9A==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/asserts@4.0.0':
+ resolution: {integrity: sha512-V1YmOLMhyITi75e0u8vS+x1S0sDwISWk643C4a9XiY2RDin1nEueE8Nzwp2ZBP+N4HtgzKVfzJ1AYvpwaTKwUA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/before-each@1.1.22':
resolution: {integrity: sha512-uKKllHDvQgTXjAm+F+29Iqcb9Bzh5U6LH45m6v/zfKPm8UNnNpJ/XxFbbsFqi0EQX2czYH0ivHfyQwiO40R8lw==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/before-each@4.0.0':
+ resolution: {integrity: sha512-zJwDLLH+3+qmpE8Pr1fAEeqZNvbok7yYKKKE/7IDMi3zdvM0Rjk7Y4JXGbVI8IreuRK0rXaSL1ZZqbFMsZGHrg==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/before@1.1.22':
resolution: {integrity: sha512-Uv2odGCtOgY/EevyDZv2rHbIbe9WGrouC6HI+lJv4whGUKgiIYTOjrssl4YxvqvnNWx289/6Tp4Kpu7EeXT7yA==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/before@4.0.0':
+ resolution: {integrity: sha512-d1k6lTSzqTcq4pjGsCPUxNP5NFWZBxwHLmgVxy2RHfZwKM20eXXAOPgAw3LgPVgkoehwi+nwWUGTJDcL3AS8YQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/chdir@3.0.0':
+ resolution: {integrity: sha512-yljg4CX2/UinFytD50LaRhBVTDaW3vBcUwzYnXzJcuFLoPEpq0svlyIwzcCXfLLGP8/AgkS3MRt58AisBtz4zw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/config@2.4.19':
resolution: {integrity: sha512-8fkUnf2d3g9wbnfSirXI92bx4ZO5X37nqYVb5fua9VDC2MsTLAmd4JyDSNG1ngn8/nO5o8aFNEeUaePswGId4A==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
@@ -4007,44 +4052,89 @@ packages:
'@tapjs/core': 1.5.4
'@tapjs/test': 1.4.4
+ '@tapjs/config@5.0.0':
+ resolution: {integrity: sha512-AAHbK30FwnGC3FcFACnXEGZ+uFtkpxsF2bwvgAzHND2tIE9ld2LwGMiGq3rM9EwcZ1AAnU8ibbUC0WbnS5FcCQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+ '@tapjs/test': 4.0.0
+
'@tapjs/core@1.5.4':
resolution: {integrity: sha512-kDgRxTkSRxfLbX5orDmizxuyFBLLC3Mu4mQ2dMzw/UMYkrN8jZbkKZqIR0BdXgxE+GqvVFqkYvFJImXJBygBKQ==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
+ '@tapjs/core@4.0.0':
+ resolution: {integrity: sha512-COWMNbGBjf0qbsbKw+2911rrt+oXXOkIXpoMpIsz0/UN2rxqAAvDyrriObVfc4v+O2auabnWfdrxwNm3Vy01yw==}
+ engines: {node: 20 || >=22}
+
'@tapjs/error-serdes@1.2.2':
resolution: {integrity: sha512-RW2aU50JR7SSAlvoTyuwouXETLM9lP+7oZ5Z+dyKhNp8mkbbz4mXKcgd9SDHY5qTh6zvVN7OFK7ev7dYWXbrWw==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
+ '@tapjs/error-serdes@4.0.0':
+ resolution: {integrity: sha512-jO0CvhL7lyGcDzyPeumyXirBv/vxRuhg8SdyLwjNqO7aelckxZzY/dCchtov7PfKK7wc/iB55W2++PE9waFaWw==}
+ engines: {node: 20 || >=22}
+
'@tapjs/filter@1.2.22':
resolution: {integrity: sha512-qVWbsFem2R1htQVh0+4xWMPsDPpQ2NhA/6mnlg4ApzAFvaTr5T/zK72VpR+AqPaMcMgrp4a/m5DQ03dLFqckZQ==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/filter@4.0.0':
+ resolution: {integrity: sha512-VCqwRB+GJKDavOtoCU6K3skR6b/Qv7vo5YwuwgTUzRDmeNJQwI4S/s0l4cRbaMVJxuXeR3o5JwBsH0Ppjwzgkw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/fixture@1.2.22':
resolution: {integrity: sha512-ZYjkRzLSwW+cOg2CbL3GrgjatKVXcEGLQa7vjfmYVxDrPHkK7tiu3lf1KU6pFxTyqTlMMRUfMehHQrH+JjDC7Q==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/fixture@4.0.0':
+ resolution: {integrity: sha512-h8qZwzQqNd0aLU+oU+0uhBSSlU4+5a8kkFfPrwlNQr9Vde2CyW5vMMVWvX2do+5wFyiFwKHAjbtBS7BSkfH7Kw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/intercept@1.2.22':
resolution: {integrity: sha512-OiayUlV+0fxwGM3B7JyRSwryq2kRpuWiF+4wQCiufSbbF20H4uEIlkRq1YrfUlla4zWVvHeQOQlUoqb6fSEcSQ==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/intercept@4.0.0':
+ resolution: {integrity: sha512-MSPvOcwVKZjtb2KVY6JB/dBD54mGkzaJHCdzkIAJdcUAAbZQz5pMppQkEwPw/Zs+JFPJjGzZyITrDfh9if7maw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/mock@1.3.4':
resolution: {integrity: sha512-tEz5hIdJdAGzl+KxjZol4DD7cWAdYMmvLU/QCZ5BThAOJ+FUAOxtBFA31nd7IWkMseIqcbeeqLmeMtan6QlPKA==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/mock@4.0.0':
+ resolution: {integrity: sha512-6GyQm61wSCmfxKb7GRY24cdnO92mV7mZ0hmdbOko881FIEmjeAsLQaNKUaatnGWpzBUoqw+JCzbASee4/AfaMQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/node-serialize@1.3.4':
resolution: {integrity: sha512-OwnSWdNnukgIGBsgnPy1ZpBDxp274GwLx2Ag+CulhsQ+IF9rOCq5P0EQ2kbxhxRet1386kbNzgXgaEeXmDXlLQ==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/node-serialize@4.0.0':
+ resolution: {integrity: sha512-cFHcyEZHd4SQPSoZ4tGHfo/p1+4r24G0K0jiAb28WotdE2kbjkf7TVEiKOA5IEOmjQtdJ4+gVcuErZUchjpQZg==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/processinfo@3.1.8':
resolution: {integrity: sha512-FIriEB+qqArPhmVYc1PZwRHD99myRdl7C9Oe/uts04Q2LOxQ5MEmqP9XOP8vVYzpDOYwmL8OmL6eOYt9eZlQKQ==}
engines: {node: '>=16.17'}
@@ -4055,6 +4145,12 @@ packages:
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/reporter@4.0.1':
+ resolution: {integrity: sha512-bS7pOGV99GAhYY/LxNxL4Qq0Ldi4k8DZDC25gonVQrNUW2zYpSBerhrnsz1KDXdaD2OKDtSR8oW2FxUyL6n83A==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/run@1.5.4':
resolution: {integrity: sha512-mwzU/KalqYOGZTTf7lPyfBdRDCoIgec69NXrq/+Le7PXYWKrRoYvIUoBGwgZYyjfiYshhnzb+ayZdtd76Lj0Kw==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
@@ -4062,28 +4158,57 @@ packages:
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/run@4.0.1':
+ resolution: {integrity: sha512-jll1tiMhxFajfHIGBF/eK+Ob0uEqXBnQq/ONNc9heqcCtcXhC4iYGzhoK+sw03MxwrbRtNomQ7dRqiT0IOjS6w==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/snapshot@1.2.22':
resolution: {integrity: sha512-6nhNY6uFPnQEVQ8vuxV3rKiC7NXDY5k/Bv1bPatfo//6z1T41INfQbnfwQXoufaHveLPpGBTLwpOWjtFsUHgdg==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/snapshot@4.0.0':
+ resolution: {integrity: sha512-1d2IOOpbra6VMDypft8NGylkIypgk2VgMRrEeSsipOyeku81STlcdzm8mS0COCqVtX6+si+tkERuqFrCVy/xSg==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/spawn@1.1.22':
resolution: {integrity: sha512-/MbFSmSpvLA0N2rKd8rI0vMLYM+0E3OB+doj+YUZe5m3G0YCHTBzZrnFGLw7Am1VsaREy4fSgchNEdn1NyikcQ==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/spawn@4.0.0':
+ resolution: {integrity: sha512-K+kn4wCIMiOfHtjt5lxlxmJMvL4C9txAxapTRyLEm9ul9ZKgzAOQmMD29YEtkKY53v1eAfpJ3agCXnH59uOJ+A==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/stack@1.2.8':
resolution: {integrity: sha512-VC8h6U62ScerTKN+MYpRPiwH2bCL65S6v1wcj1hukE2hojLcRvVdET7S3ZtRfSj/eNWW/5OVfzTpHiGjEYD6Xg==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
+ '@tapjs/stack@4.0.0':
+ resolution: {integrity: sha512-uj6BvHXvLf1qILvcpYit9D6JX7pg4eSbaxm1MhWpi8wdhSQyUAOe4gxCMTfJpW0ekB48N4QN3S3vaq7rWtFctw==}
+ engines: {node: 20 || >=22}
+
'@tapjs/stdin@1.1.22':
resolution: {integrity: sha512-JUyzZHG01iM6uDfplVGRiK+OdNalwl5Okv+eljHBdZOA8kO3hHI6N9bkZa472/st4NBj0lcMMGb2IKGgIBBUQg==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/stdin@4.0.0':
+ resolution: {integrity: sha512-6QcaKEKH+RB5YPVHytclqzrKoh1d0S8i8lEgGwGAhoaShyawB5CoADnKpCXWjHKsRESUvG7CqiPDGsK39BJEaA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/test@1.4.4':
resolution: {integrity: sha512-I0mzxs8+RUULd9g0R6+LXsLzkeqhu5jJPpA7w5BzTxA++jQ0ACjyHs1BBy1IhhP9DeZ5N2LPg+WxLs7Dijs9Uw==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
@@ -4091,18 +4216,37 @@ packages:
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/test@4.0.0':
+ resolution: {integrity: sha512-lOU1N0bFCCjJg2UEb8TlLj6+u754Uxi2CSuv3TSkRU+oHRBTEPZ4nJ6MpUqvgyvKm9ilVZ5FLS9/GwXB/XLH3A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/typescript@1.4.4':
resolution: {integrity: sha512-Mf2vIK1yk5ipQRmuIznFtC8Iboti0p0D90ENDZdEx678h60vAVPh9vebVX+oQ0LccAHGyu/CiOSFL4Za8b5/Rg==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/typescript@3.0.0':
+ resolution: {integrity: sha512-gKDv+07vdNuplN32sQvkzuEnai9JqJlUX5BuqTrSeWMsoKCoGPdyt8YNwaoebVeyBpt7IgjOBln8YLhfI3AcpA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tapjs/worker@1.1.22':
resolution: {integrity: sha512-1PO9Qstfevr4Wdh318eC3O1mytSyXT3q/K6EeivBhnuPeyHsy3QCAd1bfVD7gqzWNbJ/UzeGN3knfIi5qXifmA==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
peerDependencies:
'@tapjs/core': 1.5.4
+ '@tapjs/worker@4.0.0':
+ resolution: {integrity: sha512-BI5Ttet5HEABPAll8Ou8oFQGIiglen87PYlwTc9yLEB+g4mj8FCZYTGJNIW981CT7lOZzMJICz3C3VTdC9vzuA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
'@tensorflow-models/universal-sentence-encoder@1.3.3':
resolution: {integrity: sha512-mipL7ad0CW6uQ68FUkNgkNj/zgA4qgBnNcnMMkNTdL9MUMnzCxu3AE8pWnx2ReKHwdqEG4e8IpaYKfH4B8bojg==}
peerDependencies:
@@ -4840,6 +4984,10 @@ packages:
resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
engines: {node: '>=14.16'}
+ ansi-escapes@7.0.0:
+ resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ engines: {node: '>=18'}
+
ansi-html-community@0.0.8:
resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
engines: {'0': node >= 0.8.0}
@@ -5188,6 +5336,16 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
+ c8@10.1.2:
+ resolution: {integrity: sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ monocart-coverage-reports: ^2
+ peerDependenciesMeta:
+ monocart-coverage-reports:
+ optional: true
+
c8@7.14.0:
resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==}
engines: {node: '>=10.12.0'}
@@ -5399,6 +5557,10 @@ packages:
resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+
cli-width@3.0.0:
resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
engines: {node: '>= 10'}
@@ -6209,6 +6371,10 @@ packages:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
@@ -7509,6 +7675,19 @@ packages:
react-devtools-core:
optional: true
+ ink@5.0.1:
+ resolution: {integrity: sha512-ae4AW/t8jlkj/6Ou21H2av0wxTk8vrGzXv+v2v7j4in+bl1M5XRMVbfNghzhBokV++FjF8RBDJvYo+ttR9YVRg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/react': '>=18.0.0'
+ react: '>=18.0.0'
+ react-devtools-core: ^4.19.1
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react-devtools-core:
+ optional: true
+
inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
@@ -7657,6 +7836,10 @@ packages:
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
engines: {node: '>=12'}
+ is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+
is-generator-function@1.0.10:
resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
engines: {node: '>= 0.4'}
@@ -7671,6 +7854,11 @@ packages:
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ is-in-ci@0.1.0:
+ resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -9047,6 +9235,10 @@ packages:
resolution: {integrity: sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==}
engines: {node: ^16.14.0 || >=18.0.0}
+ npm-registry-fetch@17.1.0:
+ resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
npm-run-path@2.0.2:
resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
engines: {node: '>=4'}
@@ -9265,6 +9457,11 @@ packages:
engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true
+ pacote@18.0.6:
+ resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ hasBin: true
+
pagefind@1.1.1:
resolution: {integrity: sha512-U2YR0dQN5B2fbIXrLtt/UXNS0yWSSYfePaad1KcBPTi0p+zRtsVjwmoPaMQgTks5DnHNbmDxyJUL5TGaLljK3A==}
hasBin: true
@@ -10963,6 +11160,10 @@ packages:
resolution: {integrity: sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==}
engines: {node: '>=14.16'}
+ slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+
slugify@1.6.6:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
@@ -11338,6 +11539,11 @@ packages:
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
hasBin: true
+ tap-parser@18.0.0:
+ resolution: {integrity: sha512-RM3Lp5LNCYcepRqPMuDFg8S3uYV8MDmgxUOjx2Q7f2z5QuB88u92ViBwyp3MuQ/DVMR7v48HrJfV2scXRQYf5A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
tap-yaml@1.0.2:
resolution: {integrity: sha512-GegASpuqBnRNdT1U+yuUPZ8rEU64pL35WPBpCISWwff4dErS2/438barz7WFJl4Nzh3Y05tfPidZnH+GaV1wMg==}
@@ -11345,11 +11551,20 @@ packages:
resolution: {integrity: sha512-MWG4OpAKtNoNVjCz/BqlDJiwTM99tiHRhHPS4iGOe1ZS0CgM4jSFH92lthSFvvy4EdDjQZDV7uYqUFlU9JuNhw==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
+ tap-yaml@4.0.0:
+ resolution: {integrity: sha512-CjMbq8hhT5TvzyvHRnzbGp00wmb4TZjSscCRCCJCdCzRb+Pb56HaMlBHNBn1/GZ6UqwUgDKdF18+9VAFnQ4F0g==}
+ engines: {node: 20 || >=22}
+
tap@18.8.0:
resolution: {integrity: sha512-tX02yXmzBcemYfNGKtTJFf3cn7e8VgBvxKswaew8YnrE+1cUZtxyN0GhMzPQ5cWznVz47DfgcuYR1QtCr+4LOw==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
hasBin: true
+ tap@21.0.1:
+ resolution: {integrity: sha512-FE8H5Nt2mKU96DX4XgjqBkKzMcxvVkmbKhaNWOk2lUNRpqJNKqBOO5R6q7shr7JoUh1DHwdNWmppg8vWXQh2lQ==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
tapable@1.1.3:
resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
engines: {node: '>=6'}
@@ -11370,6 +11585,10 @@ packages:
resolution: {integrity: sha512-sxvgCgO2GAIWHibnK4zLvvi9GHd/ZlR9DOUJ4ufwvNtkdKE2I9MNwJUwzYvOmGrJXMcfhhw0CDBb+6j0ia+I7A==}
engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20}
+ tcompare@9.0.0:
+ resolution: {integrity: sha512-qOliew2xDAqIUbIamIFZ+pz80s9T+8IywzQPIt7YX30ojsBqk86jcD6ouygqt5lHURTxFxWjzbUmIe7Cts4bsA==}
+ engines: {node: 20 || >=22}
+
terser-webpack-plugin@5.3.10:
resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
engines: {node: '>= 10.13.0'}
@@ -11395,6 +11614,10 @@ packages:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
+
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
@@ -11597,38 +11820,38 @@ packages:
resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==}
engines: {node: ^16.14.0 || >=18.0.0}
- turbo-darwin-64@1.13.4:
- resolution: {integrity: sha512-A0eKd73R7CGnRinTiS7txkMElg+R5rKFp9HV7baDiEL4xTG1FIg/56Vm7A5RVgg8UNgG2qNnrfatJtb+dRmNdw==}
+ turbo-darwin-64@2.1.3:
+ resolution: {integrity: sha512-ouJOm0g0YyoBuhmikEujVCBGo3Zr0lbSOWFIsQtWUTItC88F2w2byhjtsYGPXQwMlTbXwmoBU2lOCfWNkeEwHQ==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@1.13.4:
- resolution: {integrity: sha512-eG769Q0NF6/Vyjsr3mKCnkG/eW6dKMBZk6dxWOdrHfrg6QgfkBUk0WUUujzdtVPiUIvsh4l46vQrNVd9EOtbyA==}
+ turbo-darwin-arm64@2.1.3:
+ resolution: {integrity: sha512-j2FOJsK4LAOtHQlb3Oom0yWB/Vi0nF1ljInr311mVzHoFAJRZtfW2fRvdZRb/lBUwjSp8be58qWHzANIcrA0OA==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@1.13.4:
- resolution: {integrity: sha512-Bq0JphDeNw3XEi+Xb/e4xoKhs1DHN7OoLVUbTIQz+gazYjigVZvtwCvgrZI7eW9Xo1eOXM2zw2u1DGLLUfmGkQ==}
+ turbo-linux-64@2.1.3:
+ resolution: {integrity: sha512-ubRHkI1gSel7H7wsmxKK8C9UlLWqg/2dkCC88LFupaK6TKgvBKqDqA0Z1M9C/escK0Jsle2k0H8bybV9OYIl4Q==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@1.13.4:
- resolution: {integrity: sha512-BJcXw1DDiHO/okYbaNdcWN6szjXyHWx9d460v6fCHY65G8CyqGU3y2uUTPK89o8lq/b2C8NK0yZD+Vp0f9VoIg==}
+ turbo-linux-arm64@2.1.3:
+ resolution: {integrity: sha512-LffUL+e5wv7BtD6DgnM2kKOlDkMo2eRjhbAjVnrCD3wi2ug0tl6NDzajnHHjtaMyOnIf4AvzSKdLWsBxafGBQA==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@1.13.4:
- resolution: {integrity: sha512-OFFhXHOFLN7A78vD/dlVuuSSVEB3s9ZBj18Tm1hk3aW1HTWTuAw0ReN6ZNlVObZUHvGy8d57OAGGxf2bT3etQw==}
+ turbo-windows-64@2.1.3:
+ resolution: {integrity: sha512-S9SvcZZoaq5jKr6kA6eF7/xgQhVn8Vh7PVy5lono9zybvhyL4eY++y2PaLToIgL8G9IcbLmgOC73ExNjFBg9XQ==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@1.13.4:
- resolution: {integrity: sha512-u5A+VOKHswJJmJ8o8rcilBfU5U3Y1TTAfP9wX8bFh8teYF1ghP0EhtMRLjhtp6RPa+XCxHHVA2CiC3gbh5eg5g==}
+ turbo-windows-arm64@2.1.3:
+ resolution: {integrity: sha512-twlEo8lRrGbrR6T/ZklUIquW3IlFCEtywklgVA81aIrSBm56+GEVpSrHhIlsx1hiYeSNrs+GpDwZGe+V7fvEVQ==}
cpu: [arm64]
os: [win32]
- turbo@1.13.4:
- resolution: {integrity: sha512-1q7+9UJABuBAHrcC4Sxp5lOqYS5mvxRrwa33wpIyM18hlOCpRD/fTJNxZ0vhbMcJmz15o9kkVm743mPn7p6jpQ==}
+ turbo@2.1.3:
+ resolution: {integrity: sha512-lY0yj2GH2a2a3NExZ3rGe+rHUVeFE2aXuRAue57n+08E7Z7N7YCmynju0kPC1grAQzERmoLpKrmzmWd+PNiADw==}
hasBin: true
type-check@0.4.0:
@@ -11721,6 +11944,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@5.5.4:
+ resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
engines: {node: '>=14.17'}
@@ -12467,6 +12695,10 @@ packages:
resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
engines: {node: '>=12'}
+ widest-line@5.0.0:
+ resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+ engines: {node: '>=18'}
+
wildcard@2.0.1:
resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
@@ -12489,6 +12721,10 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -12568,6 +12804,12 @@ packages:
peerDependencies:
yaml: ^2.3.0
+ yaml-types@0.4.0:
+ resolution: {integrity: sha512-XfbA30NUg4/LWUiplMbiufUiwYhgB9jvBhTWel7XQqjV+GaB79c2tROu/8/Tu7jO0HvDvnKWtBk5ksWRrhQ/0g==}
+ engines: {node: '>= 16', npm: '>= 7'}
+ peerDependencies:
+ yaml: ^2.3.0
+
yaml@1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
@@ -16311,6 +16553,24 @@ snapshots:
optionalDependencies:
'@swc/core': 1.7.28(@swc/helpers@0.5.5)
+ '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.5.4)':
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node14': 14.1.2
+ '@tsconfig/node16': 16.1.3
+ '@tsconfig/node18': 18.2.4
+ '@tsconfig/node20': 20.1.4
+ '@types/node': 20.16.9
+ acorn: 8.12.1
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.4
+ v8-compile-cache-lib: 3.0.1
+ optionalDependencies:
+ '@swc/core': 1.7.28(@swc/helpers@0.5.5)
+
'@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)':
dependencies:
'@cspotcode/source-map-support': 0.8.1
@@ -16329,6 +16589,42 @@ snapshots:
optionalDependencies:
'@swc/core': 1.7.28(@swc/helpers@0.5.5)
+ '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.2.2)':
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node14': 14.1.2
+ '@tsconfig/node16': 16.1.3
+ '@tsconfig/node18': 18.2.4
+ '@tsconfig/node20': 20.1.4
+ '@types/node': 22.7.2
+ acorn: 8.12.1
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.2.2
+ v8-compile-cache-lib: 3.0.1
+ optionalDependencies:
+ '@swc/core': 1.7.28(@swc/helpers@0.5.5)
+
+ '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.6.2)':
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node14': 14.1.2
+ '@tsconfig/node16': 16.1.3
+ '@tsconfig/node18': 18.2.4
+ '@tsconfig/node20': 20.1.4
+ '@types/node': 22.7.2
+ acorn: 8.12.1
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.6.2
+ v8-compile-cache-lib: 3.0.1
+ optionalDependencies:
+ '@swc/core': 1.7.28(@swc/helpers@0.5.5)
+
'@istanbuljs/schema@0.1.3': {}
'@jest/schemas@29.6.3':
@@ -16582,6 +16878,8 @@ snapshots:
'@npmcli/redact@1.1.0': {}
+ '@npmcli/redact@2.0.1': {}
+
'@npmcli/run-script@7.0.4':
dependencies:
'@npmcli/node-gyp': 3.0.0
@@ -16593,6 +16891,18 @@ snapshots:
- bluebird
- supports-color
+ '@npmcli/run-script@8.1.0':
+ dependencies:
+ '@npmcli/node-gyp': 3.0.0
+ '@npmcli/package-json': 5.2.1
+ '@npmcli/promise-spawn': 7.0.2
+ node-gyp: 10.2.0
+ proc-log: 4.2.0
+ which: 4.0.0
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+
'@open-draft/deferred-promise@2.2.0': {}
'@open-draft/logger@0.3.0':
@@ -17233,11 +17543,31 @@ snapshots:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
function-loop: 4.0.0
+ '@tapjs/after-each@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ function-loop: 4.0.0
+
+ '@tapjs/after-each@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ function-loop: 4.0.0
+
'@tapjs/after@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
is-actual-promise: 1.0.2
+ '@tapjs/after@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+
+ '@tapjs/after@3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+
'@tapjs/asserts@1.2.0(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -17249,16 +17579,62 @@ snapshots:
- react
- react-dom
+ '@tapjs/asserts@1.2.0(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 1.2.8
+ is-actual-promise: 1.0.2
+ tcompare: 6.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@tapjs/asserts@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+ is-actual-promise: 1.0.2
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
'@tapjs/before-each@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
function-loop: 4.0.0
+ '@tapjs/before-each@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ function-loop: 4.0.0
+
+ '@tapjs/before-each@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ function-loop: 4.0.0
+
'@tapjs/before@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
is-actual-promise: 1.0.2
+ '@tapjs/before@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+
+ '@tapjs/before@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+
+ '@tapjs/chdir@3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
'@tapjs/config@2.4.19(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -17269,6 +17645,26 @@ snapshots:
tap-yaml: 2.2.2
walk-up-path: 3.0.1
+ '@tapjs/config@2.4.19(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/test': 1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ chalk: 5.3.0
+ jackspeak: 2.3.6
+ polite-json: 4.0.1
+ tap-yaml: 2.2.2
+ walk-up-path: 3.0.1
+
+ '@tapjs/config@5.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/test': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ chalk: 5.3.0
+ jackspeak: 4.0.2
+ polite-json: 5.0.0
+ tap-yaml: 4.0.0
+ walk-up-path: 4.0.0
+
'@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tapjs/processinfo': 3.1.8
@@ -17290,26 +17686,104 @@ snapshots:
- react
- react-dom
- '@tapjs/error-serdes@1.2.2':
+ '@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- minipass: 7.1.2
-
- '@tapjs/filter@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ '@tapjs/processinfo': 3.1.8
+ '@tapjs/stack': 1.2.8
+ '@tapjs/test': 1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ async-hook-domain: 4.0.1
+ diff: 5.2.0
+ is-actual-promise: 1.0.2
+ minipass: 7.1.2
+ signal-exit: 4.1.0
+ tap-parser: 15.3.2
+ tap-yaml: 2.2.2
+ tcompare: 6.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - react
+ - react-dom
+
+ '@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/processinfo': 3.1.8
+ '@tapjs/stack': 4.0.0
+ '@tapjs/test': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ async-hook-domain: 4.0.1
+ diff: 5.2.0
+ is-actual-promise: 1.0.2
+ minipass: 7.1.2
+ signal-exit: 4.1.0
+ tap-parser: 18.0.0
+ tap-yaml: 4.0.0
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - react
+ - react-dom
+
+ '@tapjs/error-serdes@1.2.2':
+ dependencies:
+ minipass: 7.1.2
+
+ '@tapjs/error-serdes@4.0.0':
+ dependencies:
+ minipass: 7.1.2
+
+ '@tapjs/filter@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/filter@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
'@tapjs/fixture@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
mkdirp: 3.0.1
rimraf: 5.0.10
+ '@tapjs/fixture@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ mkdirp: 3.0.1
+ rimraf: 5.0.10
+
+ '@tapjs/fixture@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ mkdirp: 3.0.1
+ rimraf: 6.0.1
+
'@tapjs/intercept@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tapjs/stack': 1.2.8
+ '@tapjs/intercept@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 1.2.8
+
+ '@tapjs/intercept@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+
'@tapjs/mock@1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
@@ -17318,6 +17792,22 @@ snapshots:
resolve-import: 1.4.6
walk-up-path: 3.0.1
+ '@tapjs/mock@1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 1.2.8
+ resolve-import: 1.4.6
+ walk-up-path: 3.0.1
+
+ '@tapjs/mock@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+ resolve-import: 2.0.0
+ walk-up-path: 4.0.0
+
'@tapjs/node-serialize@1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -17325,6 +17815,20 @@ snapshots:
'@tapjs/stack': 1.2.8
tap-parser: 15.3.2
+ '@tapjs/node-serialize@1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/error-serdes': 1.2.2
+ '@tapjs/stack': 1.2.8
+ tap-parser: 15.3.2
+
+ '@tapjs/node-serialize@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/error-serdes': 4.0.0
+ '@tapjs/stack': 4.0.0
+ tap-parser: 18.0.0
+
'@tapjs/processinfo@3.1.8':
dependencies:
pirates: 4.0.6
@@ -17356,6 +17860,54 @@ snapshots:
- react-dom
- utf-8-validate
+ '@tapjs/reporter@1.3.20(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))':
+ dependencies:
+ '@tapjs/config': 2.4.19(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 1.2.8
+ chalk: 5.3.0
+ ink: 4.4.1(@types/react@18.3.9)(react@18.3.1)
+ minipass: 7.1.2
+ ms: 2.1.3
+ patch-console: 2.0.0
+ prismjs-terminal: 1.2.3
+ react: 18.3.1
+ string-length: 6.0.0
+ tap-parser: 15.3.2
+ tap-yaml: 2.2.2
+ tcompare: 6.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@tapjs/test'
+ - '@types/react'
+ - bufferutil
+ - react-devtools-core
+ - react-dom
+ - utf-8-validate
+
+ '@tapjs/reporter@4.0.1(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))':
+ dependencies:
+ '@tapjs/config': 5.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+ chalk: 5.3.0
+ ink: 5.0.1(@types/react@18.3.9)(react@18.3.1)
+ minipass: 7.1.2
+ ms: 2.1.3
+ patch-console: 2.0.0
+ prismjs-terminal: 1.2.3
+ react: 18.3.1
+ string-length: 6.0.0
+ tap-parser: 18.0.0
+ tap-yaml: 4.0.0
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@tapjs/test'
+ - '@types/react'
+ - bufferutil
+ - react-devtools-core
+ - react-dom
+ - utf-8-validate
+
'@tapjs/run@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
@@ -17398,6 +17950,92 @@ snapshots:
- supports-color
- utf-8-validate
+ '@tapjs/run@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/config': 2.4.19(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/processinfo': 3.1.8
+ '@tapjs/reporter': 1.3.20(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))
+ '@tapjs/spawn': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/test': 1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ c8: 8.0.1
+ chalk: 5.3.0
+ chokidar: 3.6.0
+ foreground-child: 3.3.0
+ glob: 10.4.5
+ minipass: 7.1.2
+ mkdirp: 3.0.1
+ opener: 1.5.2
+ pacote: 17.0.7
+ resolve-import: 1.4.6
+ rimraf: 5.0.10
+ semver: 7.6.3
+ signal-exit: 4.1.0
+ tap-parser: 15.3.2
+ tap-yaml: 2.2.2
+ tcompare: 6.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ which: 4.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - '@types/react'
+ - bluebird
+ - bufferutil
+ - react
+ - react-devtools-core
+ - react-dom
+ - supports-color
+ - utf-8-validate
+
+ '@tapjs/run@4.0.1(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/config': 5.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/processinfo': 3.1.8
+ '@tapjs/reporter': 4.0.1(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))
+ '@tapjs/spawn': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/test': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ c8: 10.1.2
+ chalk: 5.3.0
+ chokidar: 3.6.0
+ foreground-child: 3.3.0
+ glob: 11.0.0
+ minipass: 7.1.2
+ mkdirp: 3.0.1
+ opener: 1.5.2
+ pacote: 18.0.6
+ path-scurry: 2.0.0
+ resolve-import: 2.0.0
+ rimraf: 6.0.1
+ semver: 7.6.3
+ signal-exit: 4.1.0
+ tap-parser: 18.0.0
+ tap-yaml: 4.0.0
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ which: 4.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - '@types/react'
+ - bluebird
+ - bufferutil
+ - monocart-coverage-reports
+ - react
+ - react-devtools-core
+ - react-dom
+ - supports-color
+ - utf-8-validate
+
'@tapjs/snapshot@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -17408,16 +18046,54 @@ snapshots:
- react
- react-dom
+ '@tapjs/snapshot@1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+ tcompare: 6.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@tapjs/snapshot@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
'@tapjs/spawn@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/spawn@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
'@tapjs/stack@1.2.8': {}
+ '@tapjs/stack@4.0.0': {}
+
'@tapjs/stdin@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stdin@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/stdin@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
'@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.2.2)
@@ -17453,6 +18129,79 @@ snapshots:
- react
- react-dom
+ '@tapjs/test@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.2.2)
+ '@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/after-each': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/asserts': 1.2.0(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/before': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before-each': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/fixture': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/intercept': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/mock': 1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/node-serialize': 1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/snapshot': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/typescript': 1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(typescript@5.2.2)
+ '@tapjs/worker': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ glob: 10.4.5
+ jackspeak: 2.3.6
+ mkdirp: 3.0.1
+ resolve-import: 1.4.6
+ rimraf: 5.0.10
+ sync-content: 1.0.2
+ tap-parser: 15.3.2
+ tshy: 1.18.0
+ typescript: 5.2.2
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - react
+ - react-dom
+
+ '@tapjs/test@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.5.4)
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/after-each': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/asserts': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/before': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before-each': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/chdir': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/fixture': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/intercept': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/mock': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/node-serialize': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/snapshot': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/typescript': 3.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(typescript@5.5.4)
+ '@tapjs/worker': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ glob: 11.0.0
+ jackspeak: 4.0.2
+ mkdirp: 3.0.1
+ package-json-from-dist: 1.0.0
+ resolve-import: 2.0.0
+ rimraf: 6.0.1
+ sync-content: 2.0.1
+ tap-parser: 18.0.0
+ tshy: 3.0.2
+ typescript: 5.5.4
+ walk-up-path: 4.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - react
+ - react-dom
+
'@tapjs/typescript@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(typescript@5.2.2)':
dependencies:
'@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.2.2)
@@ -17473,10 +18222,58 @@ snapshots:
- '@types/node'
- typescript
+ '@tapjs/typescript@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(typescript@5.2.2)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.2.2)
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - typescript
+
+ '@tapjs/typescript@1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(typescript@5.6.2)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.6.2)
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - typescript
+
+ '@tapjs/typescript@3.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(typescript@5.5.4)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.5.4)
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - typescript
+
+ '@tapjs/typescript@3.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(typescript@5.6.2)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - typescript
+
'@tapjs/worker@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
'@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/worker@1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/worker@4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
'@tensorflow-models/universal-sentence-encoder@1.3.3(@tensorflow/tfjs-converter@3.21.0(@tensorflow/tfjs-core@3.21.0(encoding@0.1.13)))(@tensorflow/tfjs-core@3.21.0(encoding@0.1.13))':
dependencies:
'@tensorflow/tfjs-converter': 3.21.0(@tensorflow/tfjs-core@3.21.0(encoding@0.1.13))
@@ -18380,6 +19177,10 @@ snapshots:
ansi-escapes@6.2.1: {}
+ ansi-escapes@7.0.0:
+ dependencies:
+ environment: 1.1.0
+
ansi-html-community@0.0.8: {}
ansi-regex@5.0.1: {}
@@ -18938,6 +19739,20 @@ snapshots:
bytes@3.1.2: {}
+ c8@10.1.2:
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@istanbuljs/schema': 0.1.3
+ find-up: 5.0.0
+ foreground-child: 3.3.0
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-reports: 3.1.7
+ test-exclude: 7.0.1
+ v8-to-istanbul: 9.3.0
+ yargs: 17.7.2
+ yargs-parser: 21.1.1
+
c8@7.14.0:
dependencies:
'@bcoe/v8-coverage': 0.2.3
@@ -19211,6 +20026,11 @@ snapshots:
slice-ansi: 5.0.0
string-width: 5.1.2
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
cli-width@3.0.0: {}
cli-width@4.1.0: {}
@@ -20047,6 +20867,8 @@ snapshots:
env-paths@2.2.1: {}
+ environment@1.1.0: {}
+
err-code@2.0.3: {}
error-ex@1.3.2:
@@ -22021,6 +22843,39 @@ snapshots:
- bufferutil
- utf-8-validate
+ ink@5.0.1(@types/react@18.3.9)(react@18.3.1):
+ dependencies:
+ '@alcalzone/ansi-tokenize': 0.1.3
+ ansi-escapes: 7.0.0
+ ansi-styles: 6.2.1
+ auto-bind: 5.0.1
+ chalk: 5.3.0
+ cli-boxes: 3.0.0
+ cli-cursor: 4.0.0
+ cli-truncate: 4.0.0
+ code-excerpt: 4.0.0
+ indent-string: 5.0.0
+ is-in-ci: 0.1.0
+ lodash: 4.17.21
+ patch-console: 2.0.0
+ react: 18.3.1
+ react-reconciler: 0.29.2(react@18.3.1)
+ scheduler: 0.23.2
+ signal-exit: 3.0.7
+ slice-ansi: 7.1.0
+ stack-utils: 2.0.6
+ string-width: 7.2.0
+ type-fest: 4.26.1
+ widest-line: 5.0.0
+ wrap-ansi: 9.0.0
+ ws: 8.18.0
+ yoga-wasm-web: 0.3.3
+ optionalDependencies:
+ '@types/react': 18.3.9
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
inline-style-parser@0.1.1: {}
inline-style-parser@0.2.4: {}
@@ -22161,6 +23016,10 @@ snapshots:
is-fullwidth-code-point@4.0.0: {}
+ is-fullwidth-code-point@5.0.0:
+ dependencies:
+ get-east-asian-width: 1.2.0
+
is-generator-function@1.0.10:
dependencies:
has-tostringtag: 1.0.2
@@ -22173,6 +23032,8 @@ snapshots:
is-hexadecimal@2.0.1: {}
+ is-in-ci@0.1.0: {}
+
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
@@ -24009,6 +24870,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ npm-registry-fetch@17.1.0:
+ dependencies:
+ '@npmcli/redact': 2.0.1
+ jsonparse: 1.3.1
+ make-fetch-happen: 13.0.1
+ minipass: 7.1.2
+ minipass-fetch: 3.0.5
+ minizlib: 2.1.2
+ npm-package-arg: 11.0.3
+ proc-log: 4.2.0
+ transitivePeerDependencies:
+ - supports-color
+
npm-run-path@2.0.2:
dependencies:
path-key: 2.0.1
@@ -24278,6 +25152,29 @@ snapshots:
- bluebird
- supports-color
+ pacote@18.0.6:
+ dependencies:
+ '@npmcli/git': 5.0.8
+ '@npmcli/installed-package-contents': 2.1.0
+ '@npmcli/package-json': 5.2.1
+ '@npmcli/promise-spawn': 7.0.2
+ '@npmcli/run-script': 8.1.0
+ cacache: 18.0.4
+ fs-minipass: 3.0.3
+ minipass: 7.1.2
+ npm-package-arg: 11.0.3
+ npm-packlist: 8.0.2
+ npm-pick-manifest: 9.1.0
+ npm-registry-fetch: 17.1.0
+ proc-log: 4.2.0
+ promise-retry: 2.0.1
+ sigstore: 2.3.1
+ ssri: 10.0.6
+ tar: 6.2.1
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+
pagefind@1.1.1:
optionalDependencies:
'@pagefind/darwin-arm64': 1.1.1
@@ -26464,6 +27361,11 @@ snapshots:
ansi-styles: 6.2.1
is-fullwidth-code-point: 4.0.0
+ slice-ansi@7.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+
slugify@1.6.6: {}
smart-buffer@4.2.0: {}
@@ -26893,6 +27795,11 @@ snapshots:
events-to-array: 2.0.3
tap-yaml: 2.2.2
+ tap-parser@18.0.0:
+ dependencies:
+ events-to-array: 2.0.3
+ tap-yaml: 4.0.0
+
tap-yaml@1.0.2:
dependencies:
yaml: 1.10.2
@@ -26902,6 +27809,11 @@ snapshots:
yaml: 2.5.1
yaml-types: 0.3.0(yaml@2.5.1)
+ tap-yaml@4.0.0:
+ dependencies:
+ yaml: 2.5.1
+ yaml-types: 0.4.0(yaml@2.5.1)
+
tap@18.8.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2):
dependencies:
'@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
@@ -26937,6 +27849,78 @@ snapshots:
- typescript
- utf-8-validate
+ tap@18.8.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2):
+ dependencies:
+ '@tapjs/after': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/after-each': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/asserts': 1.2.0(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/before': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before-each': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/fixture': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/intercept': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/mock': 1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/node-serialize': 1.3.4(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/run': 1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/snapshot': 1.2.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/test': 1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/typescript': 1.4.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@22.7.2)(typescript@5.6.2)
+ '@tapjs/worker': 1.1.22(@tapjs/core@1.5.4(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ resolve-import: 1.4.6
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - '@types/react'
+ - bluebird
+ - bufferutil
+ - react
+ - react-devtools-core
+ - react-dom
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ tap@21.0.1(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2):
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/after-each': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/asserts': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/before': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before-each': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/chdir': 3.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/fixture': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/intercept': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/mock': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/node-serialize': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/run': 4.0.1(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/snapshot': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/test': 4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/typescript': 3.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@20.16.9)(typescript@5.6.2)
+ '@tapjs/worker': 4.0.0(@tapjs/core@4.0.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ resolve-import: 2.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - '@types/react'
+ - bluebird
+ - bufferutil
+ - monocart-coverage-reports
+ - react
+ - react-devtools-core
+ - react-dom
+ - supports-color
+ - typescript
+ - utf-8-validate
+
tapable@1.1.3: {}
tapable@2.2.1: {}
@@ -26983,6 +27967,14 @@ snapshots:
- react
- react-dom
+ tcompare@9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ diff: 5.2.0
+ react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
terser-webpack-plugin@5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
@@ -27007,6 +27999,12 @@ snapshots:
glob: 7.2.3
minimatch: 3.1.2
+ test-exclude@7.0.1:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.4.5
+ minimatch: 9.0.5
+
text-table@0.2.0: {}
thenify-all@1.6.0:
@@ -27239,6 +28237,30 @@ snapshots:
- supports-color
- ts-node
+ tsup@7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.6.2))(typescript@5.6.2):
+ dependencies:
+ bundle-require: 4.2.1(esbuild@0.19.12)
+ cac: 6.7.14
+ chokidar: 3.6.0
+ debug: 4.3.7
+ esbuild: 0.19.12
+ execa: 5.1.1
+ globby: 11.1.0
+ joycon: 3.1.1
+ postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.2)(typescript@5.6.2))
+ resolve-from: 5.0.0
+ rollup: 4.22.4
+ source-map: 0.8.0-beta.0
+ sucrase: 3.35.0
+ tree-kill: 1.2.2
+ optionalDependencies:
+ '@swc/core': 1.7.28(@swc/helpers@0.5.5)
+ postcss: 8.4.47
+ typescript: 5.6.2
+ transitivePeerDependencies:
+ - supports-color
+ - ts-node
+
tsutils@3.21.0(typescript@5.6.2):
dependencies:
tslib: 1.14.1
@@ -27267,32 +28289,32 @@ snapshots:
transitivePeerDependencies:
- supports-color
- turbo-darwin-64@1.13.4:
+ turbo-darwin-64@2.1.3:
optional: true
- turbo-darwin-arm64@1.13.4:
+ turbo-darwin-arm64@2.1.3:
optional: true
- turbo-linux-64@1.13.4:
+ turbo-linux-64@2.1.3:
optional: true
- turbo-linux-arm64@1.13.4:
+ turbo-linux-arm64@2.1.3:
optional: true
- turbo-windows-64@1.13.4:
+ turbo-windows-64@2.1.3:
optional: true
- turbo-windows-arm64@1.13.4:
+ turbo-windows-arm64@2.1.3:
optional: true
- turbo@1.13.4:
+ turbo@2.1.3:
optionalDependencies:
- turbo-darwin-64: 1.13.4
- turbo-darwin-arm64: 1.13.4
- turbo-linux-64: 1.13.4
- turbo-linux-arm64: 1.13.4
- turbo-windows-64: 1.13.4
- turbo-windows-arm64: 1.13.4
+ turbo-darwin-64: 2.1.3
+ turbo-darwin-arm64: 2.1.3
+ turbo-linux-64: 2.1.3
+ turbo-linux-arm64: 2.1.3
+ turbo-windows-64: 2.1.3
+ turbo-windows-arm64: 2.1.3
type-check@0.4.0:
dependencies:
@@ -27373,6 +28395,8 @@ snapshots:
typescript@5.2.2: {}
+ typescript@5.5.4: {}
+
typescript@5.6.2: {}
ua-parser-js@1.0.39: {}
@@ -28266,6 +29290,10 @@ snapshots:
dependencies:
string-width: 5.1.2
+ widest-line@5.0.0:
+ dependencies:
+ string-width: 7.2.0
+
wildcard@2.0.1: {}
word-wrap@1.2.5: {}
@@ -28290,6 +29318,12 @@ snapshots:
string-width: 5.1.2
strip-ansi: 7.1.0
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+
wrappy@1.0.2: {}
write-file-atomic@3.0.3:
@@ -28346,6 +29380,10 @@ snapshots:
dependencies:
yaml: 2.5.1
+ yaml-types@0.4.0(yaml@2.5.1):
+ dependencies:
+ yaml: 2.5.1
+
yaml@1.10.2: {}
yaml@2.2.2: {}
diff --git a/turbo.json b/turbo.json
index 0d79fda20..33cc9fe89 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,6 +1,6 @@
{
"$schema": "https://turbo.build/schema.json",
- "pipeline": {
+ "tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]