@develia/commons 0.4.9 → 0.4.13

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 (271) hide show
  1. package/dist/cjs/array.js +0 -0
  2. package/dist/cjs/array.js.map +0 -0
  3. package/dist/cjs/async-pool-executor.js +0 -0
  4. package/dist/cjs/async-pool-executor.js.map +0 -0
  5. package/dist/cjs/browser/form-utilities.js +23 -18
  6. package/dist/cjs/browser/form-utilities.js.map +1 -1
  7. package/dist/cjs/browser/geo-location.js +60 -36
  8. package/dist/cjs/browser/geo-location.js.map +1 -1
  9. package/dist/cjs/browser/index.js +73 -0
  10. package/dist/cjs/browser/index.js.map +1 -1
  11. package/dist/cjs/browser/native-bridge.js +0 -0
  12. package/dist/cjs/browser/native-bridge.js.map +0 -0
  13. package/dist/cjs/cancellable-promise.js +0 -0
  14. package/dist/cjs/cancellable-promise.js.map +0 -0
  15. package/dist/cjs/clean-url-search-params.js +0 -0
  16. package/dist/cjs/clean-url-search-params.js.map +0 -0
  17. package/dist/cjs/collections/cache-dictionary.js +0 -0
  18. package/dist/cjs/collections/cache-dictionary.js.map +0 -0
  19. package/dist/cjs/collections/default-map.js +0 -0
  20. package/dist/cjs/collections/default-map.js.map +0 -0
  21. package/dist/cjs/collections/default-weak-map.js +0 -0
  22. package/dist/cjs/collections/default-weak-map.js.map +0 -0
  23. package/dist/cjs/collections/index.js +0 -0
  24. package/dist/cjs/collections/index.js.map +0 -0
  25. package/dist/cjs/draft.js +149 -0
  26. package/dist/cjs/draft.js.map +1 -0
  27. package/dist/cjs/event-bus.js +70 -0
  28. package/dist/cjs/event-bus.js.map +1 -0
  29. package/dist/cjs/from.js +0 -0
  30. package/dist/cjs/from.js.map +0 -0
  31. package/dist/cjs/index.js +6 -1
  32. package/dist/cjs/index.js.map +1 -1
  33. package/dist/cjs/key-value-pair.js +0 -0
  34. package/dist/cjs/key-value-pair.js.map +0 -0
  35. package/dist/cjs/lazy.js +0 -0
  36. package/dist/cjs/lazy.js.map +0 -0
  37. package/dist/cjs/math.js +0 -0
  38. package/dist/cjs/math.js.map +0 -0
  39. package/dist/cjs/order.js +0 -0
  40. package/dist/cjs/order.js.map +0 -0
  41. package/dist/cjs/parse.js +0 -0
  42. package/dist/cjs/parse.js.map +0 -0
  43. package/dist/cjs/patch.js +0 -0
  44. package/dist/cjs/patch.js.map +0 -0
  45. package/dist/cjs/stopwatch.js +0 -0
  46. package/dist/cjs/stopwatch.js.map +0 -0
  47. package/dist/cjs/string.js +39 -0
  48. package/dist/cjs/string.js.map +1 -1
  49. package/dist/cjs/timer.js +0 -0
  50. package/dist/cjs/timer.js.map +0 -0
  51. package/dist/cjs/timespan.js +0 -0
  52. package/dist/cjs/timespan.js.map +0 -0
  53. package/dist/cjs/type-code.js +0 -0
  54. package/dist/cjs/type-code.js.map +0 -0
  55. package/dist/cjs/type.js +0 -0
  56. package/dist/cjs/type.js.map +0 -0
  57. package/dist/cjs/types.js +0 -0
  58. package/dist/cjs/types.js.map +0 -0
  59. package/dist/cjs/utilities.js +61 -34
  60. package/dist/cjs/utilities.js.map +1 -1
  61. package/dist/esm/array.js +0 -0
  62. package/dist/esm/array.js.map +0 -0
  63. package/dist/esm/async-pool-executor.js +0 -0
  64. package/dist/esm/async-pool-executor.js.map +0 -0
  65. package/dist/esm/browser/form-utilities.js +23 -18
  66. package/dist/esm/browser/form-utilities.js.map +1 -1
  67. package/dist/esm/browser/geo-location.js +60 -36
  68. package/dist/esm/browser/geo-location.js.map +1 -1
  69. package/dist/esm/browser/index.js +71 -0
  70. package/dist/esm/browser/index.js.map +1 -1
  71. package/dist/esm/browser/native-bridge.js +0 -0
  72. package/dist/esm/browser/native-bridge.js.map +0 -0
  73. package/dist/esm/cancellable-promise.js +0 -0
  74. package/dist/esm/cancellable-promise.js.map +0 -0
  75. package/dist/esm/clean-url-search-params.js +0 -0
  76. package/dist/esm/clean-url-search-params.js.map +0 -0
  77. package/dist/esm/collections/cache-dictionary.js +0 -0
  78. package/dist/esm/collections/cache-dictionary.js.map +0 -0
  79. package/dist/esm/collections/default-map.js +0 -0
  80. package/dist/esm/collections/default-map.js.map +0 -0
  81. package/dist/esm/collections/default-weak-map.js +0 -0
  82. package/dist/esm/collections/default-weak-map.js.map +0 -0
  83. package/dist/esm/collections/index.js +0 -0
  84. package/dist/esm/collections/index.js.map +0 -0
  85. package/dist/esm/draft.js +146 -0
  86. package/dist/esm/draft.js.map +1 -0
  87. package/dist/esm/event-bus.js +65 -0
  88. package/dist/esm/event-bus.js.map +1 -0
  89. package/dist/esm/from.js +0 -0
  90. package/dist/esm/from.js.map +0 -0
  91. package/dist/esm/index.js +2 -0
  92. package/dist/esm/index.js.map +1 -1
  93. package/dist/esm/key-value-pair.js +0 -0
  94. package/dist/esm/key-value-pair.js.map +0 -0
  95. package/dist/esm/lazy.js +0 -0
  96. package/dist/esm/lazy.js.map +0 -0
  97. package/dist/esm/math.js +0 -0
  98. package/dist/esm/math.js.map +0 -0
  99. package/dist/esm/order.js +0 -0
  100. package/dist/esm/order.js.map +0 -0
  101. package/dist/esm/parse.js +0 -0
  102. package/dist/esm/parse.js.map +0 -0
  103. package/dist/esm/patch.js +0 -0
  104. package/dist/esm/patch.js.map +0 -0
  105. package/dist/esm/stopwatch.js +0 -0
  106. package/dist/esm/stopwatch.js.map +0 -0
  107. package/dist/esm/string.js +34 -0
  108. package/dist/esm/string.js.map +1 -1
  109. package/dist/esm/timer.js +0 -0
  110. package/dist/esm/timer.js.map +0 -0
  111. package/dist/esm/timespan.js +0 -0
  112. package/dist/esm/timespan.js.map +0 -0
  113. package/dist/esm/type-code.js +0 -0
  114. package/dist/esm/type-code.js.map +0 -0
  115. package/dist/esm/type.js +0 -0
  116. package/dist/esm/type.js.map +0 -0
  117. package/dist/esm/types.js +0 -0
  118. package/dist/esm/types.js.map +0 -0
  119. package/dist/esm/utilities.js +61 -34
  120. package/dist/esm/utilities.js.map +1 -1
  121. package/dist/types/array.d.ts +0 -0
  122. package/dist/types/array.d.ts.map +0 -0
  123. package/dist/types/async-pool-executor.d.ts +0 -0
  124. package/dist/types/async-pool-executor.d.ts.map +0 -0
  125. package/dist/types/browser/form-utilities.d.ts +2 -2
  126. package/dist/types/browser/form-utilities.d.ts.map +1 -1
  127. package/dist/types/browser/geo-location.d.ts +0 -0
  128. package/dist/types/browser/geo-location.d.ts.map +1 -1
  129. package/dist/types/browser/index.d.ts +10 -0
  130. package/dist/types/browser/index.d.ts.map +1 -1
  131. package/dist/types/browser/native-bridge.d.ts +0 -0
  132. package/dist/types/browser/native-bridge.d.ts.map +0 -0
  133. package/dist/types/cancellable-promise.d.ts +0 -0
  134. package/dist/types/cancellable-promise.d.ts.map +0 -0
  135. package/dist/types/clean-url-search-params.d.ts +0 -0
  136. package/dist/types/clean-url-search-params.d.ts.map +0 -0
  137. package/dist/types/collections/cache-dictionary.d.ts +0 -0
  138. package/dist/types/collections/cache-dictionary.d.ts.map +0 -0
  139. package/dist/types/collections/default-map.d.ts +0 -0
  140. package/dist/types/collections/default-map.d.ts.map +0 -0
  141. package/dist/types/collections/default-weak-map.d.ts +0 -0
  142. package/dist/types/collections/default-weak-map.d.ts.map +0 -0
  143. package/dist/types/collections/index.d.ts +0 -0
  144. package/dist/types/collections/index.d.ts.map +0 -0
  145. package/dist/types/draft.d.ts +17 -0
  146. package/dist/types/draft.d.ts.map +1 -0
  147. package/dist/types/event-bus.d.ts +21 -0
  148. package/dist/types/event-bus.d.ts.map +1 -0
  149. package/dist/types/from.d.ts +0 -0
  150. package/dist/types/from.d.ts.map +0 -0
  151. package/dist/types/index.d.ts +2 -0
  152. package/dist/types/index.d.ts.map +1 -1
  153. package/dist/types/key-value-pair.d.ts +0 -0
  154. package/dist/types/key-value-pair.d.ts.map +0 -0
  155. package/dist/types/lazy.d.ts +0 -0
  156. package/dist/types/lazy.d.ts.map +0 -0
  157. package/dist/types/math.d.ts +0 -0
  158. package/dist/types/math.d.ts.map +0 -0
  159. package/dist/types/order.d.ts +0 -0
  160. package/dist/types/order.d.ts.map +0 -0
  161. package/dist/types/parse.d.ts +0 -0
  162. package/dist/types/parse.d.ts.map +0 -0
  163. package/dist/types/patch.d.ts +0 -0
  164. package/dist/types/patch.d.ts.map +0 -0
  165. package/dist/types/stopwatch.d.ts +0 -0
  166. package/dist/types/stopwatch.d.ts.map +0 -0
  167. package/dist/types/string.d.ts +5 -0
  168. package/dist/types/string.d.ts.map +1 -1
  169. package/dist/types/timer.d.ts +0 -0
  170. package/dist/types/timer.d.ts.map +0 -0
  171. package/dist/types/timespan.d.ts +0 -0
  172. package/dist/types/timespan.d.ts.map +0 -0
  173. package/dist/types/type-code.d.ts +0 -0
  174. package/dist/types/type-code.d.ts.map +0 -0
  175. package/dist/types/type.d.ts +0 -0
  176. package/dist/types/type.d.ts.map +0 -0
  177. package/dist/types/types.d.ts +0 -0
  178. package/dist/types/types.d.ts.map +0 -0
  179. package/dist/types/utilities.d.ts +2 -2
  180. package/dist/types/utilities.d.ts.map +1 -1
  181. package/dist/web/array.js +0 -0
  182. package/dist/web/array.js.map +0 -0
  183. package/dist/web/async-pool-executor.js +0 -0
  184. package/dist/web/async-pool-executor.js.map +0 -0
  185. package/dist/web/browser/form-utilities.js +23 -18
  186. package/dist/web/browser/form-utilities.js.map +1 -1
  187. package/dist/web/browser/geo-location.js +60 -36
  188. package/dist/web/browser/geo-location.js.map +1 -1
  189. package/dist/web/browser/index.js +71 -0
  190. package/dist/web/browser/index.js.map +1 -1
  191. package/dist/web/browser/native-bridge.js +0 -0
  192. package/dist/web/browser/native-bridge.js.map +0 -0
  193. package/dist/web/cancellable-promise.js +0 -0
  194. package/dist/web/cancellable-promise.js.map +0 -0
  195. package/dist/web/clean-url-search-params.js +0 -0
  196. package/dist/web/clean-url-search-params.js.map +0 -0
  197. package/dist/web/collections/cache-dictionary.js +0 -0
  198. package/dist/web/collections/cache-dictionary.js.map +0 -0
  199. package/dist/web/collections/default-map.js +0 -0
  200. package/dist/web/collections/default-map.js.map +0 -0
  201. package/dist/web/collections/default-weak-map.js +0 -0
  202. package/dist/web/collections/default-weak-map.js.map +0 -0
  203. package/dist/web/collections/index.js +0 -0
  204. package/dist/web/collections/index.js.map +0 -0
  205. package/dist/web/draft.js +146 -0
  206. package/dist/web/draft.js.map +1 -0
  207. package/dist/web/event-bus.js +65 -0
  208. package/dist/web/event-bus.js.map +1 -0
  209. package/dist/web/from.js +0 -0
  210. package/dist/web/from.js.map +0 -0
  211. package/dist/web/index.js +2 -0
  212. package/dist/web/index.js.map +1 -1
  213. package/dist/web/key-value-pair.js +0 -0
  214. package/dist/web/key-value-pair.js.map +0 -0
  215. package/dist/web/lazy.js +0 -0
  216. package/dist/web/lazy.js.map +0 -0
  217. package/dist/web/math.js +0 -0
  218. package/dist/web/math.js.map +0 -0
  219. package/dist/web/order.js +0 -0
  220. package/dist/web/order.js.map +0 -0
  221. package/dist/web/parse.js +0 -0
  222. package/dist/web/parse.js.map +0 -0
  223. package/dist/web/patch.js +0 -0
  224. package/dist/web/patch.js.map +0 -0
  225. package/dist/web/stopwatch.js +0 -0
  226. package/dist/web/stopwatch.js.map +0 -0
  227. package/dist/web/string.js +34 -0
  228. package/dist/web/string.js.map +1 -1
  229. package/dist/web/timer.js +0 -0
  230. package/dist/web/timer.js.map +0 -0
  231. package/dist/web/timespan.js +0 -0
  232. package/dist/web/timespan.js.map +0 -0
  233. package/dist/web/type-code.js +0 -0
  234. package/dist/web/type-code.js.map +0 -0
  235. package/dist/web/type.js +0 -0
  236. package/dist/web/type.js.map +0 -0
  237. package/dist/web/types.js +0 -0
  238. package/dist/web/types.js.map +0 -0
  239. package/dist/web/utilities.js +61 -34
  240. package/dist/web/utilities.js.map +1 -1
  241. package/package.json +8 -4
  242. package/src/array.ts +0 -0
  243. package/src/async-pool-executor.ts +0 -0
  244. package/src/browser/form-utilities.ts +179 -173
  245. package/src/browser/geo-location.ts +88 -54
  246. package/src/browser/index.ts +115 -4
  247. package/src/browser/native-bridge.ts +0 -0
  248. package/src/cancellable-promise.ts +0 -0
  249. package/src/clean-url-search-params.ts +0 -0
  250. package/src/collections/cache-dictionary.ts +0 -0
  251. package/src/collections/default-map.ts +0 -0
  252. package/src/collections/default-weak-map.ts +0 -0
  253. package/src/collections/index.ts +0 -0
  254. package/src/draft.ts +264 -0
  255. package/src/event-bus.ts +84 -0
  256. package/src/from.ts +0 -0
  257. package/src/index.ts +6 -0
  258. package/src/key-value-pair.ts +0 -0
  259. package/src/lazy.ts +0 -0
  260. package/src/math.ts +0 -0
  261. package/src/order.ts +0 -0
  262. package/src/parse.ts +0 -0
  263. package/src/patch.ts +0 -0
  264. package/src/stopwatch.ts +0 -0
  265. package/src/string.ts +128 -48
  266. package/src/timer.ts +0 -0
  267. package/src/timespan.ts +0 -0
  268. package/src/type-code.ts +0 -0
  269. package/src/type.ts +0 -0
  270. package/src/types.ts +0 -0
  271. package/src/utilities.ts +82 -50
