@develia/commons 0.4.14 → 0.4.16

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 (230) hide show
  1. package/dist/cjs/array.js +43 -1
  2. package/dist/cjs/array.js.map +1 -1
  3. package/dist/cjs/async-pool-executor.js +15 -0
  4. package/dist/cjs/async-pool-executor.js.map +1 -1
  5. package/dist/cjs/browser/form-utilities.js +26 -0
  6. package/dist/cjs/browser/form-utilities.js.map +1 -1
  7. package/dist/cjs/browser/geo-location.js +5 -0
  8. package/dist/cjs/browser/geo-location.js.map +1 -1
  9. package/dist/cjs/browser/index.js.map +1 -1
  10. package/dist/cjs/browser/native-bridge.js +9 -0
  11. package/dist/cjs/browser/native-bridge.js.map +1 -1
  12. package/dist/cjs/cancellable-promise.js.map +1 -1
  13. package/dist/cjs/clean-url-search-params.js +1 -0
  14. package/dist/cjs/clean-url-search-params.js.map +1 -1
  15. package/dist/cjs/collections/cache-dictionary.js +39 -0
  16. package/dist/cjs/collections/cache-dictionary.js.map +1 -1
  17. package/dist/cjs/collections/default-map.js +25 -1
  18. package/dist/cjs/collections/default-map.js.map +1 -1
  19. package/dist/cjs/collections/default-weak-map.js +23 -3
  20. package/dist/cjs/collections/default-weak-map.js.map +1 -1
  21. package/dist/cjs/{from.js → collections/from.js} +278 -4
  22. package/dist/cjs/collections/from.js.map +1 -0
  23. package/dist/cjs/collections/index.js +3 -1
  24. package/dist/cjs/collections/index.js.map +1 -1
  25. package/dist/cjs/draft.js +37 -0
  26. package/dist/cjs/draft.js.map +1 -1
  27. package/dist/cjs/event-bus.js +1 -0
  28. package/dist/cjs/event-bus.js.map +1 -1
  29. package/dist/cjs/index.js +16 -3
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/key-value-pair.js +6 -0
  32. package/dist/cjs/key-value-pair.js.map +1 -1
  33. package/dist/cjs/lazy.js +4 -0
  34. package/dist/cjs/lazy.js.map +1 -1
  35. package/dist/cjs/math.js +19 -0
  36. package/dist/cjs/math.js.map +1 -1
  37. package/dist/cjs/order.js.map +1 -1
  38. package/dist/cjs/parse.js +96 -0
  39. package/dist/cjs/parse.js.map +1 -1
  40. package/dist/cjs/patch.js +10 -2
  41. package/dist/cjs/patch.js.map +1 -1
  42. package/dist/cjs/range.js +154 -0
  43. package/dist/cjs/range.js.map +1 -0
  44. package/dist/cjs/stopwatch.js +10 -0
  45. package/dist/cjs/stopwatch.js.map +1 -1
  46. package/dist/cjs/string.js +62 -0
  47. package/dist/cjs/string.js.map +1 -1
  48. package/dist/cjs/timer.js +7 -0
  49. package/dist/cjs/timer.js.map +1 -1
  50. package/dist/cjs/timespan.js +202 -0
  51. package/dist/cjs/timespan.js.map +1 -1
  52. package/dist/cjs/type-code.js.map +1 -1
  53. package/dist/cjs/type.js +80 -1
  54. package/dist/cjs/type.js.map +1 -1
  55. package/dist/cjs/types.js.map +1 -1
  56. package/dist/cjs/utilities.js +183 -0
  57. package/dist/cjs/utilities.js.map +1 -1
  58. package/dist/esm/array.js +42 -1
  59. package/dist/esm/array.js.map +1 -1
  60. package/dist/esm/async-pool-executor.js +15 -0
  61. package/dist/esm/async-pool-executor.js.map +1 -1
  62. package/dist/esm/browser/form-utilities.js +26 -0
  63. package/dist/esm/browser/form-utilities.js.map +1 -1
  64. package/dist/esm/browser/geo-location.js +5 -0
  65. package/dist/esm/browser/geo-location.js.map +1 -1
  66. package/dist/esm/browser/index.js.map +1 -1
  67. package/dist/esm/browser/native-bridge.js +9 -0
  68. package/dist/esm/browser/native-bridge.js.map +1 -1
  69. package/dist/esm/cancellable-promise.js.map +1 -1
  70. package/dist/esm/clean-url-search-params.js +1 -0
  71. package/dist/esm/clean-url-search-params.js.map +1 -1
  72. package/dist/esm/collections/cache-dictionary.js +39 -0
  73. package/dist/esm/collections/cache-dictionary.js.map +1 -1
  74. package/dist/esm/collections/default-map.js +25 -1
  75. package/dist/esm/collections/default-map.js.map +1 -1
  76. package/dist/esm/collections/default-weak-map.js +22 -2
  77. package/dist/esm/collections/default-weak-map.js.map +1 -1
  78. package/dist/esm/{from.js → collections/from.js} +278 -4
  79. package/dist/esm/collections/from.js.map +1 -0
  80. package/dist/esm/collections/index.js +1 -0
  81. package/dist/esm/collections/index.js.map +1 -1
  82. package/dist/esm/draft.js +37 -0
  83. package/dist/esm/draft.js.map +1 -1
  84. package/dist/esm/event-bus.js +1 -0
  85. package/dist/esm/event-bus.js.map +1 -1
  86. package/dist/esm/index.js +14 -1
  87. package/dist/esm/index.js.map +1 -1
  88. package/dist/esm/key-value-pair.js +6 -0
  89. package/dist/esm/key-value-pair.js.map +1 -1
  90. package/dist/esm/lazy.js +4 -0
  91. package/dist/esm/lazy.js.map +1 -1
  92. package/dist/esm/math.js +19 -0
  93. package/dist/esm/math.js.map +1 -1
  94. package/dist/esm/order.js.map +1 -1
  95. package/dist/esm/parse.js +96 -0
  96. package/dist/esm/parse.js.map +1 -1
  97. package/dist/esm/patch.js +10 -2
  98. package/dist/esm/patch.js.map +1 -1
  99. package/dist/esm/range.js +151 -0
  100. package/dist/esm/range.js.map +1 -0
  101. package/dist/esm/stopwatch.js +10 -0
  102. package/dist/esm/stopwatch.js.map +1 -1
  103. package/dist/esm/string.js +62 -0
  104. package/dist/esm/string.js.map +1 -1
  105. package/dist/esm/timer.js +7 -0
  106. package/dist/esm/timer.js.map +1 -1
  107. package/dist/esm/timespan.js +202 -0
  108. package/dist/esm/timespan.js.map +1 -1
  109. package/dist/esm/type-code.js.map +1 -1
  110. package/dist/esm/type.js +80 -1
  111. package/dist/esm/type.js.map +1 -1
  112. package/dist/esm/types.js.map +1 -1
  113. package/dist/esm/utilities.js +183 -0
  114. package/dist/esm/utilities.js.map +1 -1
  115. package/dist/types/array.d.ts +35 -0
  116. package/dist/types/array.d.ts.map +1 -1
  117. package/dist/types/async-pool-executor.d.ts +15 -0
  118. package/dist/types/async-pool-executor.d.ts.map +1 -1
  119. package/dist/types/browser/form-utilities.d.ts +13 -0
  120. package/dist/types/browser/form-utilities.d.ts.map +1 -1
  121. package/dist/types/browser/index.d.ts.map +1 -1
  122. package/dist/types/browser/native-bridge.d.ts +6 -0
  123. package/dist/types/browser/native-bridge.d.ts.map +1 -1
  124. package/dist/types/collections/cache-dictionary.d.ts +39 -0
  125. package/dist/types/collections/cache-dictionary.d.ts.map +1 -1
  126. package/dist/types/collections/default-map.d.ts +23 -0
  127. package/dist/types/collections/default-map.d.ts.map +1 -1
  128. package/dist/types/collections/default-weak-map.d.ts +20 -1
  129. package/dist/types/collections/default-weak-map.d.ts.map +1 -1
  130. package/dist/types/collections/from.d.ts +333 -0
  131. package/dist/types/collections/from.d.ts.map +1 -0
  132. package/dist/types/collections/index.d.ts +1 -0
  133. package/dist/types/collections/index.d.ts.map +1 -1
  134. package/dist/types/draft.d.ts +68 -0
  135. package/dist/types/draft.d.ts.map +1 -1
  136. package/dist/types/index.d.ts +5 -1
  137. package/dist/types/index.d.ts.map +1 -1
  138. package/dist/types/key-value-pair.d.ts +6 -0
  139. package/dist/types/key-value-pair.d.ts.map +1 -1
  140. package/dist/types/lazy.d.ts +4 -0
  141. package/dist/types/lazy.d.ts.map +1 -1
  142. package/dist/types/math.d.ts +19 -0
  143. package/dist/types/math.d.ts.map +1 -1
  144. package/dist/types/parse.d.ts +121 -0
  145. package/dist/types/parse.d.ts.map +1 -1
  146. package/dist/types/range.d.ts +72 -0
  147. package/dist/types/range.d.ts.map +1 -0
  148. package/dist/types/string.d.ts +51 -0
  149. package/dist/types/string.d.ts.map +1 -1
  150. package/dist/types/timer.d.ts +7 -0
  151. package/dist/types/timer.d.ts.map +1 -1
  152. package/dist/types/timespan.d.ts +202 -0
  153. package/dist/types/timespan.d.ts.map +1 -1
  154. package/dist/types/type.d.ts +40 -0
  155. package/dist/types/type.d.ts.map +1 -1
  156. package/dist/types/utilities.d.ts +171 -0
  157. package/dist/types/utilities.d.ts.map +1 -1
  158. package/dist/web/array.js +42 -1
  159. package/dist/web/array.js.map +1 -1
  160. package/dist/web/async-pool-executor.js +15 -0
  161. package/dist/web/async-pool-executor.js.map +1 -1
  162. package/dist/web/browser/form-utilities.js +26 -0
  163. package/dist/web/browser/form-utilities.js.map +1 -1
  164. package/dist/web/browser/geo-location.js +5 -0
  165. package/dist/web/browser/geo-location.js.map +1 -1
  166. package/dist/web/browser/index.js.map +1 -1
  167. package/dist/web/browser/native-bridge.js +9 -0
  168. package/dist/web/browser/native-bridge.js.map +1 -1
  169. package/dist/web/cancellable-promise.js.map +1 -1
  170. package/dist/web/clean-url-search-params.js +1 -0
  171. package/dist/web/clean-url-search-params.js.map +1 -1
  172. package/dist/web/collections/cache-dictionary.js +39 -0
  173. package/dist/web/collections/cache-dictionary.js.map +1 -1
  174. package/dist/web/collections/default-map.js +25 -1
  175. package/dist/web/collections/default-map.js.map +1 -1
  176. package/dist/web/collections/default-weak-map.js +22 -2
  177. package/dist/web/collections/default-weak-map.js.map +1 -1
  178. package/dist/web/{from.js → collections/from.js} +279 -5
  179. package/dist/web/collections/from.js.map +1 -0
  180. package/dist/web/collections/index.js +1 -0
  181. package/dist/web/collections/index.js.map +1 -1
  182. package/dist/web/draft.js +37 -0
  183. package/dist/web/draft.js.map +1 -1
  184. package/dist/web/event-bus.js +1 -0
  185. package/dist/web/event-bus.js.map +1 -1
  186. package/dist/web/index.js +14 -1
  187. package/dist/web/index.js.map +1 -1
  188. package/dist/web/key-value-pair.js +6 -0
  189. package/dist/web/key-value-pair.js.map +1 -1
  190. package/dist/web/lazy.js +4 -0
  191. package/dist/web/lazy.js.map +1 -1
  192. package/dist/web/math.js +19 -0
  193. package/dist/web/math.js.map +1 -1
  194. package/dist/web/order.js.map +1 -1
  195. package/dist/web/parse.js +96 -0
  196. package/dist/web/parse.js.map +1 -1
  197. package/dist/web/patch.js +10 -2
  198. package/dist/web/patch.js.map +1 -1
  199. package/dist/web/range.js +151 -0
  200. package/dist/web/range.js.map +1 -0
  201. package/dist/web/stopwatch.js +10 -0
  202. package/dist/web/stopwatch.js.map +1 -1
  203. package/dist/web/string.js +62 -0
  204. package/dist/web/string.js.map +1 -1
  205. package/dist/web/timer.js +7 -0
  206. package/dist/web/timer.js.map +1 -1
  207. package/dist/web/timespan.js +202 -0
  208. package/dist/web/timespan.js.map +1 -1
  209. package/dist/web/type-code.js.map +1 -1
  210. package/dist/web/type.js +80 -1
  211. package/dist/web/type.js.map +1 -1
  212. package/dist/web/types.js.map +1 -1
  213. package/dist/web/utilities.js +183 -0
  214. package/dist/web/utilities.js.map +1 -1
  215. package/package.json +1 -1
  216. package/src/array.ts +16 -0
  217. package/src/browser/index.ts +2 -2
  218. package/src/collections/cache-dictionary.ts +39 -1
  219. package/src/collections/default-map.ts +15 -9
  220. package/src/collections/default-weak-map.ts +14 -12
  221. package/src/{from.ts → collections/from.ts} +285 -15
  222. package/src/collections/index.ts +4 -3
  223. package/src/index.ts +43 -42
  224. package/src/range.ts +165 -0
  225. package/src/timespan.ts +199 -20
  226. package/dist/cjs/from.js.map +0 -1
  227. package/dist/esm/from.js.map +0 -1
  228. package/dist/types/from.d.ts +0 -59
  229. package/dist/types/from.d.ts.map +0 -1
  230. package/dist/web/from.js.map +0 -1
