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.
Files changed (57) hide show
  1. package/CLAUDE.md +73 -98
  2. package/README.md +39 -28
  3. package/UNIVERSE.md +11 -18
  4. package/dist/common/SearchUniverse.d.ts.map +1 -1
  5. package/dist/common/numeric/AugmentedMetadata.d.ts +27 -92
  6. package/dist/common/numeric/AugmentedMetadata.d.ts.map +1 -1
  7. package/dist/common/numeric/createSearchArrayMetadata.d.ts +47 -7
  8. package/dist/common/numeric/createSearchArrayMetadata.d.ts.map +1 -1
  9. package/dist/common/numeric/findInLinkedArrays.d.ts +7 -4
  10. package/dist/common/numeric/findInLinkedArrays.d.ts.map +1 -1
  11. package/dist/common/numeric/scoring.d.ts +95 -0
  12. package/dist/common/numeric/scoring.d.ts.map +1 -0
  13. package/dist/common/numeric/searchAndRank.d.ts +18 -60
  14. package/dist/common/numeric/searchAndRank.d.ts.map +1 -1
  15. package/dist/common/numeric/searchInData.d.ts +17 -9
  16. package/dist/common/numeric/searchInData.d.ts.map +1 -1
  17. package/dist/common/numeric/syncSearchArrayMetadata.d.ts +7 -50
  18. package/dist/common/numeric/syncSearchArrayMetadata.d.ts.map +1 -1
  19. package/dist/common/numeric/updateSearchLinkedMetadata.d.ts +11 -110
  20. package/dist/common/numeric/updateSearchLinkedMetadata.d.ts.map +1 -1
  21. package/dist/common/numeric/updateSearchMetadata.d.ts.map +1 -1
  22. package/dist/index.cjs +614 -360
  23. package/dist/index.d.cts +3 -4
  24. package/dist/index.d.ts +3 -4
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +614 -360
  27. package/dist/types/index.d.ts +35 -50
  28. package/dist/types/index.d.ts.map +1 -1
  29. package/dist/utils/matchTokenNumeric.d.ts.map +1 -1
  30. package/dist/utils/prepareStringForSearchNumeric.d.ts +24 -29
  31. package/dist/utils/prepareStringForSearchNumeric.d.ts.map +1 -1
  32. package/package.json +4 -14
  33. package/dist/common/findInArray.d.ts +0 -37
  34. package/dist/common/findInArray.d.ts.map +0 -1
  35. package/dist/common/findInArrayReturnDataAndMeta.d.ts +0 -52
  36. package/dist/common/findInArrayReturnDataAndMeta.d.ts.map +0 -1
  37. package/dist/common/findInLinkedArrays.d.ts +0 -66
  38. package/dist/common/findInLinkedArrays.d.ts.map +0 -1
  39. package/dist/common/string/createSearchArrayMetadata.d.ts +0 -117
  40. package/dist/common/string/createSearchArrayMetadata.d.ts.map +0 -1
  41. package/dist/common/string/createSearchLinkedMetadata.d.ts +0 -36
  42. package/dist/common/string/createSearchLinkedMetadata.d.ts.map +0 -1
  43. package/dist/common/string/index.d.ts +0 -10
  44. package/dist/common/string/index.d.ts.map +0 -1
  45. package/dist/common/string/updateSearchMetadata.d.ts +0 -103
  46. package/dist/common/string/updateSearchMetadata.d.ts.map +0 -1
  47. package/dist/common/syncSearchArrayMetadata.d.ts +0 -68
  48. package/dist/common/syncSearchArrayMetadata.d.ts.map +0 -1
  49. package/dist/common/updateSearchLinkedMetadata.d.ts +0 -139
  50. package/dist/common/updateSearchLinkedMetadata.d.ts.map +0 -1
  51. package/dist/string.cjs +0 -930
  52. package/dist/string.d.cts +0 -26
  53. package/dist/string.d.ts +0 -26
  54. package/dist/string.d.ts.map +0 -1
  55. package/dist/string.js +0 -898
  56. package/dist/utils/matchToken.d.ts +0 -65
  57. package/dist/utils/matchToken.d.ts.map +0 -1
@@ -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 storage */
12
+ /** Sorted Uint32Array of numeric token IDs for memory-efficient retrieval. */
13
13
  export type NumericTokenSortedList = Uint32Array;
14
- /** Metadata mapping object IDs to their sorted token lists (string-based) */
15
- export type SearchMetadata = Map<Id, SearchTokenSortedList>;
16
- /** Metadata mapping object IDs to their sorted numeric token lists */
17
- export type NumericSearchMetadata = Map<Id, NumericTokenSortedList>;
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":"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"}
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;AAiC9E;;;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
+ {"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
- * Prepares a string for search, returning numeric token IDs.
3
+ * Result of preparing a string at build time: numeric token IDs in both forms.
4
4
  *
5
- * Processing pipeline:
6
- * 1. **Date normalization** - Convert date patterns to YYYYMMDD/YYYYMM format
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
- * @param input - The raw input string to prepare for search
14
- * @param tokensMap - Map for string->number conversion (required for metadata creation)
15
- * @returns Sorted Uint32Array of numeric token IDs
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 declare function prepareStringForSearchNumeric(input: string, tokensMap: Map<string, number>): NumericTokenSortedList;
12
+ export interface PreparedStringTokens {
13
+ sorted: NumericTokenSortedList;
14
+ unsorted: NumericTokenUnsortedList;
15
+ }
25
16
  /**
26
- * Prepares a search query string, returning numeric token IDs.
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
- * Unlike prepareStringForSearchNumeric, this uses findTokenId for lookups
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 - The raw search query string
33
- * @returns Sorted array of numeric token IDs (-1 for unknown tokens)
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
- * prepareQueryForSearchNumeric('čokolada 100g')
38
- * // Returns: sorted number[] of IDs (-1 for tokens not in registry)
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 prepareQueryForSearchNumeric(input: string): number[];
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;AAOvD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,sBAAsB,CAgBxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBpE"}
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": "1.0.7",
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 && bun build ./src/string.ts --outdir ./dist --target browser --format esm",
41
- "build:cjs": "bun build ./src/index.ts --target browser --format cjs --outfile ./dist/index.cjs && bun build ./src/string.ts --target browser --format cjs --outfile ./dist/string.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 && cp ./dist/string.d.ts ./dist/string.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"}