@develia/commons 0.4.13 → 0.4.15

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 (223) hide show
  1. package/dist/cjs/array.js +27 -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 +33 -6
  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 +43 -2
  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 +14 -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/stopwatch.js +10 -0
  43. package/dist/cjs/stopwatch.js.map +1 -1
  44. package/dist/cjs/string.js +62 -0
  45. package/dist/cjs/string.js.map +1 -1
  46. package/dist/cjs/timer.js +7 -0
  47. package/dist/cjs/timer.js.map +1 -1
  48. package/dist/cjs/timespan.js +202 -0
  49. package/dist/cjs/timespan.js.map +1 -1
  50. package/dist/cjs/type-code.js.map +1 -1
  51. package/dist/cjs/type.js +80 -1
  52. package/dist/cjs/type.js.map +1 -1
  53. package/dist/cjs/types.js.map +1 -1
  54. package/dist/cjs/utilities.js +213 -7
  55. package/dist/cjs/utilities.js.map +1 -1
  56. package/dist/esm/array.js +27 -1
  57. package/dist/esm/array.js.map +1 -1
  58. package/dist/esm/async-pool-executor.js +15 -0
  59. package/dist/esm/async-pool-executor.js.map +1 -1
  60. package/dist/esm/browser/form-utilities.js +33 -6
  61. package/dist/esm/browser/form-utilities.js.map +1 -1
  62. package/dist/esm/browser/geo-location.js +5 -0
  63. package/dist/esm/browser/geo-location.js.map +1 -1
  64. package/dist/esm/browser/index.js.map +1 -1
  65. package/dist/esm/browser/native-bridge.js +9 -0
  66. package/dist/esm/browser/native-bridge.js.map +1 -1
  67. package/dist/esm/cancellable-promise.js.map +1 -1
  68. package/dist/esm/clean-url-search-params.js +1 -0
  69. package/dist/esm/clean-url-search-params.js.map +1 -1
  70. package/dist/esm/collections/cache-dictionary.js +39 -0
  71. package/dist/esm/collections/cache-dictionary.js.map +1 -1
  72. package/dist/esm/collections/default-map.js +25 -1
  73. package/dist/esm/collections/default-map.js.map +1 -1
  74. package/dist/esm/collections/default-weak-map.js +22 -2
  75. package/dist/esm/collections/default-weak-map.js.map +1 -1
  76. package/dist/esm/{from.js → collections/from.js} +278 -4
  77. package/dist/esm/collections/from.js.map +1 -0
  78. package/dist/esm/collections/index.js +1 -0
  79. package/dist/esm/collections/index.js.map +1 -1
  80. package/dist/esm/draft.js +43 -2
  81. package/dist/esm/draft.js.map +1 -1
  82. package/dist/esm/event-bus.js +1 -0
  83. package/dist/esm/event-bus.js.map +1 -1
  84. package/dist/esm/index.js +13 -1
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/key-value-pair.js +6 -0
  87. package/dist/esm/key-value-pair.js.map +1 -1
  88. package/dist/esm/lazy.js +4 -0
  89. package/dist/esm/lazy.js.map +1 -1
  90. package/dist/esm/math.js +19 -0
  91. package/dist/esm/math.js.map +1 -1
  92. package/dist/esm/order.js.map +1 -1
  93. package/dist/esm/parse.js +96 -0
  94. package/dist/esm/parse.js.map +1 -1
  95. package/dist/esm/patch.js +10 -2
  96. package/dist/esm/patch.js.map +1 -1
  97. package/dist/esm/stopwatch.js +10 -0
  98. package/dist/esm/stopwatch.js.map +1 -1
  99. package/dist/esm/string.js +62 -0
  100. package/dist/esm/string.js.map +1 -1
  101. package/dist/esm/timer.js +7 -0
  102. package/dist/esm/timer.js.map +1 -1
  103. package/dist/esm/timespan.js +202 -0
  104. package/dist/esm/timespan.js.map +1 -1
  105. package/dist/esm/type-code.js.map +1 -1
  106. package/dist/esm/type.js +80 -1
  107. package/dist/esm/type.js.map +1 -1
  108. package/dist/esm/types.js.map +1 -1
  109. package/dist/esm/utilities.js +212 -7
  110. package/dist/esm/utilities.js.map +1 -1
  111. package/dist/types/array.d.ts +26 -0
  112. package/dist/types/array.d.ts.map +1 -1
  113. package/dist/types/async-pool-executor.d.ts +15 -0
  114. package/dist/types/async-pool-executor.d.ts.map +1 -1
  115. package/dist/types/browser/form-utilities.d.ts +13 -0
  116. package/dist/types/browser/form-utilities.d.ts.map +1 -1
  117. package/dist/types/browser/index.d.ts.map +1 -1
  118. package/dist/types/browser/native-bridge.d.ts +6 -0
  119. package/dist/types/browser/native-bridge.d.ts.map +1 -1
  120. package/dist/types/collections/cache-dictionary.d.ts +39 -0
  121. package/dist/types/collections/cache-dictionary.d.ts.map +1 -1
  122. package/dist/types/collections/default-map.d.ts +23 -0
  123. package/dist/types/collections/default-map.d.ts.map +1 -1
  124. package/dist/types/collections/default-weak-map.d.ts +20 -1
  125. package/dist/types/collections/default-weak-map.d.ts.map +1 -1
  126. package/dist/types/collections/from.d.ts +333 -0
  127. package/dist/types/collections/from.d.ts.map +1 -0
  128. package/dist/types/collections/index.d.ts +1 -0
  129. package/dist/types/collections/index.d.ts.map +1 -1
  130. package/dist/types/draft.d.ts +68 -0
  131. package/dist/types/draft.d.ts.map +1 -1
  132. package/dist/types/index.d.ts +4 -1
  133. package/dist/types/index.d.ts.map +1 -1
  134. package/dist/types/key-value-pair.d.ts +6 -0
  135. package/dist/types/key-value-pair.d.ts.map +1 -1
  136. package/dist/types/lazy.d.ts +4 -0
  137. package/dist/types/lazy.d.ts.map +1 -1
  138. package/dist/types/math.d.ts +19 -0
  139. package/dist/types/math.d.ts.map +1 -1
  140. package/dist/types/parse.d.ts +121 -0
  141. package/dist/types/parse.d.ts.map +1 -1
  142. package/dist/types/string.d.ts +51 -0
  143. package/dist/types/string.d.ts.map +1 -1
  144. package/dist/types/timer.d.ts +7 -0
  145. package/dist/types/timer.d.ts.map +1 -1
  146. package/dist/types/timespan.d.ts +202 -0
  147. package/dist/types/timespan.d.ts.map +1 -1
  148. package/dist/types/type.d.ts +40 -0
  149. package/dist/types/type.d.ts.map +1 -1
  150. package/dist/types/utilities.d.ts +174 -2
  151. package/dist/types/utilities.d.ts.map +1 -1
  152. package/dist/web/array.js +27 -1
  153. package/dist/web/array.js.map +1 -1
  154. package/dist/web/async-pool-executor.js +15 -0
  155. package/dist/web/async-pool-executor.js.map +1 -1
  156. package/dist/web/browser/form-utilities.js +33 -6
  157. package/dist/web/browser/form-utilities.js.map +1 -1
  158. package/dist/web/browser/geo-location.js +5 -0
  159. package/dist/web/browser/geo-location.js.map +1 -1
  160. package/dist/web/browser/index.js.map +1 -1
  161. package/dist/web/browser/native-bridge.js +9 -0
  162. package/dist/web/browser/native-bridge.js.map +1 -1
  163. package/dist/web/cancellable-promise.js.map +1 -1
  164. package/dist/web/clean-url-search-params.js +1 -0
  165. package/dist/web/clean-url-search-params.js.map +1 -1
  166. package/dist/web/collections/cache-dictionary.js +39 -0
  167. package/dist/web/collections/cache-dictionary.js.map +1 -1
  168. package/dist/web/collections/default-map.js +25 -1
  169. package/dist/web/collections/default-map.js.map +1 -1
  170. package/dist/web/collections/default-weak-map.js +22 -2
  171. package/dist/web/collections/default-weak-map.js.map +1 -1
  172. package/dist/web/{from.js → collections/from.js} +279 -5
  173. package/dist/web/collections/from.js.map +1 -0
  174. package/dist/web/collections/index.js +1 -0
  175. package/dist/web/collections/index.js.map +1 -1
  176. package/dist/web/draft.js +43 -2
  177. package/dist/web/draft.js.map +1 -1
  178. package/dist/web/event-bus.js +1 -0
  179. package/dist/web/event-bus.js.map +1 -1
  180. package/dist/web/index.js +13 -1
  181. package/dist/web/index.js.map +1 -1
  182. package/dist/web/key-value-pair.js +6 -0
  183. package/dist/web/key-value-pair.js.map +1 -1
  184. package/dist/web/lazy.js +4 -0
  185. package/dist/web/lazy.js.map +1 -1
  186. package/dist/web/math.js +19 -0
  187. package/dist/web/math.js.map +1 -1
  188. package/dist/web/order.js.map +1 -1
  189. package/dist/web/parse.js +96 -0
  190. package/dist/web/parse.js.map +1 -1
  191. package/dist/web/patch.js +10 -2
  192. package/dist/web/patch.js.map +1 -1
  193. package/dist/web/stopwatch.js +10 -0
  194. package/dist/web/stopwatch.js.map +1 -1
  195. package/dist/web/string.js +62 -0
  196. package/dist/web/string.js.map +1 -1
  197. package/dist/web/timer.js +7 -0
  198. package/dist/web/timer.js.map +1 -1
  199. package/dist/web/timespan.js +202 -0
  200. package/dist/web/timespan.js.map +1 -1
  201. package/dist/web/type-code.js.map +1 -1
  202. package/dist/web/type.js +80 -1
  203. package/dist/web/type.js.map +1 -1
  204. package/dist/web/types.js.map +1 -1
  205. package/dist/web/utilities.js +212 -7
  206. package/dist/web/utilities.js.map +1 -1
  207. package/package.json +1 -1
  208. package/src/browser/form-utilities.ts +7 -6
  209. package/src/browser/index.ts +2 -2
  210. package/src/collections/cache-dictionary.ts +39 -1
  211. package/src/collections/default-map.ts +15 -9
  212. package/src/collections/default-weak-map.ts +14 -12
  213. package/src/{from.ts → collections/from.ts} +285 -15
  214. package/src/collections/index.ts +4 -3
  215. package/src/draft.ts +6 -2
  216. package/src/index.ts +1 -1
  217. package/src/timespan.ts +199 -20
  218. package/src/utilities.ts +53 -9
  219. package/dist/cjs/from.js.map +0 -1
  220. package/dist/esm/from.js.map +0 -1
  221. package/dist/types/from.d.ts +0 -59
  222. package/dist/types/from.d.ts.map +0 -1
  223. package/dist/web/from.js.map +0 -1