package/src/utilities.ts CHANGED
@@ -113,50 +113,58 @@ export function isFunction(value: any): value is Function {
113
113
 
114
114
 
115
115
  /**
116
- * Compares two objects or arrays to check if they have the same fields and values,
117
- * or the same elements if they are arrays (deep equality check).
116
+ * Structural deep equality check.
118
117
  *
119
- * @param {any} a - The first object or array.
120
- * @param {any} b - The second object or array.
121
- * @return {boolean} - Returns true if the objects/arrays are deeply equal, otherwise false.
118
+ * Compares primitives by value, and objects/arrays/Maps/Sets/Dates/RegExps
119
+ * by structure. Handles circular references.
120
+ *
121
+ * @param a - First value.
122
+ * @param b - Second value.
123
+ * @param seen - Internal map used to handle circular references. Do not pass manually.
124
+ * @returns `true` if `a` and `b` are structurally equal.
122
125
  */
123
- export function deepEqual(a: any, b: any): boolean {
124
- if (a === b) {
126
+ export function deepEqual(
127
+ a: unknown,
128
+ b: unknown,
129
+ seen: WeakMap<object, unknown> = new WeakMap()
130
+ ): boolean {
131
+ if (a === b) return true;
132
+ if (a === null || b === null) return false;
133
+ if (typeof a !== typeof b) return false;
134
+ if (typeof a !== "object") return false;
135
+
136
+ const objA = a as object;
137
+ if (seen.has(objA)) return seen.get(objA) === b;
138
+ seen.set(objA, b);
139
+
140
+ if (a instanceof Date) return b instanceof Date && a.getTime() === b.getTime();
141
+ if (a instanceof RegExp) return b instanceof RegExp && a.toString() === b.toString();
142
+ if (Array.isArray(a) !== Array.isArray(b)) return false;
143
+
144
+ if (a instanceof Map) {
145
+ if (!(b instanceof Map) || a.size !== b.size) return false;
146
+ for (const [k, v] of a) {
147
+ if (!b.has(k) || !deepEqual(v, b.get(k), seen)) return false;
148
+ }
125
149
  return true;
126
150
  }
127
151
 
128
- if (a === null || b === null || typeof a !== typeof b) {
129
- return false;
130
- }
131
-
132
- if (Array.isArray(a) && Array.isArray(b)) {
133
- if (a.length !== b.length) {
134
- return false;
135
- }
136
- for (let i = 0; i < a.length; i++) {
137
- if (!deepEqual(a[i], b[i])) {
138
- return false;
139
- }
140
- }
152
+ if (a instanceof Set) {
153
+ if (!(b instanceof Set) || a.size !== b.size) return false;
154
+ for (const v of a) if (!b.has(v)) return false;
141
155
  return true;
142
156
  }
143
157
 
144
- if (typeof a === "object" && typeof b === "object") {
145
- const keysA = Object.keys(a);
146
- const keysB = Object.keys(b);
158
+ const keysA = Reflect.ownKeys(a as object);
159
+ const keysB = Reflect.ownKeys(b as object);
160
+ if (keysA.length !== keysB.length) return false;
147
161
 
148
- if (keysA.length !== keysB.length) {
149
- return false;
150
- }
151
- for (const key of keysA) {
152
- if (!keysB.includes(key) || !deepEqual(a[key], b[key])) {
153
- return false;
154
- }
155
- }
156
- return true;
162
+ for (const key of keysA) {
163
+ if (!Object.prototype.hasOwnProperty.call(b, key)) return false;
164
+ if (!deepEqual((a as any)[key], (b as any)[key], seen)) return false;
157
165
  }
158
166
 
159
- return false;
167
+ return true;
160
168
  }
161
169
 
162
170
 
@@ -361,33 +369,57 @@ export function promisify<T>(thing: Resolvable<T>): Promise<T> {
361
369
 
362
370
 
363
371
  /**
364
- * Creates a deep clone of the given object.
365
- * @template T
366
- * @param {T} obj - The object to clone.
367
- * @return {T} - The deep clone of the given object.
372
+ * Create a deep, independent copy of a value.
373
+ *
374
+ * Supports primitives, plain objects, arrays, `Date`, `RegExp`, `Map`, `Set`,
375
+ * symbol-keyed properties and circular references. Functions are copied by
376
+ * reference. Class instances preserve their prototype.
377
+ *
378
+ * @template T - The value's type.
379
+ * @param value - The value to clone.
380
+ * @param seen - Internal map used to handle circular references. Do not pass manually.
381
+ * @returns A deep clone of `value`.
368
382
  */
369
- export function deepClone<T>(obj: T): T {
370
- if (obj === null || typeof obj !== 'object') {
371
- return obj;
383
+ export function deepClone<T>(
384
+ value: T,
385
+ seen: WeakMap<object, unknown> = new WeakMap()
386
+ ): T {
387
+ if (value === null || typeof value !== "object") return value;
388
+
389
+ const obj = value as unknown as object;
390
+ if (seen.has(obj)) return seen.get(obj) as T;
391
+
392
+ if (value instanceof Date) return new Date(value) as T;
393
+ if (value instanceof RegExp) return new RegExp(value) as T;
394
+
395
+ if (value instanceof Map) {
396
+ const copy = new Map();
397
+ seen.set(value, copy);
398
+ value.forEach((v, k) => copy.set(deepClone(k, seen), deepClone(v, seen)));
399
+ return copy as T;
372
400
  }
373
401
 
374
- if (Array.isArray(obj)) {
375
- const copy: any[] = [];
376
- for (const element of obj) {
377
- copy.push(deepClone(element));
378
- }
402
+ if (value instanceof Set) {
403
+ const copy = new Set();
404
+ seen.set(value, copy);
405
+ value.forEach((v) => copy.add(deepClone(v, seen)));
379
406
  return copy as T;
380
407
  }
381
408
 
382
- const copy: { [key: string]: any } = {};
383
- for (const key in obj) {
384
- if (obj.hasOwnProperty(key)) {
385
- copy[key] = deepClone((obj as { [key: string]: any })[key]);
386
- }
409
+ const copy: any = Array.isArray(value)
410
+ ? []
411
+ : Object.create(Object.getPrototypeOf(value));
412
+
413
+ seen.set(obj, copy);
414
+
415
+ for (const key of Reflect.ownKeys(obj)) {
416
+ copy[key] = deepClone((value as any)[key], seen);
387
417
  }
418
+
388
419
  return copy as T;
389
420
  }
390
421
 
422
+
391
423
  /**
392
424
  * Returns the type of the given value.
393
425
  *