@kikiutils/shared 15.0.1 → 15.0.2

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 (69) hide show
  1. package/README.md +46 -119
  2. package/dist/crypto-hash.d.ts +145 -0
  3. package/dist/crypto-hash.d.ts.map +1 -1
  4. package/dist/crypto-hash.js +137 -7
  5. package/dist/crypto-hash.js.map +1 -1
  6. package/dist/datetime.d.ts +0 -2
  7. package/dist/datetime.d.ts.map +1 -1
  8. package/dist/datetime.js +0 -2
  9. package/dist/datetime.js.map +1 -1
  10. package/dist/env.d.ts +2 -0
  11. package/dist/env.d.ts.map +1 -1
  12. package/dist/env.js +2 -0
  13. package/dist/env.js.map +1 -1
  14. package/dist/event-awaiter.js +1 -1
  15. package/dist/event-awaiter.js.map +1 -1
  16. package/dist/hash.d.ts +48 -5
  17. package/dist/hash.d.ts.map +1 -1
  18. package/dist/hash.js +49 -6
  19. package/dist/hash.js.map +1 -1
  20. package/dist/math.js +1 -1
  21. package/dist/math.js.map +1 -1
  22. package/dist/object.d.ts +4 -0
  23. package/dist/object.d.ts.map +1 -1
  24. package/dist/object.js +4 -0
  25. package/dist/object.js.map +1 -1
  26. package/dist/random.js +2 -0
  27. package/dist/random.js.map +1 -1
  28. package/dist/storages/lru/keyed-store.d.ts +22 -0
  29. package/dist/storages/lru/keyed-store.d.ts.map +1 -1
  30. package/dist/storages/lru/keyed-store.js +22 -0
  31. package/dist/storages/lru/keyed-store.js.map +1 -1
  32. package/dist/storages/redis/keyed-store.d.ts +25 -0
  33. package/dist/storages/redis/keyed-store.d.ts.map +1 -1
  34. package/dist/storages/redis/keyed-store.js +25 -0
  35. package/dist/storages/redis/keyed-store.js.map +1 -1
  36. package/dist/storages/redis/msgpack.d.ts +20 -0
  37. package/dist/storages/redis/msgpack.d.ts.map +1 -1
  38. package/dist/storages/redis/msgpack.js +20 -0
  39. package/dist/storages/redis/msgpack.js.map +1 -1
  40. package/dist/storages/redis/types.d.ts +42 -0
  41. package/dist/storages/redis/types.d.ts.map +1 -1
  42. package/dist/time.d.ts +17 -0
  43. package/dist/time.d.ts.map +1 -1
  44. package/dist/time.js +17 -0
  45. package/dist/time.js.map +1 -1
  46. package/dist/url.d.ts +3 -0
  47. package/dist/url.d.ts.map +1 -1
  48. package/dist/url.js +8 -2
  49. package/dist/url.js.map +1 -1
  50. package/dist/vue.d.ts +6 -0
  51. package/dist/vue.d.ts.map +1 -1
  52. package/dist/vue.js +6 -0
  53. package/dist/vue.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/crypto-hash.ts +143 -14
  56. package/src/datetime.ts +0 -2
  57. package/src/env.ts +2 -0
  58. package/src/event-awaiter.ts +1 -1
  59. package/src/hash.ts +56 -14
  60. package/src/math.ts +2 -1
  61. package/src/object.ts +4 -0
  62. package/src/random.ts +3 -0
  63. package/src/storages/lru/keyed-store.ts +22 -0
  64. package/src/storages/redis/keyed-store.ts +25 -0
  65. package/src/storages/redis/msgpack.ts +20 -0
  66. package/src/storages/redis/types.ts +52 -0
  67. package/src/time.ts +17 -0
  68. package/src/url.ts +13 -2
  69. package/src/vue.ts +6 -0
package/README.md CHANGED
@@ -9,8 +9,6 @@ A lightweight and modular utility library for modern JavaScript and TypeScript
9
9
 
10
10
  - [✨ Release Notes](./CHANGELOG.md)
11
11
 
12
- TODO: update README
13
-
14
12
  ## Features
15
13
 
16
14
  - 📋 Clipboard utilities — copy text and blobs using the modern Clipboard API (Browser only)
@@ -47,17 +45,58 @@ You can also use `yarn`, `npm`, or `bun`.
47
45
  >
48
46
  > If a utility depends on a third-party package (e.g. `date-fns`), you must install it manually.
49
47
 
50
- ## Usage
48
+ ## Modules
51
49
 
52
- Import the functions or modules you want to use:
50
+ ```
51
+ src/
52
+ ├── classes/ # Class-based utilities
53
+ │ ├── path.ts # Path manipulation
54
+ │ ├── precision-number.ts # Decimal.js wrapper
55
+ │ └── ssh-client.ts # SSH client
56
+ │
57
+ ├── storages/
58
+ │ ├── lru/keyed-store.ts # LRU cache wrapper
59
+ │ └── redis/
60
+ │ ├── keyed-store.ts # Redis keyed store
61
+ │ ├── msgpack.ts # Redis + msgpack
62
+ │ └── types.ts # Storage interfaces
63
+ │
64
+ └── *.ts # Utility functions (see table)
65
+ ```
66
+
67
+ | File | Description |
68
+ |------|-------------|
69
+ | `buffer.ts` | Binary → Node.js Buffer |
70
+ | `clipboard.ts` | Clipboard API (browser) |
71
+ | `consola.ts` | Consola logger |
72
+ | `crypto-hash.ts` | MD5, SHA3 (Node) |
73
+ | `datetime.ts` | date-fns wrappers |
74
+ | `element-plus.ts` | Element Plus form rules |
75
+ | `enum.ts` | Enum value extractors |
76
+ | `env.ts` | Env var accessor |
77
+ | `event-awaiter.ts` | Async event wait |
78
+ | `general.ts` | extractFirstValue |
79
+ | `hash.ts` | SHA3 (browser) |
80
+ | `math.ts` | toPercentageString |
81
+ | `number.ts` | toCompactNumberString |
82
+ | `object.ts` | deterministic stringify |
83
+ | `pino.ts` | Pino logger |
84
+ | `random.ts` | nested random length |
85
+ | `string.ts` | randomString |
86
+ | `time.ts` | abortableDelay |
87
+ | `url.ts` | redirect param |
88
+ | `vue.ts` | Vue composables |
89
+ | `web.ts` | Web DOM helpers |
90
+
91
+ ## Usage
53
92
 
54
93
  ```typescript
55
- import { logger } from '@kikituils/shared/consola';
56
- import { extractFirstValue } from '@kikituils/shared/general';
94
+ import { logger } from '@kikiutils/shared/consola';
95
+ import { extractFirstValue } from '@kikiutils/shared/general';
57
96
 
58
97
  const data = [
59
98
  0,
60
- 1
99
+ 1,
61
100
  ];
62
101
 
63
102
  const value = extractFirstValue(data);
@@ -65,118 +104,6 @@ console.log(value); // 0
65
104
  logger.info(value);
66
105
  ```
67
106
 