package/dist/web/type.js CHANGED
@@ -6,30 +6,76 @@ class Type {
6
6
  this.constructorRef = constructorRef;
7
7
  this.typeCode = typeCode;
8
8
  }
9
+ // ══════════════════════════════════════════════
10
+ // ÚNICO PUNTO DE ENTRADA
11
+ // ══════════════════════════════════════════════
12
+ /**
13
+ * Obtiene el `Type` de cualquier valor, constructor o primitivo.
14
+ *
15
+ * Unifica `typeof()` y `.GetType()` de C# en un solo método.
16
+ *
17
+ * **Reglas de resolución:**
18
+ * 1. `null` / `undefined` → tipo nullish correspondiente
19
+ * 2. Primitivo (`number`, `string`, etc.) → tipo primitivo
20
+ * 3. Array → `Type.Array`
21
+ * 4. Función/Constructor → tipo del constructor (no "Function")
22
+ * 5. Objeto → tipo basado en su constructor
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * Type.of(42) // Type<number> — primitivo
27
+ * Type.of('hello') // Type<string> — primitivo
28
+ * Type.of(new Date()) // Type<Date> — desde instancia
29
+ * Type.of(Date) // Type<Date> — desde constructor
30
+ * Type.of(null) // Type<null>
31
+ * Type.of([1, 2, 3]) // Type<Array>
32
+ * ```
33
+ */
9
34
  static of(target) {
35
+ // ── Nullish ──
10
36
  if (target === null)
11
37
  return Type.Null;
12
38
  if (target === undefined)
13
39
  return Type.Undefined;
14
40
  const jsType = typeof target;
41
+ // ── Primitivos ──
15
42
  if (jsType !== 'object' && jsType !== 'function') {
16
43
  return this._getOrCreate(jsType, undefined, jsType);
17
44
  }
45
+ // ── Funciones y Constructores ──
18
46
  if (jsType === 'function') {
19
47
  return this._resolveFunction(target);
20
48
  }
49
+ // ── Arrays ──
21
50
  if (Array.isArray(target)) {
22
51
  return Type.Array;
23
52
  }
53
+ // ── Objetos ──
24
54
  return this._resolveObject(target);
25
55
  }
