cry-search 1.0.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +73 -98
- package/README.md +39 -28
- package/UNIVERSE.md +11 -18
- package/dist/common/SearchUniverse.d.ts.map +1 -1
- package/dist/common/numeric/AugmentedMetadata.d.ts +27 -92
- package/dist/common/numeric/AugmentedMetadata.d.ts.map +1 -1
- package/dist/common/numeric/createSearchArrayMetadata.d.ts +47 -7
- package/dist/common/numeric/createSearchArrayMetadata.d.ts.map +1 -1
- package/dist/common/numeric/findInLinkedArrays.d.ts +7 -4
- package/dist/common/numeric/findInLinkedArrays.d.ts.map +1 -1
- package/dist/common/numeric/scoring.d.ts +95 -0
- package/dist/common/numeric/scoring.d.ts.map +1 -0
- package/dist/common/numeric/searchAndRank.d.ts +18 -60
- package/dist/common/numeric/searchAndRank.d.ts.map +1 -1
- package/dist/common/numeric/searchInData.d.ts +17 -9
- package/dist/common/numeric/searchInData.d.ts.map +1 -1
- package/dist/common/numeric/syncSearchArrayMetadata.d.ts +7 -50
- package/dist/common/numeric/syncSearchArrayMetadata.d.ts.map +1 -1
- package/dist/common/numeric/updateSearchLinkedMetadata.d.ts +11 -110
- package/dist/common/numeric/updateSearchLinkedMetadata.d.ts.map +1 -1
- package/dist/common/numeric/updateSearchMetadata.d.ts.map +1 -1
- package/dist/index.cjs +614 -360
- package/dist/index.d.cts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +614 -360
- package/dist/types/index.d.ts +35 -50
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/matchTokenNumeric.d.ts.map +1 -1
- package/dist/utils/prepareStringForSearchNumeric.d.ts +24 -29
- package/dist/utils/prepareStringForSearchNumeric.d.ts.map +1 -1
- package/package.json +4 -14
- package/dist/common/findInArray.d.ts +0 -37
- package/dist/common/findInArray.d.ts.map +0 -1
- package/dist/common/findInArrayReturnDataAndMeta.d.ts +0 -52
- package/dist/common/findInArrayReturnDataAndMeta.d.ts.map +0 -1
- package/dist/common/findInLinkedArrays.d.ts +0 -66
- package/dist/common/findInLinkedArrays.d.ts.map +0 -1
- package/dist/common/string/createSearchArrayMetadata.d.ts +0 -117
- package/dist/common/string/createSearchArrayMetadata.d.ts.map +0 -1
- package/dist/common/string/createSearchLinkedMetadata.d.ts +0 -36
- package/dist/common/string/createSearchLinkedMetadata.d.ts.map +0 -1
- package/dist/common/string/index.d.ts +0 -10
- package/dist/common/string/index.d.ts.map +0 -1
- package/dist/common/string/updateSearchMetadata.d.ts +0 -103
- package/dist/common/string/updateSearchMetadata.d.ts.map +0 -1
- package/dist/common/syncSearchArrayMetadata.d.ts +0 -68
- package/dist/common/syncSearchArrayMetadata.d.ts.map +0 -1
- package/dist/common/updateSearchLinkedMetadata.d.ts +0 -139
- package/dist/common/updateSearchLinkedMetadata.d.ts.map +0 -1
- package/dist/string.cjs +0 -930
- package/dist/string.d.cts +0 -26
- package/dist/string.d.ts +0 -26
- package/dist/string.d.ts.map +0 -1
- package/dist/string.js +0 -898
- package/dist/utils/matchToken.d.ts +0 -65
- package/dist/utils/matchToken.d.ts.map +0 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -9,12 +9,25 @@ export type SearchToken = string;
|
|
|
9
9
|
export type SearchTokenSortedList = SearchToken[];
|
|
10
10
|
/** Numeric token ID (index into global tokens array) */
|
|
11
11
|
export type NumericToken = number;
|
|
12
|
-
/** Sorted Uint32Array of numeric token IDs for memory-efficient
|
|
12
|
+
/** Sorted Uint32Array of numeric token IDs for memory-efficient retrieval. */
|
|
13
13
|
export type NumericTokenSortedList = Uint32Array;
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Uint32Array of numeric token IDs in SOURCE order (no sort), capped at `spec.firstTokensN`.
|
|
16
|
+
* Used by positional ranking (`searchAndRank`) to score in-order matches.
|
|
17
|
+
*/
|
|
18
|
+
export type NumericTokenUnsortedList = Uint32Array;
|
|
19
|
+
/**
|
|
20
|
+
* Metadata for a collection. Holds two parallel maps:
|
|
21
|
+
* - `sorted`: per-item sorted token IDs (used for retrieval / AND-match).
|
|
22
|
+
* - `unsorted`: per-item ordered prefix tokens (used for positional scoring).
|
|
23
|
+
* Populated only for items whose spec declares `keyFields`; otherwise absent for that id.
|
|
24
|
+
*/
|
|
25
|
+
export interface NumericSearchMetadata {
|
|
26
|
+
/** Token IDs sorted ASC per item — used for retrieval. */
|
|
27
|
+
sorted: Map<Id, NumericTokenSortedList>;
|
|
28
|
+
/** First-N token IDs in SOURCE order per item — used for positional ranking. */
|
|
29
|
+
unsorted: Map<Id, NumericTokenUnsortedList>;
|
|
30
|
+
}
|
|
18
31
|
/** Map of objects by their ID for efficient lookup */
|
|
19
32
|
export type SearchableData<T extends SearchableObject> = Map<Id, T>;
|
|
20
33
|
/** Base interface for searchable objects - must have unique _id */
|
|
@@ -52,7 +65,24 @@ export interface SearchableObjectSpec<T extends SearchableObject, C = unknown> {
|
|
|
52
65
|
* Prefixes: < (start), > (end), + (startEnd), * (anywhere), ! (whole)
|
|
53
66
|
*/
|
|
54
67
|
fieldMatchModes?: Partial<Record<keyof T, MatchMode>>;
|
|
68
|
+
/**
|
|
69
|
+
* Fields whose tokens are also stored in `metadata.unsorted` in SOURCE order
|
|
70
|
+
* (no sort, no de-dup) for positional ranking. Fields are concatenated in
|
|
71
|
+
* declared order before tokenization.
|
|
72
|
+
* Example: `keyFields: ['naziv']` or `['ime', 'priimek']`.
|
|
73
|
+
* If omitted, `metadata.unsorted` has no entry for this item, and
|
|
74
|
+
* positional ranking falls back to re-tokenizing primary text at query time.
|
|
75
|
+
*/
|
|
76
|
+
keyFields?: (keyof T | string)[];
|
|
77
|
+
/**
|
|
78
|
+
* Max number of tokens stored in `metadata.unsorted` per item.
|
|
79
|
+
* Applied AFTER tokenization of concatenated `keyFields` content.
|
|
80
|
+
* @default 8
|
|
81
|
+
*/
|
|
82
|
+
firstTokensN?: number;
|
|
55
83
|
}
|
|
84
|
+
/** Default cap on `metadata.unsorted` length. */
|
|
85
|
+
export declare const DEFAULT_FIRST_TOKENS_N = 8;
|
|
56
86
|
/**
|
|
57
87
|
* Options for controlling how search matching works.
|
|
58
88
|
*
|
|
@@ -85,30 +115,6 @@ export interface SearchOpts {
|
|
|
85
115
|
}
|
|
86
116
|
/** Default search options */
|
|
87
117
|
export declare const DEFAULT_SEARCH_OPTS: Required<SearchOpts>;
|
|
88
|
-
/** Linked search metadata for searching across related arrays */
|
|
89
|
-
export interface LinkedSearchMetadata {
|
|
90
|
-
/** Metadata for primary items */
|
|
91
|
-
primaryMeta: SearchMetadata;
|
|
92
|
-
/** Metadata for linked/secondary items */
|
|
93
|
-
linkedMeta: SearchMetadata;
|
|
94
|
-
/** Index: primary._id -> linked._id[] */
|
|
95
|
-
primaryToLinked: Map<Id, Id[]>;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Extended linked search metadata that includes data references for convenient access during search.
|
|
99
|
-
*
|
|
100
|
-
* Extends {@link LinkedSearchMetadata} with direct references to the primary and linked data maps,
|
|
101
|
-
* so search functions don't need to pass them separately.
|
|
102
|
-
*
|
|
103
|
-
* @typeParam TPrimary - Type of primary items (e.g., Stranka)
|
|
104
|
-
* @typeParam TLinked - Type of linked items (e.g., Pacient)
|
|
105
|
-
*/
|
|
106
|
-
export interface SearchLinkedMetadataWithData<TPrimary extends SearchableObject, TLinked extends SearchableObject> extends LinkedSearchMetadata {
|
|
107
|
-
/** Reference to primary data map */
|
|
108
|
-
primaryData: SearchableData<TPrimary>;
|
|
109
|
-
/** Reference to linked data map */
|
|
110
|
-
linkedData: SearchableData<TLinked>;
|
|
111
|
-
}
|
|
112
118
|
/**
|
|
113
119
|
* Specification for linked search across two related arrays
|
|
114
120
|
*/
|
|
@@ -294,25 +300,4 @@ export declare function arrayToSearchableData<T extends SearchableObject>(items:
|
|
|
294
300
|
* Helper to convert SearchableData Map back to array
|
|
295
301
|
*/
|
|
296
302
|
export declare function searchableDataToArray<T extends SearchableObject>(data: SearchableData<T>): T[];
|
|
297
|
-
/**
|
|
298
|
-
* Legacy type alias for backwards compatibility.
|
|
299
|
-
* @deprecated Use SearchMetadata directly instead
|
|
300
|
-
*/
|
|
301
|
-
export type SearchArrayMetadata = {
|
|
302
|
-
items: SearchMetadata;
|
|
303
|
-
};
|
|
304
|
-
/**
|
|
305
|
-
* Legacy type alias for backwards compatibility.
|
|
306
|
-
* @deprecated Use SearchableObject directly instead
|
|
307
|
-
*/
|
|
308
|
-
export interface SearchableItem extends SearchableObject {
|
|
309
|
-
searchableText?: string;
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* Legacy type alias for backwards compatibility.
|
|
313
|
-
* @deprecated Use SearchTokenSortedList directly instead
|
|
314
|
-
*/
|
|
315
|
-
export interface SearchItemMetadata {
|
|
316
|
-
tokens: SearchTokenSortedList;
|
|
317
|
-
}
|
|
318
303
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,+CAA+C;AAC/C,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AAExB,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,2DAA2D;AAC3D,MAAM,MAAM,qBAAqB,GAAG,WAAW,EAAE,CAAC;AAElD,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchTokenNumeric.d.ts","sourceRoot":"","sources":["../../src/utils/matchTokenNumeric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"matchTokenNumeric.d.ts","sourceRoot":"","sources":["../../src/utils/matchTokenNumeric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgC9E;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAE9E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAqEjF;AAoED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAiB5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,sBAAsB,EACpC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CA4DT;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,sBAAsB,EACpC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAaT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,kBAAkB,EAAE,EACpC,YAAY,EAAE,sBAAsB,EACpC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAYT;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EAAE,EACzB,YAAY,EAAE,sBAAsB,EACpC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAGT"}
|
|
@@ -1,42 +1,37 @@
|
|
|
1
|
-
import type { NumericTokenSortedList } from '../types';
|
|
1
|
+
import type { NumericTokenSortedList, NumericTokenUnsortedList } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Result of preparing a string at build time: numeric token IDs in both forms.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 2. **Preprocessing** - Handle decimal commas, leading zeros, letter-digit boundaries
|
|
8
|
-
* 3. **Sanitation** - Lowercase, remove diacritics, keep only allowed characters
|
|
9
|
-
* 4. **Tokenization** - Split on spaces, trim, filter empty strings
|
|
10
|
-
* 5. **Numeric conversion** - Convert strings to numeric IDs via tokensMap
|
|
11
|
-
* 6. **Sorting** - Sort numerically for efficient matching
|
|
5
|
+
* - `sorted`: ASC-sorted, deduplicated — used for retrieval (AND-match, binary search).
|
|
6
|
+
* - `unsorted`: source order, not deduplicated, not capped — caller slices to `firstTokensN`.
|
|
12
7
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* const tokensMap = createTokensMap();
|
|
20
|
-
* prepareStringForSearchNumeric('Čokolada 100g', tokensMap)
|
|
21
|
-
* // Returns: Uint32Array of numeric IDs, sorted
|
|
22
|
-
* ```
|
|
8
|
+
* Note: caller is responsible for de-duplicating `sorted` if desired (current
|
|
9
|
+
* behavior keeps duplicates here and dedupes at the object level when merging
|
|
10
|
+
* tokens across multiple fields).
|
|
23
11
|
*/
|
|
24
|
-
export
|
|
12
|
+
export interface PreparedStringTokens {
|
|
13
|
+
sorted: NumericTokenSortedList;
|
|
14
|
+
unsorted: NumericTokenUnsortedList;
|
|
15
|
+
}
|
|
25
16
|
/**
|
|
26
|
-
*
|
|
17
|
+
* Tokenizes a string and returns numeric token IDs in both sorted and source-order forms.
|
|
18
|
+
*
|
|
19
|
+
* Pipeline: normalizeDates → preprocessString → sanitiseString → tokenize → numeric IDs.
|
|
20
|
+
* The `unsorted` array preserves the order tokens appear in source — required for
|
|
21
|
+
* positional scoring. The `sorted` array is the same IDs sorted ASC for retrieval.
|
|
27
22
|
*
|
|
28
|
-
*
|
|
29
|
-
* since search queries should only match existing tokens.
|
|
30
|
-
* Tokens not in the registry are returned as -1.
|
|
23
|
+
* Token registration happens via `tokensMap` (mutates global registry on miss).
|
|
31
24
|
*
|
|
32
|
-
* @param input -
|
|
33
|
-
* @
|
|
25
|
+
* @param input - Raw string to tokenize
|
|
26
|
+
* @param tokensMap - Map for fast string→ID lookup during build
|
|
27
|
+
* @returns `{ sorted, unsorted }` — both full length (no slice)
|
|
34
28
|
*
|
|
35
29
|
* @example
|
|
36
30
|
* ```typescript
|
|
37
|
-
*
|
|
38
|
-
*
|
|
31
|
+
* const tokensMap = createTokensMap();
|
|
32
|
+
* const { sorted, unsorted } = prepareStringForSearchNumeric('Janez Novak', tokensMap);
|
|
33
|
+
* // sorted is Uint32Array sorted by ID; unsorted preserves "janez", "novak" order.
|
|
39
34
|
* ```
|
|
40
35
|
*/
|
|
41
|
-
export declare function
|
|
36
|
+
export declare function prepareStringForSearchNumeric(input: string, tokensMap: Map<string, number>): PreparedStringTokens;
|
|
42
37
|
//# sourceMappingURL=prepareStringForSearchNumeric.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareStringForSearchNumeric.d.ts","sourceRoot":"","sources":["../../src/utils/prepareStringForSearchNumeric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"prepareStringForSearchNumeric.d.ts","sourceRoot":"","sources":["../../src/utils/prepareStringForSearchNumeric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAOjF;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,wBAAwB,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,oBAAoB,CAgBtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cry-search",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "A fast, memory-efficient search library for large datasets with support for tokenized matching, linked collections, and per-field match modes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -16,16 +16,6 @@
|
|
|
16
16
|
"types": "./dist/index.d.cts",
|
|
17
17
|
"default": "./dist/index.cjs"
|
|
18
18
|
}
|
|
19
|
-
},
|
|
20
|
-
"./string": {
|
|
21
|
-
"import": {
|
|
22
|
-
"types": "./dist/string.d.ts",
|
|
23
|
-
"default": "./dist/string.js"
|
|
24
|
-
},
|
|
25
|
-
"require": {
|
|
26
|
-
"types": "./dist/string.d.cts",
|
|
27
|
-
"default": "./dist/string.cjs"
|
|
28
|
-
}
|
|
29
19
|
}
|
|
30
20
|
},
|
|
31
21
|
"files": [
|
|
@@ -37,10 +27,10 @@
|
|
|
37
27
|
],
|
|
38
28
|
"scripts": {
|
|
39
29
|
"build": "bun run build:js && bun run build:types",
|
|
40
|
-
"build:esm": "bun build ./src/index.ts --outdir ./dist --target browser --format esm
|
|
41
|
-
"build:cjs": "bun build ./src/index.ts --target browser --format cjs --outfile ./dist/index.cjs
|
|
30
|
+
"build:esm": "bun build ./src/index.ts --outdir ./dist --target browser --format esm",
|
|
31
|
+
"build:cjs": "bun build ./src/index.ts --target browser --format cjs --outfile ./dist/index.cjs",
|
|
42
32
|
"build:js": "bun run build:esm && bun run build:cjs",
|
|
43
|
-
"build:types": "tsc -p tsconfig.build.json && cp ./dist/index.d.ts ./dist/index.d.cts
|
|
33
|
+
"build:types": "tsc -p tsconfig.build.json && cp ./dist/index.d.ts ./dist/index.d.cts",
|
|
44
34
|
"clean": "rm -rf dist",
|
|
45
35
|
"test": "bun test",
|
|
46
36
|
"prepublishOnly": "bun run clean && bun run build"
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { SearchMetadata, SearchableObject, SearchableData, SearchOpts } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Searches a data set using pre-computed metadata.
|
|
4
|
-
*
|
|
5
|
-
* This is the main search function for single collections. It tokenizes the query,
|
|
6
|
-
* matches all tokens against each item's metadata, and returns matching items.
|
|
7
|
-
*
|
|
8
|
-
* Use this function when you only need the matching items. If you also need
|
|
9
|
-
* the query tokens or item metadata, use {@link findInArrayReturnDataAndMeta} instead.
|
|
10
|
-
*
|
|
11
|
-
* @typeParam T - Type of items being searched
|
|
12
|
-
*
|
|
13
|
-
* @param query - The search query string (will be tokenized)
|
|
14
|
-
* @param data - Map of items by ID (SearchableData)
|
|
15
|
-
* @param metadata - Pre-computed search metadata (SearchMetadata)
|
|
16
|
-
* @param limit - Maximum number of results to return (default: 10)
|
|
17
|
-
* @param opts - Optional search options for controlling match behavior
|
|
18
|
-
* @returns Array of matching items (up to limit)
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* const products = arrayToSearchableData([
|
|
23
|
-
* { _id: '1', name: 'Čokolada Milka', category: 'sladkarije' },
|
|
24
|
-
* { _id: '2', name: 'Mleko Alpsko', category: 'mlečni izdelki' },
|
|
25
|
-
* ]);
|
|
26
|
-
*
|
|
27
|
-
* const metadata = createSearchArrayMetadata(products);
|
|
28
|
-
*
|
|
29
|
-
* findInArray('cokolada', products, metadata, 10);
|
|
30
|
-
* // Returns: [{ _id: '1', name: 'Čokolada Milka', ... }]
|
|
31
|
-
*
|
|
32
|
-
* findInArray('mleko', products, metadata, 10, { matchWords: 'whole' });
|
|
33
|
-
* // Returns: [{ _id: '2', name: 'Mleko Alpsko', ... }]
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export declare function findInArray<T extends SearchableObject>(query: string, data: SearchableData<T>, metadata: SearchMetadata, limit?: number, opts?: SearchOpts): T[];
|
|
37
|
-
//# sourceMappingURL=findInArray.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"findInArray.d.ts","sourceRoot":"","sources":["../../src/common/findInArray.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,gBAAgB,EACpD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,cAAc,EACxB,KAAK,GAAE,MAAW,EAClB,IAAI,CAAC,EAAE,UAAU,GAChB,CAAC,EAAE,CAGL"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { Id, SearchMetadata, SearchableObject, SearchableData, SearchOpts, SearchResultWithMeta } from '../types';
|
|
2
|
-
export type { SearchResultWithMeta } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Searches a data set using pre-computed metadata and returns items with their tokens.
|
|
5
|
-
*
|
|
6
|
-
* This function is the core search implementation. It tokenizes the query,
|
|
7
|
-
* iterates through the metadata, and returns items where all query tokens
|
|
8
|
-
* match at least one item token (according to match mode rules).
|
|
9
|
-
*
|
|
10
|
-
* Use this function when you need access to the query tokens or item tokens
|
|
11
|
-
* (for debugging, highlighting, etc.). For simpler use cases, use {@link findInArray}.
|
|
12
|
-
*
|
|
13
|
-
* @typeParam T - Type of items being searched
|
|
14
|
-
*
|
|
15
|
-
* @param query - The search query string (will be tokenized)
|
|
16
|
-
* @param data - Map of items by ID (SearchableData)
|
|
17
|
-
* @param metadata - Pre-computed search metadata (SearchMetadata)
|
|
18
|
-
* @param limit - Maximum number of results to return (default: 10)
|
|
19
|
-
* @param opts - Optional search options for controlling match behavior
|
|
20
|
-
* @returns Search results including query tokens and matching items with their tokens
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* const result = findInArrayReturnDataAndMeta('john doe', data, metadata, 10);
|
|
25
|
-
*
|
|
26
|
-
* console.log(result.queryTokens); // ['doe', 'john']
|
|
27
|
-
* console.log(result.results[0].item); // { _id: '1', name: 'John Doe', ... }
|
|
28
|
-
* console.log(result.results[0].tokens); // ['doe', 'john', ...]
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
export declare function findInArrayReturnDataAndMeta<T extends SearchableObject>(query: string, data: SearchableData<T>, metadata: SearchMetadata, limit?: number, opts?: SearchOpts): SearchResultWithMeta<T>;
|
|
32
|
-
/**
|
|
33
|
-
* Searches metadata and returns just the matching item IDs.
|
|
34
|
-
*
|
|
35
|
-
* This is a lightweight search function that doesn't fetch the full objects,
|
|
36
|
-
* only their IDs. Useful when you need to know what matches without loading
|
|
37
|
-
* all the data, or when you want to fetch items from a different source.
|
|
38
|
-
*
|
|
39
|
-
* @param query - The search query string (will be tokenized)
|
|
40
|
-
* @param metadata - Pre-computed search metadata (SearchMetadata)
|
|
41
|
-
* @param limit - Maximum number of results to return (default: 10)
|
|
42
|
-
* @param opts - Optional search options for controlling match behavior
|
|
43
|
-
* @returns Array of matching item IDs (up to limit)
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* ```typescript
|
|
47
|
-
* const ids = findInArrayReturnIds('john', metadata, 10);
|
|
48
|
-
* // Returns: ['id1', 'id2', ...]
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
export declare function findInArrayReturnIds(query: string, metadata: SearchMetadata, limit?: number, opts?: SearchOpts): Id[];
|
|
52
|
-
//# sourceMappingURL=findInArrayReturnDataAndMeta.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"findInArrayReturnDataAndMeta.d.ts","sourceRoot":"","sources":["../../src/common/findInArrayReturnDataAndMeta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EACF,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAKlB,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,gBAAgB,EACrE,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,cAAc,EACxB,KAAK,GAAE,MAAW,EAClB,IAAI,CAAC,EAAE,UAAU,GAChB,oBAAoB,CAAC,CAAC,CAAC,CAkCzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,KAAK,GAAE,MAAW,EAClB,IAAI,CAAC,EAAE,UAAU,GAChB,EAAE,EAAE,CAoBN"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import type { SearchableObject, SearchOpts, LinkedSearchResult, LinkedSearchResultWithMeta, SearchLinkedMetadataWithData } from '../types';
|
|
2
|
-
export type { LinkedSearchResult, LinkedSearchResultWithMeta } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Searches across linked data sets, matching against primary + all its linked items combined.
|
|
5
|
-
*
|
|
6
|
-
* For each primary item, collects all tokens from the primary and all its linked items,
|
|
7
|
-
* then matches query tokens against this combined pool. Returns primary items with
|
|
8
|
-
* only the linked items that contributed to the match.
|
|
9
|
-
*
|
|
10
|
-
* **Key behaviors:**
|
|
11
|
-
* - Tokens that match in the primary are excluded from linked matching (prevents
|
|
12
|
-
* foreign key redundancy)
|
|
13
|
-
* - Only linked items that match ALL remaining tokens are included in results
|
|
14
|
-
* - `matchedIn` indicates where the match was found: 'primary', 'linked', or 'both'
|
|
15
|
-
*
|
|
16
|
-
* @typeParam TPrimary - Type of primary items (e.g., Stranka)
|
|
17
|
-
* @typeParam TLinked - Type of linked items (e.g., Pacient)
|
|
18
|
-
*
|
|
19
|
-
* @param query - The search query string (will be tokenized)
|
|
20
|
-
* @param linked - Linked metadata from {@link createSearchLinkedMetadata}
|
|
21
|
-
* @param limit - Maximum number of results to return (default: 10)
|
|
22
|
-
* @param opts - Optional search options for controlling match behavior
|
|
23
|
-
* @returns Search results with query tokens, matching items, and hasNegation flag
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const linkedMeta = createSearchLinkedMetadata(
|
|
28
|
-
* strankeData, strankeMeta,
|
|
29
|
-
* pacientiData, pacientiMeta,
|
|
30
|
-
* (p) => p.stranka_id
|
|
31
|
-
* );
|
|
32
|
-
*
|
|
33
|
-
* // Search "krajnik angie" matches stranka "Krajnik" with pacient "Angie"
|
|
34
|
-
* const result = findInLinkedArrays('krajnik angie', linkedMeta, 10);
|
|
35
|
-
*
|
|
36
|
-
* console.log(result.results[0]);
|
|
37
|
-
* // {
|
|
38
|
-
* // primary: { _id: 's1', ime: 'Janez', priimek: 'Krajnik' },
|
|
39
|
-
* // linked: [{ _id: 'p1', ime: 'Angie', pasma: 'labrador' }],
|
|
40
|
-
* // matchedIn: 'both'
|
|
41
|
-
* // }
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare function findInLinkedArrays<TPrimary extends SearchableObject, TLinked extends SearchableObject>(query: string, linked: SearchLinkedMetadataWithData<TPrimary, TLinked>, limit?: number, opts?: SearchOpts): LinkedSearchResultWithMeta<TPrimary, TLinked>;
|
|
45
|
-
/**
|
|
46
|
-
* Simplified version of {@link findInLinkedArrays} that returns just the results.
|
|
47
|
-
*
|
|
48
|
-
* Use this when you don't need the query tokens metadata.
|
|
49
|
-
*
|
|
50
|
-
* @typeParam TPrimary - Type of primary items (e.g., Stranka)
|
|
51
|
-
* @typeParam TLinked - Type of linked items (e.g., Pacient)
|
|
52
|
-
*
|
|
53
|
-
* @param query - The search query string (will be tokenized)
|
|
54
|
-
* @param linked - Linked metadata from {@link createSearchLinkedMetadata}
|
|
55
|
-
* @param limit - Maximum number of results to return (default: 10)
|
|
56
|
-
* @param opts - Optional search options for controlling match behavior
|
|
57
|
-
* @returns Array of matching results (without query tokens metadata)
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```typescript
|
|
61
|
-
* const results = findInLinkedArraysSimple('krajnik', linkedMeta, 10);
|
|
62
|
-
* // Returns: [{ primary: Stranka, linked: [...], matchedIn: 'primary' }, ...]
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export declare function findInLinkedArraysSimple<TPrimary extends SearchableObject, TLinked extends SearchableObject>(query: string, linked: SearchLinkedMetadataWithData<TPrimary, TLinked>, limit?: number, opts?: SearchOpts): LinkedSearchResult<TPrimary, TLinked>[];
|
|
66
|
-
//# sourceMappingURL=findInLinkedArrays.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"findInLinkedArrays.d.ts","sourceRoot":"","sources":["../../src/common/findInLinkedArrays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAKlB,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,SAAS,gBAAgB,EACjC,OAAO,SAAS,gBAAgB,EAEhC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,EACvD,KAAK,GAAE,MAAW,EAClB,IAAI,CAAC,EAAE,UAAU,GAChB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAgG/C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,SAAS,gBAAgB,EACjC,OAAO,SAAS,gBAAgB,EAEhC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,EACvD,KAAK,GAAE,MAAW,EAClB,IAAI,CAAC,EAAE,UAAU,GAChB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAEzC"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import type { MatchMode, SearchMetadata, SearchableObject, SearchableData, SearchableObjectSpec, SearchTokenSortedList, SearchArrayMetadata } from '../../types';
|
|
2
|
-
/**
|
|
3
|
-
* Prefix characters for per-field match modes.
|
|
4
|
-
* Tokens with these prefixes use the specified mode instead of global SearchOpts.
|
|
5
|
-
*/
|
|
6
|
-
export declare const MATCH_MODE_PREFIXES: Record<MatchMode, string>;
|
|
7
|
-
/**
|
|
8
|
-
* Reverse mapping from prefix to match mode.
|
|
9
|
-
*/
|
|
10
|
-
export declare const PREFIX_TO_MATCH_MODE: Record<string, MatchMode>;
|
|
11
|
-
/**
|
|
12
|
-
* Checks if an object is deleted or blocked and should be excluded from search.
|
|
13
|
-
*
|
|
14
|
-
* Objects with `_deleted` or `_blocked` fields set are excluded from search results.
|
|
15
|
-
*
|
|
16
|
-
* @param obj - The searchable object to check
|
|
17
|
-
* @returns True if the object has _deleted or _blocked set
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* isDeletedOrBlocked({ _id: '1', name: 'Test' }) // false
|
|
22
|
-
* isDeletedOrBlocked({ _id: '1', name: 'Test', _deleted: new Date() }) // true
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function isDeletedOrBlocked(obj: SearchableObject): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Default function to extract searchable string from an object.
|
|
28
|
-
*
|
|
29
|
-
* Concatenates all string/number values from specified fields (or all fields if not specified).
|
|
30
|
-
* System fields (_id, _deleted, _blocked) are excluded by default.
|
|
31
|
-
* Supports dot notation paths for nested fields (e.g., 'customer.firstName').
|
|
32
|
-
* Recursively extracts values from nested objects and arrays.
|
|
33
|
-
*
|
|
34
|
-
* @param obj - The searchable object to extract text from
|
|
35
|
-
* @param spec - Optional specification for field extraction
|
|
36
|
-
* @returns undefined if object is _deleted or _blocked, otherwise the searchable string
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const obj = { _id: '1', name: 'John', age: 30 };
|
|
41
|
-
* extractSearchableStringDefault(obj)
|
|
42
|
-
* // Returns: 'John 30'
|
|
43
|
-
*
|
|
44
|
-
* const obj2 = { _id: '1', customer: { firstName: 'John' } };
|
|
45
|
-
* extractSearchableStringDefault(obj2, { searchInFields: ['customer.firstName'] })
|
|
46
|
-
* // Returns: 'John'
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare function extractSearchableStringDefault<T extends SearchableObject, C = unknown>(obj: T, spec?: SearchableObjectSpec<T, C>): string | undefined;
|
|
50
|
-
/**
|
|
51
|
-
* Prepares an object for search by extracting searchable text and tokenizing it.
|
|
52
|
-
*
|
|
53
|
-
* If `fieldMatchModes` is specified in the spec, tokens from those fields will have
|
|
54
|
-
* match mode prefixes (e.g., `!` for whole, `+` for startEnd).
|
|
55
|
-
*
|
|
56
|
-
* Supports dot notation in `searchInFields` for targeting specific nested fields.
|
|
57
|
-
* Recursively extracts values from nested objects and arrays.
|
|
58
|
-
*
|
|
59
|
-
* @param obj - The searchable object to prepare
|
|
60
|
-
* @param spec - Optional specification for extraction and match modes
|
|
61
|
-
* @returns undefined if object is _deleted or _blocked, otherwise sorted token list
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const obj = { _id: '1', name: 'John Doe', barcode: '123456' };
|
|
66
|
-
* prepareObjectForSearch(obj, {
|
|
67
|
-
* searchInFields: ['name', 'barcode'],
|
|
68
|
-
* fieldMatchModes: { barcode: 'whole' }
|
|
69
|
-
* })
|
|
70
|
-
* // Returns: ['!123456', 'doe', 'john']
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export declare function prepareObjectForSearch<T extends SearchableObject, C = unknown>(obj: T, spec?: SearchableObjectSpec<T, C>): SearchTokenSortedList | undefined;
|
|
74
|
-
/**
|
|
75
|
-
* Creates search metadata for a collection of items.
|
|
76
|
-
*
|
|
77
|
-
* Pre-processes all searchable text into sorted tokens for fast searching.
|
|
78
|
-
* Items with `_deleted` or `_blocked` fields are automatically excluded.
|
|
79
|
-
*
|
|
80
|
-
* @param data - Map of items by ID (SearchableData)
|
|
81
|
-
* @param spec - Optional specification for how to extract searchable text
|
|
82
|
-
* @returns SearchMetadata map (Id → sorted tokens)
|
|
83
|
-
*
|
|
84
|
-
* @example
|
|
85
|
-
* ```typescript
|
|
86
|
-
* const items = arrayToSearchableData([
|
|
87
|
-
* { _id: '1', name: 'John Doe', barcode: '123456' },
|
|
88
|
-
* { _id: '2', name: 'Jane Smith', barcode: '789012' },
|
|
89
|
-
* ]);
|
|
90
|
-
*
|
|
91
|
-
* const metadata = createSearchArrayMetadata(items, {
|
|
92
|
-
* searchInFields: ['name', 'barcode'],
|
|
93
|
-
* fieldMatchModes: { barcode: 'startEnd' },
|
|
94
|
-
* });
|
|
95
|
-
*
|
|
96
|
-
* // metadata.get('1') → ['+123456', 'doe', 'john']
|
|
97
|
-
* ```
|
|
98
|
-
*/
|
|
99
|
-
export declare function createSearchArrayMetadata<T extends SearchableObject, C = unknown>(data: SearchableData<T>, spec?: SearchableObjectSpec<T, C>): SearchMetadata;
|
|
100
|
-
export type { SearchMetadata, SearchableObject, SearchableData, SearchableObjectSpec, SearchArrayMetadata, SearchableItem, SearchItemMetadata, } from '../../types';
|
|
101
|
-
/**
|
|
102
|
-
* Helper to wrap new SearchMetadata in legacy SearchArrayMetadata format.
|
|
103
|
-
*
|
|
104
|
-
* @param metadata - The SearchMetadata to wrap
|
|
105
|
-
* @returns Legacy SearchArrayMetadata object
|
|
106
|
-
* @deprecated Use SearchMetadata directly instead
|
|
107
|
-
*/
|
|
108
|
-
export declare function wrapMetadataLegacy(metadata: SearchMetadata): SearchArrayMetadata;
|
|
109
|
-
/**
|
|
110
|
-
* Helper to unwrap legacy SearchArrayMetadata to new SearchMetadata format.
|
|
111
|
-
*
|
|
112
|
-
* @param legacy - The legacy SearchArrayMetadata to unwrap
|
|
113
|
-
* @returns The SearchMetadata map
|
|
114
|
-
* @deprecated Use SearchMetadata directly instead
|
|
115
|
-
*/
|
|
116
|
-
export declare function unwrapMetadataLegacy(legacy: SearchArrayMetadata): SearchMetadata;
|
|
117
|
-
//# sourceMappingURL=createSearchArrayMetadata.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createSearchArrayMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/string/createSearchArrayMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAGrB;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAS1D,CAAC;AAmHF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACpF,GAAG,EAAE,CAAC,EACN,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC,MAAM,GAAG,SAAS,CA8BpB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EAC5E,GAAG,EAAE,CAAC,EACN,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC,qBAAqB,GAAG,SAAS,CAkBnC;AAgFD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EAC/E,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC,cAAc,CAYhB;AAGD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,mBAAmB,CAEhF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAEhF"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { Id, SearchMetadata, SearchableObject, SearchableData, SearchLinkedMetadataWithData } from '../../types';
|
|
2
|
-
export type { SearchLinkedMetadataWithData } from '../../types';
|
|
3
|
-
/**
|
|
4
|
-
* Creates linked metadata for searching across two related data sets.
|
|
5
|
-
*
|
|
6
|
-
* This function builds a reverse index from primary items to their linked items,
|
|
7
|
-
* enabling efficient combined searches (e.g., searching for "Krajnik Rex" finds
|
|
8
|
-
* the customer "Krajnik" with pet "Rex").
|
|
9
|
-
*
|
|
10
|
-
* The linked items are associated with primary items via a foreign key (e.g., `stranka_id`).
|
|
11
|
-
* No data is duplicated - the function stores references and indexes only.
|
|
12
|
-
*
|
|
13
|
-
* @typeParam TPrimary - Type of primary items (e.g., Stranka)
|
|
14
|
-
* @typeParam TLinked - Type of linked items (e.g., Pacient)
|
|
15
|
-
*
|
|
16
|
-
* @param primaryData - Primary data map (e.g., stranke)
|
|
17
|
-
* @param primaryMetadata - Pre-computed metadata for primary items
|
|
18
|
-
* @param linkedData - Linked/secondary data map (e.g., pacienti)
|
|
19
|
-
* @param linkedMetadata - Pre-computed metadata for linked items
|
|
20
|
-
* @param foreignKeyGetter - Function to extract the primary ID from a linked item
|
|
21
|
-
* @returns Linked metadata for combined searching
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const linkedMeta = createSearchLinkedMetadata(
|
|
26
|
-
* strankeData, strankeMeta,
|
|
27
|
-
* pacientiData, pacientiMeta,
|
|
28
|
-
* (pacient) => pacient.stranka_id
|
|
29
|
-
* );
|
|
30
|
-
*
|
|
31
|
-
* // Now use findInLinkedArrays to search across both collections
|
|
32
|
-
* const results = findInLinkedArrays('krajnik rex', linkedMeta, 10);
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export declare function createSearchLinkedMetadata<TPrimary extends SearchableObject, TLinked extends SearchableObject>(primaryData: SearchableData<TPrimary>, primaryMetadata: SearchMetadata, linkedData: SearchableData<TLinked>, linkedMetadata: SearchMetadata, foreignKeyGetter: (linked: TLinked) => Id | undefined): SearchLinkedMetadataWithData<TPrimary, TLinked>;
|
|
36
|
-
//# sourceMappingURL=createSearchLinkedMetadata.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createSearchLinkedMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/string/createSearchLinkedMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EACF,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,SAAS,gBAAgB,EACjC,OAAO,SAAS,gBAAgB,EAEhC,WAAW,EAAE,cAAc,CAAC,QAAQ,CAAC,EACrC,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,EACnC,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,GAAG,SAAS,GACpD,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAoBjD"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* String token implementation - original string-based search
|
|
3
|
-
*/
|
|
4
|
-
export { createSearchArrayMetadata, prepareObjectForSearch, extractSearchableStringDefault, isDeletedOrBlocked, MATCH_MODE_PREFIXES, PREFIX_TO_MATCH_MODE, wrapMetadataLegacy, unwrapMetadataLegacy, } from './createSearchArrayMetadata';
|
|
5
|
-
export { createSearchLinkedMetadata, } from './createSearchLinkedMetadata';
|
|
6
|
-
export { updateSearchMetadata, updateSearchMetadataBatch, removeFromSearchMetadata, removeFromSearchMetadataBatch, } from './updateSearchMetadata';
|
|
7
|
-
export type { SearchMetadata, SearchableObject, SearchableData, SearchableObjectSpec, SearchArrayMetadata, SearchableItem, SearchItemMetadata, } from './createSearchArrayMetadata';
|
|
8
|
-
export type { SearchLinkedMetadataWithData } from './createSearchLinkedMetadata';
|
|
9
|
-
export type { UpdateSearchMetadataBatchItem } from './updateSearchMetadata';
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/string/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,YAAY,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC"}
|