cmpstr 2.0.2 → 3.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 (172) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +75 -499
  3. package/dist/CmpStr.esm.js +4863 -0
  4. package/dist/CmpStr.esm.js.map +1 -0
  5. package/dist/CmpStr.esm.min.js +8 -0
  6. package/dist/CmpStr.esm.min.js.map +1 -0
  7. package/dist/CmpStr.umd.js +4875 -0
  8. package/dist/CmpStr.umd.js.map +1 -0
  9. package/dist/CmpStr.umd.min.js +8 -0
  10. package/dist/CmpStr.umd.min.js.map +1 -0
  11. package/dist/cjs/CmpStr.js +663 -0
  12. package/dist/cjs/CmpStr.js.map +1 -0
  13. package/dist/cjs/CmpStrAsync.js +336 -0
  14. package/dist/cjs/CmpStrAsync.js.map +1 -0
  15. package/dist/cjs/index.js +15 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/metric/Cosine.js +101 -0
  18. package/dist/cjs/metric/Cosine.js.map +1 -0
  19. package/dist/cjs/metric/DamerauLevenshtein.js +110 -0
  20. package/dist/cjs/metric/DamerauLevenshtein.js.map +1 -0
  21. package/dist/cjs/metric/DiceSorensen.js +91 -0
  22. package/dist/cjs/metric/DiceSorensen.js.map +1 -0
  23. package/dist/cjs/metric/Hamming.js +82 -0
  24. package/dist/cjs/metric/Hamming.js.map +1 -0
  25. package/dist/cjs/metric/Jaccard.js +76 -0
  26. package/dist/cjs/metric/Jaccard.js.map +1 -0
  27. package/dist/cjs/metric/JaroWinkler.js +114 -0
  28. package/dist/cjs/metric/JaroWinkler.js.map +1 -0
  29. package/dist/cjs/metric/LCS.js +89 -0
  30. package/dist/cjs/metric/LCS.js.map +1 -0
  31. package/dist/cjs/metric/Levenshtein.js +94 -0
  32. package/dist/cjs/metric/Levenshtein.js.map +1 -0
  33. package/dist/cjs/metric/Metric.js +445 -0
  34. package/dist/cjs/metric/Metric.js.map +1 -0
  35. package/dist/cjs/metric/NeedlemanWunsch.js +95 -0
  36. package/dist/cjs/metric/NeedlemanWunsch.js.map +1 -0
  37. package/dist/cjs/metric/SmithWaterman.js +98 -0
  38. package/dist/cjs/metric/SmithWaterman.js.map +1 -0
  39. package/dist/cjs/metric/qGram.js +91 -0
  40. package/dist/cjs/metric/qGram.js.map +1 -0
  41. package/dist/cjs/phonetic/Cologne.js +112 -0
  42. package/dist/cjs/phonetic/Cologne.js.map +1 -0
  43. package/dist/cjs/phonetic/Metaphone.js +172 -0
  44. package/dist/cjs/phonetic/Metaphone.js.map +1 -0
  45. package/dist/cjs/phonetic/Phonetic.js +413 -0
  46. package/dist/cjs/phonetic/Phonetic.js.map +1 -0
  47. package/dist/cjs/phonetic/Soundex.js +135 -0
  48. package/dist/cjs/phonetic/Soundex.js.map +1 -0
  49. package/dist/cjs/utils/DeepMerge.js +144 -0
  50. package/dist/cjs/utils/DeepMerge.js.map +1 -0
  51. package/dist/cjs/utils/DiffChecker.js +500 -0
  52. package/dist/cjs/utils/DiffChecker.js.map +1 -0
  53. package/dist/cjs/utils/Filter.js +189 -0
  54. package/dist/cjs/utils/Filter.js.map +1 -0
  55. package/dist/cjs/utils/HashTable.js +175 -0
  56. package/dist/cjs/utils/HashTable.js.map +1 -0
  57. package/dist/cjs/utils/Normalizer.js +144 -0
  58. package/dist/cjs/utils/Normalizer.js.map +1 -0
  59. package/dist/cjs/utils/Pool.js +196 -0
  60. package/dist/cjs/utils/Pool.js.map +1 -0
  61. package/dist/cjs/utils/Profiler.js +229 -0
  62. package/dist/cjs/utils/Profiler.js.map +1 -0
  63. package/dist/cjs/utils/Registry.js +148 -0
  64. package/dist/cjs/utils/Registry.js.map +1 -0
  65. package/dist/cjs/utils/TextAnalyzer.js +358 -0
  66. package/dist/cjs/utils/TextAnalyzer.js.map +1 -0
  67. package/dist/esm/CmpStr.js +662 -0
  68. package/dist/esm/CmpStr.js.map +1 -0
  69. package/dist/esm/CmpStrAsync.js +331 -0
  70. package/dist/esm/CmpStrAsync.js.map +1 -0
  71. package/dist/esm/index.js +7 -0
  72. package/dist/esm/index.js.map +1 -0
  73. package/dist/esm/metric/Cosine.js +99 -0
  74. package/dist/esm/metric/Cosine.js.map +1 -0
  75. package/dist/esm/metric/DamerauLevenshtein.js +108 -0
  76. package/dist/esm/metric/DamerauLevenshtein.js.map +1 -0
  77. package/dist/esm/metric/DiceSorensen.js +89 -0
  78. package/dist/esm/metric/DiceSorensen.js.map +1 -0
  79. package/dist/esm/metric/Hamming.js +77 -0
  80. package/dist/esm/metric/Hamming.js.map +1 -0
  81. package/dist/esm/metric/Jaccard.js +74 -0
  82. package/dist/esm/metric/Jaccard.js.map +1 -0
  83. package/dist/esm/metric/JaroWinkler.js +112 -0
  84. package/dist/esm/metric/JaroWinkler.js.map +1 -0
  85. package/dist/esm/metric/LCS.js +87 -0
  86. package/dist/esm/metric/LCS.js.map +1 -0
  87. package/dist/esm/metric/Levenshtein.js +92 -0
  88. package/dist/esm/metric/Levenshtein.js.map +1 -0
  89. package/dist/esm/metric/Metric.js +442 -0
  90. package/dist/esm/metric/Metric.js.map +1 -0
  91. package/dist/esm/metric/NeedlemanWunsch.js +93 -0
  92. package/dist/esm/metric/NeedlemanWunsch.js.map +1 -0
  93. package/dist/esm/metric/SmithWaterman.js +96 -0
  94. package/dist/esm/metric/SmithWaterman.js.map +1 -0
  95. package/dist/esm/metric/qGram.js +89 -0
  96. package/dist/esm/metric/qGram.js.map +1 -0
  97. package/dist/esm/phonetic/Cologne.js +114 -0
  98. package/dist/esm/phonetic/Cologne.js.map +1 -0
  99. package/dist/esm/phonetic/Metaphone.js +174 -0
  100. package/dist/esm/phonetic/Metaphone.js.map +1 -0
  101. package/dist/esm/phonetic/Phonetic.js +409 -0
  102. package/dist/esm/phonetic/Phonetic.js.map +1 -0
  103. package/dist/esm/phonetic/Soundex.js +137 -0
  104. package/dist/esm/phonetic/Soundex.js.map +1 -0
  105. package/dist/esm/utils/DeepMerge.js +139 -0
  106. package/dist/esm/utils/DeepMerge.js.map +1 -0
  107. package/dist/esm/utils/DiffChecker.js +498 -0
  108. package/dist/esm/utils/DiffChecker.js.map +1 -0
  109. package/dist/esm/utils/Filter.js +187 -0
  110. package/dist/esm/utils/Filter.js.map +1 -0
  111. package/dist/esm/utils/HashTable.js +173 -0
  112. package/dist/esm/utils/HashTable.js.map +1 -0
  113. package/dist/esm/utils/Normalizer.js +142 -0
  114. package/dist/esm/utils/Normalizer.js.map +1 -0
  115. package/dist/esm/utils/Pool.js +194 -0
  116. package/dist/esm/utils/Pool.js.map +1 -0
  117. package/dist/esm/utils/Profiler.js +227 -0
  118. package/dist/esm/utils/Profiler.js.map +1 -0
  119. package/dist/esm/utils/Registry.js +142 -0
  120. package/dist/esm/utils/Registry.js.map +1 -0
  121. package/dist/esm/utils/TextAnalyzer.js +356 -0
  122. package/dist/esm/utils/TextAnalyzer.js.map +1 -0
  123. package/dist/types/CmpStr.d.ts +472 -0
  124. package/dist/types/CmpStrAsync.d.ts +233 -0
  125. package/dist/types/index.d.ts +51 -0
  126. package/dist/types/metric/Cosine.d.ts +57 -0
  127. package/dist/types/metric/DamerauLevenshtein.d.ts +50 -0
  128. package/dist/types/metric/DiceSorensen.d.ts +57 -0
  129. package/dist/types/metric/Hamming.d.ts +49 -0
  130. package/dist/types/metric/Jaccard.d.ts +48 -0
  131. package/dist/types/metric/JaroWinkler.d.ts +50 -0
  132. package/dist/types/metric/LCS.d.ts +50 -0
  133. package/dist/types/metric/Levenshtein.d.ts +50 -0
  134. package/dist/types/metric/Metric.d.ts +261 -0
  135. package/dist/types/metric/NeedlemanWunsch.d.ts +47 -0
  136. package/dist/types/metric/SmithWaterman.d.ts +48 -0
  137. package/dist/types/metric/index.d.ts +41 -0
  138. package/dist/types/metric/qGram.d.ts +56 -0
  139. package/dist/types/phonetic/Cologne.d.ts +46 -0
  140. package/dist/types/phonetic/Metaphone.d.ts +50 -0
  141. package/dist/types/phonetic/Phonetic.d.ts +189 -0
  142. package/dist/types/phonetic/Soundex.d.ts +49 -0
  143. package/dist/types/phonetic/index.d.ts +30 -0
  144. package/dist/types/utils/DeepMerge.d.ts +70 -0
  145. package/dist/types/utils/DiffChecker.d.ts +137 -0
  146. package/dist/types/utils/Filter.d.ts +97 -0
  147. package/dist/types/utils/HashTable.d.ts +86 -0
  148. package/dist/types/utils/Normalizer.d.ts +76 -0
  149. package/dist/types/utils/Pool.d.ts +63 -0
  150. package/dist/types/utils/Profiler.d.ts +129 -0
  151. package/dist/types/utils/Registry.d.ts +57 -0
  152. package/dist/types/utils/TextAnalyzer.d.ts +199 -0
  153. package/dist/types/utils/Types.d.ts +313 -0
  154. package/package.json +62 -49
  155. package/src/CmpStr.d.ts +0 -70
  156. package/src/CmpStr.js +0 -912
  157. package/src/CmpStrAsync.d.ts +0 -19
  158. package/src/CmpStrAsync.js +0 -204
  159. package/src/algorithms/cosine.js +0 -86
  160. package/src/algorithms/damerau.js +0 -78
  161. package/src/algorithms/dice.js +0 -65
  162. package/src/algorithms/hamming.js +0 -44
  163. package/src/algorithms/jaccard.js +0 -34
  164. package/src/algorithms/jaroWinkler.js +0 -106
  165. package/src/algorithms/lcs.js +0 -58
  166. package/src/algorithms/levenshtein.js +0 -70
  167. package/src/algorithms/needlemanWunsch.js +0 -72
  168. package/src/algorithms/qGram.js +0 -63
  169. package/src/algorithms/smithWaterman.js +0 -78
  170. package/src/algorithms/soundex.js +0 -152
  171. package/src/index.d.ts +0 -3
  172. package/src/index.js +0 -47