@@ -1,91 +1,236 @@
1
+ /**
2
+ * Represents a duration of time in milliseconds.
3
+ */
1
4
  class TimeSpan {
2
5
  constructor(milliseconds) {
3
6
  this.milliseconds = milliseconds;
4
7
  }
8
+ /**
9
+ * Gets the time interval in seconds.
10
+ * @returns {number} The duration in seconds.
11
+ */
5
12
  seconds() {
6
13
  return this.milliseconds / 1000;
7
14
  }
15
+ /**
16
+ * Gets the time interval in minutes.
17
+ * @returns {number} The duration in minutes.
18
+ */
8
19
  minutes() {
9
20
  return this.milliseconds / (1000 * 60);
10
21
  }
22
+ /**
23
+ * Gets the time interval in hours.
24
+ * @returns {number} The duration in hours.
25
+ */
11
26
  hours() {
12
27
  return this.milliseconds / (1000 * 60 * 60);
13
28
  }
29
+ /**
30
+ * Gets the time interval in days.
31
+ * @returns {number} The duration in days.
32
+ */
14
33
  days() {
15
34
  return this.milliseconds / (1000 * 60 * 60 * 24);
16
35
  }
36
+ /**
37
+ * Gets the time interval in weeks.
38
+ * @returns {number} The duration in weeks.
39
+ */
17
40
  weeks() {
18
41
  return this.milliseconds / (1000 * 60 * 60 * 24 * 7);
19
42
  }
43
+ /**
44
+ * Creates a TimeSpan from a specified number of milliseconds.
45
+ * @param {number} milliseconds - The number of milliseconds.
46
+ * @returns {TimeSpan} A new TimeSpan instance.
47
+ */
20
48
  static fromMilliseconds(milliseconds) {
21
49
  return new TimeSpan(milliseconds);
22
50
  }
51
+ /**
52
+ * Creates a TimeSpan from a specified number of seconds.
53
+ * @param {number} seconds - The number of seconds.
54
+ * @returns {TimeSpan} A new TimeSpan instance.
55
+ */
23
56
  static fromSeconds(seconds) {
24
57
  return new TimeSpan(seconds * 1000);
25
58
  }
59
+ /**
60
+ * Creates a TimeSpan from a specified number of minutes.
61
+ * @param {number} minutes - The number of minutes.
62
+ * @returns {TimeSpan} A new TimeSpan instance.
63
+ */
26
64
  static fromMinutes(minutes) {
27
65
  return new TimeSpan(minutes * 1000 * 60);
28
66
  }
67
+ /**
68
+ * Creates a TimeSpan from a specified number of hours.
69
+ * @param {number} hours - The number of hours.
70
+ * @returns {TimeSpan} A new TimeSpan instance.
71
+ */
29
72
  static fromHours(hours) {
30
73
  return new TimeSpan(hours * 1000 * 60 * 60);
31
74
  }
75
+ /**
76
+ * Creates a TimeSpan from a specified number of days.
77
+ * @param {number} days - The number of days.
78
+ * @returns {TimeSpan} A new TimeSpan instance.
79
+ */
32
80
  static fromDays(days) {
33
81
  return new TimeSpan(days * 1000 * 60 * 60 * 24);
34
82
  }
83
+ /**
84
+ * Creates a TimeSpan from a specified number of weeks.
85
+ * @param {number} weeks - The number of weeks.
86
+ * @returns {TimeSpan} A new TimeSpan instance.
87
+ */
35
88
  static fromWeeks(weeks) {
36
89
  return new TimeSpan(weeks * 1000 * 60 * 60 * 24 * 7);
37
90
  }
91
+ /**
92
+ * Returns a new TimeSpan that adds the specified number of milliseconds to this instance.
93
+ * @param {number} milliseconds - The milliseconds to add.
94
+ * @returns {TimeSpan} A new TimeSpan instance.
95
+ */
38
96
  addMilliseconds(milliseconds) {
39
97
  return new TimeSpan(this.milliseconds + milliseconds);
40
98
  }
99
+ /**
100
+ * Returns a new TimeSpan that adds the specified number of seconds to this instance.
101
+ * @param {number} seconds - The seconds to add.
102
+ * @returns {TimeSpan} A new TimeSpan instance.
103
+ */
41
104
  addSeconds(seconds) {
42
105
  return this.addMilliseconds(seconds * 1000);
43
106
  }
107
+ /**
108
+ * Returns a new TimeSpan that adds the specified number of minutes to this instance.
109
+ * @param {number} minutes - The minutes to add.
110
+ * @returns {TimeSpan} A new TimeSpan instance.
111
+ */
44
112
  addMinutes(minutes) {
45
113
  return this.addMilliseconds(minutes * 1000 * 60);
46
114
  }
115
+ /**
116
+ * Returns a new TimeSpan that adds the specified number of hours to this instance.
117
+ * @param {number} hours - The hours to add.
118
+ * @returns {TimeSpan} A new TimeSpan instance.
119
+ */
47
120
  addHours(hours) {
48
121
  return this.addMilliseconds(hours * 1000 * 60 * 60);
49
122
  }
123
+ /**
124
+ * Returns a new TimeSpan that adds the specified number of days to this instance.
125
+ * @param {number} days - The days to add.
126
+ * @returns {TimeSpan} A new TimeSpan instance.
127
+ */
50
128
  addDays(days) {
51
129
  return this.addMilliseconds(days * 1000 * 60 * 60 * 24);
52
130
  }
131
+ /**
132
+ * Returns a new TimeSpan that adds the specified number of weeks to this instance.
133
+ * @param {number} weeks - The weeks to add.
134
+ * @returns {TimeSpan} A new TimeSpan instance.
135
+ */
53
136
  addWeeks(weeks) {
54
137
  return this.addMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);
55
138
  }
