@byloth/core 1.2.0-rc.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var a = Object.defineProperty;
2
2
  var h = (r, e, t) => e in r ? a(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
3
  var o = (r, e, t) => (h(r, typeof e != "symbol" ? e + "" : e, t), t);
4
- class m {
4
+ class v {
5
5
  constructor(e, t) {
6
6
  o(this, "_resolve");
7
7
  o(this, "_reject");
@@ -51,7 +51,7 @@ Caused by ${t.stack}` : this.stack += `
51
51
  Caused by ${t}`);
52
52
  }
53
53
  }
54
- class v {
54
+ class m {
55
55
  constructor(e = !0) {
56
56
  o(this, "_preferPersistence");
57
57
  o(this, "_volatile");
@@ -218,28 +218,24 @@ class u {
218
218
  filter(e) {
219
219
  let t = 0;
220
220
  const s = this._iterator;
221
- return new u({
222
- *[Symbol.iterator]() {
223
- for (; ; ) {
224
- const n = s.next();
225
- if (n.done)
226
- return n.value;
227
- e(n.value, t) && (yield n.value), t += 1;
228
- }
221
+ return new u(function* () {
222
+ for (; ; ) {
223
+ const n = s.next();
224
+ if (n.done)
225
+ return n.value;
226
+ e(n.value, t) && (yield n.value), t += 1;
229
227
  }
230
228
  });
231
229
  }
232
230
  map(e) {
233
231
  let t = 0;
234
232
  const s = this._iterator;
235
- return new u({
236
- *[Symbol.iterator]() {
237
- for (; ; ) {
238
- const n = s.next();
239
- if (n.done)
240
- return n.value;
241
- yield e(n.value, t), t += 1;
242
- }
233
+ return new u(function* () {
234
+ for (; ; ) {
235
+ const n = s.next();
236
+ if (n.done)
237
+ return n.value;
238
+ yield e(n.value, t), t += 1;
243
239
  }
244
240
  });
245
241
  }
@@ -292,11 +288,11 @@ class w {
292
288
  async function g(r) {
293
289
  return new Promise((e, t) => setTimeout(e, r));
294
290
  }
295
- async function y() {
291
+ async function b() {
296
292
  return new Promise((r, e) => requestAnimationFrame(() => r()));
297
293
  }
298
294
  var f = /* @__PURE__ */ ((r) => (r[r.Second = 1e3] = "Second", r[r.Minute = 6e4] = "Minute", r[r.Hour = 36e5] = "Hour", r[r.Day = 864e5] = "Day", r[r.Week = 6048e5] = "Week", r[r.Month = 2592e6] = "Month", r[r.Year = 31536e6] = "Year", r))(f || {});
299
- function b(r, e, t = 864e5) {
295
+ function y(r, e, t = 864e5) {
300
296
  return Math.floor((e.getTime() - r.getTime()) / t);
301
297
  }
302
298
  function p(r, e, t = 864e5) {
@@ -402,25 +398,25 @@ function $(r) {
402
398
  function C(r) {
403
399
  return `${r.charAt(0).toUpperCase()}${r.slice(1)}`;
404
400
  }
405
- const E = "1.2.0-rc.3";
401
+ const E = "1.2.0";
406
402
  export {
407
403
  f as DateUnit,
408
- m as DeferredPromise,
404
+ v as DeferredPromise,
409
405
  l as Exception,
410
- v as JsonStorage,
406
+ m as JsonStorage,
411
407
  u as SmartIterator,
412
408
  w as Subscribers,
413
409
  E as VERSION,
414
410
  P as average,
415
411
  C as capitalize,
416
412
  I as count,
417
- b as dateDifference,
413
+ y as dateDifference,
418
414
  p as dateRange,
419
415
  x as dateRound,
420
416
  g as delay,
421
417
  T as hash,
422
418
  S as loadScript,
423
- y as nextAnimationFrame,
419
+ b as nextAnimationFrame,
424
420
  A as random,
425
421
  M as range,
426
422
  k as shuffle,
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../src/models/deferred-promise.ts","../src/models/exception.ts","../src/models/json-storage.ts","../src/models/smart-iterator.ts","../src/models/subscribers.ts","../src/utils/async.ts","../src/utils/date.ts","../src/utils/dom.ts","../src/utils/iterator.ts","../src/utils/math.ts","../src/utils/string.ts","../src/index.ts"],"sourcesContent":["import type { PromiseResolver, PromiseRejecter, FulfilledHandler, RejectedHandler } from \"../types.js\";\n\nexport default class DeferredPromise<T = void, E = unknown, F = T, R = never>\n{\n protected _resolve!: PromiseResolver<T>;\n protected _reject!: PromiseRejecter<E>;\n\n protected _promise: Promise<F | R>;\n\n public constructor(onFulfilled?: FulfilledHandler<T, F> | null, onRejected?: RejectedHandler<E, R> | null)\n {\n let _resolve: PromiseResolver<T>;\n let _reject: PromiseRejecter<E>;\n\n this._promise = new Promise<T>((resolve, reject) =>\n {\n _resolve = resolve as PromiseResolver<T>;\n _reject = reject as PromiseRejecter<E>;\n\n }).then(onFulfilled, onRejected);\n\n this._resolve = _resolve!;\n this._reject = _reject!;\n }\n\n public get resolve(): PromiseResolver<T>\n {\n return this._resolve;\n }\n public get reject(): PromiseRejecter<E>\n {\n return this._reject;\n }\n\n public then<N = F | R, H = R>(\n onFulfilled?: FulfilledHandler<F | R, N> | null,\n onRejected?: RejectedHandler<R, H> | null): Promise<N | H>\n {\n return this._promise.then(onFulfilled, onRejected);\n }\n public catch<H = R>(onRejected?: RejectedHandler<R, H> | null): Promise<F | R | H>\n {\n return this._promise.catch(onRejected);\n }\n public finally(onFinally?: (() => void) | null): Promise<F | R>\n {\n return this._promise.finally(onFinally);\n }\n\n public watch(promise: Promise<T>): this\n {\n promise.then(this.resolve, this.reject);\n\n return this;\n }\n\n public get [Symbol.toStringTag]()\n {\n return \"DeferredPromise\";\n }\n}\n","export default class Exception extends Error\n{\n public static FromUnknown(error: unknown): Exception\n {\n if (error instanceof Exception)\n {\n return error;\n }\n if (error instanceof Error)\n {\n const exc = new Exception(error.message);\n\n exc.stack = error.stack;\n exc.name = error.name;\n\n return exc;\n }\n\n return new Exception(`${error}`);\n }\n\n public constructor(message: string, cause?: unknown, name = \"Exception\")\n {\n super(message);\n\n this.cause = cause;\n this.name = name;\n\n if (cause)\n {\n if (cause instanceof Error)\n {\n this.stack += `\\n\\nCaused by ${cause.stack}`;\n }\n else\n {\n this.stack += `\\n\\nCaused by ${cause}`;\n }\n }\n }\n}\n","/* eslint-disable no-trailing-spaces */\n\n/**\n * A wrapper around the `Storage` API to store and retrieve JSON values.\n *\n * It allows to handle either the `sessionStorage` or the `localStorage`\n * storage at the same time, depending on the required use case.\n */\nexport default class JsonStorage\n{\n protected _preferPersistence: boolean;\n\n protected _volatile: Storage;\n protected _persistent: Storage;\n\n public constructor(preferPersistence = true)\n {\n this._preferPersistence = preferPersistence;\n\n this._volatile = window.sessionStorage;\n this._persistent = window.localStorage;\n }\n\n protected _get<T>(storage: Storage, propertyName: string): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue: T): T;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined\n {\n const propertyValue = storage.getItem(propertyName);\n if (propertyValue)\n {\n try\n {\n return JSON.parse(propertyValue);\n }\n catch (error)\n {\n // eslint-disable-next-line no-console\n console.warn(\n `The \"${propertyValue}\" value for \"${propertyName}\"` +\n \" property cannot be parsed. Clearing the storage...\");\n\n storage.removeItem(propertyName);\n }\n }\n\n return defaultValue;\n }\n protected _set<T>(storage: Storage, propertyName: string, newValue?: T): void\n {\n const encodedValue = JSON.stringify(newValue);\n if (encodedValue)\n {\n storage.setItem(propertyName, encodedValue);\n }\n else\n {\n storage.removeItem(propertyName);\n }\n }\n\n /**\n * Retrieves the value with the specified name from the corresponding storage.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public get<T>(propertyName: string, defaultValue: undefined, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue: T, persistent?: boolean): T ;\n public get<T>(propertyName: string, defaultValue?: T, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue?: T, persistent = this._preferPersistence): T | undefined\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return this._get<T>(storage, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public recall<T>(propertyName: string): T | undefined;\n public recall<T>(propertyName: string, defaultValue: T): T;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._volatile, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public retrieve<T>(propertyName: string): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue: T): T;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this.recall<T>(propertyName) ?? this.read<T>(propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public read<T>(propertyName: string): T | undefined;\n public read<T>(propertyName: string, defaultValue: T): T;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._persistent, propertyName, defaultValue);\n }\n\n /**\n * Checks whether the property with the specified name exists in the corresponding storage.\n *\n * @param propertyName The name of the property to check.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public has(propertyName: string, persistent?: boolean): boolean\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return storage.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists in the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public knows(propertyName: string): boolean\n {\n return this._volatile.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public find(propertyName: string): boolean\n {\n return this.knows(propertyName) ?? this.exists(propertyName);\n }\n /**\n * Checks whether the property with the specified name exists in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public exists(propertyName: string): boolean\n {\n return this._persistent.getItem(propertyName) !== null;\n }\n\n /**\n * Sets the value with the specified name in the corresponding storage.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n */\n public set<T>(propertyName: string, newValue?: T, persistent = this._preferPersistence): void\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n this._set<T>(storage, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the volatile `sessionStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public remember<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._volatile, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the persistent `localStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public write<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._persistent, propertyName, newValue);\n }\n\n /**\n * Removes the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public forget(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public erase(propertyName: string): void\n {\n this._persistent.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from all the storages.\n *\n * @param propertyName The name of the property to remove.\n */\n public clear(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n this._persistent.removeItem(propertyName);\n }\n}\n","import type { GeneratorFunction, Iteratee, Reducer } from \"../types.js\";\n\nexport default class SmartIterator<T, R = void, N = undefined> implements Iterator<T, R, N>\n{\n protected _iterator: Iterator<T, R, N>;\n\n public return?: (value?: R) => IteratorResult<T, R>;\n public throw?: (error?: unknown) => IteratorResult<T, R>;\n\n public constructor(iterable: Iterable<T>);\n public constructor(iterator: Iterator<T, R, N>);\n public constructor(generatorFn: GeneratorFunction<T, R, N>);\n public constructor(iterable: Iterable<T> | Iterator<T, R, N> | GeneratorFunction<T, R, N>)\n {\n if (iterable instanceof Function)\n {\n this._iterator = iterable();\n }\n else if (Symbol.iterator in iterable)\n {\n this._iterator = iterable[Symbol.iterator]() as Iterator<T, R, N>;\n }\n else\n {\n this._iterator = iterable;\n }\n\n if (this._iterator.return) { this.return = (value?: R) => this._iterator.return!(value); }\n if (this._iterator.throw) { this.throw = (error?: unknown) => this._iterator.throw!(error); }\n }\n\n public every(iteratee: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return true; }\n if (!(iteratee(result.value, index))) { return false; }\n\n index += 1;\n }\n }\n public some(iteratee: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return false; }\n if (iteratee(result.value, index)) { return true; }\n\n index += 1;\n }\n }\n\n public filter(iteratee: Iteratee<T, boolean>): SmartIterator<T, R, N>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<T, R, N>({\n *[Symbol.iterator]()\n {\n while (true)\n {\n const result = iterator.next();\n\n if (result.done) { return result.value; }\n if (iteratee(result.value, index)) { yield result.value; }\n\n index += 1;\n }\n }\n });\n }\n public map<V>(iteratee: Iteratee<T, V>): SmartIterator<V, R>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<V, R>({\n *[Symbol.iterator]()\n {\n while (true)\n {\n const result = iterator.next();\n if (result.done) { return result.value; }\n\n yield iteratee(result.value, index);\n\n index += 1;\n }\n }\n });\n }\n public reduce<A>(reducer: Reducer<T, A>, initialValue: A): A\n {\n let index = 0;\n let accumulator = initialValue;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return accumulator; }\n\n accumulator = reducer(accumulator, result.value, index);\n\n index += 1;\n }\n }\n\n public forEach(iteratee: Iteratee<T>): void\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return; }\n\n iteratee(result.value, index);\n\n index += 1;\n }\n }\n\n public next(...values: N extends undefined ? [] : [N]): IteratorResult<T, R>\n {\n return this._iterator.next(...values);\n }\n\n public toArray(): T[]\n {\n return [...this];\n }\n\n public [Symbol.iterator](): SmartIterator<T, R, N> { return this; }\n}\n","import Exception from \"./exception.js\";\n\nexport default class Subscribers<P extends unknown[] = [], R = void, T extends (...args: P) => R = (...args: P) => R>\n{\n protected _subscribers: T[];\n\n public constructor()\n {\n this._subscribers = [];\n }\n\n public add(subscriber: T): void\n {\n this._subscribers.push(subscriber);\n }\n public remove(subscriber: T): void\n {\n const index = this._subscribers.indexOf(subscriber);\n if (index < 0)\n {\n throw new Exception(\"Unable to remove the requested subscriber. It was not found.\");\n }\n\n this._subscribers.splice(index, 1);\n }\n\n public call(...args: P): R[]\n {\n return this._subscribers\n .slice()\n .map((subscriber) => subscriber(...args));\n }\n}\n","export async function delay(milliseconds: number): Promise<void>\n{\n return new Promise<void>((resolve, reject) => setTimeout(resolve, milliseconds));\n}\n\nexport async function nextAnimationFrame(): Promise<void>\n{\n return new Promise<void>((resolve, reject) => requestAnimationFrame(() => resolve()));\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport enum DateUnit\n{\n Second = 1000,\n Minute = 60 * Second,\n Hour = 60 * Minute,\n Day = 24 * Hour,\n Week = 7 * Day,\n Month = 30 * Day,\n Year = 365 * Day\n}\n\nexport function dateDifference(start: Date, end: Date, unit = DateUnit.Day): number\n{\n return Math.floor((end.getTime() - start.getTime()) / unit);\n}\n\nexport function dateRange(start: Date, end: Date, offset = DateUnit.Day): SmartIterator<Date>\n{\n return new SmartIterator<Date>(function* ()\n {\n const endTime = end.getTime();\n\n let unixTime: number = start.getTime();\n while (unixTime < endTime)\n {\n yield new Date(unixTime);\n\n unixTime += offset;\n }\n });\n}\n\nexport function dateRound(date: Date, unit = DateUnit.Day): Date\n{\n return new Date(Math.floor(date.getTime() / unit) * unit);\n}\n","export async function loadScript(scriptUrl: string, scriptType = \"text/javascript\"): Promise<void>\n{\n return new Promise<void>((resolve, reject) =>\n {\n const script = document.createElement(\"script\");\n\n script.async = true;\n script.defer = true;\n script.src = scriptUrl;\n script.type = scriptType;\n\n script.onload = () => resolve();\n script.onerror = () => reject();\n\n document.body.appendChild(script);\n });\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport function count<T>(elements: Iterable<T>): number\n{\n if (Array.isArray(elements)) { return elements.length; }\n\n let _count = 0;\n for (const _ of elements) { _count += 1; }\n\n return _count;\n}\n\nexport function range(end: number): SmartIterator<number>;\nexport function range(start: number, end: number): SmartIterator<number>;\nexport function range(start: number, end: number, step: number): SmartIterator<number>;\nexport function range(start: number, end?: number, step = 1): SmartIterator<number>\n{\n return new SmartIterator<number>(function* ()\n {\n if (end === undefined)\n {\n end = start;\n start = 0;\n }\n\n if (start > end) { step = step ?? -1; }\n\n for (let index = start; index < end; index += step) { yield index; }\n });\n}\n\nexport function shuffle<T>(iterable: Iterable<T>): T[]\n{\n const array = [...iterable];\n\n for (let index = array.length - 1; index > 0; index -= 1)\n {\n const jndex = Math.floor(Math.random() * (index + 1));\n\n [array[index], array[jndex]] = [array[jndex], array[index]];\n }\n\n return array;\n}\n\nexport function unique<T>(elements: Iterable<T>): SmartIterator<T>\n{\n return new SmartIterator<T>(function* ()\n {\n const seen = new Set<T>();\n\n for (const element of elements)\n {\n if (seen.has(element)) { continue; }\n\n seen.add(element);\n\n yield element;\n }\n });\n}\n\nexport function zip<T, U>(first: Iterable<T>, second: Iterable<U>): SmartIterator<[T, U]>\n{\n return new SmartIterator<[T, U]>(function* ()\n {\n const firstIterator = first[Symbol.iterator]();\n const secondIterator = second[Symbol.iterator]();\n\n while (true)\n {\n const firstResult = firstIterator.next();\n const secondResult = secondIterator.next();\n\n if ((firstResult.done) || (secondResult.done)) { break; }\n\n yield [firstResult.value, secondResult.value];\n }\n });\n}\n","import { zip } from \"./iterator.js\";\n\nexport function average<T extends number>(values: Iterable<T>): number;\nexport function average<T extends number>(values: Iterable<T>, weights: Iterable<number>): number;\nexport function average<T extends number>(values: Iterable<T>, weights?: Iterable<number>): number\n{\n if (weights === undefined)\n {\n let _sum = 0;\n let _count = 0;\n\n for (const value of values)\n {\n _sum += value;\n _count += 1;\n }\n\n return _sum / _count;\n }\n\n let _sum = 0;\n let _count = 0;\n\n for (const [value, weight] of zip(values, weights))\n {\n _sum += value * weight;\n _count += weight;\n }\n\n return _sum / _count;\n}\n\nexport function hash(value: string): number\n{\n let hashedValue = 0;\n for (let i = 0; i < value.length; i++)\n {\n const char = value.charCodeAt(i);\n hashedValue = ((hashedValue << 5) - hashedValue) + char;\n hashedValue |= 0;\n }\n\n return hashedValue;\n}\n\nexport function random(): number;\nexport function random(max: number): number;\nexport function random(min: number, max: number): number;\nexport function random(min: number, max: number, isDecimal: boolean): number;\nexport function random(min: number, max: number, digits: number): number;\nexport function random(min: number = 1, max?: number, decimals?: boolean | number): number\n{\n if (max === undefined)\n {\n max = min;\n min = 0;\n }\n\n if (min === max)\n {\n return min;\n }\n\n let rounder: (value: number) => number;\n\n if (decimals === true)\n {\n rounder = (value) => value;\n }\n else if (decimals === undefined)\n {\n if (Math.abs(max - min) <= 1)\n {\n rounder = (value) => value;\n }\n else\n {\n rounder = Math.floor;\n }\n }\n else if (decimals === false)\n {\n rounder = Math.floor;\n }\n else\n {\n const digits = 10 ** decimals;\n\n rounder = (value) => Math.floor(value * digits) / digits;\n }\n\n return rounder(Math.random() * (max - min) + min);\n}\n\nexport function sum<T extends number>(values: Iterable<T>): number\n{\n let _sum = 0;\n for (const value of values) { _sum += value; }\n\n return _sum;\n}\n","export function capitalize(value: string): string\n{\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n","export const VERSION = \"1.2.0-rc.3\";\n\nexport { DeferredPromise, Exception, JsonStorage, SmartIterator, Subscribers } from \"./models/index.js\";\nexport {\n average,\n capitalize,\n count,\n delay,\n dateDifference,\n dateRange,\n dateRound,\n DateUnit,\n hash,\n loadScript,\n nextAnimationFrame,\n random,\n range,\n shuffle,\n sum,\n unique,\n zip\n\n} from \"./utils/index.js\";\n\nexport type {\n Constructor,\n FulfilledHandler,\n GeneratorFunction,\n Iteratee,\n MaybePromise,\n PromiseExecutor,\n PromiseRejecter,\n PromiseResolver,\n Reducer,\n RejectedHandler\n\n} from \"./types.js\";\n"],"names":["DeferredPromise","onFulfilled","onRejected","__publicField","_resolve","_reject","resolve","reject","onFinally","promise","Exception","error","exc","message","cause","name","JsonStorage","preferPersistence","storage","propertyName","defaultValue","propertyValue","newValue","encodedValue","persistent","SmartIterator","iterable","value","iteratee","index","result","iterator","reducer","initialValue","accumulator","values","Subscribers","subscriber","args","delay","milliseconds","nextAnimationFrame","DateUnit","dateDifference","start","end","unit","dateRange","offset","endTime","unixTime","dateRound","date","loadScript","scriptUrl","scriptType","script","count","elements","_count","_","range","step","shuffle","array","jndex","unique","seen","element","zip","first","second","firstIterator","secondIterator","firstResult","secondResult","average","weights","_sum","weight","hash","hashedValue","i","char","random","min","max","decimals","rounder","digits","sum","capitalize","VERSION"],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sources":["../src/models/deferred-promise.ts","../src/models/exception.ts","../src/models/json-storage.ts","../src/models/smart-iterator.ts","../src/models/subscribers.ts","../src/utils/async.ts","../src/utils/date.ts","../src/utils/dom.ts","../src/utils/iterator.ts","../src/utils/math.ts","../src/utils/string.ts","../src/index.ts"],"sourcesContent":["import type { PromiseResolver, PromiseRejecter, FulfilledHandler, RejectedHandler } from \"../types.js\";\n\nexport default class DeferredPromise<T = void, E = unknown, F = T, R = never>\n{\n protected _resolve!: PromiseResolver<T>;\n protected _reject!: PromiseRejecter<E>;\n\n protected _promise: Promise<F | R>;\n\n public constructor(onFulfilled?: FulfilledHandler<T, F> | null, onRejected?: RejectedHandler<E, R> | null)\n {\n let _resolve: PromiseResolver<T>;\n let _reject: PromiseRejecter<E>;\n\n this._promise = new Promise<T>((resolve, reject) =>\n {\n _resolve = resolve as PromiseResolver<T>;\n _reject = reject as PromiseRejecter<E>;\n\n }).then(onFulfilled, onRejected);\n\n this._resolve = _resolve!;\n this._reject = _reject!;\n }\n\n public get resolve(): PromiseResolver<T>\n {\n return this._resolve;\n }\n public get reject(): PromiseRejecter<E>\n {\n return this._reject;\n }\n\n public then<N = F | R, H = R>(\n onFulfilled?: FulfilledHandler<F | R, N> | null,\n onRejected?: RejectedHandler<R, H> | null): Promise<N | H>\n {\n return this._promise.then(onFulfilled, onRejected);\n }\n public catch<H = R>(onRejected?: RejectedHandler<R, H> | null): Promise<F | R | H>\n {\n return this._promise.catch(onRejected);\n }\n public finally(onFinally?: (() => void) | null): Promise<F | R>\n {\n return this._promise.finally(onFinally);\n }\n\n public watch(promise: Promise<T>): this\n {\n promise.then(this.resolve, this.reject);\n\n return this;\n }\n\n public get [Symbol.toStringTag]()\n {\n return \"DeferredPromise\";\n }\n}\n","export default class Exception extends Error\n{\n public static FromUnknown(error: unknown): Exception\n {\n if (error instanceof Exception)\n {\n return error;\n }\n if (error instanceof Error)\n {\n const exc = new Exception(error.message);\n\n exc.stack = error.stack;\n exc.name = error.name;\n\n return exc;\n }\n\n return new Exception(`${error}`);\n }\n\n public constructor(message: string, cause?: unknown, name = \"Exception\")\n {\n super(message);\n\n this.cause = cause;\n this.name = name;\n\n if (cause)\n {\n if (cause instanceof Error)\n {\n this.stack += `\\n\\nCaused by ${cause.stack}`;\n }\n else\n {\n this.stack += `\\n\\nCaused by ${cause}`;\n }\n }\n }\n}\n","/* eslint-disable no-trailing-spaces */\n\n/**\n * A wrapper around the `Storage` API to store and retrieve JSON values.\n *\n * It allows to handle either the `sessionStorage` or the `localStorage`\n * storage at the same time, depending on the required use case.\n */\nexport default class JsonStorage\n{\n protected _preferPersistence: boolean;\n\n protected _volatile: Storage;\n protected _persistent: Storage;\n\n public constructor(preferPersistence = true)\n {\n this._preferPersistence = preferPersistence;\n\n this._volatile = window.sessionStorage;\n this._persistent = window.localStorage;\n }\n\n protected _get<T>(storage: Storage, propertyName: string): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue: T): T;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined\n {\n const propertyValue = storage.getItem(propertyName);\n if (propertyValue)\n {\n try\n {\n return JSON.parse(propertyValue);\n }\n catch (error)\n {\n // eslint-disable-next-line no-console\n console.warn(\n `The \"${propertyValue}\" value for \"${propertyName}\"` +\n \" property cannot be parsed. Clearing the storage...\");\n\n storage.removeItem(propertyName);\n }\n }\n\n return defaultValue;\n }\n protected _set<T>(storage: Storage, propertyName: string, newValue?: T): void\n {\n const encodedValue = JSON.stringify(newValue);\n if (encodedValue)\n {\n storage.setItem(propertyName, encodedValue);\n }\n else\n {\n storage.removeItem(propertyName);\n }\n }\n\n /**\n * Retrieves the value with the specified name from the corresponding storage.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public get<T>(propertyName: string, defaultValue: undefined, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue: T, persistent?: boolean): T ;\n public get<T>(propertyName: string, defaultValue?: T, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue?: T, persistent = this._preferPersistence): T | undefined\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return this._get<T>(storage, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public recall<T>(propertyName: string): T | undefined;\n public recall<T>(propertyName: string, defaultValue: T): T;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._volatile, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public retrieve<T>(propertyName: string): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue: T): T;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this.recall<T>(propertyName) ?? this.read<T>(propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public read<T>(propertyName: string): T | undefined;\n public read<T>(propertyName: string, defaultValue: T): T;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._persistent, propertyName, defaultValue);\n }\n\n /**\n * Checks whether the property with the specified name exists in the corresponding storage.\n *\n * @param propertyName The name of the property to check.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public has(propertyName: string, persistent?: boolean): boolean\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return storage.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists in the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public knows(propertyName: string): boolean\n {\n return this._volatile.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public find(propertyName: string): boolean\n {\n return this.knows(propertyName) ?? this.exists(propertyName);\n }\n /**\n * Checks whether the property with the specified name exists in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public exists(propertyName: string): boolean\n {\n return this._persistent.getItem(propertyName) !== null;\n }\n\n /**\n * Sets the value with the specified name in the corresponding storage.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n */\n public set<T>(propertyName: string, newValue?: T, persistent = this._preferPersistence): void\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n this._set<T>(storage, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the volatile `sessionStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public remember<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._volatile, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the persistent `localStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public write<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._persistent, propertyName, newValue);\n }\n\n /**\n * Removes the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public forget(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public erase(propertyName: string): void\n {\n this._persistent.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from all the storages.\n *\n * @param propertyName The name of the property to remove.\n */\n public clear(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n this._persistent.removeItem(propertyName);\n }\n}\n","import type { GeneratorFunction, Iteratee, Reducer } from \"../types.js\";\n\nexport default class SmartIterator<T, R = void, N = undefined> implements Iterator<T, R, N>\n{\n protected _iterator: Iterator<T, R, N>;\n\n public return?: (value?: R) => IteratorResult<T, R>;\n public throw?: (error?: unknown) => IteratorResult<T, R>;\n\n public constructor(iterable: Iterable<T>);\n public constructor(iterator: Iterator<T, R, N>);\n public constructor(generatorFn: GeneratorFunction<T, R, N>);\n public constructor(argument: Iterable<T> | Iterator<T, R, N> | GeneratorFunction<T, R, N>)\n {\n if (argument instanceof Function)\n {\n this._iterator = argument();\n }\n else if (Symbol.iterator in argument)\n {\n this._iterator = argument[Symbol.iterator]() as Iterator<T, R, N>;\n }\n else\n {\n this._iterator = argument;\n }\n\n if (this._iterator.return) { this.return = (value?: R) => this._iterator.return!(value); }\n if (this._iterator.throw) { this.throw = (error?: unknown) => this._iterator.throw!(error); }\n }\n\n public every(predicate: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return true; }\n if (!(predicate(result.value, index))) { return false; }\n\n index += 1;\n }\n }\n public some(predicate: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return false; }\n if (predicate(result.value, index)) { return true; }\n\n index += 1;\n }\n }\n\n public filter(predicate: Iteratee<T, boolean>): SmartIterator<T, R, N>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<T, R, N>(function* ()\n {\n while (true)\n {\n const result = iterator.next();\n\n if (result.done) { return result.value; }\n if (predicate(result.value, index)) { yield result.value; }\n\n index += 1;\n }\n });\n }\n public map<V>(iteratee: Iteratee<T, V>): SmartIterator<V, R>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<V, R>(function* ()\n {\n while (true)\n {\n const result = iterator.next();\n if (result.done) { return result.value; }\n\n yield iteratee(result.value, index);\n\n index += 1;\n }\n });\n }\n public reduce<A>(reducer: Reducer<T, A>, initialValue: A): A\n {\n let index = 0;\n let accumulator = initialValue;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return accumulator; }\n\n accumulator = reducer(accumulator, result.value, index);\n\n index += 1;\n }\n }\n\n public forEach(iteratee: Iteratee<T>): void\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return; }\n\n iteratee(result.value, index);\n\n index += 1;\n }\n }\n\n public next(...values: N extends undefined ? [] : [N]): IteratorResult<T, R>\n {\n return this._iterator.next(...values);\n }\n\n public toArray(): T[]\n {\n return [...this];\n }\n\n public [Symbol.iterator](): SmartIterator<T, R, N> { return this; }\n}\n","import Exception from \"./exception.js\";\n\nexport default class Subscribers<P extends unknown[] = [], R = void, T extends (...args: P) => R = (...args: P) => R>\n{\n protected _subscribers: T[];\n\n public constructor()\n {\n this._subscribers = [];\n }\n\n public add(subscriber: T): void\n {\n this._subscribers.push(subscriber);\n }\n public remove(subscriber: T): void\n {\n const index = this._subscribers.indexOf(subscriber);\n if (index < 0)\n {\n throw new Exception(\"Unable to remove the requested subscriber. It was not found.\");\n }\n\n this._subscribers.splice(index, 1);\n }\n\n public call(...args: P): R[]\n {\n return this._subscribers\n .slice()\n .map((subscriber) => subscriber(...args));\n }\n}\n","export async function delay(milliseconds: number): Promise<void>\n{\n return new Promise<void>((resolve, reject) => setTimeout(resolve, milliseconds));\n}\n\nexport async function nextAnimationFrame(): Promise<void>\n{\n return new Promise<void>((resolve, reject) => requestAnimationFrame(() => resolve()));\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport enum DateUnit\n{\n Second = 1000,\n Minute = 60 * Second,\n Hour = 60 * Minute,\n Day = 24 * Hour,\n Week = 7 * Day,\n Month = 30 * Day,\n Year = 365 * Day\n}\n\nexport function dateDifference(start: Date, end: Date, unit = DateUnit.Day): number\n{\n return Math.floor((end.getTime() - start.getTime()) / unit);\n}\n\nexport function dateRange(start: Date, end: Date, offset = DateUnit.Day): SmartIterator<Date>\n{\n return new SmartIterator<Date>(function* ()\n {\n const endTime = end.getTime();\n\n let unixTime: number = start.getTime();\n while (unixTime < endTime)\n {\n yield new Date(unixTime);\n\n unixTime += offset;\n }\n });\n}\n\nexport function dateRound(date: Date, unit = DateUnit.Day): Date\n{\n return new Date(Math.floor(date.getTime() / unit) * unit);\n}\n","export async function loadScript(scriptUrl: string, scriptType = \"text/javascript\"): Promise<void>\n{\n return new Promise<void>((resolve, reject) =>\n {\n const script = document.createElement(\"script\");\n\n script.async = true;\n script.defer = true;\n script.src = scriptUrl;\n script.type = scriptType;\n\n script.onload = () => resolve();\n script.onerror = () => reject();\n\n document.body.appendChild(script);\n });\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport function count<T>(elements: Iterable<T>): number\n{\n if (Array.isArray(elements)) { return elements.length; }\n\n let _count = 0;\n for (const _ of elements) { _count += 1; }\n\n return _count;\n}\n\nexport function range(end: number): SmartIterator<number>;\nexport function range(start: number, end: number): SmartIterator<number>;\nexport function range(start: number, end: number, step: number): SmartIterator<number>;\nexport function range(start: number, end?: number, step = 1): SmartIterator<number>\n{\n return new SmartIterator<number>(function* ()\n {\n if (end === undefined)\n {\n end = start;\n start = 0;\n }\n\n if (start > end) { step = step ?? -1; }\n\n for (let index = start; index < end; index += step) { yield index; }\n });\n}\n\nexport function shuffle<T>(iterable: Iterable<T>): T[]\n{\n const array = [...iterable];\n\n for (let index = array.length - 1; index > 0; index -= 1)\n {\n const jndex = Math.floor(Math.random() * (index + 1));\n\n [array[index], array[jndex]] = [array[jndex], array[index]];\n }\n\n return array;\n}\n\nexport function unique<T>(elements: Iterable<T>): SmartIterator<T>\n{\n return new SmartIterator<T>(function* ()\n {\n const seen = new Set<T>();\n\n for (const element of elements)\n {\n if (seen.has(element)) { continue; }\n\n seen.add(element);\n\n yield element;\n }\n });\n}\n\nexport function zip<T, U>(first: Iterable<T>, second: Iterable<U>): SmartIterator<[T, U]>\n{\n return new SmartIterator<[T, U]>(function* ()\n {\n const firstIterator = first[Symbol.iterator]();\n const secondIterator = second[Symbol.iterator]();\n\n while (true)\n {\n const firstResult = firstIterator.next();\n const secondResult = secondIterator.next();\n\n if ((firstResult.done) || (secondResult.done)) { break; }\n\n yield [firstResult.value, secondResult.value];\n }\n });\n}\n","import { zip } from \"./iterator.js\";\n\nexport function average<T extends number>(values: Iterable<T>): number;\nexport function average<T extends number>(values: Iterable<T>, weights: Iterable<number>): number;\nexport function average<T extends number>(values: Iterable<T>, weights?: Iterable<number>): number\n{\n if (weights === undefined)\n {\n let _sum = 0;\n let _count = 0;\n\n for (const value of values)\n {\n _sum += value;\n _count += 1;\n }\n\n return _sum / _count;\n }\n\n let _sum = 0;\n let _count = 0;\n\n for (const [value, weight] of zip(values, weights))\n {\n _sum += value * weight;\n _count += weight;\n }\n\n return _sum / _count;\n}\n\nexport function hash(value: string): number\n{\n let hashedValue = 0;\n for (let i = 0; i < value.length; i++)\n {\n const char = value.charCodeAt(i);\n hashedValue = ((hashedValue << 5) - hashedValue) + char;\n hashedValue |= 0;\n }\n\n return hashedValue;\n}\n\nexport function random(): number;\nexport function random(max: number): number;\nexport function random(min: number, max: number): number;\nexport function random(min: number, max: number, isDecimal: boolean): number;\nexport function random(min: number, max: number, digits: number): number;\nexport function random(min: number = 1, max?: number, decimals?: boolean | number): number\n{\n if (max === undefined)\n {\n max = min;\n min = 0;\n }\n\n if (min === max)\n {\n return min;\n }\n\n let rounder: (value: number) => number;\n\n if (decimals === true)\n {\n rounder = (value) => value;\n }\n else if (decimals === undefined)\n {\n if (Math.abs(max - min) <= 1)\n {\n rounder = (value) => value;\n }\n else\n {\n rounder = Math.floor;\n }\n }\n else if (decimals === false)\n {\n rounder = Math.floor;\n }\n else\n {\n const digits = 10 ** decimals;\n\n rounder = (value) => Math.floor(value * digits) / digits;\n }\n\n return rounder(Math.random() * (max - min) + min);\n}\n\nexport function sum<T extends number>(values: Iterable<T>): number\n{\n let _sum = 0;\n for (const value of values) { _sum += value; }\n\n return _sum;\n}\n","export function capitalize(value: string): string\n{\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n","export const VERSION = \"1.2.0\";\n\nexport { DeferredPromise, Exception, JsonStorage, SmartIterator, Subscribers } from \"./models/index.js\";\nexport {\n average,\n capitalize,\n count,\n delay,\n dateDifference,\n dateRange,\n dateRound,\n DateUnit,\n hash,\n loadScript,\n nextAnimationFrame,\n random,\n range,\n shuffle,\n sum,\n unique,\n zip\n\n} from \"./utils/index.js\";\n\nexport type {\n Constructor,\n FulfilledHandler,\n GeneratorFunction,\n Iteratee,\n MaybePromise,\n PromiseExecutor,\n PromiseRejecter,\n PromiseResolver,\n Reducer,\n RejectedHandler\n\n} from \"./types.js\";\n"],"names":["DeferredPromise","onFulfilled","onRejected","__publicField","_resolve","_reject","resolve","reject","onFinally","promise","Exception","error","exc","message","cause","name","JsonStorage","preferPersistence","storage","propertyName","defaultValue","propertyValue","newValue","encodedValue","persistent","SmartIterator","argument","value","predicate","index","result","iterator","iteratee","reducer","initialValue","accumulator","values","Subscribers","subscriber","args","delay","milliseconds","nextAnimationFrame","DateUnit","dateDifference","start","end","unit","dateRange","offset","endTime","unixTime","dateRound","date","loadScript","scriptUrl","scriptType","script","count","elements","_count","_","range","step","shuffle","iterable","array","jndex","unique","seen","element","zip","first","second","firstIterator","secondIterator","firstResult","secondResult","average","weights","_sum","weight","hash","hashedValue","i","char","random","min","max","decimals","rounder","digits","sum","capitalize","VERSION"],"mappings":"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"}
package/dist/core.umd.cjs CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  Caused by ${t.stack}`:this.stack+=`
4
4
 
5
- Caused by ${t}`)}}class _{constructor(e=!0){c(this,"_preferPersistence");c(this,"_volatile");c(this,"_persistent");this._preferPersistence=e,this._volatile=window.sessionStorage,this._persistent=window.localStorage}_get(e,t,n){const i=e.getItem(t);if(i)try{return JSON.parse(i)}catch{console.warn(`The "${i}" value for "${t}" property cannot be parsed. Clearing the storage...`),e.removeItem(t)}return n}_set(e,t,n){const i=JSON.stringify(n);i?e.setItem(t,i):e.removeItem(t)}get(e,t,n=this._preferPersistence){const i=n?this._persistent:this._volatile;return this._get(i,e,t)}recall(e,t){return this._get(this._volatile,e,t)}retrieve(e,t){return this.recall(e)??this.read(e,t)}read(e,t){return this._get(this._persistent,e,t)}has(e,t){return(t?this._persistent:this._volatile).getItem(e)!==null}knows(e){return this._volatile.getItem(e)!==null}find(e){return this.knows(e)??this.exists(e)}exists(e){return this._persistent.getItem(e)!==null}set(e,t,n=this._preferPersistence){const i=n?this._persistent:this._volatile;this._set(i,e,t)}remember(e,t){this._set(this._volatile,e,t)}write(e,t){this._set(this._persistent,e,t)}forget(e){this._volatile.removeItem(e)}erase(e){this._persistent.removeItem(e)}clear(e){this._volatile.removeItem(e),this._persistent.removeItem(e)}}class a{constructor(e){c(this,"_iterator");c(this,"return");c(this,"throw");e instanceof Function?this._iterator=e():Symbol.iterator in e?this._iterator=e[Symbol.iterator]():this._iterator=e,this._iterator.return&&(this.return=t=>this._iterator.return(t)),this._iterator.throw&&(this.throw=t=>this._iterator.throw(t))}every(e){let t=0;for(;;){const n=this._iterator.next();if(n.done)return!0;if(!e(n.value,t))return!1;t+=1}}some(e){let t=0;for(;;){const n=this._iterator.next();if(n.done)return!1;if(e(n.value,t))return!0;t+=1}}filter(e){let t=0;const n=this._iterator;return new a({*[Symbol.iterator](){for(;;){const i=n.next();if(i.done)return i.value;e(i.value,t)&&(yield i.value),t+=1}}})}map(e){let t=0;const n=this._iterator;return new a({*[Symbol.iterator](){for(;;){const i=n.next();if(i.done)return i.value;yield e(i.value,t),t+=1}}})}reduce(e,t){let n=0,i=t;for(;;){const o=this._iterator.next();if(o.done)return i;i=e(i,o.value,n),n+=1}}forEach(e){let t=0;for(;;){const n=this._iterator.next();if(n.done)return;e(n.value,t),t+=1}}next(...e){return this._iterator.next(...e)}toArray(){return[...this]}[Symbol.iterator](){return this}}class m{constructor(){c(this,"_subscribers");this._subscribers=[]}add(e){this._subscribers.push(e)}remove(e){const t=this._subscribers.indexOf(e);if(t<0)throw new l("Unable to remove the requested subscriber. It was not found.");this._subscribers.splice(t,1)}call(...e){return this._subscribers.slice().map(t=>t(...e))}}async function v(r){return new Promise((e,t)=>setTimeout(e,r))}async function g(){return new Promise((r,e)=>requestAnimationFrame(()=>r()))}var f=(r=>(r[r.Second=1e3]="Second",r[r.Minute=6e4]="Minute",r[r.Hour=36e5]="Hour",r[r.Day=864e5]="Day",r[r.Week=6048e5]="Week",r[r.Month=2592e6]="Month",r[r.Year=31536e6]="Year",r))(f||{});function w(r,e,t=864e5){return Math.floor((e.getTime()-r.getTime())/t)}function y(r,e,t=864e5){return new a(function*(){const n=e.getTime();let i=r.getTime();for(;i<n;)yield new Date(i),i+=t})}function b(r,e=864e5){return new Date(Math.floor(r.getTime()/e)*e)}async function S(r,e="text/javascript"){return new Promise((t,n)=>{const i=document.createElement("script");i.async=!0,i.defer=!0,i.src=r,i.type=e,i.onload=()=>t(),i.onerror=()=>n(),document.body.appendChild(i)})}function I(r){if(Array.isArray(r))return r.length;let e=0;for(const t of r)e+=1;return e}function p(r,e,t=1){return new a(function*(){e===void 0&&(e=r,r=0),r>e&&(t=t??-1);for(let n=r;n<e;n+=t)yield n})}function M(r){const e=[...r];for(let t=e.length-1;t>0;t-=1){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function T(r){return new a(function*(){const e=new Set;for(const t of r)e.has(t)||(e.add(t),yield t)})}function d(r,e){return new a(function*(){const t=r[Symbol.iterator](),n=e[Symbol.iterator]();for(;;){const i=t.next(),o=n.next();if(i.done||o.done)break;yield[i.value,o.value]}})}function j(r,e){if(e===void 0){let i=0,o=0;for(const h of r)i+=h,o+=1;return i/o}let t=0,n=0;for(const[i,o]of d(r,e))t+=i*o,n+=o;return t/n}function P(r){let e=0;for(let t=0;t<r.length;t++){const n=r.charCodeAt(t);e=(e<<5)-e+n,e|=0}return e}function k(r=1,e,t){if(e===void 0&&(e=r,r=0),r===e)return r;let n;if(t===!0)n=i=>i;else if(t===void 0)Math.abs(e-r)<=1?n=i=>i:n=Math.floor;else if(t===!1)n=Math.floor;else{const i=10**t;n=o=>Math.floor(o*i)/i}return n(Math.random()*(e-r)+r)}function A(r){let e=0;for(const t of r)e+=t;return e}function R(r){return`${r.charAt(0).toUpperCase()}${r.slice(1)}`}const C="1.2.0-rc.3";s.DateUnit=f,s.DeferredPromise=u,s.Exception=l,s.JsonStorage=_,s.SmartIterator=a,s.Subscribers=m,s.VERSION=C,s.average=j,s.capitalize=R,s.count=I,s.dateDifference=w,s.dateRange=y,s.dateRound=b,s.delay=v,s.hash=P,s.loadScript=S,s.nextAnimationFrame=g,s.random=k,s.range=p,s.shuffle=M,s.sum=A,s.unique=T,s.zip=d,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
5
+ Caused by ${t}`)}}class _{constructor(e=!0){c(this,"_preferPersistence");c(this,"_volatile");c(this,"_persistent");this._preferPersistence=e,this._volatile=window.sessionStorage,this._persistent=window.localStorage}_get(e,t,n){const i=e.getItem(t);if(i)try{return JSON.parse(i)}catch{console.warn(`The "${i}" value for "${t}" property cannot be parsed. Clearing the storage...`),e.removeItem(t)}return n}_set(e,t,n){const i=JSON.stringify(n);i?e.setItem(t,i):e.removeItem(t)}get(e,t,n=this._preferPersistence){const i=n?this._persistent:this._volatile;return this._get(i,e,t)}recall(e,t){return this._get(this._volatile,e,t)}retrieve(e,t){return this.recall(e)??this.read(e,t)}read(e,t){return this._get(this._persistent,e,t)}has(e,t){return(t?this._persistent:this._volatile).getItem(e)!==null}knows(e){return this._volatile.getItem(e)!==null}find(e){return this.knows(e)??this.exists(e)}exists(e){return this._persistent.getItem(e)!==null}set(e,t,n=this._preferPersistence){const i=n?this._persistent:this._volatile;this._set(i,e,t)}remember(e,t){this._set(this._volatile,e,t)}write(e,t){this._set(this._persistent,e,t)}forget(e){this._volatile.removeItem(e)}erase(e){this._persistent.removeItem(e)}clear(e){this._volatile.removeItem(e),this._persistent.removeItem(e)}}class a{constructor(e){c(this,"_iterator");c(this,"return");c(this,"throw");e instanceof Function?this._iterator=e():Symbol.iterator in e?this._iterator=e[Symbol.iterator]():this._iterator=e,this._iterator.return&&(this.return=t=>this._iterator.return(t)),this._iterator.throw&&(this.throw=t=>this._iterator.throw(t))}every(e){let t=0;for(;;){const n=this._iterator.next();if(n.done)return!0;if(!e(n.value,t))return!1;t+=1}}some(e){let t=0;for(;;){const n=this._iterator.next();if(n.done)return!1;if(e(n.value,t))return!0;t+=1}}filter(e){let t=0;const n=this._iterator;return new a(function*(){for(;;){const i=n.next();if(i.done)return i.value;e(i.value,t)&&(yield i.value),t+=1}})}map(e){let t=0;const n=this._iterator;return new a(function*(){for(;;){const i=n.next();if(i.done)return i.value;yield e(i.value,t),t+=1}})}reduce(e,t){let n=0,i=t;for(;;){const o=this._iterator.next();if(o.done)return i;i=e(i,o.value,n),n+=1}}forEach(e){let t=0;for(;;){const n=this._iterator.next();if(n.done)return;e(n.value,t),t+=1}}next(...e){return this._iterator.next(...e)}toArray(){return[...this]}[Symbol.iterator](){return this}}class m{constructor(){c(this,"_subscribers");this._subscribers=[]}add(e){this._subscribers.push(e)}remove(e){const t=this._subscribers.indexOf(e);if(t<0)throw new l("Unable to remove the requested subscriber. It was not found.");this._subscribers.splice(t,1)}call(...e){return this._subscribers.slice().map(t=>t(...e))}}async function v(r){return new Promise((e,t)=>setTimeout(e,r))}async function w(){return new Promise((r,e)=>requestAnimationFrame(()=>r()))}var f=(r=>(r[r.Second=1e3]="Second",r[r.Minute=6e4]="Minute",r[r.Hour=36e5]="Hour",r[r.Day=864e5]="Day",r[r.Week=6048e5]="Week",r[r.Month=2592e6]="Month",r[r.Year=31536e6]="Year",r))(f||{});function g(r,e,t=864e5){return Math.floor((e.getTime()-r.getTime())/t)}function b(r,e,t=864e5){return new a(function*(){const n=e.getTime();let i=r.getTime();for(;i<n;)yield new Date(i),i+=t})}function y(r,e=864e5){return new Date(Math.floor(r.getTime()/e)*e)}async function S(r,e="text/javascript"){return new Promise((t,n)=>{const i=document.createElement("script");i.async=!0,i.defer=!0,i.src=r,i.type=e,i.onload=()=>t(),i.onerror=()=>n(),document.body.appendChild(i)})}function I(r){if(Array.isArray(r))return r.length;let e=0;for(const t of r)e+=1;return e}function p(r,e,t=1){return new a(function*(){e===void 0&&(e=r,r=0),r>e&&(t=t??-1);for(let n=r;n<e;n+=t)yield n})}function M(r){const e=[...r];for(let t=e.length-1;t>0;t-=1){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function T(r){return new a(function*(){const e=new Set;for(const t of r)e.has(t)||(e.add(t),yield t)})}function d(r,e){return new a(function*(){const t=r[Symbol.iterator](),n=e[Symbol.iterator]();for(;;){const i=t.next(),o=n.next();if(i.done||o.done)break;yield[i.value,o.value]}})}function j(r,e){if(e===void 0){let i=0,o=0;for(const h of r)i+=h,o+=1;return i/o}let t=0,n=0;for(const[i,o]of d(r,e))t+=i*o,n+=o;return t/n}function P(r){let e=0;for(let t=0;t<r.length;t++){const n=r.charCodeAt(t);e=(e<<5)-e+n,e|=0}return e}function k(r=1,e,t){if(e===void 0&&(e=r,r=0),r===e)return r;let n;if(t===!0)n=i=>i;else if(t===void 0)Math.abs(e-r)<=1?n=i=>i:n=Math.floor;else if(t===!1)n=Math.floor;else{const i=10**t;n=o=>Math.floor(o*i)/i}return n(Math.random()*(e-r)+r)}function A(r){let e=0;for(const t of r)e+=t;return e}function R(r){return`${r.charAt(0).toUpperCase()}${r.slice(1)}`}const C="1.2.0";s.DateUnit=f,s.DeferredPromise=u,s.Exception=l,s.JsonStorage=_,s.SmartIterator=a,s.Subscribers=m,s.VERSION=C,s.average=j,s.capitalize=R,s.count=I,s.dateDifference=g,s.dateRange=b,s.dateRound=y,s.delay=v,s.hash=P,s.loadScript=S,s.nextAnimationFrame=w,s.random=k,s.range=p,s.shuffle=M,s.sum=A,s.unique=T,s.zip=d,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
6
6
  //# sourceMappingURL=core.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.umd.cjs","sources":["../src/models/deferred-promise.ts","../src/models/exception.ts","../src/models/json-storage.ts","../src/models/smart-iterator.ts","../src/models/subscribers.ts","../src/utils/async.ts","../src/utils/date.ts","../src/utils/dom.ts","../src/utils/iterator.ts","../src/utils/math.ts","../src/utils/string.ts","../src/index.ts"],"sourcesContent":["import type { PromiseResolver, PromiseRejecter, FulfilledHandler, RejectedHandler } from \"../types.js\";\n\nexport default class DeferredPromise<T = void, E = unknown, F = T, R = never>\n{\n protected _resolve!: PromiseResolver<T>;\n protected _reject!: PromiseRejecter<E>;\n\n protected _promise: Promise<F | R>;\n\n public constructor(onFulfilled?: FulfilledHandler<T, F> | null, onRejected?: RejectedHandler<E, R> | null)\n {\n let _resolve: PromiseResolver<T>;\n let _reject: PromiseRejecter<E>;\n\n this._promise = new Promise<T>((resolve, reject) =>\n {\n _resolve = resolve as PromiseResolver<T>;\n _reject = reject as PromiseRejecter<E>;\n\n }).then(onFulfilled, onRejected);\n\n this._resolve = _resolve!;\n this._reject = _reject!;\n }\n\n public get resolve(): PromiseResolver<T>\n {\n return this._resolve;\n }\n public get reject(): PromiseRejecter<E>\n {\n return this._reject;\n }\n\n public then<N = F | R, H = R>(\n onFulfilled?: FulfilledHandler<F | R, N> | null,\n onRejected?: RejectedHandler<R, H> | null): Promise<N | H>\n {\n return this._promise.then(onFulfilled, onRejected);\n }\n public catch<H = R>(onRejected?: RejectedHandler<R, H> | null): Promise<F | R | H>\n {\n return this._promise.catch(onRejected);\n }\n public finally(onFinally?: (() => void) | null): Promise<F | R>\n {\n return this._promise.finally(onFinally);\n }\n\n public watch(promise: Promise<T>): this\n {\n promise.then(this.resolve, this.reject);\n\n return this;\n }\n\n public get [Symbol.toStringTag]()\n {\n return \"DeferredPromise\";\n }\n}\n","export default class Exception extends Error\n{\n public static FromUnknown(error: unknown): Exception\n {\n if (error instanceof Exception)\n {\n return error;\n }\n if (error instanceof Error)\n {\n const exc = new Exception(error.message);\n\n exc.stack = error.stack;\n exc.name = error.name;\n\n return exc;\n }\n\n return new Exception(`${error}`);\n }\n\n public constructor(message: string, cause?: unknown, name = \"Exception\")\n {\n super(message);\n\n this.cause = cause;\n this.name = name;\n\n if (cause)\n {\n if (cause instanceof Error)\n {\n this.stack += `\\n\\nCaused by ${cause.stack}`;\n }\n else\n {\n this.stack += `\\n\\nCaused by ${cause}`;\n }\n }\n }\n}\n","/* eslint-disable no-trailing-spaces */\n\n/**\n * A wrapper around the `Storage` API to store and retrieve JSON values.\n *\n * It allows to handle either the `sessionStorage` or the `localStorage`\n * storage at the same time, depending on the required use case.\n */\nexport default class JsonStorage\n{\n protected _preferPersistence: boolean;\n\n protected _volatile: Storage;\n protected _persistent: Storage;\n\n public constructor(preferPersistence = true)\n {\n this._preferPersistence = preferPersistence;\n\n this._volatile = window.sessionStorage;\n this._persistent = window.localStorage;\n }\n\n protected _get<T>(storage: Storage, propertyName: string): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue: T): T;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined\n {\n const propertyValue = storage.getItem(propertyName);\n if (propertyValue)\n {\n try\n {\n return JSON.parse(propertyValue);\n }\n catch (error)\n {\n // eslint-disable-next-line no-console\n console.warn(\n `The \"${propertyValue}\" value for \"${propertyName}\"` +\n \" property cannot be parsed. Clearing the storage...\");\n\n storage.removeItem(propertyName);\n }\n }\n\n return defaultValue;\n }\n protected _set<T>(storage: Storage, propertyName: string, newValue?: T): void\n {\n const encodedValue = JSON.stringify(newValue);\n if (encodedValue)\n {\n storage.setItem(propertyName, encodedValue);\n }\n else\n {\n storage.removeItem(propertyName);\n }\n }\n\n /**\n * Retrieves the value with the specified name from the corresponding storage.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public get<T>(propertyName: string, defaultValue: undefined, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue: T, persistent?: boolean): T ;\n public get<T>(propertyName: string, defaultValue?: T, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue?: T, persistent = this._preferPersistence): T | undefined\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return this._get<T>(storage, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public recall<T>(propertyName: string): T | undefined;\n public recall<T>(propertyName: string, defaultValue: T): T;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._volatile, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public retrieve<T>(propertyName: string): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue: T): T;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this.recall<T>(propertyName) ?? this.read<T>(propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public read<T>(propertyName: string): T | undefined;\n public read<T>(propertyName: string, defaultValue: T): T;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._persistent, propertyName, defaultValue);\n }\n\n /**\n * Checks whether the property with the specified name exists in the corresponding storage.\n *\n * @param propertyName The name of the property to check.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public has(propertyName: string, persistent?: boolean): boolean\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return storage.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists in the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public knows(propertyName: string): boolean\n {\n return this._volatile.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public find(propertyName: string): boolean\n {\n return this.knows(propertyName) ?? this.exists(propertyName);\n }\n /**\n * Checks whether the property with the specified name exists in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public exists(propertyName: string): boolean\n {\n return this._persistent.getItem(propertyName) !== null;\n }\n\n /**\n * Sets the value with the specified name in the corresponding storage.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n */\n public set<T>(propertyName: string, newValue?: T, persistent = this._preferPersistence): void\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n this._set<T>(storage, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the volatile `sessionStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public remember<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._volatile, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the persistent `localStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public write<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._persistent, propertyName, newValue);\n }\n\n /**\n * Removes the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public forget(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public erase(propertyName: string): void\n {\n this._persistent.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from all the storages.\n *\n * @param propertyName The name of the property to remove.\n */\n public clear(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n this._persistent.removeItem(propertyName);\n }\n}\n","import type { GeneratorFunction, Iteratee, Reducer } from \"../types.js\";\n\nexport default class SmartIterator<T, R = void, N = undefined> implements Iterator<T, R, N>\n{\n protected _iterator: Iterator<T, R, N>;\n\n public return?: (value?: R) => IteratorResult<T, R>;\n public throw?: (error?: unknown) => IteratorResult<T, R>;\n\n public constructor(iterable: Iterable<T>);\n public constructor(iterator: Iterator<T, R, N>);\n public constructor(generatorFn: GeneratorFunction<T, R, N>);\n public constructor(iterable: Iterable<T> | Iterator<T, R, N> | GeneratorFunction<T, R, N>)\n {\n if (iterable instanceof Function)\n {\n this._iterator = iterable();\n }\n else if (Symbol.iterator in iterable)\n {\n this._iterator = iterable[Symbol.iterator]() as Iterator<T, R, N>;\n }\n else\n {\n this._iterator = iterable;\n }\n\n if (this._iterator.return) { this.return = (value?: R) => this._iterator.return!(value); }\n if (this._iterator.throw) { this.throw = (error?: unknown) => this._iterator.throw!(error); }\n }\n\n public every(iteratee: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return true; }\n if (!(iteratee(result.value, index))) { return false; }\n\n index += 1;\n }\n }\n public some(iteratee: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return false; }\n if (iteratee(result.value, index)) { return true; }\n\n index += 1;\n }\n }\n\n public filter(iteratee: Iteratee<T, boolean>): SmartIterator<T, R, N>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<T, R, N>({\n *[Symbol.iterator]()\n {\n while (true)\n {\n const result = iterator.next();\n\n if (result.done) { return result.value; }\n if (iteratee(result.value, index)) { yield result.value; }\n\n index += 1;\n }\n }\n });\n }\n public map<V>(iteratee: Iteratee<T, V>): SmartIterator<V, R>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<V, R>({\n *[Symbol.iterator]()\n {\n while (true)\n {\n const result = iterator.next();\n if (result.done) { return result.value; }\n\n yield iteratee(result.value, index);\n\n index += 1;\n }\n }\n });\n }\n public reduce<A>(reducer: Reducer<T, A>, initialValue: A): A\n {\n let index = 0;\n let accumulator = initialValue;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return accumulator; }\n\n accumulator = reducer(accumulator, result.value, index);\n\n index += 1;\n }\n }\n\n public forEach(iteratee: Iteratee<T>): void\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return; }\n\n iteratee(result.value, index);\n\n index += 1;\n }\n }\n\n public next(...values: N extends undefined ? [] : [N]): IteratorResult<T, R>\n {\n return this._iterator.next(...values);\n }\n\n public toArray(): T[]\n {\n return [...this];\n }\n\n public [Symbol.iterator](): SmartIterator<T, R, N> { return this; }\n}\n","import Exception from \"./exception.js\";\n\nexport default class Subscribers<P extends unknown[] = [], R = void, T extends (...args: P) => R = (...args: P) => R>\n{\n protected _subscribers: T[];\n\n public constructor()\n {\n this._subscribers = [];\n }\n\n public add(subscriber: T): void\n {\n this._subscribers.push(subscriber);\n }\n public remove(subscriber: T): void\n {\n const index = this._subscribers.indexOf(subscriber);\n if (index < 0)\n {\n throw new Exception(\"Unable to remove the requested subscriber. It was not found.\");\n }\n\n this._subscribers.splice(index, 1);\n }\n\n public call(...args: P): R[]\n {\n return this._subscribers\n .slice()\n .map((subscriber) => subscriber(...args));\n }\n}\n","export async function delay(milliseconds: number): Promise<void>\n{\n return new Promise<void>((resolve, reject) => setTimeout(resolve, milliseconds));\n}\n\nexport async function nextAnimationFrame(): Promise<void>\n{\n return new Promise<void>((resolve, reject) => requestAnimationFrame(() => resolve()));\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport enum DateUnit\n{\n Second = 1000,\n Minute = 60 * Second,\n Hour = 60 * Minute,\n Day = 24 * Hour,\n Week = 7 * Day,\n Month = 30 * Day,\n Year = 365 * Day\n}\n\nexport function dateDifference(start: Date, end: Date, unit = DateUnit.Day): number\n{\n return Math.floor((end.getTime() - start.getTime()) / unit);\n}\n\nexport function dateRange(start: Date, end: Date, offset = DateUnit.Day): SmartIterator<Date>\n{\n return new SmartIterator<Date>(function* ()\n {\n const endTime = end.getTime();\n\n let unixTime: number = start.getTime();\n while (unixTime < endTime)\n {\n yield new Date(unixTime);\n\n unixTime += offset;\n }\n });\n}\n\nexport function dateRound(date: Date, unit = DateUnit.Day): Date\n{\n return new Date(Math.floor(date.getTime() / unit) * unit);\n}\n","export async function loadScript(scriptUrl: string, scriptType = \"text/javascript\"): Promise<void>\n{\n return new Promise<void>((resolve, reject) =>\n {\n const script = document.createElement(\"script\");\n\n script.async = true;\n script.defer = true;\n script.src = scriptUrl;\n script.type = scriptType;\n\n script.onload = () => resolve();\n script.onerror = () => reject();\n\n document.body.appendChild(script);\n });\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport function count<T>(elements: Iterable<T>): number\n{\n if (Array.isArray(elements)) { return elements.length; }\n\n let _count = 0;\n for (const _ of elements) { _count += 1; }\n\n return _count;\n}\n\nexport function range(end: number): SmartIterator<number>;\nexport function range(start: number, end: number): SmartIterator<number>;\nexport function range(start: number, end: number, step: number): SmartIterator<number>;\nexport function range(start: number, end?: number, step = 1): SmartIterator<number>\n{\n return new SmartIterator<number>(function* ()\n {\n if (end === undefined)\n {\n end = start;\n start = 0;\n }\n\n if (start > end) { step = step ?? -1; }\n\n for (let index = start; index < end; index += step) { yield index; }\n });\n}\n\nexport function shuffle<T>(iterable: Iterable<T>): T[]\n{\n const array = [...iterable];\n\n for (let index = array.length - 1; index > 0; index -= 1)\n {\n const jndex = Math.floor(Math.random() * (index + 1));\n\n [array[index], array[jndex]] = [array[jndex], array[index]];\n }\n\n return array;\n}\n\nexport function unique<T>(elements: Iterable<T>): SmartIterator<T>\n{\n return new SmartIterator<T>(function* ()\n {\n const seen = new Set<T>();\n\n for (const element of elements)\n {\n if (seen.has(element)) { continue; }\n\n seen.add(element);\n\n yield element;\n }\n });\n}\n\nexport function zip<T, U>(first: Iterable<T>, second: Iterable<U>): SmartIterator<[T, U]>\n{\n return new SmartIterator<[T, U]>(function* ()\n {\n const firstIterator = first[Symbol.iterator]();\n const secondIterator = second[Symbol.iterator]();\n\n while (true)\n {\n const firstResult = firstIterator.next();\n const secondResult = secondIterator.next();\n\n if ((firstResult.done) || (secondResult.done)) { break; }\n\n yield [firstResult.value, secondResult.value];\n }\n });\n}\n","import { zip } from \"./iterator.js\";\n\nexport function average<T extends number>(values: Iterable<T>): number;\nexport function average<T extends number>(values: Iterable<T>, weights: Iterable<number>): number;\nexport function average<T extends number>(values: Iterable<T>, weights?: Iterable<number>): number\n{\n if (weights === undefined)\n {\n let _sum = 0;\n let _count = 0;\n\n for (const value of values)\n {\n _sum += value;\n _count += 1;\n }\n\n return _sum / _count;\n }\n\n let _sum = 0;\n let _count = 0;\n\n for (const [value, weight] of zip(values, weights))\n {\n _sum += value * weight;\n _count += weight;\n }\n\n return _sum / _count;\n}\n\nexport function hash(value: string): number\n{\n let hashedValue = 0;\n for (let i = 0; i < value.length; i++)\n {\n const char = value.charCodeAt(i);\n hashedValue = ((hashedValue << 5) - hashedValue) + char;\n hashedValue |= 0;\n }\n\n return hashedValue;\n}\n\nexport function random(): number;\nexport function random(max: number): number;\nexport function random(min: number, max: number): number;\nexport function random(min: number, max: number, isDecimal: boolean): number;\nexport function random(min: number, max: number, digits: number): number;\nexport function random(min: number = 1, max?: number, decimals?: boolean | number): number\n{\n if (max === undefined)\n {\n max = min;\n min = 0;\n }\n\n if (min === max)\n {\n return min;\n }\n\n let rounder: (value: number) => number;\n\n if (decimals === true)\n {\n rounder = (value) => value;\n }\n else if (decimals === undefined)\n {\n if (Math.abs(max - min) <= 1)\n {\n rounder = (value) => value;\n }\n else\n {\n rounder = Math.floor;\n }\n }\n else if (decimals === false)\n {\n rounder = Math.floor;\n }\n else\n {\n const digits = 10 ** decimals;\n\n rounder = (value) => Math.floor(value * digits) / digits;\n }\n\n return rounder(Math.random() * (max - min) + min);\n}\n\nexport function sum<T extends number>(values: Iterable<T>): number\n{\n let _sum = 0;\n for (const value of values) { _sum += value; }\n\n return _sum;\n}\n","export function capitalize(value: string): string\n{\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n","export const VERSION = \"1.2.0-rc.3\";\n\nexport { DeferredPromise, Exception, JsonStorage, SmartIterator, Subscribers } from \"./models/index.js\";\nexport {\n average,\n capitalize,\n count,\n delay,\n dateDifference,\n dateRange,\n dateRound,\n DateUnit,\n hash,\n loadScript,\n nextAnimationFrame,\n random,\n range,\n shuffle,\n sum,\n unique,\n zip\n\n} from \"./utils/index.js\";\n\nexport type {\n Constructor,\n FulfilledHandler,\n GeneratorFunction,\n Iteratee,\n MaybePromise,\n PromiseExecutor,\n PromiseRejecter,\n PromiseResolver,\n Reducer,\n RejectedHandler\n\n} from \"./types.js\";\n"],"names":["DeferredPromise","onFulfilled","onRejected","__publicField","_resolve","_reject","resolve","reject","onFinally","promise","Exception","error","exc","message","cause","name","JsonStorage","preferPersistence","storage","propertyName","defaultValue","propertyValue","newValue","encodedValue","persistent","SmartIterator","iterable","value","iteratee","index","result","iterator","reducer","initialValue","accumulator","values","Subscribers","subscriber","args","delay","milliseconds","nextAnimationFrame","DateUnit","dateDifference","start","end","unit","dateRange","offset","endTime","unixTime","dateRound","date","loadScript","scriptUrl","scriptType","script","count","elements","_count","_","range","step","shuffle","array","jndex","unique","seen","element","zip","first","second","firstIterator","secondIterator","firstResult","secondResult","average","weights","_sum","weight","hash","hashedValue","i","char","random","min","max","decimals","rounder","digits","sum","capitalize","VERSION"],"mappings":"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"}
1
+ {"version":3,"file":"core.umd.cjs","sources":["../src/models/deferred-promise.ts","../src/models/exception.ts","../src/models/json-storage.ts","../src/models/smart-iterator.ts","../src/models/subscribers.ts","../src/utils/async.ts","../src/utils/date.ts","../src/utils/dom.ts","../src/utils/iterator.ts","../src/utils/math.ts","../src/utils/string.ts","../src/index.ts"],"sourcesContent":["import type { PromiseResolver, PromiseRejecter, FulfilledHandler, RejectedHandler } from \"../types.js\";\n\nexport default class DeferredPromise<T = void, E = unknown, F = T, R = never>\n{\n protected _resolve!: PromiseResolver<T>;\n protected _reject!: PromiseRejecter<E>;\n\n protected _promise: Promise<F | R>;\n\n public constructor(onFulfilled?: FulfilledHandler<T, F> | null, onRejected?: RejectedHandler<E, R> | null)\n {\n let _resolve: PromiseResolver<T>;\n let _reject: PromiseRejecter<E>;\n\n this._promise = new Promise<T>((resolve, reject) =>\n {\n _resolve = resolve as PromiseResolver<T>;\n _reject = reject as PromiseRejecter<E>;\n\n }).then(onFulfilled, onRejected);\n\n this._resolve = _resolve!;\n this._reject = _reject!;\n }\n\n public get resolve(): PromiseResolver<T>\n {\n return this._resolve;\n }\n public get reject(): PromiseRejecter<E>\n {\n return this._reject;\n }\n\n public then<N = F | R, H = R>(\n onFulfilled?: FulfilledHandler<F | R, N> | null,\n onRejected?: RejectedHandler<R, H> | null): Promise<N | H>\n {\n return this._promise.then(onFulfilled, onRejected);\n }\n public catch<H = R>(onRejected?: RejectedHandler<R, H> | null): Promise<F | R | H>\n {\n return this._promise.catch(onRejected);\n }\n public finally(onFinally?: (() => void) | null): Promise<F | R>\n {\n return this._promise.finally(onFinally);\n }\n\n public watch(promise: Promise<T>): this\n {\n promise.then(this.resolve, this.reject);\n\n return this;\n }\n\n public get [Symbol.toStringTag]()\n {\n return \"DeferredPromise\";\n }\n}\n","export default class Exception extends Error\n{\n public static FromUnknown(error: unknown): Exception\n {\n if (error instanceof Exception)\n {\n return error;\n }\n if (error instanceof Error)\n {\n const exc = new Exception(error.message);\n\n exc.stack = error.stack;\n exc.name = error.name;\n\n return exc;\n }\n\n return new Exception(`${error}`);\n }\n\n public constructor(message: string, cause?: unknown, name = \"Exception\")\n {\n super(message);\n\n this.cause = cause;\n this.name = name;\n\n if (cause)\n {\n if (cause instanceof Error)\n {\n this.stack += `\\n\\nCaused by ${cause.stack}`;\n }\n else\n {\n this.stack += `\\n\\nCaused by ${cause}`;\n }\n }\n }\n}\n","/* eslint-disable no-trailing-spaces */\n\n/**\n * A wrapper around the `Storage` API to store and retrieve JSON values.\n *\n * It allows to handle either the `sessionStorage` or the `localStorage`\n * storage at the same time, depending on the required use case.\n */\nexport default class JsonStorage\n{\n protected _preferPersistence: boolean;\n\n protected _volatile: Storage;\n protected _persistent: Storage;\n\n public constructor(preferPersistence = true)\n {\n this._preferPersistence = preferPersistence;\n\n this._volatile = window.sessionStorage;\n this._persistent = window.localStorage;\n }\n\n protected _get<T>(storage: Storage, propertyName: string): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue: T): T;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined;\n protected _get<T>(storage: Storage, propertyName: string, defaultValue?: T): T | undefined\n {\n const propertyValue = storage.getItem(propertyName);\n if (propertyValue)\n {\n try\n {\n return JSON.parse(propertyValue);\n }\n catch (error)\n {\n // eslint-disable-next-line no-console\n console.warn(\n `The \"${propertyValue}\" value for \"${propertyName}\"` +\n \" property cannot be parsed. Clearing the storage...\");\n\n storage.removeItem(propertyName);\n }\n }\n\n return defaultValue;\n }\n protected _set<T>(storage: Storage, propertyName: string, newValue?: T): void\n {\n const encodedValue = JSON.stringify(newValue);\n if (encodedValue)\n {\n storage.setItem(propertyName, encodedValue);\n }\n else\n {\n storage.removeItem(propertyName);\n }\n }\n\n /**\n * Retrieves the value with the specified name from the corresponding storage.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public get<T>(propertyName: string, defaultValue: undefined, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue: T, persistent?: boolean): T ;\n public get<T>(propertyName: string, defaultValue?: T, persistent?: boolean): T | undefined;\n public get<T>(propertyName: string, defaultValue?: T, persistent = this._preferPersistence): T | undefined\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return this._get<T>(storage, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public recall<T>(propertyName: string): T | undefined;\n public recall<T>(propertyName: string, defaultValue: T): T;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined;\n public recall<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._volatile, propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public retrieve<T>(propertyName: string): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue: T): T;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined;\n public retrieve<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this.recall<T>(propertyName) ?? this.read<T>(propertyName, defaultValue);\n }\n /**\n * Retrieves the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to retrieve.\n * @param defaultValue The default value to return if the property does not exist.\n *\n * @returns The value of the property or the default value if the property does not exist.\n */\n public read<T>(propertyName: string): T | undefined;\n public read<T>(propertyName: string, defaultValue: T): T;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined;\n public read<T>(propertyName: string, defaultValue?: T): T | undefined\n {\n return this._get<T>(this._persistent, propertyName, defaultValue);\n }\n\n /**\n * Checks whether the property with the specified name exists in the corresponding storage.\n *\n * @param propertyName The name of the property to check.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public has(propertyName: string, persistent?: boolean): boolean\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n return storage.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists in the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public knows(propertyName: string): boolean\n {\n return this._volatile.getItem(propertyName) !== null;\n }\n /**\n * Checks whether the property with the specified name exists looking first in the\n * volatile `sessionStorage` and then in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public find(propertyName: string): boolean\n {\n return this.knows(propertyName) ?? this.exists(propertyName);\n }\n /**\n * Checks whether the property with the specified name exists in the persistent `localStorage`.\n *\n * @param propertyName The name of the property to check.\n *\n * @returns `true` if the property exists, `false` otherwise.\n */\n public exists(propertyName: string): boolean\n {\n return this._persistent.getItem(propertyName) !== null;\n }\n\n /**\n * Sets the value with the specified name in the corresponding storage.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n * @param persistent Whether to use the persistent `localStorage` or the volatile `sessionStorage`.\n */\n public set<T>(propertyName: string, newValue?: T, persistent = this._preferPersistence): void\n {\n const storage = persistent ? this._persistent : this._volatile;\n\n this._set<T>(storage, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the volatile `sessionStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public remember<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._volatile, propertyName, newValue);\n }\n /**\n * Sets the value with the specified name in the persistent `localStorage`.\n * If the value is `undefined`, the property is removed from the storage.\n *\n * @param propertyName The name of the property to set.\n * @param newValue The new value to set.\n */\n public write<T>(propertyName: string, newValue?: T): void\n {\n this._set<T>(this._persistent, propertyName, newValue);\n }\n\n /**\n * Removes the value with the specified name from the volatile `sessionStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public forget(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from the persistent `localStorage`.\n *\n * @param propertyName The name of the property to remove.\n */\n public erase(propertyName: string): void\n {\n this._persistent.removeItem(propertyName);\n }\n /**\n * Removes the value with the specified name from all the storages.\n *\n * @param propertyName The name of the property to remove.\n */\n public clear(propertyName: string): void\n {\n this._volatile.removeItem(propertyName);\n this._persistent.removeItem(propertyName);\n }\n}\n","import type { GeneratorFunction, Iteratee, Reducer } from \"../types.js\";\n\nexport default class SmartIterator<T, R = void, N = undefined> implements Iterator<T, R, N>\n{\n protected _iterator: Iterator<T, R, N>;\n\n public return?: (value?: R) => IteratorResult<T, R>;\n public throw?: (error?: unknown) => IteratorResult<T, R>;\n\n public constructor(iterable: Iterable<T>);\n public constructor(iterator: Iterator<T, R, N>);\n public constructor(generatorFn: GeneratorFunction<T, R, N>);\n public constructor(argument: Iterable<T> | Iterator<T, R, N> | GeneratorFunction<T, R, N>)\n {\n if (argument instanceof Function)\n {\n this._iterator = argument();\n }\n else if (Symbol.iterator in argument)\n {\n this._iterator = argument[Symbol.iterator]() as Iterator<T, R, N>;\n }\n else\n {\n this._iterator = argument;\n }\n\n if (this._iterator.return) { this.return = (value?: R) => this._iterator.return!(value); }\n if (this._iterator.throw) { this.throw = (error?: unknown) => this._iterator.throw!(error); }\n }\n\n public every(predicate: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return true; }\n if (!(predicate(result.value, index))) { return false; }\n\n index += 1;\n }\n }\n public some(predicate: Iteratee<T, boolean>): boolean\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n\n if (result.done) { return false; }\n if (predicate(result.value, index)) { return true; }\n\n index += 1;\n }\n }\n\n public filter(predicate: Iteratee<T, boolean>): SmartIterator<T, R, N>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<T, R, N>(function* ()\n {\n while (true)\n {\n const result = iterator.next();\n\n if (result.done) { return result.value; }\n if (predicate(result.value, index)) { yield result.value; }\n\n index += 1;\n }\n });\n }\n public map<V>(iteratee: Iteratee<T, V>): SmartIterator<V, R>\n {\n let index = 0;\n const iterator = this._iterator;\n\n return new SmartIterator<V, R>(function* ()\n {\n while (true)\n {\n const result = iterator.next();\n if (result.done) { return result.value; }\n\n yield iteratee(result.value, index);\n\n index += 1;\n }\n });\n }\n public reduce<A>(reducer: Reducer<T, A>, initialValue: A): A\n {\n let index = 0;\n let accumulator = initialValue;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return accumulator; }\n\n accumulator = reducer(accumulator, result.value, index);\n\n index += 1;\n }\n }\n\n public forEach(iteratee: Iteratee<T>): void\n {\n let index = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true)\n {\n const result = this._iterator.next();\n if (result.done) { return; }\n\n iteratee(result.value, index);\n\n index += 1;\n }\n }\n\n public next(...values: N extends undefined ? [] : [N]): IteratorResult<T, R>\n {\n return this._iterator.next(...values);\n }\n\n public toArray(): T[]\n {\n return [...this];\n }\n\n public [Symbol.iterator](): SmartIterator<T, R, N> { return this; }\n}\n","import Exception from \"./exception.js\";\n\nexport default class Subscribers<P extends unknown[] = [], R = void, T extends (...args: P) => R = (...args: P) => R>\n{\n protected _subscribers: T[];\n\n public constructor()\n {\n this._subscribers = [];\n }\n\n public add(subscriber: T): void\n {\n this._subscribers.push(subscriber);\n }\n public remove(subscriber: T): void\n {\n const index = this._subscribers.indexOf(subscriber);\n if (index < 0)\n {\n throw new Exception(\"Unable to remove the requested subscriber. It was not found.\");\n }\n\n this._subscribers.splice(index, 1);\n }\n\n public call(...args: P): R[]\n {\n return this._subscribers\n .slice()\n .map((subscriber) => subscriber(...args));\n }\n}\n","export async function delay(milliseconds: number): Promise<void>\n{\n return new Promise<void>((resolve, reject) => setTimeout(resolve, milliseconds));\n}\n\nexport async function nextAnimationFrame(): Promise<void>\n{\n return new Promise<void>((resolve, reject) => requestAnimationFrame(() => resolve()));\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport enum DateUnit\n{\n Second = 1000,\n Minute = 60 * Second,\n Hour = 60 * Minute,\n Day = 24 * Hour,\n Week = 7 * Day,\n Month = 30 * Day,\n Year = 365 * Day\n}\n\nexport function dateDifference(start: Date, end: Date, unit = DateUnit.Day): number\n{\n return Math.floor((end.getTime() - start.getTime()) / unit);\n}\n\nexport function dateRange(start: Date, end: Date, offset = DateUnit.Day): SmartIterator<Date>\n{\n return new SmartIterator<Date>(function* ()\n {\n const endTime = end.getTime();\n\n let unixTime: number = start.getTime();\n while (unixTime < endTime)\n {\n yield new Date(unixTime);\n\n unixTime += offset;\n }\n });\n}\n\nexport function dateRound(date: Date, unit = DateUnit.Day): Date\n{\n return new Date(Math.floor(date.getTime() / unit) * unit);\n}\n","export async function loadScript(scriptUrl: string, scriptType = \"text/javascript\"): Promise<void>\n{\n return new Promise<void>((resolve, reject) =>\n {\n const script = document.createElement(\"script\");\n\n script.async = true;\n script.defer = true;\n script.src = scriptUrl;\n script.type = scriptType;\n\n script.onload = () => resolve();\n script.onerror = () => reject();\n\n document.body.appendChild(script);\n });\n}\n","import { SmartIterator } from \"../models/index.js\";\n\nexport function count<T>(elements: Iterable<T>): number\n{\n if (Array.isArray(elements)) { return elements.length; }\n\n let _count = 0;\n for (const _ of elements) { _count += 1; }\n\n return _count;\n}\n\nexport function range(end: number): SmartIterator<number>;\nexport function range(start: number, end: number): SmartIterator<number>;\nexport function range(start: number, end: number, step: number): SmartIterator<number>;\nexport function range(start: number, end?: number, step = 1): SmartIterator<number>\n{\n return new SmartIterator<number>(function* ()\n {\n if (end === undefined)\n {\n end = start;\n start = 0;\n }\n\n if (start > end) { step = step ?? -1; }\n\n for (let index = start; index < end; index += step) { yield index; }\n });\n}\n\nexport function shuffle<T>(iterable: Iterable<T>): T[]\n{\n const array = [...iterable];\n\n for (let index = array.length - 1; index > 0; index -= 1)\n {\n const jndex = Math.floor(Math.random() * (index + 1));\n\n [array[index], array[jndex]] = [array[jndex], array[index]];\n }\n\n return array;\n}\n\nexport function unique<T>(elements: Iterable<T>): SmartIterator<T>\n{\n return new SmartIterator<T>(function* ()\n {\n const seen = new Set<T>();\n\n for (const element of elements)\n {\n if (seen.has(element)) { continue; }\n\n seen.add(element);\n\n yield element;\n }\n });\n}\n\nexport function zip<T, U>(first: Iterable<T>, second: Iterable<U>): SmartIterator<[T, U]>\n{\n return new SmartIterator<[T, U]>(function* ()\n {\n const firstIterator = first[Symbol.iterator]();\n const secondIterator = second[Symbol.iterator]();\n\n while (true)\n {\n const firstResult = firstIterator.next();\n const secondResult = secondIterator.next();\n\n if ((firstResult.done) || (secondResult.done)) { break; }\n\n yield [firstResult.value, secondResult.value];\n }\n });\n}\n","import { zip } from \"./iterator.js\";\n\nexport function average<T extends number>(values: Iterable<T>): number;\nexport function average<T extends number>(values: Iterable<T>, weights: Iterable<number>): number;\nexport function average<T extends number>(values: Iterable<T>, weights?: Iterable<number>): number\n{\n if (weights === undefined)\n {\n let _sum = 0;\n let _count = 0;\n\n for (const value of values)\n {\n _sum += value;\n _count += 1;\n }\n\n return _sum / _count;\n }\n\n let _sum = 0;\n let _count = 0;\n\n for (const [value, weight] of zip(values, weights))\n {\n _sum += value * weight;\n _count += weight;\n }\n\n return _sum / _count;\n}\n\nexport function hash(value: string): number\n{\n let hashedValue = 0;\n for (let i = 0; i < value.length; i++)\n {\n const char = value.charCodeAt(i);\n hashedValue = ((hashedValue << 5) - hashedValue) + char;\n hashedValue |= 0;\n }\n\n return hashedValue;\n}\n\nexport function random(): number;\nexport function random(max: number): number;\nexport function random(min: number, max: number): number;\nexport function random(min: number, max: number, isDecimal: boolean): number;\nexport function random(min: number, max: number, digits: number): number;\nexport function random(min: number = 1, max?: number, decimals?: boolean | number): number\n{\n if (max === undefined)\n {\n max = min;\n min = 0;\n }\n\n if (min === max)\n {\n return min;\n }\n\n let rounder: (value: number) => number;\n\n if (decimals === true)\n {\n rounder = (value) => value;\n }\n else if (decimals === undefined)\n {\n if (Math.abs(max - min) <= 1)\n {\n rounder = (value) => value;\n }\n else\n {\n rounder = Math.floor;\n }\n }\n else if (decimals === false)\n {\n rounder = Math.floor;\n }\n else\n {\n const digits = 10 ** decimals;\n\n rounder = (value) => Math.floor(value * digits) / digits;\n }\n\n return rounder(Math.random() * (max - min) + min);\n}\n\nexport function sum<T extends number>(values: Iterable<T>): number\n{\n let _sum = 0;\n for (const value of values) { _sum += value; }\n\n return _sum;\n}\n","export function capitalize(value: string): string\n{\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n","export const VERSION = \"1.2.0\";\n\nexport { DeferredPromise, Exception, JsonStorage, SmartIterator, Subscribers } from \"./models/index.js\";\nexport {\n average,\n capitalize,\n count,\n delay,\n dateDifference,\n dateRange,\n dateRound,\n DateUnit,\n hash,\n loadScript,\n nextAnimationFrame,\n random,\n range,\n shuffle,\n sum,\n unique,\n zip\n\n} from \"./utils/index.js\";\n\nexport type {\n Constructor,\n FulfilledHandler,\n GeneratorFunction,\n Iteratee,\n MaybePromise,\n PromiseExecutor,\n PromiseRejecter,\n PromiseResolver,\n Reducer,\n RejectedHandler\n\n} from \"./types.js\";\n"],"names":["DeferredPromise","onFulfilled","onRejected","__publicField","_resolve","_reject","resolve","reject","onFinally","promise","Exception","error","exc","message","cause","name","JsonStorage","preferPersistence","storage","propertyName","defaultValue","propertyValue","newValue","encodedValue","persistent","SmartIterator","argument","value","predicate","index","result","iterator","iteratee","reducer","initialValue","accumulator","values","Subscribers","subscriber","args","delay","milliseconds","nextAnimationFrame","DateUnit","dateDifference","start","end","unit","dateRange","offset","endTime","unixTime","dateRound","date","loadScript","scriptUrl","scriptType","script","count","elements","_count","_","range","step","shuffle","iterable","array","jndex","unique","seen","element","zip","first","second","firstIterator","secondIterator","firstResult","secondResult","average","weights","_sum","weight","hash","hashedValue","i","char","random","min","max","decimals","rounder","digits","sum","capitalize","VERSION"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@byloth/core",
3
- "version": "1.2.0-rc.3",
3
+ "version": "1.2.0",
4
4
  "description": "An unopinionated collection of useful functions and classes that I use widely in all my projects. 🔧",
5
5
  "keywords": [
6
6
  "Core",
@@ -57,8 +57,8 @@
57
57
  },
58
58
  "devDependencies": {
59
59
  "@byloth/eslint-config-typescript": "^2.6.8",
60
- "@typescript-eslint/eslint-plugin": "^6.16.0",
61
- "@typescript-eslint/parser": "^6.16.0",
60
+ "@typescript-eslint/eslint-plugin": "^6.17.0",
61
+ "@typescript-eslint/parser": "^6.17.0",
62
62
  "eslint": "^8.56.0",
63
63
  "typescript": "^5.3.3",
64
64
  "vite": "^5.0.10"
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export const VERSION = "1.2.0-rc.3";
1
+ export const VERSION = "1.2.0";
2
2
 
3
3
  export { DeferredPromise, Exception, JsonStorage, SmartIterator, Subscribers } from "./models/index.js";
4
4
  export {
@@ -10,26 +10,26 @@ export default class SmartIterator<T, R = void, N = undefined> implements Iterat
10
10
  public constructor(iterable: Iterable<T>);
11
11
  public constructor(iterator: Iterator<T, R, N>);
12
12
  public constructor(generatorFn: GeneratorFunction<T, R, N>);
13
- public constructor(iterable: Iterable<T> | Iterator<T, R, N> | GeneratorFunction<T, R, N>)
13
+ public constructor(argument: Iterable<T> | Iterator<T, R, N> | GeneratorFunction<T, R, N>)
14
14
  {
15
- if (iterable instanceof Function)
15
+ if (argument instanceof Function)
16
16
  {
17
- this._iterator = iterable();
17
+ this._iterator = argument();
18
18
  }
19
- else if (Symbol.iterator in iterable)
19
+ else if (Symbol.iterator in argument)
20
20
  {
21
- this._iterator = iterable[Symbol.iterator]() as Iterator<T, R, N>;
21
+ this._iterator = argument[Symbol.iterator]() as Iterator<T, R, N>;
22
22
  }
23
23
  else
24
24
  {
25
- this._iterator = iterable;
25
+ this._iterator = argument;
26
26
  }
27
27
 
28
28
  if (this._iterator.return) { this.return = (value?: R) => this._iterator.return!(value); }
29
29
  if (this._iterator.throw) { this.throw = (error?: unknown) => this._iterator.throw!(error); }
30
30
  }
31
31
 
32
- public every(iteratee: Iteratee<T, boolean>): boolean
32
+ public every(predicate: Iteratee<T, boolean>): boolean
33
33
  {
34
34
  let index = 0;
35
35
 
@@ -39,12 +39,12 @@ export default class SmartIterator<T, R = void, N = undefined> implements Iterat
39
39
  const result = this._iterator.next();
40
40
 
41
41
  if (result.done) { return true; }
42
- if (!(iteratee(result.value, index))) { return false; }
42
+ if (!(predicate(result.value, index))) { return false; }
43
43
 
44
44
  index += 1;
45
45
  }
46
46
  }
47
- public some(iteratee: Iteratee<T, boolean>): boolean
47
+ public some(predicate: Iteratee<T, boolean>): boolean
48
48
  {
49
49
  let index = 0;
50
50
 
@@ -54,29 +54,27 @@ export default class SmartIterator<T, R = void, N = undefined> implements Iterat
54
54
  const result = this._iterator.next();
55
55
 
56
56
  if (result.done) { return false; }
57
- if (iteratee(result.value, index)) { return true; }
57
+ if (predicate(result.value, index)) { return true; }
58
58
 
59
59
  index += 1;
60
60
  }
61
61
  }
62
62
 
63
- public filter(iteratee: Iteratee<T, boolean>): SmartIterator<T, R, N>
63
+ public filter(predicate: Iteratee<T, boolean>): SmartIterator<T, R, N>
64
64
  {
65
65
  let index = 0;
66
66
  const iterator = this._iterator;
67
67
 
68
- return new SmartIterator<T, R, N>({
69
- *[Symbol.iterator]()
68
+ return new SmartIterator<T, R, N>(function* ()
69
+ {
70
+ while (true)
70
71
  {
71
- while (true)
72
- {
73
- const result = iterator.next();
72
+ const result = iterator.next();
74
73
 
75
- if (result.done) { return result.value; }
76
- if (iteratee(result.value, index)) { yield result.value; }
74
+ if (result.done) { return result.value; }
75
+ if (predicate(result.value, index)) { yield result.value; }
77
76
 
78
- index += 1;
79
- }
77
+ index += 1;
80
78
  }
81
79
  });
82
80
  }
@@ -85,18 +83,16 @@ export default class SmartIterator<T, R = void, N = undefined> implements Iterat
85
83
  let index = 0;
86
84
  const iterator = this._iterator;
87
85
 
88
- return new SmartIterator<V, R>({
89
- *[Symbol.iterator]()
86
+ return new SmartIterator<V, R>(function* ()
87
+ {
88
+ while (true)
90
89
  {
91
- while (true)
92
- {
93
- const result = iterator.next();
94
- if (result.done) { return result.value; }
90
+ const result = iterator.next();
91
+ if (result.done) { return result.value; }
95
92
 
96
- yield iteratee(result.value, index);
93
+ yield iteratee(result.value, index);
97
94
 
98
- index += 1;
99
- }
95
+ index += 1;
100
96
  }
101
97
  });
102
98
  }
package/src/types.ts CHANGED
@@ -1,4 +1,5 @@
1
- export type Constructor<T extends object, P extends unknown[] = []> = new (...args: P) => T;
1
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
+ export type Constructor<T extends object, P extends unknown[] = any[]> = new (...args: P) => T;
2
3
 
3
4
  export type GeneratorFunction<T, R = void, N = undefined> = () => Generator<T, R, N>;
4
5
  export type Iteratee<T, R = void> = (value: T, index: number) => R;