@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,93 +1,238 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Represents a duration of time in milliseconds.
5
+ */
3
6
  class TimeSpan {
4
7
  constructor(milliseconds) {
5
8
  this.milliseconds = milliseconds;
6
9
  }
10
+ /**
11
+ * Gets the time interval in seconds.
12
+ * @returns {number} The duration in seconds.
13
+ */
7
14
  seconds() {
8
15
  return this.milliseconds / 1000;
9
16
  }
17
+ /**
18
+ * Gets the time interval in minutes.
19
+ * @returns {number} The duration in minutes.
20
+ */
10
21
  minutes() {
11
22
  return this.milliseconds / (1000 * 60);
12
23
  }
24
+ /**
25
+ * Gets the time interval in hours.
26
+ * @returns {number} The duration in hours.
27
+ */
13
28
  hours() {
14
29
  return this.milliseconds / (1000 * 60 * 60);
15
30
  }
31
+ /**
32
+ * Gets the time interval in days.
33
+ * @returns {number} The duration in days.
34
+ */
16
35
  days() {
17
36
  return this.milliseconds / (1000 * 60 * 60 * 24);
18
37
  }
38
+ /**
39
+ * Gets the time interval in weeks.
40
+ * @returns {number} The duration in weeks.
41
+ */
19
42
  weeks() {
20
43
  return this.milliseconds / (1000 * 60 * 60 * 24 * 7);
21
44
  }
45
+ /**
46
+ * Creates a TimeSpan from a specified number of milliseconds.
47
+ * @param {number} milliseconds - The number of milliseconds.
48
+ * @returns {TimeSpan} A new TimeSpan instance.
49
+ */
22
50
  static fromMilliseconds(milliseconds) {
23
51
  return new TimeSpan(milliseconds);
24
52
  }
53
+ /**
54
+ * Creates a TimeSpan from a specified number of seconds.
55
+ * @param {number} seconds - The number of seconds.
56
+ * @returns {TimeSpan} A new TimeSpan instance.
57
+ */
25
58
  static fromSeconds(seconds) {
26
59
  return new TimeSpan(seconds * 1000);
27
60
  }
61
+ /**
62
+ * Creates a TimeSpan from a specified number of minutes.
63
+ * @param {number} minutes - The number of minutes.
64
+ * @returns {TimeSpan} A new TimeSpan instance.
65
+ */
28
66
  static fromMinutes(minutes) {
29
67
  return new TimeSpan(minutes * 1000 * 60);
30
68
  }
69
+ /**
70
+ * Creates a TimeSpan from a specified number of hours.
71
+ * @param {number} hours - The number of hours.
72
+ * @returns {TimeSpan} A new TimeSpan instance.
73
+ */
31
74
  static fromHours(hours) {
32
75
  return new TimeSpan(hours * 1000 * 60 * 60);
33
76
  }
77
+ /**
78
+ * Creates a TimeSpan from a specified number of days.
79
+ * @param {number} days - The number of days.
80
+ * @returns {TimeSpan} A new TimeSpan instance.
81
+ */
34
82
  static fromDays(days) {
35
83
  return new TimeSpan(days * 1000 * 60 * 60 * 24);
36
84
  }
85
+ /**
86
+ * Creates a TimeSpan from a specified number of weeks.
87
+ * @param {number} weeks - The number of weeks.
88
+ * @returns {TimeSpan} A new TimeSpan instance.
89
+ */
37
90
  static fromWeeks(weeks) {
38
91
  return new TimeSpan(weeks * 1000 * 60 * 60 * 24 * 7);
39
92
  }
93
+ /**
94
+ * Returns a new TimeSpan that adds the specified number of milliseconds to this instance.
95
+ * @param {number} milliseconds - The milliseconds to add.
96
+ * @returns {TimeSpan} A new TimeSpan instance.
97
+ */
40
98
  addMilliseconds(milliseconds) {
41
99
  return new TimeSpan(this.milliseconds + milliseconds);
42
100
  }
101
+ /**
102
+ * Returns a new TimeSpan that adds the specified number of seconds to this instance.
103
+ * @param {number} seconds - The seconds to add.
104
+ * @returns {TimeSpan} A new TimeSpan instance.
105
+ */
43
106
  addSeconds(seconds) {
44
107
  return this.addMilliseconds(seconds * 1000);
45
108
  }
109
+ /**
110
+ * Returns a new TimeSpan that adds the specified number of minutes to this instance.
111
+ * @param {number} minutes - The minutes to add.
112
+ * @returns {TimeSpan} A new TimeSpan instance.
113
+ */
46
114
  addMinutes(minutes) {
47
115
  return this.addMilliseconds(minutes * 1000 * 60);
48
116
  }
117
+ /**
118
+ * Returns a new TimeSpan that adds the specified number of hours to this instance.
119
+ * @param {number} hours - The hours to add.
120
+ * @returns {TimeSpan} A new TimeSpan instance.
121
+ */
49
122
  addHours(hours) {
50
123
  return this.addMilliseconds(hours * 1000 * 60 * 60);
51
124
  }
125
+ /**
126
+ * Returns a new TimeSpan that adds the specified number of days to this instance.
127
+ * @param {number} days - The days to add.
128
+ * @returns {TimeSpan} A new TimeSpan instance.
129
+ */
52
130
  addDays(days) {
53
131
  return this.addMilliseconds(days * 1000 * 60 * 60 * 24);
54
132
  }
133
+ /**
134
+ * Returns a new TimeSpan that adds the specified number of weeks to this instance.
135
+ * @param {number} weeks - The weeks to add.
136
+ * @returns {TimeSpan} A new TimeSpan instance.
137
+ */
55
138
  addWeeks(weeks) {
56
139
  return this.addMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);
57
140
  }