56
+ // ──────────────────────────────────────────────
57
+ // Resolvers privados (separan la lógica compleja)
58
+ // ──────────────────────────────────────────────
59
+ /**
60
+ * Resuelve funciones y constructores.
61
+ *
62
+ * Decisión clave: si la función tiene un `prototype` con
63
+ * miembros propios o empieza con `class`, es un constructor
64
+ * y devolvemos el tipo que construye. Si no, es una función.
65
+ */
26
66
  static _resolveFunction(fn) {
27
67
  const isConstructor = this._isConstructorLike(fn);
28
68
  if (isConstructor) {
29
- return this._getOrCreate(fn, fn, TypeCode.Object, fn.name || 'AnonymousClass');
69
+ // Constructor → devuelve el tipo que construye
70
+ return this._getOrCreate(fn, // cacheamos por referencia al constructor
71
+ fn, TypeCode.Object, fn.name || 'AnonymousClass');
30
72
  }
73
+ // Función pura → devuelve Type<Function>
31
74
  return Type.Function;
32
75
  }
76
+ /**
77
+ * Resuelve objetos por su cadena de prototipos.
78
+ */
33
79
  static _resolveObject(obj) {
34
80
  const proto = Object.getPrototypeOf(obj);
35
81
  const ctor = proto?.constructor;
@@ -39,21 +85,36 @@ class Type {
39
85
  }
40
86
  return this._getOrCreate(ctor, ctor, TypeCode.Object, name);
41
87
  }
