cry-search 1.0.0 → 1.0.3

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 (37) hide show
  1. package/CLAUDE.md +144 -13
  2. package/README.md +111 -5
  3. package/dist/common/SearchUniverse.d.ts.map +1 -1
  4. package/dist/common/findInLinkedArrays.d.ts +1 -1
  5. package/dist/common/findInLinkedArrays.d.ts.map +1 -1
  6. package/dist/common/numeric/AugmentedMetadata.d.ts +111 -0
  7. package/dist/common/numeric/AugmentedMetadata.d.ts.map +1 -0
  8. package/dist/common/numeric/findInLinkedArrays.d.ts +1 -1
  9. package/dist/common/numeric/index.d.ts +3 -0
  10. package/dist/common/numeric/index.d.ts.map +1 -1
  11. package/dist/common/numeric/searchInData.d.ts.map +1 -1
  12. package/dist/common/numeric/syncSearchArrayMetadata.d.ts +64 -0
  13. package/dist/common/numeric/syncSearchArrayMetadata.d.ts.map +1 -0
  14. package/dist/common/numeric/updateSearchLinkedMetadata.d.ts +130 -0
  15. package/dist/common/numeric/updateSearchLinkedMetadata.d.ts.map +1 -0
  16. package/dist/common/syncSearchArrayMetadata.d.ts +12 -8
  17. package/dist/common/syncSearchArrayMetadata.d.ts.map +1 -1
  18. package/dist/common/updateSearchLinkedMetadata.d.ts +26 -16
  19. package/dist/common/updateSearchLinkedMetadata.d.ts.map +1 -1
  20. package/dist/index.cjs +265 -490
  21. package/dist/index.d.cts +3 -9
  22. package/dist/index.d.ts +3 -9
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +265 -490
  25. package/dist/string.cjs +922 -0
  26. package/dist/string.d.cts +26 -0
  27. package/dist/string.d.ts +26 -0
  28. package/dist/string.d.ts.map +1 -0
  29. package/dist/string.js +890 -0
  30. package/dist/types/index.d.ts +21 -3
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/utils/matchTokenNumeric.d.ts +17 -2
  33. package/dist/utils/matchTokenNumeric.d.ts.map +1 -1
  34. package/dist/utils/sanitiseString.d.ts +7 -3
  35. package/dist/utils/sanitiseString.d.ts.map +1 -1
  36. package/dist/utils/tokenize.d.ts.map +1 -1
  37. package/package.json +14 -4
@@ -54,7 +54,11 @@ export interface SearchableObjectSpec<T extends SearchableObject, C = unknown> {
54
54
  fieldMatchModes?: Partial<Record<keyof T, MatchMode>>;
55
55
  }
56
56
  /**
57
- * Options for controlling how search matching works
57
+ * Options for controlling how search matching works.
58
+ *
59
+ * **Important:** Match mode for numbers is determined by the TARGET token's length,
60
+ * not the search query's length. This allows short codes (e.g., "9001") to require
61
+ * exact match while long barcodes (e.g., "3838989760731") allow prefix/suffix matching.
58
62
  */
59
63
  export interface SearchOpts {
60
64
  /**
@@ -63,10 +67,21 @@ export interface SearchOpts {
63
67
  */
64
68
  matchWords?: MatchMode;
65
69
  /**
66
- * How to match numbers (numeric tokens)
70
+ * How to match long numbers (more digits than matchNumbersThreshold)
67
71
  * @default 'startEnd'
68
72
  */
69
73
  matchNumbers?: MatchMode;
74
+ /**
75
+ * How to match short numbers (digits <= matchNumbersThreshold)
76
+ * @default 'whole'
77
+ */
78
+ matchNumbersShort?: MatchMode;
79
+ /**
80
+ * Threshold for short vs long number matching (count of digits, excluding . and -)
81
+ * Numbers with <= this many digits use matchNumbersShort, otherwise matchNumbers
82
+ * @default 6
83
+ */
84
+ matchNumbersThreshold?: number;
70
85
  }
71
86
  /** Default search options */
72
87
  export declare const DEFAULT_SEARCH_OPTS: Required<SearchOpts>;
@@ -125,7 +140,8 @@ export interface LinkedSearchResult<TPrimary, TLinked> {
125
140
  /**
126
141
  * Result of a linked search with query metadata.
127
142
  *
128
- * Includes the tokenized query for debugging/highlighting purposes.
143
+ * Includes the tokenized query for debugging/highlighting purposes,
144
+ * and a flag indicating whether the query contained negation tokens.
129
145
  *
130
146
  * @typeParam TPrimary - Type of primary items (e.g., Stranka)
131
147
  * @typeParam TLinked - Type of linked items (e.g., Pacient)
@@ -135,6 +151,8 @@ export interface LinkedSearchResultWithMeta<TPrimary, TLinked> {
135
151
  queryTokens: SearchTokenSortedList;
136
152
  /** Array of matching results */
137
153
  results: LinkedSearchResult<TPrimary, TLinked>[];
154
+ /** Whether the query contains negated tokens (--word, -word, ~word) */
155
+ hasNegation: boolean;
138
156
  }
139
157
  /**
140
158
  * Result of a search operation with metadata included.
@@ -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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"}
@@ -12,6 +12,14 @@ export interface PreparedQueryToken {
12
12
  /** If true, this token must NOT appear in the target (negation with -- or ~ prefix) */
13
13
  negated?: boolean;
14
14
  }
