@catbee/utils 0.0.2 → 0.0.3

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 (169) hide show
  1. package/build/esm/config.d.ts +1 -1
  2. package/build/esm/config.js +7 -7
  3. package/build/esm/config.js.map +1 -1
  4. package/build/esm/index.d.ts +20 -19
  5. package/build/esm/index.js +20 -19
  6. package/build/esm/index.js.map +1 -1
  7. package/build/esm/types/api-response.d.ts +2 -2
  8. package/build/esm/types/api-response.js.map +1 -1
  9. package/build/esm/utils/array.utils.d.ts +1 -1
  10. package/build/esm/utils/array.utils.js +17 -27
  11. package/build/esm/utils/array.utils.js.map +1 -1
  12. package/build/esm/utils/async.utils.d.ts +1 -5
  13. package/build/esm/utils/async.utils.js +17 -20
  14. package/build/esm/utils/async.utils.js.map +1 -1
  15. package/build/esm/utils/cache.utils.js +2 -2
  16. package/build/esm/utils/cache.utils.js.map +1 -1
  17. package/build/esm/utils/context-store.utils.d.ts +1 -1
  18. package/build/esm/utils/context-store.utils.js +8 -8
  19. package/build/esm/utils/context-store.utils.js.map +1 -1
  20. package/build/esm/utils/crypto.utils.d.ts +2 -2
  21. package/build/esm/utils/crypto.utils.js +37 -45
  22. package/build/esm/utils/crypto.utils.js.map +1 -1
  23. package/build/esm/utils/decorators.utils.d.ts +7 -7
  24. package/build/esm/utils/decorators.utils.js +31 -31
  25. package/build/esm/utils/decorators.utils.js.map +1 -1
  26. package/build/esm/utils/dir.utils.d.ts +4 -4
  27. package/build/esm/utils/dir.utils.js +18 -20
  28. package/build/esm/utils/dir.utils.js.map +1 -1
  29. package/build/esm/utils/env.utils.js +22 -26
  30. package/build/esm/utils/env.utils.js.map +1 -1
  31. package/build/esm/utils/exception.utils.d.ts +1 -1
  32. package/build/esm/utils/exception.utils.js +26 -29
  33. package/build/esm/utils/exception.utils.js.map +1 -1
  34. package/build/esm/utils/fs.utils.d.ts +3 -3
  35. package/build/esm/utils/fs.utils.js +19 -23
  36. package/build/esm/utils/fs.utils.js.map +1 -1
  37. package/build/esm/utils/http-status-codes.js.map +1 -1
  38. package/build/esm/utils/id.utils.js +8 -8
  39. package/build/esm/utils/id.utils.js.map +1 -1
  40. package/build/esm/utils/logger.utils.d.ts +13 -4
  41. package/build/esm/utils/logger.utils.js +15 -15
  42. package/build/esm/utils/logger.utils.js.map +1 -1
  43. package/build/esm/utils/middleware.utils.d.ts +5 -4
  44. package/build/esm/utils/middleware.utils.js +19 -19
  45. package/build/esm/utils/middleware.utils.js.map +1 -1
  46. package/build/esm/utils/obj.utils.js +16 -27
  47. package/build/esm/utils/obj.utils.js.map +1 -1
  48. package/build/esm/utils/response.utils.d.ts +2 -2
  49. package/build/esm/utils/response.utils.js +11 -11
  50. package/build/esm/utils/response.utils.js.map +1 -1
  51. package/build/esm/utils/string.utils.js +17 -17
  52. package/build/esm/utils/string.utils.js.map +1 -1
  53. package/build/esm/utils/url.utils.js +20 -22
  54. package/build/esm/utils/url.utils.js.map +1 -1
  55. package/build/esm/utils/validate.utils.js +11 -15
  56. package/build/esm/utils/validate.utils.js.map +1 -1
  57. package/build/esnext/config.d.ts +1 -1
  58. package/build/esnext/config.js +7 -7
  59. package/build/esnext/config.js.map +1 -1
  60. package/build/esnext/index.d.ts +20 -19
  61. package/build/esnext/index.js +20 -19
  62. package/build/esnext/index.js.map +1 -1
  63. package/build/esnext/types/api-response.d.ts +2 -2
  64. package/build/esnext/types/api-response.js.map +1 -1
  65. package/build/esnext/utils/array.utils.d.ts +1 -1
  66. package/build/esnext/utils/array.utils.js +23 -31
  67. package/build/esnext/utils/array.utils.js.map +1 -1
  68. package/build/esnext/utils/async.utils.d.ts +1 -5
  69. package/build/esnext/utils/async.utils.js +22 -22
  70. package/build/esnext/utils/async.utils.js.map +1 -1
  71. package/build/esnext/utils/cache.utils.js +3 -3
  72. package/build/esnext/utils/cache.utils.js.map +1 -1
  73. package/build/esnext/utils/context-store.utils.d.ts +1 -1
  74. package/build/esnext/utils/context-store.utils.js +10 -10
  75. package/build/esnext/utils/context-store.utils.js.map +1 -1
  76. package/build/esnext/utils/crypto.utils.d.ts +2 -2
  77. package/build/esnext/utils/crypto.utils.js +37 -47
  78. package/build/esnext/utils/crypto.utils.js.map +1 -1
  79. package/build/esnext/utils/decorators.utils.d.ts +7 -7
  80. package/build/esnext/utils/decorators.utils.js +33 -33
  81. package/build/esnext/utils/decorators.utils.js.map +1 -1
  82. package/build/esnext/utils/dir.utils.d.ts +4 -4
  83. package/build/esnext/utils/dir.utils.js +22 -24
  84. package/build/esnext/utils/dir.utils.js.map +1 -1
  85. package/build/esnext/utils/env.utils.js +24 -26
  86. package/build/esnext/utils/env.utils.js.map +1 -1
  87. package/build/esnext/utils/exception.utils.d.ts +1 -1
  88. package/build/esnext/utils/exception.utils.js +26 -29
  89. package/build/esnext/utils/exception.utils.js.map +1 -1
  90. package/build/esnext/utils/fs.utils.d.ts +3 -3
  91. package/build/esnext/utils/fs.utils.js +21 -25
  92. package/build/esnext/utils/fs.utils.js.map +1 -1
  93. package/build/esnext/utils/http-status-codes.js.map +1 -1
  94. package/build/esnext/utils/id.utils.js +8 -8
  95. package/build/esnext/utils/id.utils.js.map +1 -1
  96. package/build/esnext/utils/logger.utils.d.ts +13 -4
  97. package/build/esnext/utils/logger.utils.js +15 -15
  98. package/build/esnext/utils/logger.utils.js.map +1 -1
  99. package/build/esnext/utils/middleware.utils.d.ts +5 -4
  100. package/build/esnext/utils/middleware.utils.js +19 -19
  101. package/build/esnext/utils/middleware.utils.js.map +1 -1
  102. package/build/esnext/utils/obj.utils.js +17 -26
  103. package/build/esnext/utils/obj.utils.js.map +1 -1
  104. package/build/esnext/utils/response.utils.d.ts +2 -2
  105. package/build/esnext/utils/response.utils.js +11 -11
  106. package/build/esnext/utils/response.utils.js.map +1 -1
  107. package/build/esnext/utils/string.utils.js +17 -17
  108. package/build/esnext/utils/string.utils.js.map +1 -1
  109. package/build/esnext/utils/url.utils.js +21 -23
  110. package/build/esnext/utils/url.utils.js.map +1 -1
  111. package/build/esnext/utils/validate.utils.js +14 -16
  112. package/build/esnext/utils/validate.utils.js.map +1 -1
  113. package/build/src/config.d.ts +1 -1
  114. package/build/src/config.js +6 -6
  115. package/build/src/config.js.map +1 -1
  116. package/build/src/index.d.ts +20 -19
  117. package/build/src/index.js +1 -0
  118. package/build/src/index.js.map +1 -1
  119. package/build/src/types/api-response.d.ts +2 -2
  120. package/build/src/types/api-response.js.map +1 -1
  121. package/build/src/utils/array.utils.d.ts +1 -1
  122. package/build/src/utils/array.utils.js +22 -30
  123. package/build/src/utils/array.utils.js.map +1 -1
  124. package/build/src/utils/async.utils.d.ts +1 -5
  125. package/build/src/utils/async.utils.js +22 -22
  126. package/build/src/utils/async.utils.js.map +1 -1
  127. package/build/src/utils/cache.utils.js +2 -2
  128. package/build/src/utils/cache.utils.js.map +1 -1
  129. package/build/src/utils/context-store.utils.d.ts +1 -1
  130. package/build/src/utils/context-store.utils.js +9 -9
  131. package/build/src/utils/context-store.utils.js.map +1 -1
  132. package/build/src/utils/crypto.utils.d.ts +2 -2
  133. package/build/src/utils/crypto.utils.js +35 -45
  134. package/build/src/utils/crypto.utils.js.map +1 -1
  135. package/build/src/utils/decorators.utils.d.ts +7 -7
  136. package/build/src/utils/decorators.utils.js +32 -32
  137. package/build/src/utils/decorators.utils.js.map +1 -1
  138. package/build/src/utils/dir.utils.d.ts +4 -4
  139. package/build/src/utils/dir.utils.js +16 -18
  140. package/build/src/utils/dir.utils.js.map +1 -1
  141. package/build/src/utils/env.utils.js +22 -24
  142. package/build/src/utils/env.utils.js.map +1 -1
  143. package/build/src/utils/exception.utils.d.ts +1 -1
  144. package/build/src/utils/exception.utils.js +23 -26
  145. package/build/src/utils/exception.utils.js.map +1 -1
  146. package/build/src/utils/fs.utils.d.ts +3 -3
  147. package/build/src/utils/fs.utils.js +15 -19
  148. package/build/src/utils/fs.utils.js.map +1 -1
  149. package/build/src/utils/http-status-codes.js.map +1 -1
  150. package/build/src/utils/id.utils.js +7 -7
  151. package/build/src/utils/id.utils.js.map +1 -1
  152. package/build/src/utils/logger.utils.d.ts +13 -4
  153. package/build/src/utils/logger.utils.js +12 -12
  154. package/build/src/utils/logger.utils.js.map +1 -1
  155. package/build/src/utils/middleware.utils.d.ts +5 -4
  156. package/build/src/utils/middleware.utils.js +12 -12
  157. package/build/src/utils/middleware.utils.js.map +1 -1
  158. package/build/src/utils/obj.utils.js +17 -26
  159. package/build/src/utils/obj.utils.js.map +1 -1
  160. package/build/src/utils/response.utils.d.ts +2 -2
  161. package/build/src/utils/response.utils.js +9 -9
  162. package/build/src/utils/response.utils.js.map +1 -1
  163. package/build/src/utils/string.utils.js +17 -17
  164. package/build/src/utils/string.utils.js.map +1 -1
  165. package/build/src/utils/url.utils.js +20 -22
  166. package/build/src/utils/url.utils.js.map +1 -1
  167. package/build/src/utils/validate.utils.js +14 -16
  168. package/build/src/utils/validate.utils.js.map +1 -1
  169. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- type LogLevel = "fatal" | "error" | "warn" | "info" | "debug" | "trace" | "silent";
