@kikiutils/shared 14.1.2 → 15.0.1

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 (54) hide show
  1. package/dist/buffer.js +1 -2
  2. package/dist/buffer.js.map +1 -1
  3. package/dist/classes/path.d.ts +1 -28
  4. package/dist/classes/path.d.ts.map +1 -1
  5. package/dist/classes/path.js +1 -35
  6. package/dist/classes/path.js.map +1 -1
  7. package/dist/classes/precision-number.js +1 -2
  8. package/dist/classes/precision-number.js.map +1 -1
  9. package/dist/classes/ssh-client.d.ts +3 -3
  10. package/dist/classes/ssh-client.d.ts.map +1 -1
  11. package/dist/classes/ssh-client.js +1 -2
  12. package/dist/classes/ssh-client.js.map +1 -1
  13. package/dist/clipboard.js +1 -1
  14. package/dist/consola.d.ts +3 -3
  15. package/dist/consola.d.ts.map +1 -1
  16. package/dist/consola.js +1 -2
  17. package/dist/consola.js.map +1 -1
  18. package/dist/crypto-hash.js +1 -2
  19. package/dist/crypto-hash.js.map +1 -1
  20. package/dist/datetime.js +1 -2
  21. package/dist/datetime.js.map +1 -1
  22. package/dist/element-plus.js +1 -1
  23. package/dist/enum.js +1 -1
  24. package/dist/env.js +1 -1
  25. package/dist/env.js.map +1 -1
  26. package/dist/event-awaiter.js +1 -1
  27. package/dist/event-awaiter.js.map +1 -1
  28. package/dist/general.js +1 -1
  29. package/dist/hash.js +1 -2
  30. package/dist/hash.js.map +1 -1
  31. package/dist/math.js +1 -2
  32. package/dist/math.js.map +1 -1
  33. package/dist/number.js +1 -2
  34. package/dist/number.js.map +1 -1
  35. package/dist/object.js +1 -1
  36. package/dist/pino.d.ts +3 -3
  37. package/dist/pino.js +6 -12
  38. package/dist/pino.js.map +1 -1
  39. package/dist/random.js +1 -1
  40. package/dist/storages/lru/keyed-store.js +1 -1
  41. package/dist/storages/redis/keyed-store.js +1 -1
  42. package/dist/storages/redis/msgpack.js +1 -2
  43. package/dist/storages/redis/msgpack.js.map +1 -1
  44. package/dist/storages/redis/types.js +1 -1
  45. package/dist/string.js +1 -1
  46. package/dist/time.js +1 -1
  47. package/dist/time.js.map +1 -1
  48. package/dist/url.js +1 -1
  49. package/dist/vue.js +1 -2
  50. package/dist/vue.js.map +1 -1
  51. package/dist/web.js +1 -2
  52. package/dist/web.js.map +1 -1
  53. package/package.json +28 -44
  54. package/src/classes/path.ts +0 -47
package/dist/buffer.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Buffer } from "node:buffer";
2
-
3
2
  //#region src/buffer.ts
