@zelgadis87/utils-core 4.6.1 → 4.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esbuild/index.cjs +2965 -0
- package/esbuild/index.cjs.map +7 -0
- package/esbuild/index.mjs +2800 -0
- package/esbuild/index.mjs.map +7 -0
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/small-date@2.0.1/node_modules/small-date/lib/format.js", "../../../node_modules/.pnpm/small-date@2.0.1/node_modules/small-date/lib/index.js", "../src/index.ts", "../src/async/Deferred.ts", "../src/async/RateThrottler.ts", "../src/async/Semaphore.ts", "../src/utils/nulls.ts", "../src/utils/arrays/groupBy.ts", "../src/utils/arrays/indexBy.ts", "../src/utils/arrays/statistics.ts", "../src/utils/functions/constant.ts", "../src/utils/functions/iff.ts", "../src/utils/functions.ts", "../src/utils/arrays/uniqBy.ts", "../src/utils/arrays.ts", "../src/utils/booleans.ts", "../src/utils/errors/withTryCatch.ts", "../src/utils/errors.ts", "../src/utils/json.ts", "../src/utils/numbers/round.ts", "../src/utils/numbers.ts", "../src/utils/promises.ts", "../src/utils/random.ts", "../src/utils/records/entries.ts", "../src/utils/records.ts", "../src/utils/strings/StringParts.ts", "../src/utils/strings.ts", "../src/lazy/Lazy.ts", "../src/lazy/LazyAsync.ts", "../src/time/TimeInstant.ts", "../src/time/TimeUnit.ts", "../src/time/TimeBase.ts", "../src/time/TimeDuration.ts", "../src/time/TimeInstantBuilder.ts", "../src/Logger.ts", "../src/Optional.ts", "../src/sorting/ComparisonChain.ts", "../src/sorting/Sorter.ts", "../src/time/RandomTimeDuration.ts", "../src/time/TimeFrequency.ts", "../src/time/TimeRange.ts", "../src/upgrade/errors.ts", "../src/upgrade/getTransitionsPath.ts", "../src/upgrade/DataUpgrader.ts"],
|
|
4
|
+
"sourcesContent": ["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = format;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar PATTERN_REGEX = /(M|y|d|D|h|H|m|s|S|G|Z|P|a)+/g;\nvar ESCAPE_REGEX = /\\\\\"|\"((?:\\\\\"|[^\"])*)\"|(\\+)/g;\nvar optionNames = {\n y: 'year',\n M: 'month',\n d: 'day',\n D: 'weekday',\n S: 'fractionalSecondDigits',\n G: 'era',\n Z: 'timeZoneName',\n P: 'dayPeriod',\n a: 'hour12',\n h: 'hour',\n H: 'hour',\n m: 'minute',\n s: 'second'\n};\nvar values = {\n y: ['numeric', '2-digit', undefined, 'numeric'],\n M: ['narrow', '2-digit', 'short', 'long'],\n d: ['numeric', '2-digit'],\n D: ['narrow', 'short', 'long'],\n S: [1, 2, 3],\n G: ['narrow', 'short', 'long'],\n Z: ['short', 'long'],\n P: ['narrow', 'short', 'long'],\n a: [true],\n h: [\"numeric\", \"2-digit\"],\n H: [\"numeric\", \"2-digit\"],\n m: [\"numeric\", \"2-digit\"],\n s: [\"numeric\", \"2-digit\"]\n};\n\nfunction padIf(condition, value, length) {\n return condition && length === 2 && value / 10 < 1 ? '0' + value : value;\n}\n\nfunction formatType(date, type, length) {\n var _options;\n\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n locale = _ref.locale,\n timeZone = _ref.timeZone;\n\n var option = optionNames[type];\n var value = values[type][length - 1];\n\n if (!value) {\n return;\n }\n\n var options = (_options = {}, _defineProperty(_options, option, value), _defineProperty(_options, \"timeZone\", timeZone), _options);\n\n if (type === 'a') {\n return Intl.DateTimeFormat(locale, _objectSpread(_objectSpread({}, options), {}, {\n hour: 'numeric'\n })).formatToParts(date).pop().value;\n }\n\n if (type === 'G' || type === 'Z') {\n return Intl.DateTimeFormat(locale, options).formatToParts(date).pop().value;\n }\n\n if (type === 'H' || type === 'h') {\n return Intl.DateTimeFormat('en-GB', _objectSpread(_objectSpread({}, options), {}, {\n hourCycle: type === \"H\" ? \"h23\" : \"h11\"\n })).format(date).toLocaleLowerCase().replace(\" am\", \"\").replace(\" pm\", \"\");\n }\n\n return padIf(['m', 's'].includes(type) && value === '2-digit', Intl.DateTimeFormat(locale, options).format(date), 2);\n}\n\nfunction format(date, pattern, config) {\n return pattern.split(ESCAPE_REGEX).filter(function (sub) {\n return sub !== undefined;\n }).map(function (sub, index) {\n // keep escaped strings as is\n if (index % 2 !== 0) {\n return sub;\n }\n\n return sub.replace(PATTERN_REGEX, function (match) {\n var type = match.charAt(0);\n return formatType(date, type, match.length, config) || match;\n });\n }).join('');\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.format = undefined;\n\nvar _format = require(\"./format\");\n\nvar _format2 = _interopRequireDefault(_format);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nexports.format = _format2[\"default\"];", "\r\nexport * from './async/index.js';\r\nexport * from './lazy/index.js';\r\nexport * from './Logger.js';\r\nexport * from './Optional.js';\r\nexport * from './sorting/index.js';\r\nexport * from './time/index.js';\r\nexport * from './upgrade/index.js';\r\nexport * from './utils/index.js';\r\n\r\n", "import { TFunction } from \"../utils/functions.js\";\r\n\r\ntype DeferredInternals<T> = {\r\n\tpromise: Promise<T>;\r\n\tresolve: TFunction<T, void>;\r\n\treject: TFunction<Error, void>;\r\n}\r\n\r\nexport interface ICancelable {\r\n\tcancel(): void;\r\n}\r\nexport interface ICancelablePromise<T> extends Promise<T>, ICancelable { }\r\n\r\nexport class DeferredCanceledError extends Error {\r\n\tconstructor() {\r\n\t\tsuper( \"Execution canceled\" );\r\n\t}\r\n}\r\n\r\nexport class Deferred<T = void> implements ICancelablePromise<T> {\r\n\r\n\tprivate _pending: boolean;\r\n\tprivate readonly _internals: DeferredInternals<T>;\r\n\r\n\tpublic get pending(): boolean { return this._pending; }\r\n\r\n\t/** @deprecated: Use resolve, then and catch directly; use asPromise to return a promise type. */\r\n\tpublic get promise(): Promise<T> { return this._internals.promise; }\r\n\r\n\tconstructor() {\r\n\t\tthis._pending = true;\r\n\t\tthis._internals = this.createInternals();\r\n\t}\r\n\r\n\tpublic resolve( val: T ): void {\r\n\t\tif ( !this._pending )\r\n\t\t\tthrow new Error( 'Illegal state exception' );\r\n\t\tthis.resolveIfPending( val );\r\n\t}\r\n\r\n\tpublic reject( reason: Error ): void {\r\n\t\tif ( !this._pending )\r\n\t\t\tthrow new Error( 'Illegal state exception' );\r\n\t\tthis.rejectIfPending( reason );\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tif ( !this._pending )\r\n\t\t\tthrow new Error( 'Illegal state exception' );\r\n\t\tthis.cancelIfPending();\r\n\t}\r\n\r\n\tpublic resolveIfPending( val: T ): void {\r\n\t\tif ( !this._pending )\r\n\t\t\treturn;\r\n\t\tthis._pending = false;\r\n\t\tthis._internals.resolve( val );\r\n\t}\r\n\r\n\tpublic rejectIfPending( reason: Error ): void {\r\n\t\tif ( !this._pending )\r\n\t\t\treturn;\r\n\t\tthis._pending = false;\r\n\t\tthis._internals.reject( reason );\r\n\t}\r\n\r\n\tpublic cancelIfPending(): void {\r\n\t\tif ( !this._pending )\r\n\t\t\treturn;\r\n\t\tthis.reject( new DeferredCanceledError() );\r\n\t}\r\n\r\n\r\n\tpublic then<R = T, S = T>( onFulfilled: ( ( value: T ) => R | PromiseLike<R> ) | null | undefined, onRejected?: ( ( reason: Error ) => S | PromiseLike<S> ) | null | undefined ): Promise<R | S> {\r\n\t\treturn this._internals.promise.then( onFulfilled, onRejected );\r\n\t}\r\n\r\n\tpublic catch<R = T>( onRejected: ( ( reason: Error ) => R | PromiseLike<R> ) | null | undefined ): Promise<T | R> {\r\n\t\treturn this._internals.promise.catch( onRejected );\r\n\t}\r\n\r\n\tpublic finally( onfinally: ( () => void ) | null | undefined ): Promise<T> {\r\n\t\treturn this._internals.promise.finally( onfinally );\r\n\t}\r\n\r\n\tpublic asPromise(): Promise<T> {\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic asCancelablePromise(): ICancelablePromise<T> {\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected createInternals() {\r\n\t\tlet resolveSelf: ( value: T ) => void, rejectSelf: ( reason: Error ) => void;\r\n\t\tconst promise = new Promise<T>( ( resolve, reject ) => {\r\n\t\t\tresolveSelf = resolve;\r\n\t\t\trejectSelf = reject;\r\n\t\t} );\r\n\t\treturn {\r\n\t\t\tpromise,\r\n\t\t\tresolve: resolveSelf!,\r\n\t\t\treject: rejectSelf!,\r\n\t\t};\r\n\t}\r\n\r\n\tget [ Symbol.toStringTag ]() {\r\n\t\treturn '[object Deferred]';\r\n\t}\r\n\r\n}\r\n\r\nexport default Deferred;\r\n", "import { TFunction, TimeInstant, TPromisable } from \"..\";\r\nimport TimeFrequency from \"../time/TimeFrequency\";\r\nimport Deferred from \"./Deferred\";\r\n\r\ntype TPromiseFactory<T, R> = TFunction<T, Promise<R>>;\r\n\r\nexport class RateThrottler {\r\n\r\n\tprivate readonly _availableSlots: TimeInstant[];\r\n\tprivate readonly _waitingRequests: Deferred<void>[];\r\n\r\n\tconstructor(\r\n\t\tprivate readonly _frequency: TimeFrequency\r\n\t) {\r\n\t\tconst initialOffset = this.cooldown.divideBy( _frequency.times );\r\n\t\tthis._availableSlots = new Array( _frequency.times ).fill( 0 ).map( ( _, i ) => TimeInstant.now().addMs( i * initialOffset.ms ) );\r\n\t\tthis._waitingRequests = [];\r\n\t}\r\n\r\n\tpublic get cooldown() {\r\n\t\treturn this._frequency.period;\r\n\t}\r\n\r\n\tpublic async execute<T>( fn: TPromiseFactory<void, T> ) {\r\n\t\tconst wrappedFn = async () => {\r\n\t\t\tconst slot = this._availableSlots.shift()!;\r\n\t\t\ttry {\r\n\t\t\t\treturn slot.promise().then( () => fn() );\r\n\t\t\t} finally {\r\n\t\t\t\tthis._availableSlots.push( TimeInstant.now().addDuration( this.cooldown ) );\r\n\t\t\t\tif ( this._waitingRequests.length > 0 ) this._waitingRequests.shift()!.resolve();\r\n\t\t\t}\r\n\t\t};\r\n\t\tif ( this._availableSlots.length > 0 ) {\r\n\t\t\treturn wrappedFn();\r\n\t\t} else {\r\n\t\t\t// Semaphore implementation using promises.\r\n\t\t\tconst waitingRequest = new Deferred();\r\n\t\t\tthis._waitingRequests.push( waitingRequest );\r\n\t\t\treturn waitingRequest.then<T, T>( () => wrappedFn() );\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default RateThrottler;\r\n\r\nexport function throttle<TParams extends unknown[], R>( fn: (...params: TParams) => TPromisable<R>, frequence: TimeFrequency ): (...params: TParams) => Promise<R> {\r\n\tconst semaphore = new RateThrottler( frequence );\r\n\treturn (...t: TParams): Promise<R> => {\r\n\t\treturn semaphore.execute<R>( async () => fn( ...t ) );\r\n\t};\r\n}\r\n", "import { TAsyncProducer, TProducer, TimeDuration } from \"..\";\r\nimport Deferred from \"./Deferred\";\r\n\r\nexport class Semaphore {\r\n\r\n\tprivate readonly _queuedRequests: Deferred<void>[];\r\n\tprivate _inProgress = 0;\r\n\r\n\t/** Creates a new Semaphore with a single slot. */\r\n\tpublic constructor();\r\n\t/** Creates a new Semaphore with the specified amounts of slots. */\r\n\tpublic constructor( availableSlots: number );\r\n\tpublic constructor(\r\n\t\tprivate _availableSlots: number = 1\r\n\t) {\r\n\t\tthis._queuedRequests = [];\r\n\t}\r\n\r\n\tprivate async _awaitSlot(): Promise<void> {\r\n\t\tif ( this._availableSlots > 0 ) {\r\n\t\t\tthis._availableSlots -= 1;\r\n\t\t\tthis._inProgress += 1;\r\n\t\t\treturn void 0;\r\n\t\t} else {\r\n\t\t\t// Semaphore implementation using promises.\r\n\t\t\tconst deferred = new Deferred();\r\n\t\t\tthis._queuedRequests.push( deferred );\r\n\t\t\treturn deferred.asPromise();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _releaseSlot() {\r\n\t\tconst waitingSlotToResolve = this._queuedRequests.shift();\r\n\t\tif ( waitingSlotToResolve ) {\r\n\t\t\t// Let the next request start.\r\n\t\t\twaitingSlotToResolve.resolve();\r\n\t\t} else {\r\n\t\t\t// Free a slot.\r\n\t\t\tthis._availableSlots += 1;\r\n\t\t\tthis._inProgress -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async execute<T>( fn: TAsyncProducer<T> | TProducer<T>, cooldown: TimeDuration = TimeDuration.ZERO ) {\r\n\t\treturn this._awaitSlot().then( fn ).finally( () => { void cooldown.delay( () => this._releaseSlot() ); } );\r\n\t}\r\n\r\n\tpublic get availableSlots() {\r\n\t\treturn this._availableSlots;\r\n\t}\r\n\r\n\tpublic get queueSize() {\r\n\t\treturn this._queuedRequests.length;\r\n\t}\r\n\r\n\tpublic get inProgressSize() {\r\n\t\treturn this._inProgress;\r\n\t}\r\n\r\n}\r\n\r\nexport default Semaphore;\r\n", "import { TConsumer, TFunction } from \"./functions.js\";\r\n\r\nexport type TMaybe<T> = T | null;\r\n\r\nexport function ensureDefined<T>( v: T, name = 'value' ): T {\r\n\tif ( isDefined( v ) )\r\n\t\treturn v;\r\n\tthrow new Error( 'Expected ' + name + ' to be defined, got: ' + v );\r\n}\r\n\r\nexport function isDefined<T>( x: T | null | undefined ): x is T {\r\n\treturn x !== null && x !== undefined;\r\n}\r\n\r\nexport function isNullOrUndefined( x: unknown ): x is null | undefined {\r\n\treturn x === null || x === undefined;\r\n}\r\n\r\nexport function ifDefined<R>( source: TMaybe<R>, callback: TConsumer<R> ): void {\r\n\tif ( isDefined( source ) )\r\n\t\tcallback( source );\r\n}\r\n\r\nexport function mapDefined<R, S>( source: TMaybe<R>, mapper: TFunction<R, S> ): TMaybe<S> {\r\n\tif ( isDefined( source ) )\r\n\t\treturn mapper( source );\r\n\treturn null;\r\n}\r\n\r\nexport function ifNullOrUndefined( source: TMaybe<unknown>, callback: TConsumer<void> ): void {\r\n\tif ( isNullOrUndefined( source ) )\r\n\t\tcallback();\r\n}\r\n", "\r\nimport { TFunction, TKeysOfType, TReadableArray } from \"..\";\r\n\r\nexport function groupByString<V, K extends TKeysOfType<V, string>>( arr: TReadableArray<V>, field: K ): Record<V[ K ] & string, V[]> {\r\n\treturn groupByStringWith( arr, t => t[ field ] as string );\r\n}\r\n\r\nexport function groupByNumber<V, K extends TKeysOfType<V, number>>( arr: TReadableArray<V>, field: K ): Record<V[ K ] & number, V[]> {\r\n\treturn groupByNumberWith( arr, t => t[ field ] as number );\r\n}\r\n\r\nexport function groupByBoolean<V, K extends TKeysOfType<V, boolean>>( arr: TReadableArray<V>, field: K ): Record<\"true\" | \"false\", V[]> {\r\n\treturn groupByBooleanWith( arr, t => t[ field ] as boolean );\r\n}\r\n\r\nexport function groupBySymbol<V, K extends TKeysOfType<V, symbol>>( arr: TReadableArray<V>, field: K ): Record<V[ K ] & symbol, V[]> {\r\n\treturn groupBySymbolWith( arr, t => t[ field ] as symbol );\r\n}\r\n\r\nexport function groupByStringWith<V, K extends string>( arr: TReadableArray<V>, getter: TFunction<V, K> ): Record<K, V[]> {\r\n\treturn doGroupByWith<K, V>( arr, getter );\r\n}\r\n\r\nexport function groupByNumberWith<V, K extends number>( arr: TReadableArray<V>, getter: TFunction<V, K> ): Record<K, V[]> {\r\n\treturn doGroupByWith<K, V>( arr, getter );\r\n}\r\n\r\nexport function groupByBooleanWith<V, K extends boolean>( arr: TReadableArray<V>, getter: TFunction<V, K> ): Record<\"true\" | \"false\", V[]> {\r\n\treturn doGroupByWith<\"true\" | \"false\", V>( arr, item => getter( item ) ? \"true\" : \"false\" );\r\n}\r\n\r\nexport function groupBySymbolWith<V, K extends symbol>( arr: TReadableArray<V>, getter: TFunction<V, K> ): Record<K, V[]> {\r\n\treturn doGroupByWith<K, V>( arr, getter );\r\n}\r\n\r\nfunction doGroupByWith<K extends string | number | symbol, V>( arr: TReadableArray<V>, getter: TFunction<V, K> ): Record<K, V[]> { // TODO[2025-01-03, Native]: Migrate to native @ https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/#object.groupby-and-map.groupby\r\n\treturn [ ...arr ].reduce( ( dict, cur ) => {\r\n\t\tconst key = getter( cur );\r\n\t\tif ( key !== null && key !== undefined ) {\r\n\t\t\tconst arr = dict[ key ] ?? [];\r\n\t\t\tarr.push( cur );\r\n\t\t\tdict[ key ] = arr;\r\n\t\t}\r\n\t\treturn dict;\r\n\t}, {} as Record<K, V[]> );\r\n}\r\n\r\n", "\r\nimport { TFunction, TKeysOfType } from \"..\";\r\n\r\nexport function indexByString<V, K extends TKeysOfType<V, string>>( arr: V[], field: K ): Record<V[K] & string, V> {\r\n\treturn indexByStringWith( arr, t => t[ field ] as string );\r\n}\r\n\r\nexport function indexByNumber<V, K extends TKeysOfType<V, number>>( arr: V[], field: K ): Record<V[K] & number, V> {\r\n\treturn indexByNumberWith( arr, t => t[ field ] as number );\r\n}\r\n\r\nexport function indexBySymbol<V, K extends TKeysOfType<V, symbol>>( arr: V[], field: K ): Record<V[K] & symbol, V> {\r\n\treturn indexBySymbolWith( arr, t => t[ field ] as symbol );\r\n}\r\n\r\nexport function indexByStringWith<V>( arr: V[], getter: TFunction<V, string> ): Record<string, V> {\r\n\treturn doIndexByWith<string, V>( arr, getter );\r\n}\r\n\r\nexport function indexByNumberWith<V>( arr: V[], getter: TFunction<V, number> ): Record<number, V> {\r\n\treturn doIndexByWith<number, V>( arr, getter );\r\n}\r\n\r\nexport function indexBySymbolWith<V>( arr: V[], getter: TFunction<V, symbol> ): Record<symbol, V> {\r\n\treturn doIndexByWith<symbol, V>( arr, getter );\r\n}\r\n\r\nfunction doIndexByWith<K extends string | number | symbol, V>( arr: V[], getter: TFunction<V, K> ): Record<K, V> {\r\n\treturn arr.reduce( ( dict, cur ) => {\r\n\t\tconst key = getter( cur );\r\n\t\tif ( key !== null && key !== undefined )\r\n\t\t\tdict[ key ] = cur;\r\n\t\treturn dict;\r\n\t}, {} as Record<K, V> );\r\n}\r\n\r\n", "import type { TReadableArray } from \"../arrays.js\";\r\n\r\nexport function average( arr: TReadableArray<number> ): number {\r\n\tconst f = 1 / arr.length;\r\n\treturn arr.reduce( ( tot, cur ) => tot + ( cur * f ), 0 );\r\n}\r\n\r\nexport function sum( arr: TReadableArray<number> ): number {\r\n\treturn arr.reduce( ( tot, cur ) => tot + cur, 0 );\r\n}\r\n\r\nexport function sumBy<T>( arr: TReadableArray<T>, getter: ( t: T ) => number ): number {\r\n\treturn sum( arr.map( getter ) );\r\n}\r\n\r\nexport function min( arr: TReadableArray<number> ): number {\r\n\tif ( arr.length === 0 ) throw new Error( 'Cannot calculate value on empty array' );\r\n\treturn arr.reduce( ( min, cur ) => cur < min ? cur : min );\r\n}\r\n\r\nexport function minBy<T>( arr: TReadableArray<T>, getter: ( t: T ) => number ): number {\r\n\treturn min( arr.map( getter ) );\r\n}\r\n\r\nexport function max( arr: TReadableArray<number> ): number {\r\n\tif ( arr.length === 0 ) throw new Error( 'Cannot calculate value on empty array' );\r\n\treturn arr.reduce( ( max, cur ) => cur > max ? cur : max );\r\n}\r\n\r\nexport function maxBy<T>( arr: TReadableArray<T>, getter: ( t: T ) => number ): number {\r\n\treturn max( arr.map( getter ) );\r\n}\r\n", "export function constant<T>( v: T ): () => T { return () => v; }\r\nexport function identity<T>( t: T ) { return t; }\r\nexport default constant;\r\n\r\nexport const constantNull = constant( null );\r\nexport const constantTrue = constant( true );\r\nexport const constantFalse = constant( false );\r\nexport const alwaysTrue = constantTrue;\r\nexport const alwaysFalse = constantFalse;\r\nexport const constantZero = constant( 0 );\r\nexport const constantOne = constant( 1 );\r\n", "import { TPredicate } from \"..\";\r\n\r\ntype TBooleanOrPredicate = boolean | TPredicate<void>;\r\ntype TIff<T> = {\r\n\telseIf<R>( pred: TBooleanOrPredicate, valueIfTrue: R ): TIff<T | R>;\r\n\totherwise<R>( valueIfElse: R ): T | R;\r\n}\r\n\r\nexport function iff<T>( firstPredicate: TBooleanOrPredicate, valueIfTrue: T ): TIff<T> {\r\n\r\n\tif ( firstPredicate === true || ( firstPredicate instanceof Function && firstPredicate() === true ) ) {\r\n\t\tconst ret: TIff<T> = {\r\n\t\t\telseIf: () => ret,\r\n\t\t\totherwise: () => valueIfTrue\r\n\t\t};\r\n\t\treturn ret;\r\n\t} else {\r\n\t\tconst ret: TIff<T> = {\r\n\t\t\telseIf: <R>( elseIf: TBooleanOrPredicate, valueIfElseIfTrue: R ) => iff<R>( elseIf, valueIfElseIfTrue ),\r\n\t\t\totherwise: <R>( valueIfElse: R ) => valueIfElse\r\n\t\t};\r\n\t\treturn ret;\r\n\t}\r\n\r\n}\r\n\r\nexport default iff;\r\n\r\n", "import { constantTrue } from './functions.js';\r\n\r\nexport * from './functions/constant.js';\r\nexport * from './functions/iff.js';\r\n\r\nexport type TFunction<A, R> = ( a: A ) => R;\r\nexport type TTransformer<A, R> = TFunction<A, R>;\r\nexport type TVoidFunction = TFunction<void, void>\r\nexport type TProducer<R> = TFunction<void, R>;\r\nexport type TConsumer<T> = TFunction<T, void>;\r\nexport type TPredicate<T> = TFunction<T, boolean>;\r\nexport type TTypePredicate<T, R extends T> = ( t: T ) => t is R;\r\nexport type TIdentityFunction<T> = TFunction<T, T>;\r\n\r\nexport type TBiFunction<A, B, R> = ( a: A, b: B ) => R;\r\nexport type TBiConsumer<A, B> = TBiFunction<A, B, void>;\r\nexport type TBiPredicate<T> = TBiFunction<T, T, boolean>;\r\nexport type TAccumulator<A, B> = TBiFunction<A, B, A>;\r\n\r\nexport type TAsyncFunction<A, R> = TFunction<A, Promise<R>>;\r\nexport type TAsyncVoidFunction = TAsyncFunction<void, void>\r\nexport type TAsyncProducer<R> = TAsyncFunction<void, R>;\r\nexport type TAsyncConsumer<T> = TAsyncFunction<T, void>;\r\nexport type TAsyncPredicate<T> = TAsyncFunction<T, boolean>;\r\nexport type TAsyncBiFunction<A, B, R> = TBiFunction<A, B, Promise<R>>;\r\nexport type TAsyncBiConsumer<A, B> = TAsyncBiFunction<A, B, void>;\r\nexport type TAsyncBiPredicate<T> = TAsyncBiFunction<T, T, boolean>;\r\n\r\nexport type TAnyFunction<R> = ( ...args: unknown[] ) => R;\r\nexport type TAsyncAnyFunction<R> = ( ...args: unknown[] ) => Promise<R>;\r\n\r\nexport function isFunction( t: unknown ): t is Function { // eslint-disable-line @typescript-eslint/no-unsafe-function-type\r\n\treturn typeof t === 'function';\r\n}\r\n\r\nexport function noop(): void { } // eslint-disable-line @typescript-eslint/no-empty-function\r\n\r\nexport function filterWithTypePredicate<T, R extends T>( filter: TPredicate<T> ): TTypePredicate<T, R> {\r\n\treturn ( t: T ): t is R => filter( t );\r\n}\r\n\r\nexport function not<T>( predicate: TPredicate<T> ): TPredicate<T> {\r\n\treturn ( t: T ) => !predicate( t );\r\n}\r\n\r\nexport function and<T>( a: TPredicate<T>, b: TPredicate<T> ): TPredicate<T>;\r\nexport function and<T>( ...predicates: Array<TPredicate<T>> ): TPredicate<T> {\r\n\tif ( predicates.length === 0 ) return constantTrue;\r\n\telse if ( predicates.length === 1 ) return predicates[ 0 ];\r\n\treturn ( t: T ) => predicates.reduce( ( prev, cur ) => prev ? cur( t ) : false, true );\r\n}\r\n\r\nexport function or<T>( a: TPredicate<T>, b: TPredicate<T> ): TPredicate<T>;\r\nexport function or<T>( ...predicates: Array<TPredicate<T>> ): TPredicate<T> {\r\n\tif ( predicates.length === 0 ) return constantTrue;\r\n\telse if ( predicates.length === 1 ) return predicates[ 0 ];\r\n\treturn ( t: T ) => predicates.reduce( ( prev, cur ) => prev ? true : cur( t ), false );\r\n}\r\n\r\nexport function xor<T>( a: TPredicate<T>, b: TPredicate<T> ): TPredicate<T> {\r\n\treturn ( t: T ) => a( t ) !== b( t );\r\n}\r\n\r\n\r\n", "\r\nimport { TFunction, identity } from \"../functions.js\";\r\n\r\nexport function uniq<T>( arr: T[] ): T[] {\r\n\treturn uniqBy( arr, identity );\r\n}\r\n\r\nexport function uniqBy<T, K>( arr: T[], getter: TFunction<T, K> ): T[] {\r\n\treturn arr.reduce( ( dict, cur ) => {\r\n\t\tconst key = getter( cur );\r\n\t\tif ( dict.keys.includes( key ) ) {\r\n\t\t\treturn dict;\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\tkeys: [ ...dict.keys, key ],\r\n\t\t\t\tvalues: [ ...dict.values, cur ]\r\n\t\t\t};\r\n\t\t}\r\n\t}, { keys: [], values: [] } as { keys: K[], values: T[] } ).values;\r\n}\r\n\r\nexport function uniqByKey<T, K extends keyof T>( arr: T[], key: K ): T[] {\r\n\treturn uniqBy( arr, item => item[ key ] );\r\n}\r\n", "import type { TComparisonFunction } from \"../sorting/index.js\";\r\nimport type { TAccumulator, TBiPredicate, TPredicate, TTransformer } from \"./functions.js\";\r\nimport { isNullOrUndefined, type TMaybe } from \"./nulls.js\";\r\n\r\nexport * from './arrays/groupBy.js';\r\nexport * from './arrays/indexBy.js';\r\nexport * from './arrays/statistics.js';\r\nexport * from './arrays/uniqBy.js';\r\n\r\nexport type TReadableArray<T> = Array<T> | ReadonlyArray<T>;\r\nexport type TArrayable<T> = T | T[];\r\nexport type TEmptyArray = [];\r\n\r\nexport function ensureArray<const T>( t: T | Array<T> | null | undefined ): Array<T> {\r\n\tif ( isNullOrUndefined( t ) ) return [];\r\n\treturn t instanceof Array ? t : [ t ];\r\n}\r\nexport function ensureReadableArray<const T>( t: T | Array<T> | ReadonlyArray<T> | null | undefined ): TReadableArray<T> {\r\n\tif ( isNullOrUndefined( t ) ) return [];\r\n\treturn t instanceof Array ? t : [ t ];\r\n}\r\n\r\nexport function isArray<const T>( t: unknown ): t is Array<T> {\r\n\treturn t instanceof Array;\r\n}\r\n\r\n/**\r\n * Generate a new copy of an array with:\r\n * - the first instance of an item matching the predicate being replaced with the given argument\r\n * - the given argument added as last item of the array if the predicate did not produce a match\r\n * @param arr - the original array of items\r\n * @param item - the item to insert or update\r\n * @param predicate - a function that returns true iff an item is equal to the given argument\r\n * @returns a new copy of the array with the item updated or added in last place\r\n */\r\nexport function upsert<T>( arr: ReadonlyArray<T>, item: T, isEqual: TBiPredicate<T> ): Array<T> {\r\n\tconst index = arr.findIndex( a => isEqual( a, item ) );\r\n\tif ( index === -1 ) {\r\n\t\treturn [ ...arr, item ];\r\n\t} else {\r\n\t\treturn [\r\n\t\t\t...arr.slice( 0, index ),\r\n\t\t\titem,\r\n\t\t\t...arr.slice( index + 1 )\r\n\t\t];\r\n\t}\r\n}\r\n\r\nexport function range( start: number, end: number ): Array<number> {\r\n\tif ( end < start ) throw new Error();\r\n\tlet length = ( end - start ) + 1;\r\n\treturn new Array( length ).fill( 1 ).map( ( _, i ) => start + i );\r\n}\r\n\r\nexport function fill<T>( length: number, value: T ): Array<T> {\r\n\treturn new Array<T>( length ).fill( value );\r\n}\r\n\r\nexport function extendArray<T extends Record<string | number | symbol, unknown>, X extends Record<string | number | symbol, unknown>>( arr: TReadableArray<T>, props: X ): Array<( T & X )> {\r\n\treturn arr.map( ( t: T ) => ( {\r\n\t\t...t,\r\n\t\t...props\r\n\t} ) );\r\n}\r\n\r\nexport function extendArrayWith<T extends Record<string | number | symbol, unknown>, X extends Record<string | number | symbol, unknown>>( arr: TReadableArray<T>, propsFn: ( t: T ) => X ): Array<( T & X )> {\r\n\treturn arr.map( ( t: T ) => ( {\r\n\t\t...t,\r\n\t\t...propsFn( t )\r\n\t} ) );\r\n}\r\n\r\nexport function reverse<T>( arr: TReadableArray<T> ): Array<T> {\r\n\treturn [ ...arr ].reverse();\r\n}\r\n\r\nexport function first<T>( arr: TReadableArray<T>, defaultValue: TMaybe<T> = null ): TMaybe<T> {\r\n\treturn ( arr.length ? arr[ 0 ] : defaultValue );\r\n}\r\nexport function last<T>( arr: TReadableArray<T>, defaultValue: TMaybe<T> = null ): TMaybe<T> {\r\n\treturn ( arr.length ? arr[ arr.length - 1 ] : defaultValue );\r\n}\r\n\r\nexport const head = first;\r\nexport function tail<T>( arr: TReadableArray<T> ): T[] {\r\n\treturn ( arr.length ? arr.slice( 1 ) : [] );\r\n}\r\n\r\nexport function sortedArray<T>( arr: Array<T>, sortFn?: TComparisonFunction<T> | undefined ): Array<T>;\r\nexport function sortedArray<T>( arr: ReadonlyArray<T>, sortFn?: TComparisonFunction<T> | undefined ): ReadonlyArray<T>;\r\nexport function sortedArray<T>( arr: TReadableArray<T>, sortFn?: TComparisonFunction<T> | undefined ) {\r\n\treturn [ ...arr ].sort( sortFn );\r\n}\r\n\r\n/**\r\n * Custom implementation of includes which allows checking for arbitrary items inside the array.\r\n */\r\nexport function includes<T>( arr: TReadableArray<T>, item: unknown, fromIndex?: number ) {\r\n\treturn arr.includes( item as any, fromIndex );\r\n}\r\n\r\nexport function mapTruthys<T, R>( arr: Array<T>, mapper: ( value: T, index: number, array: T[] ) => R | undefined ): Array<R> {\r\n\treturn arr.map( mapper ).filter( value => value !== undefined ) as Array<R>;\r\n}\r\nexport function flatMapTruthys<T, R>( arr: Array<T>, mapper: ( value: T, index: number, array: T[] ) => R | undefined ): Array<R> {\r\n\treturn arr.flatMap( mapper ).filter( value => value !== undefined ) as Array<R>;\r\n}\r\n\r\nexport function filterMap<T, R>( array: T[], filterFn: TPredicate<T>, mapFn: TTransformer<T, R> ): R[] {\r\n\treturn array.filter( filterFn ).map( mapFn );\r\n}\r\n\r\nexport function filterMapReduce<T, U, R>( array: T[], filterFn: TPredicate<T>, mapFn: TTransformer<T, U>, reduceFn: TAccumulator<R, U>, initialValue: R ): R {\r\n\treturn array.filter( filterFn ).map( mapFn ).reduce( reduceFn, initialValue );\r\n}\r\n\r\n/**\r\n * Partitions the given array in two groups, in the first one there will be any and only values of the array that match the given predicate, in the second one there will be any and only values that don't.\r\n * @param arr the array of items\r\n * @param predicate the predicate to use to partition the array\r\n * @returns a tuple, where the first array contains items matching the predicate, and the second array contains items not matching the predicate.\r\n */\r\nexport function partition<T>( arr: T[], predicate: TPredicate<T> ): [ T[], T[] ] {\r\n\treturn arr.reduce( ( partition, item ) => {\r\n\t\tpartition[ ( predicate( item ) ? 0 : 1 ) ].push( item );\r\n\t\treturn partition;\r\n\t}, [ [], [] ] as [ T[], T[] ] );\r\n}\r\n\r\n/**\r\n * Maps the first truthy value in the array using the provided mapping function.\r\n * @param arr - The array of items.\r\n * @param mapFn - The mapping function.\r\n * @returns The first truthy value returned by the mapping function, or null if no truthy value is found.\r\n */\r\nexport function mapFirstTruthy<T, R>(arr: T[], mapFn: TTransformer<T, R>): R | null {\r\n\tfor (let i = 0; i < arr.length; i++) {\r\n\t\tconst result = mapFn(arr[i]);\r\n\t\tif (result) return result;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function makeArrayEmpty( arr: unknown[] ): void {\r\n\tarr.splice( 0, arr.length );\r\n}\r\n", "\r\nexport function isTrue( x: unknown ): x is true {\r\n\treturn x === true;\r\n}\r\n\r\nexport function isFalse( x: unknown ): x is false {\r\n\treturn x === false;\r\n}\r\n", "\r\nimport { asError } from \"../errors.js\";\r\nimport { identity, type TFunction, type TTransformer } from \"../functions.js\";\r\n\r\nexport function withTryCatch<R>( fn: TFunction<void, R>, errMapFn?: TTransformer<Error, Error> ): [ R, undefined ] | [ undefined, Error ] {\r\n\ttry {\r\n\t\treturn [ fn(), void 0 ] as const;\r\n\t} catch ( e: unknown ) {\r\n\t\treturn [ void 0, ( errMapFn ?? identity )( asError( e ) ) ] as const;\r\n\t}\r\n}\r\n\r\nexport async function withTryCatchAsync<R>( fn: TFunction<void, Promise<R>>, errMapFn: TTransformer<Error, Error> ): Promise<[ R, undefined ] | [ undefined, Error ]> {\r\n\treturn fn().then( ( value: R ) => [ value, void 0 ] as const, ( e: unknown ) => [ void 0, ( errMapFn ?? identity )( asError( e ) ) ] as const );\r\n}\r\n", "\r\nexport * from './errors/withTryCatch.js';\r\n\r\nexport function asError( e: unknown ): Error {\r\n\tif ( e === undefined || e === null )\r\n\t\treturn new Error( 'Void message' );\r\n\tif ( isError( e ) )\r\n\t\treturn e;\r\n\tif ( typeof e === 'string' )\r\n\t\treturn new Error( e );\r\n\tif ( e instanceof String )\r\n\t\treturn new Error( e.toString() );\r\n\treturn new Error( JSON.stringify( e ) );\r\n}\r\n\r\nexport function isError( e: unknown ): e is Error {\r\n\treturn e instanceof Error;\r\n}\r\n\r\n", "import { withTryCatch } from \"./errors.js\";\r\n\r\nexport type TJsonPrimitive = string | number | boolean | null | undefined;\r\nexport type TJsonArray = Array<TJsonSerializable> | ReadonlyArray<TJsonSerializable>;\r\nexport type TJsonObject = { [ key: string ]: TJsonSerializable }\r\nexport type TJsonSerializable = TJsonPrimitive | TJsonArray | TJsonObject;\r\n\r\nexport function tryToParseJson<T extends TJsonSerializable>( jsonContent: string ): [ T, undefined ] | [ undefined, Error ] {\r\n\treturn withTryCatch( () => JSON.parse( jsonContent ) as T );\r\n}\r\n\r\nexport function jsonCloneDeep<A extends TJsonSerializable>( a: A ): A {\r\n\r\n\t// Handle the 3 simple types, and null or undefined\r\n\tif ( null === a || \"object\" !== typeof a ) return a;\r\n\r\n\tif ( a instanceof Date ) {\r\n\t\t// Handle Date\r\n\t\treturn new Date( a.getTime() ) as unknown as A;\r\n\t} else if ( a instanceof Array ) {\r\n\t\t// Handle Array\r\n\t\tconst copy = [] as unknown[];\r\n\t\tfor ( let i = 0, len = a.length; i < len; i++ ) {\r\n\t\t\tcopy[ i ] = jsonCloneDeep( a[ i ] );\r\n\t\t}\r\n\t\treturn copy as A;\r\n\t} else if ( a instanceof Object ) {\r\n\t\t// Handle Object\r\n\t\tconst copy = {} as Record<string | number | symbol, unknown>;\r\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n\t\tfor ( let attr in ( a as TJsonObject ) ) {\r\n\t\t\tif ( a.hasOwnProperty( attr ) )\r\n\t\t\t\tcopy[ attr ] = jsonCloneDeep( a[ attr ] );\r\n\t\t}\r\n\t\treturn copy as A;\r\n\t}\r\n\r\n\tthrow new Error( \"Unable to copy obj! Its type isn't supported.\" );\r\n\r\n}\r\n\r\nexport function omitFromJsonObject<T extends TJsonObject, K extends keyof T>( o: T, ...keys: K[] ): Omit<T, K> {\r\n\treturn keys.reduce( ( obj, key ) => {\r\n\t\tdelete obj[ key ];\r\n\t\treturn obj;\r\n\t}, { ...o } );\r\n}\r\n/** @deprecated[2024-12-23]: Use {@link omitFromJsonObject} instead. */\r\nexport const omit = omitFromJsonObject;\r\n", "\r\ntype TRoundMode = 'toNearest' | 'toLower' | 'toUpper' | 'towardsZero' | 'awayFromZero';\r\ntype TIntegerNumber = number;\r\n\r\nconst roundModes: Record<TRoundMode, ( n: number ) => TIntegerNumber> = {\r\n\t'toNearest': Math.round,\r\n\t'toLower': Math.floor,\r\n\t'toUpper': Math.ceil,\r\n\t'towardsZero': n => n > 0 ? Math.floor( n ) : Math.ceil( n ),\r\n\t'awayFromZero': n => n > 0 ? Math.ceil( n ) : Math.floor( n ),\r\n};\r\n\r\nexport function round( n: number, precision: number = 0, mode: TRoundMode = 'toNearest' ) {\r\n\tconst base = 10;\r\n\tconst power = Math.pow( base, precision );\r\n\treturn roundModes[ mode ]( n * power ) / power;\r\n}\r\n\r\nexport default round;\r\nexport const roundToNearest = ( n: number, precision: number = 0 ) => round( n, precision, 'toNearest' );\r\nexport const roundToLower = ( n: number, precision: number = 0 ) => round( n, precision, 'toLower' );\r\nexport const roundToUpper = ( n: number, precision: number = 0 ) => round( n, precision, 'toUpper' );\r\nexport const roundTowardsZero = ( n: number, precision: number = 0 ) => round( n, precision, 'towardsZero' );\r\nexport const roundAwayFromZero = ( n: number, precision: number = 0 ) => round( n, precision, 'awayFromZero' );\r\n\r\n", "\r\nimport { withTryCatch } from \"./errors.js\";\r\nimport type { TFunction } from \"./functions.js\";\r\nimport { ensureDefined } from \"./nulls.js\";\r\n\r\nexport * from './numbers/round.js';\r\n\r\nexport type TNumericString = `${number}`;\r\nexport type TNumericFloatingPointString = `${number}.${number}`;\r\nexport type TPositiveNumber = number; // Only used for semantics. Cannot do better typechecking at the moment.\r\nexport type TNegativeNumber = number; // Only used for semantics. Cannot do better typechecking at the moment.\r\n\r\nexport type TZero = 0;\r\nexport type TDigit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\r\nexport type TDigit1_9 = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;\r\nexport type TNumber0_100 = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100;\r\nexport type TNumber0_1000 = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |\r\n\t100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 |\r\n\t200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 |\r\n\t300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 |\r\n\t400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 |\r\n\t500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 |\r\n\t600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 |\r\n\t700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 |\r\n\t800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 |\r\n\t900 | 901 | 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | 951 | 952 | 953 | 954 | 955 | 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999\r\nexport type TNumber0_5 = 0 | 1 | 2 | 3 | 4 | 5;\r\nexport type TNumber0_10 = TNumber0_5 | 6 | 7 | 8 | 9 | 10;\r\nexport type TNumber0_15 = TNumber0_10 | 11 | 12 | 13 | 14 | 15;\r\nexport type TNumber0_20 = TNumber0_15 | 16 | 17 | 18 | 19 | 20;\r\nexport type TNumber1_10 = Exclude<TNumber0_10, 0>;\r\n\r\nexport type TParseInt<T> = T extends `${infer N extends number}` ? N : never;\r\nexport type TParseableInt<T> = T extends `${number}` ? T : never;\r\n\r\nexport function ensurePositiveNumber( v: number, name = 'value' ): number {\r\n\tif ( v !== undefined && v !== null && v > 0 )\r\n\t\treturn v;\r\n\tthrow new Error( `Expected ${name} to be positive, got: ${v}` );\r\n}\r\nexport function ensureNonNegativeNumber( v: number, name = 'value' ): number {\r\n\tif ( v !== undefined && v !== null && v >= 0 )\r\n\t\treturn v;\r\n\tthrow new Error( `Expected ${name} to be non-negative, got: ${v}` );\r\n}\r\nexport function ensureNonPositiveNumber( v: number, name = 'value' ): number {\r\n\tif ( v !== undefined && v !== null && v <= 0 )\r\n\t\treturn v;\r\n\tthrow new Error( `Expected ${name} to be non-positive, got: ${v}` );\r\n}\r\nexport function ensureNegativeNumber( v: number, name = 'value' ): number {\r\n\tif ( v !== undefined && v !== null && v < 0 )\r\n\t\treturn v;\r\n\tthrow new Error( `Expected ${name} to be negative, got: ${v}` );\r\n}\r\n\r\nexport function incrementBy( n: number ): TFunction<number, number> {\r\n\treturn ( v ) => v + n;\r\n}\r\nexport function multiplyBy( n: number ): TFunction<number, number> {\r\n\treturn ( v ) => v * n;\r\n}\r\nexport function divideBy( n: number ): TFunction<number, number> {\r\n\treturn ( v ) => v / n;\r\n}\r\nexport const increment = incrementBy( 1 );\r\nexport const decrement = incrementBy( -1 );\r\nexport const decrementBy = ( n: number ) => incrementBy( -n );\r\n\r\nexport function isNumber( v: unknown ): v is number {\r\n\treturn typeof v === \"number\";\r\n}\r\n\r\nexport function isPositiveNumber( v: number ): v is TPositiveNumber {\r\n\treturn v > 0;\r\n}\r\n\r\nexport function isNegativeNumber( v: number ): v is TNegativeNumber {\r\n\treturn v < 0;\r\n}\r\n\r\nexport function isZero( v: number ): v is TZero {\r\n\treturn v === 0;\r\n}\r\n\r\nexport function clamp( n: number, min: number, max: number ): number {\r\n\tif ( min === null || max === null || n === null || isNaN( min ) || isNaN( max ) || isNaN( n ) || min > max )\r\n\t\tthrow new Error();\r\n\tif ( n > max ) {\r\n\t\treturn max;\r\n\t} else if ( n < min ) {\r\n\t\treturn min;\r\n\t} else {\r\n\t\treturn n;\r\n\t}\r\n}\r\n\r\nexport function tryToParseNumber( numberStr: string ) {\r\n\treturn withTryCatch( () => {\r\n\t\tconst type = typeof ensureDefined( numberStr );\r\n\t\tif ( type !== \"string\" ) throw new Error( 'Invalid number given: ' + numberStr );\r\n\t\tif ( numberStr.trim().length === 0 ) throw new Error( 'Invalid number given: ' + numberStr );\r\n\t\tconst num = Number( numberStr );\r\n\t\tif ( isNaN( num ) ) throw new Error( 'Invalid number given: ' + numberStr );\r\n\t\treturn num;\r\n\t} );\r\n}\r\n", "import TimeDuration from \"../time/TimeDuration.js\";\r\nimport { TAsyncFunction, TFunction } from \"./functions.js\";\r\n\r\nexport type TPromisable<T> = T | Promise<T>;\r\n\r\nexport function asPromise<T>( promisable: TPromisable<T> ): Promise<T> {\r\n\treturn Promise.resolve( promisable );\r\n}\r\n\r\nexport function promiseSequence<R>( ...fns: TFunction<void, Promise<R>>[] ): TFunction<void, Promise<R[]>> {\r\n\tconst fn = async function (): Promise<R[]> {\r\n\t\tconst results: R[] = [];\r\n\t\tfor ( let i = 0; i < fns.length; i++ ) {\r\n\t\t\tresults[ i ] = await fns[ i ]();\r\n\t\t}\r\n\t\treturn results;\r\n\t};\r\n\treturn fn;\r\n}\r\n\r\nexport function delayPromise<T>( duration: TimeDuration ): TAsyncFunction<T, T> {\r\n\treturn ( result: T ) => duration.promise().then( () => result );\r\n}\r\n", "import { TPositiveNumber } from \"./numbers.ts\";\r\n\r\n/** @deprecated[2025-01-14]: Use {@link randomNumberInInterval} instead. */\r\nexport const randomInterval = ( min: number, max: number ): number => randomNumberInInterval( min, max );\r\n\r\n/** @deprecated[2025-01-14]: Use {@link randomNumberInInterval} / 100 instead. */\r\nexport const randomPercentage = ( min: number, max: number ): number => randomNumberInInterval( min, max ) / 100;\r\n\r\nexport function randomNumberInInterval( min: number, max: number ): number {\r\n\treturn Math.floor( Math.random() * ( max - min + 1 ) + min );\r\n}\r\n\r\nexport const randomId = ( length: TPositiveNumber ): string => {\r\n\treturn Math.random().toString(36).substring(2, length + 2);\r\n}\r\n", "import { TFunction } from \"..\";\r\n\r\nexport function dictToEntries<V, K extends string = string>( obj: Record<K, V> ): [K, V][] {\r\n\treturn Object.entries( obj ) as [K, V][];\r\n}\r\n\r\nexport function entriesToDict<V, K extends string = string>( entries: [K, V][] ): Record<K, V> {\r\n\treturn Object.fromEntries( entries ) as Record<K, V>;\r\n}\r\n\r\nexport function mapEntries<K1 extends string, V1, K2 extends string, V2>( dict: Record<K1, V1>, mapper: TFunction<[K1, V1], [K2, V2]> ): Record<K2, V2> {\r\n\treturn entriesToDict( dictToEntries( dict ).map( ( entry ) => mapper( entry ) ) );\r\n}\r\n", "\r\nexport * from './records/entries.js';\r\n\r\nexport type TEmpty = Record<string, never>;\r\nexport type TKeysOfType<T, V> = { [ K in keyof T ]-?: T[ K ] extends V ? K : never }[ keyof T ];\r\n\r\nexport function dictToList<T>( obj: Record<string | number, T> ): T[] {\r\n\treturn Object.keys( obj ).map( key => obj[ key ] );\r\n}\r\n\r\nexport function pick<T extends object, K extends keyof T>( o: T, keys: K[] ): Pick<T, K> {\r\n\treturn keys.reduce( ( obj, key ) => {\r\n\t\tobj[ key ] = o[ key ];\r\n\t\treturn obj;\r\n\t}, {} as Pick<T, K> );\r\n}\r\n\r\nexport type TOptionsWithoutDefaults<T, R> = Partial<T> & Required<Omit<T, keyof R>>;\r\nexport type TOptionalKeysForType<T> = { [ K in keyof T ]-?: {} extends Pick<T, K> ? K : never }[ keyof T ];\r\nexport type TRequiredKeysForType<T> = Exclude<keyof T, TOptionalKeysForType<T>>;\r\nexport type TAllKeysOptional<T> = TRequiredKeysForType<T> extends never ? true : false;\r\nexport type TConditionalParameter<T> = TAllKeysOptional<T> extends true ? T | undefined : T;\r\nexport type TConditionalParameterOptions<T, R> = TConditionalParameter<TOptionsWithoutDefaults<T, R>>;\r\n\r\n/**\r\n * Given a type T, replaces all fields of type From to fields of type To.\r\n */\r\nexport type TReplaceType<T, From, To> = { [ K in keyof T ]: T[ K ] extends From ? To : T[ K ]; };\r\n\r\n/**\r\n * Given a type T, make field K required instead of optional.\r\n */\r\nexport type TWithRequiredProperty<T, K extends keyof T> = T & {\r\n\t[ Property in K ]-?: T[ Property ];\r\n};\r\n\r\n/**\r\n * Given a type T, make all fields required instead of optional.\r\n */\r\nexport type TWithRequiredProperties<T> = Required<T>;\r\n", "import { TReadableArray } from \"../arrays.js\";\r\nimport { TMaybe } from \"../nulls.js\";\r\nimport { capitalizeWord } from \"../strings.js\";\r\n\r\nexport class StringParts {\r\n\r\n\tprivate readonly _parts: string[];\r\n\r\n\tprivate constructor( ...parts: string[] ) {\r\n\t\tthis._parts = parts;\r\n\t}\r\n\r\n\tpublic toUpperCase() {\r\n\t\treturn new StringParts( ...this.parts.map( part => part.toUpperCase() ) );\r\n\t}\r\n\r\n\tpublic toLowerCase() {\r\n\t\treturn new StringParts( ...this.parts.map( part => part.toLowerCase() ) );\r\n\t}\r\n\r\n\tpublic capitalizeFirst() {\r\n\t\tif ( !this.length ) return this;\r\n\t\treturn new StringParts( capitalizeWord( this.first! ), ...this.tail.map( part => part.toLowerCase() ) );\r\n\t}\r\n\r\n\tpublic capitalizeEach() {\r\n\t\treturn new StringParts( ...this.parts.map( part => capitalizeWord( part ) ) );\r\n\t}\r\n\r\n\tpublic get parts() {\r\n\t\treturn this._parts;\r\n\t}\r\n\r\n\tpublic get tail() {\r\n\t\tconst [ _first, ...tail ] = this.parts;\r\n\t\treturn tail;\r\n\t}\r\n\r\n\tpublic get first(): TMaybe<string> {\r\n\t\treturn this._parts[ 0 ] ?? null;\r\n\t}\r\n\r\n\tpublic get last(): TMaybe<string> {\r\n\t\treturn this._parts[ this.length - 1 ] ?? null;\r\n\t}\r\n\r\n\tpublic get length() {\r\n\t\treturn this._parts.length;\r\n\t}\r\n\r\n\tpublic trim() {\r\n\t\treturn new StringParts( ...this.parts.map( part => part.trim() ) );\r\n\t}\r\n\r\n\tpublic toSnakeCase() {\r\n\t\treturn this.toLowerCase().join( '_' );\r\n\t}\r\n\r\n\tpublic toCamelCase() {\r\n\t\tif ( !this.length ) return '';\r\n\t\treturn [ this.first!.toLowerCase(), ...this.tail.map( capitalizeWord ) ].join( '' );\r\n\t}\r\n\r\n\tpublic toKebabCase() {\r\n\t\treturn this.toLowerCase().join( '-' );\r\n\t}\r\n\r\n\tpublic toPascalCase() {\r\n\t\treturn this.capitalizeEach().join( '' );\r\n\t}\r\n\r\n\tpublic toHumanCase() {\r\n\t\treturn this.capitalizeFirst().join( ' ' );\r\n\t}\r\n\r\n\tpublic join( separator: string ) {\r\n\t\treturn this.parts.join( separator );\r\n\t}\r\n\r\n\tpublic mergeWith( { parts: otherParts }: { parts: TReadableArray<string>; } ) {\r\n\t\treturn new StringParts( ...this.parts, ...otherParts );\r\n\t}\r\n\r\n\tpublic slice( start: number, end?: number ) {\r\n\t\treturn new StringParts( ...this.parts.slice( start, end ) );\r\n\t}\r\n\r\n\tpublic splice( start: number, deleteCount: number, ...items: string[] ) {\r\n\t\treturn new StringParts( ...this.parts.splice( start, deleteCount, ...items ) );\r\n\t}\r\n\r\n\tpublic push( part: string ) {\r\n\t\treturn new StringParts( ...this.parts, part );\r\n\t}\r\n\r\n\tpublic shift( part: string ) {\r\n\t\treturn new StringParts( part, ...this.parts );\r\n\t}\r\n\r\n\tpublic reverse() {\r\n\t\treturn new StringParts( ...this.parts.reverse() );\r\n\t}\r\n\r\n\tpublic static fromString = ( s: string, separator: string | RegExp = /\\s+/g ) => {\r\n\t\tif ( s === null || separator === null )\r\n\t\t\tthrow new Error( 'Invalid arguments' );\r\n\t\treturn new StringParts( ...s.split( separator ) );\r\n\t};\r\n\r\n\tpublic static fromParts = ( ...parts: string[] ) => {\r\n\t\treturn new StringParts( ...parts );\r\n\t};\r\n\r\n}\r\n", "import { range } from \"./arrays.js\";\r\nimport { ensureDefined, isNullOrUndefined } from \"./nulls.js\";\r\n\r\nexport * from './strings/StringParts.js';\r\n\r\n// Semantic-only\r\nexport type THtmlString = string;\r\nexport type TUrl = string;\r\nexport type TRelativeUrl = string;\r\n\r\nexport function hashCode( str: string ): number {\r\n\tlet hash = 0\r\n\tfor ( let i = 0; i < str.length; ++i )\r\n\t\thash = Math.imul( 31, hash ) + str.charCodeAt( i )\r\n\treturn hash | 0\r\n}\r\n\r\nexport function repeat( char: string, times: number ): string {\r\n\treturn times > 0 ? range( 0, times - 1 ).map( _ => char ).join( '' ) : '';\r\n}\r\n\r\nexport function capitalizeWord( word: string ): string {\r\n\treturn word[ 0 ].toUpperCase() + word.substring( 1 ).toLowerCase();\r\n}\r\n\r\nexport function splitWords( text: string, regEx: RegExp = /\\s+/ ): string[] {\r\n\treturn text.split( regEx ).filter( t => t.length > 0 );\r\n}\r\n\r\nexport function stringToNumber( s: string | null | undefined ): number | null {\r\n\tif ( isNullOrUndefined( s ) )\r\n\t\treturn null;\r\n\treturn Number( s );\r\n}\r\n\r\nexport function pad( str: string, n: number, char: string, where: 'left' | 'right' = 'left' ): string {\r\n\tconst length = ensureDefined( str ).length;\r\n\tif ( length >= ensureDefined( n ) ) return str;\r\n\r\n\tif ( ensureDefined( char ).length !== 1 )\r\n\t\tthrow new Error( 'Illegal pad character' );\r\n\tconst padding = repeat( char, n - length );\r\n\treturn ( where === 'left' ? padding : '' ) + str + ( where === 'right' ? padding : '' );\r\n}\r\n\r\nexport function padLeft( str: string, n: number, char: string ): string {\r\n\treturn pad( str, n, char, 'left' );\r\n}\r\n\r\nexport function padRight( str: string, n: number, char: string ): string {\r\n\treturn pad( str, n, char, 'right' );\r\n}\r\n\r\nexport function ellipsis( str: string, maxLength: number ): string {\r\n\tif ( maxLength < 4 ) \r\n\t\tthrow new Error( 'Invalid argument maxLength' );\r\n\tif ( str.length <= maxLength ) {\r\n\t\treturn str;\r\n\t} else {\r\n\t\treturn str.substring( 0, maxLength - 3 ) + '...';\r\n\t}\r\n}\r\n\r\nexport function pluralize( n: number, singular: string, plural?: string ): string {\r\n\r\n\tif ( !singular || !singular.length )\r\n\t\tthrow new Error();\r\n\tif ( n === 1 )\r\n\t\treturn singular;\r\n\r\n\tplural = plural ?? singular + 's';\r\n\r\n\tconst firstUppercase = singular.charAt( 0 ) === singular.charAt( 0 ).toUpperCase();\r\n\tif ( firstUppercase ) {\r\n\t\tconst PLURAL = plural.toUpperCase();\r\n\t\tconst isAllUppercase = plural === PLURAL;\r\n\t\tplural = isAllUppercase ? PLURAL : plural.charAt( 0 ).toUpperCase() + plural.slice( 1 ).toLowerCase();\r\n\t}\r\n\r\n\treturn plural;\r\n\r\n}\r\n\r\nexport function wrapWithString( str: string, delimiter: string ): string {\r\n\treturn delimiter + str + delimiter;\r\n}\r\n\r\n/** @deprecated[2024-12-23]: Use {@link wrapWithString} instead. */\r\nexport const wrap = wrapWithString;\r\n\r\n\r\n", "\nimport { ensureDefined } from \"../utils\";\n\n/**\n * Class that stores a value that is computationally/memory intensive to initialize.\n * The initialization of the value is done once and only if required (lazy initialization).\n * @author gtomberli\n */\nexport class Lazy<T> {\n\n\tprivate _value: T | undefined = undefined;\n\tprivate _initialized: boolean = false;\n\tprivate _generator: () => T;\n\n\tprivate constructor( generator: () => T ) {\n\t\tthis._generator = ensureDefined( generator );\n\t}\n\n\tpublic get value(): T | undefined {\n\t\treturn this._value;\n\t}\n\n\tpublic getOrCreate(): T {\n\t\tif ( !this._initialized ) {\n\t\t\tthis._value = this._generator();\n\t\t\tthis._initialized = true;\n\t\t}\n\t\treturn this._value!;\n\t}\n\n\tpublic getOrThrow( errorMessage?: \"Value not initialized\" ): T {\n\t\tif ( !this._initialized )\n\t\t\tthrow new Error( errorMessage );\n\t\treturn this._value!;\n\t}\n\n\tpublic or( t: T ): T {\n\t\tif ( !this._initialized ) {\n\t\t\treturn t;\n\t\t} else {\n\t\t\treturn this._value!;\n\t\t}\n\t}\n\n\tpublic isPresent() {\n\t\treturn this._initialized;\n\t}\n\n\tpublic isEmpty() {\n\t\treturn !this._initialized;\n\t}\n\n\tpublic ifPresent( fn: (t: T) => void ): void {\n\t\tif ( this.isPresent() ) {\n\t\t\tfn( this._value! );\n\t\t}\n\t}\n\n\tpublic ifEmpty( fn: () => void ): void {\n\t\tif ( this.isEmpty() ) {\n\t\t\tfn();\n\t\t}\n\t}\n\n\tpublic apply( fnPresent: (t: T) => void, fnEmpty: () => void ): void {\n\t\tif ( this.isPresent() ) {\n\t\t\tfnPresent( this._value! );\n\t\t} else {\n\t\t\tfnEmpty( );\n\t\t}\n\t}\n\n\tpublic static of<T>( generator: () => T ): Lazy<T> {\n\t\treturn new Lazy( generator );\n\t}\n\n}\n\nexport default Lazy;\n", "import { ensureDefined } from \"../utils/nulls.js\";\r\n\r\nexport class LazyAsync<T> {\r\n\r\n\tprivate _promise: Promise<T> | undefined = undefined;\r\n\tprivate _pending: boolean = false;\r\n\tprivate _resolvedValue: T | undefined = undefined;\r\n\tprivate _error: Error | undefined = undefined;\r\n\tprivate _generator: () => Promise<T>;\r\n\r\n\tprivate constructor( generator: () => Promise<T> ) {\r\n\t\tthis._generator = ensureDefined( generator );\r\n\t}\r\n\r\n\tpublic getOrCreate(): Promise<T> {\r\n\t\tif ( this.isEmpty() ) {\r\n\t\t\tthis._pending = true;\r\n\t\t\tthis._promise = this._generator();\r\n\t\t\tthis._promise.then( value => {\r\n\t\t\t\tthis._pending = false;\r\n\t\t\t\tthis._resolvedValue = value;\r\n\t\t\t}, err => {\r\n\t\t\t\tthis._pending = false;\r\n\t\t\t\tthis._error = err;\r\n\t\t\t} );\r\n\t\t}\r\n\t\treturn this._promise as Promise<T>;\r\n\t}\r\n\r\n\tpublic isPresent() {\r\n\t\treturn this._promise !== undefined;\r\n\t}\r\n\r\n\tpublic isEmpty() {\r\n\t\treturn this._promise === undefined;\r\n\t}\r\n\r\n\tpublic isPending() {\r\n\t\treturn this.isPresent() && this._pending === true;\r\n\t}\r\n\r\n\tpublic isReady() {\r\n\t\treturn this.isPresent() && this._pending === false;\r\n\t}\r\n\r\n\tpublic isResolved() {\r\n\t\treturn this.isReady() && this._error === undefined;\r\n\t}\r\n\t\r\n\tpublic isError() {\r\n\t\treturn this.isReady() && this._error !== undefined;\r\n\t}\r\n\r\n\tpublic ifPresent( fn: ( t: Promise<T> ) => void ): void {\r\n\t\tif ( this.isPresent() ) {\r\n\t\t\tfn( this._promise! );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ifEmpty( fn: () => void ): void {\r\n\t\tif ( this.isEmpty() ) {\r\n\t\t\tfn();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ifPending( fn: ( t: Promise<T> ) => void ): void {\r\n\t\tif ( this.isPending() ) {\r\n\t\t\tfn( this._promise! );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ifReady( fn: ( t: Promise<T> ) => void ): void {\r\n\t\tif ( this.isReady() ) {\r\n\t\t\tfn( this._promise! );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ifResolved( fn: ( t: T ) => void ): void {\r\n\t\tif ( this.isResolved() ) {\r\n\t\t\tfn( this._resolvedValue! );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ifError( fn: ( err: Error ) => void ): void {\r\n\t\tif ( this.isError() ) {\r\n\t\t\tfn( this._error! );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getOrThrow( errorMessage?: \"Value not initialized\" ): Promise<T> | never {\r\n\t\tif ( !this._promise )\r\n\t\t\tthrow new Error( errorMessage );\r\n\t\treturn this._promise;\r\n\t}\r\n\r\n\tpublic static of<T>( generator: () => Promise<T> ): LazyAsync<T> {\r\n\t\treturn new LazyAsync( generator );\r\n\t}\r\n\r\n}\r\n\r\nexport default LazyAsync;\r\n", "import { format } from \"small-date\";\r\nimport { ICancelable, ICancelablePromise } from \"../async/Deferred.js\";\r\nimport { TComparisonResult } from \"../sorting/index.js\";\r\nimport TimeBase from \"./TimeBase\";\r\nimport TimeDuration from \"./TimeDuration\";\r\nimport { TTimeInstantBuilder, TTimeInstantCreationParameters, createTimeInstantFromParameters, timeInstantBuilder } from \"./TimeInstantBuilder.js\";\r\nimport TimeUnit from \"./TimeUnit\";\r\nimport { TDayOfMonth, TDayOfWeek, TIso8601DateString, TIso8601DateUtcString, TMonth, TWeekNumber } from \"./types\";\r\n\r\nexport class TimeInstant extends TimeBase<TimeInstant> {\r\n\r\n\tprotected constructor( number: number, unit: TimeUnit ) {\r\n\t\tsuper( number, unit );\r\n\t}\r\n\r\n\tprotected create( value: number, unit: TimeUnit ) {\r\n\t\treturn new TimeInstant( value, unit );\r\n\t}\r\n\r\n\tpublic addDuration( duration: TimeDuration ): TimeInstant {\r\n\t\treturn TimeInstant.fromUnixTimestamp( this.ms + duration.ms );\r\n\t}\r\n\r\n\tpublic removeDuration( duration: TimeDuration ): TimeInstant {\r\n\t\treturn TimeInstant.fromUnixTimestamp( this.ms - duration.ms );\r\n\t}\r\n\r\n\tpublic distanceFrom( instant: TimeInstant ): TimeDuration {\r\n\t\treturn TimeDuration.fromMs( Math.abs( this.ms - instant.ms ) );\r\n\t}\r\n\r\n\tpublic distanceFromNow(): TimeDuration {\r\n\t\treturn TimeDuration.fromMs( Math.abs( this.ms - Date.now() ) );\r\n\t}\r\n\r\n\tpublic timeLeftFrom( instant: TimeInstant ): TimeDuration {\r\n\t\tconst distance = this.ms - instant.ms;\r\n\t\treturn TimeDuration.fromMs( Math.max( distance, 0 ) );\r\n\t}\r\n\r\n\tpublic timeLeftFromNow(): TimeDuration {\r\n\t\tconst distance = this.ms - Date.now();\r\n\t\treturn TimeDuration.fromMs( Math.max( distance, 0 ) );\r\n\t}\r\n\r\n\tpublic distanceFromStartOfDay(): TimeDuration {\r\n\t\treturn this.distanceFrom( this.atStartOfDay() );\r\n\t}\r\n\r\n\tpublic atStartOfDay(): TimeInstant {\r\n\t\treturn this.atTime( { hours: 0, minutes: 0, seconds: 0, milliseconds: 0 } );\r\n\t}\r\n\r\n\tpublic distanceFromEndOfDay(): TimeDuration {\r\n\t\treturn this.distanceFrom( this.atEndOfDay() );\r\n\t}\r\n\r\n\tpublic atEndOfDay(): TimeInstant {\r\n\t\treturn this.atTime( { hours: 23, minutes: 59, seconds: 59, milliseconds: 999 } );\r\n\t}\r\n\r\n\tpublic promise(): Promise<void> {\r\n\t\treturn this.timeLeftFromNow().promise();\r\n\t}\r\n\r\n\tpublic cancelablePromise(): ICancelablePromise<void> {\r\n\t\treturn this.timeLeftFromNow().cancelablePromise();\r\n\t}\r\n\r\n\tpublic delay( cb: () => unknown ): void {\r\n\t\treturn this.timeLeftFromNow().delay( cb );\r\n\t}\r\n\r\n\tpublic cancelableDelay( cb: () => unknown ): ICancelable {\r\n\t\treturn this.timeLeftFromNow().cancelableDelay( cb );\r\n\t}\r\n\r\n\tpublic ensureInTheFuture() {\r\n\t\tif ( !this.isInTheFuture )\r\n\t\t\tthrow new Error( 'Instant is in the past' );\r\n\t}\r\n\r\n\tpublic ensureInThePast() {\r\n\t\tif ( !this.isInThePast )\r\n\t\t\tthrow new Error( 'Instant is in the future' );\r\n\t}\r\n\r\n\tpublic isToday(): boolean {\r\n\t\treturn Math.floor( this.days ) === Math.floor( TimeInstant.now().days );\r\n\t}\r\n\r\n\t/**\r\n\t * @returns the time as HH:mm:ss\r\n\t * @deprecated [2024-12-11] this method is too ambigous and should be removed.\r\n\t */\r\n\tpublic asTimeString(): string {\r\n\t\treturn this.format( 'HH:mm:ss' );\r\n\t}\r\n\r\n\t/**\r\n\t * @returns the date as dd/MM/yyyy\r\n\t * @deprecated [2024-12-11] this method is too ambigous and should be removed.\r\n\t */\r\n\tpublic asDateString(): string {\r\n\t\treturn this.format( 'dd/MM/yyyy' );\r\n\t}\r\n\r\n\t/**\r\n\t * Formats this instant using the given pattern. The pattern can contain the following tokens:\r\n\t * \r\n\t * | Token | Description | Example |\r\n\t * |:------|:--------------------------------|:------------------------------|\r\n\t * | D | Weekday, 1 letter | W |\r\n\t * | DD | Weekday, 3 letters | Wed |\r\n\t * | DDD | Weekday, long | Wednesday |\r\n\t * | d | Day of the month, no padding | 3 |\r\n\t * | dd | Day of the month, padded to 2 | 03 |\r\n\t * | M | Month, numeric | 3 |\r\n\t * | MM | Month, 2 digits | 03 |\r\n\t * | MMM | Month, 3 letters | Mar |\r\n\t * | MMMM | Month, long | March |\r\n\t * | y | Year, numeric | 2021 |\r\n\t * | yy | Year, 2 digits | 21 |\r\n\t * | yyyy | Year, numeric | 2021 |\r\n\t * | h | Hours, no padding | 6 |\r\n\t * | hh | Hours, padded to 2 | 06 |\r\n\t * | H | Hours in 24-format, no padding | 18 |\r\n\t * | HH | Hours in 24-format, padded to 2 | 18 |\r\n\t * | m | Minutes, no padding | 7 |\r\n\t * | m | Minutes, padded to 2 | 07 |\r\n\t * | s | Seconds, no padding | 8 |\r\n\t * | ss | Seconds, padded to 2 | 08 |\r\n\t * | S | Milliseconds, no padding | 9 |\r\n\t * | SS | Milliseconds, padded to 2 | 09 |\r\n\t * | SSS | Milliseconds, padded to 3 | 009 |\r\n\t * | G | Era, narrow | A |\r\n\t * | GG | Era, short | AD |\r\n\t * | GGG | Era, long | Anno Domino |\r\n\t * | Z | Time zone, short | GMT+1 |\r\n\t * | ZZ | Time short, long\tC | entral European Standard Time |\r\n\t * | P | Period of the day, narrow | in the morning |\r\n\t * | PP | Period of the day, short | in the morning |\r\n\t * | PPP | Period of the day, long | in the morning |\r\n\t * | a | Meridiem | pm |\r\n\t * @param pattern The pattern to use. Refer to the token table above for details.\r\n\t * @param config An optional locale and timeZone definition to use during the format.\r\n\t * @returns a string, formatted using the given pattern, at the given timeZone with the given locale.\r\n\t */\r\n\tpublic format( pattern: string, config: { locale?: string, timeZone?: string } = {} ) {\r\n\t\treturn format( this.toDate(), pattern, config );\r\n\t}\r\n\r\n\t/**\r\n * @returns this instant, in ISO 8601 format (eg, 2024-11-01T15:49:22.024Z). The format is meant to always be realiable.\r\n */\r\n\tpublic asIso8601(): TIso8601DateUtcString {\r\n\t\treturn this.format( 'yyyy-MM-dd\"T\"HH:mm:ss.SSS\"Z\"', { timeZone: 'UTC' } ) as TIso8601DateUtcString;\r\n\t}\r\n\r\n\t/**\r\n\t * @returns this instant, in a human readable format. The format COULD change in the future, do NOT use this method for consistent outputs.\r\n\t * @deprecated [2024-12-11] this method is too broad and ambigous and should be removed.\r\n\t */\r\n\tpublic asHumanTimestamp(): string {\r\n\t\treturn this.format( 'yyyy-MM-dd HH:mm:ss' )\r\n\t}\r\n\r\n\tpublic toUnixTimestamp(): number {\r\n\t\t// Syntatic sugar for this.ms;\r\n\t\treturn this.ms;\r\n\t}\r\n\r\n\tpublic toDate(): Date {\r\n\t\treturn new Date( this.ms );\r\n\t}\r\n\r\n\tpublic toDateUTC(): Date {\r\n\t\treturn new Date( this.ms + new Date().getTimezoneOffset() * 60 * 1000 );\r\n\t}\r\n\r\n\tpublic get isInThePast(): boolean {\r\n\t\treturn this.ms < Date.now();\r\n\t}\r\n\r\n\tpublic get isInTheFuture(): boolean {\r\n\t\treturn this.ms > Date.now();\r\n\t}\r\n\r\n\tpublic isAfter( other: TimeInstant ): boolean {\r\n\t\treturn this.ms > other.ms;\r\n\t}\r\n\r\n\tpublic isBefore( other: TimeInstant ): boolean {\r\n\t\treturn this.ms < other.ms;\r\n\t}\r\n\r\n\tpublic compareTo( other: TimeInstant ): TComparisonResult {\r\n\t\tif ( this.ms === other.ms ) {\r\n\t\t\treturn 0;\r\n\t\t} else if ( this.isBefore( other ) ) {\r\n\t\t\treturn -1;\r\n\t\t} else {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated: Use {@link distanceFromNow} instead\r\n\t*/\r\n\t// TODO[2023-07-04, Deprecated]: Remove this method in a future version\r\n\tpublic fromNow(): TimeDuration {\r\n\t\treturn TimeDuration.ms( this.ms - Date.now() );\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated: Use {@link distanceFrom} instead\r\n\t*/\r\n\t// TODO[2023-07-04, Deprecated]: Remove this method in a future version\r\n\tpublic from( instant: TimeInstant ): TimeDuration {\r\n\t\treturn TimeDuration.ms( this.ms - instant.ms );\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated: Use {@link distanceFromUnixTimestamp} instead\r\n\t*/\r\n\t// TODO[2023-07-04, Deprecated]: Remove this method in a future version\r\n\tpublic fromTimestamp( timestamp: number ): TimeDuration {\r\n\t\treturn TimeDuration.ms( this.ms - timestamp );\r\n\t}\r\n\r\n\tpublic distanceFromUnixTimestamp( timestamp: number ): TimeDuration {\r\n\t\treturn TimeDuration.ms( this.ms - timestamp );\r\n\t}\r\n\r\n\tpublic atTime( parameters: Partial<TTimeInstantCreationParameters & { year: never; month: never; date: never; }> ) {\r\n\t\treturn TimeInstant.fromParameters( parameters, this );\r\n\t}\r\n\r\n\tpublic atDate( parameters: Partial<TTimeInstantCreationParameters & { hours: never; minutes: never; seconds: never; milliseconds: never; }> ) {\r\n\t\treturn TimeInstant.fromParameters( parameters, this );\r\n\t}\r\n\r\n\tpublic at( parameters: Partial<TTimeInstantCreationParameters> ) {\r\n\t\treturn TimeInstant.fromParameters( parameters, this );\r\n\t}\r\n\r\n\tpublic isBetween( start: TimeInstant, end: TimeInstant ) {\r\n\t\treturn this.ms >= start.ms && this.ms <= end.ms;\r\n\t}\r\n\r\n\tpublic static fromDate( date: Date ): TimeInstant {\r\n\t\treturn this.fromUnixTimestamp( date.getTime() );\r\n\t}\r\n\r\n\tpublic static fromUnixTimestamp( unixTimestamp: number ): TimeInstant {\r\n\t\treturn new TimeInstant( unixTimestamp, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic static fromUnixSeconds( unixSeconds: number ): TimeInstant {\r\n\t\treturn new TimeInstant( unixSeconds, TimeUnit.SECONDS );\r\n\t}\r\n\r\n\tpublic static fromParameters( parameters: Partial<TTimeInstantCreationParameters>, referenceDate?: Date | TimeInstant ): TimeInstant {\r\n\t\treturn createTimeInstantFromParameters( parameters, referenceDate );\r\n\t}\r\n\r\n\tpublic static highest( instant1: TimeInstant, instant2: TimeInstant ): TimeInstant {\r\n\t\treturn instant1.isAfter( instant2 ) ? instant1 : instant2;\r\n\t}\r\n\r\n\tpublic static lowest( instant1: TimeInstant, instant2: TimeInstant ): TimeInstant {\r\n\t\treturn instant1.isBefore( instant2 ) ? instant1 : instant2;\r\n\t}\r\n\r\n\tpublic static builder(): TTimeInstantBuilder {\r\n\t\treturn timeInstantBuilder();\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated[19/07/2023] Use {@link fromParameters} instead.\r\n\t */\r\n\tpublic static fromUnits( { date, month, year, hours, minutes, seconds }: { date: number, month: number, year: number, hours?: number, minutes?: number, seconds?: number } ): TimeInstant {\r\n\t\tconst dt = Date.UTC( year, month - 1, date, hours ?? 0, minutes ?? 0, seconds ?? 0 );\r\n\t\tif ( isNaN( dt ) )\r\n\t\t\tthrow new Error( `Unparseable date: ${date}, ${month}, ${year}, ${hours ?? '-'}, ${minutes ?? '-'}, ${seconds ?? '-'}` )\r\n\t\treturn TimeInstant.fromUnixTimestamp( dt );\r\n\t}\r\n\r\n\tpublic static fromIso8601( str: TIso8601DateString ) {\r\n\t\treturn TimeInstant.fromUnixTimestamp( new Date( str ).getTime() );\r\n\t}\r\n\r\n\tpublic static tryFromIso8601( str: string ) {\r\n\t\tif ( !str.match( /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:.\\d{3}|)(?:Z|[+-]\\d{2}:\\d{2})?$/ ) )\r\n\t\t\tthrow new Error( 'Invalid date given: ' + str );\r\n\t\treturn TimeInstant.fromUnixTimestamp( new Date( str ).getTime() );\r\n\t}\r\n\r\n\tpublic static now(): TimeInstant {\r\n\t\treturn TimeInstant.fromUnixTimestamp( Date.now() );\r\n\t}\r\n\r\n\tpublic static get currentTimeStamp(): number {\r\n\t\treturn Date.now();\r\n\t}\r\n\r\n\tpublic static compare( a: TimeInstant, b: TimeInstant ): TComparisonResult {\r\n\t\treturn a.compareTo( b );\r\n\t}\r\n\r\n\tpublic roundedToStartOf( unit: TimeUnit ) {\r\n\t\treturn TimeInstant.fromUnixTimestamp( this.ms - ( this.ms % unit.multiplier ) );\r\n\t}\r\n\r\n\tpublic roundedToEndOf( unit: TimeUnit ) {\r\n\t\treturn TimeInstant.fromUnixTimestamp( this.ms - ( this.ms % unit.multiplier ) + unit.toMs( 1 ) - 1 );\r\n\t}\r\n\r\n\tpublic roundedToNext( unit: TimeUnit, factor = 1 ) {\r\n\t\tconst unitMs = unit.toMs( factor );\r\n\t\tconst timestamp = Math.ceil( this.ms / unitMs ) * unitMs;\r\n\t\treturn TimeInstant.fromUnixTimestamp( timestamp );\r\n\t}\r\n\r\n\tpublic roundedToPrevious( unit: TimeUnit, factor = 1 ) {\r\n\t\tconst unitMs = unit.toMs( factor );\r\n\t\tconst timestamp = Math.floor( this.ms / unitMs ) * unitMs;\r\n\t\treturn TimeInstant.fromUnixTimestamp( timestamp );\r\n\t}\r\n\r\n\tpublic roundedTo( unit: TimeUnit, factor = 1 ) {\r\n\t\tconst unitMs = unit.toMs( factor );\r\n\t\tconst timestamp = Math.round( this.ms / unitMs ) * unitMs;\r\n\t\treturn TimeInstant.fromUnixTimestamp( timestamp );\r\n\t}\r\n\r\n\tpublic get dayOfMonth(): TDayOfMonth {\r\n\t\treturn this.toDate().getDate() as TDayOfMonth;\r\n\t}\r\n\r\n\tpublic get dayOfWeek(): TDayOfWeek {\r\n\t\treturn this.toDate().getDay() + 1 as TDayOfWeek;\r\n\t}\r\n\r\n\tpublic get month(): TMonth {\r\n\t\treturn this.toDate().getMonth() + 1 as TMonth;\r\n\t}\r\n\r\n\tpublic get year(): number {\r\n\t\treturn this.toDate().getFullYear();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the week number represented by this instant, according to the ISO 8601 standard.\r\n\t\t* Please note that the instant and the week number could be of two different years, eg the friday 1st january is actually part of week 52 of the previous year.\r\n\t */\r\n\tpublic get weekNumber(): { weekNumber: TWeekNumber, year: number } {\r\n\t\t/**\r\n\t\t\t* According to the ISO 8601 Standard, week number 1 is defined as the week containing the 4th of january (or, equivalently, the week that contains the first Thursday of the year).\r\n\t\t\t* As such, we basically have to count how many Thursdays there has been in this year.\r\n\t\t\t* Please note that the thursdayOfThisWeek could be in the previous year.\r\n\t\t */\r\n\t\tconst date = this.toDate();\r\n\t\tconst oneDay = 1000 * 60 * 60 * 24;\r\n\t\tconst thursdayOfThisWeek = new Date( date.getFullYear(), date.getMonth(), date.getDate() + 4 - ( date.getDay() || 7 ), 14, 0, 0 );\r\n\t\tconst firstOfJanuary = new Date( thursdayOfThisWeek.getFullYear(), 0, 1, 14, 0, 0 );\r\n\t\tconst dayOfTheYear = Math.round( ( thursdayOfThisWeek.getTime() - firstOfJanuary.getTime() ) / oneDay );\r\n\t\tconst weekNumber = Math.floor( dayOfTheYear / 7 ) + 1;\r\n\t\treturn { weekNumber: weekNumber as TWeekNumber, year: thursdayOfThisWeek.getFullYear() };\r\n\t}\r\n\r\n\t/**\r\n\t * This method is used to provide a better DX when inspecting a TimeInstant object in DevTools.\r\n\t */\r\n\tprotected get _time() {\r\n\t\treturn this.asHumanTimestamp();\r\n\t}\r\n\r\n\tpublic override toString() {\r\n\t\treturn `${this.constructor.name}[${this.asHumanTimestamp()}]`;\r\n\t}\r\n\r\n\tpublic static ZERO: TimeInstant = TimeInstant.fromUnixTimestamp( 0 );\r\n\r\n\tpublic static fromJSON( ms: number ) {\r\n\t\treturn TimeInstant.fromUnixTimestamp( ms );\r\n\t}\r\n\r\n}\r\n\r\nexport function isTimeInstant( x: unknown ): x is TimeInstant {\r\n\treturn x !== null && x !== undefined && x instanceof TimeInstant;\r\n}\r\n\r\nexport default TimeInstant;\r\n", "\r\nexport default class TimeUnit {\r\n\r\n\tprivate constructor(\r\n\t\tpublic readonly multiplier: number\r\n\t) { }\r\n\r\n\tpublic toUnit( value: number, unit: TimeUnit ): number {\r\n\t\treturn value * ( this.multiplier / unit.multiplier );\r\n\t}\r\n\r\n\tpublic toMs( value: number ): number {\r\n\t\treturn this.toUnit( value, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic toSeconds( value: number ): number {\r\n\t\treturn this.toUnit( value, TimeUnit.SECONDS );\r\n\t}\r\n\r\n\tpublic toMinutes( value: number ): number {\r\n\t\treturn this.toUnit( value, TimeUnit.MINUTES );\r\n\t}\r\n\r\n\tpublic toHours( value: number ): number {\r\n\t\treturn this.toUnit( value, TimeUnit.HOURS );\r\n\t}\r\n\r\n\tpublic toDays( value: number ): number {\r\n\t\treturn this.toUnit( value, TimeUnit.DAYS );\r\n\t}\r\n\r\n\tpublic toWeeks( value: number ): number {\r\n\t\treturn this.toUnit( value, TimeUnit.WEEKS );\r\n\t}\r\n\r\n\tpublic static readonly MILLISECONDS = new TimeUnit( 1 );\r\n\tpublic static readonly SECONDS = new TimeUnit( 1000 * TimeUnit.MILLISECONDS.multiplier );\r\n\tpublic static readonly MINUTES = new TimeUnit( 60 * TimeUnit.SECONDS.multiplier );\r\n\tpublic static readonly HOURS = new TimeUnit( 60 * TimeUnit.MINUTES.multiplier );\r\n\tpublic static readonly DAYS = new TimeUnit( 24 * TimeUnit.HOURS.multiplier );\r\n\tpublic static readonly WEEKS = new TimeUnit( 7 * TimeUnit.DAYS.multiplier );\r\n\r\n}\r\n", "import TimeUnit from \"./TimeUnit\";\r\n\r\nexport default abstract class TimeBase<T> {\r\n\r\n\tprivate readonly _ms: number;\r\n\r\n\tprotected constructor(\r\n\t\tvalue: number,\r\n\t\tunit: TimeUnit\r\n\t) {\r\n\t\tthis._ms = unit.toMs( value );\r\n\t}\r\n\r\n\tprotected abstract create( value: number, unit: TimeUnit ): T;\r\n\r\n\tpublic get ms(): number {\r\n\t\treturn Math.floor( this._ms / TimeUnit.MILLISECONDS.multiplier );\r\n\t}\r\n\r\n\tpublic get seconds(): number {\r\n\t\treturn Math.floor( this._ms / TimeUnit.SECONDS.multiplier );\r\n\t}\r\n\r\n\tpublic get minutes(): number {\r\n\t\treturn Math.floor( this._ms / TimeUnit.MINUTES.multiplier );\r\n\t}\r\n\r\n\tpublic get hours(): number {\r\n\t\treturn Math.floor( this._ms / TimeUnit.HOURS.multiplier );\r\n\t}\r\n\r\n\tpublic get days(): number {\r\n\t\treturn Math.floor( this._ms / TimeUnit.DAYS.multiplier );\r\n\t}\r\n\r\n\tpublic addMs( milliseconds: number ): T {\r\n\t\treturn this.addUnits( milliseconds, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic addSeconds( seconds: number ): T {\r\n\t\treturn this.addUnits( seconds, TimeUnit.SECONDS );\r\n\t}\r\n\r\n\tpublic addMinutes( minutes: number ): T {\r\n\t\treturn this.addUnits( minutes, TimeUnit.MINUTES );\r\n\t}\r\n\r\n\tpublic addHours( hours: number ): T {\r\n\t\treturn this.addUnits( hours, TimeUnit.HOURS );\r\n\t}\r\n\r\n\tpublic addDays( days: number ): T {\r\n\t\treturn this.addUnits( days, TimeUnit.DAYS );\r\n\t}\r\n\r\n\tpublic removeDays( days: number ): T {\r\n\t\treturn this.removeUnits( days, TimeUnit.DAYS );\r\n\t}\r\n\r\n\tpublic addUnits( n: number, unit: TimeUnit ): T {\r\n\t\treturn this.create( this._ms + unit.toMs( n ), TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic removeMs( milliseconds: number ): T {\r\n\t\treturn this.addUnits( -milliseconds, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic removeSeconds( seconds: number ): T {\r\n\t\treturn this.addUnits( -seconds, TimeUnit.SECONDS );\r\n\t}\r\n\r\n\tpublic removeMinutes( minutes: number ): T {\r\n\t\treturn this.addUnits( -minutes, TimeUnit.MINUTES );\r\n\t}\r\n\r\n\tpublic removeHours( hours: number ): T {\r\n\t\treturn this.addUnits( -hours, TimeUnit.HOURS );\r\n\t}\r\n\r\n\tpublic removeUnits( n: number, unit: TimeUnit ): T {\r\n\t\treturn this.addUnits( -n, unit );\r\n\t}\r\n\r\n\tpublic getUnit( unit: TimeUnit ): number {\r\n\t\treturn this._ms / unit.multiplier;\r\n\t}\r\n\r\n\tprotected toUnits(): { days: number, hours: number, minutes: number, seconds: number } {\r\n\t\treturn {\r\n\t\t\tdays: Math.floor( ( this._ms / TimeUnit.DAYS.multiplier ) ),\r\n\t\t\thours: Math.floor( ( this._ms / TimeUnit.HOURS.multiplier ) % 24 ),\r\n\t\t\tminutes: Math.floor( ( this._ms / TimeUnit.MINUTES.multiplier ) % 60 ),\r\n\t\t\tseconds: Math.floor( ( this._ms / TimeUnit.SECONDS.multiplier ) % 60 ),\r\n\t\t};\r\n\t}\r\n\r\n\tprotected static toMs( units: { days?: number, hours?: number, minutes?: number, seconds?: number, ms?: number } ): number {\r\n\t\tif ( !units )\r\n\t\t\tthrow new Error( 'Invalid units given' );\r\n\t\tlet ms = 0\r\n\t\tms += units.ms ?? 0 * TimeUnit.MILLISECONDS.multiplier;\r\n\t\tms += ( units.seconds ?? 0 ) * TimeUnit.SECONDS.multiplier;\r\n\t\tms += ( units.minutes ?? 0 ) * TimeUnit.MINUTES.multiplier;\r\n\t\tms += ( units.hours ?? 0 ) * TimeUnit.HOURS.multiplier;\r\n\t\tms += ( units.days ?? 0 ) * TimeUnit.DAYS.multiplier;\r\n\t\treturn ms;\r\n\t}\r\n\r\n\tpublic toJSON() {\r\n\t\treturn this._ms;\r\n\t}\r\n\r\n}\r\n", "import Deferred, { DeferredCanceledError, ICancelable, ICancelablePromise } from \"../async/Deferred.js\";\r\nimport { TComparisonResult } from \"../sorting/index.js\";\r\nimport { TIntervalHandle, TMaybe, TTimeoutHandle, ensureNonNegativeNumber, ensurePositiveNumber, pad, randomInterval } from \"../utils/index.js\";\r\nimport TimeBase from \"./TimeBase\";\r\nimport TimeInstant from \"./TimeInstant\";\r\nimport TimeUnit from \"./TimeUnit\";\r\n\r\nexport class TimeDuration extends TimeBase<TimeDuration> {\r\n\r\n\tprotected constructor( value: number, unit: TimeUnit ) {\r\n\t\tsuper( value, unit );\r\n\t\tif ( value < 0 )\r\n\t\t\tthrow new Error( 'Duration cannot be less than 0' );\r\n\t}\r\n\r\n\tprotected create( value: number, unit: TimeUnit ) {\r\n\t\treturn new TimeDuration( value, unit );\r\n\t}\r\n\r\n\tpublic addDuration( duration: TimeDuration ): TimeDuration {\r\n\t\treturn this.addUnits( duration.ms, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic removeDuration( duration: TimeDuration ): TimeDuration {\r\n\t\treturn this.removeUnits( duration.ms, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic override removeUnits( n: number, unit: TimeUnit ): TimeDuration {\r\n\t\tconst nn = Math.min( n, this.getUnit( unit ) ); // Avoid going negative.\r\n\t\treturn super.removeUnits( nn, unit );\r\n\t}\r\n\r\n\t/** @deprecated: Use multiplyBy instead **/\r\n\tpublic multiply( times: number ) {\r\n\t\treturn this.multiplyBy( times );\r\n\t}\r\n\r\n\tpublic multiplyBy( times: number ): TimeDuration {\r\n\t\tensureNonNegativeNumber( times, \"times\" );\r\n\t\treturn TimeDuration.ms( this.ms * times );\r\n\t}\r\n\r\n\tpublic divideBy( times: number ): TimeDuration {\r\n\t\tensurePositiveNumber( times, \"times\" );\r\n\t\treturn TimeDuration.ms( this.ms / times );\r\n\t}\r\n\r\n\t/**\r\n\t\t* Returns the current duration in a human readable format, prioritizing the most significant unit of time and excluding the rest.\r\n\t\t* @todo[2023-06] Should allow more customization options\r\n\t\t* @todo[2023-06] By default should show the secondary unit only when actually needed (eg, 1h 20m & 3h, instead of 1h 20m & 3h 28m)\r\n\t\t* @todo[2023-06] Should not allow negative durations, as this is a duration and not an instant.\r\n\t\t* @returns the duration, with only the most significant units displayed as a human readable string, eg: 1d 20h, 10m 30s.\r\n\t*/\r\n\tpublic get formatted(): string {\r\n\t\tconst format = ( x: number, u1: string, y: number, u2: string ): string => `${x}${u1} ${pad( y.toString(), 2, '0' )}${u2}`;\r\n\t\tconst units = this.toUnits();\r\n\r\n\t\tif ( units.days >= 1 ) return format( units.days, 'd', units.hours, 'h' );\r\n\t\telse if ( units.hours >= 1 )\r\n\t\t\treturn format( units.hours, 'h', units.minutes, 'm' );\r\n\t\telse if ( units.minutes >= 1 )\r\n\t\t\treturn format( units.minutes, 'm', units.seconds, 's' );\r\n\t\telse if ( units.seconds >= 0 )\r\n\t\t\treturn units.seconds.toString() + 's';\r\n\t\telse if ( units.seconds > -60 )\r\n\t\t\treturn 'A few moments ago';\r\n\t\telse\r\n\t\t\treturn 'Some time ago';\r\n\t}\r\n\r\n\t/**\r\n\t\t* @deprecated[2023-06] this method makes no sense, as durations are positive by default.\r\n\t\t*/\r\n\tpublic absolute(): TimeDuration {\r\n\t\treturn this.ms < 0 ? new TimeDuration( -this.ms, TimeUnit.MILLISECONDS ) : this;\r\n\t}\r\n\r\n\tpublic interval( cb: () => unknown ): TIntervalHandle {\r\n\t\treturn setInterval( cb, this.ms );\r\n\t}\r\n\r\n\tpublic timeout( cb: () => unknown ): TTimeoutHandle {\r\n\t\treturn setTimeout( cb, this.ms );\r\n\t}\r\n\r\n\tpublic cancelablePromise(): ICancelablePromise<void> {\r\n\t\tconst deferred = new Deferred<void>;\r\n\t\tif ( this.ms > 0 ) {\r\n\t\t\tthis.timeout( () => deferred.resolve() );\r\n\t\t} else {\r\n\t\t\tdeferred.resolve();\r\n\t\t}\r\n\t\treturn deferred.asCancelablePromise();\r\n\t}\r\n\r\n\tpublic promise(): Promise<void> {\r\n\t\tif ( this.isEmpty() )\r\n\t\t\treturn Promise.resolve();\r\n\r\n\t\tconst deferred = new Deferred<void>;\r\n\t\tthis.timeout( () => deferred.resolve() );\r\n\t\treturn deferred.asPromise();\r\n\t}\r\n\r\n\tpublic delay( cb: () => unknown ): void {\r\n\t\tvoid this.promise().then( () => cb() );\r\n\t}\r\n\r\n\tpublic cancelableDelay( cb: () => unknown ): ICancelable {\r\n\t\tconst deferred = this.cancelablePromise();\r\n\t\tvoid deferred.then( () => {\r\n\t\t\tcb();\r\n\t\t}, err => {\r\n\t\t\tif ( err instanceof DeferredCanceledError )\r\n\t\t\t\treturn; // Do nothing on cancelation\r\n\t\t\tthrow err;\r\n\t\t} );\r\n\t\treturn { cancel: () => deferred.cancel() };\r\n\t}\r\n\r\n\tpublic debounce<T>( fn: ( t: T ) => void ) {\r\n\t\tlet handle: TMaybe<TTimeoutHandle> = null;\r\n\t\treturn ( t: T ) => {\r\n\t\t\tif ( handle )\r\n\t\t\t\tclearTimeout( handle );\r\n\t\t\thandle = this.timeout( () => {\r\n\t\t\t\thandle = null;\r\n\t\t\t\tfn( t );\r\n\t\t\t} );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toDigitalClock(): string {\r\n\t\tconst units = this.toUnits();\r\n\t\t// data.hours += data.days * 24; // roll over days as hours.\r\n\t\treturn pad( units.hours.toString(), 2, '0' ) + ':' + pad( units.minutes.toString(), 2, '0' ) + ':' + pad( units.seconds.toString(), 2, '0' );\r\n\t}\r\n\r\n\tpublic get asSeconds(): string {\r\n\t\tif ( this.ms < 0 )\r\n\t\t\treturn \"0\";\r\n\t\tif ( this.ms < 1000 )\r\n\t\t\treturn ( this.ms / 1000 ).toFixed( 1 );\r\n\t\treturn Math.floor( this.seconds ).toString();\r\n\t}\r\n\r\n\tpublic fromNow(): TimeInstant {\r\n\t\treturn TimeInstant.now().addDuration( this );\r\n\t}\r\n\r\n\tpublic differenceFrom( other: TimeDuration ): TimeDuration {\r\n\t\treturn new TimeDuration( Math.abs( this.ms - other.ms ), TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\t/** @deprecated: Use fromNow instead **/\r\n\tpublic addCurrentTime() {\r\n\t\treturn this.fromNow();\r\n\t}\r\n\r\n\tpublic isGreaterThan( other: TimeDuration ): boolean {\r\n\t\treturn this.ms > other.ms;\r\n\t}\r\n\r\n\tpublic isLessThan( other: TimeDuration ): boolean {\r\n\t\treturn this.ms < other.ms;\r\n\t}\r\n\r\n\tpublic compareTo( other: TimeDuration ): TComparisonResult {\r\n\t\tif ( this.ms === other.ms ) {\r\n\t\t\treturn 0;\r\n\t\t} else if ( this.isLessThan( other ) ) {\r\n\t\t\treturn -1;\r\n\t\t} else {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic atLeast( other: TimeDuration ): TimeDuration {\r\n\t\tif ( !this.isLessThan( other ) ) {\r\n\t\t\treturn this;\r\n\t\t} else {\r\n\t\t\treturn other;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic atMost( other: TimeDuration ): TimeDuration {\r\n\t\tif ( !this.isGreaterThan( other ) ) {\r\n\t\t\treturn this;\r\n\t\t} else {\r\n\t\t\treturn other;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic isEmpty(): boolean {\r\n\t\treturn this.ms <= 0;\r\n\t}\r\n\r\n\tpublic isNotEmpty(): boolean {\r\n\t\treturn this.ms > 0;\r\n\t}\r\n\r\n\t/**\r\n\t\t* This method is used to provide a better DX when inspecting a TimeInstant object in DevTools.\r\n\t\t*/\r\n\tprotected get _duration() {\r\n\t\treturn this.formatted;\r\n\t}\r\n\r\n\tpublic override toString() {\r\n\t\treturn `${this.constructor.name}[${this.formatted}]`;\r\n\t}\r\n\r\n\tpublic static parseHumanTime( humanTime: string ): TimeDuration {\r\n\t\tconst match = humanTime.trim().match( /^(?:([0-9]+)d|)\\s*(?:([0-9]+)h|)\\s*(?:([0-9]+)m|)\\s*(?:([0-9]+)s|)$/ );\r\n\t\tif ( match ) {\r\n\t\t\tconst [ _, days, hours, minutes, seconds ] = match;\r\n\t\t\treturn new TimeDuration( TimeBase.toMs( { days: Number( days ?? 0 ), hours: Number( hours ?? 0 ), minutes: Number( minutes ?? 0 ), seconds: Number( seconds ?? 0 ) } ), TimeUnit.MILLISECONDS );\r\n\t\t}\r\n\t\tthrow new Error( 'Failed to parse time: ' + humanTime );\r\n\t}\r\n\r\n\tpublic static compare( a: TimeDuration, b: TimeDuration ): TComparisonResult {\r\n\t\treturn a.compareTo( b );\r\n\t}\r\n\r\n\tpublic static ms = durationConstructor( TimeUnit.MILLISECONDS );\r\n\tpublic static seconds = durationConstructor( TimeUnit.SECONDS );\r\n\tpublic static minutes = durationConstructor( TimeUnit.MINUTES );\r\n\tpublic static hours = durationConstructor( TimeUnit.HOURS );\r\n\tpublic static days = durationConstructor( TimeUnit.DAYS );\r\n\r\n\tpublic static shamefulUnref = ( ms: TAllowedTimeDuration ): number => {\r\n\t\tif ( ms instanceof TimeDuration ) {\r\n\t\t\treturn ms.ms;\r\n\t\t}\r\n\t\treturn ms;\r\n\t}\r\n\tpublic static shamefulRef = ( ms: TAllowedTimeDuration ): TimeDuration => {\r\n\t\tif ( ms instanceof TimeDuration ) {\r\n\t\t\treturn ms;\r\n\t\t}\r\n\t\tif ( ms < 0 ) {\r\n\t\t\tms = 0;\r\n\t\t}\r\n\t\treturn TimeDuration.ms( ms );\r\n\t}\r\n\r\n\tpublic static unref = ( ms: TValidTimeDuration ): TPredefinedTimeDuration => {\r\n\t\treturn TimeDuration.shamefulUnref( ms ) as TPredefinedTimeDuration;\r\n\t}\r\n\r\n\tpublic static ref = ( ms: TValidTimeDuration ): TimeDuration => {\r\n\t\treturn TimeDuration.shamefulRef( ms );\r\n\t}\r\n\r\n\tpublic static fromMs( ms: number ) {\r\n\t\treturn new TimeDuration( ms, TimeUnit.MILLISECONDS );\r\n\t}\r\n\r\n\tpublic static distanceFromNow( instant: TimeInstant ): TimeDuration {\r\n\t\treturn TimeDuration.distance( TimeInstant.now(), instant );\r\n\t}\r\n\r\n\tpublic static distance( instant1: TimeInstant, instant2: TimeInstant ): TimeDuration {\r\n\t\treturn instant1.distanceFrom( instant2 );\r\n\t}\r\n\r\n\tpublic static greatest( duration1: TimeDuration, duration2: TimeDuration ): TimeDuration {\r\n\t\treturn duration1.isGreaterThan( duration2 ) ? duration1 : duration2;\r\n\t}\r\n\r\n\tpublic static lowest( duration1: TimeDuration, duration2: TimeDuration ): TimeDuration {\r\n\t\treturn duration1.isLessThan( duration2 ) ? duration1 : duration2;\r\n\t}\r\n\r\n\tpublic static ZERO = new TimeDuration( 0, TimeUnit.MILLISECONDS );\r\n\r\n\tpublic static fromJSON( ms: number ) {\r\n\t\treturn TimeDuration.ms( ms );\r\n\t}\r\n\r\n}\r\n\r\ninterface IDurationConstructor {\r\n\t( a: number ): TimeDuration\r\n\t/** @deprecated[2023-06] Use RandomTimeDuration instead */( a: number, b?: number ): TimeDuration\r\n}\r\n\r\n/** @deprecated[2023-06] Use RandomTimeDuration instead */\r\nfunction durationConstructor( unit: TimeUnit ): IDurationConstructor {\r\n\treturn ( a: number, b?: number ) => {\r\n\t\tconst aMs = unit.toMs( a );\r\n\t\tconst bMs = b ? unit.toMs( b ) : aMs;\r\n\t\treturn TimeDuration.fromMs( randomInterval( aMs, bMs ) );\r\n\t}\r\n}\r\n\r\nexport type TPredefinedTimeDuration = 0 | 50 | 100 | 150 | 200 | 250 | 300 | 500 | 1000 | 1500 | 2000 | 2500 | 5000;\r\nexport type TValidTimeDuration = TimeDuration | TPredefinedTimeDuration;\r\ntype TAllowedTimeDuration = TValidTimeDuration | number; // eslint-disable-line @typescript-eslint/no-redundant-type-constituents\r\n\r\nexport function isAllowedTimeDuration( t: unknown ): t is TAllowedTimeDuration {\r\n\treturn ( typeof t === \"number\" && t > 0 ) || t instanceof TimeDuration;\r\n}\r\n\r\nexport default TimeDuration;\r\n", "\r\nimport { TFunction } from \"../utils/functions.js\";\r\nimport { ensureDefined } from \"../utils/nulls.js\";\r\nimport { TimeInstant, isTimeInstant } from \"./TimeInstant.js\";\r\nimport { TDayOfMonth, THourOfDay, TMillisecondOfSecond, TMinuteOfHour, TMonth, TSecondOfMinute, TUpToTwoDigits } from \"./types.js\";\r\n\r\ntype TRelativeSignum = '+' | '-';\r\ntype TRelativeNumber = `${TRelativeSignum}${TUpToTwoDigits}`;\r\nconst isRelativeNumber = ( x: string ): x is TRelativeNumber => x !== undefined && x.length > 0 && ( x[ 0 ] === '+' || x[ 0 ] === '-' );\r\nexport type TTimeInstantCreationParameters = {\r\n\tyear: number | { absolute: number } | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n\tmonth: TMonth | { absolute: TMonth } | keyof typeof monthNames | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n\tdate: TDayOfMonth | { absolute: TDayOfMonth } | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n\thours: THourOfDay | { absolute: THourOfDay } | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n\tminutes: TMinuteOfHour | { absolute: TMinuteOfHour } | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n\tseconds: TSecondOfMinute | { absolute: TSecondOfMinute } | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n\tmilliseconds: TMillisecondOfSecond | { absolute: TMillisecondOfSecond } | TRelativeNumber | { relative: number, relativeTo: 'now' | TimeInstant } | 'next' | 'last' | 'current' | undefined;\r\n}\r\n\r\nconst defaultTimeInstantCreationParameters: TTimeInstantCreationParameters = {\r\n\tyear: { relative: 0, relativeTo: 'now' },\r\n\tmonth: { relative: 0, relativeTo: 'now' },\r\n\tdate: { relative: 0, relativeTo: 'now' },\r\n\thours: { relative: 0, relativeTo: 'now' },\r\n\tminutes: { relative: 0, relativeTo: 'now' },\r\n\tseconds: { relative: 0, relativeTo: 'now' },\r\n\tmilliseconds: { relative: 0, relativeTo: 'now' },\r\n};\r\nconst timeInstantCreationRelativeAliases = {\r\n\tcurrent: 0,\r\n\tlast: -1,\r\n\tnext: +1,\r\n} as const satisfies Record<string, number>;\r\nconst monthNames = {\r\n\tjanuary: 1,\r\n\tfebruary: 2,\r\n\tmarch: 3,\r\n\tapril: 4,\r\n\tmay: 5,\r\n\tjune: 6,\r\n\tjuly: 7,\r\n\taugust: 8,\r\n\tseptember: 9,\r\n\toctober: 10,\r\n\tnovember: 11,\r\n\tdecember: 12,\r\n} as const satisfies Record<string, number>;\r\ntype TAllowedTimeInstantCreationAlias = keyof typeof timeInstantCreationRelativeAliases;\r\ntype TAllowedTimeInstantCreationParameter = { absolute: number } | { relative: number, relativeTo?: TimeInstant | 'now' } | TAllowedTimeInstantCreationAlias | TRelativeNumber | keyof typeof monthNames | number | undefined;\r\nconst timeInstantResolveValue = ( getFromDate: TFunction<Date, number>, referenceDate: Date, x: TAllowedTimeInstantCreationParameter ): number => {\r\n\tif ( x === undefined ) {\r\n\t\treturn getFromDate( referenceDate );\r\n\t} else if ( typeof x === 'number' ) {\r\n\t\treturn x;\r\n\t} else if ( typeof x === 'string' ) {\r\n\t\tif ( isRelativeNumber( x ) ) {\r\n\t\t\treturn getFromDate( referenceDate ) + parseInt( x );\r\n\t\t} else if ( x in timeInstantCreationRelativeAliases ) {\r\n\t\t\treturn getFromDate( referenceDate ) + timeInstantCreationRelativeAliases[ x ];\r\n\t\t} else if ( x in monthNames ) {\r\n\t\t\treturn monthNames[x];\r\n\t\t} else {\r\n\t\t\tthrow new Error( 'Uparseable string detected: ' + x );\r\n\t\t}\r\n\t} else if ( \"relative\" in x ) {\r\n\t\tconst { relative, relativeTo } = x;\r\n\t\tif ( relativeTo === undefined || relativeTo === 'now' ) {\r\n\t\t\treturn getFromDate( referenceDate ) + relative;\r\n\t\t} else {\r\n\t\t\treturn getFromDate( relativeTo.toDate() ) + relative;\r\n\t\t}\r\n\t} else if ( \"absolute\" in x ) {\r\n\t\treturn x.absolute\r\n\t} else {\r\n\t\tthrow new Error( 'Uparseable value detected: ' + x );\r\n\t}\r\n};\r\nconst getFromDate = {\r\n\tyear: d => d.getFullYear(),\r\n\tmonth: d => d.getMonth(),\r\n\tdate: d => d.getDate(),\r\n\thours: d => d.getHours(),\r\n\tminutes: d => d.getMinutes(),\r\n\tseconds: d => d.getSeconds(),\r\n\tmilliseconds: d => d.getMilliseconds(),\r\n} as const satisfies Record<string, TFunction<Date, number>>;\r\nconst toReferenceDate = ( x: Date | TimeInstant ): Date => { \r\n\tensureDefined( x );\r\n\tif ( isTimeInstant( x ) ) return x.toDate();\r\n\treturn x;\r\n}\r\n\r\nexport function createTimeInstantFromParameters( aParameters: Partial<TTimeInstantCreationParameters>, aReferenceDate: TimeInstant | Date = TimeInstant.now() ): TimeInstant {\r\n\tconst { year, month, date, hours, minutes, seconds, milliseconds }: TTimeInstantCreationParameters = { ...defaultTimeInstantCreationParameters, ...aParameters };\r\n\tconst referenceDate = toReferenceDate( aReferenceDate );\r\n\tconst timestamp = Date.UTC(\r\n\t\ttimeInstantResolveValue( getFromDate.year, referenceDate, year ),\r\n\t\ttimeInstantResolveValue( getFromDate.month, referenceDate, month ),\r\n\t\ttimeInstantResolveValue( getFromDate.date, referenceDate, date ),\r\n\t\ttimeInstantResolveValue( getFromDate.hours, referenceDate, hours ),\r\n\t\ttimeInstantResolveValue( getFromDate.minutes, referenceDate, minutes ),\r\n\t\ttimeInstantResolveValue( getFromDate.seconds, referenceDate, seconds ),\r\n\t\ttimeInstantResolveValue( getFromDate.milliseconds, referenceDate, milliseconds )\r\n\t);\r\n\tif ( isNaN( timestamp ) )\r\n\t\tthrow new Error( `Unparseable date: ${JSON.stringify( aParameters )} }` );\r\n\treturn TimeInstant.fromUnixTimestamp( timestamp );\r\n}\r\nexport function timeInstantBuilder() {\r\n\tlet referenceDate = TimeInstant.now().toDate();\r\n\tconst value: TTimeInstantCreationParameters = { ...defaultTimeInstantCreationParameters };\r\n\tconst ret = {\r\n\t\tyear: ( x: TTimeInstantCreationParameters[ \"year\" ] ) => { value.year = x; return ret; },\r\n\t\tmonth: ( x: TTimeInstantCreationParameters[ \"month\" ] ) => { value.month = x; return ret; },\r\n\t\tdate: ( x: TTimeInstantCreationParameters[ \"date\" ] ) => { value.date = x; return ret; },\r\n\t\thours: ( x: TTimeInstantCreationParameters[ \"hours\" ] ) => { value.hours = x; return ret; },\r\n\t\tminutes: ( x: TTimeInstantCreationParameters[ \"minutes\" ] ) => { value.minutes = x; return ret; },\r\n\t\tseconds: ( x: TTimeInstantCreationParameters[ \"seconds\" ] ) => { value.seconds = x; return ret; },\r\n\t\tmilliseconds: ( x: TTimeInstantCreationParameters[ \"milliseconds\" ] ) => { value.milliseconds = x; return ret; },\r\n\t\tvalues: ( x: Partial<TTimeInstantCreationParameters> ) => { Object.keys( value ).forEach( key => value[key] = x[key] ?? value[key] ); return ret; },\r\n\t\trelativeTo: ( x: TimeInstant | Date ) => { referenceDate = toReferenceDate( x ); return ret; },\r\n\t\tbuild: () => createTimeInstantFromParameters( value, referenceDate ),\r\n\t};\r\n\treturn ret;\r\n}\r\nexport type TTimeInstantBuilder = ReturnType<typeof timeInstantBuilder>;\r\n", "import TimeInstant from \"./time/TimeInstant\";\r\nimport { noop } from \"./utils/index.js\";\r\n\r\nconst LEVELS = [ \"log\", \"debug\", \"info\", \"warn\", \"error\" ] as const;\r\ntype TLogLevel = keyof Console & typeof LEVELS[ number ]\r\n\r\nconst timestamp = () => TimeInstant.now().asTimeString();\r\n\r\nexport type TLoggerOpts = {\r\n\tconsole: Console;\r\n\tenabled: boolean;\r\n\tminLevel: Uppercase<TLogLevel>;\r\n}\r\n\r\nexport class Logger {\r\n\r\n\tprivate enabled: boolean = true;\r\n\tprivate console: Console;\r\n\tprivate minLevel: number;\r\n\r\n\tpublic constructor(\r\n\t\tpublic readonly name: string,\r\n\t\targs?: Partial<TLoggerOpts>\r\n\t) {\r\n\t\tthis.console = args?.console ?? globalThis.console;\r\n\t\tthis.enabled = args?.enabled ?? true;\r\n\t\tthis.minLevel = LEVELS.indexOf( ( args?.minLevel ?? \"DEBUG\" ).toLowerCase() as TLogLevel );\r\n\t}\r\n\r\n\tpublic get log() { return this.logWrap( 'log' ); }\r\n\tpublic get debug() { return this.logWrap( 'debug' ); }\r\n\tpublic get info() { return this.logWrap( 'info' ); }\r\n\tpublic get warn() { return this.logWrap( 'warn' ); }\r\n\tpublic get error() { return this.logWrap( 'error' ); }\r\n\r\n\tprivate logWrap( methodName: TLogLevel ) {\r\n\t\tif ( !this.console[ methodName ] )\r\n\t\t\tthrow new Error( 'Invalid method name: ' + methodName );\r\n\t\tif ( !this.enabled || !this.console || LEVELS.indexOf( methodName ) < this.minLevel )\r\n\t\t\treturn noop;\r\n\t\treturn this.console[ methodName ].bind( this.console, timestamp(), methodName.toUpperCase(), this.name );\r\n\t}\r\n\r\n}\r\n\r\nexport default Logger;\r\n", "import { TConsumer, TFunction, TPredicate, TProducer, TVoidFunction } from \"./utils/functions.js\";\r\nimport { isDefined, isNullOrUndefined } from \"./utils/nulls.js\";\r\n\r\nexport class Optional<T> implements TOptional<T> {\r\n\r\n\tprivate _present: boolean;\r\n\tprivate _value: T | undefined;\r\n\r\n\tprivate constructor( t: T | null | undefined ) {\r\n\t\tconst defined = isDefined( t );\r\n\t\tthis._value = defined ? t : undefined;\r\n\t\tthis._present = defined;\r\n\t}\r\n\r\n\tpublic get rawValue() {\r\n\t\treturn this._value;\r\n\t}\r\n\r\n\tpublic get(): T | never {\r\n\t\tif ( this.isEmpty() )\r\n\t\t\tthrow new ErrorGetEmptyOptional();\r\n\t\treturn this.rawValue as T;\r\n\t}\r\n\r\n\tpublic set(t: T) {\r\n\t\tif ( isNullOrUndefined( t ) )\r\n\t\t\tthrow new ErrorSetEmptyOptional();\r\n\t\tthis._value = t;\r\n\t\tthis._present = true;\r\n\t}\r\n\r\n\tpublic clear() {\r\n\t\tthis._value = undefined;\r\n\t\tthis._present = false;\r\n\t}\r\n\r\n\tpublic isEmpty(): this is TEmptyOptional<T> {\r\n\t\treturn !this._present;\r\n\t}\r\n\tpublic isPresent(): this is TPresentOptional<T> {\r\n\t\treturn this._present;\r\n\t}\r\n\r\n\tpublic ifEmpty( callback: TVoidFunction ) {\r\n\t\tif ( this.isEmpty() )\r\n\t\t\tcallback();\r\n\t}\r\n\tpublic ifPresent( callback: TConsumer<T> ) {\r\n\t\tif ( this.isPresent() )\r\n\t\t\tcallback( this.rawValue );\r\n\t}\r\n\tpublic apply( callbackIfPresent: TConsumer<T>, callbackIfEmpty: TVoidFunction ) {\r\n\t\tif ( this.isEmpty() ) {\r\n\t\t\tcallbackIfEmpty();\r\n\t\t} else {\r\n\t\t\tcallbackIfPresent( this.rawValue! );\r\n\t\t}\r\n\t}\r\n\r\n\tpublic orElse( newValue: T | null | undefined ) {\r\n\t\tif ( this.isEmpty() )\r\n\t\t\treturn Optional.ofNullable( newValue );\r\n\t\treturn this as TPresentOptional<T>;\r\n\t}\r\n\tpublic orElseGet( produceValue: TProducer<T | null | undefined> ) {\r\n\t\tif ( this.isEmpty() ) {\r\n\t\t\tconst newValue = produceValue();\r\n\t\t\treturn Optional.ofNullable( newValue );\r\n\t\t}\r\n\t\treturn this as TPresentOptional<T>;\r\n\t}\r\n\tpublic orElseThrow( produceError: TProducer<Error> ) {\r\n\t\tif ( this.isEmpty() )\r\n\t\t\tthrow produceError();\r\n\t\treturn this as TPresentOptional<T>;\r\n\t}\r\n\r\n\tpublic mapTo<R>( mapper: TFunction<T, R | null | undefined> ) {\r\n\t\treturn this.flatMapTo( t => Optional.ofNullable( mapper( t ) ) );\r\n\t}\r\n\tpublic flatMapTo<R>( mapper: TFunction<T, TOptional<R>> ) {\r\n\t\tif ( this.isPresent() ) {\r\n\t\t\tconst newValue = mapper( this.rawValue );\r\n\t\t\treturn newValue;\r\n\t\t}\r\n\t\treturn this as TEmptyOptional<T>;\r\n\t}\r\n\r\n\tpublic filter( predicate: TPredicate<T> ): this | TEmptyOptional<T> {\r\n\t\tif ( this.isPresent() ) {\r\n\t\t\tif ( predicate( this.rawValue ) ) {\r\n\t\t\t\treturn this;\r\n\t\t\t} else {\r\n\t\t\t\treturn Optional.empty();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static empty<T>(): TEmptyOptional<T> {\r\n\t\treturn new Optional( undefined ) as any;\r\n\t}\r\n\tpublic static of<T>( t: T ): TPresentOptional<T> {\r\n\t\tif ( isNullOrUndefined( t ) )\r\n\t\t\tthrow new ErrorCannotInstantiatePresentOptionalWithEmptyValue();\r\n\t\treturn new Optional( t ) as any;\r\n\t}\r\n\tpublic static ofNullable<T>( t: T | null | undefined ): TOptional<T> {\r\n\t\treturn new Optional( t ) as any;\r\n\t}\r\n\r\n}\r\nexport default Optional;\r\n\r\nexport type TOptional<T> = {\r\n\treadonly rawValue: T | undefined;\r\n\r\n\t/**\r\n\t * @returns the currently stored value, if any; throws {@link ErrorGetEmptyOptional} otherwise;\r\n\t */\r\n\tget(): T | never;\r\n\t/**\r\n\t * Places a new value inside this optional. Throws {@link ErrorSetEmptyOptional} if t is null or undefined.\r\n\t */\r\n\tset(t: T): void;\r\n\t/**\r\n\t * Clears the current value from this optional, if any.\r\n\t */\r\n\tclear(): void;\r\n\tisEmpty(): boolean;\r\n\tisPresent(): boolean;\r\n\r\n\tifEmpty: ( callback: TVoidFunction ) => void;\r\n\tifPresent: ( callback: TConsumer<T> ) => void;\r\n\tapply( callbackIfPresent: TConsumer<T>, callbackIfEmpty: TVoidFunction ): void;\r\n\r\n\torElse: ( ( newValue: T | null | undefined ) => TOptional<T> );\r\n\torElseGet: ( produceValue: TProducer<T | null | undefined> ) => TOptional<T>;\r\n\torElseThrow: ( produceError: TProducer<Error> ) => TPresentOptional<T>;\r\n\r\n\tmapTo<R>( mapper: TFunction<T, R> ): TOptional<R>;\r\n\tflatMapTo<R>( mapper: TFunction<T, TOptional<R>> ): TOptional<R>;\r\n\r\n\tfilter( predicate: TPredicate<T> ): TOptional<T>;\r\n}\r\nexport type TEmptyOptional<T> = TOptional<T> & {\r\n\treadonly rawValue: undefined;\r\n\tisEmpty(): true;\r\n\tisPresent(): false;\r\n}\r\nexport type TPresentOptional<T> = TOptional<T> & {\r\n\treadonly rawValue: T;\r\n\tisEmpty(): false;\r\n\tisPresent(): true;\r\n}\r\n\r\nexport class ErrorGetEmptyOptional extends Error {\r\n\tconstructor() {\r\n\t\tsuper( \"Cannot retrieve a value from an EmptyOptional.\" );\r\n\t}\r\n}\r\nexport class ErrorSetEmptyOptional extends Error {\r\n\tconstructor() {\r\n\t\tsuper( \"Cannot set a null or undefined value.\" );\r\n\t}\r\n}\r\nexport class ErrorCannotInstantiatePresentOptionalWithEmptyValue extends Error {\r\n\tconstructor() {\r\n\t\tsuper( \"Cannot initialize a PresentOptional with a null or undefined value.\" );\r\n\t}\r\n}\r\n", "import { identity } from \"../utils/functions/constant.js\";\r\nimport { TFunction, TKeysOfType, TReadableArray, isDefined, isNullOrUndefined } from \"../utils/index.js\";\r\nimport { TComparisonDirection, TComparisonFunction, TComparisonResult } from \"./types.js\";\r\n\r\ntype TCompareValueOptions = {\r\n\tnullsFirst: boolean;\r\n\tdirection: TComparisonDirection;\r\n}\r\nconst defaultCompareValueOptions: TCompareValueOptions = {\r\n\tnullsFirst: false,\r\n\tdirection: 'ASC',\r\n}\r\n\r\ntype TLooseCompareValueOptions = Partial<TCompareValueOptions> | TComparisonDirection;\r\n\r\nfunction looseOptionsToStrict( x: TLooseCompareValueOptions | undefined ): TCompareValueOptions {\r\n\treturn { ...defaultCompareValueOptions, ...( typeof x === 'string' ? { direction: x } : x ) };\r\n}\r\n\r\nfunction compareValues<V>( a: V, b: V, options: Omit<TCompareValueOptions, \"direction\"> ): TComparisonResult {\r\n\tif ( a === b )\r\n\t\treturn 0;\r\n\r\n\tconst nullA = ( a === null || a === undefined );\r\n\tconst nullB = ( b === null || b === undefined );\r\n\tif ( nullA && nullB )\r\n\t\treturn 0;\r\n\tif ( nullA !== nullB )\r\n\t\treturn ( nullA === options.nullsFirst ) ? -1 : 1;\r\n\r\n\t// A & B are defined and are different.\r\n\treturn ( a < b ? -1 : 1 );\r\n}\r\n\r\nfunction compareFunction<T, V>( fn: TFunction<T, V>, options: TCompareValueOptions ): TComparisonFunction<T> {\r\n\treturn ( a: T, b: T ) => applyDirection( compareValues<V>( fn( a ), fn( b ), options ), options.direction );\r\n}\r\n\r\nfunction applyDirection( res: TComparisonResult, direction: TComparisonDirection ): TComparisonResult {\r\n\treturn res * ( direction === 'ASC' ? 1 : -1 ) as TComparisonResult\r\n}\r\n\r\nfunction compareUsingGetter<T>( getter: TFunction<T, string>, options?: TLooseCompareValueOptions ): TComparisonFunction<T>;\r\nfunction compareUsingGetter<T>( getter: TFunction<T, number>, options?: TLooseCompareValueOptions ): TComparisonFunction<T>;\r\nfunction compareUsingGetter<T>( getter: TFunction<T, Date>, options?: TLooseCompareValueOptions ): TComparisonFunction<T>;\r\nfunction compareUsingGetter<T>( getter: TFunction<T, string | number | Date>, options?: TLooseCompareValueOptions ): TComparisonFunction<T> {\r\n\treturn compareFunction( getter, looseOptionsToStrict( options ) )\r\n}\r\n\r\nfunction compareUsingField<T>( field: keyof T & TKeysOfType<T, string | number | Date>, options?: TLooseCompareValueOptions ): TComparisonFunction<T> {\r\n\treturn compareFunction( t => t[ field ], looseOptionsToStrict( options ) );\r\n}\r\n\r\nfunction compareUsingNaturalOrder<T>( options?: TLooseCompareValueOptions ): TComparisonFunction<T> {\r\n\treturn compareFunction( identity, looseOptionsToStrict( options ) );\r\n}\r\n\r\nfunction compareStrings( options?: TLooseCompareValueOptions & { ignoreCase?: boolean } ): TComparisonFunction<string> {\r\n\treturn compareFunction<string, string>( t => options?.ignoreCase === true ? t.toLowerCase() : t, looseOptionsToStrict( options ) );\r\n}\r\n\r\nfunction compareBooleans( options: Partial<TCompareValueOptions> & { truesFirst: boolean } ): TComparisonFunction<boolean> {\r\n\tconst opts = { ...defaultCompareValueOptions, ...options };\r\n\tconst fn: TComparisonFunction<boolean> = ( a: boolean, b: boolean ) => {\r\n\t\tif ( a === b )\r\n\t\t\treturn 0 as const;\r\n\t\tif ( isNullOrUndefined( a ) ) return opts.nullsFirst ? -1 : 1;\r\n\t\tif ( isNullOrUndefined( b ) ) return opts.nullsFirst ? 1 : -1;\r\n\t\treturn ( ( a === true && opts.truesFirst ) || ( a === false && !opts.truesFirst ) ) ? -1 : 1;\r\n\t}\r\n\treturn ( a, b ) => applyDirection( fn( a, b ), opts.direction );\r\n}\r\n\r\nfunction compareUsingFunction<T>( fn: TComparisonFunction<T> ): TComparisonFunction<T> {\r\n\treturn fn;\r\n}\r\n\r\nfunction compareUsingSet<T>( arr: Array<T> ): TComparisonFunction<T> {\r\n\tconst fn: TComparisonFunction<T> = ( a: T, b: T ) => {\r\n\t\tif ( a === b )\r\n\t\t\treturn 0 as const;\r\n\t\tconst aIncluded = isDefined( a ) && arr.includes( a );\r\n\t\tconst bIncluded = isDefined( b ) && arr.includes( b );\r\n\t\tif ( aIncluded === bIncluded ) {\r\n\t\t\treturn 0 as const;\r\n\t\t} else {\r\n\t\t\treturn ( aIncluded ? -1 as const : 1 as const );\r\n\t\t}\r\n\t}\r\n\treturn fn;\r\n}\r\n\r\nfunction compareUsingArray<T>( arr: Array<T> ): TComparisonFunction<T> {\r\n\tconst fn: TComparisonFunction<T> = ( a: T, b: T ) => {\r\n\t\tif ( a === b )\r\n\t\t\treturn 0 as const;\r\n\t\tconst aIncluded = isDefined( a ) && arr.includes( a );\r\n\t\tconst bIncluded = isDefined( b ) && arr.includes( b );\r\n\t\tif ( !aIncluded && !bIncluded ) {\r\n\t\t\treturn 0 as const;\r\n\t\t} else if ( aIncluded && bIncluded ) {\r\n\t\t\treturn ( arr.indexOf( a ) < arr.indexOf( b ) ? -1 as const : 1 as const );\r\n\t\t} else {\r\n\t\t\treturn ( aIncluded ? -1 as const : 1 as const );\r\n\t\t}\r\n\t}\r\n\treturn fn;\r\n}\r\n\r\nfunction reverse<T>( fn: TComparisonFunction<T> ): TComparisonFunction<T> {\r\n\treturn ( a: T, b: T ) => fn( a, b ) * -1 as TComparisonResult;\r\n}\r\n\r\n/** \r\n * Creates a ComparisonChain V1.\r\n * Usage: ComparisonChain.createWith<number>( c => c.compareUsingNumbers() ).sort( [ 100, 1, 10, 5 ] );\r\n * @deprecated[2023-10-22]: Use createSorterFor instead.\r\n **/\r\nexport class ComparisonChain<T> {\r\n\r\n\tprivate constructor(\r\n\t\tprivate readonly _fns: TComparisonFunction<T>[],\r\n\t\tprivate readonly _reversed: boolean = false\r\n\t) {}\r\n\r\n\tpublic compare = ( a: T, b: T ): TComparisonResult => {\r\n\t\treturn this.doCompare( a, b ) * ( this._reversed ? -1 : 1 ) as TComparisonResult;\r\n\t}\r\n\r\n\tpublic sort = <A extends TReadableArray<T>>( arr: A ): A extends Array<T> ? Array<T> : ReadonlyArray<T> => {\r\n\t\treturn [ ...arr ].sort( this.compare );\r\n\t}\r\n\r\n\tpublic then( getFn: ( compare: TChain<T> ) => TComparisonFunction<T> ): ComparisonChain<T> {\r\n\t\tconst cmp = getFn( createCompare<T>() );\r\n\t\treturn this.thenBy( cmp );\r\n\t}\r\n\r\n\tpublic thenBy( cmp: ComparisonChain<T> | TComparisonFunction<T> ): ComparisonChain<T> {\r\n\t\treturn new ComparisonChain<T>( [ ...this._fns, getComparisonFunction( cmp ) ] );\r\n\t}\r\n\r\n\tpublic thenChain<R>( transform: TFunction<T, R>, getFn: ( compare: TChain<R> ) => TComparisonFunction<R> ): ComparisonChain<T> {\r\n\t\tconst cmp = getFn( createCompare<R>() );\r\n\t\treturn this.thenChainBy( transform, cmp );\r\n\t}\r\n\r\n\tpublic thenChainBy<R>( transform: TFunction<T, R>, cmp: ComparisonChain<R> | TComparisonFunction<R> ): ComparisonChain<T> {\r\n\t\treturn new ComparisonChain<T>( [ ...this._fns, applyTransformationBeforeComparison( transform, getComparisonFunction( cmp ) ) ] );\r\n\t}\r\n\r\n\tpublic reversed(): ComparisonChain<T> {\r\n\t\treturn new ComparisonChain<T>( [ ...this._fns ], !this._reversed );\r\n\t}\r\n\r\n\tprivate doCompare( this: ComparisonChain<T>, a: T, b: T ): TComparisonResult {\r\n\t\treturn this._fns.reduce( ( ret: TComparisonResult, fn: TComparisonFunction<T> ) => {\r\n\t\t\treturn ret !== 0 ? ret : fn( a, b );\r\n\t\t}, 0 );\r\n\t}\r\n\r\n\tpublic static create<T>() {\r\n\t\treturn {\r\n\t\t\tusing: ( getFn: ( chainable: TChain<T> ) => TComparisonFunction<T> ) => {\r\n\t\t\t\treturn new ComparisonChain<T>( [] ).then( getFn );\r\n\t\t\t},\r\n\t\t\tusingTransformation: <R>( transform: TFunction<T, R>, getFn: ( chainable: TChain<R> ) => TComparisonFunction<R> ) => {\r\n\t\t\t\treturn new ComparisonChain<T>( [] ).thenChain( transform, getFn );\r\n\t\t\t},\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static createWith<T>( getFn: ( chainable: TChain<T> ) => TComparisonFunction<T> ) {\r\n\t\treturn this.create<T>().using( getFn );\r\n\t}\r\n\t\r\n\tpublic static createWithTransformation<T, R>( transform: TFunction<T, R>, getFn: ( chainable: TChain<R> ) => TComparisonFunction<R> ) {\r\n\t\treturn this.create<T>().usingTransformation( transform, getFn );\r\n\t}\r\n\r\n}\r\nexport default ComparisonChain;\r\n\r\nfunction createCompare<T>() {\r\n\treturn {\r\n\t\tcompareUsingGetter: compareUsingGetter<T>,\r\n\t\tcompareUsingField: compareUsingField<T>,\r\n\t\tcompareUsingStrings: compareStrings,\r\n\t\tcompareUsingStringsIgnoringCase: ( options?: TLooseCompareValueOptions ) => compareStrings( { ...looseOptionsToStrict( options ), ignoreCase: true } ),\r\n\t\tcompareUsingBooleans: compareBooleans,\r\n\t\tcompareUsingNumbers: compareUsingNaturalOrder<number>,\r\n\t\tcompareUsingDates: compareUsingNaturalOrder<Date>,\r\n\t\tcompareUsingFunction: compareUsingFunction<T>,\r\n\t\tplaceFirst: ( arr: Array<T> ) => compareUsingSet( arr ),\r\n\t\tplaceFirstInOrder: ( arr: Array<T> ) => compareUsingArray( arr ),\r\n\t\tplaceLast: ( arr: Array<T> ) => reverse( compareUsingSet( arr ) ),\r\n\t\tplaceLastInOrder: ( arr: Array<T> ) => reverse( compareUsingArray( [ ...arr ].reverse() ) ),\r\n\t} satisfies Record<string, ( ...args: any[] ) => TComparisonFunction<any>>;\r\n}\r\n\r\nfunction applyTransformationBeforeComparison<T, R>( transform: TFunction<T, R>, fn: TComparisonFunction<R> ): TComparisonFunction<T> {\r\n\treturn ( a: T, b: T ) => fn( transform( a ), transform( b ) );\r\n}\r\n\r\nfunction getComparisonFunction<T>( arg: ComparisonChain<T> | TComparisonFunction<T> ): TComparisonFunction<T> {\r\n\treturn ( arg instanceof ComparisonChain ) ? arg.compare : arg;\r\n}\r\n\r\ntype TChain<T> = ReturnType<typeof createCompare<T>>\r\n", "import { identity } from \"../utils/functions/constant.js\";\r\nimport { TBiFunction, TConditionalParameterOptions, TFunction, TKeysOfType, TPositiveNumber, TReadableArray, isDefined, isNullOrUndefined } from \"../utils/index.js\";\r\nimport { TComparisonDirection, TComparisonFunction, TComparisonResult, TStrictComparisonResult } from \"./types.js\";\r\n\r\ntype TCompareValuesOptions = {\r\n\tnullsFirst: boolean;\r\n};\r\ntype TCompareFunctionOptions = {\r\n\tnullsFirst: boolean;\r\n\tdirection: TComparisonDirection;\r\n};\r\n\r\nconst defaultCompareValuesOptions = {\r\n\tnullsFirst: false,\r\n} as const satisfies Partial<TCompareValuesOptions>;\r\nconst defaultCompareFunctionOptions: TCompareFunctionOptions = {\r\n\t...defaultCompareValuesOptions,\r\n\tdirection: 'ASC',\r\n} as const satisfies Partial<TCompareFunctionOptions>;\r\n\r\nconst naturalOrderComparison = <V>( a: V, b: V ) => a < b ? -1 : 1;\r\n\r\nfunction compareValues<V>( a: V, b: V, cmp: TBiFunction<V, V, TComparisonResult>, { nullsFirst }: TCompareValuesOptions ): TComparisonResult {\r\n\tif ( a === b )\r\n\t\treturn 0;\r\n\r\n\tconst nullA = isNullOrUndefined( a );\r\n\tconst nullB = isNullOrUndefined( b );\r\n\tif ( nullA && nullB )\r\n\t\treturn 0;\r\n\tif ( nullA !== nullB )\r\n\t\treturn ( nullA === nullsFirst ) ? -1 : 1;\r\n\r\n\t// A & B are defined and are different.\r\n\treturn cmp( a, b );\r\n}\r\n\r\nfunction compareFunction<T, V>( fn: TFunction<T, V>, cmp: TBiFunction<V, V, TStrictComparisonResult>, { nullsFirst, direction }: TCompareFunctionOptions ): TComparisonFunction<T> {\r\n\treturn ( a: T, b: T ) => applyDirection( compareValues<V>( fn( a ), fn( b ), cmp, { nullsFirst } ), direction );\r\n}\r\n\r\nfunction applyDirection( res: TComparisonResult, direction: TComparisonDirection ): TComparisonResult {\r\n\treturn res * ( direction === 'ASC' ? 1 : -1 ) as TComparisonResult\r\n}\r\n\r\nfunction combine<T, R, S>( f: TFunction<T, R>, g: TFunction<R, S> ): TFunction<T, S> {\r\n\treturn ( t: T ) => g( f( t ) );\r\n}\r\n\r\nfunction reverse<T>( fn: TComparisonFunction<T> ): TComparisonFunction<T> {\r\n\treturn ( a: T, b: T ) => fn( a, b ) * -1 as TComparisonResult;\r\n}\r\n\r\nconst chain = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, cmpFn: TComparisonFunction<T> ): TSorter<T> => {\r\n\treturn doCreateWithFunctions( [...fns, cmpFn] );\r\n}\r\n\r\nconst transformAndChain = <T, R>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, cmpFn: TComparisonFunction<R> ): TSorter<T> => {\r\n\tconst fn: TComparisonFunction<T> = ( a: T, b: T ) => cmpFn( transform( a ), transform( b ) );\r\n\treturn chain( fns, fn );\r\n}\r\nconst compareStrings = <T, R extends string>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, options: TConditionalParameterOptions<TStringComparisonOptions, typeof defaultStringComparisonOptions> = {} ) => {\r\n\tconst { nullsFirst, direction, ignoreCase } = { ...defaultStringComparisonOptions, ...options };\r\n\tif ( ignoreCase )\r\n\t\ttransform = combine<T, R, R>( transform, t => t.toLowerCase() as R );\r\n\treturn chain( fns, compareFunction( transform, naturalOrderComparison, { nullsFirst, direction } ) );\r\n};\r\nconst compareNumbers = <T, R extends number>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, options: TConditionalParameterOptions<TNumberComparisonOptions, typeof defaultNumberComparisonOptions> = {} ) => {\r\n\tconst { nullsFirst, direction } = { ...defaultNumberComparisonOptions, ...options };\r\n\treturn chain( fns, compareFunction( transform, naturalOrderComparison, { nullsFirst, direction } ) );\r\n};\r\nconst compareDates = <T, R extends Date>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, options: TConditionalParameterOptions<TDateComparisonOptions, typeof defaultDateComparisonOptions> = {} ) => {\r\n\tconst { nullsFirst, direction } = { ...defaultDateComparisonOptions, ...options };\r\n\treturn chain( fns, compareFunction( transform, naturalOrderComparison, { nullsFirst, direction } ) );\r\n};\r\nconst compareBooleans = <T, R extends boolean>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, options: TConditionalParameterOptions<TBooleanComparisonOptions, typeof defaultBooleanComparisonOptions> ) => {\r\n\tconst { nullsFirst, truesFirst } = { ...defaultBooleanComparisonOptions, ...options };\r\n\treturn chain( fns, compareFunction( transform, naturalOrderComparison, { nullsFirst, direction: truesFirst ? 'DESC' : 'ASC' } ) );\r\n};\r\nconst prioritizeSet = <T, R>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, set: ReadonlyArray<R>, reversed = false ) => {\r\n\treturn compareBooleans( fns, ( t: T ) => {\r\n\t\tconst r = transform( t );\r\n\t\treturn isDefined( r ) && set.includes( r );\r\n\t}, { truesFirst: !reversed, nullsFirst: false } );\r\n}\r\nconst prioritizeArray = <T, R>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R>, arr: ReadonlyArray<R>, reversed = false ) => {\r\n\treturn compareNumbers( fns, ( t: T ) => {\r\n\t\tconst r = transform( t );\r\n\t\tif ( !isDefined( r ) ) return Number.MAX_VALUE;\r\n\t\tconst indexOf = arr.indexOf( r );\r\n\t\treturn indexOf === -1 ? Number.MAX_VALUE : indexOf;\r\n\t}, { direction: reversed ? 'DESC' : 'ASC', nullsFirst: false } );\r\n}\r\n\r\nconst next = <T, R>( fns: ReadonlyArray<TComparisonFunction<T>>, transform: TFunction<T, R> ): TSorterStepFull<R, TSorter<T>> => {\r\n\tconst using = <X>( transformToX: TFunction<R, X> ) => {\r\n\t\treturn next( fns, combine( transform, transformToX ) ) satisfies TSorterStepFull<X, TSorter<T>> as any;\r\n\t};\r\n\tconst retAsChainable = {\r\n\t\tchain( chain: TComparable<R> ) {\r\n\t\t\treturn transformAndChain( fns, transform, chain.compare );\r\n\t\t},\r\n\t} as const satisfies TSorterStepForChainables<R, TSorter<T>>;\r\n\tconst retAsUsing = {\r\n\t\tusing,\r\n\t} as const satisfies TSorterStepForUsing<R, TSorter<T>>;\r\n\tconst retAsPrioritizable = {\r\n\t\tprioritizing( arr: Array<R>, _options: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> = {} ) {\r\n\t\t\treturn prioritizeArray( fns, transform, arr );\r\n\t\t},\r\n\t\tdeprioritizing( arr: Array<R>, _options: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> = {} ) {\r\n\t\t\treturn prioritizeArray( fns, transform, arr, true );\r\n\t\t},\r\n\t\tprioritizingWithEqualWeight( arr: Array<R>, _options: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> = {} ) {\r\n\t\t\treturn prioritizeSet( fns, transform, arr );\r\n\t\t},\r\n\t\tdeprioritizingWithEqualWeight( arr: Array<R>, _options: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> = {} ) {\r\n\t\t\treturn prioritizeSet( fns, transform, arr, true );\r\n\t\t},\r\n\t} as const satisfies TSorterStepForPrioritizable<any, TSorter<T>>;\r\n\tconst retForRecords = {\r\n\t\t...retAsUsing,\r\n\t\tusingStrings: field => using( t => t[field] ),\r\n\t\tusingNumbers: field => using( t => t[field] ),\r\n\t\tusingBooleans: field => using( t => t[field] ),\r\n\t\tusingDates: field => using( t => t[field] ),\r\n\t} as const satisfies TSorterStepForRecords<R, TSorter<T>>;\r\n\tconst retForNumbers = {\r\n\t\t...retAsUsing,\r\n\t\tinAscendingOrder( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareNumbers( fns, transform as TFunction<T, number>, { direction: 'ASC', ...opts } );\r\n\t\t},\r\n\t\tinDescendingOrder( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareNumbers( fns, transform as TFunction<T, number>, { direction: 'DESC', ...opts } );\r\n\t\t},\r\n\t} as const satisfies TSorterStepForNumbers<R, TSorter<T>>;\r\n\tconst retForStrings = {\r\n\t\t...retAsUsing,\r\n\t\tinLexographicalOrder( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareStrings( fns, transform as TFunction<T, string>, { direction: 'ASC', ignoreCase: false, ...opts } );\r\n\t\t},\r\n\t\tinLexographicalOrderIgnoringCase( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareStrings( fns, transform as TFunction<T, string>, { direction: 'ASC', ignoreCase: true, ...opts } );\r\n\t\t},\r\n\t\tinReverseLexographicalOrder( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareStrings( fns, transform as TFunction<T, string>, { direction: 'DESC', ignoreCase: false, ...opts } );\r\n\t\t},\r\n\t\tinReverseLexographicalOrderIgnoringCase( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareStrings( fns, transform as TFunction<T, string>, { direction: 'DESC', ignoreCase: true, ...opts } );\r\n\t\t},\r\n\t} as const satisfies TSorterStepForStrings<R, TSorter<T>>;\r\n\tconst retForBooleans = {\r\n\t\t...retAsUsing,\r\n\t\ttruesFirst( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareBooleans( fns, transform as TFunction<T, boolean>, { truesFirst: true, ...opts } );\r\n\t\t},\r\n\t\tfalsesFirst( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareBooleans( fns, transform as TFunction<T, boolean>, { truesFirst: false, ...opts } );\r\n\t\t},\r\n\t} as const satisfies TSorterStepForBooleans<R, TSorter<T>>;\r\n\tconst retForDates = {\r\n\t\t...retAsUsing,\r\n\t\tmostAncientFirst( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareDates( fns, transform as TFunction<T, Date>, { direction: 'ASC', ...opts } );\r\n\t\t},\r\n\t\tmostRecentFirst( opts: { nullsFirst?: boolean } = {} ) {\r\n\t\t\treturn compareDates( fns, transform as TFunction<T, Date>, { direction: 'DESC', ...opts } );\r\n\t\t},\r\n\t} as const satisfies TSorterStepForDates<R, TSorter<T>>;\r\n\treturn {\r\n\t\t...retAsPrioritizable,\r\n\t\t...retAsChainable,\r\n\t\t...retForRecords,\r\n\t\t...retForNumbers,\r\n\t\t...retForStrings,\r\n\t\t...retForBooleans,\r\n\t\t...retForDates,\r\n\t} as const satisfies TSorterStepFull<R, TSorter<T>>;\r\n};\r\n\r\nconst createComparisonFunction = <T>( fns: ReadonlyArray<TComparisonFunction<T>> ): TComparisonFunction<T> => {\r\n\treturn ( a: T, b: T ) => {\r\n\t\tlet cmp: TComparisonResult = 0, i: number = 0;\r\n\t\twhile ( i < fns.length && cmp === 0 ) {\r\n\t\t\tcmp = fns[i++]( a, b );\r\n\t\t}\r\n\t\treturn cmp;\r\n\t}\r\n};\r\n\r\nconst compare = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, a: T, b: T ): TComparisonResult => {\r\n\treturn createComparisonFunction( fns )( a, b );\r\n};\r\n\r\nconst sort = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, arr: TReadableArray<T> ): Array<T> => {\r\n\tconst comparisonFn = createComparisonFunction( fns );\r\n\treturn [...arr].sort( comparisonFn );\r\n};\r\n\r\nconst top = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, arr: TReadableArray<T>, n: TPositiveNumber ): Array<T> => {\r\n\treturn sort( fns, arr ).slice( 0, Math.max( 0, n ) );\r\n};\r\n\r\nconst bottom = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, arr: TReadableArray<T>, n: TPositiveNumber ): Array<T> => {\r\n\treturn sort( fns, arr ).slice( -Math.max( 0, n ) ).reverse();\r\n};\r\n\r\nconst first = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, arr: TReadableArray<T> ): T | null => {\r\n\treturn arr.length ? top( fns, arr, 1 )[0] : null;\r\n};\r\n\r\nconst last = <T>( fns: ReadonlyArray<TComparisonFunction<T>>, arr: TReadableArray<T> ): T | null => {\r\n\treturn arr.length ? bottom( fns, arr, 1 )[0] : null;\r\n};\r\n\r\nfunction doCreateEmpty<T>(): TSorterStarter<T> {\r\n\t// If we have no comparison functions, return an object that only has chain methods.\r\n\treturn next( [], x => x ) satisfies TSorterStepFull<T, TSorter<T>> as unknown as TSorterStarter<T>;\r\n}\r\n\r\nfunction doCreateWithFunctions<T>( fns: ReadonlyArray<TComparisonFunction<T>> ): TSorter<T> {\r\n\t// If we have some comparison functions, return an object that has chain methods and ending methods.\r\n\treturn {\r\n\t\tget then() {\r\n\t\t\treturn next( fns, identity ) satisfies TSorterStepFull<T, TSorter<T>> as any;\r\n\t\t},\r\n\t\treversed() {\r\n\t\t\treturn doCreateWithFunctions( [...fns.map( reverse )] );\r\n\t\t},\r\n\t\tcompare: ( a: T, b: T ) => {\r\n\t\t\treturn compare( fns, a, b )\r\n\t\t},\r\n\t\tsort: ( arr: TReadableArray<T> ): Array<T> => {\r\n\t\t\treturn sort( fns, arr );\r\n\t\t},\r\n\t\ttop: ( arr: TReadableArray<T>, n: TPositiveNumber ): Array<T> => {\r\n\t\t\treturn top( fns, arr, n );\r\n\t\t},\r\n\t\tbottom: ( arr: TReadableArray<T>, n: TPositiveNumber ): Array<T> => {\r\n\t\t\treturn bottom( fns, arr, n );\r\n\t\t},\r\n\t\tfirst: ( arr: TReadableArray<T> ): T | null => {\r\n\t\t\treturn first( fns, arr );\r\n\t\t},\r\n\t\tlast: ( arr: TReadableArray<T> ): T | null => {\r\n\t\t\treturn last( fns, arr );\r\n\t\t},\r\n\t} as const satisfies TSorter<T>;\r\n}\r\n\r\ntype TComparable<T> = { compare: TComparisonFunction<T> };\r\n\r\nexport type TSorter<T> = {\r\n\tget then(): TSorterStep<T, TSorter<T>>;\r\n\treversed: () => TSorter<T>;\r\n\r\n\tcompare: TComparisonFunction<T>;\r\n\tsort: ( arr: TReadableArray<T> ) => Array<T>;\r\n\ttop: ( arr: TReadableArray<T>, n: TPositiveNumber ) => Array<T>;\r\n\tbottom: ( arr: TReadableArray<T>, n: TPositiveNumber ) => Array<T>;\r\n\tfirst: ( arr: TReadableArray<T> ) => T | null;\r\n\tlast: ( arr: TReadableArray<T> ) => T | null;\r\n}\r\n\r\ntype TSorterStepForRecords<T, Ret> = {\r\n\tusingStrings: ( field: TKeysOfType<T, string> ) => TSorterStep<string, Ret>;\r\n\tusingNumbers: ( field: TKeysOfType<T, number> ) => TSorterStep<number, Ret>;\r\n\tusingBooleans: ( field: TKeysOfType<T, boolean> ) => TSorterStep<boolean, Ret>;\r\n\tusingDates: ( field: TKeysOfType<T, Date> ) => TSorterStep<Date, Ret>;\r\n};\r\ntype TSorterStepForNumbers<_T, Ret> = {\r\n\tinAscendingOrder( opts?: { nullsFirst?: boolean } ): Ret;\r\n\tinDescendingOrder( opts?: { nullsFirst?: boolean } ): Ret;\r\n};\r\ntype TSorterStepForStrings<_T, Ret> = {\r\n\tinLexographicalOrder( opts?: { nullsFirst?: boolean } ): Ret;\r\n\tinLexographicalOrderIgnoringCase( opts?: { nullsFirst?: boolean } ): Ret;\r\n\tinReverseLexographicalOrder( opts?: { nullsFirst?: boolean } ): Ret;\r\n\tinReverseLexographicalOrderIgnoringCase( opts?: { nullsFirst?: boolean } ): Ret;\r\n};\r\ntype TSorterStepForBooleans<_T, Ret> = {\r\n\ttruesFirst( opts?: { nullsFirst?: boolean } ): Ret;\r\n\tfalsesFirst( opts?: { nullsFirst?: boolean } ): Ret;\r\n};\r\ntype TSorterStepForDates<_T, Ret> = {\r\n\tmostAncientFirst( opts?: { nullsFirst?: boolean } ): Ret;\r\n\tmostRecentFirst( opts?: { nullsFirst?: boolean } ): Ret;\r\n};\r\ntype TSorterStepForChainables<T, Ret> = {\r\n\tchain: ( chain: TComparable<T> ) => Ret;\r\n};\r\ntype TSorterStepForUsing<T, Ret> = {\r\n\tusing: <X>( transform: TFunction<T, X> ) => TSorterStep<X, Ret>;\r\n};\r\ntype TSorterStepForPrioritizable<T extends string | number, Ret> = {\r\n\tprioritizing( arr: T[], options?: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> ): Ret;\r\n\tdeprioritizing( arr: Array<T>, options?: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> ): Ret;\r\n\tprioritizingWithEqualWeight( arr: T[], options?: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> ): Ret;\r\n\tdeprioritizingWithEqualWeight( arr: Array<T>, options?: TConditionalParameterOptions<TPrioritizeOptions, typeof defaultPrioritizeOptions> ): Ret;\r\n};\r\ntype TSorterStep<T, Ret> = {}\r\n\t& ( T extends Record<string | number | symbol, unknown> ? TSorterStepForRecords<T, Ret> : {} )\r\n\t& ( T extends number ? TSorterStepForNumbers<T, Ret> : {} )\r\n\t& ( T extends string ? TSorterStepForStrings<T, Ret> : {} )\r\n\t& ( T extends boolean ? TSorterStepForBooleans<T, Ret> : {} )\r\n\t& ( T extends Date ? TSorterStepForDates<T, Ret> : {} )\r\n\t& ( T extends string ? TSorterStepForPrioritizable<string, Ret> : {} ) // Allowing all types of strings here is needed because literal types extending strings create compilation problems with method signatures (T[] where T = 'A' | 'B' becomes 'A'[] & 'B'[])\r\n\t& ( T extends number ? TSorterStepForPrioritizable<number, Ret> : {} ) // Allowing all types of numbers here is needed because literal types extending numbers create compilation problems with method signatures (T[] where T = 1 | 2 becomes 1[] & 2[])\r\n\t& TSorterStepForChainables<T, Ret>\r\n\t& TSorterStepForUsing<T, Ret>\r\n\t;\r\ntype TSorterStepFull<T, Ret> = TSorterStepForRecords<T, Ret>\r\n\t& TSorterStepForNumbers<T, Ret>\r\n\t& TSorterStepForStrings<T, Ret>\r\n\t& TSorterStepForBooleans<T, Ret>\r\n\t& TSorterStepForDates<T, Ret>\r\n\t& TSorterStepForChainables<T, Ret>\r\n\t& TSorterStepForUsing<T, Ret>\r\n\t;\r\ntype TSorterStarter<T> = TSorterStep<T, TSorter<T>>;\r\nexport type TSorterBuilder<T> = ( builder: TSorterStarter<T> ) => TSorter<T>;\r\n\r\ntype TStringComparisonOptions = TCompareFunctionOptions & { ignoreCase: boolean };\r\nconst defaultStringComparisonOptions = { ...defaultCompareFunctionOptions, ignoreCase: false } as const satisfies Partial<TStringComparisonOptions>;\r\n\r\ntype TNumberComparisonOptions = TCompareFunctionOptions;\r\nconst defaultNumberComparisonOptions = { ...defaultCompareFunctionOptions } as const satisfies Partial<TNumberComparisonOptions>;\r\n\r\ntype TDateComparisonOptions = TCompareFunctionOptions;\r\nconst defaultDateComparisonOptions = { ...defaultCompareFunctionOptions } as const satisfies Partial<TDateComparisonOptions>;\r\n\r\ntype TBooleanComparisonOptions = TCompareValuesOptions & { truesFirst: boolean };\r\nconst defaultBooleanComparisonOptions = { ...defaultCompareValuesOptions } as const satisfies Partial<TBooleanComparisonOptions>;\r\n\r\ntype TPrioritizeOptions = {};\r\nconst defaultPrioritizeOptions = {} as const satisfies Partial<TPrioritizeOptions>;\r\n\r\n/** \r\n * @deprecated[2023-10-19]: Use {@link Sorter.createFor} instead.\r\n **/\r\nexport function createSorterFor<T>() {\r\n\treturn doCreateEmpty<T>();\r\n}\r\n\r\nexport const Sorter = {\r\n\tcreateFor: <T>() => doCreateEmpty<T>(),\r\n\tsort: <T>( arr: TReadableArray<T>, builder: TSorterBuilder<T> ) => builder( doCreateEmpty() ).sort( arr ),\r\n\ttop: <T>( arr: TReadableArray<T>, n: TPositiveNumber, builder: TSorterBuilder<T> ) => builder( doCreateEmpty() ).top( arr, n ),\r\n\tbottom: <T>( arr: TReadableArray<T>, n: TPositiveNumber, builder: TSorterBuilder<T> ) => builder( doCreateEmpty() ).bottom( arr, n ),\r\n\tfirst: <T>( arr: TReadableArray<T>, builder: TSorterBuilder<T> ) => builder( doCreateEmpty() ).first( arr ),\r\n\tlast: <T>( arr: TReadableArray<T>, builder: TSorterBuilder<T> ) => builder( doCreateEmpty() ).last( arr ),\r\n};\r\n/** \r\n * @deprecated[2023-11-01]: Use {@link Sorter} instead.\r\n **/\r\nexport const Sorting = Sorter;\r\nexport default Sorter;\r\n", "import { randomInterval } from \"../utils/random.js\";\r\nimport TimeDuration from \"./TimeDuration.js\";\r\nimport TimeUnit from \"./TimeUnit.js\";\r\n\r\nfunction randomize( unit: TimeUnit ) {\r\n\treturn ( a: number, b: number ) => {\r\n\t\treturn TimeDuration.fromMs( randomInterval( unit.toMs( a ), unit.toMs( b ) ) );\r\n\t}\r\n}\r\n\r\nexport default class RandomTimeDuration {\r\n\r\n\tprivate constructor() {}\r\n\r\n\tpublic static ms = randomize( TimeUnit.MILLISECONDS );\r\n\tpublic static seconds = randomize( TimeUnit.SECONDS );\r\n\tpublic static minutes = randomize( TimeUnit.MINUTES );\r\n\tpublic static hours = randomize( TimeUnit.HOURS );\r\n\tpublic static days = randomize( TimeUnit.DAYS );\r\n\r\n}\r\n", "import { TPositiveNumber } from \"../utils\";\r\nimport TimeDuration from \"./TimeDuration\";\r\n\r\nexport default class TimeFrequency {\r\n\r\n\tpublic constructor(\r\n\t\tpublic readonly times: TPositiveNumber,\r\n\t\tpublic readonly period: TimeDuration,\r\n\t) { \r\n\t\tif ( isNaN( times ) || times <= 0 )\r\n\t\t\tthrow new Error();\r\n\t\tif ( period.isEmpty() )\r\n\t\t\tthrow new Error();\r\n\t}\r\n\r\n\tpublic get frequency() {\r\n\t\treturn this.period.divideBy( this.times );\r\n\t}\r\n\r\n\tpublic static onceEvery( period: TimeDuration ) {\r\n\t\treturn new TimeFrequency( 1, period );\r\n\t}\r\n\r\n\tpublic static twiceEvery( period: TimeDuration ) {\r\n\t\treturn new TimeFrequency( 2, period );\r\n\t}\r\n\r\n}\r\n", "import { TimeDuration } from \"./index.js\";\r\nimport TimeInstant from \"./TimeInstant.js\";\r\n\r\nexport class TimeRange {\r\n\r\n\tpublic readonly end: TimeInstant;\r\n\r\n\tprotected constructor(\r\n\t\tpublic readonly start: TimeInstant,\r\n\t\tpublic readonly duration: TimeDuration\r\n\t) {\r\n\t\tthis.end = start.addDuration( duration );\r\n\t}\r\n\r\n\tpublic static fromInstants( a: TimeInstant, b: TimeInstant ) {\r\n\t\tconst lowest = TimeInstant.lowest( a, b );\r\n\t\tconst highest = TimeInstant.highest( a, b );\r\n\t\treturn new TimeRange( lowest, lowest.distanceFrom( highest ) );\r\n\t}\r\n\r\n\tpublic static fromInstantWithDuration( a: TimeInstant, d: TimeDuration ) {\r\n\t\treturn new TimeRange( a, d );\r\n\t}\r\n\r\n\tpublic static fromNowWithDuration( d: TimeDuration ) {\r\n\t\treturn new TimeRange( TimeInstant.now(), d );\r\n\t}\r\n\r\n}\r\n", "\r\n\r\nexport class UnavailableUpgradeError<T> extends Error {\r\n\r\n\tconstructor(\r\n\t\tpublic readonly data: T,\r\n\t\tpublic readonly from: number,\r\n\t\tpublic readonly to: number\r\n\t) {\r\n\t\tsuper( `No transition found to upgrade data from version ${from} to version ${to}.` );\r\n\t}\r\n\r\n}\r\n\r\nexport class EmptyUpgradeError<T> extends Error {\r\n\r\n\tconstructor(\r\n\t\tpublic readonly data: T,\r\n\t\tpublic readonly from: number,\r\n\t\tpublic readonly to: number,\r\n\t) {\r\n\t\tsuper( `Transition from version ${ from } to version ${ to } resulted in empty data` );\r\n\t}\r\n\r\n}\r\n", "\r\nimport { TMaybe } from \"../utils\";\r\nimport { TTransition, TTransitionMatrix, TUpgradable } from \"./types\";\r\n\r\nconst DEBUG_ENABLED = false;\r\n\r\nexport default function getTransitionsPath<\r\n\tXStar extends TUpgradable,\r\n\tXFromNumber extends XStar[ \"$version\" ],\r\n\tXToNumber extends XStar[ \"$version\" ]\r\n>(\r\n\tmatrix: TTransitionMatrix<XStar>,\r\n\tfrom: XFromNumber,\r\n\tto: XToNumber\r\n): TMaybe<TTransition<XStar, XFromNumber, XToNumber>[]> {\r\n\treturn internalGetTransitionsPath( matrix, from, to, 0, DEBUG_ENABLED );\r\n}\r\n\r\nfunction internalGetTransitionsPath<\r\n\tXStar extends TUpgradable,\r\n\tXFromNumber extends XStar[ \"$version\" ],\r\n\tXToNumber extends XStar[ \"$version\" ]\r\n>(\r\n\tmatrix: TTransitionMatrix<XStar>,\r\n\tfrom: XFromNumber,\r\n\tto: XToNumber,\r\n\tdepth: number,\r\n\tdebug: boolean,\r\n): TMaybe<TTransition<XStar, any, any>[]> {\r\n\r\n\tdebugLog( debug, depth, from, to, 'Search started.' );\r\n\r\n\tconst transitionsTo = matrix[ to ];\r\n\tif ( !transitionsTo ) {\r\n\t\tdebugLog( debug, depth, from, to, 'No transitions available to this version' );\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// Check if there is a transition that goes directly from from to to.\r\n\tconst exactTransition = transitionsTo[ from ];\r\n\tif ( exactTransition ) {\r\n\t\tdebugLog( debug, depth, from, to, 'Found exact transition.' );\r\n\t\treturn [ exactTransition ];\r\n\t}\r\n\r\n\t// Otherwise, recursively search for the min path.\r\n\tconst keys = Object.keys( transitionsTo );\r\n\treturn keys.reduce( ( curBestPath: TMaybe<TTransition<XStar, any, any>[]>, transitionKey: string ) => {\r\n\t\tconst transition = transitionsTo[ transitionKey as unknown as XStar[ \"$version\" ] ]!;\r\n\t\tconst path = internalGetTransitionsPath( matrix, from, transition.from, depth + 1, debug );\r\n\t\tif ( path === null ) {\r\n\t\t\tdebugLog( debug, depth + 1, from, transition.from, 'No path found.' );\r\n\t\t\treturn curBestPath;\r\n\t\t} else {\r\n\t\t\tif ( curBestPath === null || curBestPath.length > path.length + 1 ) {\r\n\t\t\t\tdebugLog( debug, depth + 1, from, transition.from, 'New best path found: ' + printTransitions( path ) );\r\n\t\t\t\treturn [ ...path, transition ];\r\n\t\t\t} else {\r\n\t\t\t\treturn curBestPath;\r\n\t\t\t}\r\n\t\t}\r\n\t}, null as TMaybe<TTransition<XStar, any, any>[]> );\r\n\r\n}\r\n\r\nfunction debugLog(\r\n\tenabled: boolean,\r\n\tdepth: number,\r\n\tfrom: number,\r\n\tto: number,\r\n\tmessage: string\r\n) {\r\n\tif ( !enabled )\r\n\t\treturn;\r\n\t// istanbul ignore next\r\n\t// eslint-disable-next-line no-restricted-globals\r\n\tconsole.info(\r\n\t\t'#'.repeat( depth + 1 ),\r\n\t\tfrom + ' -> ' + to,\r\n\t\tmessage\r\n\t);\r\n}\r\n\r\nfunction printTransitions( transitions: TTransition<any, any, any>[] ): string {\r\n\treturn transitions.reduce( ( ret, cur ) => {\r\n\t\treturn ret + \" -> \" + cur.to;\r\n\t}, \"\" + transitions[ 0 ].from );\r\n}\r\n\r\n", "\r\nimport { jsonCloneDeep } from \"../utils\";\r\nimport { isDefined, isNumber, isPositiveNumber, TJsonSerializable } from \"../utils/index.js\";\r\nimport { EmptyUpgradeError, UnavailableUpgradeError } from \"./errors\";\r\nimport getTransitionsPath from \"./getTransitionsPath\";\r\nimport { TPossibleFromVersion, TPossibleVersion, TTransitionMatrix, TUpgradable, TUpgradeFunction, TVersionMap } from \"./types\";\r\n\r\nconst VERSION_FIELD = \"$version\";\r\n\r\nexport interface IDataUpgrader<XStar extends TUpgradable, XLatest extends XStar> {\r\n\tupgrade( data: XStar ): Promise<XLatest>;\r\n}\r\n\r\nexport class DataUpgrader<X extends TUpgradable, XLatest extends X> implements IDataUpgrader<X, XLatest> {\r\n\r\n\tprivate transitions: TTransitionMatrix<X> = {};\r\n\r\n\tprivate constructor(\r\n\t\tprivate latestVersion: XLatest[ typeof VERSION_FIELD ]\r\n\t) { }\r\n\r\n\tpublic addTransition<\r\n\t\tXFrom extends TVersionMap<X>[ XFromNumber ],\r\n\t\tXTo extends TVersionMap<X>[ XToNumber ],\r\n\t\tXFromNumber extends TPossibleFromVersion<X, XLatest>,\r\n\t\tXToNumber extends Exclude<TPossibleVersion<X>, XFromNumber>,\r\n\t>(\r\n\t\tfrom: XFromNumber,\r\n\t\tto: XToNumber,\r\n\t\tapply: TUpgradeFunction<X, XFrom, XTo>\r\n\t): this {\r\n\t\tif ( from === undefined || from < 0 )\r\n\t\t\tthrow new Error( `Invalid argument from, non-negative number expected, got: ${from}` );\r\n\t\tif ( to === undefined || to <= 0 )\r\n\t\t\tthrow new Error( `Invalid argument to, positive number expected, got: ${to}` );\r\n\t\tif ( to <= from )\r\n\t\t\tthrow new Error( `Invalid argument to, expected number greater than ${from}, got: ${to}` );\r\n\t\tif ( to > this.latestVersion )\r\n\t\t\tthrow new Error( `Invalid argument to, expected number lower than ${this.latestVersion}, got: ${to}` );\r\n\t\tif ( this.transitions[ to ]?.[ from ] )\r\n\t\t\tthrow new Error( `Invalid transition arguments, duplicated transition found from ${from} to ${to}` );\r\n\t\tconst toMatrix: TTransitionMatrix<X>[ XTo[ typeof VERSION_FIELD ] ] = this.transitions[ to ] ?? {};\r\n\t\ttoMatrix[ from ] = { from, to, apply };\r\n\t\tthis.transitions[ to ] = toMatrix;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic async upgrade( data: X ): Promise<XLatest> {\r\n\t\tif ( !data || typeof data !== \"object\" )\r\n\t\t\tthrow new Error( `Invalid argument data, object expected, got: ${typeof data}.` );\r\n\t\tif ( data.$version === null || data.$version === undefined || typeof data.$version !== \"number\" )\r\n\t\t\tthrow new Error( `Invalid argument data, version metadata required, got: ${data.$version as unknown as string}` );\r\n\t\tif ( data.$version > this.latestVersion )\r\n\t\t\tthrow new Error( `Invalid argument data, version metadata is in the future: ${data.$version}, current: ${this.latestVersion}` );\r\n\t\tif ( this.isLatestVersion( data ) )\r\n\t\t\treturn data;\r\n\r\n\t\tconst from = data.$version;\r\n\t\tconst to = this.latestVersion;\r\n\t\tconst path = getTransitionsPath<X, typeof from, XLatest[ typeof VERSION_FIELD ]>( this.transitions, from, to );\r\n\t\tif ( path === null )\r\n\t\t\tthrow new UnavailableUpgradeError( data, from, to );\r\n\r\n\t\tlet current: X = jsonCloneDeep( data );\r\n\t\tfor ( const transition of path ) {\r\n\t\t\tconst next = await transition.apply( current as any );\r\n\t\t\tif ( next === null || next === undefined )\r\n\t\t\t\tthrow new EmptyUpgradeError( current, from, to );\r\n\t\t\tcurrent = next;\r\n\t\t}\r\n\r\n\t\treturn current as XLatest;\r\n\t}\r\n\r\n\tpublic isLatestVersion( data: X ): data is XLatest {\r\n\t\treturn data.$version === this.latestVersion;\r\n\t}\r\n\r\n\tpublic static create<\r\n\t\tX extends TUpgradable,\r\n\t\tXLatestVersion extends X,\r\n\t>(\r\n\t\tlatest: XLatestVersion[ typeof VERSION_FIELD ]\r\n\t) {\r\n\t\treturn new DataUpgrader<X, XLatestVersion>( latest );\r\n\t}\r\n\r\n\tpublic static Errors = {\r\n\t\tEmptyUpgrade: EmptyUpgradeError,\r\n\t\tUnavailableUpgrade: UnavailableUpgradeError\r\n\t} as const;\r\n\r\n}\r\n\r\nexport function isUpgradable( obj: TJsonSerializable ): obj is TUpgradable {\r\n\treturn isDefined( obj ) && typeof obj === \"object\" && VERSION_FIELD in obj && isNumber( obj.$version ) && isPositiveNumber( obj.$version );\r\n}\r\n\r\nexport default DataUpgrader;\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["exports", "format", "exports", "arr", "min", "max", "partition", "min", "max", "min", "max", "tail", "format", "getFromDate", "timestamp", "timestamp", "reverse", "compareValues", "compareFunction", "applyDirection", "reverse", "compareStrings", "compareBooleans", "chain", "first", "last", "next"]
|
|
7
|
+
}
|