68
- ## Modules & Functions
69
-
70
- Each module file includes function-level comments and usage examples.
71
-
72
- ### [buffer](./src/buffer.ts)
73
-
74
- - `toBuffer`
75
-
76
- ### [clipboard](./src/clipboard.ts)
77
-
78
- - `copyBlobToClipboard`
79
- - `copyTextToClipboard`
80
-
81
- ### [consola](./src/consola.ts)
82
-
83
- Console logger integration.
84
-
85
- ### [crypto-hash](./src/crypto-hash.ts)
86
-
87
- - `cryptoMd5`, `cryptoMd5ToBuffer`
88
- - `cryptoSha3224`, `cryptoSha3224ToBuffer`
89
- - `cryptoSha3256`, `cryptoSha3256ToBuffer`
90
- - `cryptoSha3384`, `cryptoSha3384ToBuffer`
91
- - `cryptoSha3512`, `cryptoSha3512ToBuffer`
92
-
93
- ### [datetime](./src/datetime.ts)
94
-
95
- - `formatDate`
96
- - `getDateRangeFromDate`
97
- - `getMidnightDateFromToday`
98
-
99
- ### [element-plus](./src/element-plus.ts)
100
-
101
- - `createElFormItemRuleWithDefaults`
102
-
103
- ### [enum](./src/enum.ts)
104
-
105
- - `getEnumStringValues`
106
- - `getEnumNumberValues`
107
- - `getEnumValues`
108
-
109
- ### [env](./src/env.ts)
110
-
111
- - `checkAndGetEnvValue`
112
-
113
- ### [general](./src/general.ts)
114
-
115
- - `extractFirstValue`
116
-
117
- ### [hash](./src/hash.ts)
118
-
119
- - `sha3224`
120
- - `sha3256`
121
- - `sha3384`
122
- - `sha3512`
123
-
124
- ### [math](./src/math.ts)
125
-
126
- - `toPercentageString`
127
-
128
- ### [number](./src/number.ts)
129
-
130
- - `toCompactNumberString`
131
-
132
- ### [object](./src/object.ts)
133
-
134
- - `stringifyObjectDeterministically`
135
-
136
- ### [pino](./src/pino.ts)
137
-
138
- Pino logger integration.
139
-
140
- ### [random](./src/random.ts)
141
-
142
- - `generateWithNestedRandomLength`
143
-
144
- ### storage
145
-
146
- #### [enhanced-local](./src/storage/enhanced/local/index.ts)
147
-
148
- - `createKeyedEnhancedLocalStore`
149
- - `enhancedLocalStorage`
150
-
151
- #### [enhanced-redis](./src/storage/enhanced/redis/index.ts)
152
-
153
- - `createEnhancedRedisStorage`
154
- - `createKeyedEnhancedRedisStore`
155
-
156
- #### [lru/keyed-store](./src/storage/lru/keyed-store.ts)
157
-
158
- - `createKeyedLruStore`
159
-
160
- ### [string](./src/string.ts)
161
-
162
- - `randomString`
163
-
164
- ### [url](./src/url.ts)
165
-
166
- - `appendRedirectParamToUrl`
167
-
168
- ### [vue](./src/vue.ts)
169
-
170
- - `appendRedirectParamFromCurrentRouteToUrl`
171
- - `clearIntervalRef`
172
- - `clearTimeoutRef`
173
- - `usePreserveScroll`
174
-
175
- ### [web](./src/web.ts)
176
-
177
- - `appendRedirectParamFromCurrentLocationToUrl`
178
- - `assignUrlWithRedirectParamFromCurrentLocation`
179
-
180
107
  ## License
181
108
 
182
109
  [MIT License](./LICENSE)
@@ -1,15 +1,160 @@
1
1
  import { BinaryLike, BinaryToTextEncoding } from "node:crypto";
2
2
 
3
3
  //#region src/crypto-hash.d.ts
4
+ /**
5
+ * Computes the MD5 hash of the given data.
6
+ *
7
+ * @param {BinaryLike} data - The input data to hash
8
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
9
+ *
10
+ * @returns {string | Buffer} The hash digest in the specified encoding
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { cryptoMd5 } from '@kikiutils/shared/crypto-hash';
15
+ *
16
+ * console.log(cryptoMd5('test')); // 33ed9a05a10b21f0...
17
+ * ```
18
+ */
4
19
  declare function cryptoMd5(data: BinaryLike, outputEncoding?: BinaryToTextEncoding): string;
20
+ /**
21
+ * Computes the MD5 hash of the given data and returns the raw buffer.
22
+ *
23
+ * @param {BinaryLike} data - The input data to hash
24
+ *
25
+ * @returns {Buffer} The raw hash digest as a Buffer
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { cryptoMd5ToBuffer } from '@kikiutils/shared/crypto-hash';
30
+ *
31
+ * console.log(cryptoMd5ToBuffer('test')); // <Buffer 33 ed 9a ...>
32
+ * ```
33
+ */
5
34
  declare function cryptoMd5ToBuffer(data: BinaryLike): NonSharedBuffer;
35
+ /**
36
+ * Computes the SHA-3 hash of the given data using the 224-bit digest.
37
+ *
38
+ * @param {BinaryLike} data - The input data to hash
39
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
40
+ *
41
+ * @returns {string | Buffer} The hash digest in the specified encoding
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * import { cryptoSha3224 } from '@kikiutils/shared/crypto-hash';
46
+ *
47
+ * console.log(cryptoSha3224('test')); // 0qW8FoqDcFmkpuqR9J3uT8YX...
48
+ * ```
49
+ */
6
50
  declare function cryptoSha3224(data: BinaryLike, outputEncoding?: BinaryToTextEncoding): string;
51
+ /**
52
+ * Computes the SHA-3 hash of the given data using the 224-bit digest and returns the raw buffer.
53
+ *
54
+ * @param {BinaryLike} data - The input data to hash
55
+ *
56
+ * @returns {Buffer} The raw hash digest as a Buffer
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * import { cryptoSha3224ToBuffer } from '@kikiutils/shared/crypto-hash';
61
+ *
62
+ * console.log(cryptoSha3224ToBuffer('test')); // <Buffer 0q W8 Fo ...>
63
+ * ```
64
+ */
7
65
  declare function cryptoSha3224ToBuffer(data: BinaryLike): NonSharedBuffer;
66
+ /**
67
+ * Computes the SHA-3 hash of the given data using the 256-bit digest.
68
+ *
69
+ * @param {BinaryLike} data - The input data to hash
70
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
71
+ *
72
+ * @returns {string | Buffer} The hash digest in the specified encoding
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * import { cryptoSha3256 } from '@kikiutils/shared/crypto-hash';
77
+ *
78
+ * console.log(cryptoSha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
79
+ * ```
80
+ */
8
81
  declare function cryptoSha3256(data: BinaryLike, outputEncoding?: BinaryToTextEncoding): string;
82
+ /**
83
+ * Computes the SHA-3 hash of the given data using the 256-bit digest and returns the raw buffer.
84
+ *
85
+ * @param {BinaryLike} data - The input data to hash
86
+ *
87
+ * @returns {Buffer} The raw hash digest as a Buffer
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * import { cryptoSha3256ToBuffer } from '@kikiutils/shared/crypto-hash';
92
+ *
93
+ * console.log(cryptoSha3256ToBuffer('test')); // <Buffer 36 f0 28 ...>
94
+ * ```
95
+ */
9
96
  declare function cryptoSha3256ToBuffer(data: BinaryLike): NonSharedBuffer;
