cmpstr 3.1.1 → 3.2.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 (168) hide show
  1. package/README.md +43 -40
  2. package/dist/CmpStr.esm.js +899 -886
  3. package/dist/CmpStr.esm.js.map +1 -1
  4. package/dist/CmpStr.esm.min.js +2 -2
  5. package/dist/CmpStr.esm.min.js.map +1 -1
  6. package/dist/CmpStr.umd.js +912 -889
  7. package/dist/CmpStr.umd.js.map +1 -1
  8. package/dist/CmpStr.umd.min.js +2 -2
  9. package/dist/CmpStr.umd.min.js.map +1 -1
  10. package/dist/cjs/CmpStr.cjs +26 -44
  11. package/dist/cjs/CmpStr.cjs.map +1 -1
  12. package/dist/cjs/CmpStrAsync.cjs +10 -5
  13. package/dist/cjs/CmpStrAsync.cjs.map +1 -1
  14. package/dist/cjs/index.cjs +1 -1
  15. package/dist/cjs/metric/Cosine.cjs +21 -21
  16. package/dist/cjs/metric/Cosine.cjs.map +1 -1
  17. package/dist/cjs/metric/DamerauLevenshtein.cjs +31 -29
  18. package/dist/cjs/metric/DamerauLevenshtein.cjs.map +1 -1
  19. package/dist/cjs/metric/DiceSorensen.cjs +16 -13
  20. package/dist/cjs/metric/DiceSorensen.cjs.map +1 -1
  21. package/dist/cjs/metric/Hamming.cjs +2 -2
  22. package/dist/cjs/metric/Hamming.cjs.map +1 -1
  23. package/dist/cjs/metric/Jaccard.cjs +16 -13
  24. package/dist/cjs/metric/Jaccard.cjs.map +1 -1
  25. package/dist/cjs/metric/JaroWinkler.cjs +45 -43
  26. package/dist/cjs/metric/JaroWinkler.cjs.map +1 -1
  27. package/dist/cjs/metric/LCS.cjs +21 -18
  28. package/dist/cjs/metric/LCS.cjs.map +1 -1
  29. package/dist/cjs/metric/Levenshtein.cjs +21 -18
  30. package/dist/cjs/metric/Levenshtein.cjs.map +1 -1
  31. package/dist/cjs/metric/Metric.cjs +18 -31
  32. package/dist/cjs/metric/Metric.cjs.map +1 -1
  33. package/dist/cjs/metric/NeedlemanWunsch.cjs +27 -24
  34. package/dist/cjs/metric/NeedlemanWunsch.cjs.map +1 -1
  35. package/dist/cjs/metric/{qGram.cjs → QGram.cjs} +18 -15
  36. package/dist/cjs/metric/QGram.cjs.map +1 -0
  37. package/dist/cjs/metric/SmithWaterman.cjs +27 -24
  38. package/dist/cjs/metric/SmithWaterman.cjs.map +1 -1
  39. package/dist/cjs/phonetic/Caverphone.cjs +5 -8
  40. package/dist/cjs/phonetic/Caverphone.cjs.map +1 -1
  41. package/dist/cjs/phonetic/Cologne.cjs +1 -1
  42. package/dist/cjs/phonetic/Cologne.cjs.map +1 -1
  43. package/dist/cjs/phonetic/Metaphone.cjs +6 -3
  44. package/dist/cjs/phonetic/Metaphone.cjs.map +1 -1
  45. package/dist/cjs/phonetic/Phonetic.cjs +23 -16
  46. package/dist/cjs/phonetic/Phonetic.cjs.map +1 -1
  47. package/dist/cjs/phonetic/Soundex.cjs +1 -1
  48. package/dist/cjs/phonetic/Soundex.cjs.map +1 -1
  49. package/dist/cjs/root.cjs +3 -2
  50. package/dist/cjs/root.cjs.map +1 -1
  51. package/dist/cjs/utils/DeepMerge.cjs +73 -42
  52. package/dist/cjs/utils/DeepMerge.cjs.map +1 -1
  53. package/dist/cjs/utils/DiffChecker.cjs +33 -45
  54. package/dist/cjs/utils/DiffChecker.cjs.map +1 -1
  55. package/dist/cjs/utils/Filter.cjs +40 -46
  56. package/dist/cjs/utils/Filter.cjs.map +1 -1
  57. package/dist/cjs/utils/HashTable.cjs +28 -37
  58. package/dist/cjs/utils/HashTable.cjs.map +1 -1
  59. package/dist/cjs/utils/Normalizer.cjs +32 -21
  60. package/dist/cjs/utils/Normalizer.cjs.map +1 -1
  61. package/dist/cjs/utils/Pool.cjs +17 -22
  62. package/dist/cjs/utils/Pool.cjs.map +1 -1
  63. package/dist/cjs/utils/Profiler.cjs +40 -53
  64. package/dist/cjs/utils/Profiler.cjs.map +1 -1
  65. package/dist/cjs/utils/Registry.cjs +6 -4
  66. package/dist/cjs/utils/Registry.cjs.map +1 -1
  67. package/dist/cjs/utils/StructuredData.cjs +23 -25
  68. package/dist/cjs/utils/StructuredData.cjs.map +1 -1
  69. package/dist/cjs/utils/TextAnalyzer.cjs +76 -56
  70. package/dist/cjs/utils/TextAnalyzer.cjs.map +1 -1
  71. package/dist/esm/CmpStr.mjs +21 -44
  72. package/dist/esm/CmpStr.mjs.map +1 -1
  73. package/dist/esm/CmpStrAsync.mjs +5 -5
  74. package/dist/esm/CmpStrAsync.mjs.map +1 -1
  75. package/dist/esm/index.mjs +1 -1
  76. package/dist/esm/metric/Cosine.mjs +21 -21
  77. package/dist/esm/metric/Cosine.mjs.map +1 -1
  78. package/dist/esm/metric/DamerauLevenshtein.mjs +31 -29
  79. package/dist/esm/metric/DamerauLevenshtein.mjs.map +1 -1
  80. package/dist/esm/metric/DiceSorensen.mjs +16 -13
  81. package/dist/esm/metric/DiceSorensen.mjs.map +1 -1
  82. package/dist/esm/metric/Hamming.mjs +2 -2
  83. package/dist/esm/metric/Hamming.mjs.map +1 -1
  84. package/dist/esm/metric/Jaccard.mjs +16 -13
  85. package/dist/esm/metric/Jaccard.mjs.map +1 -1
  86. package/dist/esm/metric/JaroWinkler.mjs +45 -43
  87. package/dist/esm/metric/JaroWinkler.mjs.map +1 -1
  88. package/dist/esm/metric/LCS.mjs +21 -18
  89. package/dist/esm/metric/LCS.mjs.map +1 -1
  90. package/dist/esm/metric/Levenshtein.mjs +21 -18
  91. package/dist/esm/metric/Levenshtein.mjs.map +1 -1
  92. package/dist/esm/metric/Metric.mjs +19 -32
  93. package/dist/esm/metric/Metric.mjs.map +1 -1
  94. package/dist/esm/metric/NeedlemanWunsch.mjs +27 -24
  95. package/dist/esm/metric/NeedlemanWunsch.mjs.map +1 -1
  96. package/dist/esm/metric/QGram.mjs +38 -0
  97. package/dist/esm/metric/QGram.mjs.map +1 -0
  98. package/dist/esm/metric/SmithWaterman.mjs +27 -24
  99. package/dist/esm/metric/SmithWaterman.mjs.map +1 -1
  100. package/dist/esm/phonetic/Caverphone.mjs +5 -8
  101. package/dist/esm/phonetic/Caverphone.mjs.map +1 -1
  102. package/dist/esm/phonetic/Cologne.mjs +1 -1
  103. package/dist/esm/phonetic/Cologne.mjs.map +1 -1
  104. package/dist/esm/phonetic/Metaphone.mjs +6 -3
  105. package/dist/esm/phonetic/Metaphone.mjs.map +1 -1
  106. package/dist/esm/phonetic/Phonetic.mjs +24 -17
  107. package/dist/esm/phonetic/Phonetic.mjs.map +1 -1
  108. package/dist/esm/phonetic/Soundex.mjs +1 -1
  109. package/dist/esm/phonetic/Soundex.mjs.map +1 -1
  110. package/dist/esm/root.mjs +3 -3
  111. package/dist/esm/utils/DeepMerge.mjs +73 -42
  112. package/dist/esm/utils/DeepMerge.mjs.map +1 -1
  113. package/dist/esm/utils/DiffChecker.mjs +33 -45
  114. package/dist/esm/utils/DiffChecker.mjs.map +1 -1
  115. package/dist/esm/utils/Filter.mjs +40 -46
  116. package/dist/esm/utils/Filter.mjs.map +1 -1
  117. package/dist/esm/utils/HashTable.mjs +28 -38
  118. package/dist/esm/utils/HashTable.mjs.map +1 -1
  119. package/dist/esm/utils/Normalizer.mjs +32 -21
  120. package/dist/esm/utils/Normalizer.mjs.map +1 -1
  121. package/dist/esm/utils/Pool.mjs +17 -22
  122. package/dist/esm/utils/Pool.mjs.map +1 -1
  123. package/dist/esm/utils/Profiler.mjs +40 -53
  124. package/dist/esm/utils/Profiler.mjs.map +1 -1
  125. package/dist/esm/utils/Registry.mjs +6 -4
  126. package/dist/esm/utils/Registry.mjs.map +1 -1
  127. package/dist/esm/utils/StructuredData.mjs +23 -25
  128. package/dist/esm/utils/StructuredData.mjs.map +1 -1
  129. package/dist/esm/utils/TextAnalyzer.mjs +76 -56
  130. package/dist/esm/utils/TextAnalyzer.mjs.map +1 -1
  131. package/dist/types/CmpStr.d.ts +56 -55
  132. package/dist/types/CmpStrAsync.d.ts +45 -45
  133. package/dist/types/index.d.ts +2 -2
  134. package/dist/types/metric/Cosine.d.ts +7 -5
  135. package/dist/types/metric/DamerauLevenshtein.d.ts +4 -2
  136. package/dist/types/metric/DiceSorensen.d.ts +5 -3
  137. package/dist/types/metric/Hamming.d.ts +4 -2
  138. package/dist/types/metric/Jaccard.d.ts +3 -1
  139. package/dist/types/metric/JaroWinkler.d.ts +4 -2
  140. package/dist/types/metric/LCS.d.ts +3 -1
  141. package/dist/types/metric/Levenshtein.d.ts +4 -2
  142. package/dist/types/metric/Metric.d.ts +23 -21
  143. package/dist/types/metric/NeedlemanWunsch.d.ts +4 -2
  144. package/dist/types/metric/{qGram.d.ts → QGram.d.ts} +5 -3
  145. package/dist/types/metric/SmithWaterman.d.ts +4 -2
  146. package/dist/types/metric/index.d.ts +2 -2
  147. package/dist/types/phonetic/Caverphone.d.ts +5 -2
  148. package/dist/types/phonetic/Cologne.d.ts +1 -0
  149. package/dist/types/phonetic/Metaphone.d.ts +3 -0
  150. package/dist/types/phonetic/Phonetic.d.ts +14 -10
  151. package/dist/types/phonetic/Soundex.d.ts +1 -0
  152. package/dist/types/phonetic/index.d.ts +1 -1
  153. package/dist/types/root.d.ts +7 -7
  154. package/dist/types/utils/DeepMerge.d.ts +4 -3
  155. package/dist/types/utils/DiffChecker.d.ts +9 -7
  156. package/dist/types/utils/Filter.d.ts +22 -8
  157. package/dist/types/utils/HashTable.d.ts +44 -10
  158. package/dist/types/utils/Normalizer.d.ts +13 -4
  159. package/dist/types/utils/Pool.d.ts +5 -3
  160. package/dist/types/utils/Profiler.d.ts +30 -15
  161. package/dist/types/utils/Registry.d.ts +11 -8
  162. package/dist/types/utils/StructuredData.d.ts +38 -28
  163. package/dist/types/utils/TextAnalyzer.d.ts +38 -14
  164. package/dist/types/utils/Types.d.ts +97 -15
  165. package/package.json +7 -3
  166. package/dist/cjs/metric/qGram.cjs.map +0 -1
  167. package/dist/esm/metric/qGram.mjs +0 -35
  168. package/dist/esm/metric/qGram.mjs.map +0 -1
