@andrew_l/toolkit 0.2.15 → 0.2.17

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.
package/dist/index.d.ts CHANGED
@@ -253,6 +253,7 @@ declare function shuffle<T>(arr: readonly T[]): T[];
253
253
  * @template T The type of elements in the array
254
254
  */
255
255
  type SortedArrayCompareFn<T> = (a: T, b: T) => number;
256
+ declare const SYM_COMPARE_FN: unique symbol;
256
257
  /**
257
258
  * A self-sorting array that maintains elements in a sorted order based on a comparison function.
258
259
  * All mutating operations preserve the sorted order of elements.
@@ -280,7 +281,7 @@ type SortedArrayCompareFn<T> = (a: T, b: T) => number;
280
281
  * @group Array
281
282
  */
282
283
  declare class SortedArray<T> extends Array<T> {
283
- #private;
284
+ private [SYM_COMPARE_FN];
284
285
  /**
285
286
  * Creates a new SortedArray instance.
286
287
  *
@@ -478,6 +479,201 @@ declare namespace assert {
478
479
  export { assert_array as array, assert_arrayNumbers as arrayNumbers, assert_arrayStrings as arrayStrings, assert_boolean as boolean, assert_date as date, assert_equal as equal, assert_fn as fn, assert_greaterThan as greaterThan, assert_lessThan as lessThan, assert_notEmpty as notEmpty, assert_notEmptyString as notEmptyString, assert_number as number, assert_object as object, assert_ok as ok, assert_string as string };
479
480
  }
480
481
 
482
+ interface BaseX {
483
+ /**
484
+ * Base alphabet
485
+ */
486
+ alphabet: string;
487
+ /**
488
+ * Base padding chars
489
+ */
490
+ padding: string;
491
+ /**
492
+ * Encodes binary data into a BaseX string representation
493
+ *
494
+ * @param input - The binary data to encode
495
+ * @returns The encoded string
496
+ */
497
+ encode(input: Uint8Array): string;
498
+ /**
499
+ * Decodes a baseX string back into binary data
500
+ *
501
+ * @param input - The encoded string to decode
502
+ * @returns The decoded binary data
503
+ * @throws {Error} When the input contains invalid characters or format
504
+ */
505
+ decode(input: string): Uint8Array;
506
+ }
507
+ /**
508
+ * Create custom base alphabet encoding.
509
+ *
510
+ * @example
511
+ * ```typescript
512
+ * const base16 = basex('0123456789abcdef')
513
+ * const data = new Uint8Array([255, 255]);
514
+ * console.log(base16.encode(data));
515
+ * ```
516
+ *
517
+ * @example
518
+ * ```typescript
519
+ * const base16 = basex('0123456789abcdef')
520
+ * const encoded = "16FA";
521
+ * console.log(base16.decode(encoded));
522
+ * ```
523
+ *
524
+ * @group Binary
525
+ */
526
+ declare function basex(alphabet: string): BaseX;
527
+
528
+ /**
529
+ * Base62 encoder/decoder for binary data.
530
+ *
531
+ * @example Basic usage
532
+ * ```typescript
533
+ * const data = new Uint8Array([255, 128, 64]);
534
+ * const encoded = base62.encode(data);
535
+ * console.log(encoded);
536
+ *
537
+ * const decoded = base62.decode(encoded);
538
+ * console.log(decoded); // Uint8Array [255, 128, 64]
539
+ * ```
540
+ *
541
+ * @example Text encoding
542
+ * ```typescript
543
+ * const text = "Hello World!";
544
+ * const bytes = new TextEncoder().encode(text);
545
+ * const encoded = base62.encode(bytes);
546
+ * const decoded = base62.decode(encoded);
547
+ * const result = new TextDecoder().decode(decoded);
548
+ * console.log(result); // "Hello World!"
549
+ * ```
550
+ *
551
+ * @group Binary
552
+ */
553
+ declare const base62: BaseX;
554
+
555
+ /**
556
+ * Base62-like encoder/decoder for binary data but **super fast**. Useful for human readable tokens generation
557
+ *
558
+ * **Warning!** Not RFC standard
559
+ *
560
+ * @example Basic usage
561
+ * ```typescript
562
+ * const data = new Uint8Array([255, 128, 64]);
563
+ * const encoded = base62.encode(data);
564
+ * console.log(encoded);
565
+ *
566
+ * const decoded = base62.decode(encoded);
567
+ * console.log(decoded); // Uint8Array [255, 128, 64]
568
+ * ```
569
+ *
570
+ * @example Text encoding
571
+ * ```typescript
572
+ * const text = "Hello World!";
573
+ * const bytes = new TextEncoder().encode(text);
574
+ * const encoded = base62.encode(bytes);
575
+ * const decoded = base62.decode(encoded);
576
+ * const result = new TextDecoder().decode(decoded);
577
+ * console.log(result); // "Hello World!"
578
+ * ```
579
+ *
580
+ * @group Binary
581
+ */
582
+ declare const base62Fast: BaseX;
583
+
584
+ declare class Base64Encoding implements BaseX {
585
+ alphabet: string;
586
+ padding: string;
587
+ private decodeMap;
588
+ constructor(alphabet: string, options?: {
589
+ padding?: string;
590
+ });
591
+ /**
592
+ * Encodes binary data into a base64 string representation
593
+ *
594
+ * @param input - The binary data to encode
595
+ * @returns The encoded string
596
+ *
597
+ * @example
598
+ * ```typescript
599
+ * const data = new Uint8Array([255, 255]);
600
+ * console.log(base64.encode(data));
601
+ * ```
602
+ */
603
+ encode(data: Uint8Array, options?: {
604
+ includePadding?: boolean;
605
+ }): string;
606
+ /**
607
+ * Decodes a base64 string back into binary data
608
+ *
609
+ * @param input - The encoded string to decode
610
+ * @returns The decoded binary data
611
+ * @throws {Error} When the input contains invalid characters or format
612
+ *
613
+ * @example
614
+ * ```typescript
615
+ * const encoded = "AA==";
616
+ * console.log(base64.decode(encoded)); // Uint8Array [255, 255]
617
+ * ```
618
+ */
619
+ decode(data: string, options?: {
620
+ strict?: boolean;
621
+ }): Uint8Array;
622
+ }
623
+
624
+ /**
625
+ * Base64 encoder/decoder for binary data
626
+ *
627
+ * @example Basic usage
628
+ * ```typescript
629
+ * const data = new Uint8Array([255, 128, 64]);
630
+ * const encoded = base64.encode(data);
631
+ * console.log(encoded);
632
+ *
633
+ * const decoded = base64.decode(encoded);
634
+ * console.log(decoded); // Uint8Array [255, 128, 64]
635
+ * ```
636
+ *
637
+ * @example Text encoding
638
+ * ```typescript
639
+ * const text = "Hello World!";
640
+ * const bytes = new TextEncoder().encode(text);
641
+ * const encoded = base64.encode(bytes);
642
+ * const decoded = base64.decode(encoded);
643
+ * const result = new TextDecoder().decode(decoded);
644
+ * console.log(result); // "Hello World!"
645
+ * ```
646
+ *
647
+ * @group Binary
648
+ */
649
+ declare const base64: Base64Encoding;
650
+ /**
651
+ * Base64 encoder/decoder for binary data
652
+ *
653
+ * @example Basic usage
654
+ * ```typescript
655
+ * const data = new Uint8Array([255, 128, 64]);
656
+ * const encoded = base64url.encode(data);
657
+ * console.log(encoded);
658
+ *
659
+ * const decoded = base64url.decode(encoded);
660
+ * console.log(decoded); // Uint8Array [255, 128, 64]
661
+ * ```
662
+ *
663
+ * @example Text encoding
664
+ * ```typescript
665
+ * const text = "Hello World!";
666
+ * const bytes = new TextEncoder().encode(text);
667
+ * const encoded = base64url.encode(bytes);
668
+ * const decoded = base64url.decode(encoded);
669
+ * const result = new TextDecoder().decode(decoded);
670
+ * console.log(result); // "Hello World!"
671
+ * ```
672
+ *
673
+ * @group Binary
674
+ */
675
+ declare const base64url: Base64Encoding;
676
+
481
677
  type Base64ToBytesOptions = {
482
678
  /**
483
679
  * Encoding type
@@ -3819,7 +4015,13 @@ declare function createDeepCloneWith(customizer: WithCustomizerValue): <T>(value
3819
4015
  declare function isCustomizerFactory(value: unknown): value is WithCustomizerFactory;
3820
4016
  declare function createCustomizer(fn: WithCustomizer): WithCustomizer;
3821
4017
  declare function createCustomizerFactory(fn: (...args: any[]) => WithCustomizer): WithCustomizerFactory;
3822
- declare function createSecureCustomizer(properties: string[]): WithCustomizerFactory;
4018
+ interface SecureCustomizerOptions {
4019
+ /**
4020
+ * @default true
4021
+ */
4022
+ normalizeError?: boolean;
4023
+ }
4024
+ declare function createSecureCustomizer(properties: string[], opts?: SecureCustomizerOptions): WithCustomizerFactory;
3823
4025
 