139
+ /**
140
+ * Returns a new TimeSpan that subtracts the specified number of milliseconds from this instance.
141
+ * @param {number} milliseconds - The milliseconds to subtract.
142
+ * @returns {TimeSpan} A new TimeSpan instance.
143
+ */
56
144
  subtractMilliseconds(milliseconds) {
57
145
  return new TimeSpan(this.milliseconds - milliseconds);
58
146
  }
147
+ /**
148
+ * Returns a new TimeSpan that subtracts the specified number of seconds from this instance.
149
+ * @param {number} seconds - The seconds to subtract.
150
+ * @returns {TimeSpan} A new TimeSpan instance.
151
+ */
59
152
  subtractSeconds(seconds) {
60
153
  return this.subtractMilliseconds(seconds * 1000);
61
154
  }
155
+ /**
156
+ * Returns a new TimeSpan that subtracts the specified number of minutes from this instance.
157
+ * @param {number} minutes - The minutes to subtract.
158
+ * @returns {TimeSpan} A new TimeSpan instance.
159
+ */
62
160
  subtractMinutes(minutes) {
63
161
  return this.subtractMilliseconds(minutes * 1000 * 60);
64
162
  }
163
+ /**
164
+ * Returns a new TimeSpan that subtracts the specified number of hours from this instance.
165
+ * @param {number} hours - The hours to subtract.
166
+ * @returns {TimeSpan} A new TimeSpan instance.
167
+ */
65
168
  subtractHours(hours) {
66
169
  return this.subtractMilliseconds(hours * 1000 * 60 * 60);
67
170
  }
171
+ /**
172
+ * Returns a new TimeSpan that subtracts the specified number of days from this instance.
173
+ * @param {number} days - The days to subtract.
174
+ * @returns {TimeSpan} A new TimeSpan instance.
175
+ */
68
176
  subtractDays(days) {
69
177
  return this.subtractMilliseconds(days * 1000 * 60 * 60 * 24);
70
178
  }
179
+ /**
180
+ * Returns a new TimeSpan that subtracts the specified number of weeks from this instance.
181
+ * @param {number} weeks - The weeks to subtract.
182
+ * @returns {TimeSpan} A new TimeSpan instance.
183
+ */
71
184
  subtractWeeks(weeks) {
72
185
  return this.subtractMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);
73
186
  }
187
+ /**
188
+ * Returns a new TimeSpan that adds the specified TimeSpan to this instance.
189
+ * @param {TimeSpan} other - The TimeSpan to add.
190
+ * @returns {TimeSpan} A new TimeSpan instance.
191
+ */
74
192
  add(other) {
75
193
  return new TimeSpan(this.milliseconds + other.milliseconds);
76
194
  }
195
+ /**
196
+ * Returns a new TimeSpan that subtracts the specified TimeSpan from this instance.
197
+ * @param {TimeSpan} other - The TimeSpan to subtract.
198
+ * @returns {TimeSpan} A new TimeSpan instance.
199
+ */
77
200
  subtract(other) {
78
201
  return new TimeSpan(this.milliseconds - other.milliseconds);
79
202
  }
203
+ /**
204
+ * Adds this TimeSpan to a specified Date.
205
+ * @param {Date} date - The date to add to.
206
+ * @returns {Date} A new Date instance.
207
+ */
80
208
  addTo(date) {
81
209
  return new Date(date.getTime() + this.milliseconds);
82
210
  }
211
+ /**
212
+ * Subtracts this TimeSpan from a specified Date.
213
+ * @param {Date} date - The date to subtract from.
214
+ * @returns {Date} A new Date instance.
215
+ */
83
216
  subtractFrom(date) {
84
217
  return new Date(date.getTime() - this.milliseconds);
85
218
  }
219
+ /**
220
+ * Creates a TimeSpan from the difference between two dates.
221
+ * @param {Date} earlierDate - The earlier date.
222
+ * @param {Date} laterDate - The later date.
223
+ * @returns {TimeSpan} A new TimeSpan instance representing the difference.
224
+ */
86
225
  static fromDifference(earlierDate, laterDate) {
87
226
  return new TimeSpan(laterDate.getTime() - earlierDate.getTime());
88
227
  }