97
+ /**
98
+ * Computes the SHA-3 hash of the given data using the 384-bit digest.
99
+ *
100
+ * @param {BinaryLike} data - The input data to hash
101
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
102
+ *
103
+ * @returns {string | Buffer} The hash digest in the specified encoding
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * import { cryptoSha3384 } from '@kikiutils/shared/crypto-hash';
108
+ *
109
+ * console.log(cryptoSha3384('test')); // 1Q2wQAYaZ4o8vWX5bEB2n3Y...
110
+ * ```
111
+ */
10
112
  declare function cryptoSha3384(data: BinaryLike, outputEncoding?: BinaryToTextEncoding): string;
113
+ /**
114
+ * Computes the SHA-3 hash of the given data using the 384-bit digest and returns the raw buffer.
115
+ *
116
+ * @param {BinaryLike} data - The input data to hash
117
+ *
118
+ * @returns {Buffer} The raw hash digest as a Buffer
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * import { cryptoSha3384ToBuffer } from '@kikiutils/shared/crypto-hash';
123
+ *
124
+ * console.log(cryptoSha3384ToBuffer('test')); // <Buffer 1Q 2w QZ ...>
125
+ * ```
126
+ */
11
127
  declare function cryptoSha3384ToBuffer(data: BinaryLike): NonSharedBuffer;
128
+ /**
129
+ * Computes the SHA-3 hash of the given data using the 512-bit digest.
130
+ *
131
+ * @param {BinaryLike} data - The input data to hash
132
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
133
+ *
134
+ * @returns {string | Buffer} The hash digest in the specified encoding
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * import { cryptoSha3512 } from '@kikiutils/shared/crypto-hash';
139
+ *
140
+ * console.log(cryptoSha3512('test')); // b_NQJ8FJBY9dIjm1q7...
141
+ * ```
142
+ */
12
143
  declare function cryptoSha3512(data: BinaryLike, outputEncoding?: BinaryToTextEncoding): string;
144
+ /**
145
+ * Computes the SHA-3 hash of the given data using the 512-bit digest and returns the raw buffer.
146
+ *
147
+ * @param {BinaryLike} data - The input data to hash
148
+ *
149
+ * @returns {Buffer} The raw hash digest as a Buffer
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * import { cryptoSha3512ToBuffer } from '@kikiutils/shared/crypto-hash';
154
+ *
155
+ * console.log(cryptoSha3512ToBuffer('test')); // <Buffer b_ NQ ...>
156
+ * ```
157
+ */
13
158
  declare function cryptoSha3512ToBuffer(data: BinaryLike): NonSharedBuffer;
14
159
  //#endregion
15
160
  export { cryptoMd5, cryptoMd5ToBuffer, cryptoSha3224, cryptoSha3224ToBuffer, cryptoSha3256, cryptoSha3256ToBuffer, cryptoSha3384, cryptoSha3384ToBuffer, cryptoSha3512, cryptoSha3512ToBuffer };
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-hash.d.ts","names":[],"sources":["../src/crypto-hash.ts"],"mappings":";;;iBAsBgB,SAAA,CAAU,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;AAAA,iBAI5C,iBAAA,CAAkB,IAAA,EAAM,UAAA,GAAU,eAAA;AAAA,iBAIlC,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;AAAA,iBAIhD,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA;AAAA,iBAItC,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;AAAA,iBAIhD,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA;AAAA,iBAItC,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;AAAA,iBAIhD,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA;AAAA,iBAItC,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;AAAA,iBAIhD,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA"}
1
+ {"version":3,"file":"crypto-hash.d.ts","names":[],"sources":["../src/crypto-hash.ts"],"mappings":";;;;;AAqBA;;;;;;;;;;AAkBA;;;iBAlBgB,SAAA,CAAU,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;;;;;;AAqC5D;;;;;;;;;iBAnBgB,iBAAA,CAAkB,IAAA,EAAM,UAAA,GAAU,eAAA;AAqClD;;;;;;;;;AAmBA;;;;;;AAnBA,iBAlBgB,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;;;;AAuDhE;;;;;;;;;AAmBA;;iBAxDgB,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA;;;;;;;;AA0EtD;;;;;;;;iBAvDgB,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;AA0EhE;;;;;;;;;;AAkBA;;;;AAlBA,iBAxDgB,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA;;;;;;;;;;;;;;;;iBAmBtC,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;;;;;;;;;;;;;;;iBAkBhD,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA;;;;;;;;;;;;;;;;iBAmBtC,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,cAAA,GAAgB,oBAAA;;;;;;;;;;;;;;;iBAkBhD,qBAAA,CAAsB,IAAA,EAAM,UAAA,GAAU,eAAA"}
@@ -1,47 +1,177 @@
1
1
  import { createHash } from "node:crypto";
2
2
  //#region src/crypto-hash.ts
3
3
  /**
4
- * This file provides a set of functions for creating hash digests using different algorithms and bit lengths.
5
- * It includes functions for generating SHA-3 hash digests with bit lengths of 224, 256, 384, and 512,
6
- * as well as a function for generating MD5 hash digests.
4
+ * Computes the MD5 hash of the given data.
7
5
  *
8
- * These functions use the Node.js crypto module to generate the hashes.
9
- * Can only be used in Node.js/Deno/Bun runtimes.
6
+ * @param {BinaryLike} data - The input data to hash
7
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
8
+ *
9
+ * @returns {string | Buffer} The hash digest in the specified encoding
10
10
  *
11
11
  * @example
12
12
  * ```typescript
13
- * import { cryptoSha3256 } from '@kikiutils/shared/crypto-hash';
13
+ * import { cryptoMd5 } from '@kikiutils/shared/crypto-hash';
14
14
  *
15
- * console.log(cryptoSha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
15
+ * console.log(cryptoMd5('test')); // 33ed9a05a10b21f0...
16
16
  * ```
17
17
  */
18
18
  function cryptoMd5(data, outputEncoding = "hex") {
19
19
  return createHash("md5").update(data).digest(outputEncoding);
20
20
  }
21
+ /**
22
+ * Computes the MD5 hash of the given data and returns the raw buffer.
23
+ *
24
+ * @param {BinaryLike} data - The input data to hash
25
+ *
26
+ * @returns {Buffer} The raw hash digest as a Buffer
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { cryptoMd5ToBuffer } from '@kikiutils/shared/crypto-hash';
31
+ *
32
+ * console.log(cryptoMd5ToBuffer('test')); // <Buffer 33 ed 9a ...>
33
+ * ```
34
+ */
21
35
  function cryptoMd5ToBuffer(data) {
22
36
  return createHash("md5").update(data).digest();
23
37
  }
38
+ /**
39
+ * Computes the SHA-3 hash of the given data using the 224-bit digest.
40
+ *
41
+ * @param {BinaryLike} data - The input data to hash
42
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
43
+ *
44
+ * @returns {string | Buffer} The hash digest in the specified encoding
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { cryptoSha3224 } from '@kikiutils/shared/crypto-hash';
49
+ *
50
+ * console.log(cryptoSha3224('test')); // 0qW8FoqDcFmkpuqR9J3uT8YX...
51
+ * ```
52
+ */
24
53
  function cryptoSha3224(data, outputEncoding = "hex") {
25
54
  return createHash("sha3-224").update(data).digest(outputEncoding);
26
55
  }
56
+ /**
57
+ * Computes the SHA-3 hash of the given data using the 224-bit digest and returns the raw buffer.
58
+ *
59
+ * @param {BinaryLike} data - The input data to hash
60
+ *
61
+ * @returns {Buffer} The raw hash digest as a Buffer
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * import { cryptoSha3224ToBuffer } from '@kikiutils/shared/crypto-hash';
66
+ *
67
+ * console.log(cryptoSha3224ToBuffer('test')); // <Buffer 0q W8 Fo ...>
68
+ * ```
69
+ */
27
70
  function cryptoSha3224ToBuffer(data) {
28
71
  return createHash("sha3-224").update(data).digest();
29
72
  }