1
+ type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace' | 'silent';
2
2
  /**
3
3
  * Application runtime configuration loaded from environment variables.
4
4
  */
@@ -1,4 +1,4 @@
1
- import { Env } from "./utils/env.utils";
1
+ import { Env } from './utils/env.utils';
2
2
  /**
3
3
  * Application runtime configuration loaded from environment variables.
4
4
  */
@@ -7,27 +7,27 @@ export var Config = {
7
7
  /**
8
8
  * Logging level (e.g., 'info', 'debug', 'warn', 'error').
9
9
  */
10
- level: Env.get("LOGGER_LEVEL", "info"),
10
+ level: Env.get('LOGGER_LEVEL', 'info'),
11
11
  /**
12
12
  * Name of the logger instance (defaults to npm package name).
13
13
  */
14
- name: Env.get("LOGGER_NAME", Env.get("npm_package_name", "@catbee/utils")),
14
+ name: Env.get('LOGGER_NAME', Env.get('npm_package_name', '@catbee/utils')),
15
15
  /**
16
16
  * Whether to use ISO 8601 timestamps in logs.
17
17
  */
18
- isoTimestamp: Env.getBoolean("LOGGER_ISO_TIMESTAMP", false),
18
+ isoTimestamp: Env.getBoolean('LOGGER_ISO_TIMESTAMP', false)
19
19
  },
20
20
  Http: {
21
21
  /**
22
22
  * Timeout for HTTP requests in milliseconds
23
23
  */
24
- timeout: Env.getNumber("HTTP_TIMEOUT", 30000),
24
+ timeout: Env.getNumber('HTTP_TIMEOUT', 30000)
25
25
  },
26
26
  Cache: {
27
27
  /**
28
28
  * Default TTL (time to live) for cache entries in seconds
29
29
  */
30
- defaultTtl: Env.getNumber("CACHE_DEFAULT_TTL", 300),
31
- },
30
+ defaultTtl: Env.getNumber('CACHE_DEFAULT_TTL', 300)
31
+ }
32
32
  };