228
+ /**
229
+ * Formats the TimeSpan as a string.
230
+ * Supported tokens: hh, h, mm, m, ss, s.
231
+ * @param {string} format - The format string (default: 'hh:mm:ss').
232
+ * @returns {string} The formatted string.
233
+ */
89
234
  format(format = 'hh:mm:ss') {
90
235
  const formatLower = format.toLowerCase();
91
236
  const hasHours = formatLower.includes("h");
@@ -110,41 +255,98 @@ class TimeSpan {
110
255
  .replace('ss', secondsPadded)
111
256
  .replace('s', seconds.toString());
112
257
  }
258
+ /**
259
+ * Checks if this TimeSpan is equal to another.
260
+ * @param {TimeSpan} other - The other TimeSpan.
261
+ * @returns {boolean} True if equal.
262
+ */
113
263
  eq(other) {
114
264
  return this.milliseconds === other.milliseconds;
115
265
  }
266
+ /**
267
+ * Checks if this TimeSpan is less than or equal to another.
268
+ * @param {TimeSpan} other - The other TimeSpan.
269
+ * @returns {boolean} True if less than or equal.
270
+ */
116
271
  le(other) {
117
272
  return this.milliseconds <= other.milliseconds;
118
273
  }
274
+ /**
275
+ * Checks if this TimeSpan is less than another.
276
+ * @param {TimeSpan} other - The other TimeSpan.
277
+ * @returns {boolean} True if less than.
278
+ */
119
279
  lt(other) {
120
280
  return this.milliseconds < other.milliseconds;
121
281
  }
282
+ /**
283
+ * Checks if this TimeSpan is greater than or equal to another.
284
+ * @param {TimeSpan} other - The other TimeSpan.
285
+ * @returns {boolean} True if greater than or equal.
286
+ */
122
287
  ge(other) {
123
288
  return this.milliseconds >= other.milliseconds;
124
289
  }
290
+ /**
291
+ * Checks if this TimeSpan is greater than another.
292
+ * @param {TimeSpan} other - The other TimeSpan.
293
+ * @returns {boolean} True if greater than.
294
+ */
125
295
  gt(other) {
126
296
  return this.milliseconds > other.milliseconds;
127
297
  }
298
+ /**
299
+ * Multiplies the TimeSpan by a number.
300
+ * @param {number} number - The multiplier.
301
+ * @returns {TimeSpan} A new TimeSpan instance.
302
+ */
128
303
  multiply(number) {
129
304
  return new TimeSpan(this.milliseconds * number);
130
305
  }
306
+ /**
307
+ * Divides the TimeSpan by a number.
308
+ * @param {number} number - The divisor.
309
+ * @returns {TimeSpan} A new TimeSpan instance.
310
+ */
131
311
  divide(number) {
132
312
  return new TimeSpan(this.milliseconds / number);
133
313
  }
314
+ /**
315
+ * Returns the absolute value of the TimeSpan.
316
+ * @returns {TimeSpan} A new TimeSpan instance.
317
+ */
134
318
  abs() {
135
319
  return new TimeSpan(Math.abs(this.milliseconds));
136
320
  }
321
+ /**
322
+ * Checks if the TimeSpan is infinite.
323
+ * @returns {boolean} True if infinite.
324
+ */
137
325
  isInfinite() {
138
326
  return this.milliseconds === Number.POSITIVE_INFINITY || this.milliseconds === Number.NEGATIVE_INFINITY;
139
327
  }
328
+ /**
329
+ * Checks if the TimeSpan is positive infinite.
330
+ * @returns {boolean} True if positive infinite.
331
+ */
140
332
  isPositiveInfinite() {
141
333
  return this.milliseconds === Number.POSITIVE_INFINITY;
142
334
  }
335
+ /**
336
+ * Checks if the TimeSpan is negative infinite.
337
+ * @returns {boolean} True if negative infinite.
338
+ */
143
339
  isNegativeInfinite() {
144
340
  return this.milliseconds === Number.NEGATIVE_INFINITY;
145
341
  }
146
342
  }
343
+ /**
344
+ * Infinite duration.
345
+ */
147
346
  TimeSpan.INFINITE = new TimeSpan(Number.POSITIVE_INFINITY);
347
+ /**
348
+ * Negative infinite duration.
349
+ */
148
350
  TimeSpan.NEGATIVE_INFINITE = new TimeSpan(Number.NEGATIVE_INFINITY);
149
351
  export default TimeSpan;