73
+ /**
74
+ * Computes the SHA-3 hash of the given data using the 256-bit digest.
75
+ *
76
+ * @param {BinaryLike} data - The input data to hash
77
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
78
+ *
79
+ * @returns {string | Buffer} The hash digest in the specified encoding
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * import { cryptoSha3256 } from '@kikiutils/shared/crypto-hash';
84
+ *
85
+ * console.log(cryptoSha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
86
+ * ```
87
+ */
30
88
  function cryptoSha3256(data, outputEncoding = "hex") {
31
89
  return createHash("sha3-256").update(data).digest(outputEncoding);
32
90
  }
91
+ /**
92
+ * Computes the SHA-3 hash of the given data using the 256-bit digest and returns the raw buffer.
93
+ *
94
+ * @param {BinaryLike} data - The input data to hash
95
+ *
96
+ * @returns {Buffer} The raw hash digest as a Buffer
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * import { cryptoSha3256ToBuffer } from '@kikiutils/shared/crypto-hash';
101
+ *
102
+ * console.log(cryptoSha3256ToBuffer('test')); // <Buffer 36 f0 28 ...>
103
+ * ```
104
+ */
33
105
  function cryptoSha3256ToBuffer(data) {
34
106
  return createHash("sha3-256").update(data).digest();
35
107
  }
108
+ /**
109
+ * Computes the SHA-3 hash of the given data using the 384-bit digest.
110
+ *
111
+ * @param {BinaryLike} data - The input data to hash
112
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
113
+ *
114
+ * @returns {string | Buffer} The hash digest in the specified encoding
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * import { cryptoSha3384 } from '@kikiutils/shared/crypto-hash';
119
+ *
120
+ * console.log(cryptoSha3384('test')); // 1Q2wQAYaZ4o8vWX5bEB2n3Y...
121
+ * ```
122
+ */
36
123
  function cryptoSha3384(data, outputEncoding = "hex") {
37
124
  return createHash("sha3-384").update(data).digest(outputEncoding);
38
125
  }
126
+ /**
127
+ * Computes the SHA-3 hash of the given data using the 384-bit digest and returns the raw buffer.
128
+ *
129
+ * @param {BinaryLike} data - The input data to hash
130
+ *
131
+ * @returns {Buffer} The raw hash digest as a Buffer
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * import { cryptoSha3384ToBuffer } from '@kikiutils/shared/crypto-hash';
136
+ *
137
+ * console.log(cryptoSha3384ToBuffer('test')); // <Buffer 1Q 2w QZ ...>
138
+ * ```
139
+ */
39
140
  function cryptoSha3384ToBuffer(data) {
40
141
  return createHash("sha3-384").update(data).digest();
41
142
  }
143
+ /**
144
+ * Computes the SHA-3 hash of the given data using the 512-bit digest.
145
+ *
146
+ * @param {BinaryLike} data - The input data to hash
147
+ * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)
148
+ *
149
+ * @returns {string | Buffer} The hash digest in the specified encoding
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * import { cryptoSha3512 } from '@kikiutils/shared/crypto-hash';
154
+ *
155
+ * console.log(cryptoSha3512('test')); // b_NQJ8FJBY9dIjm1q7...
156
+ * ```
157
+ */
42
158
  function cryptoSha3512(data, outputEncoding = "hex") {
43
159
  return createHash("sha3-512").update(data).digest(outputEncoding);
44
160
  }