88
+ /**
89
+ * Heurística para distinguir constructores de funciones planas.
90
+ *
91
+ * Un "constructor" cumple al menos una de:
92
+ * - Su `toString()` empieza con "class "
93
+ * - Tiene propiedades propias en su prototype (más allá de constructor)
94
+ * - Es un built-in conocido (Date, Map, Set, etc.)
95
+ */
42
96
  static _isConstructorLike(fn) {
97
+ // 1. Clase ES6 explícita
43
98
  try {
44
99
  if (fn.toString().startsWith('class '))
45
100
  return true;
46
101
  }
47
102
  catch {
103
+ // toString puede fallar en Proxy, etc.
48
104
  }
105
+ // 2. Built-ins conocidos con prototype significativo
49
106
  if (fn === Object || fn === Function || fn === Array)
50
107
  return true;
51
108
  const proto = fn.prototype;
52
109
  if (!proto || typeof proto !== 'object')
53
110
  return false;
111
+ // 3. Prototype con miembros propios (señal de constructor)
54
112
  const ownKeys = Object.getOwnPropertyNames(proto);
55
113
  return ownKeys.length > 1 || (ownKeys.length === 1 && ownKeys[0] !== 'constructor');
56
114
  }
115
+ // ══════════════════════════════════════════════
116
+ // PROPIEDADES COMPUTADAS
117
+ // ══════════════════════════════════════════════
57
118
  get isPrimitive() {
58
119
  return (this.typeCode === TypeCode.String ||
59
120
  this.typeCode === TypeCode.Number ||
@@ -93,6 +154,9 @@ class Type {
93
154
  }
94
155
  return this.name;
95
156
  }
157
+ // ══════════════════════════════════════════════
158
+ // JERARQUÍA
159
+ // ══════════════════════════════════════════════
96
160
  get baseType() {
97
161
  if (!this.constructorRef)
98
162
  return undefined;
@@ -133,6 +197,9 @@ class Type {
133
197
  return false;
134
198
  return this.isAssignableTo(parent);
135
199
  }
200
+ // ══════════════════════════════════════════════
201
+ // REFLEXIÓN
202
+ // ══════════════════════════════════════════════
136
203
  getMethodNames() {
137
204
  if (!this.constructorRef?.prototype)
138
205
  return Object.freeze([]);
@@ -170,6 +237,9 @@ class Type {
170
237
  return Object.freeze(Object.getOwnPropertyNames(this.constructorRef)
171
238
  .filter(n => !skip.has(n)));
172
239
  }
240
+ // ══════════════════════════════════════════════
241
+ // SERIALIZACIÓN
242
+ // ══════════════════════════════════════════════
173
243
  toString() {
174
244
  return `Type [${this.name}]`;
175
245
  }
@@ -183,6 +253,9 @@ class Type {
183
253
  get [Symbol.toStringTag]() {
184
254
  return `Type<${this.name}>`;
185
255
  }
256
+ // ──────────────────────────────────────────────
257
+ // FACTORY INTERNA
258
+ // ──────────────────────────────────────────────
186
259
  static _getOrCreate(key, constructorRef, typeCode, customName) {
187
260
  const cached = this._cache.get(key);
188
261
  if (cached)
@@ -197,7 +270,13 @@ class Type {
197
270
  return instance;
198
271
  }
199
272
  }
273
+ // ──────────────────────────────────────────────
274
+ // Caché (Flyweight)
275
+ // ──────────────────────────────────────────────
200
276
  Type._cache = new Map();
277
+ // ──────────────────────────────────────────────
278
+ // Tipos predefinidos
279
+ // ──────────────────────────────────────────────
201
280
  Type.String = Type._getOrCreate('string', undefined, TypeCode.String, 'string');
202
281
  Type.Number = Type._getOrCreate('number', undefined, TypeCode.Number, 'number');
203
282
  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":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAkB,MAAM,YAAY,CAAC;AAE5C,MAAqB,IAAI;IAgCrB,YACI,IAAY,EACZ,cAA0C,EAC1C,QAAkB;QAElB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,iDAAiD;IACjD,0BAA0B;IAC1B,iDAAiD;IAEjD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,MAAM,CAAC,EAAE,CAAI,MAA0B;QAC1C,gBAAgB;QAChB,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,IAAe,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,SAAoB,CAAC;QAE3D,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;QAE7B,mBAAmB;QACnB,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,YAAY,CAAI,MAAM,EAAE,SAAS,EAAE,MAAkB,CAAC,CAAC;QACvE,CAAC;QAED,kCAAkC;QAClC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,gBAAgB,CAAI,MAAmC,CAAC,CAAC;QACzE,CAAC;QAED,eAAe;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAgB,CAAC;QACjC,CAAC;QAED,gBAAgB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAI,MAAgB,CAAC,CAAC;IACpD,CAAC;IAED,iDAAiD;IACjD,mDAAmD;IACnD,iDAAiD;IAEjD;;;;;;OAMG;IACK,MAAM,CAAC,gBAAgB,CAAI,EAA6B;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,aAAa,EAAE,CAAC;YAChB,+CAA+C;YAC/C,OAAO,IAAI,CAAC,YAAY,CACpB,EAAE,EAA2B,0CAA0C;YACvE,EAAoB,EACpB,QAAQ,CAAC,MAAM,EACf,EAAE,CAAC,IAAI,IAAI,gBAAgB,CAC9B,CAAC;QACN,CAAC;QAED,yCAAyC;QACzC,OAAO,IAAI,CAAC,QAAmB,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAI,GAAW;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAA4C,CAAC;QACpF,MAAM,IAAI,GAAG,KAAK,EAAE,WAAyC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,QAAQ,CAAC;QAEpC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAM,MAAkB,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,MAAiB,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,kBAAkB,CAAC,EAAY;QAC1C,yBAAyB;QACzB,IAAI,CAAC;YACD,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACL,uCAAuC;QAC3C,CAAC;QAED,qDAAqD;QACrD,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAElE,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAEtD,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC;IACxF,CAAC;IAED,iDAAiD;IACjD,0BAA0B;IAC1B,iDAAiD;IAEjD,IAAW,WAAW;QAClB,OAAO,CACH,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM;YACjC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM;YACjC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,OAAO;YAClC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM;YACjC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,CACpC,CAAC;IACN,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,CAAC;IACnF,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK;YACnC,IAAI,CAAC,cAAc,KAAM,KAAmC,CAAC;IACrE,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,OAAO;QACd,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QACvC,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,IAAW,QAAQ;QACf,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,iDAAiD;IACjD,aAAa;IACb,iDAAiD;IAEjD,IAAW,QAAQ;QACf,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC;QAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YACnD,OAAO,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1D,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,WAA0B,CAAC;QAC1D,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAEM,mBAAmB;QACtB,MAAM,KAAK,GAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAqB,IAAI,CAAC,QAAQ,CAAC;QAE9C,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC/B,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,cAAc,CAAC,MAAY;QAC9B,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QAEjE,IAAI,KAAK,GAAkB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;QACzD,OAAO,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,cAAc;gBAAE,OAAO,IAAI,CAAC;YAC7D,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAkB,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,gBAAgB,CAAC,MAAY;QAChC,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,YAAY,CAAC,MAAY;QAC5B,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAGD,iDAAiD;IACjD,aAAa;IACb,iDAAiD;IAE1C,cAAc;QACjB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,MAAM,CAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;aAClD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,aAAa;YAC5B,OAAO,MAAM,CAAC,wBAAwB,CAClC,IAAI,CAAC,cAAe,CAAC,SAAS,EAAE,CAAC,CACpC,EAAE,KAAK,KAAK,UAAU,CAC1B,CACV,CAAC;IACN,CAAC;IAEM,gBAAgB;QACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,MAAM,CAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;aAClD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,aAAa;YAC5B,OAAO,MAAM,CAAC,wBAAwB,CAClC,IAAI,CAAC,cAAe,CAAC,SAAS,EAAE,CAAC,CACpC,EAAE,KAAK,KAAK,UAAU,CAC1B,CACV,CAAC;IACN,CAAC;IAEM,cAAc;QACjB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,MAAM,CAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;aAClD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAC1C,CAAC;IACN,CAAC;IAEM,SAAS,CAAC,IAAY;QACzB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS;YAAE,OAAO,KAAK,CAAC;QAClD,OAAO,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC;IACrE,CAAC;IAEM,WAAW,CAAC,IAAY;QAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS;YAAE,OAAO,KAAK,CAAC;QAClD,OAAO,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,MAAM,CAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC;aACxC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC;IACN,CAAC;IAGD,iDAAiD;IACjD,iBAAiB;IACjB,iDAAiD;IAE1C,QAAQ;QACX,OAAO,SAAS,IAAI,CAAC,IAAI,GAAG,CAAC;IACjC,CAAC;IAGM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAY;QAEpC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC;IAED,IAAW,CAAC,MAAM,CAAC,WAAW,CAAC;QAC3B,OAAO,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC;IAChC,CAAC;IAED,iDAAiD;IACjD,mBAAmB;IACnB,iDAAiD;IAEzC,MAAM,CAAC,YAAY,CACvB,GAAY,EACZ,cAAwC,EACxC,QAAkB,EAClB,UAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM;YAAE,OAAO,MAAiB,CAAC;QAErC,MAAM,IAAI,GAAG,UAAU;eAChB,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,OAAO,cAAc,KAAK,UAAU;YAC5C,CAAC,CAAC,cAAgC;YAClC,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAI,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAgB,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;;AA7WD,iDAAiD;AACjD,qBAAqB;AACrB,iDAAiD;AAEzB,WAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;AAE1D,iDAAiD;AACjD,sBAAsB;AACtB,iDAAiD;AAE1B,WAAM,GAAG,IAAI,CAAC,YAAY,CAAS,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnF,WAAM,GAAG,IAAI,CAAC,YAAY,CAAS,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnF,YAAO,GAAG,IAAI,CAAC,YAAY,CAAU,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACxF,WAAM,GAAG,IAAI,CAAC,YAAY,CAAS,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnF,WAAM,GAAG,IAAI,CAAC,YAAY,CAAS,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnF,SAAI,GAAG,IAAI,CAAC,YAAY,CAAO,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzE,cAAS,GAAG,IAAI,CAAC,YAAY,CAAY,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAClG,WAAM,GAAG,IAAI,CAAC,YAAY,CAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9E,aAAQ,GAAG,IAAI,CAAC,YAAY,CAAW,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC1F,UAAK,GAAG,IAAI,CAAC,YAAY,CAAY,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;eArBlF,IAAI","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"]}
@@ -1,3 +1,4 @@
1
+ // noinspection JSUnusedGlobalSymbols
1
2
  import KeyValuePair from "./key-value-pair.js";
2
3
  import Type from "./type.js";
3
4
  export function lazy(factory) {
@@ -32,28 +33,90 @@ export function lazy(factory) {
32
33
  },
33
34
  });
34
35
  }