150
352
  //# sourceMappingURL=timespan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timespan.js","sourceRoot":"","sources":["../../src/timespan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timespan.js","sourceRoot":"","sources":["../../src/timespan.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Represents a duration of time in milliseconds.\r\n */\r\nexport default class TimeSpan {\r\n public milliseconds: number;\r\n\r\n private constructor(milliseconds: number) {\r\n this.milliseconds = milliseconds;\r\n }\r\n\r\n\r\n /**\r\n * Gets the time interval in seconds.\r\n * @returns {number} The duration in seconds.\r\n */\r\n seconds(): number {\r\n return this.milliseconds / 1000;\r\n }\r\n\r\n /**\r\n * Gets the time interval in minutes.\r\n * @returns {number} The duration in minutes.\r\n */\r\n minutes(): number {\r\n return this.milliseconds / (1000 * 60);\r\n }\r\n\r\n /**\r\n * Gets the time interval in hours.\r\n * @returns {number} The duration in hours.\r\n */\r\n hours(): number {\r\n return this.milliseconds / (1000 * 60 * 60);\r\n }\r\n\r\n /**\r\n * Gets the time interval in days.\r\n * @returns {number} The duration in days.\r\n */\r\n days(): number {\r\n return this.milliseconds / (1000 * 60 * 60 * 24);\r\n }\r\n\r\n /**\r\n * Gets the time interval in weeks.\r\n * @returns {number} The duration in weeks.\r\n */\r\n weeks(): number {\r\n return this.milliseconds / (1000 * 60 * 60 * 24 * 7);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a specified number of milliseconds.\r\n * @param {number} milliseconds - The number of milliseconds.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n static fromMilliseconds(milliseconds: number): TimeSpan {\r\n return new TimeSpan(milliseconds);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a specified number of seconds.\r\n * @param {number} seconds - The number of seconds.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n static fromSeconds(seconds: number): TimeSpan {\r\n return new TimeSpan(seconds * 1000);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a specified number of minutes.\r\n * @param {number} minutes - The number of minutes.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n static fromMinutes(minutes: number): TimeSpan {\r\n return new TimeSpan(minutes * 1000 * 60);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a specified number of hours.\r\n * @param {number} hours - The number of hours.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n static fromHours(hours: number): TimeSpan {\r\n return new TimeSpan(hours * 1000 * 60 * 60);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a specified number of days.\r\n * @param {number} days - The number of days.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n static fromDays(days: number): TimeSpan {\r\n return new TimeSpan(days * 1000 * 60 * 60 * 24);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a specified number of weeks.\r\n * @param {number} weeks - The number of weeks.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n static fromWeeks(weeks: number): TimeSpan {\r\n return new TimeSpan(weeks * 1000 * 60 * 60 * 24 * 7);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified number of milliseconds to this instance.\r\n * @param {number} milliseconds - The milliseconds to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n addMilliseconds(milliseconds: number): TimeSpan {\r\n return new TimeSpan(this.milliseconds + milliseconds);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified number of seconds to this instance.\r\n * @param {number} seconds - The seconds to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n addSeconds(seconds: number): TimeSpan {\r\n return this.addMilliseconds(seconds * 1000);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified number of minutes to this instance.\r\n * @param {number} minutes - The minutes to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n addMinutes(minutes: number): TimeSpan {\r\n return this.addMilliseconds(minutes * 1000 * 60);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified number of hours to this instance.\r\n * @param {number} hours - The hours to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n addHours(hours: number): TimeSpan {\r\n return this.addMilliseconds(hours * 1000 * 60 * 60);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified number of days to this instance.\r\n * @param {number} days - The days to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n addDays(days: number): TimeSpan {\r\n return this.addMilliseconds(days * 1000 * 60 * 60 * 24);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified number of weeks to this instance.\r\n * @param {number} weeks - The weeks to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n addWeeks(weeks: number): TimeSpan {\r\n return this.addMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified number of milliseconds from this instance.\r\n * @param {number} milliseconds - The milliseconds to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtractMilliseconds(milliseconds: number): TimeSpan {\r\n return new TimeSpan(this.milliseconds - milliseconds);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified number of seconds from this instance.\r\n * @param {number} seconds - The seconds to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtractSeconds(seconds: number): TimeSpan {\r\n return this.subtractMilliseconds(seconds * 1000);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified number of minutes from this instance.\r\n * @param {number} minutes - The minutes to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtractMinutes(minutes: number): TimeSpan {\r\n return this.subtractMilliseconds(minutes * 1000 * 60);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified number of hours from this instance.\r\n * @param {number} hours - The hours to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtractHours(hours: number): TimeSpan {\r\n return this.subtractMilliseconds(hours * 1000 * 60 * 60);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified number of days from this instance.\r\n * @param {number} days - The days to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtractDays(days: number): TimeSpan {\r\n return this.subtractMilliseconds(days * 1000 * 60 * 60 * 24);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified number of weeks from this instance.\r\n * @param {number} weeks - The weeks to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtractWeeks(weeks: number): TimeSpan {\r\n return this.subtractMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that adds the specified TimeSpan to this instance.\r\n * @param {TimeSpan} other - The TimeSpan to add.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n add(other: TimeSpan): TimeSpan {\r\n return new TimeSpan(this.milliseconds + other.milliseconds);\r\n }\r\n\r\n /**\r\n * Returns a new TimeSpan that subtracts the specified TimeSpan from this instance.\r\n * @param {TimeSpan} other - The TimeSpan to subtract.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n subtract(other: TimeSpan): TimeSpan {\r\n return new TimeSpan(this.milliseconds - other.milliseconds);\r\n }\r\n\r\n /**\r\n * Adds this TimeSpan to a specified Date.\r\n * @param {Date} date - The date to add to.\r\n * @returns {Date} A new Date instance.\r\n */\r\n addTo(date: Date): Date {\r\n return new Date(date.getTime() + this.milliseconds);\r\n }\r\n\r\n /**\r\n * Subtracts this TimeSpan from a specified Date.\r\n * @param {Date} date - The date to subtract from.\r\n * @returns {Date} A new Date instance.\r\n */\r\n subtractFrom(date: Date): Date {\r\n return new Date(date.getTime() - this.milliseconds);\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from the difference between two dates.\r\n * @param {Date} earlierDate - The earlier date.\r\n * @param {Date} laterDate - The later date.\r\n * @returns {TimeSpan} A new TimeSpan instance representing the difference.\r\n */\r\n static fromDifference(earlierDate: Date, laterDate: Date): TimeSpan {\r\n return new TimeSpan(laterDate.getTime() - earlierDate.getTime());\r\n }\r\n\r\n /**\r\n * Formats the TimeSpan as a string.\r\n * Supported tokens: hh, h, mm, m, ss, s.\r\n * @param {string} format - The format string (default: 'hh:mm:ss').\r\n * @returns {string} The formatted string.\r\n */\r\n format(format: string = 'hh:mm:ss'): string {\r\n const formatLower = format.toLowerCase();\r\n const hasHours = formatLower.includes(\"h\");\r\n const hasMinutes = formatLower.includes(\"m\");\r\n\r\n let hours = 0, minutes = 0, seconds = Math.floor(this.milliseconds / 1000);\r\n\r\n if (hasHours) {\r\n hours = Math.floor(seconds / 3600);\r\n seconds -= hours * 3600;\r\n }\r\n if (hasMinutes) {\r\n minutes = Math.floor(seconds / 60);\r\n seconds -= minutes * 60;\r\n }\r\n\r\n const hoursPadded = String(hours).padStart(2, '0');\r\n const minutesPadded = String(minutes).padStart(2, '0');\r\n const secondsPadded = String(seconds).padStart(2, '0');\r\n\r\n return formatLower\r\n .replace('hh', hoursPadded)\r\n .replace('h', hours.toString())\r\n .replace('mm', minutesPadded)\r\n .replace('m', minutes.toString())\r\n .replace('ss', secondsPadded)\r\n .replace('s', seconds.toString());\r\n }\r\n\r\n /**\r\n * Checks if this TimeSpan is equal to another.\r\n * @param {TimeSpan} other - The other TimeSpan.\r\n * @returns {boolean} True if equal.\r\n */\r\n eq(other: TimeSpan): boolean {\r\n return this.milliseconds === other.milliseconds;\r\n }\r\n\r\n /**\r\n * Checks if this TimeSpan is less than or equal to another.\r\n * @param {TimeSpan} other - The other TimeSpan.\r\n * @returns {boolean} True if less than or equal.\r\n */\r\n le(other: TimeSpan): boolean {\r\n return this.milliseconds <= other.milliseconds;\r\n }\r\n\r\n /**\r\n * Checks if this TimeSpan is less than another.\r\n * @param {TimeSpan} other - The other TimeSpan.\r\n * @returns {boolean} True if less than.\r\n */\r\n lt(other: TimeSpan): boolean {\r\n return this.milliseconds < other.milliseconds;\r\n }\r\n\r\n /**\r\n * Checks if this TimeSpan is greater than or equal to another.\r\n * @param {TimeSpan} other - The other TimeSpan.\r\n * @returns {boolean} True if greater than or equal.\r\n */\r\n ge(other: TimeSpan): boolean {\r\n return this.milliseconds >= other.milliseconds;\r\n }\r\n\r\n /**\r\n * Checks if this TimeSpan is greater than another.\r\n * @param {TimeSpan} other - The other TimeSpan.\r\n * @returns {boolean} True if greater than.\r\n */\r\n gt(other: TimeSpan): boolean {\r\n return this.milliseconds > other.milliseconds;\r\n }\r\n\r\n /**\r\n * Multiplies the TimeSpan by a number.\r\n * @param {number} number - The multiplier.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n multiply(number: number): TimeSpan {\r\n return new TimeSpan(this.milliseconds * number);\r\n }\r\n\r\n /**\r\n * Divides the TimeSpan by a number.\r\n * @param {number} number - The divisor.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n divide(number: number): TimeSpan {\r\n return new TimeSpan(this.milliseconds / number);\r\n }\r\n\r\n /**\r\n * Returns the absolute value of the TimeSpan.\r\n * @returns {TimeSpan} A new TimeSpan instance.\r\n */\r\n abs(): TimeSpan {\r\n return new TimeSpan(Math.abs(this.milliseconds));\r\n }\r\n\r\n /**\r\n * Infinite duration.\r\n */\r\n static readonly INFINITE = new TimeSpan(Number.POSITIVE_INFINITY);\r\n\r\n /**\r\n * Negative infinite duration.\r\n */\r\n static readonly NEGATIVE_INFINITE = new TimeSpan(Number.NEGATIVE_INFINITY);\r\n\r\n /**\r\n * Checks if the TimeSpan is infinite.\r\n * @returns {boolean} True if infinite.\r\n */\r\n isInfinite() {\r\n return this.milliseconds === Number.POSITIVE_INFINITY || this.milliseconds === Number.NEGATIVE_INFINITY\r\n }\r\n\r\n /**\r\n * Checks if the TimeSpan is positive infinite.\r\n * @returns {boolean} True if positive infinite.\r\n */\r\n isPositiveInfinite(): boolean {\r\n return this.milliseconds === Number.POSITIVE_INFINITY;\r\n }\r\n\r\n /**\r\n * Checks if the TimeSpan is negative infinite.\r\n * @returns {boolean} True if negative infinite.\r\n */\r\n isNegativeInfinite(): boolean {\r\n return this.milliseconds === Number.NEGATIVE_INFINITY;\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"type-code.js","sourceRoot":"","sources":["../../src/type-code.ts"],"names":[],"mappings":"AAAA,IAAK,QAYJ;AAZD,WAAK,QAAQ;IACT,6BAAoB,CAAA;IACpB,6BAAoB,CAAA;IACpB,+BAAqB,CAAA;IACrB,6BAAoB,CAAA;IACpB,6BAAoB,CAAA;IACpB,yBAAkB,CAAA;IAClB,mCAAuB,CAAA;IACvB,6BAAoB,CAAA;IACpB,iCAAsB,CAAA;IACtB,2BAAmB,CAAA;IACnB,+BAAqB,CAAA;AACzB,CAAC,EAZI,QAAQ,KAAR,QAAQ,QAYZ;AAGD,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"type-code.js","sourceRoot":"","sources":["../../src/type-code.ts"],"names":[],"mappings":"AAAA,IAAK,QAYJ;AAZD,WAAK,QAAQ;IACT,6BAAoB,CAAA;IACpB,6BAAoB,CAAA;IACpB,+BAAqB,CAAA;IACrB,6BAAoB,CAAA;IACpB,6BAAoB,CAAA;IACpB,yBAAkB,CAAA;IAClB,mCAAuB,CAAA;IACvB,6BAAoB,CAAA;IACpB,iCAAsB,CAAA;IACtB,2BAAmB,CAAA;IACnB,+BAAqB,CAAA;AACzB,CAAC,EAZI,QAAQ,KAAR,QAAQ,QAYZ;AAGD,eAAe,QAAQ,CAAC","sourcesContent":["enum TypeCode {\r\n String = 'string',\r\n Number = 'number',\r\n Boolean = 'boolean',\r\n Symbol = 'symbol',\r\n BigInt = 'bigint',\r\n Null = 'null',\r\n Undefined = 'undefined',\r\n Object = 'object',\r\n Function = 'function',\r\n Array = 'array',\r\n Unknown = 'unknown',\r\n}\r\n\r\n\r\nexport default TypeCode;"]}