3824
4026
  /**
3825
4027
  * Recursively assigns default properties.
@@ -4660,7 +4862,216 @@ declare class SimpleEventEmitter<T extends SimpleEventMap<T> = SimpleDefaultEven
4660
4862
  on<K>(eventName: Key<K, T>, listener: Listener1<K, T>): this;
4661
4863
  once<K>(eventName: Key<K, T>, listener: Listener1<K, T>): this;
4662
4864
  off<K>(eventName: Key<K, T>, listener: Listener1<K, T>): this;
4663
- removeAllListeners(eventName?: Key<unknown, T>): this;
4865
+ removeAllListeners<K>(eventName?: Key<K, T>): this;
4866
+ }
4867
+
4868
+ /**
4869
+ * Configuration options for creating a ResourcePool instance.
4870
+ * @template T The type of resource being pooled
4871
+ */
4872
+ interface ResourcePoolOptions<T = unknown> {
4873
+ /** Maximum number of resources that can exist in the pool */
4874
+ poolSize: number;
4875
+ /**
4876
+ * Whether to automatically create resources when needed, up to poolSize limit.
4877
+ * If false, resources must be pre-created or acquired requests will queue.
4878
+ * @default false
4879
+ */
4880
+ auto?: boolean;
4881
+ /** Factory function to create new resources */
4882
+ createResource: () => Awaitable<T>;
4883
+ /** Optional cleanup function called when destroying resources */
4884
+ destroyResource?: (resource: T) => Awaitable<void>;
4885
+ }
4886
+ type ResourcePoolEventMap = {
4887
+ error: [error: Error];
4888
+ };
4889
+ /**
4890
+ * A generic resource pool that manages the lifecycle of expensive resources.
4891
+ *
4892
+ * ResourcePool provides a way to:
4893
+ * - Limit the number of concurrent resources (e.g., database connections, file handles)
4894
+ * - Reuse resources to avoid creation/destruction overhead
4895
+ * - Queue requests when all resources are in use
4896
+ * - Automatically create resources on demand (when auto mode is enabled)
4897
+ * - Gracefully handle resource cleanup and pool destruction
4898
+ *
4899
+ * @template T The type of resource being pooled
4900
+ *
4901
+ * @example
4902
+ * ```typescript
4903
+ * // Database connection pool
4904
+ * const dbPool = new ResourcePool({
4905
+ * poolSize: 10,
4906
+ * auto: true,
4907
+ * createResource: () => createDatabaseConnection(),
4908
+ * destroyResource: (conn) => conn.close()
4909
+ * });
4910
+ *
4911
+ * // Acquire and use a connection
4912
+ * const conn = await dbPool.acquire();
4913
+ * try {
4914
+ * const result = await conn.query('SELECT * FROM users');
4915
+ * return result;
4916
+ * } finally {
4917
+ * dbPool.release(conn);
4918
+ * }
4919
+ * ```
4920
+ *
4921
+ * @group Promise
4922
+ */
4923
+ declare class ResourcePool<T = unknown> extends SimpleEventEmitter<ResourcePoolEventMap> {
4924
+ private readonly poolSize;
4925
+ private readonly auto;
4926
+ private readonly createResource;
4927
+ private readonly destroyResource?;
4928
+ private readonly state;
4929
+ /**
4930
+ * Creates a new ResourcePool instance.
4931
+ *
4932
+ * @param options Configuration options for the pool
4933
+ *
4934
+ * @example
4935
+ * ```typescript
4936
+ * const pool = new ResourcePool({
4937
+ * poolSize: 5,
4938
+ * auto: true,
4939
+ * createResource: async () => new DatabaseConnection(),
4940
+ * destroyResource: async (conn) => conn.close()
4941
+ * });
4942
+ * ```
4943
+ */
4944
+ constructor({ poolSize, auto, createResource, destroyResource, }: ResourcePoolOptions<T>);
4945
+ /**
4946
+ * Whether the pool is idle (no resources currently in use).
4947
+ * Useful for determining if it's safe to destroy the pool.
4948
+ */
4949
+ get isIdle(): boolean;
4950
+ /** Number of resources currently available for acquisition */
4951
+ get availableCount(): number;
4952
+ /** Number of resources currently in use */
4953
+ get usedCount(): number;
4954
+ /** Maximum number of resources this pool can manage */
4955
+ get size(): number;
4956
+ /**
4957
+ * Acquires a resource from the pool.
4958
+ *
4959
+ * This method will:
4960
+ * 1. Return an available resource immediately if one exists
4961
+ * 2. Create a new resource if auto mode is enabled and under the pool limit
4962
+ * 3. Queue the request and wait if no resources are available
4963
+ *
4964
+ * @returns Promise that resolves to an acquired resource
4965
+ * @throws Error if the pool is destroyed while waiting (when rejectAcquires is true)
4966
+ *
4967
+ * @example
4968
+ * ```typescript
4969
+ * const resource = await pool.acquire();
4970
+ * try {
4971
+ * // Use the resource
4972
+ * await resource.doSomething();
4973
+ * } finally {
4974
+ * pool.release(resource); // Always release in finally block
4975
+ * }
4976
+ * ```
4977
+ */
4978
+ acquire(): Promise<T>;
4979
+ /**
4980
+ * Returns a resource to the pool, making it available for reuse.
4981
+ *
4982
+ * The resource will be made available to the next queued acquisition request,
4983
+ * or returned to the available pool if no requests are pending.
4984
+ *
4985
+ * @param resource The resource to return to the pool
4986
+ *
4987
+ * @example
4988
+ * ```typescript
4989
+ * const resource = await pool.acquire();
4990
+ * try {
4991
+ * // Use resource...
4992
+ * } finally {
4993
+ * pool.release(resource); // Always release when done
4994
+ * }
4995
+ * ```
4996
+ *
4997
+ * @remarks
4998
+ * - Safe to call multiple times with the same resource (idempotent)
4999
+ * - Only resources that were acquired from this pool should be released
5000
+ * - Triggers drain completion if this was the last resource in use
5001
+ */
5002
+ release(resource: T): void;
5003
+ /**
5004
+ * Manually add a resource to the pool.
5005
+ *
5006
+ * @param resource The resource to return to the pool
5007
+ *
5008
+ * @throws Error if resource already exists in the pool.
5009
+ * @throws Error if size reached.
5010
+ */
5011
+ add(resource: T): void;
5012
+ /**
5013
+ * Waits for all currently acquired resources to be released.
5014
+ *
5015
+ * This is useful for graceful shutdown scenarios where you want to ensure
5016
+ * all work is completed before destroying the pool.
5017
+ *
5018
+ * @returns Promise that resolves when all resources are returned to the pool
5019
+ *
5020
+ * @example
5021
+ * ```typescript
5022
+ * // Graceful shutdown
5023
+ * console.log('Waiting for all connections to be released...');
5024
+ * await pool.drain();
5025
+ * console.log('All connections released, safe to destroy pool');
5026
+ * await pool.destroy();
5027
+ * ```
5028
+ *
5029
+ * @remarks
5030
+ * - Resolves immediately if no resources are currently in use
5031
+ * - Multiple drain calls can be made concurrently; they will all resolve together
5032
+ * - Does not prevent new acquisitions; use destroy() to prevent new usage
5033
+ */
5034
+ drain(): Promise<void>;
5035
+ /**
5036
+ * Destroys the pool and all its resources.
5037
+ *
5038
+ * This method will:
5039
+ * 1. Wait for all resources to be released (drain)
5040
+ * 2. Optionally reject any pending acquisition requests
5041
+ * 3. Call destroyResource() on all available resources
5042
+ * 4. Clean up internal state
5043
+ *
5044
+ * @param rejectAcquires Whether to reject pending acquire() requests with an error
5045
+ * If false, pending requests will remain queued indefinitely
5046
+ * @returns Promise that resolves when destruction is complete
5047
+ *
5048
+ * @example
5049
+ * ```typescript
5050
+ * // Graceful shutdown - let pending requests complete
5051
+ * await pool.destroy(false);
5052
+ *
5053
+ * // Immediate shutdown - reject pending requests
5054
+ * await pool.destroy(true);
5055
+ * ```
5056
+ *
5057
+ * @remarks
5058
+ * - Safe to call multiple times; subsequent calls will wait for the first to complete
5059
+ * - The pool cannot be used after destruction
5060
+ * - Resources currently in use will not be force-destroyed; drain() is called first
5061
+ * - If destroyResource was not provided, resources are simply discarded
5062
+ */
5063
+ destroy(rejectAcquires?: boolean): Promise<void>;
5064
+ private tryGetAvailableResource;
5065
+ private tryCreateAutoResource;
5066
+ private enqueueAcquireRequest;
5067
+ private moveResourceToAvailable;
5068
+ private processNextAcquireRequest;
5069
+ private checkForDrainCompletion;
5070
+ private enqueueDestroyRequest;
5071
+ private rejectPendingAcquires;
5072
+ private destroyAllResources;
5073
+ private resetState;
5074
+ private resolveDestroyQueue;
4664
5075
  }