141
+ /**
142
+ * Returns a new TimeSpan that subtracts the specified number of milliseconds from this instance.
143
+ * @param {number} milliseconds - The milliseconds to subtract.
144
+ * @returns {TimeSpan} A new TimeSpan instance.
145
+ */
58
146
  subtractMilliseconds(milliseconds) {
59
147
  return new TimeSpan(this.milliseconds - milliseconds);
60
148
  }
149
+ /**
150
+ * Returns a new TimeSpan that subtracts the specified number of seconds from this instance.
151
+ * @param {number} seconds - The seconds to subtract.
152
+ * @returns {TimeSpan} A new TimeSpan instance.
153
+ */
61
154
  subtractSeconds(seconds) {
62
155
  return this.subtractMilliseconds(seconds * 1000);
63
156
  }
157
+ /**
158
+ * Returns a new TimeSpan that subtracts the specified number of minutes from this instance.
159
+ * @param {number} minutes - The minutes to subtract.
160
+ * @returns {TimeSpan} A new TimeSpan instance.
161
+ */
64
162
  subtractMinutes(minutes) {
65
163
  return this.subtractMilliseconds(minutes * 1000 * 60);
66
164
  }
165
+ /**
166
+ * Returns a new TimeSpan that subtracts the specified number of hours from this instance.
167
+ * @param {number} hours - The hours to subtract.
168
+ * @returns {TimeSpan} A new TimeSpan instance.
169
+ */
67
170
  subtractHours(hours) {
68
171
  return this.subtractMilliseconds(hours * 1000 * 60 * 60);
69
172
  }
173
+ /**
174
+ * Returns a new TimeSpan that subtracts the specified number of days from this instance.
175
+ * @param {number} days - The days to subtract.
176
+ * @returns {TimeSpan} A new TimeSpan instance.
177
+ */
70
178
  subtractDays(days) {
71
179
  return this.subtractMilliseconds(days * 1000 * 60 * 60 * 24);
72
180
  }
181
+ /**
182
+ * Returns a new TimeSpan that subtracts the specified number of weeks from this instance.
183
+ * @param {number} weeks - The weeks to subtract.
184
+ * @returns {TimeSpan} A new TimeSpan instance.
185
+ */
73
186
  subtractWeeks(weeks) {
74
187
  return this.subtractMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);
75
188
  }
189
+ /**
190
+ * Returns a new TimeSpan that adds the specified TimeSpan to this instance.
191
+ * @param {TimeSpan} other - The TimeSpan to add.
192
+ * @returns {TimeSpan} A new TimeSpan instance.
193
+ */
76
194
  add(other) {
77
195
  return new TimeSpan(this.milliseconds + other.milliseconds);
78
196
  }
197
+ /**
198
+ * Returns a new TimeSpan that subtracts the specified TimeSpan from this instance.
199
+ * @param {TimeSpan} other - The TimeSpan to subtract.
200
+ * @returns {TimeSpan} A new TimeSpan instance.
201
+ */
79
202
  subtract(other) {
80
203
  return new TimeSpan(this.milliseconds - other.milliseconds);
81
204
  }