package/dist/esm/type.js CHANGED
@@ -5,30 +5,76 @@ class Type {
5
5
  this.constructorRef = constructorRef;
6
6
  this.typeCode = typeCode;
7
7
  }
8
+ // ══════════════════════════════════════════════
9
+ // ÚNICO PUNTO DE ENTRADA
10
+ // ══════════════════════════════════════════════
11
+ /**
12
+ * Obtiene el `Type` de cualquier valor, constructor o primitivo.
13
+ *
14
+ * Unifica `typeof()` y `.GetType()` de C# en un solo método.
15
+ *
16
+ * **Reglas de resolución:**
17
+ * 1. `null` / `undefined` → tipo nullish correspondiente
18
+ * 2. Primitivo (`number`, `string`, etc.) → tipo primitivo
19
+ * 3. Array → `Type.Array`
20
+ * 4. Función/Constructor → tipo del constructor (no "Function")
21
+ * 5. Objeto → tipo basado en su constructor
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * Type.of(42) // Type<number> — primitivo
26
+ * Type.of('hello') // Type<string> — primitivo
27
+ * Type.of(new Date()) // Type<Date> — desde instancia
28
+ * Type.of(Date) // Type<Date> — desde constructor
29
+ * Type.of(null) // Type<null>
30
+ * Type.of([1, 2, 3]) // Type<Array>
31
+ * ```
32
+ */
8
33
  static of(target) {
34
+ // ── Nullish ──
9
35
  if (target === null)
10
36
  return Type.Null;
11
37
  if (target === undefined)
12
38
  return Type.Undefined;
13
39
  const jsType = typeof target;
40
+ // ── Primitivos ──
14
41
  if (jsType !== 'object' && jsType !== 'function') {
15
42
  return this._getOrCreate(jsType, undefined, jsType);
16
43
  }
44
+ // ── Funciones y Constructores ──
17
45
  if (jsType === 'function') {
18
46
  return this._resolveFunction(target);
19
47
  }
48
+ // ── Arrays ──
20
49
  if (Array.isArray(target)) {
21
50
  return Type.Array;
22
51
  }
52
+ // ── Objetos ──
23
53
  return this._resolveObject(target);
24
54
  }
55
+ // ──────────────────────────────────────────────
56
+ // Resolvers privados (separan la lógica compleja)
57
+ // ──────────────────────────────────────────────
58
+ /**
59
+ * Resuelve funciones y constructores.
60
+ *
61
+ * Decisión clave: si la función tiene un `prototype` con
62
+ * miembros propios o empieza con `class`, es un constructor
63
+ * y devolvemos el tipo que construye. Si no, es una función.
64
+ */
25
65
  static _resolveFunction(fn) {
26
66
  const isConstructor = this._isConstructorLike(fn);
27
67
  if (isConstructor) {
28
- return this._getOrCreate(fn, fn, TypeCode.Object, fn.name || 'AnonymousClass');
68
+ // Constructor → devuelve el tipo que construye
69
+ return this._getOrCreate(fn, // cacheamos por referencia al constructor
70
+ fn, TypeCode.Object, fn.name || 'AnonymousClass');
29
71
  }
72
+ // Función pura → devuelve Type<Function>
30
73
  return Type.Function;
31
74
  }
75
+ /**
76
+ * Resuelve objetos por su cadena de prototipos.
77
+ */
32
78
  static _resolveObject(obj) {
33
79
  const proto = Object.getPrototypeOf(obj);
34
80
  const ctor = proto?.constructor;
@@ -38,21 +84,36 @@ class Type {
38
84
  }
39
85
  return this._getOrCreate(ctor, ctor, TypeCode.Object, name);
40
86
  }
87
+ /**
88
+ * Heurística para distinguir constructores de funciones planas.
89
+ *
90
+ * Un "constructor" cumple al menos una de:
91
+ * - Su `toString()` empieza con "class "
92
+ * - Tiene propiedades propias en su prototype (más allá de constructor)
93
+ * - Es un built-in conocido (Date, Map, Set, etc.)
94
+ */
41
95
  static _isConstructorLike(fn) {
96
+ // 1. Clase ES6 explícita
42
97
  try {
43
98
  if (fn.toString().startsWith('class '))
44
99
  return true;
45
100
  }
46
101
  catch {
102
+ // toString puede fallar en Proxy, etc.
47
103
  }
104
+ // 2. Built-ins conocidos con prototype significativo
48
105
  if (fn === Object || fn === Function || fn === Array)
49
106
  return true;
50
107
  const proto = fn.prototype;
51
108
  if (!proto || typeof proto !== 'object')
52
109
  return false;
110
+ // 3. Prototype con miembros propios (señal de constructor)
53
111
  const ownKeys = Object.getOwnPropertyNames(proto);
54
112
  return ownKeys.length > 1 || (ownKeys.length === 1 && ownKeys[0] !== 'constructor');
55
113
  }