36
+ /**
37
+ * Checks if an object is iterable.
38
+ *
39
+ * @param {any} obj - The object to check.
40
+ * @return {boolean} - Returns true if the object is iterable, otherwise false.
41
+ */
35
42
  export function isIterable(obj) {
36
43
  return obj[Symbol.iterator] === 'function';
37
44
  }
45
+ /**
46
+ * Checks if a given value is a string.
47
+ *
48
+ * @param {*} value - The value to check.
49
+ * @return {boolean} - Returns true if the value is a string, otherwise returns false.
50
+ */
38
51
  export function isString(value) {
39
52
  return typeof value === 'string';
40
53
  }
54
+ /**
55
+ * Checks if a value is a number.
56
+ *
57
+ * @param {any} value - The value to check.
58
+ * @return {boolean} - Returns true if the value is a number, otherwise false.
59
+ */
41
60
  export function isNumber(value) {
42
61
  return typeof value === 'number';
43
62
  }
63
+ /**
64
+ * Checks if a given value is a boolean.
65
+ *
66
+ * @param {any} value - The value to be checked.
67
+ *
68
+ * @return {boolean} - Returns true if the value is a boolean, otherwise false.
69
+ */
44
70
  export function isBoolean(value) {
45
71
  return typeof value === 'boolean';
46
72
  }