205
+ /**
206
+ * Adds this TimeSpan to a specified Date.
207
+ * @param {Date} date - The date to add to.
208
+ * @returns {Date} A new Date instance.
209
+ */
82
210
  addTo(date) {
83
211
  return new Date(date.getTime() + this.milliseconds);
84
212
  }
213
+ /**
214
+ * Subtracts this TimeSpan from a specified Date.
215
+ * @param {Date} date - The date to subtract from.
216
+ * @returns {Date} A new Date instance.
217
+ */
85
218
  subtractFrom(date) {
86
219
  return new Date(date.getTime() - this.milliseconds);
87
220
  }
221
+ /**
222
+ * Creates a TimeSpan from the difference between two dates.
223
+ * @param {Date} earlierDate - The earlier date.
224
+ * @param {Date} laterDate - The later date.
225
+ * @returns {TimeSpan} A new TimeSpan instance representing the difference.
226
+ */
88
227
  static fromDifference(earlierDate, laterDate) {
89
228
  return new TimeSpan(laterDate.getTime() - earlierDate.getTime());
90
229
  }
230
+ /**
231
+ * Formats the TimeSpan as a string.
232
+ * Supported tokens: hh, h, mm, m, ss, s.
233
+ * @param {string} format - The format string (default: 'hh:mm:ss').
234
+ * @returns {string} The formatted string.
235
+ */
91
236
  format(format = 'hh:mm:ss') {
92
237
  const formatLower = format.toLowerCase();
93
238
  const hasHours = formatLower.includes("h");
@@ -112,41 +257,98 @@ class TimeSpan {
112
257
  .replace('ss', secondsPadded)
113
258
  .replace('s', seconds.toString());
114
259
  }
260
+ /**
261
+ * Checks if this TimeSpan is equal to another.
262
+ * @param {TimeSpan} other - The other TimeSpan.
263
+ * @returns {boolean} True if equal.
264
+ */
115
265
  eq(other) {
116
266
  return this.milliseconds === other.milliseconds;
117
267
  }
268
+ /**
269
+ * Checks if this TimeSpan is less than or equal to another.
270
+ * @param {TimeSpan} other - The other TimeSpan.
271
+ * @returns {boolean} True if less than or equal.
272
+ */
118
273
  le(other) {
119
274
  return this.milliseconds <= other.milliseconds;
120
275
  }
276
+ /**
277
+ * Checks if this TimeSpan is less than another.
278
+ * @param {TimeSpan} other - The other TimeSpan.
279
+ * @returns {boolean} True if less than.
280
+ */
121
281
  lt(other) {
122
282
  return this.milliseconds < other.milliseconds;
123
283
  }
284
+ /**
285
+ * Checks if this TimeSpan is greater than or equal to another.
286
+ * @param {TimeSpan} other - The other TimeSpan.
287
+ * @returns {boolean} True if greater than or equal.
288
+ */
124
289
  ge(other) {
125
290
  return this.milliseconds >= other.milliseconds;
126
291
  }
292
+ /**
293
+ * Checks if this TimeSpan is greater than another.
294
+ * @param {TimeSpan} other - The other TimeSpan.
295
+ * @returns {boolean} True if greater than.
296
+ */
127
297
  gt(other) {
128
298
  return this.milliseconds > other.milliseconds;
129
299
  }
300
+ /**
301
+ * Multiplies the TimeSpan by a number.
302
+ * @param {number} number - The multiplier.
303
+ * @returns {TimeSpan} A new TimeSpan instance.
304
+ */
130
305
  multiply(number) {
131
306
  return new TimeSpan(this.milliseconds * number);
132
307
  }
308
+ /**
309
+ * Divides the TimeSpan by a number.
310
+ * @param {number} number - The divisor.
311
+ * @returns {TimeSpan} A new TimeSpan instance.
312
+ */
133
313
  divide(number) {
134
314
  return new TimeSpan(this.milliseconds / number);
135
315
  }
316
+ /**
317
+ * Returns the absolute value of the TimeSpan.
318
+ * @returns {TimeSpan} A new TimeSpan instance.
319
+ */
136
320
  abs() {
137
321
  return new TimeSpan(Math.abs(this.milliseconds));
138
322
  }
323
+ /**
324
+ * Checks if the TimeSpan is infinite.
325
+ * @returns {boolean} True if infinite.
326
+ */
139
327
  isInfinite() {
140
328
  return this.milliseconds === Number.POSITIVE_INFINITY || this.milliseconds === Number.NEGATIVE_INFINITY;
141
329
  }
330
+ /**
331
+ * Checks if the TimeSpan is positive infinite.
332
+ * @returns {boolean} True if positive infinite.
333
+ */
142
334
  isPositiveInfinite() {
143
335
  return this.milliseconds === Number.POSITIVE_INFINITY;
144
336
  }
337
+ /**
338
+ * Checks if the TimeSpan is negative infinite.
339
+ * @returns {boolean} True if negative infinite.
340
+ */
145
341
  isNegativeInfinite() {
146
342
  return this.milliseconds === Number.NEGATIVE_INFINITY;
147
343
  }
148
344
  }
