@pawells/typescript-common 1.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 (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/build/array/array-chunk.d.ts +10 -0
  4. package/build/array/array-chunk.d.ts.map +1 -0
  5. package/build/array/array-chunk.js +19 -0
  6. package/build/array/array-chunk.js.map +1 -0
  7. package/build/array/array-compact.d.ts +18 -0
  8. package/build/array/array-compact.d.ts.map +1 -0
  9. package/build/array/array-compact.js +22 -0
  10. package/build/array/array-compact.js.map +1 -0
  11. package/build/array/array-contains.d.ts +9 -0
  12. package/build/array/array-contains.d.ts.map +1 -0
  13. package/build/array/array-contains.js +13 -0
  14. package/build/array/array-contains.js.map +1 -0
  15. package/build/array/array-count-by.d.ts +21 -0
  16. package/build/array/array-count-by.d.ts.map +1 -0
  17. package/build/array/array-count-by.js +29 -0
  18. package/build/array/array-count-by.js.map +1 -0
  19. package/build/array/array-difference.d.ts +25 -0
  20. package/build/array/array-difference.d.ts.map +1 -0
  21. package/build/array/array-difference.js +34 -0
  22. package/build/array/array-difference.js.map +1 -0
  23. package/build/array/array-element.d.ts +7 -0
  24. package/build/array/array-element.d.ts.map +1 -0
  25. package/build/array/array-element.js +2 -0
  26. package/build/array/array-element.js.map +1 -0
  27. package/build/array/array-filter.d.ts +37 -0
  28. package/build/array/array-filter.d.ts.map +1 -0
  29. package/build/array/array-filter.js +78 -0
  30. package/build/array/array-filter.js.map +1 -0
  31. package/build/array/array-flatten.d.ts +16 -0
  32. package/build/array/array-flatten.d.ts.map +1 -0
  33. package/build/array/array-flatten.js +20 -0
  34. package/build/array/array-flatten.js.map +1 -0
  35. package/build/array/array-group-by.d.ts +13 -0
  36. package/build/array/array-group-by.d.ts.map +1 -0
  37. package/build/array/array-group-by.js +24 -0
  38. package/build/array/array-group-by.js.map +1 -0
  39. package/build/array/array-intersection.d.ts +25 -0
  40. package/build/array/array-intersection.d.ts.map +1 -0
  41. package/build/array/array-intersection.js +39 -0
  42. package/build/array/array-intersection.js.map +1 -0
  43. package/build/array/array-partition.d.ts +19 -0
  44. package/build/array/array-partition.d.ts.map +1 -0
  45. package/build/array/array-partition.js +32 -0
  46. package/build/array/array-partition.js.map +1 -0
  47. package/build/array/array-range.d.ts +18 -0
  48. package/build/array/array-range.d.ts.map +1 -0
  49. package/build/array/array-range.js +30 -0
  50. package/build/array/array-range.js.map +1 -0
  51. package/build/array/array-sample.d.ts +29 -0
  52. package/build/array/array-sample.d.ts.map +1 -0
  53. package/build/array/array-sample.js +19 -0
  54. package/build/array/array-sample.js.map +1 -0
  55. package/build/array/array-shuffle.d.ts +8 -0
  56. package/build/array/array-shuffle.d.ts.map +1 -0
  57. package/build/array/array-shuffle.js +19 -0
  58. package/build/array/array-shuffle.js.map +1 -0
  59. package/build/array/array-sort-by.d.ts +20 -0
  60. package/build/array/array-sort-by.d.ts.map +1 -0
  61. package/build/array/array-sort-by.js +31 -0
  62. package/build/array/array-sort-by.js.map +1 -0
  63. package/build/array/array-zip.d.ts +22 -0
  64. package/build/array/array-zip.d.ts.map +1 -0
  65. package/build/array/array-zip.js +25 -0
  66. package/build/array/array-zip.js.map +1 -0
  67. package/build/array/array.test.d.ts +2 -0
  68. package/build/array/array.test.d.ts.map +1 -0
  69. package/build/array/array.test.js +347 -0
  70. package/build/array/array.test.js.map +1 -0
  71. package/build/array/index.d.ts +27 -0
  72. package/build/array/index.d.ts.map +1 -0
  73. package/build/array/index.js +25 -0
  74. package/build/array/index.js.map +1 -0
  75. package/build/array/types.d.ts +32 -0
  76. package/build/array/types.d.ts.map +1 -0
  77. package/build/array/types.js +2 -0
  78. package/build/array/types.js.map +1 -0
  79. package/build/array/unique.d.ts +8 -0
  80. package/build/array/unique.d.ts.map +1 -0
  81. package/build/array/unique.js +13 -0
  82. package/build/array/unique.js.map +1 -0
  83. package/build/enum/enum-entries.d.ts +11 -0
  84. package/build/enum/enum-entries.d.ts.map +1 -0
  85. package/build/enum/enum-entries.js +14 -0
  86. package/build/enum/enum-entries.js.map +1 -0
  87. package/build/enum/enum-key-by-value.d.ts +13 -0
  88. package/build/enum/enum-key-by-value.d.ts.map +1 -0
  89. package/build/enum/enum-key-by-value.js +21 -0
  90. package/build/enum/enum-key-by-value.js.map +1 -0
  91. package/build/enum/enum-keys.d.ts +10 -0
  92. package/build/enum/enum-keys.d.ts.map +1 -0
  93. package/build/enum/enum-keys.js +14 -0
  94. package/build/enum/enum-keys.js.map +1 -0
  95. package/build/enum/enum-safe-value.d.ts +14 -0
  96. package/build/enum/enum-safe-value.d.ts.map +1 -0
  97. package/build/enum/enum-safe-value.js +16 -0
  98. package/build/enum/enum-safe-value.js.map +1 -0
  99. package/build/enum/enum-values.d.ts +19 -0
  100. package/build/enum/enum-values.d.ts.map +1 -0
  101. package/build/enum/enum-values.js +25 -0
  102. package/build/enum/enum-values.js.map +1 -0
  103. package/build/enum/enum.test.d.ts +2 -0
  104. package/build/enum/enum.test.d.ts.map +1 -0
  105. package/build/enum/enum.test.js +122 -0
  106. package/build/enum/enum.test.js.map +1 -0
  107. package/build/enum/index.d.ts +17 -0
  108. package/build/enum/index.d.ts.map +1 -0
  109. package/build/enum/index.js +17 -0
  110. package/build/enum/index.js.map +1 -0
  111. package/build/enum/types.d.ts +9 -0
  112. package/build/enum/types.d.ts.map +1 -0
  113. package/build/enum/types.js +2 -0
  114. package/build/enum/types.js.map +1 -0
  115. package/build/enum/validate-enum-value.d.ts +13 -0
  116. package/build/enum/validate-enum-value.d.ts.map +1 -0
  117. package/build/enum/validate-enum-value.js +18 -0
  118. package/build/enum/validate-enum-value.js.map +1 -0
  119. package/build/function/compose.d.ts +37 -0
  120. package/build/function/compose.d.ts.map +1 -0
  121. package/build/function/compose.js +7 -0
  122. package/build/function/compose.js.map +1 -0
  123. package/build/function/debounce.d.ts +25 -0
  124. package/build/function/debounce.d.ts.map +1 -0
  125. package/build/function/debounce.js +37 -0
  126. package/build/function/debounce.js.map +1 -0
  127. package/build/function/function.test.d.ts +2 -0
  128. package/build/function/function.test.d.ts.map +1 -0
  129. package/build/function/function.test.js +158 -0
  130. package/build/function/function.test.js.map +1 -0
  131. package/build/function/index.d.ts +17 -0
  132. package/build/function/index.d.ts.map +1 -0
  133. package/build/function/index.js +16 -0
  134. package/build/function/index.js.map +1 -0
  135. package/build/function/memoize.d.ts +23 -0
  136. package/build/function/memoize.d.ts.map +1 -0
  137. package/build/function/memoize.js +34 -0
  138. package/build/function/memoize.js.map +1 -0
  139. package/build/function/once.d.ts +17 -0
  140. package/build/function/once.d.ts.map +1 -0
  141. package/build/function/once.js +27 -0
  142. package/build/function/once.js.map +1 -0
  143. package/build/function/sleep.d.ts +20 -0
  144. package/build/function/sleep.d.ts.map +1 -0
  145. package/build/function/sleep.js +22 -0
  146. package/build/function/sleep.js.map +1 -0
  147. package/build/function/throttle.d.ts +17 -0
  148. package/build/function/throttle.d.ts.map +1 -0
  149. package/build/function/throttle.js +37 -0
  150. package/build/function/throttle.js.map +1 -0
  151. package/build/function/types.d.ts +5 -0
  152. package/build/function/types.d.ts.map +1 -0
  153. package/build/function/types.js +2 -0
  154. package/build/function/types.js.map +1 -0
  155. package/build/index.d.ts +32 -0
  156. package/build/index.d.ts.map +1 -0
  157. package/build/index.js +51 -0
  158. package/build/index.js.map +1 -0
  159. package/build/object/assert-object.d.ts +8 -0
  160. package/build/object/assert-object.d.ts.map +1 -0
  161. package/build/object/assert-object.js +10 -0
  162. package/build/object/assert-object.js.map +1 -0
  163. package/build/object/clone.d.ts +39 -0
  164. package/build/object/clone.d.ts.map +1 -0
  165. package/build/object/clone.js +85 -0
  166. package/build/object/clone.js.map +1 -0
  167. package/build/object/equals.d.ts +44 -0
  168. package/build/object/equals.d.ts.map +1 -0
  169. package/build/object/equals.js +104 -0
  170. package/build/object/equals.js.map +1 -0
  171. package/build/object/filter-cached.d.ts +9 -0
  172. package/build/object/filter-cached.d.ts.map +1 -0
  173. package/build/object/filter-cached.js +108 -0
  174. package/build/object/filter-cached.js.map +1 -0
  175. package/build/object/filter.d.ts +85 -0
  176. package/build/object/filter.d.ts.map +1 -0
  177. package/build/object/filter.js +248 -0
  178. package/build/object/filter.js.map +1 -0
  179. package/build/object/has-circular-reference.d.ts +8 -0
  180. package/build/object/has-circular-reference.d.ts.map +1 -0
  181. package/build/object/has-circular-reference.js +40 -0
  182. package/build/object/has-circular-reference.js.map +1 -0
  183. package/build/object/hash.d.ts +20 -0
  184. package/build/object/hash.d.ts.map +1 -0
  185. package/build/object/hash.js +39 -0
  186. package/build/object/hash.js.map +1 -0
  187. package/build/object/index.d.ts +32 -0
  188. package/build/object/index.d.ts.map +1 -0
  189. package/build/object/index.js +30 -0
  190. package/build/object/index.js.map +1 -0
  191. package/build/object/key-value-pairs.d.ts +21 -0
  192. package/build/object/key-value-pairs.d.ts.map +1 -0
  193. package/build/object/key-value-pairs.js +28 -0
  194. package/build/object/key-value-pairs.js.map +1 -0
  195. package/build/object/map-cached.d.ts +9 -0
  196. package/build/object/map-cached.d.ts.map +1 -0
  197. package/build/object/map-cached.js +97 -0
  198. package/build/object/map-cached.js.map +1 -0
  199. package/build/object/map.d.ts +29 -0
  200. package/build/object/map.d.ts.map +1 -0
  201. package/build/object/map.js +40 -0
  202. package/build/object/map.js.map +1 -0
  203. package/build/object/merge.d.ts +14 -0
  204. package/build/object/merge.d.ts.map +1 -0
  205. package/build/object/merge.js +41 -0
  206. package/build/object/merge.js.map +1 -0
  207. package/build/object/object-diff.d.ts +40 -0
  208. package/build/object/object-diff.d.ts.map +1 -0
  209. package/build/object/object-diff.js +45 -0
  210. package/build/object/object-diff.js.map +1 -0
  211. package/build/object/object-flatten.d.ts +22 -0
  212. package/build/object/object-flatten.d.ts.map +1 -0
  213. package/build/object/object-flatten.js +38 -0
  214. package/build/object/object-flatten.js.map +1 -0
  215. package/build/object/object-invert.d.ts +20 -0
  216. package/build/object/object-invert.d.ts.map +1 -0
  217. package/build/object/object-invert.js +26 -0
  218. package/build/object/object-invert.js.map +1 -0
  219. package/build/object/object.test.d.ts +2 -0
  220. package/build/object/object.test.d.ts.map +1 -0
  221. package/build/object/object.test.js +432 -0
  222. package/build/object/object.test.js.map +1 -0
  223. package/build/object/omit.d.ts +8 -0
  224. package/build/object/omit.d.ts.map +1 -0
  225. package/build/object/omit.js +17 -0
  226. package/build/object/omit.js.map +1 -0
  227. package/build/object/pick.d.ts +50 -0
  228. package/build/object/pick.d.ts.map +1 -0
  229. package/build/object/pick.js +60 -0
  230. package/build/object/pick.js.map +1 -0
  231. package/build/object/property-paths.d.ts +115 -0
  232. package/build/object/property-paths.d.ts.map +1 -0
  233. package/build/object/property-paths.js +170 -0
  234. package/build/object/property-paths.js.map +1 -0
  235. package/build/object/security-utils.d.ts +59 -0
  236. package/build/object/security-utils.d.ts.map +1 -0
  237. package/build/object/security-utils.js +165 -0
  238. package/build/object/security-utils.js.map +1 -0
  239. package/build/object/sort-keys.d.ts +26 -0
  240. package/build/object/sort-keys.d.ts.map +1 -0
  241. package/build/object/sort-keys.js +52 -0
  242. package/build/object/sort-keys.js.map +1 -0
  243. package/build/object/types.d.ts +152 -0
  244. package/build/object/types.d.ts.map +1 -0
  245. package/build/object/types.js +6 -0
  246. package/build/object/types.js.map +1 -0
  247. package/build/string/case-conversion.d.ts +50 -0
  248. package/build/string/case-conversion.d.ts.map +1 -0
  249. package/build/string/case-conversion.js +94 -0
  250. package/build/string/case-conversion.js.map +1 -0
  251. package/build/string/formatting.d.ts +108 -0
  252. package/build/string/formatting.d.ts.map +1 -0
  253. package/build/string/formatting.js +171 -0
  254. package/build/string/formatting.js.map +1 -0
  255. package/build/string/index.d.ts +15 -0
  256. package/build/string/index.d.ts.map +1 -0
  257. package/build/string/index.js +14 -0
  258. package/build/string/index.js.map +1 -0
  259. package/build/string/string.test.d.ts +2 -0
  260. package/build/string/string.test.d.ts.map +1 -0
  261. package/build/string/string.test.js +321 -0
  262. package/build/string/string.test.js.map +1 -0
  263. package/build/string/transformation.d.ts +18 -0
  264. package/build/string/transformation.d.ts.map +1 -0
  265. package/build/string/transformation.js +32 -0
  266. package/build/string/transformation.js.map +1 -0
  267. package/build/string/types.d.ts +44 -0
  268. package/build/string/types.d.ts.map +1 -0
  269. package/build/string/types.js +2 -0
  270. package/build/string/types.js.map +1 -0
  271. package/build/string/validation.d.ts +18 -0
  272. package/build/string/validation.d.ts.map +1 -0
  273. package/build/string/validation.js +26 -0
  274. package/build/string/validation.js.map +1 -0
  275. package/build/time/elapsed-time/constants.d.ts +10 -0
  276. package/build/time/elapsed-time/constants.d.ts.map +1 -0
  277. package/build/time/elapsed-time/constants.js +96 -0
  278. package/build/time/elapsed-time/constants.js.map +1 -0
  279. package/build/time/elapsed-time/elapsed-time.d.ts +412 -0
  280. package/build/time/elapsed-time/elapsed-time.d.ts.map +1 -0
  281. package/build/time/elapsed-time/elapsed-time.js +652 -0
  282. package/build/time/elapsed-time/elapsed-time.js.map +1 -0
  283. package/build/time/elapsed-time/types.d.ts +150 -0
  284. package/build/time/elapsed-time/types.d.ts.map +1 -0
  285. package/build/time/elapsed-time/types.js +2 -0
  286. package/build/time/elapsed-time/types.js.map +1 -0
  287. package/build/time/elapsed-time/utils.d.ts +18 -0
  288. package/build/time/elapsed-time/utils.d.ts.map +1 -0
  289. package/build/time/elapsed-time/utils.js +24 -0
  290. package/build/time/elapsed-time/utils.js.map +1 -0
  291. package/build/time/index.d.ts +18 -0
  292. package/build/time/index.d.ts.map +1 -0
  293. package/build/time/index.js +17 -0
  294. package/build/time/index.js.map +1 -0
  295. package/build/time/stopwatch/entry-types.d.ts +13 -0
  296. package/build/time/stopwatch/entry-types.d.ts.map +1 -0
  297. package/build/time/stopwatch/entry-types.js +2 -0
  298. package/build/time/stopwatch/entry-types.js.map +1 -0
  299. package/build/time/stopwatch/entry.d.ts +80 -0
  300. package/build/time/stopwatch/entry.d.ts.map +1 -0
  301. package/build/time/stopwatch/entry.js +105 -0
  302. package/build/time/stopwatch/entry.js.map +1 -0
  303. package/build/time/stopwatch/stopwatch.d.ts +232 -0
  304. package/build/time/stopwatch/stopwatch.d.ts.map +1 -0
  305. package/build/time/stopwatch/stopwatch.js +315 -0
  306. package/build/time/stopwatch/stopwatch.js.map +1 -0
  307. package/build/time/time.test.d.ts +2 -0
  308. package/build/time/time.test.d.ts.map +1 -0
  309. package/build/time/time.test.js +211 -0
  310. package/build/time/time.test.js.map +1 -0
  311. package/package.json +63 -0
@@ -0,0 +1,211 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { ElapsedTime } from './elapsed-time/elapsed-time.js';
3
+ import { Stopwatch } from './stopwatch/stopwatch.js';
4
+ // ----- ElapsedTime -----
5
+ describe('ElapsedTime', () => {
6
+ describe('constructor and basic properties', () => {
7
+ it('stores positive milliseconds', () => {
8
+ const et = new ElapsedTime(5000);
9
+ expect(et.TotalMilliseconds).toBe(5000);
10
+ expect(et.IsNegative).toBe(false);
11
+ });
12
+ it('stores the absolute value and sets negative flag', () => {
13
+ const et = new ElapsedTime(-5000);
14
+ expect(et.TotalMilliseconds).toBe(5000);
15
+ expect(et.IsNegative).toBe(true);
16
+ });
17
+ it('handles zero milliseconds', () => {
18
+ const et = new ElapsedTime(0);
19
+ expect(et.TotalMilliseconds).toBe(0);
20
+ expect(et.IsNegative).toBe(false);
21
+ });
22
+ });
23
+ describe('From()', () => {
24
+ it('computes elapsed time between start and stop', () => {
25
+ const et = ElapsedTime.From(1000, 3500);
26
+ expect(et.TotalMilliseconds).toBe(2500);
27
+ });
28
+ it('produces a negative elapsed time when stop < start', () => {
29
+ const et = ElapsedTime.From(5000, 3000);
30
+ expect(et.IsNegative).toBe(true);
31
+ });
32
+ });
33
+ describe('Format()', () => {
34
+ it('formats CONCISE correctly', () => {
35
+ const et = new ElapsedTime(3661000); // 1h 1m 1s
36
+ const result = et.Format('concise');
37
+ expect(result).toContain('h');
38
+ expect(result).toContain('m');
39
+ });
40
+ it('formats LONG correctly with pluralization', () => {
41
+ const et = new ElapsedTime(7322000); // 2h 2m 2s
42
+ const result = et.Format('long');
43
+ expect(result).toContain('hours');
44
+ expect(result).toContain('minutes');
45
+ expect(result).toContain('seconds');
46
+ });
47
+ it('formats LONG singly for 1 unit', () => {
48
+ const et = new ElapsedTime(3661000); // 1h 1m 1s
49
+ const result = et.Format('long');
50
+ expect(result).toContain('hour');
51
+ expect(result).toContain('minute');
52
+ expect(result).toContain('second');
53
+ });
54
+ it('formats TIME as hh:mm', () => {
55
+ const et = new ElapsedTime(3661000); // 1h 1m 1s
56
+ const result = et.Format('time');
57
+ expect(result).toMatch(/\d+:\d+/);
58
+ });
59
+ it('formats TIME_WITH_SECONDS as hh:mm:ss', () => {
60
+ const et = new ElapsedTime(3661000);
61
+ const result = et.Format('timeWithSeconds');
62
+ expect(result).toMatch(/\d+:\d+:\d+/);
63
+ });
64
+ it('produces "0 seconds" for zero duration in LONG format', () => {
65
+ const et = new ElapsedTime(0);
66
+ expect(et.Format('long')).toBe('0 seconds');
67
+ });
68
+ it('supports maxUnits option', () => {
69
+ const et = new ElapsedTime(3661500); // 1h 1m 1s 500ms
70
+ const result = et.Format('long', { maxUnits: 2 });
71
+ // Should only show 2 units
72
+ const parts = result.split(' ').filter((p) => /^(hour|minute|second|millisecond|day|week)/.test(p));
73
+ expect(parts.length).toBeLessThanOrEqual(2);
74
+ });
75
+ });
76
+ describe('static Format()', () => {
77
+ it('formats milliseconds directly', () => {
78
+ const result = ElapsedTime.Format(3600000); // 1h
79
+ expect(result).toContain('h');
80
+ });
81
+ });
82
+ });
83
+ // ----- Stopwatch -----
84
+ describe('Stopwatch', () => {
85
+ let now;
86
+ beforeEach(() => {
87
+ now = 1000;
88
+ vi.spyOn(Date, 'now').mockImplementation(() => now);
89
+ });
90
+ afterEach(() => {
91
+ vi.restoreAllMocks();
92
+ });
93
+ describe('initial state', () => {
94
+ it('is not running when created without startImmediately', () => {
95
+ const sw = new Stopwatch();
96
+ expect(sw.Running).toBe(false);
97
+ });
98
+ it('starts running when created with startImmediately=true', () => {
99
+ const sw = new Stopwatch(true);
100
+ expect(sw.Running).toBe(true);
101
+ });
102
+ it('has undefined First and Latest', () => {
103
+ const sw = new Stopwatch();
104
+ expect(sw.First).toBeUndefined();
105
+ expect(sw.Latest).toBeUndefined();
106
+ });
107
+ it('returns zero elapsed time before start', () => {
108
+ const sw = new Stopwatch();
109
+ expect(sw.Elapsed.TotalMilliseconds).toBe(0);
110
+ });
111
+ });
112
+ describe('Start()', () => {
113
+ it('starts the stopwatch', () => {
114
+ const sw = new Stopwatch();
115
+ sw.Start();
116
+ expect(sw.Running).toBe(true);
117
+ });
118
+ it('returns the first entry', () => {
119
+ const sw = new Stopwatch();
120
+ const entry = sw.Start();
121
+ expect(entry).toBeDefined();
122
+ });
123
+ it('does not start again if already started', () => {
124
+ const sw = new Stopwatch();
125
+ const e1 = sw.Start();
126
+ const e2 = sw.Start();
127
+ expect(e1).toBe(e2);
128
+ });
129
+ });
130
+ describe('Stop()', () => {
131
+ it('stops a running stopwatch', () => {
132
+ const sw = new Stopwatch();
133
+ sw.Start();
134
+ now = 2000;
135
+ sw.Stop();
136
+ expect(sw.Running).toBe(false);
137
+ });
138
+ it('returns undefined when not started', () => {
139
+ const sw = new Stopwatch();
140
+ expect(sw.Stop()).toBeUndefined();
141
+ });
142
+ it('records the correct elapsed time', () => {
143
+ const sw = new Stopwatch();
144
+ sw.Start();
145
+ now = 3000;
146
+ sw.Stop();
147
+ expect(sw.Elapsed.TotalMilliseconds).toBe(2000);
148
+ });
149
+ });
150
+ describe('Pause() and Resume()', () => {
151
+ it('pauses a running stopwatch', () => {
152
+ const sw = new Stopwatch(true);
153
+ sw.Pause();
154
+ expect(sw.Running).toBe(false);
155
+ expect(sw.PausedAt).not.toBeNull();
156
+ });
157
+ it('resumes a paused stopwatch', () => {
158
+ const sw = new Stopwatch(true);
159
+ sw.Pause();
160
+ sw.Resume();
161
+ expect(sw.Running).toBe(true);
162
+ expect(sw.PausedAt).toBeNull();
163
+ });
164
+ it('returns null when Resume is called without Pause', () => {
165
+ const sw = new Stopwatch(true);
166
+ expect(sw.Resume()).toBeNull();
167
+ });
168
+ it('returns null when Pause is called on a not-started stopwatch', () => {
169
+ const sw = new Stopwatch();
170
+ expect(sw.Pause()).toBeNull();
171
+ });
172
+ });
173
+ describe('Lap()', () => {
174
+ it('returns elapsed time since last lap/click', () => {
175
+ const sw = new Stopwatch(true);
176
+ now = 1500;
177
+ const lap = sw.Lap();
178
+ expect(lap.TotalMilliseconds).toBe(500);
179
+ });
180
+ it('returns zero for first lap with no previous entry', () => {
181
+ const sw = new Stopwatch();
182
+ const lap = sw.Lap();
183
+ expect(lap.TotalMilliseconds).toBe(0);
184
+ });
185
+ });
186
+ describe('Reset()', () => {
187
+ it('resets times and running state', () => {
188
+ const sw = new Stopwatch(true);
189
+ sw.Stop();
190
+ sw.Reset();
191
+ expect(sw.Running).toBe(false);
192
+ expect(sw.Times).toHaveLength(0);
193
+ });
194
+ });
195
+ describe('Elapsed', () => {
196
+ it('is calculated relative to the first entry', () => {
197
+ const sw = new Stopwatch(true);
198
+ now = 5000;
199
+ expect(sw.Elapsed.TotalMilliseconds).toBe(4000);
200
+ });
201
+ it('is frozen at stop time after Stop()', () => {
202
+ const sw = new Stopwatch(true);
203
+ now = 3000;
204
+ sw.Stop();
205
+ // Advance time further - elapsed should not change
206
+ now = 9000;
207
+ expect(sw.Elapsed.TotalMilliseconds).toBe(2000);
208
+ });
209
+ });
210
+ });
211
+ //# sourceMappingURL=time.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.test.js","sourceRoot":"","sources":["../../src/time/time.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@pawells/typescript-common",
3
+ "displayName": "TypeScript Common Utilities",
4
+ "version": "1.0.0",
5
+ "description": "Shared TypeScript utility library — array, object, string, time, and enum helpers. ESM-only, no runtime dependencies.",
6
+ "type": "module",
7
+ "main": "./build/index.js",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "start": "node build/index.js",
11
+ "dev": "tsc && node build/index.js",
12
+ "watch": "tsc --watch",
13
+ "typecheck": "tsc --noEmit",
14
+ "lint": "eslint src/",
15
+ "lint:fix": "eslint src/ --fix",
16
+ "test": "vitest run",
17
+ "test:ui": "vitest --ui",
18
+ "test:coverage": "vitest --coverage",
19
+ "prepublishOnly": "npm run build",
20
+ "prepare": "husky"
21
+ },
22
+ "dependencies": {},
23
+ "devDependencies": {
24
+ "@eslint/js": "^10.0.1",
25
+ "@stylistic/eslint-plugin": "^5.9.0",
26
+ "@types/node": "^25.3.0",
27
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
28
+ "@typescript-eslint/parser": "^8.0.0",
29
+ "@vitest/coverage-v8": "^4.0.18",
30
+ "@vitest/ui": "^4.0.18",
31
+ "eslint": "^10.0.1",
32
+ "eslint-import-resolver-typescript": "^4.4.4",
33
+ "eslint-plugin-import": "^2.31.0",
34
+ "eslint-plugin-unused-imports": "^4.0.0",
35
+ "globals": "^17.3.0",
36
+ "husky": "^9.1.7",
37
+ "typescript": "^5.3.3",
38
+ "vitest": "^4.0.18"
39
+ },
40
+ "keywords": [],
41
+ "author": "Phillip Aaron Wells",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/PhillipAWells/typescript-common.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/PhillipAWells/typescript-common/issues"
49
+ },
50
+ "homepage": "https://github.com/PhillipAWells/typescript-common#readme",
51
+ "engines": {
52
+ "node": ">=24.0.0"
53
+ },
54
+ "files": [
55
+ "build/",
56
+ "README.md",
57
+ "LICENSE",
58
+ ".env.example"
59
+ ],
60
+ "publishConfig": {
61
+ "access": "public"
62
+ }
63
+ }