4665
5076
 
4666
5077
  /**
@@ -5233,4 +5644,4 @@ declare function wrapText(value: string, maxLength?: number): string;
5233
5644
  */
5234
5645
  declare function toError<T>(value: T, unknownMessage?: string): T extends Error ? T : Error;
5235
5646
 
5236
- export { type AnyFunction, AppError, type AppErrorOptions, type ArgumentsType, type Arrayable, AsyncIterableQueue, type Awaitable, type Base64ToBytesOptions, BrowserAssertionError, type BytesToBase64Options, CancellablePromise, type CatchErrorResult, Color, type ColorChannels, ColorParser, type Data, type DateObject, type DateObjectInput, type DebouncedFunction, type DeepPartial, type DeepReadonly, type Defer, instance as EJSON, EJSON as EJSONInstance, EJSONStream, type EJSONStreamOptions, type EJSONStreamOptionsWithPayload, type EJSONType, type EnvParser, type ExecResult, type ExecResultToSkip, type ExecResultToSuccess, type ExecSkip, type ExecSuccess, FindMean, FixedMap, FixedWeakMap, type Fn, type FormatMoney, type FormatNumber, type FunctionArgs, type GenericObject, type IfAny, type IsAny, type LiteralUnion, type Logger, LruCache, type Nothing, type OverwriteWith, type Prettify, type Primitive, type PromisifyFn, Queue, type RandomizerOptions, type RetryOnErrorConfig, type SelectOptionItem, type SelectOptions, type SimpleDefaultEventMap, SimpleEventEmitter, type SimpleEventMap, SortedArray, type SortedArrayCompareFn, _default as TWEMOJI_REGEX, type ThemeConfig, type ThrottledFunction, TimeBucket, type TimeBucketOptions, type TimeObject, type TimeObjectInput, TimeSpan, type TimeSpanUnit, type TimeString, type TimeValue, type TimestampMsInput, type TypeOf, type TypeOfMap, type ValuesOfObject, type WithCache, type WithCacheBucketBatchOptions, type WithCacheBucketOptions, type WithCacheFixedOptions, type WithCacheLruOptions, type WithCacheOptions, type WithCachePointer, type WithCacheResult, type WithCacheStorage, type WithCustomizer, type WithCustomizerFactory, type WithCustomizerValue, type WrrItem, alpha, arrayable, assert, asyncFilter, asyncFind, asyncForEach, asyncMap, avg, avgCircular, base64ToBytes, bigIntBytes, bigIntFromBytes, blendColors, buildCssColor, bytesToBase64, cache, cacheBucket, cacheFixed, cacheLRU, camelCase, capitalize, captureStackTrace, catchError, channelsToHSL, channelsToHex, channelsToRGB, checkBitmask, chunk, chunkSeries, clamp, cleanEmpty, cleanObject, colorToChannels, compareBytes, concatenateBytes, contrastRatio, convertToUnit, crc32, createCustomizer, createCustomizerFactory, createDateObject, createDeepCloneWith, createEJSON, createEJSONStream, createEnvParser, createRandomizer, createSecureCustomizer, createTimeObject, createTimeSpan, createWithCache, cssVariable, dateInDays, dateInSeconds, debounce, deepAssign, deepClone, deepCloneWith, deepDefaults, deepFreeze, def, defer, delay, difference, dropCache, env, escapeHtml, escapeNumeric, escapeRegExp, fastIdle, fastIdlePromise, fastRaf, findMean, flagsToMap, flatten, formatMoney, formatNumber, get, getFileExtension, getFileName, getInitials, getMostSpecificPaths, getRandomInt, getRandomTime, getWords, groupBy, has, hasOwn, hasProtocol, hex, hexToChannels, hmToSeconds, hslToChannels, humanFileSize, humanize, interpolateColor, intersection, isBigInt, isBoolean, isCached, isClient, isColorChannels, isCustomizerFactory, isDate, isDateObject, isDef, isEmpty, isEqual, isError, isFunction, isInfinity, isMap, isNullOrUndefined, isNumber, isObject, isOneEmoji, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isSkip, isString, isSuccess, isSymbol, isTimeObject, isTimeString, isTimeValue, isValidWeekDay, isWeakMap, isWeakSet, isWithCache, isoToFlagEmoji, kebabCase, keyBy, logger, loggerSetLevel, lowerCase, luminance, maskingEmail, maskingPhone, maskingWords, nextTickIteration, noop, objectId, omit, omitPrefixed, orderBy, parseAllNumbers, parseAlpha, parsePercentage, percentOf, pick, pickPrefixed, qs, rafPromise, randomString, removeVS16s, retryOnError, rgbToChannels, round2digits, secondsToHm, set, shuffle, snakeCase, sprintf, startCase, strAssign, sum, throttle, timeFromMinutes, timeStringify, timeToMinutes, timeout, timestamp, timestampMs, timestampToDate, tintedTextColor, toError, toMap, truncate, typeOf, uint16ToUint8, uint32ToUint8, uint8ToUint16, uint8ToUint32, unflatten, union, uniq, uniqBy, unset, weeksInYear, weightedRoundRobin, withCache, withCacheBucket, withCacheBucketBatch, withCacheFixed, withCacheLRU, withDeepClone, withPointerCache, wrapText };
5647
+ export { type AnyFunction, AppError, type AppErrorOptions, type ArgumentsType, type Arrayable, AsyncIterableQueue, type Awaitable, type Base64ToBytesOptions, type BaseX, BrowserAssertionError, type BytesToBase64Options, CancellablePromise, type CatchErrorResult, Color, type ColorChannels, ColorParser, type Data, type DateObject, type DateObjectInput, type DebouncedFunction, type DeepPartial, type DeepReadonly, type Defer, instance as EJSON, EJSON as EJSONInstance, EJSONStream, type EJSONStreamOptions, type EJSONStreamOptionsWithPayload, type EJSONType, type EnvParser, type ExecResult, type ExecResultToSkip, type ExecResultToSuccess, type ExecSkip, type ExecSuccess, FindMean, FixedMap, FixedWeakMap, type Fn, type FormatMoney, type FormatNumber, type FunctionArgs, type GenericObject, type IfAny, type IsAny, type LiteralUnion, type Logger, LruCache, type Nothing, type OverwriteWith, type Prettify, type Primitive, type PromisifyFn, Queue, type RandomizerOptions, ResourcePool, type ResourcePoolEventMap, type ResourcePoolOptions, type RetryOnErrorConfig, type SecureCustomizerOptions, type SelectOptionItem, type SelectOptions, type SimpleDefaultEventMap, SimpleEventEmitter, type SimpleEventMap, SortedArray, type SortedArrayCompareFn, _default as TWEMOJI_REGEX, type ThemeConfig, type ThrottledFunction, TimeBucket, type TimeBucketOptions, type TimeObject, type TimeObjectInput, TimeSpan, type TimeSpanUnit, type TimeString, type TimeValue, type TimestampMsInput, type TypeOf, type TypeOfMap, type ValuesOfObject, type WithCache, type WithCacheBucketBatchOptions, type WithCacheBucketOptions, type WithCacheFixedOptions, type WithCacheLruOptions, type WithCacheOptions, type WithCachePointer, type WithCacheResult, type WithCacheStorage, type WithCustomizer, type WithCustomizerFactory, type WithCustomizerValue, type WrrItem, alpha, arrayable, assert, asyncFilter, asyncFind, asyncForEach, asyncMap, avg, avgCircular, base62, base62Fast, base64, base64ToBytes, base64url, basex, bigIntBytes, bigIntFromBytes, blendColors, buildCssColor, bytesToBase64, cache, cacheBucket, cacheFixed, cacheLRU, camelCase, capitalize, captureStackTrace, catchError, channelsToHSL, channelsToHex, channelsToRGB, checkBitmask, chunk, chunkSeries, clamp, cleanEmpty, cleanObject, colorToChannels, compareBytes, concatenateBytes, contrastRatio, convertToUnit, crc32, createCustomizer, createCustomizerFactory, createDateObject, createDeepCloneWith, createEJSON, createEJSONStream, createEnvParser, createRandomizer, createSecureCustomizer, createTimeObject, createTimeSpan, createWithCache, cssVariable, dateInDays, dateInSeconds, debounce, deepAssign, deepClone, deepCloneWith, deepDefaults, deepFreeze, def, defer, delay, difference, dropCache, env, escapeHtml, escapeNumeric, escapeRegExp, fastIdle, fastIdlePromise, fastRaf, findMean, flagsToMap, flatten, formatMoney, formatNumber, get, getFileExtension, getFileName, getInitials, getMostSpecificPaths, getRandomInt, getRandomTime, getWords, groupBy, has, hasOwn, hasProtocol, hex, hexToChannels, hmToSeconds, hslToChannels, humanFileSize, humanize, interpolateColor, intersection, isBigInt, isBoolean, isCached, isClient, isColorChannels, isCustomizerFactory, isDate, isDateObject, isDef, isEmpty, isEqual, isError, isFunction, isInfinity, isMap, isNullOrUndefined, isNumber, isObject, isOneEmoji, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isSkip, isString, isSuccess, isSymbol, isTimeObject, isTimeString, isTimeValue, isValidWeekDay, isWeakMap, isWeakSet, isWithCache, isoToFlagEmoji, kebabCase, keyBy, logger, loggerSetLevel, lowerCase, luminance, maskingEmail, maskingPhone, maskingWords, nextTickIteration, noop, objectId, omit, omitPrefixed, orderBy, parseAllNumbers, parseAlpha, parsePercentage, percentOf, pick, pickPrefixed, qs, rafPromise, randomString, removeVS16s, retryOnError, rgbToChannels, round2digits, secondsToHm, set, shuffle, snakeCase, sprintf, startCase, strAssign, sum, throttle, timeFromMinutes, timeStringify, timeToMinutes, timeout, timestamp, timestampMs, timestampToDate, tintedTextColor, toError, toMap, truncate, typeOf, uint16ToUint8, uint32ToUint8, uint8ToUint16, uint8ToUint32, unflatten, union, uniq, uniqBy, unset, weeksInYear, weightedRoundRobin, withCache, withCacheBucket, withCacheBucketBatch, withCacheFixed, withCacheLRU, withDeepClone, withPointerCache, wrapText };