345
+ /**
346
+ * Infinite duration.
347
+ */
149
348
  TimeSpan.INFINITE = new TimeSpan(Number.POSITIVE_INFINITY);
349
+ /**
350
+ * Negative infinite duration.
351
+ */
150
352
  TimeSpan.NEGATIVE_INFINITE = new TimeSpan(Number.NEGATIVE_INFINITY);
151
353
  exports.default = TimeSpan;
152
354
  //# 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,kBAAe,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,kBAAe,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/cjs/type.js CHANGED
@@ -10,30 +10,76 @@ class Type {
10
10
  this.constructorRef = constructorRef;
11
11
  this.typeCode = typeCode;
12
12
  }
13
+ // ══════════════════════════════════════════════
14
+ // ÚNICO PUNTO DE ENTRADA
15
+ // ══════════════════════════════════════════════
16
+ /**
17
+ * Obtiene el `Type` de cualquier valor, constructor o primitivo.
18
+ *
19
+ * Unifica `typeof()` y `.GetType()` de C# en un solo método.
20
+ *
21
+ * **Reglas de resolución:**
22
+ * 1. `null` / `undefined` → tipo nullish correspondiente
23
+ * 2. Primitivo (`number`, `string`, etc.) → tipo primitivo
24
+ * 3. Array → `Type.Array`
25
+ * 4. Función/Constructor → tipo del constructor (no "Function")
26
+ * 5. Objeto → tipo basado en su constructor
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * Type.of(42) // Type<number> — primitivo
31
+ * Type.of('hello') // Type<string> — primitivo
32
+ * Type.of(new Date()) // Type<Date> — desde instancia
33
+ * Type.of(Date) // Type<Date> — desde constructor
34
+ * Type.of(null) // Type<null>
35
+ * Type.of([1, 2, 3]) // Type<Array>
36
+ * ```
37
+ */
13
38
  static of(target) {
39
+ // ── Nullish ──
14
40
  if (target === null)
15
41
  return Type.Null;
16
42
  if (target === undefined)
17
43
  return Type.Undefined;
18
44
  const jsType = typeof target;
45
+ // ── Primitivos ──
19
46
  if (jsType !== 'object' && jsType !== 'function') {
20
47
  return this._getOrCreate(jsType, undefined, jsType);
21
48
  }
49
+ // ── Funciones y Constructores ──
22
50
  if (jsType === 'function') {
23
51
  return this._resolveFunction(target);
24
52
  }
53
+ // ── Arrays ──
25
54
  if (Array.isArray(target)) {
26
55
  return Type.Array;
27
56
  }
57
+ // ── Objetos ──
28
58
  return this._resolveObject(target);
29
59
  }
60
+ // ──────────────────────────────────────────────
61
+ // Resolvers privados (separan la lógica compleja)
62
+ // ──────────────────────────────────────────────
63
+ /**
64
+ * Resuelve funciones y constructores.
65
+ *
66
+ * Decisión clave: si la función tiene un `prototype` con
67
+ * miembros propios o empieza con `class`, es un constructor
68
+ * y devolvemos el tipo que construye. Si no, es una función.
69
+ */
30
70
  static _resolveFunction(fn) {
31
71
  const isConstructor = this._isConstructorLike(fn);
32
72
  if (isConstructor) {
33
- return this._getOrCreate(fn, fn, type_code_js_1.default.Object, fn.name || 'AnonymousClass');
73
+ // Constructor → devuelve el tipo que construye
74
+ return this._getOrCreate(fn, // cacheamos por referencia al constructor
75
+ fn, type_code_js_1.default.Object, fn.name || 'AnonymousClass');
34
76
  }
77
+ // Función pura → devuelve Type<Function>
35
78
  return Type.Function;
36
79
  }