73
+ /**
74
+ * Checks if a value is an object.
75
+ * @param {any} value - The value to be checked.
76
+ * @returns {boolean} - Returns true if the value is an object, otherwise returns false.
77
+ */
47
78
  export function isObject(value) {
48
79
  return value != null && typeof value === 'object' && !Array.isArray(value);
49
80
  }
81
+ /**
82
+ * Determines if a value is an array.
83
+ *
84
+ * @param value - The value to be checked.
85
+ *
86
+ * @return Whether the value is an array.
87
+ */
50
88
  export function isArray(value) {
51
89
  return Array.isArray(value);
52
90
  }
91
+ /**
92
+ * Checks if a value is a function.
93
+ *
94
+ * @param {any} value - The value to be checked.
95
+ * @return {boolean} - Returns true if the value is a function, otherwise returns false.
96
+ */
53
97
  export function isFunction(value) {
54
98
  return typeof value === 'function';
55
99
  }
56
- export function deepEqual(a, b, seen = new WeakMap()) {
100
+ /**
101
+ * Structural deep equality check.
102
+ *
103
+ * Compares primitives by value, and objects/arrays/Maps/Sets/Dates/RegExps
104
+ * by structure. Handles circular references.
105
+ *
106
+ * @param a - First value.
107
+ * @param b - Second value.
108
+ * @returns `true` if `a` and `b` are structurally equal.
109
+ */
110
+ export function deepEqual(a, b) {
111
+ return _deepEqual(a, b);
112
+ }
113
+ /**
114
+ * Internal implementation of deep equality check.
115
+ * @param a - First value.
116
+ * @param b - Second value.
117
+ * @param seen - Internal map used to handle circular references.
118
+ */
119
+ function _deepEqual(a, b, seen = new WeakMap()) {
57
120
  if (a === b)
58
121
  return true;
59
122
  if (a === null || b === null)
@@ -76,7 +139,7 @@ export function deepEqual(a, b, seen = new WeakMap()) {
76
139
  if (!(b instanceof Map) || a.size !== b.size)
77
140
  return false;
78
141
  for (const [k, v] of a) {
79
- if (!b.has(k) || !deepEqual(v, b.get(k), seen))
142
+ if (!b.has(k) || !_deepEqual(v, b.get(k), seen))
80
143
  return false;
81
144
  }
82
145
  return true;
@@ -96,11 +159,28 @@ export function deepEqual(a, b, seen = new WeakMap()) {
96
159
  for (const key of keysA) {
97
160
  if (!Object.prototype.hasOwnProperty.call(b, key))
98
161
  return false;
99
- if (!deepEqual(a[key], b[key], seen))
162
+ if (!_deepEqual(a[key], b[key], seen))
100
163
  return false;
101
164
  }
102
165
  return true;
103
166
  }
167
+ /**
168
+ * Submits an HTML form programmatically using the specified HTTP method (default is POST),
169
+ * without using AJAX. Supports nested objects and arrays using bracket notation (e.g., `user[name]`, `tags[]`).
170
+ *
171
+ * @param url - The destination URL where the form will be submitted.
172
+ * @param data - An object containing key-value pairs. Supports nested structures and arrays.
173
+ * @param method - HTTP method to use: 'POST' or 'GET' (default: 'POST').
174
+ * @param target - Optional parameter specifying the target for the form submission (e.g., '_blank', '_self', '_parent', '_top').
175
+ */
176
+ /**
177
+ * Compares two objects or arrays to check if they have the same immediate fields and values,
178
+ * or the same immediate elements if they are arrays (shallow equality check).
179
+ *
180
+ * @param {any} a - The first object or array.
181
+ * @param {any} b - The second object or array.
182
+ * @return {boolean} - Returns true if the objects/arrays are shallowly equal, otherwise false.
183
+ */
104
184
  export function shallowEqual(a, b) {
105
185
  if (a === b) {
106
186
  return true;
@@ -124,40 +204,108 @@ export function shallowEqual(a, b) {
124
204
  }
125
205
  return false;
126
206
  }
207
+ /**
208
+ * Pauses the execution of an asynchronous function for a specified duration.
209
+ *
210
+ * @param {number} ms - The delay duration in milliseconds.
211
+ * @return {Promise<void>} A promise that resolves after the specified delay.
212
+ */
127
213
  export async function delay(ms) {
128
214
  await new Promise(resolve => setTimeout(resolve, ms));
129
215
  }
216
+ /**
217
+ * Checks if a value is undefined.
218
+ *
219
+ * @param {any} value - The value to check.
220
+ * @returns {boolean} - True if the value is undefined, false otherwise.
221
+ */
130
222
  export function isUndefined(value) {
131
223
  return typeof value === 'undefined';
132
224
  }
225
+ /**
226
+ * Checks if a value is defined or not.
227
+ *
228
+ * @param {any} value - The value to be checked.
229
+ *
230
+ * @return {boolean} - True if the value is defined, false otherwise.
231
+ */
133
232
  export function isDefined(value) {
134
233
  return typeof value !== 'undefined';
135
234
  }
235
+ /**
236
+ * Checks if a given value is null.
237
+ *
238
+ * @param {any} value - The value to check for null.
239
+ * @return {boolean} - Returns true if the value is null, otherwise returns false.
240
+ */
136
241
  export function isNull(value) {
137
242
  return value === null;
138
243
  }
244
+ /**
245
+ * Determines whether the given value is of type bigint.
246
+ * @param {any} value - The value to be checked.
247
+ * @return {boolean} - Returns true if the value is of type bigint, false otherwise.
248
+ */
139
249
  export function isBigInt(value) {
140
250
  return typeof value === 'bigint';
141
251
  }
252
+ /**
253
+ * Checks if a given value is a symbol.
254
+ *
255
+ * @param {any} value - The value to be checked.
256
+ * @return {boolean} - Returns true if the value is a symbol, false otherwise.
257
+ */
142
258
  export function isSymbol(value) {
143
259
  return typeof value === 'symbol';
144
260
  }
261
+ /**
262
+ * Checks if a value is null or undefined.
263
+ *
264
+ * @param {any} value - The value to check.
265
+ * @return {boolean} - Returns true if the value is null or undefined, false otherwise.
266
+ * @deprecated
267
+ */
145
268
  export function isNullOrUndefined(value) {
146
269
  return value === null || typeof value === 'undefined';
147
270
  }
271
+ /**
272
+ * Checks if a value is null or undefined.
273
+ *
274
+ * @param {any} value - The value to check.
275
+ * @return {boolean} - Returns true if the value is null or undefined, false otherwise.
276
+
277
+ */
148
278
  export function isNullish(value) {
149
279
  return value === null || typeof value === 'undefined';
150
280
  }
281
+ /**
282
+ * Checks if a given value is empty.
283
+ *
284
+ * @param {any} value - The value to check.
285
+ * @return {boolean} - Returns true if the value is empty, otherwise returns false.
286
+ */
151
287
  export function isEmpty(value) {
152
288
  return (Array.isArray(value) && value.length === 0) ||
153
289
  (typeof value === 'string' && value === '') ||
154
290
  value === null || typeof value === 'undefined';
155
291
  }
292
+ /**
293
+ * Check if a value is empty or contains only whitespace characters.
294
+ *
295
+ * @param {any} value - The value to check.
296
+ * @return {boolean} Returns true if the value is empty or contains only whitespace characters, otherwise returns false.
297
+ */
156
298
  export function isEmptyOrWhitespace(value) {
157
299
  return (Array.isArray(value) && value.length === 0) ||
158
300
  (typeof value === 'string' && value.trim() === '') ||
159
301
  value === null || typeof value === 'undefined';
160
302
  }
303
+ /**
304
+ * Converts an object into an array of key-value pairs.
305
+ *
306
+ * @param {Record<string, any>} obj - The object to convert.
307
+ * @return {KeyValuePair<string, any>[]} - The array of key-value pairs.
308
+ */
161
309
  export function toPairs(obj) {
162
310
  let output = [];
163
311
  for (const key in obj) {
@@ -165,6 +313,33 @@ export function toPairs(obj) {
165
313
  }
166
314
  return output;
167
315
  }
316
+ /**
317
+ * Creates an object composed of the picked object properties.
318
+ *
319
+ * @template T - The type of the source object.
320
+ * @template K - The type of the keys to pick.
321
+ * @param obj - The source object.
322
+ * @param props - The property names to pick.
323
+ * @returns A new object with the picked properties.
324
+ */
325
+ export function pick(obj, props) {
326
+ const result = {};
327
+ if (obj === null || typeof obj !== 'object') {
328
+ return result;
329
+ }
330
+ for (const key of props) {
331
+ if (key in obj) {
332
+ result[key] = obj[key];
333
+ }
334
+ }
335
+ return result;
336
+ }
337
+ /**
338
+ * Converts a given thing into a Promise.
339
+ * @template T
340
+ * @param {any} thing - The thing to be converted into a Promise.
341
+ * @returns {Promise<T>} - A Promise representing the given thing.
342
+ */
168
343
  export function promisify(thing) {
169
344
  if (thing instanceof Promise)
170
345
  return thing;
@@ -181,7 +356,26 @@ export function promisify(thing) {
181
356
  }
182
357
  return Promise.resolve(thing);
183
358
  }
184
- export function deepClone(value, seen = new WeakMap()) {
359
+ /**
360
+ * Create a deep, independent copy of a value.
361
+ *
362
+ * Supports primitives, plain objects, arrays, `Date`, `RegExp`, `Map`, `Set`,
363
+ * symbol-keyed properties and circular references. Functions are copied by
364
+ * reference. Class instances preserve their prototype.
365
+ *
366
+ * @template T - The value's type.
367
+ * @param value - The value to clone.
368
+ * @returns A deep clone of `value`.
369
+ */
370
+ export function deepClone(value) {
371
+ return _deepClone(value);
372
+ }
373
+ /**
374
+ * Internal implementation of deep clone.
375
+ * @param value - The value to clone.
376
+ * @param seen - Internal map used to handle circular references.
377
+ */
378
+ function _deepClone(value, seen = new WeakMap()) {
185
379
  if (value === null || typeof value !== "object")
186
380
  return value;
187
381
  const obj = value;
@@ -194,13 +388,17 @@ export function deepClone(value, seen = new WeakMap()) {
194
388
  if (value instanceof Map) {
195
389
  const copy = new Map();
196
390
  seen.set(value, copy);
197
- value.forEach((v, k) => copy.set(deepClone(k, seen), deepClone(v, seen)));
391
+ for (const [k, v] of value) {
392
+ copy.set(_deepClone(k, seen), _deepClone(v, seen));
393
+ }
198
394
  return copy;
199
395
  }
200
396
  if (value instanceof Set) {
201
397
  const copy = new Set();
202
398
  seen.set(value, copy);
203
- value.forEach((v) => copy.add(deepClone(v, seen)));
399
+ for (const v of value) {
400
+ copy.add(_deepClone(v, seen));
401
+ }
204
402
  return copy;
205
403
  }
206
404
  const copy = Array.isArray(value)
@@ -208,10 +406,17 @@ export function deepClone(value, seen = new WeakMap()) {
208
406
  : Object.create(Object.getPrototypeOf(value));
209
407
  seen.set(obj, copy);
210
408
  for (const key of Reflect.ownKeys(obj)) {
211
- copy[key] = deepClone(value[key], seen);
409
+ copy[key] = _deepClone(value[key], seen);
212
410
  }
213
411
  return copy;
214
412
  }
413
+ /**
414
+ * Returns the type of the given value.
415
+ *
416
+ * @param {any} value - The value to determine the type of.
417
+ * @return {Type} - The type of the given value.
418
+ * @deprecated use Type.of(...)
419
+ */
215
420
  export function getType(value) {
216
421
  return Type.of(value);
217
422
  }