161
+ /**
162
+ * Computes the SHA-3 hash of the given data using the 512-bit digest and returns the raw buffer.
163
+ *
164
+ * @param {BinaryLike} data - The input data to hash
165
+ *
166
+ * @returns {Buffer} The raw hash digest as a Buffer
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * import { cryptoSha3512ToBuffer } from '@kikiutils/shared/crypto-hash';
171
+ *
172
+ * console.log(cryptoSha3512ToBuffer('test')); // <Buffer b_ NQ ...>
173
+ * ```
174
+ */
45
175
  function cryptoSha3512ToBuffer(data) {
46
176
  return createHash("sha3-512").update(data).digest();
47
177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-hash.js","names":[],"sources":["../src/crypto-hash.ts"],"sourcesContent":["/**\n * This file provides a set of functions for creating hash digests using different algorithms and bit lengths.\n * It includes functions for generating SHA-3 hash digests with bit lengths of 224, 256, 384, and 512,\n * as well as a function for generating MD5 hash digests.\n *\n * These functions use the Node.js crypto module to generate the hashes.\n * Can only be used in Node.js/Deno/Bun runtimes.\n *\n * @example\n * ```typescript\n * import { cryptoSha3256 } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80\n * ```\n */\n\nimport { createHash } from 'node:crypto';\nimport type {\n BinaryLike,\n BinaryToTextEncoding,\n} from 'node:crypto';\n\nexport function cryptoMd5(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('md5').update(data).digest(outputEncoding);\n}\n\nexport function cryptoMd5ToBuffer(data: BinaryLike) {\n return createHash('md5').update(data).digest();\n}\n\nexport function cryptoSha3224(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-224').update(data).digest(outputEncoding);\n}\n\nexport function cryptoSha3224ToBuffer(data: BinaryLike) {\n return createHash('sha3-224').update(data).digest();\n}\n\nexport function cryptoSha3256(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-256').update(data).digest(outputEncoding);\n}\n\nexport function cryptoSha3256ToBuffer(data: BinaryLike) {\n return createHash('sha3-256').update(data).digest();\n}\n\nexport function cryptoSha3384(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-384').update(data).digest(outputEncoding);\n}\n\nexport function cryptoSha3384ToBuffer(data: BinaryLike) {\n return createHash('sha3-384').update(data).digest();\n}\n\nexport function cryptoSha3512(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-512').update(data).digest(outputEncoding);\n}\n\nexport function cryptoSha3512ToBuffer(data: BinaryLike) {\n return createHash('sha3-512').update(data).digest();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAsBA,SAAgB,UAAU,MAAkB,iBAAuC,OAAO;AACtF,QAAO,WAAW,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;AAGhE,SAAgB,kBAAkB,MAAkB;AAChD,QAAO,WAAW,MAAM,CAAC,OAAO,KAAK,CAAC,QAAQ;;AAGlD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;AAGrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ;;AAGvD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;AAGrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ;;AAGvD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;AAGrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ;;AAGvD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;AAGrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ"}
1
+ {"version":3,"file":"crypto-hash.js","names":[],"sources":["../src/crypto-hash.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport type {\n BinaryLike,\n BinaryToTextEncoding,\n} from 'node:crypto';\n\n/**\n * Computes the MD5 hash of the given data.\n *\n * @param {BinaryLike} data - The input data to hash\n * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)\n *\n * @returns {string | Buffer} The hash digest in the specified encoding\n *\n * @example\n * ```typescript\n * import { cryptoMd5 } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoMd5('test')); // 33ed9a05a10b21f0...\n * ```\n */\nexport function cryptoMd5(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('md5').update(data).digest(outputEncoding);\n}\n\n/**\n * Computes the MD5 hash of the given data and returns the raw buffer.\n *\n * @param {BinaryLike} data - The input data to hash\n *\n * @returns {Buffer} The raw hash digest as a Buffer\n *\n * @example\n * ```typescript\n * import { cryptoMd5ToBuffer } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoMd5ToBuffer('test')); // <Buffer 33 ed 9a ...>\n * ```\n */\nexport function cryptoMd5ToBuffer(data: BinaryLike) {\n return createHash('md5').update(data).digest();\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 224-bit digest.\n *\n * @param {BinaryLike} data - The input data to hash\n * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)\n *\n * @returns {string | Buffer} The hash digest in the specified encoding\n *\n * @example\n * ```typescript\n * import { cryptoSha3224 } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3224('test')); // 0qW8FoqDcFmkpuqR9J3uT8YX...\n * ```\n */\nexport function cryptoSha3224(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-224').update(data).digest(outputEncoding);\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 224-bit digest and returns the raw buffer.\n *\n * @param {BinaryLike} data - The input data to hash\n *\n * @returns {Buffer} The raw hash digest as a Buffer\n *\n * @example\n * ```typescript\n * import { cryptoSha3224ToBuffer } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3224ToBuffer('test')); // <Buffer 0q W8 Fo ...>\n * ```\n */\nexport function cryptoSha3224ToBuffer(data: BinaryLike) {\n return createHash('sha3-224').update(data).digest();\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 256-bit digest.\n *\n * @param {BinaryLike} data - The input data to hash\n * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)\n *\n * @returns {string | Buffer} The hash digest in the specified encoding\n *\n * @example\n * ```typescript\n * import { cryptoSha3256 } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80\n * ```\n */\nexport function cryptoSha3256(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-256').update(data).digest(outputEncoding);\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 256-bit digest and returns the raw buffer.\n *\n * @param {BinaryLike} data - The input data to hash\n *\n * @returns {Buffer} The raw hash digest as a Buffer\n *\n * @example\n * ```typescript\n * import { cryptoSha3256ToBuffer } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3256ToBuffer('test')); // <Buffer 36 f0 28 ...>\n * ```\n */\nexport function cryptoSha3256ToBuffer(data: BinaryLike) {\n return createHash('sha3-256').update(data).digest();\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 384-bit digest.\n *\n * @param {BinaryLike} data - The input data to hash\n * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)\n *\n * @returns {string | Buffer} The hash digest in the specified encoding\n *\n * @example\n * ```typescript\n * import { cryptoSha3384 } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3384('test')); // 1Q2wQAYaZ4o8vWX5bEB2n3Y...\n * ```\n */\nexport function cryptoSha3384(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-384').update(data).digest(outputEncoding);\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 384-bit digest and returns the raw buffer.\n *\n * @param {BinaryLike} data - The input data to hash\n *\n * @returns {Buffer} The raw hash digest as a Buffer\n *\n * @example\n * ```typescript\n * import { cryptoSha3384ToBuffer } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3384ToBuffer('test')); // <Buffer 1Q 2w QZ ...>\n * ```\n */\nexport function cryptoSha3384ToBuffer(data: BinaryLike) {\n return createHash('sha3-384').update(data).digest();\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 512-bit digest.\n *\n * @param {BinaryLike} data - The input data to hash\n * @param {BinaryToTextEncoding} [outputEncoding] - The output encoding (default: `'hex'`)\n *\n * @returns {string | Buffer} The hash digest in the specified encoding\n *\n * @example\n * ```typescript\n * import { cryptoSha3512 } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3512('test')); // b_NQJ8FJBY9dIjm1q7...\n * ```\n */\nexport function cryptoSha3512(data: BinaryLike, outputEncoding: BinaryToTextEncoding = 'hex') {\n return createHash('sha3-512').update(data).digest(outputEncoding);\n}\n\n/**\n * Computes the SHA-3 hash of the given data using the 512-bit digest and returns the raw buffer.\n *\n * @param {BinaryLike} data - The input data to hash\n *\n * @returns {Buffer} The raw hash digest as a Buffer\n *\n * @example\n * ```typescript\n * import { cryptoSha3512ToBuffer } from '@kikiutils/shared/crypto-hash';\n *\n * console.log(cryptoSha3512ToBuffer('test')); // <Buffer b_ NQ ...>\n * ```\n */\nexport function cryptoSha3512ToBuffer(data: BinaryLike) {\n return createHash('sha3-512').update(data).digest();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,SAAgB,UAAU,MAAkB,iBAAuC,OAAO;AACtF,QAAO,WAAW,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;;;;;;;;;;;;;;;AAiBhE,SAAgB,kBAAkB,MAAkB;AAChD,QAAO,WAAW,MAAM,CAAC,OAAO,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;;;;AAkBlD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;;;;;;;;;;;;;;;AAiBrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;;;;AAkBvD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;;;;;;;;;;;;;;;AAiBrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;;;;AAkBvD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;;;;;;;;;;;;;;;AAiBrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;;;;AAkBvD,SAAgB,cAAc,MAAkB,iBAAuC,OAAO;AAC1F,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,OAAO,eAAe;;;;;;;;;;;;;;;;AAiBrE,SAAgB,sBAAsB,MAAkB;AACpD,QAAO,WAAW,WAAW,CAAC,OAAO,KAAK,CAAC,QAAQ"}
@@ -26,8 +26,6 @@ type DateRangeType = 'lastMonth' | 'lastWeek' | 'thisMonth' | 'thisWeek' | 'toda
26
26
  * // Format a date string
27
27
  * console.log(formatDate('2024-07-10T00:00:00Z', 'yyyy-MM-dd')); // 2024-07-10
28
28
  * ```
29
- *
30
- * @see https://date-fns.org/docs/format
31
29
  */
32
30
  declare function formatDate(date: DateArg<Date> & {}, format?: string, options?: FormatOptions): string;
33
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"datetime.d.ts","names":[],"sources":["../src/datetime.ts"],"mappings":";;;KAkBY,aAAA;;AAAZ;;;;;AA6BA;;;;;;;;;;;;;;;;AA+BA;;;;;iBA/BgB,UAAA,CAAW,IAAA,EAAM,OAAA,CAAQ,IAAA,QAAY,MAAA,WAAwC,OAAA,GAAU,aAAA;;;;;;;;;;;;;;;;;;;AAwGvG;;;;;;;;;iBAzEgB,oBAAA,CACZ,IAAA,EAAM,IAAA,EACN,IAAA,EAAM,aAAA,EACN,OAAA;EACI,wBAAA;EACA,YAAA,GAAe,GAAA;AAAA;;;;;;;;;;;;;;;;;;;;iBAoEP,wBAAA,CAAyB,UAAA,YAAsB,IAAA"}
1
+ {"version":3,"file":"datetime.d.ts","names":[],"sources":["../src/datetime.ts"],"mappings":";;;KAkBY,aAAA;;AAAZ;;;;;AA2BA;;;;;;;;;;;;;;;;AA+BA;;;iBA/BgB,UAAA,CAAW,IAAA,EAAM,OAAA,CAAQ,IAAA,QAAY,MAAA,WAAwC,OAAA,GAAU,aAAA;;;;;;;;;;;;;;;;;;;;;AAwGvG;;;;;;;iBAzEgB,oBAAA,CACZ,IAAA,EAAM,IAAA,EACN,IAAA,EAAM,aAAA,EACN,OAAA;EACI,wBAAA;EACA,YAAA,GAAe,GAAA;AAAA;;;;;;;;;;;;;;;;;;;;iBAoEP,wBAAA,CAAyB,UAAA,YAAsB,IAAA"}
package/dist/datetime.js CHANGED
@@ -24,8 +24,6 @@ import { endOfDay, endOfMonth, endOfWeek, format, startOfDay, startOfMonth, star
24
24
  * // Format a date string
25
25
  * console.log(formatDate('2024-07-10T00:00:00Z', 'yyyy-MM-dd')); // 2024-07-10
26
26
  * ```
27
- *
28
- * @see https://date-fns.org/docs/format
29
27
  */
30
28
  function formatDate(date, format$1 = "yyyy-MM-dd HH:mm:ss", options) {
31
29
  return format(date, format$1, options);
@@ -1 +1 @@
1
- {"version":3,"file":"datetime.js","names":["dateFnsFormat","format"],"sources":["../src/datetime.ts"],"sourcesContent":["import {\n format as dateFnsFormat,\n endOfDay,\n endOfMonth,\n endOfWeek,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subDays,\n subMonths,\n subWeeks,\n} from 'date-fns';\nimport type {\n DateArg,\n Day,\n FormatOptions,\n} from 'date-fns';\n\nexport type DateRangeType = 'lastMonth' | 'lastWeek' | 'thisMonth' | 'thisWeek' | 'today' | 'yesterday';\n\n/**\n * Formats a given date, timestamp, or date string into a specified format.\n *\n * This function is a wrapper around `date-fns/format`.\n *\n * @param {DateArg<Date>} date - The input date to format. Can be a Date object, a timestamp, or a string\n * @param {string} [format] - The target format string\n * @param {FormatOptions} [options] - Optional formatting options passed to `date-fns/format`\n *\n * @returns {string} The formatted date string\n *\n * @example\n * ```typescript\n * import { formatDate } from '@kikiutils/shared/datetime';\n *\n * // Format a Date object\n * console.log(formatDate(new Date(), 'yyyy-MM-dd')); // 2024-07-10\n *\n * // Format a timestamp\n * console.log(formatDate(1657814400000, 'yyyy-MM-dd')); // 2022-07-15\n *\n * // Format a date string\n * console.log(formatDate('2024-07-10T00:00:00Z', 'yyyy-MM-dd')); // 2024-07-10\n * ```\n *\n * @see https://date-fns.org/docs/format\n */\nexport function formatDate(date: DateArg<Date> & {}, format: string = 'yyyy-MM-dd HH:mm:ss', options?: FormatOptions) {\n return dateFnsFormat(date, format, options);\n}\n\n/**\n * Get the date range (start and end) based on a given date and range type.\n *\n * Supports common range types like 'lastMonth', 'lastWeek', 'thisMonth', 'thisWeek', 'today', and 'yesterday'.\n *\n * @param {Date} date - The reference date\n * @param {DateRangeType} type - The range type to compute\n * @param {object} [options] - Optional settings\n * @param {boolean} [options.setEndDateToNextDayStart] - If true, set `endDate` to 00:00:00.000 of the next day\n * @param {Day} [options.weekStartsOn] - The start day of the week (0 = Sunday, 1 = Monday, ..., 6 = Saturday)\n *\n * @returns {{ startDate: Date, endDate: Date }} An object with `startDate` and `endDate`\n *\n * @example\n * ```typescript\n * import { getDateRangeFromDate } from '@kikiutils/shared/datetime';\n *\n * // Get the date range for last month\n * const date = new Date('2023-07-01');\n * console.log(getDateRangeFromDate(date, 'lastMonth'));\n * // { startDate: 2023-06-01T00:00:00.000Z, endDate: 2023-06-30T23:59:59.999Z }\n *\n * // Get this week's range with Sunday as the first day\n * console.log(getDateRangeFromDate(date, 'thisWeek', { weekStartsOn: 0 }));\n * // { startDate: 2023-06-25T00:00:00.000Z, endDate: 2023-07-01T23:59:59.999Z }\n * ```\n */\nexport function getDateRangeFromDate(\n date: Date,\n type: DateRangeType,\n options?: {\n setEndDateToNextDayStart?: boolean;\n weekStartsOn?: Day;\n },\n) {\n let endDate: Date;\n let startDate: Date;\n switch (type) {\n case 'lastMonth':\n {\n const lastMonth = subMonths(date, 1);\n endDate = endOfMonth(lastMonth);\n startDate = startOfMonth(lastMonth);\n }\n\n break;\n case 'lastWeek':\n {\n const lastWeek = subWeeks(date, 1);\n endDate = endOfWeek(lastWeek, { weekStartsOn: options?.weekStartsOn ?? 1 });\n startDate = startOfWeek(lastWeek, { weekStartsOn: options?.weekStartsOn ?? 1 });\n }\n\n break;\n case 'thisMonth':\n endDate = endOfMonth(date);\n startDate = startOfMonth(date);\n break;\n case 'thisWeek':\n endDate = endOfWeek(date, { weekStartsOn: options?.weekStartsOn ?? 1 });\n startDate = startOfWeek(date, { weekStartsOn: options?.weekStartsOn ?? 1 });\n break;\n case 'today':\n endDate = endOfDay(date);\n startDate = startOfDay(date);\n break;\n case 'yesterday':\n {\n const yesterday = subDays(date, 1);\n endDate = endOfDay(yesterday);\n startDate = startOfDay(yesterday);\n }\n\n break;\n default: throw new Error(`Unsupported date range type: ${type}`);\n }\n\n if (options?.setEndDateToNextDayStart) endDate.setHours(24, 0, 0, 0);\n return {\n endDate,\n startDate,\n };\n}\n\n/**\n * Returns a `Date` object set to midnight (00:00:00) of today, with an optional day offset.\n *\n * @param {number} [offsetDays] - Number of days to offset from today. Can be negative\n *\n * @returns {Date} A `Date` object at 00:00:00 of the offset day\n *\n * @example\n * ```typescript\n * import { getMidnightDateFromToday } from '@kikiutils/shared/datetime';\n *\n * console.log(getMidnightDateFromToday()); // today at 00:00:00\n * console.log(getMidnightDateFromToday(3)); // 3 days from today at 00:00:00\n * console.log(getMidnightDateFromToday(-1)); // yesterday at 00:00:00\n * ```\n */\nexport function getMidnightDateFromToday(offsetDays: number = 0) {\n const date = new Date();\n date.setDate(date.getDate() + offsetDays);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAgB,WAAW,MAA0B,WAAiB,uBAAuB,SAAyB;AAClH,QAAOA,OAAc,MAAMC,UAAQ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B/C,SAAgB,qBACZ,MACA,MACA,SAIF;CACE,IAAI;CACJ,IAAI;AACJ,SAAQ,MAAR;EACI,KAAK;GACD;IACI,MAAM,YAAY,UAAU,MAAM,EAAE;AACpC,cAAU,WAAW,UAAU;AAC/B,gBAAY,aAAa,UAAU;;AAGvC;EACJ,KAAK;GACD;IACI,MAAM,WAAW,SAAS,MAAM,EAAE;AAClC,cAAU,UAAU,UAAU,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;AAC3E,gBAAY,YAAY,UAAU,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;;AAGnF;EACJ,KAAK;AACD,aAAU,WAAW,KAAK;AAC1B,eAAY,aAAa,KAAK;AAC9B;EACJ,KAAK;AACD,aAAU,UAAU,MAAM,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;AACvE,eAAY,YAAY,MAAM,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;AAC3E;EACJ,KAAK;AACD,aAAU,SAAS,KAAK;AACxB,eAAY,WAAW,KAAK;AAC5B;EACJ,KAAK;GACD;IACI,MAAM,YAAY,QAAQ,MAAM,EAAE;AAClC,cAAU,SAAS,UAAU;AAC7B,gBAAY,WAAW,UAAU;;AAGrC;EACJ,QAAS,OAAM,IAAI,MAAM,gCAAgC,OAAO;;AAGpE,KAAI,SAAS,yBAA0B,SAAQ,SAAS,IAAI,GAAG,GAAG,EAAE;AACpE,QAAO;EACH;EACA;EACH;;;;;;;;;;;;;;;;;;AAmBL,SAAgB,yBAAyB,aAAqB,GAAG;CAC7D,MAAM,uBAAO,IAAI,MAAM;AACvB,MAAK,QAAQ,KAAK,SAAS,GAAG,WAAW;AACzC,MAAK,SAAS,GAAG,GAAG,GAAG,EAAE;AACzB,QAAO"}
1
+ {"version":3,"file":"datetime.js","names":["dateFnsFormat","format"],"sources":["../src/datetime.ts"],"sourcesContent":["import {\n format as dateFnsFormat,\n endOfDay,\n endOfMonth,\n endOfWeek,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subDays,\n subMonths,\n subWeeks,\n} from 'date-fns';\nimport type {\n DateArg,\n Day,\n FormatOptions,\n} from 'date-fns';\n\nexport type DateRangeType = 'lastMonth' | 'lastWeek' | 'thisMonth' | 'thisWeek' | 'today' | 'yesterday';\n\n/**\n * Formats a given date, timestamp, or date string into a specified format.\n *\n * This function is a wrapper around `date-fns/format`.\n *\n * @param {DateArg<Date>} date - The input date to format. Can be a Date object, a timestamp, or a string\n * @param {string} [format] - The target format string\n * @param {FormatOptions} [options] - Optional formatting options passed to `date-fns/format`\n *\n * @returns {string} The formatted date string\n *\n * @example\n * ```typescript\n * import { formatDate } from '@kikiutils/shared/datetime';\n *\n * // Format a Date object\n * console.log(formatDate(new Date(), 'yyyy-MM-dd')); // 2024-07-10\n *\n * // Format a timestamp\n * console.log(formatDate(1657814400000, 'yyyy-MM-dd')); // 2022-07-15\n *\n * // Format a date string\n * console.log(formatDate('2024-07-10T00:00:00Z', 'yyyy-MM-dd')); // 2024-07-10\n * ```\n */\nexport function formatDate(date: DateArg<Date> & {}, format: string = 'yyyy-MM-dd HH:mm:ss', options?: FormatOptions) {\n return dateFnsFormat(date, format, options);\n}\n\n/**\n * Get the date range (start and end) based on a given date and range type.\n *\n * Supports common range types like 'lastMonth', 'lastWeek', 'thisMonth', 'thisWeek', 'today', and 'yesterday'.\n *\n * @param {Date} date - The reference date\n * @param {DateRangeType} type - The range type to compute\n * @param {object} [options] - Optional settings\n * @param {boolean} [options.setEndDateToNextDayStart] - If true, set `endDate` to 00:00:00.000 of the next day\n * @param {Day} [options.weekStartsOn] - The start day of the week (0 = Sunday, 1 = Monday, ..., 6 = Saturday)\n *\n * @returns {{ startDate: Date, endDate: Date }} An object with `startDate` and `endDate`\n *\n * @example\n * ```typescript\n * import { getDateRangeFromDate } from '@kikiutils/shared/datetime';\n *\n * // Get the date range for last month\n * const date = new Date('2023-07-01');\n * console.log(getDateRangeFromDate(date, 'lastMonth'));\n * // { startDate: 2023-06-01T00:00:00.000Z, endDate: 2023-06-30T23:59:59.999Z }\n *\n * // Get this week's range with Sunday as the first day\n * console.log(getDateRangeFromDate(date, 'thisWeek', { weekStartsOn: 0 }));\n * // { startDate: 2023-06-25T00:00:00.000Z, endDate: 2023-07-01T23:59:59.999Z }\n * ```\n */\nexport function getDateRangeFromDate(\n date: Date,\n type: DateRangeType,\n options?: {\n setEndDateToNextDayStart?: boolean;\n weekStartsOn?: Day;\n },\n) {\n let endDate: Date;\n let startDate: Date;\n switch (type) {\n case 'lastMonth':\n {\n const lastMonth = subMonths(date, 1);\n endDate = endOfMonth(lastMonth);\n startDate = startOfMonth(lastMonth);\n }\n\n break;\n case 'lastWeek':\n {\n const lastWeek = subWeeks(date, 1);\n endDate = endOfWeek(lastWeek, { weekStartsOn: options?.weekStartsOn ?? 1 });\n startDate = startOfWeek(lastWeek, { weekStartsOn: options?.weekStartsOn ?? 1 });\n }\n\n break;\n case 'thisMonth':\n endDate = endOfMonth(date);\n startDate = startOfMonth(date);\n break;\n case 'thisWeek':\n endDate = endOfWeek(date, { weekStartsOn: options?.weekStartsOn ?? 1 });\n startDate = startOfWeek(date, { weekStartsOn: options?.weekStartsOn ?? 1 });\n break;\n case 'today':\n endDate = endOfDay(date);\n startDate = startOfDay(date);\n break;\n case 'yesterday':\n {\n const yesterday = subDays(date, 1);\n endDate = endOfDay(yesterday);\n startDate = startOfDay(yesterday);\n }\n\n break;\n default: throw new Error(`Unsupported date range type: ${type}`);\n }\n\n if (options?.setEndDateToNextDayStart) endDate.setHours(24, 0, 0, 0);\n return {\n endDate,\n startDate,\n };\n}\n\n/**\n * Returns a `Date` object set to midnight (00:00:00) of today, with an optional day offset.\n *\n * @param {number} [offsetDays] - Number of days to offset from today. Can be negative\n *\n * @returns {Date} A `Date` object at 00:00:00 of the offset day\n *\n * @example\n * ```typescript\n * import { getMidnightDateFromToday } from '@kikiutils/shared/datetime';\n *\n * console.log(getMidnightDateFromToday()); // today at 00:00:00\n * console.log(getMidnightDateFromToday(3)); // 3 days from today at 00:00:00\n * console.log(getMidnightDateFromToday(-1)); // yesterday at 00:00:00\n * ```\n */\nexport function getMidnightDateFromToday(offsetDays: number = 0) {\n const date = new Date();\n date.setDate(date.getDate() + offsetDays);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,WAAW,MAA0B,WAAiB,uBAAuB,SAAyB;AAClH,QAAOA,OAAc,MAAMC,UAAQ,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B/C,SAAgB,qBACZ,MACA,MACA,SAIF;CACE,IAAI;CACJ,IAAI;AACJ,SAAQ,MAAR;EACI,KAAK;GACD;IACI,MAAM,YAAY,UAAU,MAAM,EAAE;AACpC,cAAU,WAAW,UAAU;AAC/B,gBAAY,aAAa,UAAU;;AAGvC;EACJ,KAAK;GACD;IACI,MAAM,WAAW,SAAS,MAAM,EAAE;AAClC,cAAU,UAAU,UAAU,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;AAC3E,gBAAY,YAAY,UAAU,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;;AAGnF;EACJ,KAAK;AACD,aAAU,WAAW,KAAK;AAC1B,eAAY,aAAa,KAAK;AAC9B;EACJ,KAAK;AACD,aAAU,UAAU,MAAM,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;AACvE,eAAY,YAAY,MAAM,EAAE,cAAc,SAAS,gBAAgB,GAAG,CAAC;AAC3E;EACJ,KAAK;AACD,aAAU,SAAS,KAAK;AACxB,eAAY,WAAW,KAAK;AAC5B;EACJ,KAAK;GACD;IACI,MAAM,YAAY,QAAQ,MAAM,EAAE;AAClC,cAAU,SAAS,UAAU;AAC7B,gBAAY,WAAW,UAAU;;AAGrC;EACJ,QAAS,OAAM,IAAI,MAAM,gCAAgC,OAAO;;AAGpE,KAAI,SAAS,yBAA0B,SAAQ,SAAS,IAAI,GAAG,GAAG,EAAE;AACpE,QAAO;EACH;EACA;EACH;;;;;;;;;;;;;;;;;;AAmBL,SAAgB,yBAAyB,aAAqB,GAAG;CAC7D,MAAM,uBAAO,IAAI,MAAM;AACvB,MAAK,QAAQ,KAAK,SAAS,GAAG,WAAW;AACzC,MAAK,SAAS,GAAG,GAAG,GAAG,EAAE;AACzB,QAAO"}
package/dist/env.d.ts CHANGED
@@ -29,6 +29,8 @@ declare class EnvironmentNotFoundError extends Error {
29
29
  *
30
30
  * @example
31
31
  * ```typescript
32
+ * import { checkAndGetEnvValue } from '@kikiutils/shared/env';
33
+ *
32
34
  * process.env.API_KEY = '';
33
35
  * checkAndGetEnvValue('API_KEY'); // ✅ Returns '' (still considered "defined")
34
36
  *
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","names":[],"sources":["../src/env.ts"],"mappings":";;AAOA;;;;;;cAAa,wBAAA,SAAiC,KAAA;EAAA,SACjC,GAAA;EAOc;;AA6B3B;;;cA7BgB,GAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;iBA6BA,mBAAA,CAAoB,GAAA"}
1
+ {"version":3,"file":"env.d.ts","names":[],"sources":["../src/env.ts"],"mappings":";;AAOA;;;;;;cAAa,wBAAA,SAAiC,KAAA;EAAA,SACjC,GAAA;EAOc;;AA+B3B;;;cA/BgB,GAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;iBA+BA,mBAAA,CAAoB,GAAA"}
package/dist/env.js CHANGED
@@ -34,6 +34,8 @@ var EnvironmentNotFoundError = class extends Error {
34
34
  *
35
35
  * @example
36
36
  * ```typescript
37
+ * import { checkAndGetEnvValue } from '@kikiutils/shared/env';
38
+ *
37
39
  * process.env.API_KEY = '';
38
40
  * checkAndGetEnvValue('API_KEY'); // ✅ Returns '' (still considered "defined")
39
41
  *
package/dist/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","names":[],"sources":["../src/env.ts"],"sourcesContent":["/**\n * Custom error class for handling missing environment variables.\n *\n * Extends the built-in `Error` class and includes the missing key.\n *\n * @extends {Error}\n */\nexport class EnvironmentNotFoundError extends Error {\n readonly key: string;\n\n /**\n * Creates a new EnvironmentNotFoundError.\n *\n * @param {string} key - The missing environment variable key\n */\n constructor(key: string) {\n super(`Missing environment variable: ${key}`);\n this.key = key;\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\n\n/**\n * Retrieves the value of an environment variable, or throws an error if it is not defined.\n *\n * Only checks for `process.env[key] === undefined`. An empty string (e.g. '') or any falsy string\n * value like `'0'` or `'false'` is considered a valid (defined) value.\n *\n * @param {string} key - The environment variable key to retrieve\n *\n * @returns {string} The value of the environment variable\n *\n * @throws {EnvironmentNotFoundError} If the environment variable is not defined\n *\n * @example\n * ```typescript\n * process.env.API_KEY = '';\n * checkAndGetEnvValue('API_KEY'); // ✅ Returns '' (still considered \"defined\")\n *\n * delete process.env.API_KEY;\n * checkAndGetEnvValue('API_KEY'); // ❌ Throws EnvironmentNotFoundError\n * ```\n */\nexport function checkAndGetEnvValue(key: string) {\n if (process.env[key] === undefined) throw new EnvironmentNotFoundError(key);\n return process.env[key];\n}\n"],"mappings":";;;;;;;;AAOA,IAAa,2BAAb,cAA8C,MAAM;CAChD;;;;;;CAOA,YAAY,KAAa;AACrB,QAAM,iCAAiC,MAAM;AAC7C,OAAK,MAAM;AACX,OAAK,OAAO,KAAK,YAAY;AAC7B,QAAM,oBAAoB,MAAM,KAAK,YAAY;;;;;;;;;;;;;;;;;;;;;;;;AAyBzD,SAAgB,oBAAoB,KAAa;AAC7C,KAAI,QAAQ,IAAI,SAAS,KAAA,EAAW,OAAM,IAAI,yBAAyB,IAAI;AAC3E,QAAO,QAAQ,IAAI"}
1
+ {"version":3,"file":"env.js","names":[],"sources":["../src/env.ts"],"sourcesContent":["/**\n * Custom error class for handling missing environment variables.\n *\n * Extends the built-in `Error` class and includes the missing key.\n *\n * @extends {Error}\n */\nexport class EnvironmentNotFoundError extends Error {\n readonly key: string;\n\n /**\n * Creates a new EnvironmentNotFoundError.\n *\n * @param {string} key - The missing environment variable key\n */\n constructor(key: string) {\n super(`Missing environment variable: ${key}`);\n this.key = key;\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\n\n/**\n * Retrieves the value of an environment variable, or throws an error if it is not defined.\n *\n * Only checks for `process.env[key] === undefined`. An empty string (e.g. '') or any falsy string\n * value like `'0'` or `'false'` is considered a valid (defined) value.\n *\n * @param {string} key - The environment variable key to retrieve\n *\n * @returns {string} The value of the environment variable\n *\n * @throws {EnvironmentNotFoundError} If the environment variable is not defined\n *\n * @example\n * ```typescript\n * import { checkAndGetEnvValue } from '@kikiutils/shared/env';\n *\n * process.env.API_KEY = '';\n * checkAndGetEnvValue('API_KEY'); // ✅ Returns '' (still considered \"defined\")\n *\n * delete process.env.API_KEY;\n * checkAndGetEnvValue('API_KEY'); // ❌ Throws EnvironmentNotFoundError\n * ```\n */\nexport function checkAndGetEnvValue(key: string) {\n if (process.env[key] === undefined) throw new EnvironmentNotFoundError(key);\n return process.env[key];\n}\n"],"mappings":";;;;;;;;AAOA,IAAa,2BAAb,cAA8C,MAAM;CAChD;;;;;;CAOA,YAAY,KAAa;AACrB,QAAM,iCAAiC,MAAM;AAC7C,OAAK,MAAM;AACX,OAAK,OAAO,KAAK,YAAY;AAC7B,QAAM,oBAAoB,MAAM,KAAK,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BzD,SAAgB,oBAAoB,KAAa;AAC7C,KAAI,QAAQ,IAAI,SAAS,KAAA,EAAW,OAAM,IAAI,yBAAyB,IAAI;AAC3E,QAAO,QAAQ,IAAI"}