@@ -0,0 +1,196 @@
1
+ // CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
2
+ 'use strict';
3
+
4
+ /**
5
+ * Pool Utility
6
+ * src/utils/Pool.ts
7
+ *
8
+ * @see https://en.wikipedia.org/wiki/Circular_buffer
9
+ *
10
+ * The Pool class provides a simple and efficient buffer pool for dynamic programming
11
+ * algorithms that require temporary arrays (such as Levenshtein, LCS, etc.).
12
+ * By reusing pre-allocated typed arrays, it reduces memory allocations and garbage
13
+ * collection overhead, especially for repeated or batch computations.
14
+ *
15
+ * It supports different types of buffers (Uint16Array, number[], Set, Map) and allows
16
+ * for acquiring buffers of specific sizes while managing a maximum pool size.
17
+ *
18
+ * @module Utils/Pool
19
+ * @author Paul Köhler (komed3)
20
+ * @license MIT
21
+ */
22
+ /**
23
+ * RingPool is a circular buffer implementation that manages a pool of buffers.
24
+ *
25
+ * It allows for efficient acquisition and release of buffers, ensuring that
26
+ * buffers are reused without unnecessary allocations.
27
+ *
28
+ * @template T - The type of buffers managed by the pool
29
+ */
30
+ class RingPool {
31
+ maxSize;
32
+ // The buffers in the pool
33
+ buffers = [];
34
+ // The current pointer for acquiring buffers
35
+ pointer = 0;
36
+ /**
37
+ * Creates a new RingPool with a specified maximum size.
38
+ *
39
+ * @param {number} maxSize - The maximum number of buffers that can be stored in the pool
40
+ */
41
+ constructor(maxSize) {
42
+ this.maxSize = maxSize;
43
+ }
44
+ /**
45
+ * Acquires a buffer of at least the specified minimum size from the pool.
46
+ *
47
+ * @param {number} minSize - The minimum size of the buffer to acquire
48
+ * @param {boolean} allowOversize - Whether to allow buffers larger than minSize
49
+ * @return {PoolBuffer<T>|null} - The acquired buffer or null if no suitable buffer is found
50
+ */
51
+ acquire(minSize, allowOversize) {
52
+ const len = this.buffers.length;
53
+ // Iterate through the buffers in the pool
54
+ for (let i = 0; i < len; i++) {
55
+ const idx = (this.pointer + i) % len;
56
+ const item = this.buffers[idx];
57
+ // Check if the item size is greater than or equal to the minimum size
58
+ if (item.size >= minSize) {
59
+ // Set the pointer to the next position
60
+ this.pointer = (idx + 1) % len;
61
+ // If the item size is equal to minSize or oversize is allowed, return the item
62
+ return allowOversize || item.size === minSize ? item : null;
63
+ }
64
+ }
65
+ // If no suitable buffer is found, return null
66
+ return null;
67
+ }
68
+ /**
69
+ * Releases a buffer back to the pool.
70
+ * If the pool is full, it replaces the oldest buffer with the new one.
71
+ *
72
+ * @param {PoolBuffer<T>} item - The buffer to release back to the pool
73
+ */
74
+ release(item) {
75
+ if (this.buffers.length < this.maxSize) {
76
+ // If the pool is not full, simply add the item
77
+ this.buffers.push(item);
78
+ } else {
79
+ // If the pool is full, replace the oldest buffer
80
+ this.buffers[this.pointer] = item;
81
+ this.pointer = (this.pointer + 1) % this.maxSize;
82
+ }
83
+ }
84
+ /**
85
+ * Clears the pool, removing all buffers.
86
+ * This resets the pointer and empties the buffer list.
87
+ */
88
+ clear() {
89
+ this.buffers = [];
90
+ this.pointer = 0;
91
+ }
92
+ }
93
+ /**
94
+ * The Pool class provides a buffer pool for dynamic programming algorithms.
95
+ *
96
+ * It allows for efficient reuse of buffers (Uint16Array, number[], Set, Map)
97
+ * to reduce memory allocations and garbage collection overhead.
98
+ */
99
+ class Pool {
100
+ // Pool Types
101
+ static CONFIG = {
102
+ uint16: {
103
+ type: 'uint16',
104
+ maxSize: 32,
105
+ maxItemSize: 2048,
106
+ allowOversize: true
107
+ },
108
+ 'number[]': {
109
+ type: 'number[]',
110
+ maxSize: 16,
111
+ maxItemSize: 1024,
112
+ allowOversize: false
113
+ },
114
+ set: { type: 'set', maxSize: 8, maxItemSize: 0, allowOversize: false },
115
+ map: { type: 'map', maxSize: 8, maxItemSize: 0, allowOversize: false }
116
+ };
117
+ // Pool Rings for each type
118
+ static POOLS = {
119
+ uint16: new RingPool(32),
120
+ 'number[]': new RingPool(16),
121
+ set: new RingPool(8),
122
+ map: new RingPool(8)
123
+ };
124
+ /**
125
+ * Allocates a new buffer of the specified type and size.
126
+ *
127
+ * @param {PoolType} type - The type of buffer to allocate
128
+ * @param {number} size - The size of the buffer to allocate
129
+ * @return {any} - The newly allocated buffer
130
+ */
131
+ static allocate(type, size) {
132
+ switch (type) {
133
+ case 'uint16':
134
+ return new Uint16Array(size);
135
+ case 'number[]':
136
+ return new Array(size).fill(0);
137
+ case 'set':
138
+ return new Set();
139
+ case 'map':
140
+ return new Map();
141
+ }
142
+ }
143
+ /**
144
+ * Acquires a buffer of the specified type and size from the pool.
145
+ * If no suitable buffer is available, it allocates a new one.
146
+ *
147
+ * @param {PoolType} type - The type of buffer to acquire (e.g., 'uint16', 'number[]', 'set', 'map')
148
+ * @param {number} size - The size of the buffer to acquire
149
+ * @return {T} - The acquired buffer of the specified type
150
+ */
151
+ static acquire(type, size) {
152
+ // Get the configuration for the specified type
153
+ const CONFIG = this.CONFIG[type];
154
+ // If the requested size exceeds the maximum item size, allocate a new buffer
155
+ if (size > CONFIG.maxItemSize) return this.allocate(type, size);
156
+ // Try to acquire a buffer from the pool ring
157
+ // If a suitable buffer is found, return it (subarray for uint16)
158
+ const item = this.POOLS[type].acquire(size, CONFIG.allowOversize);
159
+ if (item) {
160
+ // If the type is 'uint16', return a subarray of the buffer
161
+ return type === 'uint16' ? item.buffer.subarray(0, size) : item.buffer;
162
+ }
163
+ // If no suitable buffer is found, allocate a new one
164
+ return this.allocate(type, size);
165
+ }
166
+ /**
167
+ * Acquires multiple buffers of the specified type and sizes from the pool.
168
+ *
169
+ * @param {PoolType} type - The type of buffers to acquire
170
+ * @param {number[]} sizes - An array of sizes for each buffer to acquire
171
+ * @return {T[]} - An array of acquired buffers of the specified type
172
+ */
173
+ static acquireMany(type, sizes) {
174
+ return sizes.map((size) => this.acquire(type, size));
175
+ }
176
+ /**
177
+ * Releases a buffer back to the pool.
178
+ * If the size of the buffer is larger than the maximum item size, it will not be released.
179
+ *
180
+ * @param {PoolType} type - The type of buffer to release
181
+ * @param {T} buffer - The buffer to release
182
+ * @param {number} size - The size of the buffer
183
+ */
184
+ static release(type, buffer, size) {
185
+ // Get the configuration for the specified type
186
+ const CONFIG = this.CONFIG[type];
187
+ // If the size of the buffer is less than or equal to the maximum item size, release it
188
+ if (size <= CONFIG.maxItemSize) {
189
+ // Release the buffer back to the pool ring
190
+ this.POOLS[type].release({ buffer, size });
191
+ }
192
+ }
193
+ }
194
+
195
+ exports.Pool = Pool;
196
+ //# sourceMappingURL=Pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pool.js","sources":["../../../src/utils/Pool.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ // CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
2
+ 'use strict';
3
+
4
+ /**
5
+ * Profiler Utility
6
+ * src/utils/profiler.ts
7
+ *
8
+ * @see https://en.wikipedia.org/wiki/Profiling_(computer_programming)
9
+ *
10
+ * This class provides methods to run synchronous and asynchronous functions, capturing
11
+ * their execution time and memory usage, and storing the results in a set of profiler
12
+ * entries. It supports both Node.js and browser environments, detecting the environment
13
+ * automatically.
14
+ *
15
+ * The class is optimized for minimal overhead and can be used for fine-grained
16
+ * performance profiling.
17
+ *
18
+ * @module Utils/Profiler
19
+ * @author Paul Köhler (komed3)
20
+ * @license MIT
21
+ */
22
+ /**
23
+ * Profiler class for measuring execution time and memory usage of functions.
24
+ */
25
+ class Profiler {
26
+ // Environment detection
27
+ static ENV;
28
+ // Singleton instance
29
+ static instance;
30
+ // Store for profiler entries
31
+ store = new Set();
32
+ // Total time and memory consumption
33
+ totalTime = 0;
34
+ totalMem = 0;
35
+ // The Profiler active state
36
+ active;
37
+ /**
38
+ * Sets the environment based on the available global objects.
39
+ * Detects if running in Node.js or browser and sets the ENV property accordingly.
40
+ */
41
+ static detectEnv() {
42
+ // Check for Node.js environment
43
+ if (typeof process !== 'undefined') Profiler.ENV = 'nodejs';
44
+ // Check for browser environment
45
+ else if (typeof performance !== 'undefined') Profiler.ENV = 'browser';
46
+ // If neither, set ENV to unknown
47
+ else Profiler.ENV = 'unknown';
48
+ }
49
+ /**
50
+ * Returns the singleton instance of the Perf class.
51
+ * If the instance does not exist, it creates a new one.
52
+ *
53
+ * @param {boolean} [enable=false] - Optional parameter to enable the profiler upon instantiation
54
+ * @returns {Profiler} - Singleton Profiler instance
55
+ */
56
+ static getInstance(enable) {
57
+ // Ensure the environment is detected
58
+ if (!Profiler.ENV) Profiler.detectEnv();
59
+ // If instance does not exist, create a new one
60
+ if (!Profiler.instance) Profiler.instance = new Profiler(enable);
61
+ // Return singleton instance
62
+ return Profiler.instance;
63
+ }
64
+ /**
65
+ * Private constructor to enforce singleton pattern.
66
+ * Initializes the store for profiler entries.
67
+ *
68
+ * @param {boolean} [enable=false] - Optional parameter to enable the profiler
69
+ */
70
+ constructor(enable) {
71
+ this.active = enable ?? false;
72
+ }
73
+ /**
74
+ * Gets the current time based on the environment.
75
+ *
76
+ * Uses process.hrtime.bigint() for Node.js, performance.now() for browsers,
77
+ * and Date.now() as a fallback.
78
+ *
79
+ * @returns {number} - Current time in milliseconds
80
+ */
81
+ now() {
82
+ switch (Profiler.ENV) {
83
+ // Node.js environment
84
+ case 'nodejs':
85
+ return Number(process.hrtime.bigint()) / 1e6;
86
+ // Browser environment
87
+ case 'browser':
88
+ return performance.now();
89
+ // Fallback
90
+ default:
91
+ return Date.now();
92
+ }
93
+ }
94
+ /**
95
+ * Gets the current memory usage based on the environment.
96
+ *
97
+ * Uses process.memoryUsage().heapUsed for Node.js, performance.memory.usedJSHeapSize
98
+ * for browsers, and returns 0 as a fallback.
99
+ *
100
+ * @returns {number} - Current memory usage in bytes
101
+ */
102
+ mem() {
103
+ switch (Profiler.ENV) {
104
+ // Node.js environment
105
+ case 'nodejs':
106
+ return process.memoryUsage().heapUsed;
107
+ // Browser environment
108
+ case 'browser':
109
+ return performance.memory?.usedJSHeapSize ?? 0;
110
+ // Fallback
111
+ default:
112
+ return 0;
113
+ }
114
+ }
115
+ /**
116
+ * Enables the profiler.
117
+ * Sets the active state to true, allowing profiling to occur.
118
+ */
119
+ enable() {
120
+ this.active = true;
121
+ }
122
+ /**
123
+ * Disables the profiler.
124
+ * Sets the active state to false, preventing further profiling.
125
+ */
126
+ disable() {
127
+ this.active = false;
128
+ }
129
+ /**
130
+ * Resets the profiler by clearing the store, total time and memory consumption.
131
+ * This method is useful for starting a new profiling session.
132
+ */
133
+ clear() {
134
+ this.store.clear();
135
+ this.totalTime = 0;
136
+ this.totalMem = 0;
137
+ }
138
+ /**
139
+ * Runs a synchronous function and profiles its execution time and memory usage.
140
+ * If the profiler is not active, it simply executes the function without profiling.
141
+ *
142
+ * @param {() => T} fn - Function to be executed and profiled
143
+ * @param {Record<string, any>} meta - Metadata to be associated with the profiling entry
144
+ * @returns {T} - The result of the executed function
145
+ */
146
+ run(fn, meta = {}) {
147
+ // If the profiler is not active, simply execute the function without profiling
148
+ if (!this.active) return fn();
149
+ // Capture the start time and memory usage
150
+ const startTime = this.now(),
151
+ startMem = this.mem();
152
+ // Execute the function and capture the result
153
+ const res = fn();
154
+ // Calculate the time and memory consumption
155
+ const deltaTime = this.now() - startTime;
156
+ const deltaMem = this.mem() - startMem;
157
+ // Add the profiling entry to the store
158
+ this.store.add({ time: deltaTime, mem: deltaMem, res, meta });
159
+ (this.totalTime += deltaTime), (this.totalMem += deltaMem);
160
+ // Return the result of the function
161
+ return res;
162
+ }
163
+ /**
164
+ * Runs an asynchronous function and profiles its execution time and memory usage.
165
+ * If the profiler is not active, it simply executes the function without profiling.
166
+ *
167
+ * @param {() => Promise<T>} fn - Asynchronous function to be executed and profiled
168
+ * @param {Record<string, any>} meta - Metadata to be associated with the profiling entry
169
+ * @returns {Promise<T>} - A promise that resolves to the result of the executed function
170
+ */
171
+ async runAsync(fn, meta = {}) {
172
+ // If the profiler is not active, simply execute the function without profiling
173
+ if (!this.active) return await fn();
174
+ // Capture the start time and memory usage
175
+ const startTime = this.now(),
176
+ startMem = this.mem();
177
+ // Execute the asynchronous function and wait for its result
178
+ const res = await fn();
179
+ // Calculate the time and memory consumption
180
+ const deltaTime = this.now() - startTime;
181
+ const deltaMem = this.mem() - startMem;
182
+ // Add the profiling entry to the store
183
+ this.store.add({ time: deltaTime, mem: deltaMem, res, meta });
184
+ (this.totalTime += deltaTime), (this.totalMem += deltaMem);
185
+ // Return the result of the function
186
+ return res;
187
+ }
188
+ /**
189
+ * Retrieves all profiler entries stored in the profiler.
190
+ *
191
+ * @returns {ProfilerEntry<any>[]} - An array of profiler entries
192
+ */
193
+ getAll() {
194
+ return [...this.store];
195
+ }
196
+ /**
197
+ * Retrieves the last profiler entry stored in the profiler.
198
+ *
199
+ * @returns {ProfilerEntry<any> | undefined} - The last profiler entry or undefined if no entries exist
200
+ */
201
+ getLast() {
202
+ return this.getAll().pop();
203
+ }
204
+ /**
205
+ * Retrieves the total time and memory consumption recorded by the profiler.
206
+ *
207
+ * @returns {{ time: number, mem: number }} - An object containing total time and memory usage
208
+ */
209
+ getTotal() {
210
+ return { time: this.totalTime, mem: this.totalMem };
211
+ }
212
+ /**
213
+ * Returns the services provided by the Profiler class.
214
+ * This allows for easy access to the profiler's methods.
215
+ *
216
+ * @returns {ProfilerService<any>} - An object containing methods to control the profiler
217
+ */
218
+ services = {
219
+ enable: this.enable.bind(this),
220
+ disable: this.disable.bind(this),
221
+ clear: this.clear.bind(this),
222
+ report: this.getAll.bind(this),
223
+ last: this.getLast.bind(this),
224
+ total: this.getTotal.bind(this)
225
+ };
226
+ }
227
+
228
+ exports.Profiler = Profiler;
229
+ //# sourceMappingURL=Profiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Profiler.js","sources":["../../../src/utils/Profiler.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ // CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
2
+ 'use strict';
3
+
4
+ /**
5
+ * Registry Utility
6
+ * src/utils/Registry.ts
7
+ *
8
+ * This module provides a Registry function that allows for registering,
9
+ * removing, checking, getting, and listing class constructors.
10
+ *
11
+ * It is designed to manage class extensions, ensuring that all registered
12
+ * classes extend a specified base constructor.
13
+ *
14
+ * @module Utils/Registry
15
+ * @author Paul Köhler (komed3)
16
+ * @license MIT
17
+ */
18
+ /**
19
+ * Global registry object to hold multiple registries.
20
+ * Each registry is keyed by a string identifier.
21
+ *
22
+ * @type {Record<string, RegistryService<any>>}
23
+ */
24
+ const registry = Object.create(null);
25
+ /**
26
+ * Factory object to hold factory functions for creating instances.
27
+ * This is used to create instances of registered classes.
28
+ *
29
+ * @type {Record<string, ( cls: string, ...args: any[] ) => InstanceType<any>>}
30
+ */
31
+ const factory = Object.create(null);
32
+ /**
33
+ * Registry function to create a service for managing class constructors.
34
+ *
35
+ * @param {string} reg - The name of the registry
36
+ * @param {RegistryConstructor<T>} ctor - The base constructor that all registered classes must extend
37
+ * @returns {RegistryService<T>} - An object with methods to register, remove, check, get, and list classes
38
+ * @throws {Error} If the registry already exists (overwriting is forbidden)
39
+ */
40
+ function Registry(reg, ctor) {
41
+ // Throws an error if the registry already exists
42
+ if (reg in registry || reg in factory)
43
+ throw new Error(
44
+ `registry <${reg}> already exists / overwriting is forbidden`
45
+ );
46
+ // Create a registry object to hold class constructors
47
+ const classes = Object.create(null);
48
+ const service = {
49
+ /**
50
+ * Register a new extension of the base class.
51
+ *
52
+ * @param {string} name - The name of the class to register
53
+ * @param {RegistryConstructor<T>} cls - The class constructor
54
+ * @param {boolean} [update=false] - Whether to allow overwriting an existing entry
55
+ * @throws {TypeError} If the class does not extend the base constructor
56
+ * @throws {Error} If the class name already exists and update is false
57
+ */
58
+ add(name, cls, update = false) {
59
+ if (!(cls.prototype instanceof ctor))
60
+ throw new TypeError(`class must extend <${reg}>`);
61
+ if (!update && name in classes)
62
+ throw new Error(
63
+ `entry <${name}> already exists / use <update=true> to overwrite`
64
+ );
65
+ classes[name] = cls;
66
+ },
67
+ /**
68
+ * Remove a class from the registry.
69
+ *
70
+ * @param {string} name - The name of the class to remove
71
+ */
72
+ remove(name) {
73
+ delete classes[name];
74
+ },
75
+ /**
76
+ * Check if a class is registered.
77
+ *
78
+ * @param {string} name - The name of the class to check
79
+ * @returns {boolean} - True if the class is registered, false otherwise
80
+ */
81
+ has(name) {
82
+ return name in classes;
83
+ },
84
+ /**
85
+ * List all registered class names.
86
+ *
87
+ * @returns {string[]} - An array of registered class names
88
+ */
89
+ list() {
90
+ return Object.keys(classes);
91
+ },
92
+ /**
93
+ * Get a registered class by name.
94
+ *
95
+ * @param {string} name - The name of the class to retrieve
96
+ * @returns {RegistryConstructor<T>} - The class constructor
97
+ * @throws {Error} If the class is not registered
98
+ */
99
+ get(name) {
100
+ if (!(name in classes))
101
+ throw new Error(`class <${name}> not registered for <${reg}>`);
102
+ return classes[name];
103
+ }
104
+ };
105
+ // Register the service in the global registry
106
+ registry[reg] = service;
107
+ // Create a factory function for creating instances from the registry
108
+ factory[reg] = (cls, ...args) => createFromRegistry(reg, cls, ...args);
109
+ // Return the service object
110
+ return service;
111
+ }
112
+ /**
113
+ * Resolve a class constructor from a specific registry.
114
+ *
115
+ * @param {string} reg - The name of the registry
116
+ * @param {T|string} cls - The class itself or name of the class to resolve
117
+ * @returns {T|undefined} - The class constructor if found, otherwise undefined
118
+ * @throws {ReferenceError} If the registry does not exist
119
+ */
120
+ function resolveCls(reg, cls) {
121
+ if (!(reg in registry))
122
+ throw new ReferenceError(`registry <${reg}> does not exist`);
123
+ return typeof cls === 'string' ? registry[reg]?.get(cls) : cls;
124
+ }
125
+ /**
126
+ * Create an instance of a class from a specific registry.
127
+ *
128
+ * @param {string} reg - The name of the registry
129
+ * @param {T|string} cls - The class itself or name of the class to instantiate
130
+ * @param {...any} args - Arguments to pass to the class constructor
131
+ * @returns {T} - An instance of the class
132
+ * @throws {Error} If the class cannot be instantiated
133
+ */
134
+ function createFromRegistry(reg, cls, ...args) {
135
+ cls = resolveCls(reg, cls);
136
+ try {
137
+ return new cls(...args);
138
+ } catch (err) {
139
+ throw new Error(`cannot instantiate class <${cls}>`);
140
+ }
141
+ }
142
+
143
+ exports.Registry = Registry;
144
+ exports.createFromRegistry = createFromRegistry;
145
+ exports.factory = factory;
146
+ exports.registry = registry;
147
+ exports.resolveCls = resolveCls;
148
+ //# sourceMappingURL=Registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.js","sources":["../../../src/utils/Registry.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}