4
3
  /**
5
4
  * Converts various binary data types to a Node.js Buffer.
@@ -38,7 +37,7 @@ async function toBuffer(input) {
38
37
  if (typeof input.arrayBuffer === "function") return Buffer.from(await input.arrayBuffer());
39
38
  throw new TypeError("The provided input is not a supported binary type (Blob, Buffer, File, ArrayBuffer, or Uint8Array).");
40
39
  }
41
-
42
40
  //#endregion
43
41
  export { toBuffer };
42
+
44
43
  //# sourceMappingURL=buffer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.js","names":[],"sources":["../src/buffer.ts"],"sourcesContent":["import { Buffer } from 'node:buffer';\n\nimport type { BinaryInput } from './types';\n\n/**\n * Converts various binary data types to a Node.js Buffer.\n *\n * This function provides a unified, efficient way to convert different binary formats\n * (Blob, Buffer, File, ArrayBuffer, or Uint8Array) into a Node.js Buffer.\n * It prioritizes zero-copy conversions for TypedArrays and ArrayBuffers to ensure\n * optimal performance.\n *\n * @param {ArrayBuffer | Blob | Buffer | File | Uint8Array} input - The binary data input to convert.\n * Supports Blob, Buffer, File, ArrayBuffer, and Uint8Array.\n *\n * @returns {Promise<Buffer>} A promise that resolves to a Node.js Buffer.\n *\n * @example\n * ```typescript\n * import { toBuffer } from '@kikiutils/shared/buffer';\n *\n * // From ArrayBuffer\n * const ab = new ArrayBuffer(8);\n * const bufferFromAB = await toBuffer(ab);\n *\n * // From Uint8Array (Zero-copy)\n * const u8 = new Uint8Array([10, 20, 30]);\n * const bufferFromU8 = await toBuffer(u8);\n *\n * // From Blob or File\n * const blob = new Blob(['data'], { type: 'text/plain' });\n * const bufferFromBlob = await toBuffer(blob);\n * ```\n */\nexport async function toBuffer(input: BinaryInput) {\n if (Buffer.isBuffer(input)) return input;\n if (input instanceof ArrayBuffer) return Buffer.from(input);\n if (input instanceof Uint8Array) return Buffer.from(input.buffer, input.byteOffset, input.byteLength);\n if (typeof input.arrayBuffer === 'function') return Buffer.from(await input.arrayBuffer());\n // eslint-disable-next-line style/max-len\n throw new TypeError('The provided input is not a supported binary type (Blob, Buffer, File, ArrayBuffer, or Uint8Array).');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,eAAsB,SAAS,OAAoB;AAC/C,KAAI,OAAO,SAAS,MAAM,CAAE,QAAO;AACnC,KAAI,iBAAiB,YAAa,QAAO,OAAO,KAAK,MAAM;AAC3D,KAAI,iBAAiB,WAAY,QAAO,OAAO,KAAK,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;AACrG,KAAI,OAAO,MAAM,gBAAgB,WAAY,QAAO,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAE1F,OAAM,IAAI,UAAU,sGAAsG"}
1
+ {"version":3,"file":"buffer.js","names":[],"sources":["../src/buffer.ts"],"sourcesContent":["import { Buffer } from 'node:buffer';\n\nimport type { BinaryInput } from './types';\n\n/**\n * Converts various binary data types to a Node.js Buffer.\n *\n * This function provides a unified, efficient way to convert different binary formats\n * (Blob, Buffer, File, ArrayBuffer, or Uint8Array) into a Node.js Buffer.\n * It prioritizes zero-copy conversions for TypedArrays and ArrayBuffers to ensure\n * optimal performance.\n *\n * @param {ArrayBuffer | Blob | Buffer | File | Uint8Array} input - The binary data input to convert.\n * Supports Blob, Buffer, File, ArrayBuffer, and Uint8Array.\n *\n * @returns {Promise<Buffer>} A promise that resolves to a Node.js Buffer.\n *\n * @example\n * ```typescript\n * import { toBuffer } from '@kikiutils/shared/buffer';\n *\n * // From ArrayBuffer\n * const ab = new ArrayBuffer(8);\n * const bufferFromAB = await toBuffer(ab);\n *\n * // From Uint8Array (Zero-copy)\n * const u8 = new Uint8Array([10, 20, 30]);\n * const bufferFromU8 = await toBuffer(u8);\n *\n * // From Blob or File\n * const blob = new Blob(['data'], { type: 'text/plain' });\n * const bufferFromBlob = await toBuffer(blob);\n * ```\n */\nexport async function toBuffer(input: BinaryInput) {\n if (Buffer.isBuffer(input)) return input;\n if (input instanceof ArrayBuffer) return Buffer.from(input);\n if (input instanceof Uint8Array) return Buffer.from(input.buffer, input.byteOffset, input.byteLength);\n if (typeof input.arrayBuffer === 'function') return Buffer.from(await input.arrayBuffer());\n // eslint-disable-next-line style/max-len\n throw new TypeError('The provided input is not a supported binary type (Blob, Buffer, File, ArrayBuffer, or Uint8Array).');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,eAAsB,SAAS,OAAoB;AAC/C,KAAI,OAAO,SAAS,MAAM,CAAE,QAAO;AACnC,KAAI,iBAAiB,YAAa,QAAO,OAAO,KAAK,MAAM;AAC3D,KAAI,iBAAiB,WAAY,QAAO,OAAO,KAAK,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW;AACrG,KAAI,OAAO,MAAM,gBAAgB,WAAY,QAAO,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAE1F,OAAM,IAAI,UAAU,sGAAsG"}
@@ -1,13 +1,10 @@
1
1
  import { Buffer } from "node:buffer";
2
2
  import * as fsp from "node:fs/promises";
3
3
  import * as nodePath from "node:path";
4
- import * as fsExtra from "fs-extra";
5
4
  import { Abortable } from "node:events";
6
5
  import * as fs from "node:fs";
7
- import { JFReadOptions, JFWriteOptions } from "jsonfile";
8
6
 
9
7
  //#region src/classes/path.d.ts
10
- type DoNotRemoveOrUseThisType = typeof fsExtra;
11
8
  type DropFirstParameters<T extends (...args: any) => any> = Parameters<T> extends [any, ...infer R] ? R : never;
12
9
  type PathLike = fs.PathLike | Path;
13
10
  /**
@@ -190,31 +187,7 @@ declare class Path {
190
187
  * @see {@link fsp.writeFile}
191
188
  */
192
189
  writeFile(...args: DropFirstParameters<typeof fsp.writeFile>): Promise<void>;
193
- /**
194
- * @see {@link fsExtra.ensureDir}
195
- */
196
- ensureDir(options?: fsExtra.EnsureDirOptions | number): Promise<void>;
197
- /**
198
- * @see {@link fsExtra.ensureDir}
199
- */
200
- mkdirp: (options?: fsExtra.EnsureDirOptions | number) => Promise<void>;
201
- /**
202
- * @see {@link fsExtra.ensureDir}
203
- */
204
- mkdirs: (options?: fsExtra.EnsureDirOptions | number) => Promise<void>;
205
- /**
206
- * @see {@link fsExtra.readJson}
207
- */
208
- readJson<T = any>(options?: JFReadOptions): Promise<T>;
209
- /**
210
- * @see {@link fsExtra.remove}
211
- */
212
- remove(): Promise<void>;
213
- /**
214
- * @see {@link fsExtra.writeJson}
215
- */
216
- writeJson(data: any, options?: JFWriteOptions): Promise<void>;
217
190
  }
218
191
  //#endregion
219
- export { DoNotRemoveOrUseThisType, Path, PathLike };
192
+ export { Path, PathLike };
220
193
  //# sourceMappingURL=path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path.d.ts","names":[],"sources":["../../src/classes/path.ts"],"mappings":"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"}
1
+ {"version":3,"file":"path.d.ts","names":[],"sources":["../../src/classes/path.ts"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  import * as fsp from "node:fs/promises";
2
2
  import { basename, dirname, extname, format, isAbsolute, join, normalize, parse, relative, resolve, toNamespacedPath } from "node:path";
3
- import * as fsExtra from "fs-extra";
4
-
5
3
  //#region src/classes/path.ts
6
4
  /**
7
5
  * Class representing a file system path with various utility methods for path operations.
@@ -206,40 +204,8 @@ var Path = class Path {
206
204
  writeFile(...args) {
207
205
  return fsp.writeFile(this.#value, ...args);
208
206
  }
209
- /**
210
- * @see {@link fsExtra.ensureDir}
211
- */
212
- ensureDir(options) {
213
- return fsExtra.ensureDir(this.#value, options);
214
- }
215
- /**
216
- * @see {@link fsExtra.ensureDir}
217
- */
218
- mkdirp = this.ensureDir;
219
- /**
220
- * @see {@link fsExtra.ensureDir}
221
- */
222
- mkdirs = this.ensureDir;
223
- /**
224
- * @see {@link fsExtra.readJson}
225
- */
226
- async readJson(options) {
227
- return await fsExtra.readJson(this.#value, options);
228
- }
229
- /**
230
- * @see {@link fsExtra.remove}
231
- */
232
- remove() {
233
- return fsExtra.remove(this.#value);
234
- }
235
- /**
236
- * @see {@link fsExtra.writeJson}
237
- */
238
- writeJson(data, options) {
239
- return fsExtra.writeJson(this.#value, data, options);
240
- }
241
207
  };
242
-
243
208
  //#endregion
244
209
  export { Path };
210
+
245
211
  //# sourceMappingURL=path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","names":["#value","#toStrings","#newInstance"],"sources":["../../src/classes/path.ts"],"sourcesContent":["import type { Buffer } from 'node:buffer';\nimport type { Abortable } from 'node:events';\nimport type * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport {\n basename,\n dirname,\n extname,\n format,\n isAbsolute,\n join,\n normalize,\n parse,\n relative,\n resolve,\n toNamespacedPath,\n} from 'node:path';\nimport type * as nodePath from 'node:path';\n\nimport * as fsExtra from 'fs-extra';\nimport type {\n JFReadOptions,\n JFWriteOptions,\n} from 'jsonfile';\n\nexport type DoNotRemoveOrUseThisType = typeof fsExtra;\ntype DropFirstParameters<T extends (...args: any) => any> = Parameters<T> extends [any, ...infer R] ? R : never;\nexport type PathLike = fs.PathLike | Path;\n\n/**\n * Class representing a file system path with various utility methods for path operations.\n *\n * All methods in the `Path` class are immutable, returning new instances with modified values\n * and leaving the original instance unchanged.\n */\nexport class Path {\n readonly #value: string;\n\n constructor(...paths: PathLike[]) {\n this.#value = join(...this.#toStrings(paths));\n }\n\n // Symbols\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return this.#value;\n }\n\n [Symbol.toPrimitive](hint: string) {\n if (hint === 'number') throw new TypeError('Cannot convert a Path to a number');\n return this.#value;\n }\n\n // Private methods\n #newInstance(...paths: PathLike[]) {\n return new Path(...paths);\n }\n\n #toStrings(paths: PathLike[]) {\n return paths.map((path) => path.toString());\n }\n\n // Public getters\n\n /**\n * @see {@link nodePath.dirname}\n */\n get parent() {\n return this.dirname();\n }\n\n /**\n * Returns the internal path string value.\n */\n get value() {\n return this.#value;\n }\n\n // Public static methods\n\n /**\n * @see {@link nodePath.format}\n */\n static format(pathObject: nodePath.FormatInputPathObject) {\n return new Path(format(pathObject));\n }\n\n /**\n * @see {@link nodePath.resolve}\n */\n static resolve(...paths: PathLike[]) {\n return new this(...paths).resolve();\n }\n\n // Public base methods\n\n /**\n * @see {@link nodePath.basename}\n */\n basename(suffix?: string) {\n return basename(this.#value, suffix);\n }\n\n /**\n * @see {@link nodePath.dirname}\n */\n dirname() {\n return this.#newInstance(dirname(this.#value));\n }\n\n /**\n * @see {@link nodePath.extname}\n */\n extname() {\n return extname(this.#value);\n }\n\n /**\n * @see {@link nodePath.isAbsolute}\n */\n isAbsolute() {\n return isAbsolute(this.#value);\n }\n\n /**\n * @see {@link nodePath.normalize}\n */\n normalize() {\n return this.#newInstance(normalize(this.#value));\n }\n\n /**\n * @see {@link nodePath.join}\n */\n join(...paths: PathLike[]) {\n return this.#newInstance(this.#value, ...this.#toStrings(paths));\n }\n\n /**\n * @see {@link nodePath.parse}\n */\n parse() {\n return parse(this.#value);\n }\n\n /**\n * @see {@link nodePath.relative}\n */\n relative(to: PathLike) {\n return this.#newInstance(relative(this.#value, to.toString()));\n }\n\n /**\n * @see {@link nodePath.resolve}\n */\n resolve() {\n return this.#newInstance(resolve(this.#value));\n }\n\n toJSON() {\n return this.#value;\n }\n\n /**\n * @see {@link nodePath.toNamespacedPath}\n */\n toNamespacedPath() {\n return toNamespacedPath(this.#value);\n }\n\n /**\n * Converts the Path instance to a string.\n * This method returns the internal path string value,\n * making it useful for implicit and explicit string conversions.\n */\n toString() {\n return this.#value;\n }\n\n // Some commonly used promise fs methods\n\n /**\n * @see {@link fsp.access}\n */\n access(...args: DropFirstParameters<typeof fsp.access>) {\n return fsp.access(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.appendFile}\n */\n appendFile(...args: DropFirstParameters<typeof fsp.appendFile>) {\n return fsp.appendFile(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.chmod}\n */\n chmod(...args: DropFirstParameters<typeof fsp.chmod>) {\n return fsp.chmod(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.chown}\n */\n chown(...args: DropFirstParameters<typeof fsp.chown>) {\n return fsp.chown(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.copyFile}\n */\n copyFile(...args: DropFirstParameters<typeof fsp.copyFile>) {\n return fsp.copyFile(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.mkdir}\n */\n mkdir(\n options: fs.MakeDirectoryOptions & {\n recursive: true;\n },\n ): Promise<string>;\n mkdir(\n options?:\n | (fs.MakeDirectoryOptions & {\n recursive?: false;\n })\n | fs.Mode\n | null,\n ): Promise<void>;\n mkdir(options?: fs.MakeDirectoryOptions | fs.Mode | null): Promise<string | undefined>;\n mkdir(...args: any): any {\n return fsp.mkdir(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.open}\n */\n open(...args: DropFirstParameters<typeof fsp.open>) {\n return fsp.open(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.readdir}\n */\n readdir(\n path: PathLike,\n options?:\n | BufferEncoding\n | (fs.ObjectEncodingOptions & {\n recursive?: boolean;\n withFileTypes?: false;\n })\n | null,\n ): Promise<string[]>;\n readdir(\n path: PathLike,\n options:\n | 'buffer'\n | {\n encoding: 'buffer';\n recursive?: boolean;\n withFileTypes?: false;\n },\n ): Promise<Buffer[]>;\n readdir(\n path: PathLike,\n options?:\n | BufferEncoding\n | (fs.ObjectEncodingOptions & {\n recursive?: boolean;\n withFileTypes?: false;\n })\n | null,\n ): Promise<Buffer[] | string[]>;\n readdir(\n path: PathLike,\n options: fs.ObjectEncodingOptions & {\n recursive?: boolean;\n withFileTypes: true;\n },\n ): Promise<fs.Dirent[]>;\n readdir(\n path: PathLike,\n options: {\n encoding: 'buffer';\n recursive?: boolean;\n withFileTypes: true;\n },\n ): Promise<fs.Dirent<Buffer>[]>;\n readdir(...args: any): any {\n return fsp.readdir(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.readFile}\n */\n readFile(\n options?:\n | (Abortable & {\n encoding?: null;\n flag?: fs.OpenMode;\n })\n | null,\n ): Promise<Buffer>;\n readFile(\n options:\n | (Abortable & {\n encoding: BufferEncoding;\n flag?: fs.OpenMode;\n })\n | BufferEncoding,\n ): Promise<string>;\n readFile(\n options?:\n | (\n & Abortable\n & fs.ObjectEncodingOptions\n & { flag?: fs.OpenMode }\n )\n | BufferEncoding\n | null,\n ): Promise<Buffer | string>;\n readFile(...args: any): any {\n return fsp.readFile(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.rename}\n */\n rename(newPath: PathLike) {\n return fsp.rename(this.#value, newPath.toString());\n }\n\n /**\n * @see {@link fsp.rm}\n */\n rm(...args: DropFirstParameters<typeof fsp.rm>) {\n return fsp.rm(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.rmdir}\n */\n rmdir(...args: DropFirstParameters<typeof fsp.rmdir>) {\n return fsp.rmdir(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.stat}\n */\n stat(\n opts?: fs.StatOptions & {\n bigint?: false;\n },\n ): Promise<fs.Stats>;\n stat(\n opts: fs.StatOptions & {\n bigint: true;\n },\n ): Promise<fs.BigIntStats>;\n stat(opts?: fs.StatOptions): Promise<fs.BigIntStats | fs.Stats>;\n stat(...args: any): any {\n return fsp.stat(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.truncate}\n */\n truncate(...args: DropFirstParameters<typeof fsp.truncate>) {\n return fsp.truncate(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.unlink}\n */\n unlink() {\n return fsp.unlink(this.#value);\n }\n\n /**\n * @see {@link fsp.writeFile}\n */\n writeFile(...args: DropFirstParameters<typeof fsp.writeFile>) {\n return fsp.writeFile(this.#value, ...args);\n }\n\n // Some commonly used promise fs extra methods\n\n /**\n * @see {@link fsExtra.ensureDir}\n */\n ensureDir(options?: fsExtra.EnsureDirOptions | number) {\n return fsExtra.ensureDir(this.#value, options);\n }\n\n /**\n * @see {@link fsExtra.ensureDir}\n */\n mkdirp = this.ensureDir;\n\n /**\n * @see {@link fsExtra.ensureDir}\n */\n mkdirs = this.ensureDir;\n\n /**\n * @see {@link fsExtra.readJson}\n */\n async readJson<T = any>(options?: JFReadOptions) {\n return await fsExtra.readJson(this.#value, options) as T;\n }\n\n /**\n * @see {@link fsExtra.remove}\n */\n remove() {\n return fsExtra.remove(this.#value);\n }\n\n /**\n * @see {@link fsExtra.writeJson}\n */\n writeJson(data: any, options?: JFWriteOptions) {\n return fsExtra.writeJson(this.#value, data, options);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"path.js","names":["#value","#toStrings","#newInstance"],"sources":["../../src/classes/path.ts"],"sourcesContent":["import type { Buffer } from 'node:buffer';\nimport type { Abortable } from 'node:events';\nimport type * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport {\n basename,\n dirname,\n extname,\n format,\n isAbsolute,\n join,\n normalize,\n parse,\n relative,\n resolve,\n toNamespacedPath,\n} from 'node:path';\nimport type * as nodePath from 'node:path';\n\ntype DropFirstParameters<T extends (...args: any) => any> = Parameters<T> extends [any, ...infer R] ? R : never;\nexport type PathLike = fs.PathLike | Path;\n\n/**\n * Class representing a file system path with various utility methods for path operations.\n *\n * All methods in the `Path` class are immutable, returning new instances with modified values\n * and leaving the original instance unchanged.\n */\nexport class Path {\n readonly #value: string;\n\n constructor(...paths: PathLike[]) {\n this.#value = join(...this.#toStrings(paths));\n }\n\n // Symbols\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return this.#value;\n }\n\n [Symbol.toPrimitive](hint: string) {\n if (hint === 'number') throw new TypeError('Cannot convert a Path to a number');\n return this.#value;\n }\n\n // Private methods\n #newInstance(...paths: PathLike[]) {\n return new Path(...paths);\n }\n\n #toStrings(paths: PathLike[]) {\n return paths.map((path) => path.toString());\n }\n\n // Public getters\n\n /**\n * @see {@link nodePath.dirname}\n */\n get parent() {\n return this.dirname();\n }\n\n /**\n * Returns the internal path string value.\n */\n get value() {\n return this.#value;\n }\n\n // Public static methods\n\n /**\n * @see {@link nodePath.format}\n */\n static format(pathObject: nodePath.FormatInputPathObject) {\n return new Path(format(pathObject));\n }\n\n /**\n * @see {@link nodePath.resolve}\n */\n static resolve(...paths: PathLike[]) {\n return new this(...paths).resolve();\n }\n\n // Public base methods\n\n /**\n * @see {@link nodePath.basename}\n */\n basename(suffix?: string) {\n return basename(this.#value, suffix);\n }\n\n /**\n * @see {@link nodePath.dirname}\n */\n dirname() {\n return this.#newInstance(dirname(this.#value));\n }\n\n /**\n * @see {@link nodePath.extname}\n */\n extname() {\n return extname(this.#value);\n }\n\n /**\n * @see {@link nodePath.isAbsolute}\n */\n isAbsolute() {\n return isAbsolute(this.#value);\n }\n\n /**\n * @see {@link nodePath.normalize}\n */\n normalize() {\n return this.#newInstance(normalize(this.#value));\n }\n\n /**\n * @see {@link nodePath.join}\n */\n join(...paths: PathLike[]) {\n return this.#newInstance(this.#value, ...this.#toStrings(paths));\n }\n\n /**\n * @see {@link nodePath.parse}\n */\n parse() {\n return parse(this.#value);\n }\n\n /**\n * @see {@link nodePath.relative}\n */\n relative(to: PathLike) {\n return this.#newInstance(relative(this.#value, to.toString()));\n }\n\n /**\n * @see {@link nodePath.resolve}\n */\n resolve() {\n return this.#newInstance(resolve(this.#value));\n }\n\n toJSON() {\n return this.#value;\n }\n\n /**\n * @see {@link nodePath.toNamespacedPath}\n */\n toNamespacedPath() {\n return toNamespacedPath(this.#value);\n }\n\n /**\n * Converts the Path instance to a string.\n * This method returns the internal path string value,\n * making it useful for implicit and explicit string conversions.\n */\n toString() {\n return this.#value;\n }\n\n // Some commonly used promise fs methods\n\n /**\n * @see {@link fsp.access}\n */\n access(...args: DropFirstParameters<typeof fsp.access>) {\n return fsp.access(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.appendFile}\n */\n appendFile(...args: DropFirstParameters<typeof fsp.appendFile>) {\n return fsp.appendFile(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.chmod}\n */\n chmod(...args: DropFirstParameters<typeof fsp.chmod>) {\n return fsp.chmod(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.chown}\n */\n chown(...args: DropFirstParameters<typeof fsp.chown>) {\n return fsp.chown(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.copyFile}\n */\n copyFile(...args: DropFirstParameters<typeof fsp.copyFile>) {\n return fsp.copyFile(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.mkdir}\n */\n mkdir(\n options: fs.MakeDirectoryOptions & {\n recursive: true;\n },\n ): Promise<string>;\n mkdir(\n options?:\n | (fs.MakeDirectoryOptions & {\n recursive?: false;\n })\n | fs.Mode\n | null,\n ): Promise<void>;\n mkdir(options?: fs.MakeDirectoryOptions | fs.Mode | null): Promise<string | undefined>;\n mkdir(...args: any): any {\n return fsp.mkdir(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.open}\n */\n open(...args: DropFirstParameters<typeof fsp.open>) {\n return fsp.open(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.readdir}\n */\n readdir(\n path: PathLike,\n options?:\n | BufferEncoding\n | (fs.ObjectEncodingOptions & {\n recursive?: boolean;\n withFileTypes?: false;\n })\n | null,\n ): Promise<string[]>;\n readdir(\n path: PathLike,\n options:\n | 'buffer'\n | {\n encoding: 'buffer';\n recursive?: boolean;\n withFileTypes?: false;\n },\n ): Promise<Buffer[]>;\n readdir(\n path: PathLike,\n options?:\n | BufferEncoding\n | (fs.ObjectEncodingOptions & {\n recursive?: boolean;\n withFileTypes?: false;\n })\n | null,\n ): Promise<Buffer[] | string[]>;\n readdir(\n path: PathLike,\n options: fs.ObjectEncodingOptions & {\n recursive?: boolean;\n withFileTypes: true;\n },\n ): Promise<fs.Dirent[]>;\n readdir(\n path: PathLike,\n options: {\n encoding: 'buffer';\n recursive?: boolean;\n withFileTypes: true;\n },\n ): Promise<fs.Dirent<Buffer>[]>;\n readdir(...args: any): any {\n return fsp.readdir(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.readFile}\n */\n readFile(\n options?:\n | (Abortable & {\n encoding?: null;\n flag?: fs.OpenMode;\n })\n | null,\n ): Promise<Buffer>;\n readFile(\n options:\n | (Abortable & {\n encoding: BufferEncoding;\n flag?: fs.OpenMode;\n })\n | BufferEncoding,\n ): Promise<string>;\n readFile(\n options?:\n | (\n & Abortable\n & fs.ObjectEncodingOptions\n & { flag?: fs.OpenMode }\n )\n | BufferEncoding\n | null,\n ): Promise<Buffer | string>;\n readFile(...args: any): any {\n return fsp.readFile(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.rename}\n */\n rename(newPath: PathLike) {\n return fsp.rename(this.#value, newPath.toString());\n }\n\n /**\n * @see {@link fsp.rm}\n */\n rm(...args: DropFirstParameters<typeof fsp.rm>) {\n return fsp.rm(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.rmdir}\n */\n rmdir(...args: DropFirstParameters<typeof fsp.rmdir>) {\n return fsp.rmdir(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.stat}\n */\n stat(\n opts?: fs.StatOptions & {\n bigint?: false;\n },\n ): Promise<fs.Stats>;\n stat(\n opts: fs.StatOptions & {\n bigint: true;\n },\n ): Promise<fs.BigIntStats>;\n stat(opts?: fs.StatOptions): Promise<fs.BigIntStats | fs.Stats>;\n stat(...args: any): any {\n return fsp.stat(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.truncate}\n */\n truncate(...args: DropFirstParameters<typeof fsp.truncate>) {\n return fsp.truncate(this.#value, ...args);\n }\n\n /**\n * @see {@link fsp.unlink}\n */\n unlink() {\n return fsp.unlink(this.#value);\n }\n\n /**\n * @see {@link fsp.writeFile}\n */\n writeFile(...args: DropFirstParameters<typeof fsp.writeFile>) {\n return fsp.writeFile(this.#value, ...args);\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { Decimal } from "decimal.js";
2
-
3
2
  //#region src/classes/precision-number.ts
4
3
  /**
5
4
  * Class representing a precision number with configurable decimal places and rounding.
@@ -127,7 +126,7 @@ var PrecisionNumber = class PrecisionNumber {
127
126
  return new PrecisionNumber(this.#decimal.times(value.toString().trim()), this.#decimalPlaces, this.#rounding);
128
127
  }
129
128
  };
130
-
131
129
  //#endregion
132
130
  export { PrecisionNumber };
131
+
133
132
  //# sourceMappingURL=precision-number.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"precision-number.js","names":["#decimalPlaces","#rounding","#decimal","#decimalToFixedDecimal"],"sources":["../../src/classes/precision-number.ts"],"sourcesContent":["import { Decimal } from 'decimal.js';\n\nexport type PrecisionNumberValue = Decimal.Value | PrecisionNumber | { toString: () => string };\n\n/**\n * Class representing a precision number with configurable decimal places and rounding.\n *\n * This class leverages the Decimal.js library to ensure accurate arithmetic operations\n * with floating point numbers. It provides methods for various arithmetic operations\n * (addition, subtraction, multiplication, division) as well as comparison and utility\n * methods to check the state of the number (e.g., if it is finite, an integer, zero, etc.).\n *\n * The class also includes custom symbol methods to support Node.js inspection and primitive\n * type conversion.\n *\n * The class supports in-place modification methods that alter the current instance's value,\n * such as `plus`, `minus`, `times`, `dividedBy`, and others. Additionally, methods prefixed\n * with `to` (e.g., `toPlus`, `toMinus`) return a new instance of `PrecisionNumber` with the\n * modified value, leaving the original instance unchanged.\n */\nexport class PrecisionNumber {\n // Private properties\n readonly #decimalPlaces: number;\n readonly #rounding: Decimal.Rounding;\n #decimal: Decimal;\n\n constructor(\n value: PrecisionNumberValue = '0',\n decimalPlaces: number = 2,\n rounding: Decimal.Rounding = Decimal.ROUND_DOWN,\n ) {\n this.#decimalPlaces = decimalPlaces;\n this.#rounding = rounding;\n this.#decimal = this.#decimalToFixedDecimal(new Decimal(value.toString().trim()));\n }\n\n // Symbols\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return this.value;\n }\n\n [Symbol.toPrimitive](hint: string) {\n if (hint === 'number') return this.#decimal.toNumber();\n return this.value;\n }\n\n // Private methods\n #decimalToFixedDecimal(decimal: Decimal) {\n return decimal.toDecimalPlaces(this.#decimalPlaces, this.#rounding);\n }\n\n // Public getters\n get value() {\n return this.#decimal.toFixed(this.#decimalPlaces, this.#rounding);\n }\n\n // Static methods\n static toFixed(\n value: PrecisionNumberValue,\n decimalPlaces: number = 2,\n rounding: Decimal.Rounding = Decimal.ROUND_DOWN,\n ) {\n return new Decimal(value.toString().trim()).toFixed(decimalPlaces, rounding);\n }\n\n // Public methods\n absoluteValue() {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.absoluteValue());\n return this;\n }\n\n dividedBy(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.dividedBy(value.toString().trim()));\n return this;\n }\n\n equals(value: PrecisionNumberValue) {\n return this.#decimal.equals(value.toString().trim());\n }\n\n gt(value: PrecisionNumberValue) {\n return this.#decimal.gt(value.toString().trim());\n }\n\n gte(value: PrecisionNumberValue) {\n return this.#decimal.gte(value.toString().trim());\n }\n\n isFinite() {\n return this.#decimal.isFinite();\n }\n\n isInteger() {\n return this.#decimal.isInteger();\n }\n\n isNaN() {\n return this.#decimal.isNaN();\n }\n\n isNegative() {\n return this.#decimal.isNegative();\n }\n\n isPositive() {\n return this.#decimal.isPositive();\n }\n\n isZero() {\n return this.#decimal.isZero();\n }\n\n lt(value: PrecisionNumberValue) {\n return this.#decimal.lt(value.toString().trim());\n }\n\n lte(value: PrecisionNumberValue) {\n return this.#decimal.lte(value.toString().trim());\n }\n\n minus(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.minus(value.toString().trim()));\n return this;\n }\n\n negate() {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.negated());\n return this;\n }\n\n plus(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.plus(value.toString().trim()));\n return this;\n }\n\n times(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.times(value.toString().trim()));\n return this;\n }\n\n toAbsoluteValue() {\n return new PrecisionNumber(this.#decimal.absoluteValue(), this.#decimalPlaces, this.#rounding);\n }\n\n toDividedBy(value: PrecisionNumberValue) {\n return new PrecisionNumber(\n this.#decimal.dividedBy(value.toString().trim()),\n this.#decimalPlaces,\n this.#rounding,\n );\n }\n\n toJSON() {\n return this.value;\n }\n\n toMinus(value: PrecisionNumberValue) {\n return new PrecisionNumber(this.#decimal.minus(value.toString().trim()), this.#decimalPlaces, this.#rounding);\n }\n\n toNegated() {\n return new PrecisionNumber(this.#decimal.negated(), this.#decimalPlaces, this.#rounding);\n }\n\n toPlus(value: PrecisionNumberValue) {\n return new PrecisionNumber(this.#decimal.plus(value.toString().trim()), this.#decimalPlaces, this.#rounding);\n }\n\n toString() {\n return this.value;\n }\n\n toFixed(decimalPlaces: number = this.#decimalPlaces, rounding: Decimal.Rounding = this.#rounding) {\n return this.#decimal.toFixed(decimalPlaces, rounding);\n }\n\n toTimes(value: PrecisionNumberValue) {\n return new PrecisionNumber(this.#decimal.times(value.toString().trim()), this.#decimalPlaces, this.#rounding);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"precision-number.js","names":["#decimalPlaces","#rounding","#decimal","#decimalToFixedDecimal"],"sources":["../../src/classes/precision-number.ts"],"sourcesContent":["import { Decimal } from 'decimal.js';\n\nexport type PrecisionNumberValue = Decimal.Value | PrecisionNumber | { toString: () => string };\n\n/**\n * Class representing a precision number with configurable decimal places and rounding.\n *\n * This class leverages the Decimal.js library to ensure accurate arithmetic operations\n * with floating point numbers. It provides methods for various arithmetic operations\n * (addition, subtraction, multiplication, division) as well as comparison and utility\n * methods to check the state of the number (e.g., if it is finite, an integer, zero, etc.).\n *\n * The class also includes custom symbol methods to support Node.js inspection and primitive\n * type conversion.\n *\n * The class supports in-place modification methods that alter the current instance's value,\n * such as `plus`, `minus`, `times`, `dividedBy`, and others. Additionally, methods prefixed\n * with `to` (e.g., `toPlus`, `toMinus`) return a new instance of `PrecisionNumber` with the\n * modified value, leaving the original instance unchanged.\n */\nexport class PrecisionNumber {\n // Private properties\n readonly #decimalPlaces: number;\n readonly #rounding: Decimal.Rounding;\n #decimal: Decimal;\n\n constructor(\n value: PrecisionNumberValue = '0',\n decimalPlaces: number = 2,\n rounding: Decimal.Rounding = Decimal.ROUND_DOWN,\n ) {\n this.#decimalPlaces = decimalPlaces;\n this.#rounding = rounding;\n this.#decimal = this.#decimalToFixedDecimal(new Decimal(value.toString().trim()));\n }\n\n // Symbols\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return this.value;\n }\n\n [Symbol.toPrimitive](hint: string) {\n if (hint === 'number') return this.#decimal.toNumber();\n return this.value;\n }\n\n // Private methods\n #decimalToFixedDecimal(decimal: Decimal) {\n return decimal.toDecimalPlaces(this.#decimalPlaces, this.#rounding);\n }\n\n // Public getters\n get value() {\n return this.#decimal.toFixed(this.#decimalPlaces, this.#rounding);\n }\n\n // Static methods\n static toFixed(\n value: PrecisionNumberValue,\n decimalPlaces: number = 2,\n rounding: Decimal.Rounding = Decimal.ROUND_DOWN,\n ) {\n return new Decimal(value.toString().trim()).toFixed(decimalPlaces, rounding);\n }\n\n // Public methods\n absoluteValue() {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.absoluteValue());\n return this;\n }\n\n dividedBy(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.dividedBy(value.toString().trim()));\n return this;\n }\n\n equals(value: PrecisionNumberValue) {\n return this.#decimal.equals(value.toString().trim());\n }\n\n gt(value: PrecisionNumberValue) {\n return this.#decimal.gt(value.toString().trim());\n }\n\n gte(value: PrecisionNumberValue) {\n return this.#decimal.gte(value.toString().trim());\n }\n\n isFinite() {\n return this.#decimal.isFinite();\n }\n\n isInteger() {\n return this.#decimal.isInteger();\n }\n\n isNaN() {\n return this.#decimal.isNaN();\n }\n\n isNegative() {\n return this.#decimal.isNegative();\n }\n\n isPositive() {\n return this.#decimal.isPositive();\n }\n\n isZero() {\n return this.#decimal.isZero();\n }\n\n lt(value: PrecisionNumberValue) {\n return this.#decimal.lt(value.toString().trim());\n }\n\n lte(value: PrecisionNumberValue) {\n return this.#decimal.lte(value.toString().trim());\n }\n\n minus(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.minus(value.toString().trim()));\n return this;\n }\n\n negate() {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.negated());\n return this;\n }\n\n plus(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.plus(value.toString().trim()));\n return this;\n }\n\n times(value: PrecisionNumberValue) {\n this.#decimal = this.#decimalToFixedDecimal(this.#decimal.times(value.toString().trim()));\n return this;\n }\n\n toAbsoluteValue() {\n return new PrecisionNumber(this.#decimal.absoluteValue(), this.#decimalPlaces, this.#rounding);\n }\n\n toDividedBy(value: PrecisionNumberValue) {\n return new PrecisionNumber(\n this.#decimal.dividedBy(value.toString().trim()),\n this.#decimalPlaces,\n this.#rounding,\n );\n }\n\n toJSON() {\n return this.value;\n }\n\n toMinus(value: PrecisionNumberValue) {\n return new PrecisionNumber(this.#decimal.minus(value.toString().trim()), this.#decimalPlaces, this.#rounding);\n }\n\n toNegated() {\n return new PrecisionNumber(this.#decimal.negated(), this.#decimalPlaces, this.#rounding);\n }\n\n toPlus(value: PrecisionNumberValue) {\n return new PrecisionNumber(this.#decimal.plus(value.toString().trim()), this.#decimalPlaces, this.#rounding);\n }\n\n toString() {\n return this.value;\n }\n\n toFixed(decimalPlaces: number = this.#decimalPlaces, rounding: Decimal.Rounding = this.#rounding) {\n return this.#decimal.toFixed(decimalPlaces, rounding);\n }\n\n toTimes(value: PrecisionNumberValue) {\n return new PrecisionNumber(this.#decimal.times(value.toString().trim()), this.#decimalPlaces, this.#rounding);\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Nullable } from "../types/index.js";
2
2
  import { PathLike } from "./path.js";
3
- import * as node_ssh0 from "node-ssh";
3
+ import * as _$node_ssh0 from "node-ssh";
4
4
  import { Config, NodeSSH, SSHExecCommandOptions, SSHGetPutDirectoryOptions, SSHPutFilesOptions } from "node-ssh";
5
5
  import { SFTPWrapper, TransferOptions } from "ssh2";
6
6
 
@@ -22,8 +22,8 @@ declare class SshClient {
22
22
  get nodeSsh(): NodeSSH;
23
23
  connect(): Promise<boolean>;
24
24
  disconnect(): boolean;
25
- execCommand(command: string, options?: SSHExecCommandOptions): Promise<void | node_ssh0.SSHExecCommandResponse>;
26
- execCommandWithIo(command: string, options?: SSHExecCommandOptions): Promise<void | node_ssh0.SSHExecCommandResponse>;
25
+ execCommand(command: string, options?: SSHExecCommandOptions): Promise<void | _$node_ssh0.SSHExecCommandResponse>;
26
+ execCommandWithIo(command: string, options?: SSHExecCommandOptions): Promise<void | _$node_ssh0.SSHExecCommandResponse>;
27
27
  getDir: (localDirectory: PathLike, remoteDirectory: PathLike, options?: SSHGetPutDirectoryOptions) => Promise<boolean>;
28
28
  getDirectory(localDirectory: PathLike, remoteDirectory: PathLike, options?: SSHGetPutDirectoryOptions): Promise<boolean>;
29
29
  getFile(localFile: PathLike, remoteFile: PathLike, givenSftp?: Nullable<SFTPWrapper>, transferOptions?: Nullable<TransferOptions>): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-client.d.ts","names":[],"sources":["../../src/classes/ssh-client.ts"],"mappings":";;;;;;;cAkBM,qCAAA;EAAA;;;;;;;;;;cAYO,SAAA;EAAA;cAMG,IAAA,UAAc,QAAA,UAAkB,QAAA,UAAkB,IAAA,WAAmB,aAAA,GAAgB,MAAA;EAAA,IAc7F,OAAA,CAAA,GAAO,OAAA;EAIL,OAAA,CAAA,GAAO,OAAA;EAUb,UAAA,CAAA;EAUA,WAAA,CAAY,OAAA,UAAiB,OAAA,GAAU,qBAAA,GAAqB,OAAA,QAAA,SAAA,CAAA,sBAAA;EAI5D,iBAAA,CAAkB,OAAA,UAAiB,OAAA,GAAU,qBAAA,GAAqB,OAAA,QAAA,SAAA,CAAA,sBAAA;EAWlE,MAAA,GAAM,cAAA,EAE6B,QAAA,EAAQ,eAAA,EAAmB,QAAA,EAAQ,OAAA,GAAY,yBAAA,KAAyB,OAAA;EAArG,YAAA,CAAa,cAAA,EAAgB,QAAA,EAAU,eAAA,EAAiB,QAAA,EAAU,OAAA,GAAU,yBAAA,GAAyB,OAAA;EASrG,OAAA,CACF,SAAA,EAAW,QAAA,EACX,UAAA,EAAY,QAAA,EACZ,SAAA,GAAY,QAAA,CAAS,WAAA,GACrB,eAAA,GAAkB,QAAA,CAAS,eAAA,IAAgB,OAAA;EAW/C,WAAA,CAAA;EAIM,KAAA,CAAM,IAAA,EAAM,QAAA,GAAQ,OAAA;EAU1B,MAAA,GAAM,cAAA,EAE6B,QAAA,EAAQ,eAAA,EAAmB,QAAA,EAAQ,OAAA,GAAY,yBAAA,KAAyB,OAAA;EAArG,YAAA,CAAa,cAAA,EAAgB,QAAA,EAAU,eAAA,EAAiB,QAAA,EAAU,OAAA,GAAU,yBAAA,GAAyB,OAAA;EASrG,OAAA,CACF,SAAA,EAAW,QAAA,EACX,UAAA,EAAY,QAAA,EACZ,SAAA,GAAY,QAAA,CAAS,WAAA,GACrB,eAAA,GAAkB,QAAA,CAAS,eAAA,IAAgB,OAAA;EAWzC,QAAA,CAAS,KAAA;IAAS,KAAA,EAAO,QAAA;IAAU,MAAA,EAAQ,QAAA;EAAA,KAAc,OAAA,GAAU,kBAAA,GAAkB,OAAA;EAe3F,cAAA,CAAe,KAAA,eAAoB,qCAAA;AAAA"}
1
+ {"version":3,"file":"ssh-client.d.ts","names":[],"sources":["../../src/classes/ssh-client.ts"],"mappings":";;;;;;;cAkBM,qCAAA;EAAA;;;;;;;;;;cAYO,SAAA;EAAA;cAMG,IAAA,UAAc,QAAA,UAAkB,QAAA,UAAkB,IAAA,WAAmB,aAAA,GAAgB,MAAA;EAAA,IAc7F,OAAA,CAAA,GAAO,OAAA;EAIL,OAAA,CAAA,GAAO,OAAA;EAUb,UAAA,CAAA;EAUA,WAAA,CAAY,OAAA,UAAiB,OAAA,GAAU,qBAAA,GAAqB,OAAA,QAAA,WAAA,CAAA,sBAAA;EAI5D,iBAAA,CAAkB,OAAA,UAAiB,OAAA,GAAU,qBAAA,GAAqB,OAAA,QAAA,WAAA,CAAA,sBAAA;EAWlE,MAAA,GAAM,cAAA,EAE6B,QAAA,EAAQ,eAAA,EAAmB,QAAA,EAAQ,OAAA,GAAY,yBAAA,KAAyB,OAAA;EAArG,YAAA,CAAa,cAAA,EAAgB,QAAA,EAAU,eAAA,EAAiB,QAAA,EAAU,OAAA,GAAU,yBAAA,GAAyB,OAAA;EASrG,OAAA,CACF,SAAA,EAAW,QAAA,EACX,UAAA,EAAY,QAAA,EACZ,SAAA,GAAY,QAAA,CAAS,WAAA,GACrB,eAAA,GAAkB,QAAA,CAAS,eAAA,IAAgB,OAAA;EAW/C,WAAA,CAAA;EAIM,KAAA,CAAM,IAAA,EAAM,QAAA,GAAQ,OAAA;EAU1B,MAAA,GAAM,cAAA,EAE6B,QAAA,EAAQ,eAAA,EAAmB,QAAA,EAAQ,OAAA,GAAY,yBAAA,KAAyB,OAAA;EAArG,YAAA,CAAa,cAAA,EAAgB,QAAA,EAAU,eAAA,EAAiB,QAAA,EAAU,OAAA,GAAU,yBAAA,GAAyB,OAAA;EASrG,OAAA,CACF,SAAA,EAAW,QAAA,EACX,UAAA,EAAY,QAAA,EACZ,SAAA,GAAY,QAAA,CAAS,WAAA,GACrB,eAAA,GAAkB,QAAA,CAAS,eAAA,IAAgB,OAAA;EAWzC,QAAA,CAAS,KAAA;IAAS,KAAA,EAAO,QAAA;IAAU,MAAA,EAAQ,QAAA;EAAA,KAAc,OAAA,GAAU,kBAAA,GAAkB,OAAA;EAe3F,cAAA,CAAe,KAAA,eAAoB,qCAAA;AAAA"}
@@ -1,6 +1,5 @@
1
1
  import { createConsola } from "consola";
2
2
  import { NodeSSH } from "node-ssh";
3
-
4
3
  //#region src/classes/ssh-client.ts
5
4
  const loggerLevelStringToConsolaLogLevelMap = {
6
5
  debug: 4,
@@ -125,7 +124,7 @@ var SshClient = class {
125
124
  this.#logger.level = loggerLevelStringToConsolaLogLevelMap[level];
126
125
  }
127
126
  };
128
-
129
127
  //#endregion
130
128
  export { SshClient };
129
+
131
130
  //# sourceMappingURL=ssh-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-client.js","names":["#connectConfig","#logger","#nodeSsh"],"sources":["../../src/classes/ssh-client.ts"],"sourcesContent":["import { createConsola } from 'consola';\nimport type { ConsolaInstance } from 'consola';\nimport { NodeSSH } from 'node-ssh';\nimport type {\n Config,\n SSHExecCommandOptions,\n SSHGetPutDirectoryOptions,\n SSHPutFilesOptions,\n} from 'node-ssh';\nimport type {\n SFTPWrapper,\n TransferOptions,\n} from 'ssh2';\n\nimport type { Nullable } from '../types';\n\nimport type { PathLike } from './path';\n\nconst loggerLevelStringToConsolaLogLevelMap = {\n debug: 4,\n error: 0,\n fatal: 0,\n info: 3,\n normal: 2,\n silent: -999,\n trace: 5,\n verbose: 999,\n warn: 1,\n} as const;\n\nexport class SshClient {\n readonly #connectConfig: Config;\n readonly #logger: ConsolaInstance;\n\n #nodeSsh: NodeSSH;\n\n constructor(host: string, username: string, password: string, port: number = 22, connectConfig?: Config) {\n this.#connectConfig = {\n ...connectConfig,\n host,\n password,\n port,\n username,\n };\n\n this.#logger = createConsola();\n this.#nodeSsh = new NodeSSH();\n if (process.env.NODE_ENV === 'production') this.setLoggerLevel('error');\n }\n\n get nodeSsh() {\n return this.#nodeSsh;\n }\n\n async connect() {\n try {\n this.#nodeSsh = await this.#nodeSsh.connect(this.#connectConfig);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n disconnect() {\n try {\n this.#nodeSsh.dispose();\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n execCommand(command: string, options?: SSHExecCommandOptions) {\n return this.#nodeSsh.execCommand(command, options).catch(() => {});\n }\n\n execCommandWithIo(command: string, options?: SSHExecCommandOptions) {\n return this.execCommand(\n command,\n {\n ...options,\n onStderr: (data) => process.stderr.write(data.toString()),\n onStdout: (data) => process.stdout.write(data.toString()),\n },\n );\n }\n\n getDir = this.getDirectory;\n\n async getDirectory(localDirectory: PathLike, remoteDirectory: PathLike, options?: SSHGetPutDirectoryOptions) {\n try {\n return await this.#nodeSsh.getDirectory(localDirectory.toString(), remoteDirectory.toString(), options);\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n async getFile(\n localFile: PathLike,\n remoteFile: PathLike,\n givenSftp?: Nullable<SFTPWrapper>,\n transferOptions?: Nullable<TransferOptions>,\n ) {\n try {\n await this.#nodeSsh.getFile(localFile.toString(), remoteFile.toString(), givenSftp, transferOptions);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n isConnected() {\n return this.#nodeSsh.isConnected();\n }\n\n async mkdir(path: PathLike) {\n try {\n await this.#nodeSsh.mkdir(path.toString());\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n putDir = this.putDirectory;\n\n async putDirectory(localDirectory: PathLike, remoteDirectory: PathLike, options?: SSHGetPutDirectoryOptions) {\n try {\n return await this.#nodeSsh.putDirectory(localDirectory.toString(), remoteDirectory.toString(), options);\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n async putFile(\n localFile: PathLike,\n remoteFile: PathLike,\n givenSftp?: Nullable<SFTPWrapper>,\n transferOptions?: Nullable<TransferOptions>,\n ) {\n try {\n await this.#nodeSsh.putFile(localFile.toString(), remoteFile.toString(), givenSftp, transferOptions);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n async putFiles(files: { local: PathLike; remote: PathLike }[], options?: SSHPutFilesOptions) {\n try {\n const convertedFiles = files.map(({ local, remote }) => ({\n local: local.toString(),\n remote: remote.toString(),\n }));\n\n await this.#nodeSsh.putFiles(convertedFiles, options);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n setLoggerLevel(level: keyof typeof loggerLevelStringToConsolaLogLevelMap) {\n this.#logger.level = loggerLevelStringToConsolaLogLevelMap[level];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ssh-client.js","names":["#connectConfig","#logger","#nodeSsh"],"sources":["../../src/classes/ssh-client.ts"],"sourcesContent":["import { createConsola } from 'consola';\nimport type { ConsolaInstance } from 'consola';\nimport { NodeSSH } from 'node-ssh';\nimport type {\n Config,\n SSHExecCommandOptions,\n SSHGetPutDirectoryOptions,\n SSHPutFilesOptions,\n} from 'node-ssh';\nimport type {\n SFTPWrapper,\n TransferOptions,\n} from 'ssh2';\n\nimport type { Nullable } from '../types';\n\nimport type { PathLike } from './path';\n\nconst loggerLevelStringToConsolaLogLevelMap = {\n debug: 4,\n error: 0,\n fatal: 0,\n info: 3,\n normal: 2,\n silent: -999,\n trace: 5,\n verbose: 999,\n warn: 1,\n} as const;\n\nexport class SshClient {\n readonly #connectConfig: Config;\n readonly #logger: ConsolaInstance;\n\n #nodeSsh: NodeSSH;\n\n constructor(host: string, username: string, password: string, port: number = 22, connectConfig?: Config) {\n this.#connectConfig = {\n ...connectConfig,\n host,\n password,\n port,\n username,\n };\n\n this.#logger = createConsola();\n this.#nodeSsh = new NodeSSH();\n if (process.env.NODE_ENV === 'production') this.setLoggerLevel('error');\n }\n\n get nodeSsh() {\n return this.#nodeSsh;\n }\n\n async connect() {\n try {\n this.#nodeSsh = await this.#nodeSsh.connect(this.#connectConfig);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n disconnect() {\n try {\n this.#nodeSsh.dispose();\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n execCommand(command: string, options?: SSHExecCommandOptions) {\n return this.#nodeSsh.execCommand(command, options).catch(() => {});\n }\n\n execCommandWithIo(command: string, options?: SSHExecCommandOptions) {\n return this.execCommand(\n command,\n {\n ...options,\n onStderr: (data) => process.stderr.write(data.toString()),\n onStdout: (data) => process.stdout.write(data.toString()),\n },\n );\n }\n\n getDir = this.getDirectory;\n\n async getDirectory(localDirectory: PathLike, remoteDirectory: PathLike, options?: SSHGetPutDirectoryOptions) {\n try {\n return await this.#nodeSsh.getDirectory(localDirectory.toString(), remoteDirectory.toString(), options);\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n async getFile(\n localFile: PathLike,\n remoteFile: PathLike,\n givenSftp?: Nullable<SFTPWrapper>,\n transferOptions?: Nullable<TransferOptions>,\n ) {\n try {\n await this.#nodeSsh.getFile(localFile.toString(), remoteFile.toString(), givenSftp, transferOptions);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n isConnected() {\n return this.#nodeSsh.isConnected();\n }\n\n async mkdir(path: PathLike) {\n try {\n await this.#nodeSsh.mkdir(path.toString());\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n putDir = this.putDirectory;\n\n async putDirectory(localDirectory: PathLike, remoteDirectory: PathLike, options?: SSHGetPutDirectoryOptions) {\n try {\n return await this.#nodeSsh.putDirectory(localDirectory.toString(), remoteDirectory.toString(), options);\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n async putFile(\n localFile: PathLike,\n remoteFile: PathLike,\n givenSftp?: Nullable<SFTPWrapper>,\n transferOptions?: Nullable<TransferOptions>,\n ) {\n try {\n await this.#nodeSsh.putFile(localFile.toString(), remoteFile.toString(), givenSftp, transferOptions);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n async putFiles(files: { local: PathLike; remote: PathLike }[], options?: SSHPutFilesOptions) {\n try {\n const convertedFiles = files.map(({ local, remote }) => ({\n local: local.toString(),\n remote: remote.toString(),\n }));\n\n await this.#nodeSsh.putFiles(convertedFiles, options);\n return true;\n } catch (error) {\n this.#logger.error(error);\n return false;\n }\n }\n\n setLoggerLevel(level: keyof typeof loggerLevelStringToConsolaLogLevelMap) {\n this.#logger.level = loggerLevelStringToConsolaLogLevelMap[level];\n }\n}\n"],"mappings":";;;AAkBA,MAAM,wCAAwC;CAC1C,OAAO;CACP,OAAO;CACP,OAAO;CACP,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,SAAS;CACT,MAAM;CACT;AAED,IAAa,YAAb,MAAuB;CACnB;CACA;CAEA;CAEA,YAAY,MAAc,UAAkB,UAAkB,OAAe,IAAI,eAAwB;AACrG,QAAA,gBAAsB;GAClB,GAAG;GACH;GACA;GACA;GACA;GACH;AAED,QAAA,SAAe,eAAe;AAC9B,QAAA,UAAgB,IAAI,SAAS;AAC7B,MAAI,QAAQ,IAAI,aAAa,aAAc,MAAK,eAAe,QAAQ;;CAG3E,IAAI,UAAU;AACV,SAAO,MAAA;;CAGX,MAAM,UAAU;AACZ,MAAI;AACA,SAAA,UAAgB,MAAM,MAAA,QAAc,QAAQ,MAAA,cAAoB;AAChE,UAAO;WACF,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,aAAa;AACT,MAAI;AACA,SAAA,QAAc,SAAS;AACvB,UAAO;WACF,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,YAAY,SAAiB,SAAiC;AAC1D,SAAO,MAAA,QAAc,YAAY,SAAS,QAAQ,CAAC,YAAY,GAAG;;CAGtE,kBAAkB,SAAiB,SAAiC;AAChE,SAAO,KAAK,YACR,SACA;GACI,GAAG;GACH,WAAW,SAAS,QAAQ,OAAO,MAAM,KAAK,UAAU,CAAC;GACzD,WAAW,SAAS,QAAQ,OAAO,MAAM,KAAK,UAAU,CAAC;GAC5D,CACJ;;CAGL,SAAS,KAAK;CAEd,MAAM,aAAa,gBAA0B,iBAA2B,SAAqC;AACzG,MAAI;AACA,UAAO,MAAM,MAAA,QAAc,aAAa,eAAe,UAAU,EAAE,gBAAgB,UAAU,EAAE,QAAQ;WAClG,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,MAAM,QACF,WACA,YACA,WACA,iBACF;AACE,MAAI;AACA,SAAM,MAAA,QAAc,QAAQ,UAAU,UAAU,EAAE,WAAW,UAAU,EAAE,WAAW,gBAAgB;AACpG,UAAO;WACF,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,cAAc;AACV,SAAO,MAAA,QAAc,aAAa;;CAGtC,MAAM,MAAM,MAAgB;AACxB,MAAI;AACA,SAAM,MAAA,QAAc,MAAM,KAAK,UAAU,CAAC;AAC1C,UAAO;WACF,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,SAAS,KAAK;CAEd,MAAM,aAAa,gBAA0B,iBAA2B,SAAqC;AACzG,MAAI;AACA,UAAO,MAAM,MAAA,QAAc,aAAa,eAAe,UAAU,EAAE,gBAAgB,UAAU,EAAE,QAAQ;WAClG,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,MAAM,QACF,WACA,YACA,WACA,iBACF;AACE,MAAI;AACA,SAAM,MAAA,QAAc,QAAQ,UAAU,UAAU,EAAE,WAAW,UAAU,EAAE,WAAW,gBAAgB;AACpG,UAAO;WACF,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,MAAM,SAAS,OAAgD,SAA8B;AACzF,MAAI;GACA,MAAM,iBAAiB,MAAM,KAAK,EAAE,OAAO,cAAc;IACrD,OAAO,MAAM,UAAU;IACvB,QAAQ,OAAO,UAAU;IAC5B,EAAE;AAEH,SAAM,MAAA,QAAc,SAAS,gBAAgB,QAAQ;AACrD,UAAO;WACF,OAAO;AACZ,SAAA,OAAa,MAAM,MAAM;AACzB,UAAO;;;CAIf,eAAe,OAA2D;AACtE,QAAA,OAAa,QAAQ,sCAAsC"}
package/dist/clipboard.js CHANGED
@@ -80,7 +80,7 @@ async function copyTextToClipboard(text) {
80
80
  };
81
81
  }
82
82
  }
83
-
84
83
  //#endregion
85
84
  export { copyBlobToClipboard, copyTextToClipboard };
85
+
86
86
  //# sourceMappingURL=clipboard.js.map
package/dist/consola.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as consola from "consola";
1
+ import * as _$consola from "consola";
2
2
 
3
3
  //#region src/consola.d.ts
4
4
  /**
@@ -22,8 +22,8 @@ import * as consola from "consola";
22
22
  * logger.level = 3;
23
23
  * ```
24
24
  */
25
- declare const consolaLogger: consola.ConsolaInstance;
26
- declare const logger: consola.ConsolaInstance;
25
+ declare const consolaLogger: _$consola.ConsolaInstance;
26
+ declare const logger: _$consola.ConsolaInstance;
27
27
  //#endregion
28
28
  export { consolaLogger, logger };
29
29
  //# sourceMappingURL=consola.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consola.d.ts","names":[],"sources":["../src/consola.ts"],"mappings":";;;;;;AAuBA;;;;;AACA;;;;;;;;;;;;;cADa,aAAA,EAA+B,OAAA,CAAlB,eAAA;AAAA,cACb,MAAA,EAAsB,OAAA,CAAhB,eAAA"}
1
+ {"version":3,"file":"consola.d.ts","names":[],"sources":["../src/consola.ts"],"mappings":";;;;;;AAuBA;;;;;AACA;;;;;;;;;;;;;cADa,aAAA,EAA+B,SAAA,CAAlB,eAAA;AAAA,cACb,MAAA,EAAsB,SAAA,CAAhB,eAAA"}
package/dist/consola.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { createConsola } from "consola";
2
-
3
2
  //#region src/consola.ts
4
3
  /**
5
4
  * A consola logger instance.
@@ -26,7 +25,7 @@ const consolaLogger = createConsola();
26
25
  const logger = consolaLogger;
27
26
  if (process.env.CONSOLA_LOGGER_LEVEL !== void 0) consolaLogger.level = +process.env.CONSOLA_LOGGER_LEVEL;
28
27
  else consolaLogger.level = process.env.NODE_ENV === "production" ? 0 : consolaLogger.level;
29
-
30
28
  //#endregion
31
29
  export { consolaLogger, logger };
30
+
32
31
  //# sourceMappingURL=consola.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consola.js","names":[],"sources":["../src/consola.ts"],"sourcesContent":["import { createConsola } from 'consola';\n\n/**\n * A consola logger instance.\n *\n * The logger's level is determined based on the `CONSOLA_LOGGER_LEVEL` and `NODE_ENV` environment variables.\n * If `CONSOLA_LOGGER_LEVEL` is set, it will be used; otherwise, if `NODE_ENV` is `production`,\n * the level will be set to `0`.\n *\n * To manually change the level, assign the desired level to `logger.level`.\n *\n * See available levels [here](https://github.com/unjs/consola?tab=readme-ov-file#log-level).\n *\n * @example\n * ```typescript\n * import { logger } from '@kikiutils/shared/consola';\n *\n * logger.info('test'); // ℹ test 3:56:30 AM\n *\n * // Manually change the level\n * logger.level = 3;\n * ```\n */\nexport const consolaLogger = createConsola();\nexport const logger = consolaLogger;\nif (process.env.CONSOLA_LOGGER_LEVEL !== undefined) consolaLogger.level = +process.env.CONSOLA_LOGGER_LEVEL;\nelse consolaLogger.level = process.env.NODE_ENV === 'production' ? 0 : consolaLogger.level;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,gBAAgB,eAAe;AAC5C,MAAa,SAAS;AACtB,IAAI,QAAQ,IAAI,yBAAyB,OAAW,eAAc,QAAQ,CAAC,QAAQ,IAAI;IAClF,eAAc,QAAQ,QAAQ,IAAI,aAAa,eAAe,IAAI,cAAc"}
1
+ {"version":3,"file":"consola.js","names":[],"sources":["../src/consola.ts"],"sourcesContent":["import { createConsola } from 'consola';\n\n/**\n * A consola logger instance.\n *\n * The logger's level is determined based on the `CONSOLA_LOGGER_LEVEL` and `NODE_ENV` environment variables.\n * If `CONSOLA_LOGGER_LEVEL` is set, it will be used; otherwise, if `NODE_ENV` is `production`,\n * the level will be set to `0`.\n *\n * To manually change the level, assign the desired level to `logger.level`.\n *\n * See available levels [here](https://github.com/unjs/consola?tab=readme-ov-file#log-level).\n *\n * @example\n * ```typescript\n * import { logger } from '@kikiutils/shared/consola';\n *\n * logger.info('test'); // ℹ test 3:56:30 AM\n *\n * // Manually change the level\n * logger.level = 3;\n * ```\n */\nexport const consolaLogger = createConsola();\nexport const logger = consolaLogger;\nif (process.env.CONSOLA_LOGGER_LEVEL !== undefined) consolaLogger.level = +process.env.CONSOLA_LOGGER_LEVEL;\nelse consolaLogger.level = process.env.NODE_ENV === 'production' ? 0 : consolaLogger.level;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,gBAAgB,eAAe;AAC5C,MAAa,SAAS;AACtB,IAAI,QAAQ,IAAI,yBAAyB,KAAA,EAAW,eAAc,QAAQ,CAAC,QAAQ,IAAI;IAClF,eAAc,QAAQ,QAAQ,IAAI,aAAa,eAAe,IAAI,cAAc"}
@@ -1,5 +1,4 @@
1
1
  import { createHash } from "node:crypto";
2
-
3
2
  //#region src/crypto-hash.ts
4
3
  /**
5
4
  * This file provides a set of functions for creating hash digests using different algorithms and bit lengths.
@@ -46,7 +45,7 @@ function cryptoSha3512(data, outputEncoding = "hex") {
46
45
  function cryptoSha3512ToBuffer(data) {
47
46
  return createHash("sha3-512").update(data).digest();
48
47
  }
49
-
50
48
  //#endregion
51
49
  export { cryptoMd5, cryptoMd5ToBuffer, cryptoSha3224, cryptoSha3224ToBuffer, cryptoSha3256, cryptoSha3256ToBuffer, cryptoSha3384, cryptoSha3384ToBuffer, cryptoSha3512, cryptoSha3512ToBuffer };
50
+
52
51
  //# sourceMappingURL=crypto-hash.js.map
@@ -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":["/**\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"}
package/dist/datetime.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { endOfDay, endOfMonth, endOfWeek, format, startOfDay, startOfMonth, startOfWeek, subDays, subMonths, subWeeks } from "date-fns";
2
-
3
2
  //#region src/datetime.ts
4
3
  /**
5
4
  * Formats a given date, timestamp, or date string into a specified format.
@@ -125,7 +124,7 @@ function getMidnightDateFromToday(offsetDays = 0) {
125
124
  date.setHours(0, 0, 0, 0);
126
125
  return date;
127
126
  }
128
-
129
127
  //#endregion
130
128
  export { formatDate, getDateRangeFromDate, getMidnightDateFromToday };
129
+
131
130
  //# sourceMappingURL=datetime.js.map
@@ -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 *\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"}
@@ -31,7 +31,7 @@ function createElFormItemRuleWithDefaults(message, options = {}) {
31
31
  type: options.type ?? "string"
32
32
  };
33
33
  }
34
-
35
34
  //#endregion
36
35
  export { createElFormItemRuleWithDefaults };
36
+
37
37
  //# sourceMappingURL=element-plus.js.map
package/dist/enum.js CHANGED
@@ -102,7 +102,7 @@ function getEnumValues(enumObject) {
102
102
  if (!values.some((value) => typeof value === "number")) return values;
103
103
  return Object.keys(enumObject).filter((key) => Number.isNaN(Number(key))).map((key) => enumObject[key]);
104
104
  }
105
-
106
105
  //#endregion
107
106
  export { getEnumNumberValues, getEnumStringValues, getEnumValues };
107
+
108
108
  //# sourceMappingURL=enum.js.map
package/dist/env.js CHANGED
@@ -45,7 +45,7 @@ function checkAndGetEnvValue(key) {
45
45
  if (process.env[key] === void 0) throw new EnvironmentNotFoundError(key);
46
46
  return process.env[key];
47
47
  }
48
-
49
48
  //#endregion
50
49
  export { EnvironmentNotFoundError, checkAndGetEnvValue };
50
+
51
51
  //# sourceMappingURL=env.js.map
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,AAAS;;;;;;CAOT,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,OAAW,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 * 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"}
@@ -123,7 +123,7 @@ var EventAwaiter = class {
123
123
  return this.wait(key, timeoutMs, "override", signal);
124
124
  }
125
125
  };
126
-
127
126
  //#endregion
128
127
  export { EventAwaiter };
128
+
129
129
  //# sourceMappingURL=event-awaiter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-awaiter.js","names":["#promiseResolvers"],"sources":["../src/event-awaiter.ts"],"sourcesContent":["/**\n * EventAwaiter provides a mechanism to wait for events (by key) asynchronously.\n *\n * This class allows multiple consumers to `wait` for a specific key\n * and be resolved when `trigger` is called for that key, or automatically\n * resolved with `undefined` if a timeout occurs or an AbortSignal is triggered.\n *\n * Typical use cases include long-polling, request coordination,\n * or implementing event-driven primitives in applications or services.\n *\n * @template T - The type of value that will be resolved when the event is triggered\n */\nexport class EventAwaiter<T> {\n #promiseResolvers = new Map<string, ((value: PromiseLike<T | undefined> | T | undefined) => void)[]>();\n\n /**\n * Triggers all pending promises waiting for the given key.\n * Each promise will be resolved with the provided value.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {T | undefined} value - The value to resolve the awaiting promises with.\n * May be `undefined` to indicate no result or a timeout-like behavior.\n */\n trigger(key: string, value: T | undefined) {\n const resolvers = this.#promiseResolvers.get(key);\n if (resolvers) {\n this.#promiseResolvers.delete(key);\n resolvers?.forEach((resolve) => resolve(value));\n }\n }\n\n /**\n * Triggers and resolves all pending promises across all keys.\n *\n * This is typically used during shutdown or cleanup to ensure that\n * no consumer is left waiting indefinitely.\n *\n * @param {T | undefined} [value] - Optional value to resolve all waiters with.\n * Defaults to `undefined`, which usually indicates cancellation or shutdown.\n */\n triggerAll(value: T | undefined = undefined) {\n for (const [_, resolvers] of this.#promiseResolvers.entries()) resolvers.forEach((resolve) => resolve(value));\n this.#promiseResolvers.clear();\n }\n\n /**\n * Waits for an event associated with the given key.\n *\n * The returned promise will resolve when:\n * - `trigger(key)` is called, in which case it resolves with the provided value.\n * - The optional timeout is reached, in which case it resolves with `undefined`.\n * - The optional `AbortSignal` is aborted, in which case it resolves with `undefined`.\n *\n * Behavior when multiple waiters exist for the same key:\n * - Default (no mode): multiple waiters are allowed, all will be resolved when triggered.\n * - `strict` mode: throws an error if a waiter already exists for the given key.\n * - `override` mode: cancels all existing waiters (resolving them with `undefined`)\n * and only keeps the latest one.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {number} [timeoutMs] - Optional timeout (in milliseconds).\n * If reached, the promise resolves with `undefined`.\n * @param {'override' | 'strict'} [mode] - Optional behavior mode for handling multiple waiters\n * @param {AbortSignal} [signal] - Optional AbortSignal. If aborted, the promise resolves with `undefined`\n *\n * @returns {Promise<T | undefined>} A promise that resolves with the triggered value,\n * or `undefined` if timeout or abort occurs\n */\n wait(key: string, timeoutMs?: number, mode?: 'override' | 'strict', signal?: AbortSignal) {\n return new Promise<T | undefined>((resolve) => {\n const resolvers = this.#promiseResolvers.get(key) || [];\n if (resolvers.length) {\n switch (mode) {\n case 'override':\n resolvers.forEach((r) => r(undefined));\n resolvers.length = 0;\n break;\n case 'strict':\n throw new Error(`Duplicate wait detected for key: ${key}`);\n }\n }\n\n resolvers.push(resolve);\n this.#promiseResolvers.set(key, resolvers);\n if (timeoutMs) {\n setTimeout(\n () => {\n const resolvers = this.#promiseResolvers.get(key);\n if (resolvers?.includes(resolve)) {\n resolve(undefined);\n const newResolvers = resolvers.filter((r) => r !== resolve);\n if (newResolvers.length) this.#promiseResolvers.set(key, newResolvers);\n else this.#promiseResolvers.delete(key);\n }\n },\n timeoutMs,\n );\n }\n\n if (signal) {\n signal.addEventListener(\n 'abort',\n () => {\n const resolvers = this.#promiseResolvers.get(key);\n if (resolvers?.includes(resolve)) {\n resolve(undefined);\n const newResolvers = resolvers.filter((r) => r !== resolve);\n if (newResolvers.length) this.#promiseResolvers.set(key, newResolvers);\n else this.#promiseResolvers.delete(key);\n }\n },\n { once: true },\n );\n }\n });\n }\n\n /**\n * Waits for an event in strict mode.\n * Only one waiter is allowed per key. If another waiter already exists,\n * this method will throw an error.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {number} [timeoutMs] - Optional timeout (in milliseconds).\n * If reached, the promise resolves with `undefined`.\n * @param {AbortSignal} [signal] - Optional AbortSignal. If aborted, the promise resolves with `undefined`\n */\n waitExclusive(key: string, timeoutMs?: number, signal?: AbortSignal) {\n return this.wait(key, timeoutMs, 'strict', signal);\n }\n\n /**\n * Waits for an event in override mode.\n * If another waiter already exists for the given key, it will be canceled\n * (resolved with `undefined`) and replaced by the new waiter.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {number} [timeoutMs] - Optional timeout (in milliseconds).\n * If reached, the promise resolves with `undefined`.\n * @param {AbortSignal} [signal] - Optional AbortSignal. If aborted, the promise resolves with `undefined`\n */\n waitLatest(key: string, timeoutMs?: number, signal?: AbortSignal) {\n return this.wait(key, timeoutMs, 'override', signal);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAa,eAAb,MAA6B;CACzB,oCAAoB,IAAI,KAA8E;;;;;;;;;CAUtG,QAAQ,KAAa,OAAsB;EACvC,MAAM,YAAY,MAAKA,iBAAkB,IAAI,IAAI;AACjD,MAAI,WAAW;AACX,SAAKA,iBAAkB,OAAO,IAAI;AAClC,cAAW,SAAS,YAAY,QAAQ,MAAM,CAAC;;;;;;;;;;;;CAavD,WAAW,QAAuB,QAAW;AACzC,OAAK,MAAM,CAAC,GAAG,cAAc,MAAKA,iBAAkB,SAAS,CAAE,WAAU,SAAS,YAAY,QAAQ,MAAM,CAAC;AAC7G,QAAKA,iBAAkB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CA0BlC,KAAK,KAAa,WAAoB,MAA8B,QAAsB;AACtF,SAAO,IAAI,SAAwB,YAAY;GAC3C,MAAM,YAAY,MAAKA,iBAAkB,IAAI,IAAI,IAAI,EAAE;AACvD,OAAI,UAAU,OACV,SAAQ,MAAR;IACI,KAAK;AACD,eAAU,SAAS,MAAM,EAAE,OAAU,CAAC;AACtC,eAAU,SAAS;AACnB;IACJ,KAAK,SACD,OAAM,IAAI,MAAM,oCAAoC,MAAM;;AAItE,aAAU,KAAK,QAAQ;AACvB,SAAKA,iBAAkB,IAAI,KAAK,UAAU;AAC1C,OAAI,UACA,kBACU;IACF,MAAM,YAAY,MAAKA,iBAAkB,IAAI,IAAI;AACjD,QAAI,WAAW,SAAS,QAAQ,EAAE;AAC9B,aAAQ,OAAU;KAClB,MAAM,eAAe,UAAU,QAAQ,MAAM,MAAM,QAAQ;AAC3D,SAAI,aAAa,OAAQ,OAAKA,iBAAkB,IAAI,KAAK,aAAa;SACjE,OAAKA,iBAAkB,OAAO,IAAI;;MAG/C,UACH;AAGL,OAAI,OACA,QAAO,iBACH,eACM;IACF,MAAM,YAAY,MAAKA,iBAAkB,IAAI,IAAI;AACjD,QAAI,WAAW,SAAS,QAAQ,EAAE;AAC9B,aAAQ,OAAU;KAClB,MAAM,eAAe,UAAU,QAAQ,MAAM,MAAM,QAAQ;AAC3D,SAAI,aAAa,OAAQ,OAAKA,iBAAkB,IAAI,KAAK,aAAa;SACjE,OAAKA,iBAAkB,OAAO,IAAI;;MAG/C,EAAE,MAAM,MAAM,CACjB;IAEP;;;;;;;;;;;;CAaN,cAAc,KAAa,WAAoB,QAAsB;AACjE,SAAO,KAAK,KAAK,KAAK,WAAW,UAAU,OAAO;;;;;;;;;;;;CAatD,WAAW,KAAa,WAAoB,QAAsB;AAC9D,SAAO,KAAK,KAAK,KAAK,WAAW,YAAY,OAAO"}
1
+ {"version":3,"file":"event-awaiter.js","names":["#promiseResolvers"],"sources":["../src/event-awaiter.ts"],"sourcesContent":["/**\n * EventAwaiter provides a mechanism to wait for events (by key) asynchronously.\n *\n * This class allows multiple consumers to `wait` for a specific key\n * and be resolved when `trigger` is called for that key, or automatically\n * resolved with `undefined` if a timeout occurs or an AbortSignal is triggered.\n *\n * Typical use cases include long-polling, request coordination,\n * or implementing event-driven primitives in applications or services.\n *\n * @template T - The type of value that will be resolved when the event is triggered\n */\nexport class EventAwaiter<T> {\n #promiseResolvers = new Map<string, ((value: PromiseLike<T | undefined> | T | undefined) => void)[]>();\n\n /**\n * Triggers all pending promises waiting for the given key.\n * Each promise will be resolved with the provided value.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {T | undefined} value - The value to resolve the awaiting promises with.\n * May be `undefined` to indicate no result or a timeout-like behavior.\n */\n trigger(key: string, value: T | undefined) {\n const resolvers = this.#promiseResolvers.get(key);\n if (resolvers) {\n this.#promiseResolvers.delete(key);\n resolvers?.forEach((resolve) => resolve(value));\n }\n }\n\n /**\n * Triggers and resolves all pending promises across all keys.\n *\n * This is typically used during shutdown or cleanup to ensure that\n * no consumer is left waiting indefinitely.\n *\n * @param {T | undefined} [value] - Optional value to resolve all waiters with.\n * Defaults to `undefined`, which usually indicates cancellation or shutdown.\n */\n triggerAll(value: T | undefined = undefined) {\n for (const [_, resolvers] of this.#promiseResolvers.entries()) resolvers.forEach((resolve) => resolve(value));\n this.#promiseResolvers.clear();\n }\n\n /**\n * Waits for an event associated with the given key.\n *\n * The returned promise will resolve when:\n * - `trigger(key)` is called, in which case it resolves with the provided value.\n * - The optional timeout is reached, in which case it resolves with `undefined`.\n * - The optional `AbortSignal` is aborted, in which case it resolves with `undefined`.\n *\n * Behavior when multiple waiters exist for the same key:\n * - Default (no mode): multiple waiters are allowed, all will be resolved when triggered.\n * - `strict` mode: throws an error if a waiter already exists for the given key.\n * - `override` mode: cancels all existing waiters (resolving them with `undefined`)\n * and only keeps the latest one.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {number} [timeoutMs] - Optional timeout (in milliseconds).\n * If reached, the promise resolves with `undefined`.\n * @param {'override' | 'strict'} [mode] - Optional behavior mode for handling multiple waiters\n * @param {AbortSignal} [signal] - Optional AbortSignal. If aborted, the promise resolves with `undefined`\n *\n * @returns {Promise<T | undefined>} A promise that resolves with the triggered value,\n * or `undefined` if timeout or abort occurs\n */\n wait(key: string, timeoutMs?: number, mode?: 'override' | 'strict', signal?: AbortSignal) {\n return new Promise<T | undefined>((resolve) => {\n const resolvers = this.#promiseResolvers.get(key) || [];\n if (resolvers.length) {\n switch (mode) {\n case 'override':\n resolvers.forEach((r) => r(undefined));\n resolvers.length = 0;\n break;\n case 'strict':\n throw new Error(`Duplicate wait detected for key: ${key}`);\n }\n }\n\n resolvers.push(resolve);\n this.#promiseResolvers.set(key, resolvers);\n if (timeoutMs) {\n setTimeout(\n () => {\n const resolvers = this.#promiseResolvers.get(key);\n if (resolvers?.includes(resolve)) {\n resolve(undefined);\n const newResolvers = resolvers.filter((r) => r !== resolve);\n if (newResolvers.length) this.#promiseResolvers.set(key, newResolvers);\n else this.#promiseResolvers.delete(key);\n }\n },\n timeoutMs,\n );\n }\n\n if (signal) {\n signal.addEventListener(\n 'abort',\n () => {\n const resolvers = this.#promiseResolvers.get(key);\n if (resolvers?.includes(resolve)) {\n resolve(undefined);\n const newResolvers = resolvers.filter((r) => r !== resolve);\n if (newResolvers.length) this.#promiseResolvers.set(key, newResolvers);\n else this.#promiseResolvers.delete(key);\n }\n },\n { once: true },\n );\n }\n });\n }\n\n /**\n * Waits for an event in strict mode.\n * Only one waiter is allowed per key. If another waiter already exists,\n * this method will throw an error.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {number} [timeoutMs] - Optional timeout (in milliseconds).\n * If reached, the promise resolves with `undefined`.\n * @param {AbortSignal} [signal] - Optional AbortSignal. If aborted, the promise resolves with `undefined`\n */\n waitExclusive(key: string, timeoutMs?: number, signal?: AbortSignal) {\n return this.wait(key, timeoutMs, 'strict', signal);\n }\n\n /**\n * Waits for an event in override mode.\n * If another waiter already exists for the given key, it will be canceled\n * (resolved with `undefined`) and replaced by the new waiter.\n *\n * @param {string} key - Identifier for the awaited event\n * @param {number} [timeoutMs] - Optional timeout (in milliseconds).\n * If reached, the promise resolves with `undefined`.\n * @param {AbortSignal} [signal] - Optional AbortSignal. If aborted, the promise resolves with `undefined`\n */\n waitLatest(key: string, timeoutMs?: number, signal?: AbortSignal) {\n return this.wait(key, timeoutMs, 'override', signal);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAa,eAAb,MAA6B;CACzB,oCAAoB,IAAI,KAA8E;;;;;;;;;CAUtG,QAAQ,KAAa,OAAsB;EACvC,MAAM,YAAY,MAAA,iBAAuB,IAAI,IAAI;AACjD,MAAI,WAAW;AACX,SAAA,iBAAuB,OAAO,IAAI;AAClC,cAAW,SAAS,YAAY,QAAQ,MAAM,CAAC;;;;;;;;;;;;CAavD,WAAW,QAAuB,KAAA,GAAW;AACzC,OAAK,MAAM,CAAC,GAAG,cAAc,MAAA,iBAAuB,SAAS,CAAE,WAAU,SAAS,YAAY,QAAQ,MAAM,CAAC;AAC7G,QAAA,iBAAuB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CA0BlC,KAAK,KAAa,WAAoB,MAA8B,QAAsB;AACtF,SAAO,IAAI,SAAwB,YAAY;GAC3C,MAAM,YAAY,MAAA,iBAAuB,IAAI,IAAI,IAAI,EAAE;AACvD,OAAI,UAAU,OACV,SAAQ,MAAR;IACI,KAAK;AACD,eAAU,SAAS,MAAM,EAAE,KAAA,EAAU,CAAC;AACtC,eAAU,SAAS;AACnB;IACJ,KAAK,SACD,OAAM,IAAI,MAAM,oCAAoC,MAAM;;AAItE,aAAU,KAAK,QAAQ;AACvB,SAAA,iBAAuB,IAAI,KAAK,UAAU;AAC1C,OAAI,UACA,kBACU;IACF,MAAM,YAAY,MAAA,iBAAuB,IAAI,IAAI;AACjD,QAAI,WAAW,SAAS,QAAQ,EAAE;AAC9B,aAAQ,KAAA,EAAU;KAClB,MAAM,eAAe,UAAU,QAAQ,MAAM,MAAM,QAAQ;AAC3D,SAAI,aAAa,OAAQ,OAAA,iBAAuB,IAAI,KAAK,aAAa;SACjE,OAAA,iBAAuB,OAAO,IAAI;;MAG/C,UACH;AAGL,OAAI,OACA,QAAO,iBACH,eACM;IACF,MAAM,YAAY,MAAA,iBAAuB,IAAI,IAAI;AACjD,QAAI,WAAW,SAAS,QAAQ,EAAE;AAC9B,aAAQ,KAAA,EAAU;KAClB,MAAM,eAAe,UAAU,QAAQ,MAAM,MAAM,QAAQ;AAC3D,SAAI,aAAa,OAAQ,OAAA,iBAAuB,IAAI,KAAK,aAAa;SACjE,OAAA,iBAAuB,OAAO,IAAI;;MAG/C,EAAE,MAAM,MAAM,CACjB;IAEP;;;;;;;;;;;;CAaN,cAAc,KAAa,WAAoB,QAAsB;AACjE,SAAO,KAAK,KAAK,KAAK,WAAW,UAAU,OAAO;;;;;;;;;;;;CAatD,WAAW,KAAa,WAAoB,QAAsB;AAC9D,SAAO,KAAK,KAAK,KAAK,WAAW,YAAY,OAAO"}
package/dist/general.js CHANGED
@@ -2,7 +2,7 @@
2
2
  function extractFirstValue(value, defaultValue) {
3
3
  return (Array.isArray(value) ? value[0] : value) ?? defaultValue;
4
4
  }
5
-
6
5
  //#endregion
7
6
  export { extractFirstValue };
7
+
8
8
  //# sourceMappingURL=general.js.map
package/dist/hash.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { sha3_224, sha3_256, sha3_384, sha3_512 } from "@noble/hashes/sha3.js";
2
2
  import { bytesToHex, utf8ToBytes } from "@noble/hashes/utils.js";
3
-
4
3
  //#region src/hash.ts
5
4
  /**
6
5
  * This file provides a set of functions for creating SHA-3 hash digests
@@ -27,7 +26,7 @@ function sha3384(data) {
27
26
  function sha3512(data) {
28
27
  return bytesToHex(sha3_512(typeof data === "string" ? utf8ToBytes(data) : data));
29
28
  }
30
-
31
29
  //#endregion
32
30
  export { sha3224, sha3256, sha3384, sha3512 };
31
+
33
32
  //# sourceMappingURL=hash.js.map
package/dist/hash.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","names":[],"sources":["../src/hash.ts"],"sourcesContent":["/**\n * This file provides a set of functions for creating SHA-3 hash digests\n * using different bit lengths (224, 256, 384, 512).\n * These functions use the [@noble/hashes](https://github.com/paulmillr/noble-hashes) library to generate the hashes.\n * Can be used in the browser, mainly for Nuxt/Vue and other frameworks compiled and executed in the browser.\n *\n * @example\n * ```typescript\n * import { sha3256 } from '@kikiutils/shared/hash';\n *\n * console.log(sha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80\n * ```\n */\n\nimport {\n sha3_224,\n sha3_256,\n sha3_384,\n sha3_512,\n} from '@noble/hashes/sha3.js';\nimport {\n bytesToHex,\n utf8ToBytes,\n} from '@noble/hashes/utils.js';\n\nexport function sha3224(data: string | Uint8Array) {\n return bytesToHex(sha3_224(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n\nexport function sha3256(data: string | Uint8Array) {\n return bytesToHex(sha3_256(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n\nexport function sha3384(data: string | Uint8Array) {\n return bytesToHex(sha3_384(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n\nexport function sha3512(data: string | Uint8Array) {\n return bytesToHex(sha3_512(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC;;AAGpF,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC;;AAGpF,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC;;AAGpF,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"hash.js","names":[],"sources":["../src/hash.ts"],"sourcesContent":["/**\n * This file provides a set of functions for creating SHA-3 hash digests\n * using different bit lengths (224, 256, 384, 512).\n * These functions use the [@noble/hashes](https://github.com/paulmillr/noble-hashes) library to generate the hashes.\n * Can be used in the browser, mainly for Nuxt/Vue and other frameworks compiled and executed in the browser.\n *\n * @example\n * ```typescript\n * import { sha3256 } from '@kikiutils/shared/hash';\n *\n * console.log(sha3256('test')); // 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80\n * ```\n */\n\nimport {\n sha3_224,\n sha3_256,\n sha3_384,\n sha3_512,\n} from '@noble/hashes/sha3.js';\nimport {\n bytesToHex,\n utf8ToBytes,\n} from '@noble/hashes/utils.js';\n\nexport function sha3224(data: string | Uint8Array) {\n return bytesToHex(sha3_224(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n\nexport function sha3256(data: string | Uint8Array) {\n return bytesToHex(sha3_256(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n\nexport function sha3384(data: string | Uint8Array) {\n return bytesToHex(sha3_384(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n\nexport function sha3512(data: string | Uint8Array) {\n return bytesToHex(sha3_512(typeof data === 'string' ? utf8ToBytes(data) : data));\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC;;AAGpF,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC;;AAGpF,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC;;AAGpF,SAAgB,QAAQ,MAA2B;AAC/C,QAAO,WAAW,SAAS,OAAO,SAAS,WAAW,YAAY,KAAK,GAAG,KAAK,CAAC"}
package/dist/math.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Decimal } from "decimal.js";
2
-
3
2
  //#region src/math.ts
4
3
  /**
5
4
  * Converts a fraction (numerator / denominator) into a percentage string.
@@ -30,7 +29,7 @@ function toPercentageString(molecular, denominator, options) {
30
29
  const result = calculationResult.isNaN() ? "0.00" : calculationResult.times(100).toFixed(options?.decimalPlaces ?? 2);
31
30
  return options?.withSymbol ?? true ? `${result}%` : result;
32
31
  }
33
-
34
32
  //#endregion
35
33
  export { toPercentageString };
34
+
36
35
  //# sourceMappingURL=math.js.map
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","names":[],"sources":["../src/math.ts"],"sourcesContent":["import { Decimal } from 'decimal.js';\n\ntype CalculableValue = Decimal.Value | { toString: () => string };\n\n/**\n * Options for configuring the output of `toPercentageString`.\n */\nexport interface ToPercentageStringOptions {\n /**\n * Number of decimal places to include in the result.\n *\n * @default 2\n */\n decimalPlaces?: number;\n\n /**\n * Whether to include the '%' symbol in the result.\n *\n * @default true\n */\n withSymbol?: boolean;\n}\n\n/**\n * Converts a fraction (numerator / denominator) into a percentage string.\n *\n * - Uses `decimal.js` for precise decimal calculations.\n * - Supports custom decimal places and optional percentage symbol.\n * - Returns `'0.00%'` if result is `NaN` or division is invalid.\n *\n * @param {CalculableValue} molecular - The numerator of the fraction\n * @param {CalculableValue} denominator - The denominator of the fraction\n * @param {ToPercentageStringOptions} [options] - Optional output settings\n *\n * @returns {string} Formatted percentage string\n *\n * @example\n * ```typescript\n * import { toPercentageString } from '@kikiutils/shared/math';\n *\n * console.log(toPercentageString(50, 200)); // 25.00%\n * console.log(toPercentageString(50, 200, { withSymbol: false })); // 25.00\n * console.log(toPercentageString(50, 200, { decimalPlaces: 1 })); // 25.0%\n * ```\n */\nexport function toPercentageString(\n molecular: CalculableValue,\n denominator: CalculableValue,\n options?: ToPercentageStringOptions,\n) {\n const molecularDecimal = new Decimal(molecular.toString());\n const denominatorDecimal = new Decimal(denominator.toString());\n const calculationResult = molecularDecimal.div(denominatorDecimal);\n const result = calculationResult.isNaN()\n ? '0.00'\n : calculationResult.times(100).toFixed(options?.decimalPlaces ?? 2);\n\n return options?.withSymbol ?? true ? `${result}%` : result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,mBACZ,WACA,aACA,SACF;CACE,MAAM,mBAAmB,IAAI,QAAQ,UAAU,UAAU,CAAC;CAC1D,MAAM,qBAAqB,IAAI,QAAQ,YAAY,UAAU,CAAC;CAC9D,MAAM,oBAAoB,iBAAiB,IAAI,mBAAmB;CAClE,MAAM,SAAS,kBAAkB,OAAO,GAClC,SACA,kBAAkB,MAAM,IAAI,CAAC,QAAQ,SAAS,iBAAiB,EAAE;AAEvE,QAAO,SAAS,cAAc,OAAO,GAAG,OAAO,KAAK"}
1
+ {"version":3,"file":"math.js","names":[],"sources":["../src/math.ts"],"sourcesContent":["import { Decimal } from 'decimal.js';\n\ntype CalculableValue = Decimal.Value | { toString: () => string };\n\n/**\n * Options for configuring the output of `toPercentageString`.\n */\nexport interface ToPercentageStringOptions {\n /**\n * Number of decimal places to include in the result.\n *\n * @default 2\n */\n decimalPlaces?: number;\n\n /**\n * Whether to include the '%' symbol in the result.\n *\n * @default true\n */\n withSymbol?: boolean;\n}\n\n/**\n * Converts a fraction (numerator / denominator) into a percentage string.\n *\n * - Uses `decimal.js` for precise decimal calculations.\n * - Supports custom decimal places and optional percentage symbol.\n * - Returns `'0.00%'` if result is `NaN` or division is invalid.\n *\n * @param {CalculableValue} molecular - The numerator of the fraction\n * @param {CalculableValue} denominator - The denominator of the fraction\n * @param {ToPercentageStringOptions} [options] - Optional output settings\n *\n * @returns {string} Formatted percentage string\n *\n * @example\n * ```typescript\n * import { toPercentageString } from '@kikiutils/shared/math';\n *\n * console.log(toPercentageString(50, 200)); // 25.00%\n * console.log(toPercentageString(50, 200, { withSymbol: false })); // 25.00\n * console.log(toPercentageString(50, 200, { decimalPlaces: 1 })); // 25.0%\n * ```\n */\nexport function toPercentageString(\n molecular: CalculableValue,\n denominator: CalculableValue,\n options?: ToPercentageStringOptions,\n) {\n const molecularDecimal = new Decimal(molecular.toString());\n const denominatorDecimal = new Decimal(denominator.toString());\n const calculationResult = molecularDecimal.div(denominatorDecimal);\n const result = calculationResult.isNaN()\n ? '0.00'\n : calculationResult.times(100).toFixed(options?.decimalPlaces ?? 2);\n\n return options?.withSymbol ?? true ? `${result}%` : result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,mBACZ,WACA,aACA,SACF;CACE,MAAM,mBAAmB,IAAI,QAAQ,UAAU,UAAU,CAAC;CAC1D,MAAM,qBAAqB,IAAI,QAAQ,YAAY,UAAU,CAAC;CAC9D,MAAM,oBAAoB,iBAAiB,IAAI,mBAAmB;CAClE,MAAM,SAAS,kBAAkB,OAAO,GAClC,SACA,kBAAkB,MAAM,IAAI,CAAC,QAAQ,SAAS,iBAAiB,EAAE;AAEvE,QAAO,SAAS,cAAc,OAAO,GAAG,OAAO,KAAK"}
package/dist/number.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { millify } from "millify";
2
-
3
2
  //#region src/number.ts
4
3
  /**
5
4
  * Converts a large number into a compact, human-readable string using `millify`.
@@ -26,7 +25,7 @@ function toCompactNumberString(value, options) {
26
25
  ...options
27
26
  });
28
27
  }
29
-
30
28
  //#endregion
31
29
  export { toCompactNumberString };
30
+
32
31
  //# sourceMappingURL=number.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","names":[],"sources":["../src/number.ts"],"sourcesContent":["import { millify } from 'millify';\n\n/**\n * Converts a large number into a compact, human-readable string using `millify`.\n *\n * Applies lowercase units (e.g. 'k', 'm') and default precision of 2, unless overridden.\n *\n * @param {number} value - The number to format\n * @param {Parameters<typeof millify>[1]} [options] - Optional configuration passed to `millify`\n *\n * @returns {string} The compact number string\n *\n * @example\n * ```typescript\n * import { toCompactNumberString } from '@kikiutils/shared/number';\n *\n * console.log(toCompactNumberString(1234567)); // 1.23m\n * console.log(toCompactNumberString(1234567, { precision: 3 })); // 1.235m\n * ```\n */\nexport function toCompactNumberString(value: number, options?: Parameters<typeof millify>[1]) {\n return millify(\n value,\n {\n lowercase: true,\n precision: 2,\n ...options,\n },\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,sBAAsB,OAAe,SAAyC;AAC1F,QAAO,QACH,OACA;EACI,WAAW;EACX,WAAW;EACX,GAAG;EACN,CACJ"}
1
+ {"version":3,"file":"number.js","names":[],"sources":["../src/number.ts"],"sourcesContent":["import { millify } from 'millify';\n\n/**\n * Converts a large number into a compact, human-readable string using `millify`.\n *\n * Applies lowercase units (e.g. 'k', 'm') and default precision of 2, unless overridden.\n *\n * @param {number} value - The number to format\n * @param {Parameters<typeof millify>[1]} [options] - Optional configuration passed to `millify`\n *\n * @returns {string} The compact number string\n *\n * @example\n * ```typescript\n * import { toCompactNumberString } from '@kikiutils/shared/number';\n *\n * console.log(toCompactNumberString(1234567)); // 1.23m\n * console.log(toCompactNumberString(1234567, { precision: 3 })); // 1.235m\n * ```\n */\nexport function toCompactNumberString(value: number, options?: Parameters<typeof millify>[1]) {\n return millify(\n value,\n {\n lowercase: true,\n precision: 2,\n ...options,\n },\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,sBAAsB,OAAe,SAAyC;AAC1F,QAAO,QACH,OACA;EACI,WAAW;EACX,WAAW;EACX,GAAG;EACN,CACJ"}
package/dist/object.js CHANGED
@@ -36,7 +36,7 @@ function stringifyObjectDeterministically(input, kvSeparator = "=", pairSeparato
36
36
  walk(input);
37
37
  return entries.sort().join(pairSeparator);
38
38
  }
39
-
40
39
  //#endregion
41
40
  export { stringifyObjectDeterministically };
41
+
42
42
  //# sourceMappingURL=object.js.map
package/dist/pino.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as pino$1 from "pino";
1
+ import * as _$pino from "pino";
2
2
 
3
3
  //#region src/pino.d.ts
4
4
  /**
@@ -22,8 +22,8 @@ import * as pino$1 from "pino";
22
22
  * logger.level = 'info';
23
23
  * ```
24
24
  */
25
- declare const pinoLogger: pino$1.Logger<never, boolean>;
26
- declare const logger: pino$1.Logger<never, boolean>;
25
+ declare const pinoLogger: _$pino.Logger<never, boolean>;
26
+ declare const logger: _$pino.Logger<never, boolean>;
27
27
  //#endregion
28
28
  export { logger, pinoLogger };
29
29
  //# sourceMappingURL=pino.d.ts.map
package/dist/pino.js CHANGED
@@ -1,15 +1,5 @@
1
1
  import { pino } from "pino";
2
2
  import { PinoPretty } from "pino-pretty";
3
-
4
- //#region src/pino.ts
5
- /**
6
- * Configure pinoPretty to enhance the log output.
7
- */
8
- const stream = PinoPretty({
9
- colorize: true,
10
- ignore: "hostname,pid",
11
- translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l"
12
- });
13
3
  /**
14
4
  * A pino logger instance with the configured stream.
15
5
  *
@@ -31,10 +21,14 @@ const stream = PinoPretty({
31
21
  * logger.level = 'info';
32
22
  * ```
33
23
  */
34
- const pinoLogger = pino({}, stream);
24
+ const pinoLogger = pino({}, PinoPretty({
25
+ colorize: true,
26
+ ignore: "hostname,pid",
27
+ translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l"
28
+ }));
35
29
  const logger = pinoLogger;
36
30
  pinoLogger.level = process.env.PINO_LOGGER_LEVEL || (process.env.NODE_ENV === "production" ? "error" : pinoLogger.level);
37
-
38
31
  //#endregion
39
32
  export { logger, pinoLogger };
33
+
40
34
  //# sourceMappingURL=pino.js.map
package/dist/pino.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pino.js","names":[],"sources":["../src/pino.ts"],"sourcesContent":["import { pino } from 'pino';\nimport { PinoPretty } from 'pino-pretty';\n\n/**\n * Configure pinoPretty to enhance the log output.\n */\nconst stream = PinoPretty({\n colorize: true, // Enable colored output for better readability\n ignore: 'hostname,pid', // Exclude 'hostname' and 'pid' fields from the logs\n translateTime: 'SYS:yyyy-mm-dd HH:MM:ss.l', // Format the timestamp in 'yyyy-mm-dd HH:MM:ss.l' format\n});\n\n/**\n * A pino logger instance with the configured stream.\n *\n * The logger's level is determined based on the `PINO_LOGGER_LEVEL` and `NODE_ENV` environment variables.\n * If `PINO_LOGGER_LEVEL` is set, it will be used; otherwise, if `NODE_ENV` is `production`,\n * the level will be set to `error`.\n *\n * To manually change the level, assign the desired level to `logger.level`.\n *\n * See available levels [here](https://getpino.io/#/docs/api?id=level-string).\n *\n * @example\n * ```typescript\n * import { logger } from '@kikiutils/shared/pino';\n *\n * logger.info('test'); // [2024-07-11 12:12:30.085] INFO: test\n *\n * // Manually change the level\n * logger.level = 'info';\n * ```\n */\nexport const pinoLogger = pino({}, stream);\nexport const logger = pinoLogger;\n// eslint-disable-next-line style/max-len\npinoLogger.level = process.env.PINO_LOGGER_LEVEL || (process.env.NODE_ENV === 'production' ? 'error' : pinoLogger.level);\n"],"mappings":";;;;;;;AAMA,MAAM,SAAS,WAAW;CACtB,UAAU;CACV,QAAQ;CACR,eAAe;CAClB,CAAC;;;;;;;;;;;;;;;;;;;;;;AAuBF,MAAa,aAAa,KAAK,EAAE,EAAE,OAAO;AAC1C,MAAa,SAAS;AAEtB,WAAW,QAAQ,QAAQ,IAAI,sBAAsB,QAAQ,IAAI,aAAa,eAAe,UAAU,WAAW"}
1
+ {"version":3,"file":"pino.js","names":[],"sources":["../src/pino.ts"],"sourcesContent":["import { pino } from 'pino';\nimport { PinoPretty } from 'pino-pretty';\n\n/**\n * Configure pinoPretty to enhance the log output.\n */\nconst stream = PinoPretty({\n colorize: true, // Enable colored output for better readability\n ignore: 'hostname,pid', // Exclude 'hostname' and 'pid' fields from the logs\n translateTime: 'SYS:yyyy-mm-dd HH:MM:ss.l', // Format the timestamp in 'yyyy-mm-dd HH:MM:ss.l' format\n});\n\n/**\n * A pino logger instance with the configured stream.\n *\n * The logger's level is determined based on the `PINO_LOGGER_LEVEL` and `NODE_ENV` environment variables.\n * If `PINO_LOGGER_LEVEL` is set, it will be used; otherwise, if `NODE_ENV` is `production`,\n * the level will be set to `error`.\n *\n * To manually change the level, assign the desired level to `logger.level`.\n *\n * See available levels [here](https://getpino.io/#/docs/api?id=level-string).\n *\n * @example\n * ```typescript\n * import { logger } from '@kikiutils/shared/pino';\n *\n * logger.info('test'); // [2024-07-11 12:12:30.085] INFO: test\n *\n * // Manually change the level\n * logger.level = 'info';\n * ```\n */\nexport const pinoLogger = pino({}, stream);\nexport const logger = pinoLogger;\n// eslint-disable-next-line style/max-len\npinoLogger.level = process.env.PINO_LOGGER_LEVEL || (process.env.NODE_ENV === 'production' ? 'error' : pinoLogger.level);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAa,aAAa,KAAK,EAAE,EA3BlB,WAAW;CACtB,UAAU;CACV,QAAQ;CACR,eAAe;CAClB,CAAC,CAuBwC;AAC1C,MAAa,SAAS;AAEtB,WAAW,QAAQ,QAAQ,IAAI,sBAAsB,QAAQ,IAAI,aAAa,eAAe,UAAU,WAAW"}
package/dist/random.js CHANGED
@@ -24,7 +24,7 @@ function generateWithNestedRandomLength(generator, minMin, minMax, maxMin, maxMa
24
24
  const innerMin = random(minMin, minMax);
25
25
  return generator(random(Math.max(innerMin, maxMin), maxMax));
26
26
  }
27
-
28
27
  //#endregion
29
28
  export { generateWithNestedRandomLength };
29
+
30
30
  //# sourceMappingURL=random.js.map
@@ -11,7 +11,7 @@ function createLruKeyedStore(lruInstance) {
11
11
  setItem: (value, ...args) => lruInstance.set(keyFn(...args), value)
12
12
  });
13
13
  }
14
-
15
14
  //#endregion
16
15
  export { createLruKeyedStore };
16
+
17
17
  //# sourceMappingURL=keyed-store.js.map
@@ -12,7 +12,7 @@ function createRedisKeyedStore(storage) {
12
12
  }
13
13
  });
14
14
  }
15
-
16
15
  //#endregion
17
16
  export { createRedisKeyedStore };
17
+
18
18
  //# sourceMappingURL=keyed-store.js.map
@@ -1,5 +1,4 @@
1
1
  import { decode, encode, isNativeAccelerationEnabled } from "msgpackr";
2
-
3
2
  //#region src/storages/redis/msgpack.ts
4
3
  if (!isNativeAccelerationEnabled) console.warn("Native acceleration not enabled for msgpackr, verify that install finished properly");
5
4
  function createRedisMsgpackStorage(adapter) {
@@ -17,7 +16,7 @@ function createRedisMsgpackStorage(adapter) {
17
16
  }
18
17
  });
19
18
  }
20
-
21
19
  //#endregion
22
20
  export { createRedisMsgpackStorage };
21
+
23
22
  //# sourceMappingURL=msgpack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"msgpack.js","names":[],"sources":["../../../src/storages/redis/msgpack.ts"],"sourcesContent":["import {\n decode,\n encode,\n isNativeAccelerationEnabled,\n} from 'msgpackr';\n\nimport type {\n RedisLikeAdapter,\n RedisLikeStorage,\n} from './types';\n\nif (!isNativeAccelerationEnabled) {\n console.warn('Native acceleration not enabled for msgpackr, verify that install finished properly');\n}\n\nexport function createRedisMsgpackStorage(adapter: RedisLikeAdapter): Readonly<RedisLikeStorage> {\n return Object.freeze({\n async getItem<T = unknown>(key: string) {\n const rawValue = await adapter.getBuffer(key);\n return rawValue ? decode(rawValue) as T : null;\n },\n getItemTtl: (key: string) => adapter.ttl(key),\n hasItem: (key: string) => adapter.has(key),\n removeItem: async (key: string) => await adapter.delete(key) === 1,\n setItem: async (key: string, value: any) => await adapter.setBuffer(key, encode(value)) === 'OK',\n async setItemWithTtl(key: string, ttlSeconds: number, value: any) {\n return await adapter.setBufferEx(key, ttlSeconds, encode(value)) === 'OK';\n },\n });\n}\n"],"mappings":";;;AAWA,IAAI,CAAC,4BACD,SAAQ,KAAK,sFAAsF;AAGvG,SAAgB,0BAA0B,SAAuD;AAC7F,QAAO,OAAO,OAAO;EACjB,MAAM,QAAqB,KAAa;GACpC,MAAM,WAAW,MAAM,QAAQ,UAAU,IAAI;AAC7C,UAAO,WAAW,OAAO,SAAS,GAAQ;;EAE9C,aAAa,QAAgB,QAAQ,IAAI,IAAI;EAC7C,UAAU,QAAgB,QAAQ,IAAI,IAAI;EAC1C,YAAY,OAAO,QAAgB,MAAM,QAAQ,OAAO,IAAI,KAAK;EACjE,SAAS,OAAO,KAAa,UAAe,MAAM,QAAQ,UAAU,KAAK,OAAO,MAAM,CAAC,KAAK;EAC5F,MAAM,eAAe,KAAa,YAAoB,OAAY;AAC9D,UAAO,MAAM,QAAQ,YAAY,KAAK,YAAY,OAAO,MAAM,CAAC,KAAK;;EAE5E,CAAC"}
1
+ {"version":3,"file":"msgpack.js","names":[],"sources":["../../../src/storages/redis/msgpack.ts"],"sourcesContent":["import {\n decode,\n encode,\n isNativeAccelerationEnabled,\n} from 'msgpackr';\n\nimport type {\n RedisLikeAdapter,\n RedisLikeStorage,\n} from './types';\n\nif (!isNativeAccelerationEnabled) {\n console.warn('Native acceleration not enabled for msgpackr, verify that install finished properly');\n}\n\nexport function createRedisMsgpackStorage(adapter: RedisLikeAdapter): Readonly<RedisLikeStorage> {\n return Object.freeze({\n async getItem<T = unknown>(key: string) {\n const rawValue = await adapter.getBuffer(key);\n return rawValue ? decode(rawValue) as T : null;\n },\n getItemTtl: (key: string) => adapter.ttl(key),\n hasItem: (key: string) => adapter.has(key),\n removeItem: async (key: string) => await adapter.delete(key) === 1,\n setItem: async (key: string, value: any) => await adapter.setBuffer(key, encode(value)) === 'OK',\n async setItemWithTtl(key: string, ttlSeconds: number, value: any) {\n return await adapter.setBufferEx(key, ttlSeconds, encode(value)) === 'OK';\n },\n });\n}\n"],"mappings":";;AAWA,IAAI,CAAC,4BACD,SAAQ,KAAK,sFAAsF;AAGvG,SAAgB,0BAA0B,SAAuD;AAC7F,QAAO,OAAO,OAAO;EACjB,MAAM,QAAqB,KAAa;GACpC,MAAM,WAAW,MAAM,QAAQ,UAAU,IAAI;AAC7C,UAAO,WAAW,OAAO,SAAS,GAAQ;;EAE9C,aAAa,QAAgB,QAAQ,IAAI,IAAI;EAC7C,UAAU,QAAgB,QAAQ,IAAI,IAAI;EAC1C,YAAY,OAAO,QAAgB,MAAM,QAAQ,OAAO,IAAI,KAAK;EACjE,SAAS,OAAO,KAAa,UAAe,MAAM,QAAQ,UAAU,KAAK,OAAO,MAAM,CAAC,KAAK;EAC5F,MAAM,eAAe,KAAa,YAAoB,OAAY;AAC9D,UAAO,MAAM,QAAQ,YAAY,KAAK,YAAY,OAAO,MAAM,CAAC,KAAK;;EAE5E,CAAC"}
@@ -1 +1 @@
1
- export { };
1
+ export {};
package/dist/string.js CHANGED
@@ -36,7 +36,7 @@ function randomString(length, mode = "alphabetic") {
36
36
  if (!charset) throw new Error(`Unsupported mode: ${mode}`);
37
37
  return Array.from({ length }, () => charset[Math.floor(Math.random() * charset.length)]).join("");
38
38
  }
39
-
40
39
  //#endregion
41
40
  export { randomString };
41
+
42
42
  //# sourceMappingURL=string.js.map
package/dist/time.js CHANGED
@@ -8,7 +8,7 @@ function abortableDelay(ms, signal) {
8
8
  });
9
9
  });
10
10
  }
11
-
12
11
  //#endregion
13
12
  export { abortableDelay };
13
+
14
14
  //# sourceMappingURL=time.js.map
package/dist/time.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","names":[],"sources":["../src/time.ts"],"sourcesContent":["export function abortableDelay(ms: number, signal?: AbortSignal) {\n return new Promise((resolve) => {\n const timeout = setTimeout(resolve, ms);\n if (signal) {\n signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeout);\n resolve(undefined);\n },\n );\n }\n });\n}\n"],"mappings":";AAAA,SAAgB,eAAe,IAAY,QAAsB;AAC7D,QAAO,IAAI,SAAS,YAAY;EAC5B,MAAM,UAAU,WAAW,SAAS,GAAG;AACvC,MAAI,OACA,QAAO,iBACH,eACM;AACF,gBAAa,QAAQ;AACrB,WAAQ,OAAU;IAEzB;GAEP"}
1
+ {"version":3,"file":"time.js","names":[],"sources":["../src/time.ts"],"sourcesContent":["export function abortableDelay(ms: number, signal?: AbortSignal) {\n return new Promise((resolve) => {\n const timeout = setTimeout(resolve, ms);\n if (signal) {\n signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeout);\n resolve(undefined);\n },\n );\n }\n });\n}\n"],"mappings":";AAAA,SAAgB,eAAe,IAAY,QAAsB;AAC7D,QAAO,IAAI,SAAS,YAAY;EAC5B,MAAM,UAAU,WAAW,SAAS,GAAG;AACvC,MAAI,OACA,QAAO,iBACH,eACM;AACF,gBAAa,QAAQ;AACrB,WAAQ,KAAA,EAAU;IAEzB;GAEP"}
package/dist/url.js CHANGED
@@ -15,7 +15,7 @@ function appendRedirectParamToUrl(url, redirectPath) {
15
15
  searchParams.set("redirect", redirectPath);
16
16
  return `${base}?${searchParams.toString()}`;
17
17
  }
18
-
19
18
  //#endregion
20
19
  export { appendRedirectParamToUrl };
20
+
21
21
  //# sourceMappingURL=url.js.map
package/dist/vue.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { appendRedirectParamToUrl } from "./url.js";
2
2
  import { onActivated } from "vue";
3
3
  import { onBeforeRouteLeave, useRoute } from "vue-router";
4
-
5
4
  //#region src/vue.ts
6
5
  /**
7
6
  * Appends the current Vue Router route's fullPath as the `redirect` query parameter to the given URL.
@@ -52,7 +51,7 @@ function usePreserveScroll(containerRef) {
52
51
  scrollTop = containerRef.value?.scrollTop || 0;
53
52
  });
54
53
  }
55
-
56
54
  //#endregion
57
55
  export { appendRedirectParamFromCurrentRouteToUrl, clearIntervalRef, clearTimeoutRef, usePreserveScroll };
56
+
58
57
  //# sourceMappingURL=vue.js.map
package/dist/vue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vue.js","names":[],"sources":["../src/vue.ts"],"sourcesContent":["import { onActivated } from 'vue';\nimport type { Ref } from 'vue';\nimport {\n onBeforeRouteLeave,\n useRoute,\n} from 'vue-router';\n\nimport type { Nullable } from './types';\nimport { appendRedirectParamToUrl } from './url';\n\n/**\n * Appends the current Vue Router route's fullPath as the `redirect` query parameter to the given URL.\n *\n * @param {string} url - The base URL to modify\n *\n * @returns {string} A new URL with the current route fullPath as the `redirect` parameter\n */\nexport function appendRedirectParamFromCurrentRouteToUrl(url: string) {\n return appendRedirectParamToUrl(url, useRoute().fullPath);\n}\n\n/**\n * Clears an interval referenced by a Vue ref and sets it to null.\n *\n * @param {Ref<Nullable<ReturnType<typeof setInterval>>>} intervalRef - A Vue ref holding a NodeJS.Timeout or null\n */\nexport function clearIntervalRef(intervalRef: Ref<Nullable<ReturnType<typeof setInterval>>>) {\n if (intervalRef.value) clearInterval(intervalRef.value);\n intervalRef.value = null;\n}\n\n/**\n * Clears a timeout referenced by a Vue ref and sets it to null.\n *\n * @param {Ref<Nullable<ReturnType<typeof setTimeout>>>} timeoutRef - A Vue ref holding a NodeJS.Timeout or null\n */\nexport function clearTimeoutRef(timeoutRef: Ref<Nullable<ReturnType<typeof setTimeout>>>) {\n if (timeoutRef.value) clearTimeout(timeoutRef.value);\n timeoutRef.value = null;\n}\n\n/**\n * A Vue composition function that remembers and restores scroll position\n * of a scrollable container across route changes and keep-alive activation.\n *\n * @template T - The type of the scrollable element (defaults to HTMLElement)\n *\n * @param {Ref<Nullable<T>>} containerRef - A ref to the scrollable HTML element\n */\nexport function usePreserveScroll<T extends Element = HTMLElement>(containerRef: Ref<Nullable<T>>) {\n let scrollLeft = 0;\n let scrollTop = 0;\n onActivated(() => {\n if (!containerRef.value) return;\n containerRef.value.scrollLeft = scrollLeft;\n containerRef.value.scrollTop = scrollTop;\n });\n\n onBeforeRouteLeave(() => {\n scrollLeft = containerRef.value?.scrollLeft || 0;\n scrollTop = containerRef.value?.scrollTop || 0;\n });\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,SAAgB,yCAAyC,KAAa;AAClE,QAAO,yBAAyB,KAAK,UAAU,CAAC,SAAS;;;;;;;AAQ7D,SAAgB,iBAAiB,aAA4D;AACzF,KAAI,YAAY,MAAO,eAAc,YAAY,MAAM;AACvD,aAAY,QAAQ;;;;;;;AAQxB,SAAgB,gBAAgB,YAA0D;AACtF,KAAI,WAAW,MAAO,cAAa,WAAW,MAAM;AACpD,YAAW,QAAQ;;;;;;;;;;AAWvB,SAAgB,kBAAmD,cAAgC;CAC/F,IAAI,aAAa;CACjB,IAAI,YAAY;AAChB,mBAAkB;AACd,MAAI,CAAC,aAAa,MAAO;AACzB,eAAa,MAAM,aAAa;AAChC,eAAa,MAAM,YAAY;GACjC;AAEF,0BAAyB;AACrB,eAAa,aAAa,OAAO,cAAc;AAC/C,cAAY,aAAa,OAAO,aAAa;GAC/C"}
1
+ {"version":3,"file":"vue.js","names":[],"sources":["../src/vue.ts"],"sourcesContent":["import { onActivated } from 'vue';\nimport type { Ref } from 'vue';\nimport {\n onBeforeRouteLeave,\n useRoute,\n} from 'vue-router';\n\nimport type { Nullable } from './types';\nimport { appendRedirectParamToUrl } from './url';\n\n/**\n * Appends the current Vue Router route's fullPath as the `redirect` query parameter to the given URL.\n *\n * @param {string} url - The base URL to modify\n *\n * @returns {string} A new URL with the current route fullPath as the `redirect` parameter\n */\nexport function appendRedirectParamFromCurrentRouteToUrl(url: string) {\n return appendRedirectParamToUrl(url, useRoute().fullPath);\n}\n\n/**\n * Clears an interval referenced by a Vue ref and sets it to null.\n *\n * @param {Ref<Nullable<ReturnType<typeof setInterval>>>} intervalRef - A Vue ref holding a NodeJS.Timeout or null\n */\nexport function clearIntervalRef(intervalRef: Ref<Nullable<ReturnType<typeof setInterval>>>) {\n if (intervalRef.value) clearInterval(intervalRef.value);\n intervalRef.value = null;\n}\n\n/**\n * Clears a timeout referenced by a Vue ref and sets it to null.\n *\n * @param {Ref<Nullable<ReturnType<typeof setTimeout>>>} timeoutRef - A Vue ref holding a NodeJS.Timeout or null\n */\nexport function clearTimeoutRef(timeoutRef: Ref<Nullable<ReturnType<typeof setTimeout>>>) {\n if (timeoutRef.value) clearTimeout(timeoutRef.value);\n timeoutRef.value = null;\n}\n\n/**\n * A Vue composition function that remembers and restores scroll position\n * of a scrollable container across route changes and keep-alive activation.\n *\n * @template T - The type of the scrollable element (defaults to HTMLElement)\n *\n * @param {Ref<Nullable<T>>} containerRef - A ref to the scrollable HTML element\n */\nexport function usePreserveScroll<T extends Element = HTMLElement>(containerRef: Ref<Nullable<T>>) {\n let scrollLeft = 0;\n let scrollTop = 0;\n onActivated(() => {\n if (!containerRef.value) return;\n containerRef.value.scrollLeft = scrollLeft;\n containerRef.value.scrollTop = scrollTop;\n });\n\n onBeforeRouteLeave(() => {\n scrollLeft = containerRef.value?.scrollLeft || 0;\n scrollTop = containerRef.value?.scrollTop || 0;\n });\n}\n"],"mappings":";;;;;;;;;;;AAiBA,SAAgB,yCAAyC,KAAa;AAClE,QAAO,yBAAyB,KAAK,UAAU,CAAC,SAAS;;;;;;;AAQ7D,SAAgB,iBAAiB,aAA4D;AACzF,KAAI,YAAY,MAAO,eAAc,YAAY,MAAM;AACvD,aAAY,QAAQ;;;;;;;AAQxB,SAAgB,gBAAgB,YAA0D;AACtF,KAAI,WAAW,MAAO,cAAa,WAAW,MAAM;AACpD,YAAW,QAAQ;;;;;;;;;;AAWvB,SAAgB,kBAAmD,cAAgC;CAC/F,IAAI,aAAa;CACjB,IAAI,YAAY;AAChB,mBAAkB;AACd,MAAI,CAAC,aAAa,MAAO;AACzB,eAAa,MAAM,aAAa;AAChC,eAAa,MAAM,YAAY;GACjC;AAEF,0BAAyB;AACrB,eAAa,aAAa,OAAO,cAAc;AAC/C,cAAY,aAAa,OAAO,aAAa;GAC/C"}
package/dist/web.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { appendRedirectParamToUrl } from "./url.js";
2
-
3
2
  //#region src/web.ts
4
3
  /**
5
4
  * Appends the current browser URL (including path, query, and hash) as the `redirect` query parameter to the given URL.
@@ -25,7 +24,7 @@ function assignUrlWithRedirectParamFromCurrentLocation(url, delayMs) {
25
24
  if (delayMs === void 0) window.location.assign(appendRedirectParamFromCurrentLocationToUrl(url));
26
25
  else return setTimeout(() => window.location.assign(appendRedirectParamFromCurrentLocationToUrl(url)), delayMs);
27
26
  }
28
-
29
27
  //#endregion
30
28
  export { appendRedirectParamFromCurrentLocationToUrl, assignUrlWithRedirectParamFromCurrentLocation };
29
+
31
30
  //# sourceMappingURL=web.js.map
package/dist/web.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","names":[],"sources":["../src/web.ts"],"sourcesContent":["import { appendRedirectParamToUrl } from './url';\n\n/**\n * Appends the current browser URL (including path, query, and hash) as the `redirect` query parameter to the given URL.\n *\n * @param {string} url - The base URL to modify\n *\n * @returns {string} A new URL with the current location as the `redirect` parameter\n */\nexport function appendRedirectParamFromCurrentLocationToUrl(url: string) {\n const currentPath = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n return appendRedirectParamToUrl(url, currentPath);\n}\n\n/**\n * Navigates to the given URL, appending the current browser location\n * (path, query, and hash) as the `redirect` query parameter.\n *\n * Useful for redirecting to login or other gateways while preserving\n * the current location for post-auth navigation.\n *\n * @param {string} url - The destination URL to navigate to\n * @param {number} [delayMs] - Optional delay in milliseconds before navigation\n */\nexport function assignUrlWithRedirectParamFromCurrentLocation(url: string, delayMs?: number) {\n if (delayMs === undefined) window.location.assign(appendRedirectParamFromCurrentLocationToUrl(url));\n else return setTimeout(() => window.location.assign(appendRedirectParamFromCurrentLocationToUrl(url)), delayMs);\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,4CAA4C,KAAa;AAErE,QAAO,yBAAyB,KADZ,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS,SAAS,OAAO,SAAS,OAC1C;;;;;;;;;;;;AAarD,SAAgB,8CAA8C,KAAa,SAAkB;AACzF,KAAI,YAAY,OAAW,QAAO,SAAS,OAAO,4CAA4C,IAAI,CAAC;KAC9F,QAAO,iBAAiB,OAAO,SAAS,OAAO,4CAA4C,IAAI,CAAC,EAAE,QAAQ"}
1
+ {"version":3,"file":"web.js","names":[],"sources":["../src/web.ts"],"sourcesContent":["import { appendRedirectParamToUrl } from './url';\n\n/**\n * Appends the current browser URL (including path, query, and hash) as the `redirect` query parameter to the given URL.\n *\n * @param {string} url - The base URL to modify\n *\n * @returns {string} A new URL with the current location as the `redirect` parameter\n */\nexport function appendRedirectParamFromCurrentLocationToUrl(url: string) {\n const currentPath = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n return appendRedirectParamToUrl(url, currentPath);\n}\n\n/**\n * Navigates to the given URL, appending the current browser location\n * (path, query, and hash) as the `redirect` query parameter.\n *\n * Useful for redirecting to login or other gateways while preserving\n * the current location for post-auth navigation.\n *\n * @param {string} url - The destination URL to navigate to\n * @param {number} [delayMs] - Optional delay in milliseconds before navigation\n */\nexport function assignUrlWithRedirectParamFromCurrentLocation(url: string, delayMs?: number) {\n if (delayMs === undefined) window.location.assign(appendRedirectParamFromCurrentLocationToUrl(url));\n else return setTimeout(() => window.location.assign(appendRedirectParamFromCurrentLocationToUrl(url)), delayMs);\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,4CAA4C,KAAa;AAErE,QAAO,yBAAyB,KADZ,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS,SAAS,OAAO,SAAS,OAC1C;;;;;;;;;;;;AAarD,SAAgB,8CAA8C,KAAa,SAAkB;AACzF,KAAI,YAAY,KAAA,EAAW,QAAO,SAAS,OAAO,4CAA4C,IAAI,CAAC;KAC9F,QAAO,iBAAiB,OAAO,SAAS,OAAO,4CAA4C,IAAI,CAAC,EAAE,QAAQ"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kikiutils/shared",
3
3
  "type": "module",
4
- "version": "14.1.2",
4
+ "version": "15.0.1",
5
5
  "description": "A lightweight and modular utility library for modern JavaScript and TypeScript — includes secure hashing, flexible logging, datetime tools, Vue/web helpers, storage abstraction, and more.",
6
6
  "author": "kiki-kanri",
7
7
  "license": "MIT",
@@ -56,47 +56,38 @@
56
56
  "scripts": {
57
57
  "build": "tsdown",
58
58
  "bumplog": "changelogen --bump --hideAuthorEmail",
59
- "depcheck": "depcheck",
59
+ "knip:deps": "knip --dependencies",
60
+ "knip:exports": "knip --exports",
60
61
  "lint": "eslint --max-warnings 0",
61
62
  "lint:fix": "eslint --fix --max-warnings 0",
62
63
  "prepack": "pnpm run build",
63
64
  "release": "pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build && changelogen --hideAuthorEmail --push --release && npm publish",
64
65
  "test": "cross-env TZ=UTC vitest run --coverage",
65
66
  "test:watch": "cross-env TZ=UTC vitest watch --coverage",
66
- "typecheck": "tsc -b --noEmit",
67
- "unused-exports": "ts-unused-exports ./tsconfig.json"
67
+ "typecheck": "tsc -b --noEmit"
68
68
  },
69
69
  "peerDependencies": {
70
- "@noble/hashes": "^2.0.1",
71
- "@types/fs-extra": "^11.0.4",
72
- "@types/jsonfile": "^6.1.4",
70
+ "@noble/hashes": "^2.2.0",
73
71
  "@types/ssh2": "^1.15.5",
74
72
  "async-validator": "^4.2.5",
75
- "bson": "^7.1.1",
73
+ "bson": "^7.2.0",
76
74
  "consola": "^3.4.2",
77
75
  "date-fns": "^4.1.0",
78
76
  "decimal.js": "^10.6.0",
79
- "element-plus": "^2.13.1",
80
- "fs-extra": "^11.3.3",
81
- "lru-cache": "^11.2.4",
77
+ "element-plus": "^2.13.7",
78
+ "lru-cache": "^11.3.5",
82
79
  "millify": "^6.1.0",
83
- "msgpackr": "^1.11.8",
80
+ "msgpackr": "^1.11.9",
84
81
  "node-ssh": "^13.2.1",
85
- "pino": "^10.2.0",
82
+ "pino": "^10.3.1",
86
83
  "pino-pretty": "^13.1.3",
87
- "vue": "^3.5.26",
84
+ "vue": "^3.5.32",
88
85
  "vue-router": ">= 4.6.4"
89
86
  },
90
87
  "peerDependenciesMeta": {
91
88
  "@noble/hashes": {
92
89
  "optional": true
93
90
  },
94
- "@types/fs-extra": {
95
- "optional": true
96
- },
97
- "@types/jsonfile": {
98
- "optional": true
99
- },
100
91
  "@types/ssh2": {
101
92
  "optional": true
102
93
  },
@@ -118,9 +109,6 @@
118
109
  "element-plus": {
119
110
  "optional": true
120
111
  },
121
- "fs-extra": {
122
- "optional": true
123
- },
124
112
  "lru-cache": {
125
113
  "optional": true
126
114
  },
@@ -147,15 +135,13 @@
147
135
  }
148
136
  },
149
137
  "devDependencies": {
150
- "@antfu/eslint-config": "^7.4.3",
151
- "@kikiutils/eslint-config": "^5.0.4",
152
- "@kikiutils/tsconfigs": "^5.0.5",
153
- "@noble/hashes": "^2.0.1",
154
- "@types/fs-extra": "^11.0.4",
155
- "@types/jsonfile": "^6.1.4",
156
- "@types/node": "^25.3.0",
138
+ "@antfu/eslint-config": "^8.2.0",
139
+ "@kikiutils/eslint-config": "^9.0.1",
140
+ "@kikiutils/tsconfigs": "^6.0.0",
141
+ "@noble/hashes": "^2.2.0",
142
+ "@types/node": "^25.6.0",
157
143
  "@types/ssh2": "^1.15.5",
158
- "@vitest/coverage-v8": "^4.0.18",
144
+ "@vitest/coverage-v8": "^4.1.4",
159
145
  "async-validator": "^4.2.5",
160
146
  "bson": "^7.2.0",
161
147
  "changelogen": "^0.6.2",
@@ -163,24 +149,22 @@
163
149
  "cross-env": "^10.1.0",
164
150
  "date-fns": "^4.1.0",
165
151
  "decimal.js": "^10.6.0",
166
- "depcheck": "^1.4.7",
167
- "element-plus": "^2.13.2",
168
- "fs-extra": "^11.3.3",
169
- "jsdom": "^28.1.0",
170
- "lru-cache": "^11.2.6",
152
+ "element-plus": "^2.13.7",
153
+ "jsdom": "^29.0.2",
154
+ "knip": "^6.4.1",
155
+ "lru-cache": "^11.3.5",
171
156
  "millify": "^6.1.0",
172
- "msgpackr": "^1.11.8",
157
+ "msgpackr": "^1.11.10",
173
158
  "node-ssh": "^13.2.1",
174
159
  "pino": "^10.3.1",
175
160
  "pino-pretty": "^13.1.3",
176
- "publint": "^0.3.17",
177
- "ts-unused-exports": "^11.0.1",
178
- "tsdown": "^0.20.3",
179
- "typescript": "^5.9.3",
161
+ "publint": "^0.3.18",
162
+ "tsdown": "^0.21.9",
163
+ "typescript": "^6.0.3",
180
164
  "unplugin-unused": "^0.5.7",
181
- "vitest": "^4.0.18",
182
- "vue": "^3.5.28",
183
- "vue-router": "^5.0.3"
165
+ "vitest": "^4.1.4",
166
+ "vue": "^3.5.32",
167
+ "vue-router": "^5.0.4"
184
168
  },
185
169
  "pnpm": {
186
170
  "onlyBuiltDependencies": [
@@ -17,13 +17,6 @@ import {
17
17
  } from 'node:path';
18
18
  import type * as nodePath from 'node:path';
19
19
 
20
- import * as fsExtra from 'fs-extra';
21
- import type {
22
- JFReadOptions,
23
- JFWriteOptions,
24
- } from 'jsonfile';
25
-
26
- export type DoNotRemoveOrUseThisType = typeof fsExtra;
27
20
  type DropFirstParameters<T extends (...args: any) => any> = Parameters<T> extends [any, ...infer R] ? R : never;
28
21
  export type PathLike = fs.PathLike | Path;
29
22
 
@@ -385,44 +378,4 @@ export class Path {
385
378
  writeFile(...args: DropFirstParameters<typeof fsp.writeFile>) {
386
379
  return fsp.writeFile(this.#value, ...args);
387
380
  }
388
-
389
- // Some commonly used promise fs extra methods
390
-
391
- /**
392
- * @see {@link fsExtra.ensureDir}
393
- */
394
- ensureDir(options?: fsExtra.EnsureDirOptions | number) {
395
- return fsExtra.ensureDir(this.#value, options);
396
- }
397
-
398
- /**
399
- * @see {@link fsExtra.ensureDir}
400
- */
401
- mkdirp = this.ensureDir;
402
-
403
- /**
404
- * @see {@link fsExtra.ensureDir}
405
- */
406
- mkdirs = this.ensureDir;
407
-
408
- /**
409
- * @see {@link fsExtra.readJson}
410
- */
411
- async readJson<T = any>(options?: JFReadOptions) {
412
- return await fsExtra.readJson(this.#value, options) as T;
413
- }
414
-
415
- /**
416
- * @see {@link fsExtra.remove}
417
- */
418
- remove() {
419
- return fsExtra.remove(this.#value);
420
- }
421
-
422
- /**
423
- * @see {@link fsExtra.writeJson}
424
- */
425
- writeJson(data: any, options?: JFWriteOptions) {
426
- return fsExtra.writeJson(this.#value, data, options);
427
- }
428
381
  }