package/README.md CHANGED
@@ -1,58 +1,59 @@
1
- # CmpStr - Modern String Similarity Package
2
-
3
- [![GitHub License](https://img.shields.io/github/license/komed3/cmpstr?style=for-the-badge&logo=unlicense&logoColor=fff)](LICENSE)
4
- [![Static Badge](https://img.shields.io/badge/docs-docs?style=for-the-badge&logo=readthedocs&logoColor=fff&color=blue)](https://github.com/komed3/cmpstr/wiki)
5
- [![Static Badge](https://img.shields.io/badge/Typescript-support?style=for-the-badge&logo=typescript&logoColor=fff&color=blue)](https://www.typescriptlang.org)
6
- [![GitHub package.json version](https://img.shields.io/github/package-json/v/komed3/cmpstr?style=for-the-badge&logo=npm&logoColor=fff)](https://npmjs.com/package/cmpstr)
7
- [![npm bundle size](https://img.shields.io/bundlephobia/min/cmpstr?style=for-the-badge&logo=gitlfs&logoColor=fff)](https://bundlephobia.com/package/cmpstr)
8
- [![NPM Downloads](https://img.shields.io/npm/dy/cmpstr?style=for-the-badge&logo=transmission&logoColor=fff)](https://npm-stat.com/charts.html?package=cmpstr)
9
- [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/komed3/cmpstr/build.yml?style=for-the-badge&logo=educative&logoColor=fff)](https://github.com/komed3/cmpstr/actions/workflows/build.yml)
10
- [![Static Badge](https://img.shields.io/badge/ESM_%26_CJS-TypeScript?style=for-the-badge&logo=nodedotjs&logoColor=fff&color=purple)](https://github.com/komed3/cmpstr/wiki/Installation-&-Setup#import-in-your-project)
11
- [![Static Badge](https://img.shields.io/badge/UMD_%26_ESM-JavaScript?style=for-the-badge&logo=javascript&logoColor=fff&color=orange)](https://github.com/komed3/cmpstr/wiki/Installation-&-Setup#browser)
12
-
13
- **CmpStr** is a TypeScript library for advanced string comparison, similarity measurement, phonetic indexing, and text analysis. It includes implementations of several established algorithms such as Levenshtein, Dice–Sørensen, Damerau–Levenshtein and Soundex. The library has no external dependencies and allows for the integration of custom metrics, phonetic mappings, and normalization filters.
14
-
15
- CmpStr provides a unified API for single, batch and pairwise operations. It is suitable for a range of use cases in application development and research. The package includes support for both ESM and CommonJS environments, TypeScript type declarations and a browser-compatible JavaScript bundle.
16
-
17
- Originally launched in 2023 with a minimal feature set, the library was redesigned in 2025 to support a broader set of algorithms and processing features. The current version offers asynchronous operation, configurable normalization and filtering pipelines, phonetic search functionality, and basic tools for string differencing.
18
-
19
- **Key Features**
20
-
21
- - Unified API for string similarity, distance measurement and matching
22
- - Modular metric system with support for algorithms such as Levenshtein, Jaro-Winkler, Cosine etc.
23
- - Integrated phonetic algorithms (e.g., Soundex, Metaphone) with configurable registry
24
- - Normalization and filtering pipeline for consistent input processing
25
- - Single, batch and pairwise comparisons with structured, type-safe results
26
- - Phonetic-aware search and comparison
27
- - Structured data comparison by extracting object properties
28
- - Utilities for text structure and readability analysis (e.g., syllables, word statistics)
29
- - Diffing tools with CLI-friendly formatting
30
- - TypeScript-native with full type declarations and extensibility
31
- - Supports asynchronous workflows for scalable, non-blocking processing
32
- - Extensible architecture for integrating custom algorithms and filters
1
+ # CmpStr Modern String Similarity Package
2
+
3
+ [![GitHub License](https://img.shields.io/github/license/komed3/cmpstr?style=for-the-badge\&logo=unlicense\&logoColor=fff)](LICENSE)
4
+ [![Static Badge](https://img.shields.io/badge/docs-docs?style=for-the-badge\&logo=readthedocs\&logoColor=fff\&color=blue)](https://github.com/komed3/cmpstr/wiki)
5
+ [![Static Badge](https://img.shields.io/badge/TypeScript-supported?style=for-the-badge\&logo=typescript\&logoColor=fff\&color=blue)](https://www.typescriptlang.org)
6
+ [![GitHub package.json version](https://img.shields.io/github/package-json/v/komed3/cmpstr?style=for-the-badge\&logo=npm\&logoColor=fff)](https://npmjs.com/package/cmpstr)
7
+ [![npm bundle size](https://img.shields.io/bundlephobia/min/cmpstr?style=for-the-badge\&logo=gitlfs\&logoColor=fff)](https://bundlephobia.com/package/cmpstr)
8
+ [![NPM Downloads](https://img.shields.io/npm/dy/cmpstr?style=for-the-badge\&logo=transmission\&logoColor=fff)](https://npm-stat.com/charts.html?package=cmpstr)
9
+ [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/komed3/cmpstr/build.yml?style=for-the-badge\&logo=educative\&logoColor=fff)](https://github.com/komed3/cmpstr/actions/workflows/build.yml)
10
+ [![Static Badge](https://img.shields.io/badge/ESM_%26_CJS-TypeScript?style=for-the-badge\&logo=nodedotjs\&logoColor=fff\&color=purple)](https://github.com/komed3/cmpstr/wiki/Installation-&-Setup#import-in-your-project)
11
+ [![Static Badge](https://img.shields.io/badge/UMD_%26_ESM-JavaScript?style=for-the-badge\&logo=javascript\&logoColor=fff\&color=orange)](https://github.com/komed3/cmpstr/wiki/Installation-&-Setup#browser)
12
+
13
+ [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W21SQV2Q)
14
+
15
+ **CmpStr** is a modern TypeScript library for advanced string comparison, similarity measurement, phonetic indexing, and text analysis. It provides a comprehensive collection of established algorithms such as Levenshtein, Dice–Sørensen, Jaro-Winkler, LCS, q-Gram, and more.
16
+
17
+ The library is dependency-free, fully typed, and designed with extensibility in mind. Custom metrics, phonetic mappings, normalization filters, and processing pipelines can be integrated without modifying the core. CmpStr offers a unified, consistent API for single comparisons, batch processing, and pairwise matching across synchronous and asynchronous workflows.
18
+
19
+ Originally released in 2023 with a minimal feature set, CmpStr was fundamentally redesigned in 2025 to support a broader range of algorithms, scalable processing, and more demanding real-world use cases. The current version emphasizes determinism, performance, and architectural clarity while remaining approachable for everyday usage.
20
+
21
+ ## Key Features
22
+
23
+ * Unified API for string similarity, distance measurement, and matching
24
+ * Modular metric system with built-in support for 11 different metrics
25
+ * Integrated phonetic algorithms (e.g. Soundex, Metaphone) with a configurable registry
26
+ * Configurable normalization and filtering pipeline for consistent input processing
27
+ * Single, batch, and pairwise comparisons with structured, type-safe results
28
+ * Phonetic-aware search and comparison
29
+ * Structured data comparison via property extraction
30
+ * Utilities for text structure and readability analysis (e.g. syllables, word statistics)
31
+ * Diffing utilities with CLI-friendly output formats
32
+ * TypeScript-native design with full type declarations
33
+ * Optional asynchronous APIs for scalable, non-blocking workloads
34
+ * Extensible architecture for custom algorithms, processors, and filters
33
35
 
34
36
  ## Getting Started
35
37
 
36
- Working with CmpStr is simple and straightforward. The package is installed just like any other using the following command:
38
+ Install CmpStr using npm:
37
39
 
38
40
  ```sh
39
41
  npm install cmpstr
40
42
  ```
41
43
 
42
- Minimal usage example:
44
+ ### Minimal Example
43
45
 
44
46
  ```ts
45
47
  import { CmpStr } from 'cmpstr';
46
48
 
47
49
  const cmp = CmpStr.create().setMetric( 'levenshtein' ).setFlags( 'i' );
48
-
49
50
  const result = cmp.test( [ 'hello', 'hola' ], 'Hallo' );
50
51
 
51
52
  console.log( result );
52
53
  // { source: 'hello', target: 'Hallo', match: 0.8 }
53
54
  ```
54
55
 
55
- For asynchronous workloads:
56
+ ### Asynchronous Usage
56
57
 
57
58
  ```ts
58
59
  import { CmpStrAsync } from 'cmpstr';
@@ -69,14 +70,16 @@ console.log( result );
69
70
  // [ 'Meyer', 'Meier' ]
70
71
  ```
71
72
 
72
- _Try with [OneCompiler](https://onecompiler.com/nodejs/43qr6trny)._
73
+ *Try it online with [OneCompiler](https://onecompiler.com/nodejs/43qr6trny).*
73
74
 
74
75
  ## CLI Tool
75
76
 
76
- Try out or use CmpStr on the terminal. Install the **[cmpstr-cli](https://npmjs.com/package/cmpstr-cli)** package and use many features of CmpStr directly on the console via the cmpstr command. Many options and parameters also make the command suitable for scripts and automatic processing.
77
+ CmpStr can also be used directly from the command line via **[cmpstr-cli](https://npmjs.com/package/cmpstr-cli)**. The CLI exposes many of the library’s features for interactive use, scripting, and automated processing, making it suitable for data cleaning, analysis, and batch workflows.
77
78
 
78
79
  ## Documentation
79
80
 
80
- The full documentation, API reference and advanced usage examples are available in the [GitHub Wiki](https://github.com/komed3/cmpstr/wiki).
81
+ Comprehensive documentation, API references, and advanced usage examples are available in the [GitHub Wiki](https://github.com/komed3/cmpstr/wiki).
82
+
83
+ ## License
81
84
 
82
- **LICENSE MIT © 2023-2026 PAUL KÖHLER (KOMED3)**
85
+ MIT License © 20232026 Paul Köhler (komed3)