33
33
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAWxC;;GAEG;AACH,MAAM,CAAC,IAAM,MAAM,GAAG;IACpB,MAAM,EAAE;QACN;;WAEG;QACH,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAa;QAElD;;WAEG;QACH,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;QAE1E;;WAEG;QACH,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC;KAC5D;IAED,IAAI,EAAE;QACJ;;WAEG;QACH,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC;KAC9C;IAED,KAAK,EAAE;QACL;;WAEG;QACH,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;KACpD;CACF,CAAC","sourcesContent":["import { Env } from \"./utils/env.utils\";\n\ntype LogLevel =\n | \"fatal\"\n | \"error\"\n | \"warn\"\n | \"info\"\n | \"debug\"\n | \"trace\"\n | \"silent\";\n\n/**\n * Application runtime configuration loaded from environment variables.\n */\nexport const Config = {\n Logger: {\n /**\n * Logging level (e.g., 'info', 'debug', 'warn', 'error').\n */\n level: Env.get(\"LOGGER_LEVEL\", \"info\") as LogLevel,\n\n /**\n * Name of the logger instance (defaults to npm package name).\n */\n name: Env.get(\"LOGGER_NAME\", Env.get(\"npm_package_name\", \"@catbee/utils\")),\n\n /**\n * Whether to use ISO 8601 timestamps in logs.\n */\n isoTimestamp: Env.getBoolean(\"LOGGER_ISO_TIMESTAMP\", false),\n },\n\n Http: {\n /**\n * Timeout for HTTP requests in milliseconds\n */\n timeout: Env.getNumber(\"HTTP_TIMEOUT\", 30000),\n },\n\n Cache: {\n /**\n * Default TTL (time to live) for cache entries in seconds\n */\n defaultTtl: Env.getNumber(\"CACHE_DEFAULT_TTL\", 300),\n },\n};\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC;;GAEG;AACH,MAAM,CAAC,IAAM,MAAM,GAAG;IACpB,MAAM,EAAE;QACN;;WAEG;QACH,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAa;QAElD;;WAEG;QACH,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;QAE1E;;WAEG;QACH,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC;KAC5D;IAED,IAAI,EAAE;QACJ;;WAEG;QACH,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC;KAC9C;IAED,KAAK,EAAE;QACL;;WAEG;QACH,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;KACpD;CACF,CAAC","sourcesContent":["import { Env } from './utils/env.utils';\n\ntype LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace' | 'silent';\n\n/**\n * Application runtime configuration loaded from environment variables.\n */\nexport const Config = {\n Logger: {\n /**\n * Logging level (e.g., 'info', 'debug', 'warn', 'error').\n */\n level: Env.get('LOGGER_LEVEL', 'info') as LogLevel,\n\n /**\n * Name of the logger instance (defaults to npm package name).\n */\n name: Env.get('LOGGER_NAME', Env.get('npm_package_name', '@catbee/utils')),\n\n /**\n * Whether to use ISO 8601 timestamps in logs.\n */\n isoTimestamp: Env.getBoolean('LOGGER_ISO_TIMESTAMP', false)\n },\n\n Http: {\n /**\n * Timeout for HTTP requests in milliseconds\n */\n timeout: Env.getNumber('HTTP_TIMEOUT', 30000)\n },\n\n Cache: {\n /**\n * Default TTL (time to live) for cache entries in seconds\n */\n defaultTtl: Env.getNumber('CACHE_DEFAULT_TTL', 300)\n }\n};\n"]}
@@ -1,20 +1,21 @@
1
- export * from "./utils/array.utils";
2
- export * from "./utils/async.utils";
3
- export * from "./utils/cache.utils";
4
- export * from "./utils/context-store.utils";
5
- export * from "./utils/crypto.utils";
6
- export * from "./utils/dir.utils";
7
- export * from "./utils/env.utils";
8
- export * from "./utils/exception.utils";
9
- export * from "./utils/fs.utils";
10
- export * from "./utils/http-status-codes";
11
- export * from "./utils/id.utils";
12
- export * from "./utils/logger.utils";
13
- export * from "./utils/middleware.utils";
14
- export * from "./utils/obj.utils";
15
- export * from "./utils/response.utils";
16
- export * from "./utils/string.utils";
17
- export * from "./utils/url.utils";
18
- export * from "./utils/validate.utils";
19
- export * from "./types/api-response";
1
+ export * from './utils/array.utils';
2
+ export * from './utils/async.utils';
3
+ export * from './utils/cache.utils';
4
+ export * from './utils/context-store.utils';
5
+ export * from './utils/crypto.utils';
6
+ export * from './utils/decorators.utils';
7
+ export * from './utils/dir.utils';
8
+ export * from './utils/env.utils';
9
+ export * from './utils/exception.utils';
10
+ export * from './utils/fs.utils';
11
+ export * from './utils/http-status-codes';
12
+ export * from './utils/id.utils';
13
+ export * from './utils/logger.utils';
14
+ export * from './utils/middleware.utils';
15
+ export * from './utils/obj.utils';
16
+ export * from './utils/response.utils';
17
+ export * from './utils/string.utils';
18
+ export * from './utils/url.utils';
19
+ export * from './utils/validate.utils';
20
+ export * from './types/api-response';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1,20 +1,21 @@
1
- export * from "./utils/array.utils";
2
- export * from "./utils/async.utils";
3
- export * from "./utils/cache.utils";
4
- export * from "./utils/context-store.utils";
5
- export * from "./utils/crypto.utils";
6
- export * from "./utils/dir.utils";
7
- export * from "./utils/env.utils";
8
- export * from "./utils/exception.utils";
9
- export * from "./utils/fs.utils";
10
- export * from "./utils/http-status-codes";
11
- export * from "./utils/id.utils";
12
- export * from "./utils/logger.utils";
13
- export * from "./utils/middleware.utils";
14
- export * from "./utils/obj.utils";
15
- export * from "./utils/response.utils";
16
- export * from "./utils/string.utils";
17
- export * from "./utils/url.utils";
18
- export * from "./utils/validate.utils";
19
- export * from "./types/api-response";
1
+ export * from './utils/array.utils';
2
+ export * from './utils/async.utils';
3
+ export * from './utils/cache.utils';
4
+ export * from './utils/context-store.utils';
5
+ export * from './utils/crypto.utils';
6
+ export * from './utils/decorators.utils';
7
+ export * from './utils/dir.utils';
8
+ export * from './utils/env.utils';
9
+ export * from './utils/exception.utils';
10
+ export * from './utils/fs.utils';
11
+ export * from './utils/http-status-codes';
12
+ export * from './utils/id.utils';
13
+ export * from './utils/logger.utils';
14
+ export * from './utils/middleware.utils';
15
+ export * from './utils/obj.utils';
16
+ export * from './utils/response.utils';
17
+ export * from './utils/string.utils';
18
+ export * from './utils/url.utils';
19
+ export * from './utils/validate.utils';
20
+ export * from './types/api-response';
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./utils/array.utils\";\nexport * from \"./utils/async.utils\";\nexport * from \"./utils/cache.utils\";\nexport * from \"./utils/context-store.utils\";\nexport * from \"./utils/crypto.utils\";\nexport * from \"./utils/dir.utils\";\nexport * from \"./utils/env.utils\";\nexport * from \"./utils/exception.utils\";\nexport * from \"./utils/fs.utils\";\nexport * from \"./utils/http-status-codes\";\nexport * from \"./utils/id.utils\";\nexport * from \"./utils/logger.utils\";\nexport * from \"./utils/middleware.utils\";\nexport * from \"./utils/obj.utils\";\nexport * from \"./utils/response.utils\";\nexport * from \"./utils/string.utils\";\nexport * from \"./utils/url.utils\";\nexport * from \"./utils/validate.utils\";\n\nexport * from \"./types/api-response\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from './utils/array.utils';\nexport * from './utils/async.utils';\nexport * from './utils/cache.utils';\nexport * from './utils/context-store.utils';\nexport * from './utils/crypto.utils';\nexport * from './utils/decorators.utils';\nexport * from './utils/dir.utils';\nexport * from './utils/env.utils';\nexport * from './utils/exception.utils';\nexport * from './utils/fs.utils';\nexport * from './utils/http-status-codes';\nexport * from './utils/id.utils';\nexport * from './utils/logger.utils';\nexport * from './utils/middleware.utils';\nexport * from './utils/obj.utils';\nexport * from './utils/response.utils';\nexport * from './utils/string.utils';\nexport * from './utils/url.utils';\nexport * from './utils/validate.utils';\n\nexport * from './types/api-response';\n"]}
@@ -33,7 +33,7 @@ export interface Pagination<T = any> {
33
33
  /** Field by which the data is sorted. */
34
34
  sortBy: string;
35
35
  /** Sort order: ascending or descending. */
36
- sortOrder: "asc" | "desc";
36
+ sortOrder: 'asc' | 'desc';
37
37
  };
38
38
  }
39
39
  /**
@@ -45,7 +45,7 @@ export type PaginationResponse<T = any> = Pagination<T>;
45
45
  * Error response structure with additional metadata.
46
46
  * Used for providing richer error information to clients.
47
47
  */