114
+ // ══════════════════════════════════════════════
115
+ // PROPIEDADES COMPUTADAS
116
+ // ══════════════════════════════════════════════
56
117
  get isPrimitive() {
57
118
  return (this.typeCode === TypeCode.String ||
58
119
  this.typeCode === TypeCode.Number ||
@@ -92,6 +153,9 @@ class Type {
92
153
  }
93
154
  return this.name;
94
155
  }
156
+ // ══════════════════════════════════════════════
157
+ // JERARQUÍA
158
+ // ══════════════════════════════════════════════
95
159
  get baseType() {
96
160
  if (!this.constructorRef)
97
161
  return undefined;
@@ -132,6 +196,9 @@ class Type {
132
196
  return false;
133
197
  return this.isAssignableTo(parent);
134
198
  }
199
+ // ══════════════════════════════════════════════
200
+ // REFLEXIÓN
201
+ // ══════════════════════════════════════════════
135
202
  getMethodNames() {
136
203
  if (!this.constructorRef?.prototype)
137
204
  return Object.freeze([]);
@@ -169,6 +236,9 @@ class Type {
169
236
  return Object.freeze(Object.getOwnPropertyNames(this.constructorRef)
170
237
  .filter(n => !skip.has(n)));
171
238
  }
239
+ // ══════════════════════════════════════════════
240
+ // SERIALIZACIÓN
241
+ // ══════════════════════════════════════════════
172
242
  toString() {
173
243
  return `Type [${this.name}]`;
174
244
  }
@@ -182,6 +252,9 @@ class Type {
182
252
  get [Symbol.toStringTag]() {
183
253
  return `Type<${this.name}>`;
184
254
  }
255
+ // ──────────────────────────────────────────────
256
+ // FACTORY INTERNA
257
+ // ──────────────────────────────────────────────
185
258
  static _getOrCreate(key, constructorRef, typeCode, customName) {
186
259
  const cached = this._cache.get(key);
187
260
  if (cached)
@@ -196,7 +269,13 @@ class Type {
196
269
  return instance;
197
270
  }
198
271
  }
272
+ // ──────────────────────────────────────────────
273
+ // Caché (Flyweight)
274
+ // ──────────────────────────────────────────────
199
275
  Type._cache = new Map();
276
+ // ──────────────────────────────────────────────
277
+ // Tipos predefinidos
278
+ // ──────────────────────────────────────────────
200
279
  Type.String = Type._getOrCreate('string', undefined, TypeCode.String, 'string');
201
280
  Type.Number = Type._getOrCreate('number', undefined, TypeCode.Number, 'number');
202
281
  Type.Boolean = Type._getOrCreate('boolean', undefined, TypeCode.Boolean, 'boolean');
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/type.ts"],"names":[],"mappings":"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","sourcesContent":["import TypeCode from \"./type-code.js\";\r\nimport {type Constructor} from \"./types.js\";\r\n\r\nexport default class Type<T = unknown> {\r\n\r\n // ──────────────────────────────────────────────\r\n // Caché (Flyweight)\r\n // ──────────────────────────────────────────────\r\n\r\n private static readonly _cache = new Map<unknown, Type>();\r\n\r\n // ──────────────────────────────────────────────\r\n // Tipos predefinidos\r\n // ──────────────────────────────────────────────\r\n\r\n public static readonly String = Type._getOrCreate<string>('string', undefined, TypeCode.String, 'string');\r\n public static readonly Number = Type._getOrCreate<number>('number', undefined, TypeCode.Number, 'number');\r\n public static readonly Boolean = Type._getOrCreate<boolean>('boolean', undefined, TypeCode.Boolean, 'boolean');\r\n public static readonly Symbol = Type._getOrCreate<symbol>('symbol', undefined, TypeCode.Symbol, 'symbol');\r\n public static readonly BigInt = Type._getOrCreate<bigint>('bigint', undefined, TypeCode.BigInt, 'bigint');\r\n public static readonly Null = Type._getOrCreate<null>('null', undefined, TypeCode.Null, 'null');\r\n public static readonly Undefined = Type._getOrCreate<undefined>('undefined', undefined, TypeCode.Undefined, 'undefined');\r\n public static readonly Object = Type._getOrCreate<object>(Object, Object, TypeCode.Object, 'Object');\r\n public static readonly Function = Type._getOrCreate<Function>(Function, Function, TypeCode.Function, 'Function');\r\n public static readonly Array = Type._getOrCreate<unknown[]>(Array, Array, TypeCode.Array, 'Array');\r\n\r\n // ──────────────────────────────────────────────\r\n // Propiedades inmutables\r\n // ──────────────────────────────────────────────\r\n\r\n public readonly name: string;\r\n public readonly constructorRef:\r\n Constructor<T> | undefined;\r\n public readonly typeCode: TypeCode;\r\n\r\n private constructor(\r\n name: string,\r\n constructorRef: Constructor<T> | undefined,\r\n typeCode: TypeCode,\r\n ) {\r\n this.name = name;\r\n this.constructorRef = constructorRef;\r\n this.typeCode = typeCode;\r\n }\r\n\r\n // ══════════════════════════════════════════════\r\n // ÚNICO PUNTO DE ENTRADA\r\n // ══════════════════════════════════════════════\r\n\r\n /**\r\n * Obtiene el `Type` de cualquier valor, constructor o primitivo.\r\n *\r\n * Unifica `typeof()` y `.GetType()` de C# en un solo método.\r\n *\r\n * **Reglas de resolución:**\r\n * 1. `null` / `undefined` → tipo nullish correspondiente\r\n * 2. Primitivo (`number`, `string`, etc.) → tipo primitivo\r\n * 3. Array → `Type.Array`\r\n * 4. Función/Constructor → tipo del constructor (no \"Function\")\r\n * 5. Objeto → tipo basado en su constructor\r\n *\r\n * @example\r\n * ```ts\r\n * Type.of(42) // Type<number> — primitivo\r\n * Type.of('hello') // Type<string> — primitivo\r\n * Type.of(new Date()) // Type<Date> — desde instancia\r\n * Type.of(Date) // Type<Date> — desde constructor\r\n * Type.of(null) // Type<null>\r\n * Type.of([1, 2, 3]) // Type<Array>\r\n * ```\r\n */\r\n public static of<U>(target: U | Constructor<U>): Type<U> {\r\n // ── Nullish ──\r\n if (target === null) return Type.Null as Type<U>;\r\n if (target === undefined) return Type.Undefined as Type<U>;\r\n\r\n const jsType = typeof target;\r\n\r\n // ── Primitivos ──\r\n if (jsType !== 'object' && jsType !== 'function') {\r\n return this._getOrCreate<U>(jsType, undefined, jsType as TypeCode);\r\n }\r\n\r\n // ── Funciones y Constructores ──\r\n if (jsType === 'function') {\r\n return this._resolveFunction<U>(target as Function & Constructor<U>);\r\n }\r\n\r\n // ── Arrays ──\r\n if (Array.isArray(target)) {\r\n return Type.Array as Type<U>;\r\n }\r\n\r\n // ── Objetos ──\r\n return this._resolveObject<U>(target as object);\r\n }\r\n\r\n // ──────────────────────────────────────────────\r\n // Resolvers privados (separan la lógica compleja)\r\n // ──────────────────────────────────────────────\r\n\r\n /**\r\n * Resuelve funciones y constructores.\r\n *\r\n * Decisión clave: si la función tiene un `prototype` con\r\n * miembros propios o empieza con `class`, es un constructor\r\n * y devolvemos el tipo que construye. Si no, es una función.\r\n */\r\n private static _resolveFunction<U>(fn: Function & Constructor<U>): Type<U> {\r\n const isConstructor = this._isConstructorLike(fn);\r\n\r\n if (isConstructor) {\r\n // Constructor → devuelve el tipo que construye\r\n return this._getOrCreate<U>(\r\n fn, // cacheamos por referencia al constructor\r\n fn as Constructor<U>,\r\n TypeCode.Object,\r\n fn.name || 'AnonymousClass',\r\n );\r\n }\r\n\r\n // Función pura → devuelve Type<Function>\r\n return Type.Function as Type<U>;\r\n }\r\n\r\n /**\r\n * Resuelve objetos por su cadena de prototipos.\r\n */\r\n private static _resolveObject<U>(obj: object): Type<U> {\r\n const proto = Object.getPrototypeOf(obj) as { constructor?: Constructor<U> } | null;\r\n const ctor = proto?.constructor as Constructor<U> | undefined;\r\n const name = ctor?.name || 'Object';\r\n\r\n if (!ctor || ctor === (Object as unknown)) {\r\n return Type.Object as Type<U>;\r\n }\r\n\r\n return this._getOrCreate<U>(ctor, ctor, TypeCode.Object, name);\r\n }\r\n\r\n /**\r\n * Heurística para distinguir constructores de funciones planas.\r\n *\r\n * Un \"constructor\" cumple al menos una de:\r\n * - Su `toString()` empieza con \"class \"\r\n * - Tiene propiedades propias en su prototype (más allá de constructor)\r\n * - Es un built-in conocido (Date, Map, Set, etc.)\r\n */\r\n private static _isConstructorLike(fn: Function): boolean {\r\n // 1. Clase ES6 explícita\r\n try {\r\n if (fn.toString().startsWith('class ')) return true;\r\n } catch {\r\n // toString puede fallar en Proxy, etc.\r\n }\r\n\r\n // 2. Built-ins conocidos con prototype significativo\r\n if (fn === Object || fn === Function || fn === Array) return true;\r\n\r\n const proto = fn.prototype;\r\n if (!proto || typeof proto !== 'object') return false;\r\n\r\n // 3. Prototype con miembros propios (señal de constructor)\r\n const ownKeys = Object.getOwnPropertyNames(proto);\r\n return ownKeys.length > 1 || (ownKeys.length === 1 && ownKeys[0] !== 'constructor');\r\n }\r\n\r\n // ══════════════════════════════════════════════\r\n // PROPIEDADES COMPUTADAS\r\n // ══════════════════════════════════════════════\r\n\r\n public get isPrimitive(): boolean {\r\n return (\r\n this.typeCode === TypeCode.String ||\r\n this.typeCode === TypeCode.Number ||\r\n this.typeCode === TypeCode.Boolean ||\r\n this.typeCode === TypeCode.Symbol ||\r\n this.typeCode === TypeCode.BigInt\r\n );\r\n }\r\n\r\n public get isNullish(): boolean {\r\n return this.typeCode === TypeCode.Null || this.typeCode === TypeCode.Undefined;\r\n }\r\n\r\n public get isReferenceType(): boolean {\r\n return !this.isPrimitive && !this.isNullish;\r\n }\r\n\r\n public get isArray(): boolean {\r\n return this.typeCode === TypeCode.Array ||\r\n this.constructorRef === (Array as unknown as Constructor<T>);\r\n }\r\n\r\n public get isFunction(): boolean {\r\n return this.typeCode === TypeCode.Function;\r\n }\r\n\r\n public get isValueType(): boolean {\r\n return this.isPrimitive;\r\n }\r\n\r\n public get isClass(): boolean {\r\n if (!this.constructorRef) return false;\r\n try {\r\n return this.constructorRef.toString().startsWith('class ');\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n public get fullName(): string {\r\n if (this.isPrimitive || this.isNullish) {\r\n return `System.${this.name.charAt(0).toUpperCase()}${this.name.slice(1)}`;\r\n }\r\n return this.name;\r\n }\r\n\r\n // ══════════════════════════════════════════════\r\n // JERARQUÍA\r\n // ══════════════════════════════════════════════\r\n\r\n public get baseType(): Type | undefined {\r\n if (!this.constructorRef) return undefined;\r\n\r\n const parentProto = Object.getPrototypeOf(this.constructorRef.prototype);\r\n if (!parentProto || parentProto === Object.prototype) {\r\n return this === Type.Object ? undefined : Type.Object;\r\n }\r\n\r\n const parentCtor = parentProto.constructor as Constructor;\r\n return Type.of(parentCtor);\r\n }\r\n\r\n public getInheritanceChain(): ReadonlyArray<Type> {\r\n const chain: Type[] = [this];\r\n let current: Type | undefined = this.baseType;\r\n\r\n while (current && !chain.includes(current)) {\r\n chain.push(current);\r\n current = current.baseType;\r\n }\r\n\r\n return Object.freeze(chain);\r\n }\r\n\r\n public isAssignableTo(target: Type): boolean {\r\n if (this === target) return true;\r\n if (!this.constructorRef || !target.constructorRef) return false;\r\n\r\n let proto: object | null = this.constructorRef.prototype;\r\n while (proto) {\r\n if (proto.constructor === target.constructorRef) return true;\r\n proto = Object.getPrototypeOf(proto) as object | null;\r\n }\r\n return false;\r\n }\r\n\r\n public isAssignableFrom(source: Type): boolean {\r\n return source.isAssignableTo(this);\r\n }\r\n\r\n public isSubclassOf(parent: Type): boolean {\r\n if (this === parent) return false;\r\n return this.isAssignableTo(parent);\r\n }\r\n\r\n\r\n // ══════════════════════════════════════════════\r\n // REFLEXIÓN\r\n // ══════════════════════════════════════════════\r\n\r\n public getMethodNames(): ReadonlyArray<string> {\r\n if (!this.constructorRef?.prototype) return Object.freeze([]);\r\n return Object.freeze(\r\n Object.getOwnPropertyNames(this.constructorRef.prototype)\r\n .filter(n => n !== 'constructor' &&\r\n typeof Object.getOwnPropertyDescriptor(\r\n this.constructorRef!.prototype, n\r\n )?.value === 'function'\r\n )\r\n );\r\n }\r\n\r\n public getPropertyNames(): ReadonlyArray<string> {\r\n if (!this.constructorRef?.prototype) return Object.freeze([]);\r\n return Object.freeze(\r\n Object.getOwnPropertyNames(this.constructorRef.prototype)\r\n .filter(n => n !== 'constructor' &&\r\n typeof Object.getOwnPropertyDescriptor(\r\n this.constructorRef!.prototype, n\r\n )?.value !== 'function'\r\n )\r\n );\r\n }\r\n\r\n public getMemberNames(): ReadonlyArray<string> {\r\n if (!this.constructorRef?.prototype) return Object.freeze([]);\r\n return Object.freeze(\r\n Object.getOwnPropertyNames(this.constructorRef.prototype)\r\n .filter(n => n !== 'constructor')\r\n );\r\n }\r\n\r\n public hasMethod(name: string): boolean {\r\n if (!this.constructorRef?.prototype) return false;\r\n return typeof this.constructorRef.prototype[name] === 'function';\r\n }\r\n\r\n public hasProperty(name: string): boolean {\r\n if (!this.constructorRef?.prototype) return false;\r\n return name in this.constructorRef.prototype && !this.hasMethod(name);\r\n }\r\n\r\n public getStaticMemberNames(): ReadonlyArray<string> {\r\n if (!this.constructorRef) return Object.freeze([]);\r\n const skip = new Set(['prototype', 'length', 'name', 'caller', 'arguments']);\r\n return Object.freeze(\r\n Object.getOwnPropertyNames(this.constructorRef)\r\n .filter(n => !skip.has(n))\r\n );\r\n }\r\n\r\n\r\n // ══════════════════════════════════════════════\r\n // SERIALIZACIÓN\r\n // ══════════════════════════════════════════════\r\n\r\n public toString(): string {\r\n return `Type [${this.name}]`;\r\n }\r\n\r\n\r\n public [Symbol.toPrimitive](hint: string): string | number {\r\n\r\n let hash = 0;\r\n for (let i = 0; i < this.name.length; i++) {\r\n hash = ((hash << 5) - hash + this.name.charCodeAt(i)) | 0;\r\n }\r\n\r\n return hint === 'number' ? hash : this.toString();\r\n }\r\n\r\n public get [Symbol.toStringTag](): string {\r\n return `Type<${this.name}>`;\r\n }\r\n\r\n // ──────────────────────────────────────────────\r\n // FACTORY INTERNA\r\n // ──────────────────────────────────────────────\r\n\r\n private static _getOrCreate<V>(\r\n key: unknown,\r\n constructorRef: Constructor<V> | unknown,\r\n typeCode: TypeCode,\r\n customName?: string,\r\n ): Type<V> {\r\n const cached = this._cache.get(key);\r\n if (cached) return cached as Type<V>;\r\n\r\n const name = customName\r\n ?? (typeof key === 'string' ? key : 'unknown');\r\n\r\n const ref = typeof constructorRef === 'function'\r\n ? constructorRef as Constructor<V>\r\n : undefined;\r\n\r\n const instance = new Type<V>(name, ref, typeCode);\r\n this._cache.set(key, instance as Type);\r\n return instance;\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type EqualityComparer<T> = (arg1: T, arg2: T) => boolean;\r\n\r\nexport type Consumer<T> = (arg: T) => void\r\n\r\nexport type Predicate<T> = (arg: T) => boolean;\r\n\r\nexport type Supplier<T> = () => T;\r\n\r\nexport type Nullable<T> = T | null;\r\n\r\nexport type Optional<T> = T | undefined;\r\n\r\nexport type Nullish = null | undefined;\r\n\r\nexport type Resolvable<T> = Promise<T> | Supplier<T>\r\n\r\nexport type UnaryFunction<T, R> = (arg: T) => R;\r\n\r\nexport type BinaryFunction<T1, T2, R> = (arg1: T1, arg2: T2) => R;\r\n\r\nexport type TernaryFunction<T1, T2, T3, R> = (arg1: T1, arg2: T2, arg3: T3) => R;\r\n\r\nexport type QuaternaryFunction<T1, T2, T3, T4, R> = (\r\n arg1: T1,\r\n arg2: T2,\r\n arg3: T3,\r\n arg4: T4\r\n) => R;\r\n\r\nexport type Constructor<T = unknown> = abstract new (...args: any[]) => T;\r\n"]}