80
+ /**
81
+ * Resuelve objetos por su cadena de prototipos.
82
+ */
37
83
  static _resolveObject(obj) {
38
84
  const proto = Object.getPrototypeOf(obj);
39
85
  const ctor = proto?.constructor;
@@ -43,21 +89,36 @@ class Type {
43
89
  }
44
90
  return this._getOrCreate(ctor, ctor, type_code_js_1.default.Object, name);
45
91
  }
92
+ /**
93
+ * Heurística para distinguir constructores de funciones planas.
94
+ *
95
+ * Un "constructor" cumple al menos una de:
96
+ * - Su `toString()` empieza con "class "
97
+ * - Tiene propiedades propias en su prototype (más allá de constructor)
98
+ * - Es un built-in conocido (Date, Map, Set, etc.)
99
+ */
46
100
  static _isConstructorLike(fn) {
101
+ // 1. Clase ES6 explícita
47
102
  try {
48
103
  if (fn.toString().startsWith('class '))
49
104
  return true;
50
105
  }
51
106
  catch {
107
+ // toString puede fallar en Proxy, etc.
52
108
  }
109
+ // 2. Built-ins conocidos con prototype significativo
53
110
  if (fn === Object || fn === Function || fn === Array)
54
111
  return true;
55
112
  const proto = fn.prototype;
56
113
  if (!proto || typeof proto !== 'object')
57
114
  return false;
115
+ // 3. Prototype con miembros propios (señal de constructor)
58
116
  const ownKeys = Object.getOwnPropertyNames(proto);
59
117
  return ownKeys.length > 1 || (ownKeys.length === 1 && ownKeys[0] !== 'constructor');
60
118
  }
119
+ // ══════════════════════════════════════════════
120
+ // PROPIEDADES COMPUTADAS
121
+ // ══════════════════════════════════════════════
61
122
  get isPrimitive() {
62
123
  return (this.typeCode === type_code_js_1.default.String ||
63
124
  this.typeCode === type_code_js_1.default.Number ||
@@ -97,6 +158,9 @@ class Type {
97
158
  }
98
159
  return this.name;
99
160
  }
161
+ // ══════════════════════════════════════════════
162
+ // JERARQUÍA
163
+ // ══════════════════════════════════════════════
100
164
  get baseType() {
101
165
  if (!this.constructorRef)
102
166
  return undefined;
@@ -137,6 +201,9 @@ class Type {
137
201
  return false;
138
202
  return this.isAssignableTo(parent);
139
203
  }
204
+ // ══════════════════════════════════════════════
205
+ // REFLEXIÓN
206
+ // ══════════════════════════════════════════════
140
207
  getMethodNames() {
141
208
  if (!this.constructorRef?.prototype)
142
209
  return Object.freeze([]);
@@ -174,6 +241,9 @@ class Type {
174
241
  return Object.freeze(Object.getOwnPropertyNames(this.constructorRef)
175
242
  .filter(n => !skip.has(n)));
176
243
  }
244
+ // ══════════════════════════════════════════════
245
+ // SERIALIZACIÓN
246
+ // ══════════════════════════════════════════════
177
247
  toString() {
178
248
  return `Type [${this.name}]`;
179
249
  }
@@ -187,6 +257,9 @@ class Type {
187
257
  get [Symbol.toStringTag]() {
188
258
  return `Type<${this.name}>`;
189
259
  }
260
+ // ──────────────────────────────────────────────
261
+ // FACTORY INTERNA
262
+ // ──────────────────────────────────────────────
190
263
  static _getOrCreate(key, constructorRef, typeCode, customName) {
191
264
  const cached = this._cache.get(key);
192
265
  if (cached)
@@ -201,7 +274,13 @@ class Type {
201
274
  return instance;
202
275
  }
203
276
  }
277
+ // ──────────────────────────────────────────────
278
+ // Caché (Flyweight)
279
+ // ──────────────────────────────────────────────
204
280
  Type._cache = new Map();
281
+ // ──────────────────────────────────────────────
282
+ // Tipos predefinidos
283
+ // ──────────────────────────────────────────────
205
284
  Type.String = Type._getOrCreate('string', undefined, type_code_js_1.default.String, 'string');
206
285
  Type.Number = Type._getOrCreate('number', undefined, type_code_js_1.default.Number, 'number');
207
286
  Type.Boolean = Type._getOrCreate('boolean', undefined, type_code_js_1.default.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"]}