48
- export interface ApiErrorResponse extends Omit<ApiResponse<never>, "data"> {
48
+ export interface ApiErrorResponse extends Omit<ApiResponse<never>, 'data'> {
49
49
  /** Error always true for error responses */
50
50
  error: true;
51
51
  /** HTTP status code */
@@ -1 +1 @@
1
- {"version":3,"file":"api-response.js","sourceRoot":"","sources":["../../../src/types/api-response.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Generic API response format.\n * Used to wrap any successful or failed response from the server.\n */\nexport interface ApiResponse<T = any> {\n /** Payload returned from the API. Can be any shape depending on the endpoint. */\n data: T | null;\n\n /** Indicates whether an error occurred (true = error, false = success). */\n error: boolean;\n\n /** Human-readable message to describe the result or error. */\n message: string;\n\n /** Unique request ID for traceability in logs (e.g., from a middleware). */\n requestId: string;\n\n /** ISO timestamp when the response was generated. */\n timestamp: string;\n}\n\n/**\n * Generic pagination structure used for paged lists (e.g., /users?page=1).\n */\nexport interface Pagination<T = any> {\n /** List of records for the current page. */\n content: T[];\n\n /** Metadata about the pagination state. */\n pagination: {\n /** Total number of records across all pages. */\n totalRecords: number;\n\n /** Total number of pages available. */\n totalPages: number;\n\n /** Current page number (1-based index). */\n page: number;\n\n /** Number of records per page. */\n limit: number;\n\n /** Field by which the data is sorted. */\n sortBy: string;\n\n /** Sort order: ascending or descending. */\n sortOrder: \"asc\" | \"desc\";\n };\n}\n\n/**\n * Alias for paginated API response.\n * Allows semantic naming like `PaginationResponse<User>` or `PaginationResponse<Post>`.\n */\nexport type PaginationResponse<T = any> = Pagination<T>;\n\n/**\n * Error response structure with additional metadata.\n * Used for providing richer error information to clients.\n */\nexport interface ApiErrorResponse extends Omit<ApiResponse<never>, \"data\"> {\n /** Error always true for error responses */\n error: true;\n\n /** HTTP status code */\n status: number;\n\n /** Error code for client-side error handling */\n code?: string;\n\n /** Optional detailed validation errors */\n details?: Record<string, string[]>;\n\n /** Link to error documentation */\n docUrl?: string;\n}\n\n/**\n * Success response structure with strongly typed data.\n * Used for providing successful responses to clients.\n */\nexport interface ApiSuccessResponse<T = any> extends ApiResponse<T> {\n /** Error always false for success responses */\n error: false;\n\n /** HTTP status code (usually 200) */\n status?: number;\n}\n\n/**\n * Response structure for batch operations.\n * Used when multiple operations are performed in a single request.\n */\nexport interface BatchResponse<T = any> {\n /** Overall success/failure indicator */\n success: boolean;\n\n /** Total number of operations */\n total: number;\n\n /** Number of successful operations */\n successful: number;\n\n /** Number of failed operations */\n failed: number;\n\n /** Results of individual operations */\n results: Array<{\n /** Identifier for this operation */\n id: string | number;\n\n /** Success/failure indicator for this operation */\n success: boolean;\n\n /** Response data for this operation */\n data?: T;\n\n /** Error information if this operation failed */\n error?: {\n message: string;\n code?: string;\n };\n }>;\n}\n\n/**\n * Response structure for asynchronous operations.\n * Used when the operation will complete in the future.\n */\nexport interface AsyncOperationResponse {\n /** Always true for async operations */\n async: true;\n\n /** Job or task ID to check status later */\n jobId: string;\n\n /** Estimated completion time in seconds (if known) */\n estimatedTime?: number;\n\n /** URL to check status */\n statusUrl: string;\n}\n\n/**\n * Response structure for streaming operations.\n * Used when data is returned as a stream rather than all at once.\n */\nexport interface StreamResponse {\n /** Stream identifier */\n streamId: string;\n\n /** Stream type (e.g., 'json', 'binary') */\n streamType: string;\n\n /** Total size in bytes (if known) */\n totalSize?: number;\n\n /** Chunk size in bytes */\n chunkSize: number;\n}\n"]}
1
+ {"version":3,"file":"api-response.js","sourceRoot":"","sources":["../../../src/types/api-response.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Generic API response format.\n * Used to wrap any successful or failed response from the server.\n */\nexport interface ApiResponse<T = any> {\n /** Payload returned from the API. Can be any shape depending on the endpoint. */\n data: T | null;\n\n /** Indicates whether an error occurred (true = error, false = success). */\n error: boolean;\n\n /** Human-readable message to describe the result or error. */\n message: string;\n\n /** Unique request ID for traceability in logs (e.g., from a middleware). */\n requestId: string;\n\n /** ISO timestamp when the response was generated. */\n timestamp: string;\n}\n\n/**\n * Generic pagination structure used for paged lists (e.g., /users?page=1).\n */\nexport interface Pagination<T = any> {\n /** List of records for the current page. */\n content: T[];\n\n /** Metadata about the pagination state. */\n pagination: {\n /** Total number of records across all pages. */\n totalRecords: number;\n\n /** Total number of pages available. */\n totalPages: number;\n\n /** Current page number (1-based index). */\n page: number;\n\n /** Number of records per page. */\n limit: number;\n\n /** Field by which the data is sorted. */\n sortBy: string;\n\n /** Sort order: ascending or descending. */\n sortOrder: 'asc' | 'desc';\n };\n}\n\n/**\n * Alias for paginated API response.\n * Allows semantic naming like `PaginationResponse<User>` or `PaginationResponse<Post>`.\n */\nexport type PaginationResponse<T = any> = Pagination<T>;\n\n/**\n * Error response structure with additional metadata.\n * Used for providing richer error information to clients.\n */\nexport interface ApiErrorResponse extends Omit<ApiResponse<never>, 'data'> {\n /** Error always true for error responses */\n error: true;\n\n /** HTTP status code */\n status: number;\n\n /** Error code for client-side error handling */\n code?: string;\n\n /** Optional detailed validation errors */\n details?: Record<string, string[]>;\n\n /** Link to error documentation */\n docUrl?: string;\n}\n\n/**\n * Success response structure with strongly typed data.\n * Used for providing successful responses to clients.\n */\nexport interface ApiSuccessResponse<T = any> extends ApiResponse<T> {\n /** Error always false for success responses */\n error: false;\n\n /** HTTP status code (usually 200) */\n status?: number;\n}\n\n/**\n * Response structure for batch operations.\n * Used when multiple operations are performed in a single request.\n */\nexport interface BatchResponse<T = any> {\n /** Overall success/failure indicator */\n success: boolean;\n\n /** Total number of operations */\n total: number;\n\n /** Number of successful operations */\n successful: number;\n\n /** Number of failed operations */\n failed: number;\n\n /** Results of individual operations */\n results: Array<{\n /** Identifier for this operation */\n id: string | number;\n\n /** Success/failure indicator for this operation */\n success: boolean;\n\n /** Response data for this operation */\n data?: T;\n\n /** Error information if this operation failed */\n error?: {\n message: string;\n code?: string;\n };\n }>;\n}\n\n/**\n * Response structure for asynchronous operations.\n * Used when the operation will complete in the future.\n */\nexport interface AsyncOperationResponse {\n /** Always true for async operations */\n async: true;\n\n /** Job or task ID to check status later */\n jobId: string;\n\n /** Estimated completion time in seconds (if known) */\n estimatedTime?: number;\n\n /** URL to check status */\n statusUrl: string;\n}\n\n/**\n * Response structure for streaming operations.\n * Used when data is returned as a stream rather than all at once.\n */\nexport interface StreamResponse {\n /** Stream identifier */\n streamId: string;\n\n /** Stream type (e.g., 'json', 'binary') */\n streamType: string;\n\n /** Total size in bytes (if known) */\n totalSize?: number;\n\n /** Chunk size in bytes */\n chunkSize: number;\n}\n"]}
@@ -101,7 +101,7 @@ export declare function intersect<T>(a: T[], b: T[]): T[];
101
101
  * @returns {T[]} A new sorted array.
102
102
  * @throws {TypeError} If array is not an array.
103
103
  */
104
- export declare function mergeSort<T>(array: T[], key: string | ((item: T) => any), direction?: "asc" | "desc"): T[];
104
+ export declare function mergeSort<T>(array: T[], key: string | ((item: T) => any), direction?: 'asc' | 'desc'): T[];
105
105
  /**
106
106
  * Combines multiple arrays into a single array of grouped elements.
107
107
  * Output array length equals the length of the shortest input array.
@@ -23,7 +23,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
23
23
  }
24
24
  return to.concat(ar || Array.prototype.slice.call(from));
25
25
  };
26
- import { getValueByPath } from "./obj.utils";
26
+ import { getValueByPath } from './obj.utils';
27
27
  /**
28
28
  * Splits an array into chunks of the specified size.
29
29
  *
@@ -36,14 +36,12 @@ import { getValueByPath } from "./obj.utils";
36
36
  */
37
37
  export function chunk(array, size) {
38
38
  if (!Array.isArray(array))
39
- throw new TypeError("Expected an array");
39
+ throw new TypeError('Expected an array');
40
40
  if (!array.length)
41
41
  return [];
42
42
  if (!Number.isInteger(size) || size <= 0)
43
- throw new Error("Chunk size must be a positive integer");
44
- return Array.from({ length: Math.ceil(array.length / size) }, function (_, i) {
45
- return array.slice(i * size, i * size + size);
46
- });
43
+ throw new Error('Chunk size must be a positive integer');
44
+ return Array.from({ length: Math.ceil(array.length / size) }, function (_, i) { return array.slice(i * size, i * size + size); });
47
45
  }
48
46
  /**
49
47
  * Removes duplicate values from an array.
@@ -103,9 +101,7 @@ export function random(array) {
103
101
  export function groupBy(array, keyOrFn) {
104
102
  if (!Array.isArray(array) || array.length === 0)
105
103
  return {};
106
- var keyFn = typeof keyOrFn === "function"
107
- ? keyOrFn
108
- : function (item) { return item[keyOrFn]; };
104
+ var keyFn = typeof keyOrFn === 'function' ? keyOrFn : function (item) { return item[keyOrFn]; };
109
105
  return array.reduce(function (acc, item) {
110
106
  var key = keyFn(item);
111
107
  if (!acc[key])
@@ -126,7 +122,7 @@ export function groupBy(array, keyOrFn) {
126
122
  export function shuffle(array) {
127
123
  var _a;
128
124
  if (!Array.isArray(array))
129
- throw new TypeError("Expected an array");
125
+ throw new TypeError('Expected an array');
130
126
  var copy = array.slice();
131
127
  for (var i = copy.length - 1; i > 0; i--) {
132
128
  var j = Math.floor(Math.random() * (i + 1));
@@ -188,14 +184,12 @@ export function intersect(a, b) {
188
184
  * @throws {TypeError} If array is not an array.
189
185
  */
190
186
  export function mergeSort(array, key, direction) {
191
- if (direction === void 0) { direction = "asc"; }
187
+ if (direction === void 0) { direction = 'asc'; }
192
188
  if (!Array.isArray(array))
193
- throw new TypeError("Expected array");
189
+ throw new TypeError('Expected array');
194
190
  if (array.length <= 1)
195
191
  return array.slice();
196
- var keyFn = typeof key === "function"
197
- ? key
198
- : function (item) { return getValueByPath(item, key); };
192
+ var keyFn = typeof key === 'function' ? key : function (item) { return getValueByPath(item, key); };
199
193
  var compare = function (a, b) {
200
194
  var aVal = keyFn(a);
201
195
  var bVal = keyFn(b);
@@ -203,10 +197,10 @@ export function mergeSort(array, key, direction) {
203
197
  if (aVal === bVal)
204
198
  return 0;
205
199
  if (aVal == null)
206
- return direction === "asc" ? 1 : -1;
200
+ return direction === 'asc' ? 1 : -1;
207
201
  if (bVal == null)
208
- return direction === "asc" ? -1 : 1;
209
- return direction === "asc" ? (aVal < bVal ? -1 : 1) : aVal > bVal ? -1 : 1;
202
+ return direction === 'asc' ? -1 : 1;
203
+ return direction === 'asc' ? (aVal < bVal ? -1 : 1) : aVal > bVal ? -1 : 1;
210
204
  };
211
205
  var merge = function (left, right) {
212
206
  var result = [];
@@ -245,7 +239,7 @@ export function zip() {
245
239
  if (arrays.length === 0)
246
240
  return [];
247
241
  if (arrays.some(function (arr) { return !Array.isArray(arr); })) {
248
- throw new TypeError("All arguments must be arrays");
242
+ throw new TypeError('All arguments must be arrays');
249
243
  }
250
244
  var minLength = Math.min.apply(Math, __spreadArray([], __read(arrays.map(function (arr) { return arr.length; })), false));
251
245
  var result = [];
@@ -270,9 +264,7 @@ export function partition(array, predicate) {
270
264
  return [[], []];
271
265
  return array.reduce(function (_a, item, index) {
272
266
  var _b = __read(_a, 2), pass = _b[0], fail = _b[1];
273
- return predicate(item, index, array)
274
- ? [__spreadArray(__spreadArray([], __read(pass), false), [item], false), fail]
275
- : [pass, __spreadArray(__spreadArray([], __read(fail), false), [item], false)];
267
+ return predicate(item, index, array) ? [__spreadArray(__spreadArray([], __read(pass), false), [item], false), fail] : [pass, __spreadArray(__spreadArray([], __read(fail), false), [item], false)];
276
268
  }, [[], []]);
277
269
  }
278
270
  /**
@@ -285,13 +277,11 @@ export function partition(array, predicate) {
285
277
  */
286
278
  export function range(start, end, step) {
287
279
  if (step === void 0) { step = 1; }
288
- if (!Number.isFinite(start) ||
289
- !Number.isFinite(end) ||
290
- !Number.isFinite(step)) {
291
- throw new TypeError("Arguments must be finite numbers");
280
+ if (!Number.isFinite(start) || !Number.isFinite(end) || !Number.isFinite(step)) {
281
+ throw new TypeError('Arguments must be finite numbers');
292
282
  }
293
283
  if (step === 0)
294
- throw new Error("Step cannot be zero");
284
+ throw new Error('Step cannot be zero');
295
285
  var isAscending = step > 0;
296
286
  if ((isAscending && start >= end) || (!isAscending && start <= end)) {
297
287
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"array.utils.js","sourceRoot":"","sources":["../../../src/utils/array.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { getValueByPath } from \"./obj.utils\";\n\n/**\n * Splits an array into chunks of the specified size.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The array to split into chunks.\n * @param {number} size - The number of elements per chunk.\n * @returns {T[][]} A new array containing chunked arrays.\n * @throws {TypeError} If array is not an array.\n * @throws {Error} If chunk size is not a positive integer.\n */\nexport function chunk<T>(array: T[], size: number): T[][] {\n if (!Array.isArray(array)) throw new TypeError(\"Expected an array\");\n if (!array.length) return [];\n if (!Number.isInteger(size) || size <= 0)\n throw new Error(\"Chunk size must be a positive integer\");\n return Array.from({ length: Math.ceil(array.length / size) }, (_, i) =>\n array.slice(i * size, i * size + size),\n );\n}\n\n/**\n * Removes duplicate values from an array.\n * Optionally enforces uniqueness by a key function.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T) => unknown} [keyFn] - Optional function to determine uniqueness by key.\n * @returns {T[]} A new array with unique values.\n */\nexport function unique<T>(array: T[], keyFn?: (item: T) => unknown): T[] {\n if (!Array.isArray(array) || array.length === 0) return [];\n if (!keyFn) return Array.from(new Set(array));\n const seen = new Set<unknown>();\n return array.filter((item) => {\n const key = keyFn(item);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\n/**\n * Deeply flattens a nested array to a single-level array.\n *\n * @template T The leaf type of array elements.\n * @param {any[]} array - The (possibly deeply nested) input array.\n * @returns {T[]} A deeply flattened array.\n */\nexport function flattenDeep<T>(array: any[]): T[] {\n if (!Array.isArray(array)) return [];\n return array.reduce<T[]>((acc, val) => {\n if (Array.isArray(val)) {\n acc.push(...flattenDeep<T>(val));\n } else {\n acc.push(val);\n }\n return acc;\n }, []);\n}\n\n/**\n * Returns a random element from an array, or undefined if empty.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @returns {T | undefined} A randomly selected item, or undefined if array is empty or not an array.\n */\nexport function random<T>(array: T[]): T | undefined {\n if (!Array.isArray(array) || array.length === 0) return undefined;\n return array[Math.floor(Math.random() * array.length)];\n}\n\n/* eslint-disable no-redeclare */\n/**\n * Groups items in an array by a key or key function.\n *\n * @template T The type of array elements.\n * @overload\n * @param {T[]} array - The array to group.\n * @param {keyof T} key - Property key to group by.\n * @returns {Record<string, T[]>}\n * @overload\n * @param {T[]} array - The array to group.\n * @param {(item: T) => string | number | symbol} keyFn - Function to generate group key from item.\n * @returns {Record<K, T[]>}\n * @param {T[]} array - The array to group.\n * @param {keyof T | ((item: T) => string | number | symbol)} keyOrFn - Property key or key-generating function.\n * @returns {Record<string | number | symbol, T[]>} An object mapping group keys to item arrays.\n */\nexport function groupBy<T>(array: T[], key: keyof T): Record<string, T[]>;\nexport function groupBy<T, K extends string | number | symbol>(\n array: T[],\n keyFn: (item: T) => K,\n): Record<K, T[]>;\nexport function groupBy<T>(\n array: T[],\n keyOrFn: keyof T | ((item: T) => string | number | symbol),\n): Record<string | number | symbol, T[]> {\n if (!Array.isArray(array) || array.length === 0) return {};\n const keyFn =\n typeof keyOrFn === \"function\"\n ? keyOrFn\n : (item: T) => item[keyOrFn as keyof T];\n return array.reduce(\n (acc, item) => {\n const key = keyFn(item) as string | number | symbol;\n if (!acc[key]) acc[key] = [];\n acc[key].push(item);\n return acc;\n },\n {} as Record<string | number | symbol, T[]>,\n );\n}\n/* eslint-enable no-redeclare */\n\n/**\n * Shuffles an array using the Fisher-Yates algorithm.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @returns {T[]} A new shuffled array.\n * @throws {TypeError} If array is not an array.\n */\nexport function shuffle<T>(array: T[]): T[] {\n if (!Array.isArray(array)) throw new TypeError(\"Expected an array\");\n const copy = array.slice();\n for (let i = copy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [copy[i], copy[j]] = [copy[j], copy[i]];\n }\n return copy;\n}\n\n/**\n * Returns an array of property values from an array of objects.\n *\n * @template T The type of array elements.\n * @template K The object property to pluck.\n * @param {T[]} array - The input array.\n * @param {K} key - The property name to pluck.\n * @returns {T[K][]} Array of property values.\n */\nexport function pluck<T, K extends keyof T>(array: T[], key: K): T[K][] {\n if (!Array.isArray(array)) return [];\n return array.map((item) => item[key]);\n}\n\n/**\n * Returns values in array A that are not in array B.\n *\n * @template T The type of array elements.\n * @param {T[]} a - First array.\n * @param {T[]} b - Second array.\n * @returns {T[]} Elements in A that are not in B.\n */\nexport function difference<T>(a: T[], b: T[]): T[] {\n if (!Array.isArray(a) || !Array.isArray(b)) return [];\n const setB = new Set(b);\n return a.filter((item) => !setB.has(item));\n}\n\n/**\n * Returns common values between arrays A and B.\n *\n * @template T The type of array elements.\n * @param {T[]} a - First array.\n * @param {T[]} b - Second array.\n * @returns {T[]} Elements that exist in both arrays.\n */\nexport function intersect<T>(a: T[], b: T[]): T[] {\n if (!Array.isArray(a) || !Array.isArray(b)) return [];\n const setB = new Set(b);\n return a.filter((item) => setB.has(item));\n}\n\n/**\n * Sorts an array of objects by a nested key using Merge Sort (O(n log n)).\n * Missing/undefined keys are sorted to the \"end\" (asc) or \"start\" (desc).\n *\n * @template T The type of array elements (objects).\n * @param {T[]} array - Array of objects to sort.\n * @param {string | ((item: T) => any)} key - Dot-notated key (e.g., \"profile.age\") or function.\n * @param {\"asc\" | \"desc\"} [direction=\"asc\"] - Sort direction: 'asc' or 'desc'.\n * @returns {T[]} A new sorted array.\n * @throws {TypeError} If array is not an array.\n */\nexport function mergeSort<T>(\n array: T[],\n key: string | ((item: T) => any),\n direction: \"asc\" | \"desc\" = \"asc\",\n): T[] {\n if (!Array.isArray(array)) throw new TypeError(\"Expected array\");\n if (array.length <= 1) return array.slice();\n\n const keyFn =\n typeof key === \"function\"\n ? key\n : (item: T) => getValueByPath(item as object, key);\n\n const compare = (a: T, b: T) => {\n const aVal = keyFn(a);\n const bVal = keyFn(b);\n // Sorts undefined/null last for \"asc\", first for \"desc\"\n if (aVal === bVal) return 0;\n if (aVal == null) return direction === \"asc\" ? 1 : -1;\n if (bVal == null) return direction === \"asc\" ? -1 : 1;\n return direction === \"asc\" ? (aVal < bVal ? -1 : 1) : aVal > bVal ? -1 : 1;\n };\n\n const merge = (left: T[], right: T[]): T[] => {\n const result: T[] = [];\n let i = 0,\n j = 0;\n while (i < left.length && j < right.length) {\n if (compare(left[i], right[j]) <= 0) result.push(left[i++]);\n else result.push(right[j++]);\n }\n return result.concat(left.slice(i)).concat(right.slice(j));\n };\n\n const sort = (arr: T[]): T[] => {\n if (arr.length <= 1) return arr;\n const mid = Math.floor(arr.length / 2);\n const left = sort(arr.slice(0, mid));\n const right = sort(arr.slice(mid));\n return merge(left, right);\n };\n return sort(array);\n}\n\n/**\n * Combines multiple arrays into a single array of grouped elements.\n * Output array length equals the length of the shortest input array.\n *\n * @example zip([1, 2], ['a', 'b']) => [[1, 'a'], [2, 'b']]\n * @param {...Array<T>[]} arrays - Two or more arrays to zip together.\n * @returns {Array<T[]>} Array of grouped elements.\n */\nexport function zip<T>(...arrays: T[][]): T[][] {\n if (arrays.length === 0) return [];\n if (arrays.some((arr) => !Array.isArray(arr))) {\n throw new TypeError(\"All arguments must be arrays\");\n }\n\n const minLength = Math.min(...arrays.map((arr) => arr.length));\n const result: T[][] = [];\n\n for (let i = 0; i < minLength; i++) {\n result.push(arrays.map((arr) => arr[i]));\n }\n\n return result;\n}\n\n/**\n * Splits an array into two arrays based on a predicate function.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T, index: number, array: T[]) => boolean} predicate - Function to test each element.\n * @returns {[T[], T[]]} A tuple of two arrays: [matched, unmatched].\n */\nexport function partition<T>(\n array: T[],\n predicate: (item: T, index: number, array: T[]) => boolean,\n): [T[], T[]] {\n if (!Array.isArray(array)) return [[], []];\n\n return array.reduce(\n ([pass, fail], item, index) => {\n return predicate(item, index, array)\n ? [[...pass, item], fail]\n : [pass, [...fail, item]];\n },\n [[] as T[], [] as T[]],\n );\n}\n\n/**\n * Generates an array of numbers within a specified range.\n *\n * @param {number} start - Start of range (inclusive).\n * @param {number} end - End of range (exclusive).\n * @param {number} [step=1] - Step between numbers.\n * @returns {number[]} Array of numbers in range.\n */\nexport function range(start: number, end: number, step: number = 1): number[] {\n if (\n !Number.isFinite(start) ||\n !Number.isFinite(end) ||\n !Number.isFinite(step)\n ) {\n throw new TypeError(\"Arguments must be finite numbers\");\n }\n if (step === 0) throw new Error(\"Step cannot be zero\");\n\n const isAscending = step > 0;\n if ((isAscending && start >= end) || (!isAscending && start <= end)) {\n return [];\n }\n\n const length = Math.max(Math.ceil((end - start) / step), 0);\n const result = new Array(length);\n\n for (let i = 0, value = start; i < length; i++, value += step) {\n result[i] = value;\n }\n\n return result;\n}\n\n/**\n * Returns the first n elements of an array.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {number} [n=1] - Number of elements to take.\n * @returns {T[]} New array with first n elements.\n */\nexport function take<T>(array: T[], n: number = 1): T[] {\n if (!Array.isArray(array) || n <= 0) return [];\n return array.slice(0, n);\n}\n\n/**\n * Takes elements from the array while predicate returns true.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T, index: number) => boolean} predicate - Function to test each element.\n * @returns {T[]} New array with taken elements.\n */\nexport function takeWhile<T>(\n array: T[],\n predicate: (item: T, index: number) => boolean,\n): T[] {\n if (!Array.isArray(array)) return [];\n\n const result: T[] = [];\n for (let i = 0; i < array.length; i++) {\n if (!predicate(array[i], i)) break;\n result.push(array[i]);\n }\n\n return result;\n}\n\n/**\n * Removes all falsy values from an array.\n * False, null, 0, \"\", undefined, and NaN are falsy.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @returns {NonNullable<T>[]} New array with falsy values removed.\n */\nexport function compact<T>(array: T[]): NonNullable<T>[] {\n if (!Array.isArray(array)) return [];\n return array.filter(Boolean) as NonNullable<T>[];\n}\n\n/**\n * Counts array elements by a key function.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T) => string | number | symbol} keyFn - Function to generate count key.\n * @returns {Record<string, number>} Object with counts by key.\n */\nexport function countBy<T>(\n array: T[],\n keyFn: (item: T) => string | number | symbol,\n): Record<string, number> {\n if (!Array.isArray(array)) return {};\n\n return array.reduce(\n (acc, item) => {\n const key = String(keyFn(item));\n acc[key] = (acc[key] || 0) + 1;\n return acc;\n },\n {} as Record<string, number>,\n );\n}\n"]}
1
+ {"version":3,"file":"array.utils.js","sourceRoot":"","sources":["../../../src/utils/array.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { getValueByPath } from './obj.utils';\n\n/**\n * Splits an array into chunks of the specified size.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The array to split into chunks.\n * @param {number} size - The number of elements per chunk.\n * @returns {T[][]} A new array containing chunked arrays.\n * @throws {TypeError} If array is not an array.\n * @throws {Error} If chunk size is not a positive integer.\n */\nexport function chunk<T>(array: T[], size: number): T[][] {\n if (!Array.isArray(array)) throw new TypeError('Expected an array');\n if (!array.length) return [];\n if (!Number.isInteger(size) || size <= 0) throw new Error('Chunk size must be a positive integer');\n return Array.from({ length: Math.ceil(array.length / size) }, (_, i) => array.slice(i * size, i * size + size));\n}\n\n/**\n * Removes duplicate values from an array.\n * Optionally enforces uniqueness by a key function.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T) => unknown} [keyFn] - Optional function to determine uniqueness by key.\n * @returns {T[]} A new array with unique values.\n */\nexport function unique<T>(array: T[], keyFn?: (item: T) => unknown): T[] {\n if (!Array.isArray(array) || array.length === 0) return [];\n if (!keyFn) return Array.from(new Set(array));\n const seen = new Set<unknown>();\n return array.filter(item => {\n const key = keyFn(item);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\n/**\n * Deeply flattens a nested array to a single-level array.\n *\n * @template T The leaf type of array elements.\n * @param {any[]} array - The (possibly deeply nested) input array.\n * @returns {T[]} A deeply flattened array.\n */\nexport function flattenDeep<T>(array: any[]): T[] {\n if (!Array.isArray(array)) return [];\n return array.reduce<T[]>((acc, val) => {\n if (Array.isArray(val)) {\n acc.push(...flattenDeep<T>(val));\n } else {\n acc.push(val);\n }\n return acc;\n }, []);\n}\n\n/**\n * Returns a random element from an array, or undefined if empty.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @returns {T | undefined} A randomly selected item, or undefined if array is empty or not an array.\n */\nexport function random<T>(array: T[]): T | undefined {\n if (!Array.isArray(array) || array.length === 0) return undefined;\n return array[Math.floor(Math.random() * array.length)];\n}\n\n/* eslint-disable no-redeclare */\n/**\n * Groups items in an array by a key or key function.\n *\n * @template T The type of array elements.\n * @overload\n * @param {T[]} array - The array to group.\n * @param {keyof T} key - Property key to group by.\n * @returns {Record<string, T[]>}\n * @overload\n * @param {T[]} array - The array to group.\n * @param {(item: T) => string | number | symbol} keyFn - Function to generate group key from item.\n * @returns {Record<K, T[]>}\n * @param {T[]} array - The array to group.\n * @param {keyof T | ((item: T) => string | number | symbol)} keyOrFn - Property key or key-generating function.\n * @returns {Record<string | number | symbol, T[]>} An object mapping group keys to item arrays.\n */\nexport function groupBy<T>(array: T[], key: keyof T): Record<string, T[]>;\nexport function groupBy<T, K extends string | number | symbol>(array: T[], keyFn: (item: T) => K): Record<K, T[]>;\nexport function groupBy<T>(\n array: T[],\n keyOrFn: keyof T | ((item: T) => string | number | symbol)\n): Record<string | number | symbol, T[]> {\n if (!Array.isArray(array) || array.length === 0) return {};\n const keyFn = typeof keyOrFn === 'function' ? keyOrFn : (item: T) => item[keyOrFn as keyof T];\n return array.reduce(\n (acc, item) => {\n const key = keyFn(item) as string | number | symbol;\n if (!acc[key]) acc[key] = [];\n acc[key].push(item);\n return acc;\n },\n {} as Record<string | number | symbol, T[]>\n );\n}\n/* eslint-enable no-redeclare */\n\n/**\n * Shuffles an array using the Fisher-Yates algorithm.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @returns {T[]} A new shuffled array.\n * @throws {TypeError} If array is not an array.\n */\nexport function shuffle<T>(array: T[]): T[] {\n if (!Array.isArray(array)) throw new TypeError('Expected an array');\n const copy = array.slice();\n for (let i = copy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [copy[i], copy[j]] = [copy[j], copy[i]];\n }\n return copy;\n}\n\n/**\n * Returns an array of property values from an array of objects.\n *\n * @template T The type of array elements.\n * @template K The object property to pluck.\n * @param {T[]} array - The input array.\n * @param {K} key - The property name to pluck.\n * @returns {T[K][]} Array of property values.\n */\nexport function pluck<T, K extends keyof T>(array: T[], key: K): T[K][] {\n if (!Array.isArray(array)) return [];\n return array.map(item => item[key]);\n}\n\n/**\n * Returns values in array A that are not in array B.\n *\n * @template T The type of array elements.\n * @param {T[]} a - First array.\n * @param {T[]} b - Second array.\n * @returns {T[]} Elements in A that are not in B.\n */\nexport function difference<T>(a: T[], b: T[]): T[] {\n if (!Array.isArray(a) || !Array.isArray(b)) return [];\n const setB = new Set(b);\n return a.filter(item => !setB.has(item));\n}\n\n/**\n * Returns common values between arrays A and B.\n *\n * @template T The type of array elements.\n * @param {T[]} a - First array.\n * @param {T[]} b - Second array.\n * @returns {T[]} Elements that exist in both arrays.\n */\nexport function intersect<T>(a: T[], b: T[]): T[] {\n if (!Array.isArray(a) || !Array.isArray(b)) return [];\n const setB = new Set(b);\n return a.filter(item => setB.has(item));\n}\n\n/**\n * Sorts an array of objects by a nested key using Merge Sort (O(n log n)).\n * Missing/undefined keys are sorted to the \"end\" (asc) or \"start\" (desc).\n *\n * @template T The type of array elements (objects).\n * @param {T[]} array - Array of objects to sort.\n * @param {string | ((item: T) => any)} key - Dot-notated key (e.g., \"profile.age\") or function.\n * @param {\"asc\" | \"desc\"} [direction=\"asc\"] - Sort direction: 'asc' or 'desc'.\n * @returns {T[]} A new sorted array.\n * @throws {TypeError} If array is not an array.\n */\nexport function mergeSort<T>(array: T[], key: string | ((item: T) => any), direction: 'asc' | 'desc' = 'asc'): T[] {\n if (!Array.isArray(array)) throw new TypeError('Expected array');\n if (array.length <= 1) return array.slice();\n\n const keyFn = typeof key === 'function' ? key : (item: T) => getValueByPath(item as object, key);\n\n const compare = (a: T, b: T) => {\n const aVal = keyFn(a);\n const bVal = keyFn(b);\n // Sorts undefined/null last for \"asc\", first for \"desc\"\n if (aVal === bVal) return 0;\n if (aVal == null) return direction === 'asc' ? 1 : -1;\n if (bVal == null) return direction === 'asc' ? -1 : 1;\n return direction === 'asc' ? (aVal < bVal ? -1 : 1) : aVal > bVal ? -1 : 1;\n };\n\n const merge = (left: T[], right: T[]): T[] => {\n const result: T[] = [];\n let i = 0,\n j = 0;\n while (i < left.length && j < right.length) {\n if (compare(left[i], right[j]) <= 0) result.push(left[i++]);\n else result.push(right[j++]);\n }\n return result.concat(left.slice(i)).concat(right.slice(j));\n };\n\n const sort = (arr: T[]): T[] => {\n if (arr.length <= 1) return arr;\n const mid = Math.floor(arr.length / 2);\n const left = sort(arr.slice(0, mid));\n const right = sort(arr.slice(mid));\n return merge(left, right);\n };\n return sort(array);\n}\n\n/**\n * Combines multiple arrays into a single array of grouped elements.\n * Output array length equals the length of the shortest input array.\n *\n * @example zip([1, 2], ['a', 'b']) => [[1, 'a'], [2, 'b']]\n * @param {...Array<T>[]} arrays - Two or more arrays to zip together.\n * @returns {Array<T[]>} Array of grouped elements.\n */\nexport function zip<T>(...arrays: T[][]): T[][] {\n if (arrays.length === 0) return [];\n if (arrays.some(arr => !Array.isArray(arr))) {\n throw new TypeError('All arguments must be arrays');\n }\n\n const minLength = Math.min(...arrays.map(arr => arr.length));\n const result: T[][] = [];\n\n for (let i = 0; i < minLength; i++) {\n result.push(arrays.map(arr => arr[i]));\n }\n\n return result;\n}\n\n/**\n * Splits an array into two arrays based on a predicate function.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T, index: number, array: T[]) => boolean} predicate - Function to test each element.\n * @returns {[T[], T[]]} A tuple of two arrays: [matched, unmatched].\n */\nexport function partition<T>(array: T[], predicate: (item: T, index: number, array: T[]) => boolean): [T[], T[]] {\n if (!Array.isArray(array)) return [[], []];\n\n return array.reduce(\n ([pass, fail], item, index) => {\n return predicate(item, index, array) ? [[...pass, item], fail] : [pass, [...fail, item]];\n },\n [[] as T[], [] as T[]]\n );\n}\n\n/**\n * Generates an array of numbers within a specified range.\n *\n * @param {number} start - Start of range (inclusive).\n * @param {number} end - End of range (exclusive).\n * @param {number} [step=1] - Step between numbers.\n * @returns {number[]} Array of numbers in range.\n */\nexport function range(start: number, end: number, step: number = 1): number[] {\n if (!Number.isFinite(start) || !Number.isFinite(end) || !Number.isFinite(step)) {\n throw new TypeError('Arguments must be finite numbers');\n }\n if (step === 0) throw new Error('Step cannot be zero');\n\n const isAscending = step > 0;\n if ((isAscending && start >= end) || (!isAscending && start <= end)) {\n return [];\n }\n\n const length = Math.max(Math.ceil((end - start) / step), 0);\n const result = new Array(length);\n\n for (let i = 0, value = start; i < length; i++, value += step) {\n result[i] = value;\n }\n\n return result;\n}\n\n/**\n * Returns the first n elements of an array.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {number} [n=1] - Number of elements to take.\n * @returns {T[]} New array with first n elements.\n */\nexport function take<T>(array: T[], n: number = 1): T[] {\n if (!Array.isArray(array) || n <= 0) return [];\n return array.slice(0, n);\n}\n\n/**\n * Takes elements from the array while predicate returns true.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T, index: number) => boolean} predicate - Function to test each element.\n * @returns {T[]} New array with taken elements.\n */\nexport function takeWhile<T>(array: T[], predicate: (item: T, index: number) => boolean): T[] {\n if (!Array.isArray(array)) return [];\n\n const result: T[] = [];\n for (let i = 0; i < array.length; i++) {\n if (!predicate(array[i], i)) break;\n result.push(array[i]);\n }\n\n return result;\n}\n\n/**\n * Removes all falsy values from an array.\n * False, null, 0, \"\", undefined, and NaN are falsy.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @returns {NonNullable<T>[]} New array with falsy values removed.\n */\nexport function compact<T>(array: T[]): NonNullable<T>[] {\n if (!Array.isArray(array)) return [];\n return array.filter(Boolean) as NonNullable<T>[];\n}\n\n/**\n * Counts array elements by a key function.\n *\n * @template T The type of array elements.\n * @param {T[]} array - The input array.\n * @param {(item: T) => string | number | symbol} keyFn - Function to generate count key.\n * @returns {Record<string, number>} Object with counts by key.\n */\nexport function countBy<T>(array: T[], keyFn: (item: T) => string | number | symbol): Record<string, number> {\n if (!Array.isArray(array)) return {};\n\n return array.reduce(\n (acc, item) => {\n const key = String(keyFn(item));\n acc[key] = (acc[key] || 0) + 1;\n return acc;\n },\n {} as Record<string, number>\n );\n}\n"]}
@@ -150,11 +150,7 @@ export declare function abortable<T>(promise: Promise<T>, signal: AbortSignal, a
150
150
  * @returns {[Promise<T>, (value: T | PromiseLike<T>) => void, (reason?: any) => void]}
151
151
  * Tuple of [promise, resolve, reject]
152
152
  */
153
- export declare function createDeferred<T>(): [
154
- Promise<T>,
155
- (value: T | PromiseLike<T>) => void,
156
- (reason?: any) => void
157
- ];
153
+ export declare function createDeferred<T>(): [Promise<T>, (value: T | PromiseLike<T>) => void, (reason?: any) => void];
158
154
  /**
159
155
  * Chains a series of async functions, passing the result of each to the next.
160
156
  * Similar to function composition but for async functions.
@@ -133,7 +133,7 @@ export function debounce(fn, delay) {
133
133
  export function throttle(fn, limit, opts) {
134
134
  if (opts === void 0) { opts = {
135
135
  leading: true,
136
- trailing: false,
136
+ trailing: false
137
137
  }; }
138
138
  var lastCall = 0;
139
139
  var timer = null;
@@ -212,7 +212,7 @@ export function retry(fn_1) {
212
212
  case 6:
213
213
  i++;
214
214
  return [3 /*break*/, 1];
215
- case 7: throw new Error("Retry failed"); // should never reach here
215
+ case 7: throw new Error('Retry failed'); // should never reach here
216
216
  }
217
217
  });
218
218
  });
@@ -227,7 +227,7 @@ export function retry(fn_1) {
227
227
  * @returns {Promise<T>} A promise that resolves or rejects within the timeout.
228
228
  */
229
229
  export function withTimeout(promise, ms, message) {
230
- if (message === void 0) { message = "Operation timed out"; }
230
+ if (message === void 0) { message = 'Operation timed out'; }
231
231
  return new Promise(function (resolve, reject) {
232
232
  var timeoutHandle = setTimeout(function () { return reject(new Error(message)); }, ms);
233
233
  promise
@@ -305,7 +305,7 @@ export function singletonAsync(fn, drop) {
305
305
  });
306
306
  }
307
307
  else if (drop) {
308
- return [2 /*return*/, Promise.reject(new Error("Busy: function already running"))];
308
+ return [2 /*return*/, Promise.reject(new Error('Busy: function already running'))];
309
309
  }
310
310
  return [2 /*return*/, promise];
311
311
  });
@@ -365,7 +365,7 @@ export function createTaskQueue(limit) {
365
365
  */
366
366
  get isPaused() {
367
367
  return paused;
368
- },
368
+ }
369
369
  };
370
370
  var next = function () {
371
371
  if (paused || queue.length === 0 || activeCount >= limit)
@@ -415,11 +415,11 @@ export function createTaskQueue(limit) {
415
415
  };
416
416
  enqueue.pause = state.pause;
417
417
  enqueue.resume = state.resume;
418
- Object.defineProperty(enqueue, "length", {
419
- get: function () { return queue.length; },
418
+ Object.defineProperty(enqueue, 'length', {
419
+ get: function () { return queue.length; }
420
420
  });
421
- Object.defineProperty(enqueue, "isPaused", {
422
- get: function () { return paused; },
421
+ Object.defineProperty(enqueue, 'isPaused', {
422
+ get: function () { return paused; }
423
423
  });
424
424
  return enqueue;
425
425
  }
@@ -507,7 +507,7 @@ export function memoizeAsync(fn, options) {
507
507
  result = _a.sent();
508
508
  cache.set(key, {
509
509
  value: result,
510
- expires: ttl ? Date.now() + ttl : Infinity,
510
+ expires: ttl ? Date.now() + ttl : Infinity
511
511
  });
512
512
  return [2 /*return*/, result];
513
513
  }
@@ -525,7 +525,7 @@ export function memoizeAsync(fn, options) {
525
525
  * @returns {Promise<T>} Promise that rejects if the signal is aborted
526
526
  */
527
527
  export function abortable(promise, signal, abortValue) {
528
- if (abortValue === void 0) { abortValue = new Error("Operation aborted"); }
528
+ if (abortValue === void 0) { abortValue = new Error('Operation aborted'); }
529
529
  if (signal.aborted) {
530
530
  return Promise.reject(abortValue);
531
531
  }
@@ -533,9 +533,9 @@ export function abortable(promise, signal, abortValue) {
533
533
  promise,
534
534
  new Promise(function (_, reject) {
535
535
  var abort = function () { return reject(abortValue); };
536
- signal.addEventListener("abort", abort, { once: true });
537
- promise.finally(function () { return signal.removeEventListener("abort", abort); });
538
- }),
536
+ signal.addEventListener('abort', abort, { once: true });
537
+ promise.finally(function () { return signal.removeEventListener('abort', abort); });
538
+ })
539
539
  ]);
540
540
  }
541
541
  /**
@@ -602,8 +602,7 @@ export function rateLimit(fn, maxCalls, interval) {
602
602
  switch (_a.label) {
603
603
  case 0:
604
604
  now = Date.now();
605
- calls.splice.apply(calls, __spreadArray([0,
606
- calls.length], __read(calls.filter(function (time) { return now - time < interval; })), false));
605
+ calls.splice.apply(calls, __spreadArray([0, calls.length], __read(calls.filter(function (time) { return now - time < interval; })), false));
607
606
  if (!(calls.length >= maxCalls)) return [3 /*break*/, 3];
608
607
  oldestCall = calls[0];
609
608
  delay = interval - (now - oldestCall);
@@ -611,15 +610,13 @@ export function rateLimit(fn, maxCalls, interval) {
611
610
  case 1:
612
611
  _a.sent();
613
612
  currentTime_1 = Date.now();
614
- calls.splice.apply(calls, __spreadArray([0,
615
- calls.length], __read(calls.filter(function (time) { return currentTime_1 - time < interval; })), false));
613
+ calls.splice.apply(calls, __spreadArray([0, calls.length], __read(calls.filter(function (time) { return currentTime_1 - time < interval; })), false));
616
614
  if (!(calls.length >= maxCalls)) return [3 /*break*/, 3];
617
615
  nextDelay = interval - (currentTime_1 - calls[0]);
618
616
  return [4 /*yield*/, sleep(Math.max(1, nextDelay))];
619
617
  case 2:
620
618
  _a.sent();
621
- calls.splice.apply(calls, __spreadArray([0,
622
- calls.length], __read(calls.filter(function (time) { return Date.now() - time < interval; })), false));
619
+ calls.splice.apply(calls, __spreadArray([0, calls.length], __read(calls.filter(function (time) { return Date.now() - time < interval; })), false));
623
620
  _a.label = 3;
624
621
  case 3:
625
622
  calls.push(Date.now());