15
+ /**
16
+ * Checks if any prepared tokens have negation.
17
+ * Use this to determine if negation filtering should be applied.
18
+ *
19
+ * @param preparedTokens - Array of prepared tokens
20
+ * @returns True if any token is negated
21
+ */
22
+ export declare function hasNegatedTokens(preparedTokens: PreparedQueryToken[]): boolean;
15
23
  /**
16
24
  * Prepares query tokens by pre-computing their IDs.
17
25
  * Call this ONCE at the start of a search to avoid repeated findTokenId calls.
@@ -23,7 +31,9 @@ export interface PreparedQueryToken {
23
31
  * - `+word` = startEnd (prefix or suffix)
24
32
  * - `*word` or `?word` = anywhere (substring match)
25
33
  * - `word..` = start (prefix match, suffix notation)
26
- * - `--word` or `~word` = negation (token must NOT appear)
34
+ * - `-word` or `~word` = negation (token must NOT appear, only if followed by letter)
35
+ *
36
+ * Bare prefix tokens (e.g., just `-` or `~` without a word) are filtered out.
27
37
  *
28
38
  * @param queryTokenStrs - Array of query token strings
29
39
  * @returns Array of prepared tokens with pre-computed IDs
@@ -41,6 +51,11 @@ export declare function binarySearchUint32(arr: Uint32Array, target: number): bo
41
51
  * Checks if a prepared search token matches any token in a sorted numeric list.
42
52
  * Uses pre-computed token ID for efficiency.
43
53
  *
54
+ * For negated tokens with prefix modes (start/startEnd), also checks if the search
55
+ * token starts with the target token (reverse check). This handles cases where
56
+ * stored tokens are shortened versions (e.g., "izdelek" → "izd"), so searching
57
+ * "--izde" correctly matches and excludes items with "izd".
58
+ *
44
59
  * @param preparedToken - The prepared token with pre-computed ID
45
60
  * @param targetTokens - Sorted Uint32Array of target token IDs
46
61
  * @param opts - Optional search options for match mode
@@ -59,7 +74,7 @@ export declare function matchPreparedTokenInSortedList(preparedToken: PreparedQu
59
74
  * - `+word` = startEnd
60
75
  * - `*word` or `?word` = anywhere
61
76
  * - `word..` = start
62
- * - `--word` or `~word` = negation (returns true if NOT found)
77
+ * - `-word` or `~word` = negation (returns true if NOT found)
63
78
  *
64
79
  * @param searchTokenStr - The string token to search for (may include prefix/suffix)
65
80
  * @param targetTokens - Sorted Uint32Array of target token IDs
@@ -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;AAS9E;;;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;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAoDjF;AAmED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAiB5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,sBAAsB,EACpC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAmCT;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,sBAAsB,EACpC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAsDT;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;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,CA8DjF;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"}
@@ -4,7 +4,8 @@
4
4
  * Processing steps:
5
5
  * 1. Converts to lowercase (case-insensitive search)
6
6
  * 2. Removes diacritics using Unicode normalization (č,ć → c, š → s, etc.)
7
- * 3. Keeps only letters (a-z), digits (0-9), periods (.), minuses (-), and spaces
7
+ * 3. Keeps only letters (a-z), digits (0-9), periods (.), minuses (-), tildes (~),
8
+ * query prefixes (<, >, +, *, !, =, ?), and spaces
8
9
  * 4. Replaces all other characters with space
9
10
  *
10
11
  * @param input - The preprocessed string to sanitise
@@ -12,14 +13,17 @@
12
13
  *
13
14
  * @example
14
15
  * ```typescript
15
- * sanitiseString('Čokolada Milka!')
16
- * // Returns: 'cokolada milka '
16
+ * sanitiseString('Čokolada Milka')
17
+ * // Returns: 'cokolada milka'
17
18
  *
18
19
  * sanitiseString('Žaba ČAČA')
19
20
  * // Returns: 'zaba caca'
20
21
  *
21
22
  * sanitiseString('price: $12.50')
22
23
  * // Returns: 'price 12.50'
24
+ *
25
+ * sanitiseString('=exact ~negate')
26
+ * // Returns: '=exact ~negate' (query prefixes preserved)
23
27
  * ```
24
28
  */
25
29
  export declare function sanitiseString(input: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"sanitiseString.d.ts","sourceRoot":"","sources":["../../src/utils/sanitiseString.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAepD"}
1
+ {"version":3,"file":"sanitiseString.d.ts","sourceRoot":"","sources":["../../src/utils/sanitiseString.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAepD"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../src/utils/tokenize.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,8BAA8B;IAC9B,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,qBAcjC,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,aAUhC,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,EAAE,cAGrC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,EAAE,CAuBzE"}
1
+ {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../src/utils/tokenize.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,8BAA8B;IAC9B,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,qBAcjC,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,aAUhC,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,EAAE,cAGrC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,EAAE,CA6BzE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cry-search",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
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,6 +16,16 @@
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
+ }
19
29
  }
20
30
  },
21
31
  "files": [
@@ -27,10 +37,10 @@
27
37
  ],
28
38
  "scripts": {
29
39
  "build": "bun run build:js && bun run build:types",
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",
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",
32
42
  "build:js": "bun run build:esm && bun run build:cjs",
33
- "build:types": "tsc -p tsconfig.build.json && cp ./dist/index.d.ts ./dist/index.d.cts",
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",
34
44
  "clean": "rm -rf dist",
35
45
  "test": "bun test",
36
46
  "prepublishOnly": "bun run clean && bun run build"