@develia/commons 0.4.25 → 0.5.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/array.d.ts +10 -0
- package/dist/array.d.ts.map +1 -1
- package/dist/array.js +18 -0
- package/dist/array.js.map +1 -1
- package/dist/async-pool-executor.d.ts +3 -5
- package/dist/async-pool-executor.d.ts.map +1 -1
- package/dist/async-pool-executor.js +9 -9
- package/dist/async-pool-executor.js.map +1 -1
- package/dist/browser/form-utilities.d.ts +0 -2
- package/dist/browser/form-utilities.d.ts.map +1 -1
- package/dist/browser/form-utilities.js +3 -23
- package/dist/browser/form-utilities.js.map +1 -1
- package/dist/browser/geo-location.js +3 -3
- package/dist/browser/geo-location.js.map +1 -1
- package/dist/browser/native-bridge.d.ts +1 -1
- package/dist/browser/native-bridge.d.ts.map +1 -1
- package/dist/browser/native-bridge.js +2 -2
- package/dist/browser/native-bridge.js.map +1 -1
- package/dist/cancellable-promise.d.ts +8 -2
- package/dist/cancellable-promise.d.ts.map +1 -1
- package/dist/cancellable-promise.js +9 -3
- package/dist/cancellable-promise.js.map +1 -1
- package/dist/clean-url-search-params.js +3 -3
- package/dist/clean-url-search-params.js.map +1 -1
- package/dist/collections/from.d.ts +31 -11
- package/dist/collections/from.d.ts.map +1 -1
- package/dist/collections/from.js +73 -48
- package/dist/collections/from.js.map +1 -1
- package/dist/draft.d.ts +2 -2
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +2 -2
- package/dist/draft.js.map +1 -1
- package/dist/functions.d.ts +2 -2
- package/dist/functions.d.ts.map +1 -1
- package/dist/functions.js +1 -1
- package/dist/functions.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/math.d.ts +14 -5
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +16 -5
- package/dist/math.js.map +1 -1
- package/dist/string.d.ts +5 -0
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +8 -3
- package/dist/string.js.map +1 -1
- package/dist/timespan.d.ts +5 -5
- package/dist/timespan.d.ts.map +1 -1
- package/dist/timespan.js +5 -5
- package/dist/timespan.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities.d.ts +11 -9
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +23 -23
- package/dist/utilities.js.map +1 -1
- package/dist/uuid.d.ts +73 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +129 -0
- package/dist/uuid.js.map +1 -0
- package/package.json +5 -1
- package/src/array.ts +19 -0
- package/src/async-pool-executor.ts +9 -9
- package/src/browser/form-utilities.ts +3 -32
- package/src/browser/geo-location.ts +3 -3
- package/src/browser/native-bridge.ts +2 -2
- package/src/cancellable-promise.ts +9 -3
- package/src/clean-url-search-params.ts +3 -3
- package/src/collections/from.ts +91 -49
- package/src/draft.ts +3 -3
- package/src/functions.ts +3 -3
- package/src/index.ts +2 -1
- package/src/math.ts +17 -5
- package/src/string.ts +9 -3
- package/src/timespan.ts +5 -5
- package/src/types.ts +0 -1
- package/src/utilities.ts +27 -29
- package/src/uuid.ts +153 -0
package/dist/draft.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Methods injected into a draft proxy in addition to the original object's properties.\n *\n * @template T - The shape of the wrapped object.\n */\ntype DraftMethods<T> = {\n /**\n * Apply pending changes to the original object.\n *\n * @param key - Optional property key. If provided, commits only that property.\n * If omitted, commits every modified property recursively.\n * @returns `true` when a single-property commit was applied,\n * `false` when the property was not modified,\n * `void` when committing the whole draft.\n */\n commit(key?: keyof T): boolean | void;\n\n /**\n * Discard pending changes, restoring values from the original object.\n *\n * @param key - Optional property key. If provided, rolls back only that property.\n * If omitted, rolls back every modified property recursively.\n * @returns `true` when a single-property rollback was applied,\n * `false` when the property was not modified,\n * `void` when rolling back the whole draft.\n */\n rollback(key?: keyof T): boolean | void;\n\n /**\n * Check whether the draft (or a specific property) has pending changes.\n *\n * @param key - Optional property key. If omitted, checks the whole draft.\n * @returns `true` if there are pending changes.\n */\n isModified(key?: keyof T): boolean;\n\n /**\n * Get the list of property keys with pending changes at this draft level.\n *\n * @returns Array of modified property keys (does not recurse into children).\n */\n modifiedProps(): (keyof T)[];\n\n /**\n * Manually mark (or unmark) a property as modified.\n * Primarily used by child drafts to notify their parent, but also\n * available for advanced manual control.\n *\n * @param key - Property key to flag.\n * @param modified - `true` to mark as modified (default), `false` to clear.\n */\n setModified(key: keyof T, modified?: boolean): void;\n};\n\n/**\n * A draft proxy: the original object's properties plus draft control methods.\n *\n * @template T - The shape of the wrapped object.\n */\nexport type Draft<T extends object> = T & DraftMethods<T>;\n\n/**\n * Link from a child draft to its parent, used to propagate modification status.\n */\ntype ParentLink = {\n /** Parent draft methods reference (we only need `setModified`). */\n parent: { setModified(key: PropertyKey, modified?: boolean): void };\n /** Key under which this draft is stored in the parent. */\n keyInParent: PropertyKey;\n};\n\nconst DRAFT_MATERIALIZE = Symbol(\"draft.materialize\");\n\ntype InternalDraft = Draft<any> & {\n [DRAFT_MATERIALIZE]: () => any;\n};\n\nfunction isDraftValue(value: any): value is InternalDraft {\n return value !== null &&\n typeof value === \"object\" &&\n typeof value[DRAFT_MATERIALIZE] === \"function\";\n}\n\nfunction materializeDraftValue(value: any): any {\n if (isDraftValue(value)) return value[DRAFT_MATERIALIZE]();\n if (value === null || typeof value !== \"object\") return value;\n\n const objectValue = value as any;\n if (objectValue instanceof Date) return new Date(objectValue);\n if (objectValue instanceof RegExp) return new RegExp(objectValue);\n\n if (objectValue instanceof Map) {\n const copy = new Map();\n for (const [k, v] of objectValue) {\n copy.set(materializeDraftValue(k), materializeDraftValue(v));\n }\n return copy;\n }\n\n if (objectValue instanceof Set) {\n const copy = new Set();\n for (const v of objectValue) {\n copy.add(materializeDraftValue(v));\n }\n return copy;\n }\n\n const copy: any = Array.isArray(objectValue)\n ? []\n : Object.create(Object.getPrototypeOf(objectValue));\n\n for (const key of Reflect.ownKeys(objectValue)) {\n copy[key] = materializeDraftValue(objectValue[key]);\n }\n\n return copy;\n}\n\n// ─────────────────────────────────────────────\n// deepDraft (internal)\n// ─────────────────────────────────────────────\n\n/**\n * Recursively wrap a value so that nested objects/arrays become child drafts\n * linked to a parent. Primitives, `Date`, `RegExp`, `Map` and `Set` instances\n * are cloned but not wrapped.\n *\n * @param value - The value to process.\n * @param parentLink - Optional link to a parent draft for change propagation.\n * @returns A drafted value (or a plain clone for non-wrappable types).\n */\nfunction deepDraft(value: any, parentLink?: ParentLink): any {\n if (value === null || typeof value !== \"object\") return value;\n if (value instanceof Date) return new Date(value);\n if (value instanceof RegExp) return new RegExp(value);\n\n if (value instanceof Map) {\n const copy = new Map();\n for (const [k, v] of value) {\n copy.set(deepDraft(k), deepDraft(v));\n }\n return copy;\n }\n if (value instanceof Set) {\n const copy = new Set();\n for (const v of value) {\n copy.add(deepDraft(v));\n }\n return copy;\n }\n\n return draft(value, parentLink);\n}\n\n/**\n * Create a draft proxy over `original`. The proxy exposes the same properties\n * as the original (with nested objects wrapped as child drafts) plus the\n * control methods `commit`, `rollback`, `isModified`, `modifiedProps` and\n * `setModified`.\n *\n * Mutations on the draft do not affect the original until `commit()` is called.\n * Nested mutations bubble up: modifying a deep property marks every ancestor\n * draft as modified at the corresponding key.\n *\n * @template T - The shape of the wrapped object.\n * @param original - The object to wrap. It will only be mutated on `commit()`.\n * @param parentLink - Internal link used when this draft is a child of another.\n * Do not pass manually.\n * @returns A draft proxy over a deep copy of `original`.\n */\nexport default function draft<T extends object>(\n original: T,\n parentLink?: ParentLink\n): Draft<T> {\n const copy: any = Array.isArray(original)\n ? []\n : Object.create(Object.getPrototypeOf(original));\n\n const touched = new Set<PropertyKey>();\n\n const notifyParent = (modified: boolean): void => {\n if (parentLink) {\n parentLink.parent.setModified(parentLink.keyInParent, modified);\n }\n };\n\n /**\n * Apply commit for a single key: delegate to the child draft if present,\n * otherwise copy the value into `original`.\n */\n const applyCommit = (key: PropertyKey): void => {\n const val = copy[key];\n if (isDraftValue(val)) {\n val.commit();\n (original as any)[key] = materializeDraftValue(val);\n return;\n }\n if (key in copy) {\n (original as any)[key] = copy[key];\n } else {\n delete (original as any)[key];\n }\n };\n /**\n * Apply rollback for a single key: delegate to the child draft if present,\n * otherwise restore the value from `original`.\n */\n const applyRollback = (key: PropertyKey): void => {\n if (key in original) {\n copy[key] = deepDraft((original as any)[key], {\n parent: methods,\n keyInParent: key,\n });\n } else {\n delete copy[key];\n }\n };\n\n const methods: DraftMethods<T> = {\n commit(key) {\n if (key === undefined) {\n for (const k of touched) applyCommit(k);\n touched.clear();\n notifyParent(false);\n return;\n }\n if (!touched.has(key)) return false;\n applyCommit(key);\n touched.delete(key);\n if (touched.size === 0) notifyParent(false);\n return true;\n },\n\n rollback(key) {\n if (key === undefined) {\n for (const k of touched) applyRollback(k);\n touched.clear();\n notifyParent(false);\n return;\n }\n if (!touched.has(key)) return false;\n applyRollback(key);\n touched.delete(key);\n if (touched.size === 0) notifyParent(false);\n return true;\n },\n\n isModified(key) {\n return key === undefined ? touched.size > 0 : touched.has(key);\n },\n\n modifiedProps() {\n return [...touched] as (keyof T)[];\n },\n\n setModified(key, modified = true) {\n if (modified) {\n touched.add(key);\n notifyParent(true);\n } else {\n touched.delete(key);\n if (touched.size === 0) notifyParent(false);\n }\n },\n };\n\n const isMethodKey = (prop: PropertyKey): prop is keyof DraftMethods<T> =>\n typeof prop === \"string\" && prop in methods;\n\n // Populate `copy` with child drafts linked to this draft.\n for (const key of Reflect.ownKeys(original)) {\n copy[key] = deepDraft((original as any)[key], {\n parent: methods,\n keyInParent: key,\n });\n }\n\n return new Proxy(copy, {\n get(target, prop, receiver) {\n if (prop === DRAFT_MATERIALIZE) return () => materializeDraftValue(target);\n if (isMethodKey(prop)) return (methods as any)[prop];\n return Reflect.get(target, prop, receiver);\n },\n\n set(target, prop, value, receiver) {\n if (isMethodKey(prop)) {\n throw new Error(`\"${String(prop)}\" is a reserved draft property`);\n }\n const wrapped = deepDraft(value, {\n parent: methods,\n keyInParent: prop,\n });\n touched.add(prop);\n notifyParent(true);\n return Reflect.set(target, prop, wrapped, receiver);\n },\n\n deleteProperty(target, prop) {\n if (isMethodKey(prop)) {\n throw new Error(`\"${String(prop)}\" is a reserved draft property`);\n }\n touched.add(prop);\n notifyParent(true);\n return Reflect.deleteProperty(target, prop);\n },\n }) as Draft<T>;\n}"]}
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Methods injected into a draft proxy in addition to the original object's properties.\n *\n * @template T - The shape of the wrapped object.\n */\ntype DraftMethods<T> = {\n /**\n * Apply pending changes to the original object.\n *\n * @param key - Optional property key. If provided, commits only that property.\n * If omitted, commits every modified property recursively.\n * @returns `true` when a single-property commit was applied,\n * `false` when the property was not modified,\n * `void` when committing the whole draft.\n */\n commit(key?: keyof T): boolean | void;\n\n /**\n * Discard pending changes, restoring values from the original object.\n *\n * @param key - Optional property key. If provided, rolls back only that property.\n * If omitted, rolls back every modified property recursively.\n * @returns `true` when a single-property rollback was applied,\n * `false` when the property was not modified,\n * `void` when rolling back the whole draft.\n */\n rollback(key?: keyof T): boolean | void;\n\n /**\n * Check whether the draft (or a specific property) has pending changes.\n *\n * @param key - Optional property key. If omitted, checks the whole draft.\n * @returns `true` if there are pending changes.\n */\n isModified(key?: keyof T): boolean;\n\n /**\n * Get the list of property keys with pending changes at this draft level.\n *\n * @returns Array of modified property keys (does not recurse into children).\n */\n getModifiedProps(): (keyof T)[];\n\n /**\n * Manually mark (or unmark) a property as modified.\n * Primarily used by child drafts to notify their parent, but also\n * available for advanced manual control.\n *\n * @param key - Property key to flag.\n * @param modified - `true` to mark as modified (default), `false` to clear.\n */\n setModified(key: keyof T, modified?: boolean): void;\n};\n\n/**\n * A draft proxy: the original object's properties plus draft control methods.\n *\n * @template T - The shape of the wrapped object.\n */\nexport type Draft<T extends object> = T & DraftMethods<T>;\n\n/**\n * Link from a child draft to its parent, used to propagate modification status.\n */\ntype ParentLink = {\n /** Parent draft methods reference (we only need `setModified`). */\n parent: { setModified(key: PropertyKey, modified?: boolean): void };\n /** Key under which this draft is stored in the parent. */\n keyInParent: PropertyKey;\n};\n\nconst DRAFT_MATERIALIZE = Symbol(\"draft.materialize\");\n\ntype InternalDraft = Draft<any> & {\n [DRAFT_MATERIALIZE]: () => any;\n};\n\nfunction isDraftValue(value: any): value is InternalDraft {\n return value !== null &&\n typeof value === \"object\" &&\n typeof value[DRAFT_MATERIALIZE] === \"function\";\n}\n\nfunction materializeDraftValue(value: any): any {\n if (isDraftValue(value)) return value[DRAFT_MATERIALIZE]();\n if (value === null || typeof value !== \"object\") return value;\n\n const objectValue = value as any;\n if (objectValue instanceof Date) return new Date(objectValue);\n if (objectValue instanceof RegExp) return new RegExp(objectValue);\n\n if (objectValue instanceof Map) {\n const copy = new Map();\n for (const [k, v] of objectValue) {\n copy.set(materializeDraftValue(k), materializeDraftValue(v));\n }\n return copy;\n }\n\n if (objectValue instanceof Set) {\n const copy = new Set();\n for (const v of objectValue) {\n copy.add(materializeDraftValue(v));\n }\n return copy;\n }\n\n const copy: any = Array.isArray(objectValue)\n ? []\n : Object.create(Object.getPrototypeOf(objectValue));\n\n for (const key of Reflect.ownKeys(objectValue)) {\n copy[key] = materializeDraftValue(objectValue[key]);\n }\n\n return copy;\n}\n\n// ─────────────────────────────────────────────\n// deepDraft (internal)\n// ─────────────────────────────────────────────\n\n/**\n * Recursively wrap a value so that nested objects/arrays become child drafts\n * linked to a parent. Primitives, `Date`, `RegExp`, `Map` and `Set` instances\n * are cloned but not wrapped.\n *\n * @param value - The value to process.\n * @param parentLink - Optional link to a parent draft for change propagation.\n * @returns A drafted value (or a plain clone for non-wrappable types).\n */\nfunction deepDraft(value: any, parentLink?: ParentLink): any {\n if (value === null || typeof value !== \"object\") return value;\n if (value instanceof Date) return new Date(value);\n if (value instanceof RegExp) return new RegExp(value);\n\n if (value instanceof Map) {\n const copy = new Map();\n for (const [k, v] of value) {\n copy.set(deepDraft(k), deepDraft(v));\n }\n return copy;\n }\n if (value instanceof Set) {\n const copy = new Set();\n for (const v of value) {\n copy.add(deepDraft(v));\n }\n return copy;\n }\n\n return draft(value, parentLink);\n}\n\n/**\n * Create a draft proxy over `original`. The proxy exposes the same properties\n * as the original (with nested objects wrapped as child drafts) plus the\n * control methods `commit`, `rollback`, `isModified`, `getModifiedProps` and\n * `setModified`.\n *\n * Mutations on the draft do not affect the original until `commit()` is called.\n * Nested mutations bubble up: modifying a deep property marks every ancestor\n * draft as modified at the corresponding key.\n *\n * @template T - The shape of the wrapped object.\n * @param original - The object to wrap. It will only be mutated on `commit()`.\n * @param parentLink - Internal link used when this draft is a child of another.\n * Do not pass manually.\n * @returns A draft proxy over a deep copy of `original`.\n */\nexport default function draft<T extends object>(\n original: T,\n parentLink?: ParentLink\n): Draft<T> {\n const copy: any = Array.isArray(original)\n ? []\n : Object.create(Object.getPrototypeOf(original));\n\n const touched = new Set<PropertyKey>();\n\n const notifyParent = (modified: boolean): void => {\n if (parentLink) {\n parentLink.parent.setModified(parentLink.keyInParent, modified);\n }\n };\n\n /**\n * Apply commit for a single key: delegate to the child draft if present,\n * otherwise copy the value into `original`.\n */\n const applyCommit = (key: PropertyKey): void => {\n const val = copy[key];\n if (isDraftValue(val)) {\n val.commit();\n (original as any)[key] = materializeDraftValue(val);\n return;\n }\n if (key in copy) {\n (original as any)[key] = copy[key];\n } else {\n delete (original as any)[key];\n }\n };\n /**\n * Apply rollback for a single key: delegate to the child draft if present,\n * otherwise restore the value from `original`.\n */\n const applyRollback = (key: PropertyKey): void => {\n if (key in original) {\n copy[key] = deepDraft((original as any)[key], {\n parent: methods,\n keyInParent: key,\n });\n } else {\n delete copy[key];\n }\n };\n\n const methods: DraftMethods<T> = {\n commit(key) {\n if (key === undefined) {\n for (const k of touched) applyCommit(k);\n touched.clear();\n notifyParent(false);\n return;\n }\n if (!touched.has(key)) return false;\n applyCommit(key);\n touched.delete(key);\n if (touched.size === 0) notifyParent(false);\n return true;\n },\n\n rollback(key) {\n if (key === undefined) {\n for (const k of touched) applyRollback(k);\n touched.clear();\n notifyParent(false);\n return;\n }\n if (!touched.has(key)) return false;\n applyRollback(key);\n touched.delete(key);\n if (touched.size === 0) notifyParent(false);\n return true;\n },\n\n isModified(key) {\n return key === undefined ? touched.size > 0 : touched.has(key);\n },\n\n getModifiedProps() {\n return [...touched] as (keyof T)[];\n },\n\n setModified(key, modified = true) {\n if (modified) {\n touched.add(key);\n notifyParent(true);\n } else {\n touched.delete(key);\n if (touched.size === 0) notifyParent(false);\n }\n },\n };\n\n const isMethodKey = (prop: PropertyKey): prop is keyof DraftMethods<T> =>\n typeof prop === \"string\" && prop in methods;\n\n // Populate `copy` with child drafts linked to this draft.\n for (const key of Reflect.ownKeys(original)) {\n copy[key] = deepDraft((original as any)[key], {\n parent: methods,\n keyInParent: key,\n });\n }\n\n return new Proxy(copy, {\n get(target, prop, receiver) {\n if (prop === DRAFT_MATERIALIZE) return () => materializeDraftValue(target);\n if (isMethodKey(prop)) return (methods as any)[prop];\n return Reflect.get(target, prop, receiver);\n },\n\n set(target, prop, value, receiver) {\n if (isMethodKey(prop)) {\n throw new Error(`\"${String(prop)}\" is a reserved draft property`);\n }\n const wrapped = deepDraft(value, {\n parent: methods,\n keyInParent: prop,\n });\n touched.add(prop);\n notifyParent(true);\n return Reflect.set(target, prop, wrapped, receiver);\n },\n\n deleteProperty(target, prop) {\n if (isMethodKey(prop)) {\n throw new Error(`\"${String(prop)}\" is a reserved draft property`);\n }\n touched.add(prop);\n notifyParent(true);\n return Reflect.deleteProperty(target, prop);\n },\n }) as Draft<T>;\n}"]}
|
package/dist/functions.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface ThrottleOptions {
|
|
|
14
14
|
* const refresh = throttle(loadData, 250);
|
|
15
15
|
* refresh();
|
|
16
16
|
*
|
|
17
|
-
* if (refresh.
|
|
17
|
+
* if (refresh.isPending()) {
|
|
18
18
|
* refresh.flush();
|
|
19
19
|
* }
|
|
20
20
|
* ```
|
|
@@ -25,7 +25,7 @@ export type DeferredFunction<F extends AnyFunction> = ((this: ThisParameterType<
|
|
|
25
25
|
/** Execute the scheduled trailing call immediately, when one exists. */
|
|
26
26
|
flush(): ReturnType<F> | undefined;
|
|
27
27
|
/** Return true while a trailing call is scheduled. */
|
|
28
|
-
|
|
28
|
+
isPending(): boolean;
|
|
29
29
|
};
|
|
30
30
|
/**
|
|
31
31
|
* A memoized function with helpers for inspecting and invalidating its cache.
|
package/dist/functions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAGtD,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC5B,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wGAAwG;IACxG,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,CACnD,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG;IAC9B,iEAAiE;IACjE,MAAM,IAAI,IAAI,CAAC;IACf,wEAAwE;IACxE,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnC,sDAAsD;IACtD,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"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"}
|
package/dist/functions.js
CHANGED
package/dist/functions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"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","sourcesContent":["type AnyFunction = (this: any, ...args: any[]) => any;\ntype TimerHandle = ReturnType<typeof setTimeout>;\n\n/** Options that control when a throttled function is executed. */\nexport interface ThrottleOptions {\n /** Execute immediately on the first call in a throttle window. Defaults to true. */\n leading?: boolean;\n /** Execute once more at the end of the throttle window using the latest arguments. Defaults to true. */\n trailing?: boolean;\n}\n\n/**\n * A delayed function returned by {@link throttle}.\n *\n * @example\n * ```ts\n * const refresh = throttle(loadData, 250);\n * refresh();\n *\n * if (refresh.pending()) {\n * refresh.flush();\n * }\n * ```\n */\nexport type DeferredFunction<F extends AnyFunction> = ((\n this: ThisParameterType<F>,\n ...args: Parameters<F>\n) => ReturnType<F> | undefined) & {\n /** Cancel the scheduled call and forget the latest arguments. */\n cancel(): void;\n /** Execute the scheduled trailing call immediately, when one exists. */\n flush(): ReturnType<F> | undefined;\n /** Return true while a trailing call is scheduled. */\n pending(): boolean;\n};\n\n/**\n * A memoized function with helpers for inspecting and invalidating its cache.\n *\n * @example\n * ```ts\n * const getUser = memoize((id: string) => fetchUser(id));\n *\n * getUser(\"42\");\n * getUser.has(\"42\"); // true\n * getUser.delete(\"42\");\n * ```\n */\nexport type MemoizedFunction<F extends AnyFunction, K> = ((\n this: ThisParameterType<F>,\n ...args: Parameters<F>\n) => ReturnType<F>) & {\n /** The backing cache used by the memoized function. */\n readonly cache: Map<K, ReturnType<F>>;\n /** Remove every cached value. */\n clear(): void;\n /** Remove the cached value for the key resolved from the provided arguments. */\n delete(...args: Parameters<F>): boolean;\n /** Return true when a cached value exists for the key resolved from the provided arguments. */\n has(...args: Parameters<F>): boolean;\n};\n\ntype Unary<T, R> = (arg: T) => R;\n\n/**\n * Return the received value unchanged.\n * Useful as a default mapper, placeholder callback, or neutral transform in a pipeline.\n *\n * @example\n * ```ts\n * identity(5); // 5\n *\n * const value = {name: \"commons\"};\n * identity(value) === value; // true\n * ```\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n\n/**\n * Create a function that always returns the same value.\n *\n * @example\n * ```ts\n * const getAnswer = constant(42);\n *\n * getAnswer(); // 42\n * getAnswer(); // 42\n * ```\n */\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\n/**\n * Do nothing and return undefined.\n * Useful as a safe default callback.\n *\n * @example\n * ```ts\n * const onComplete = options.onComplete ?? noop;\n * onComplete();\n * ```\n */\nexport function noop(): void {\n // Intentionally empty.\n}\n\n/**\n * Create a function that can be executed only once.\n * Later calls return the result from the first execution without calling the original function again.\n *\n * @example\n * ```ts\n * const initialize = once(() => ({connected: true}));\n *\n * const first = initialize();\n * const second = initialize();\n * first === second; // true\n * ```\n */\nexport function once<F extends AnyFunction>(fn: F): F {\n let called = false;\n let result: ReturnType<F>;\n\n return function (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> {\n if (!called) {\n called = true;\n result = fn.apply(this, args);\n }\n return result;\n } as F;\n}\n\n/**\n * Cache the result of a function and reuse it for calls with the same resolved key.\n * By default, the first argument is used as the cache key.\n *\n * @example\n * ```ts\n * const double = memoize((value: number) => value * 2);\n *\n * double(4); // 8, computed\n * double(4); // 8, read from cache\n * double.has(4); // true\n * ```\n *\n * @example\n * ```ts\n * const sum = memoize(\n * (left: number, right: number) => left + right,\n * (left, right) => `${left}:${right}`,\n * );\n *\n * sum(2, 3); // 5\n * sum.delete(2, 3); // true\n * sum.clear();\n * ```\n */\nexport function memoize<F extends AnyFunction, K = Parameters<F>[0]>(\n fn: F,\n resolver?: (...args: Parameters<F>) => K,\n cache: Map<K, ReturnType<F>> = new Map<K, ReturnType<F>>()\n): MemoizedFunction<F, K> {\n const resolveKey = (...args: Parameters<F>): K => {\n if (resolver) return resolver(...args);\n return args[0] as K;\n };\n\n const memoized = function (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> {\n const key = resolveKey(...args);\n if (cache.has(key)) {\n return cache.get(key)!;\n }\n\n const value = fn.apply(this, args);\n cache.set(key, value);\n return value;\n } as MemoizedFunction<F, K>;\n\n Object.defineProperty(memoized, \"cache\", {\n value: cache,\n enumerable: false,\n });\n\n memoized.clear = () => cache.clear();\n memoized.delete = (...args: Parameters<F>) => cache.delete(resolveKey(...args));\n memoized.has = (...args: Parameters<F>) => cache.has(resolveKey(...args));\n\n return memoized;\n}\n\n/**\n * Limit how often a function can run during a time window.\n * Calls made while the function is throttled can optionally be replayed once at the end with the latest arguments.\n *\n * @example\n * ```ts\n * const onScroll = throttle(() => {\n * console.log(window.scrollY);\n * }, 100);\n *\n * window.addEventListener(\"scroll\", onScroll);\n * ```\n *\n * @example\n * ```ts\n * const refresh = throttle(loadData, 500, {leading: false});\n *\n * refresh(); // scheduled instead of executed immediately\n * refresh.flush(); // execute the scheduled call now\n * ```\n */\nexport function throttle<F extends AnyFunction>(\n fn: F,\n wait: number,\n options: ThrottleOptions = {}\n): DeferredFunction<F> {\n const delay = normalizeDelay(wait);\n const leading = options.leading ?? true;\n const trailing = options.trailing ?? true;\n\n let timer: TimerHandle | undefined;\n let lastArgs: Parameters<F> | undefined;\n let lastThis: ThisParameterType<F> | undefined;\n let lastInvokeTime = 0;\n let hasInvoked = false;\n let result: ReturnType<F> | undefined;\n\n const invoke = (time: number): ReturnType<F> => {\n const args = lastArgs!;\n const context = lastThis!;\n lastArgs = undefined;\n lastThis = undefined;\n hasInvoked = true;\n lastInvokeTime = time;\n result = fn.apply(context, args);\n return result as ReturnType<F>;\n };\n\n const expire = (): void => {\n timer = undefined;\n if (trailing && lastArgs) {\n invoke(Date.now());\n } else {\n lastArgs = undefined;\n lastThis = undefined;\n }\n };\n\n const throttled = function (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> | undefined {\n const now = Date.now();\n lastArgs = args;\n lastThis = this;\n\n if (!hasInvoked) {\n if (leading) {\n return invoke(now);\n }\n hasInvoked = true;\n lastInvokeTime = now;\n }\n\n const remaining = delay - (now - lastInvokeTime);\n if (remaining <= 0 || remaining > delay) {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n return invoke(now);\n }\n\n if (timer === undefined && trailing) {\n timer = setTimeout(expire, remaining);\n }\n\n return result;\n } as DeferredFunction<F>;\n\n throttled.cancel = (): void => {\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n timer = undefined;\n lastArgs = undefined;\n lastThis = undefined;\n lastInvokeTime = 0;\n hasInvoked = false;\n };\n\n throttled.flush = (): ReturnType<F> | undefined => {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n if (lastArgs && trailing) {\n return invoke(Date.now());\n }\n }\n return result;\n };\n\n throttled.pending = (): boolean => timer !== undefined;\n\n return throttled;\n}\n\n/**\n * Create a function with one or more arguments already provided.\n * Later arguments are appended after the preset arguments.\n *\n * @example\n * ```ts\n * const sum = (a: number, b: number, c: number) => a + b + c;\n * const addFive = partial(sum, 2, 3);\n *\n * addFive(4); // 9\n * ```\n */\nexport function partial<F extends AnyFunction>(\n fn: F,\n ...presetArgs: unknown[]\n): (...laterArgs: unknown[]) => ReturnType<F> {\n return function (this: ThisParameterType<F>, ...laterArgs: unknown[]): ReturnType<F> {\n return fn.apply(this, [...presetArgs, ...laterArgs] as Parameters<F>);\n };\n}\n\n/**\n * Compose unary functions from left to right.\n * The first function receives the original arguments, and each next function receives the previous result.\n *\n * @example\n * ```ts\n * const transform = pipe(\n * (value: number) => value + 1,\n * (value: number) => value * 2,\n * );\n *\n * transform(2); // 6\n * ```\n */\nexport function pipe<A, B>(ab: Unary<A, B>): Unary<A, B>;\nexport function pipe<A, B, C>(ab: Unary<A, B>, bc: Unary<B, C>): Unary<A, C>;\nexport function pipe<A, B, C, D>(ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>): Unary<A, D>;\nexport function pipe<A, B, C, D, E>(ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>): Unary<A, E>;\nexport function pipe(...fns: AnyFunction[]): AnyFunction {\n return createFlow(fns);\n}\n\n/**\n * Compose unary functions from right to left.\n * The rightmost function receives the original arguments, and each function to its left receives the previous result.\n *\n * @example\n * ```ts\n * const transform = compose(\n * (value: number) => value + 1,\n * (value: number) => value * 2,\n * );\n *\n * transform(2); // 5\n * ```\n */\nexport function compose<A, B>(ab: Unary<A, B>): Unary<A, B>;\nexport function compose<A, B, C>(bc: Unary<B, C>, ab: Unary<A, B>): Unary<A, C>;\nexport function compose<A, B, C, D>(cd: Unary<C, D>, bc: Unary<B, C>, ab: Unary<A, B>): Unary<A, D>;\nexport function compose<A, B, C, D, E>(de: Unary<D, E>, cd: Unary<C, D>, bc: Unary<B, C>, ab: Unary<A, B>): Unary<A, E>;\nexport function compose(...fns: AnyFunction[]): AnyFunction {\n return createFlow(fns.slice().reverse());\n}\n\nfunction createFlow(fns: AnyFunction[]): AnyFunction {\n if (fns.length === 0) return identity;\n\n return function (this: any, ...args: any[]): unknown {\n let result = fns[0].apply(this, args);\n for (let i = 1; i < fns.length; i++) {\n result = fns[i].call(this, result);\n }\n return result;\n };\n}\n\nfunction normalizeDelay(wait: number): number {\n return Number.isFinite(wait) ? Math.max(0, wait) : 0;\n}"]}
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"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","sourcesContent":["type AnyFunction = (this: any, ...args: any[]) => any;\ntype TimerHandle = ReturnType<typeof setTimeout>;\n\n/** Options that control when a throttled function is executed. */\nexport interface ThrottleOptions {\n /** Execute immediately on the first call in a throttle window. Defaults to true. */\n leading?: boolean;\n /** Execute once more at the end of the throttle window using the latest arguments. Defaults to true. */\n trailing?: boolean;\n}\n\n/**\n * A delayed function returned by {@link throttle}.\n *\n * @example\n * ```ts\n * const refresh = throttle(loadData, 250);\n * refresh();\n *\n * if (refresh.isPending()) {\n * refresh.flush();\n * }\n * ```\n */\nexport type DeferredFunction<F extends AnyFunction> = ((\n this: ThisParameterType<F>,\n ...args: Parameters<F>\n) => ReturnType<F> | undefined) & {\n /** Cancel the scheduled call and forget the latest arguments. */\n cancel(): void;\n /** Execute the scheduled trailing call immediately, when one exists. */\n flush(): ReturnType<F> | undefined;\n /** Return true while a trailing call is scheduled. */\n isPending(): boolean;\n};\n\n/**\n * A memoized function with helpers for inspecting and invalidating its cache.\n *\n * @example\n * ```ts\n * const getUser = memoize((id: string) => fetchUser(id));\n *\n * getUser(\"42\");\n * getUser.has(\"42\"); // true\n * getUser.delete(\"42\");\n * ```\n */\nexport type MemoizedFunction<F extends AnyFunction, K> = ((\n this: ThisParameterType<F>,\n ...args: Parameters<F>\n) => ReturnType<F>) & {\n /** The backing cache used by the memoized function. */\n readonly cache: Map<K, ReturnType<F>>;\n /** Remove every cached value. */\n clear(): void;\n /** Remove the cached value for the key resolved from the provided arguments. */\n delete(...args: Parameters<F>): boolean;\n /** Return true when a cached value exists for the key resolved from the provided arguments. */\n has(...args: Parameters<F>): boolean;\n};\n\ntype Unary<T, R> = (arg: T) => R;\n\n/**\n * Return the received value unchanged.\n * Useful as a default mapper, placeholder callback, or neutral transform in a pipeline.\n *\n * @example\n * ```ts\n * identity(5); // 5\n *\n * const value = {name: \"commons\"};\n * identity(value) === value; // true\n * ```\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n\n/**\n * Create a function that always returns the same value.\n *\n * @example\n * ```ts\n * const getAnswer = constant(42);\n *\n * getAnswer(); // 42\n * getAnswer(); // 42\n * ```\n */\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\n/**\n * Do nothing and return undefined.\n * Useful as a safe default callback.\n *\n * @example\n * ```ts\n * const onComplete = options.onComplete ?? noop;\n * onComplete();\n * ```\n */\nexport function noop(): void {\n // Intentionally empty.\n}\n\n/**\n * Create a function that can be executed only once.\n * Later calls return the result from the first execution without calling the original function again.\n *\n * @example\n * ```ts\n * const initialize = once(() => ({connected: true}));\n *\n * const first = initialize();\n * const second = initialize();\n * first === second; // true\n * ```\n */\nexport function once<F extends AnyFunction>(fn: F): F {\n let called = false;\n let result: ReturnType<F>;\n\n return function (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> {\n if (!called) {\n called = true;\n result = fn.apply(this, args);\n }\n return result;\n } as F;\n}\n\n/**\n * Cache the result of a function and reuse it for calls with the same resolved key.\n * By default, the first argument is used as the cache key.\n *\n * @example\n * ```ts\n * const double = memoize((value: number) => value * 2);\n *\n * double(4); // 8, computed\n * double(4); // 8, read from cache\n * double.has(4); // true\n * ```\n *\n * @example\n * ```ts\n * const sum = memoize(\n * (left: number, right: number) => left + right,\n * (left, right) => `${left}:${right}`,\n * );\n *\n * sum(2, 3); // 5\n * sum.delete(2, 3); // true\n * sum.clear();\n * ```\n */\nexport function memoize<F extends AnyFunction, K = Parameters<F>[0]>(\n fn: F,\n resolver?: (...args: Parameters<F>) => K,\n cache: Map<K, ReturnType<F>> = new Map<K, ReturnType<F>>()\n): MemoizedFunction<F, K> {\n const resolveKey = (...args: Parameters<F>): K => {\n if (resolver) return resolver(...args);\n return args[0] as K;\n };\n\n const memoized = function (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> {\n const key = resolveKey(...args);\n if (cache.has(key)) {\n return cache.get(key)!;\n }\n\n const value = fn.apply(this, args);\n cache.set(key, value);\n return value;\n } as MemoizedFunction<F, K>;\n\n Object.defineProperty(memoized, \"cache\", {\n value: cache,\n enumerable: false,\n });\n\n memoized.clear = () => cache.clear();\n memoized.delete = (...args: Parameters<F>) => cache.delete(resolveKey(...args));\n memoized.has = (...args: Parameters<F>) => cache.has(resolveKey(...args));\n\n return memoized;\n}\n\n/**\n * Limit how often a function can run during a time window.\n * Calls made while the function is throttled can optionally be replayed once at the end with the latest arguments.\n *\n * @example\n * ```ts\n * const onScroll = throttle(() => {\n * console.log(window.scrollY);\n * }, 100);\n *\n * window.addEventListener(\"scroll\", onScroll);\n * ```\n *\n * @example\n * ```ts\n * const refresh = throttle(loadData, 500, {leading: false});\n *\n * refresh(); // scheduled instead of executed immediately\n * refresh.flush(); // execute the scheduled call now\n * ```\n */\nexport function throttle<F extends AnyFunction>(\n fn: F,\n wait: number,\n options: ThrottleOptions = {}\n): DeferredFunction<F> {\n const delay = normalizeDelay(wait);\n const leading = options.leading ?? true;\n const trailing = options.trailing ?? true;\n\n let timer: TimerHandle | undefined;\n let lastArgs: Parameters<F> | undefined;\n let lastThis: ThisParameterType<F> | undefined;\n let lastInvokeTime = 0;\n let hasInvoked = false;\n let result: ReturnType<F> | undefined;\n\n const invoke = (time: number): ReturnType<F> => {\n const args = lastArgs!;\n const context = lastThis!;\n lastArgs = undefined;\n lastThis = undefined;\n hasInvoked = true;\n lastInvokeTime = time;\n result = fn.apply(context, args);\n return result as ReturnType<F>;\n };\n\n const expire = (): void => {\n timer = undefined;\n if (trailing && lastArgs) {\n invoke(Date.now());\n } else {\n lastArgs = undefined;\n lastThis = undefined;\n }\n };\n\n const throttled = function (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F> | undefined {\n const now = Date.now();\n lastArgs = args;\n lastThis = this;\n\n if (!hasInvoked) {\n if (leading) {\n return invoke(now);\n }\n hasInvoked = true;\n lastInvokeTime = now;\n }\n\n const remaining = delay - (now - lastInvokeTime);\n if (remaining <= 0 || remaining > delay) {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n return invoke(now);\n }\n\n if (timer === undefined && trailing) {\n timer = setTimeout(expire, remaining);\n }\n\n return result;\n } as DeferredFunction<F>;\n\n throttled.cancel = (): void => {\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n timer = undefined;\n lastArgs = undefined;\n lastThis = undefined;\n lastInvokeTime = 0;\n hasInvoked = false;\n };\n\n throttled.flush = (): ReturnType<F> | undefined => {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n if (lastArgs && trailing) {\n return invoke(Date.now());\n }\n }\n return result;\n };\n\n throttled.isPending = (): boolean => timer !== undefined;\n\n return throttled;\n}\n\n/**\n * Create a function with one or more arguments already provided.\n * Later arguments are appended after the preset arguments.\n *\n * @example\n * ```ts\n * const sum = (a: number, b: number, c: number) => a + b + c;\n * const addFive = partial(sum, 2, 3);\n *\n * addFive(4); // 9\n * ```\n */\nexport function partial<F extends AnyFunction>(\n fn: F,\n ...presetArgs: unknown[]\n): (...laterArgs: unknown[]) => ReturnType<F> {\n return function (this: ThisParameterType<F>, ...laterArgs: unknown[]): ReturnType<F> {\n return fn.apply(this, [...presetArgs, ...laterArgs] as Parameters<F>);\n };\n}\n\n/**\n * Compose unary functions from left to right.\n * The first function receives the original arguments, and each next function receives the previous result.\n *\n * @example\n * ```ts\n * const transform = pipe(\n * (value: number) => value + 1,\n * (value: number) => value * 2,\n * );\n *\n * transform(2); // 6\n * ```\n */\nexport function pipe<A, B>(ab: Unary<A, B>): Unary<A, B>;\nexport function pipe<A, B, C>(ab: Unary<A, B>, bc: Unary<B, C>): Unary<A, C>;\nexport function pipe<A, B, C, D>(ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>): Unary<A, D>;\nexport function pipe<A, B, C, D, E>(ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>): Unary<A, E>;\nexport function pipe(...fns: AnyFunction[]): AnyFunction {\n return createFlow(fns);\n}\n\n/**\n * Compose unary functions from right to left.\n * The rightmost function receives the original arguments, and each function to its left receives the previous result.\n *\n * @example\n * ```ts\n * const transform = compose(\n * (value: number) => value + 1,\n * (value: number) => value * 2,\n * );\n *\n * transform(2); // 5\n * ```\n */\nexport function compose<A, B>(ab: Unary<A, B>): Unary<A, B>;\nexport function compose<A, B, C>(bc: Unary<B, C>, ab: Unary<A, B>): Unary<A, C>;\nexport function compose<A, B, C, D>(cd: Unary<C, D>, bc: Unary<B, C>, ab: Unary<A, B>): Unary<A, D>;\nexport function compose<A, B, C, D, E>(de: Unary<D, E>, cd: Unary<C, D>, bc: Unary<B, C>, ab: Unary<A, B>): Unary<A, E>;\nexport function compose(...fns: AnyFunction[]): AnyFunction {\n return createFlow(fns.slice().reverse());\n}\n\nfunction createFlow(fns: AnyFunction[]): AnyFunction {\n if (fns.length === 0) return identity;\n\n return function (this: any, ...args: any[]): unknown {\n let result = fns[0].apply(this, args);\n for (let i = 1; i < fns.length; i++) {\n result = fns[i].call(this, result);\n }\n return result;\n };\n}\n\nfunction normalizeDelay(wait: number): number {\n return Number.isFinite(wait) ? Math.max(0, wait) : 0;\n}"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export { default as Type } from './type.js';
|
|
3
3
|
export { default as TypeCode } from './type-code.js';
|
|
4
|
+
export { default as Uuid } from './uuid.js';
|
|
4
5
|
export * from './utilities.js';
|
|
5
6
|
export * from './functions.js';
|
|
6
7
|
export * from './string.js';
|
|
@@ -26,7 +27,7 @@ export { default as Range } from './range.js';
|
|
|
26
27
|
export { default as draft } from './draft.js';
|
|
27
28
|
export { default as CleanURLSearchParams } from './clean-url-search-params.js';
|
|
28
29
|
/** @deprecated */
|
|
29
|
-
export { ajaxSubmit,
|
|
30
|
+
export { ajaxSubmit, submitForm, formToObject } from './browser/index.js';
|
|
30
31
|
/** @deprecated */
|
|
31
32
|
export * from './array.js';
|
|
32
33
|
/** @deprecated */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAG1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAGvE,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAGhE,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAC,OAAO,IAAI,oBAAoB,EAAC,MAAM,8BAA8B,CAAC;AAC7E,mBAAmB;AACnB,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAKxE,mBAAmB;AACnB,cAAc,YAAY,CAAC;AAC3B,mBAAmB;AACnB,cAAc,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
export * from './types.js';
|
|
4
4
|
export { default as Type } from './type.js';
|
|
5
5
|
export { default as TypeCode } from './type-code.js';
|
|
6
|
+
export { default as Uuid } from './uuid.js';
|
|
6
7
|
// ─── Utilities ───────────────────────────────────────
|
|
7
8
|
export * from './utilities.js';
|
|
8
9
|
export * from './functions.js';
|
|
@@ -31,7 +32,7 @@ export { default as draft } from './draft.js';
|
|
|
31
32
|
// ─── Web ─────────────────────────────────────────────
|
|
32
33
|
export { default as CleanURLSearchParams } from './clean-url-search-params.js';
|
|
33
34
|
/** @deprecated */
|
|
34
|
-
export { ajaxSubmit,
|
|
35
|
+
export { ajaxSubmit, submitForm, formToObject } from './browser/index.js';
|
|
35
36
|
// ─── Deprecated ──────────────────────────────────────
|
|
36
37
|
/** @deprecated */
|
|
37
38
|
export * from './array.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AAEf,wDAAwD;AACxD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AAEf,wDAAwD;AACxD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAE1C,wDAAwD;AACxD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAEvE,uDAAuD;AACvD,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAE5C,uDAAuD;AACvD,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAG/D,wDAAwD;AACxD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAE5C,qDAAqD;AACrD,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,YAAY,CAAC;AAE5C,wDAAwD;AACxD,OAAO,EAAC,OAAO,IAAI,oBAAoB,EAAC,MAAM,8BAA8B,CAAC;AAC7E,mBAAmB;AACnB,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAIxE,wDAAwD;AACxD,mBAAmB;AACnB,cAAc,YAAY,CAAC;AAC3B,mBAAmB;AACnB,cAAc,wBAAwB,CAAC","sourcesContent":["// src/index.ts\n\n// ─── Types ───────────────────────────────────────────\nexport * from './types.js';\nexport {default as Type} from './type.js';\nexport {default as TypeCode} from './type-code.js';\nexport {default as Uuid} from './uuid.js';\n\n// ─── Utilities ───────────────────────────────────────\nexport * from './utilities.js';\nexport * from './functions.js';\nexport * from './string.js';\nexport * from './math.js';\nexport * from './parse.js';\nexport {default as CancellablePromise} from \"./cancellable-promise.js\";\n\n// ─── Data Structures ────────────────────────────────\nexport {default as KeyValuePair} from './key-value-pair.js';\nexport {default as Order} from './order.js';\n\n// ─── Async & Timing ─────────────────────────────────\nexport {default as Timer} from './timer.js';\nexport {default as TimeSpan} from './timespan.js';\nexport {default as Stopwatch} from './stopwatch.js';\nexport type {Result} from './result.js';\nexport {TimeTrigger, CountTrigger} from './triggers.js';\nexport {default as AsyncPoolExecutor} from './async-pool-executor.js';\nexport {default as Debouncer} from './debouncer.js';\nexport type {DebouncedTask, DebouncerOptions} from './debouncer.js';\nexport {default as KeyedDebouncer} from './keyed-debouncer.js';\nexport type {KeyedDebouncerOptions} from './keyed-debouncer.js';\n\n// ─── Patterns ────────────────────────────────────────\nexport {default as Lazy} from './lazy.js';\nexport {default as from} from './collections/from.js';\nexport {EventBus, Event} from './event-bus.js';\nexport {default as Range} from './range.js';\n\n// ─── Draft ────────────────────────────────────────\nexport {default as draft} from './draft.js';\n\n// ─── Web ─────────────────────────────────────────────\nexport {default as CleanURLSearchParams} from './clean-url-search-params.js';\n/** @deprecated */\nexport {ajaxSubmit, submitForm, formToObject} from './browser/index.js';\n\n\n\n// ─── Deprecated ──────────────────────────────────────\n/** @deprecated */\nexport * from './array.js';\n/** @deprecated */\nexport * from './collections/index.js';"]}
|
package/dist/math.d.ts
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Linearly interpolates a
|
|
2
|
+
* Linearly interpolates between two numbers: `a` for `t` 0, `b` for `t` 1, and beyond them outside that range.
|
|
3
3
|
*
|
|
4
|
-
* @param {number}
|
|
4
|
+
* @param {number} a - The value at `t` 0.
|
|
5
|
+
* @param {number} b - The value at `t` 1.
|
|
6
|
+
* @param {number} t - The interpolation factor.
|
|
7
|
+
* @return {number} - The interpolated value.
|
|
8
|
+
*/
|
|
9
|
+
export declare function lerp(a: number, b: number, t: number): number;
|
|
10
|
+
/**
|
|
11
|
+
* Maps a number from one range to another, keeping its proportion (`remap(5, 0, 10, 0, 100)` is 50).
|
|
12
|
+
*
|
|
13
|
+
* @param {number} n - The number to map.
|
|
5
14
|
* @param {number} inMin - The minimum value of the input range.
|
|
6
15
|
* @param {number} inMax - The maximum value of the input range.
|
|
7
16
|
* @param {number} outMin - The minimum value of the output range.
|
|
8
17
|
* @param {number} outMax - The maximum value of the output range.
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
18
|
+
* @return {number} - The number in the output range.
|
|
19
|
+
* @throws {Error} When the input range is empty (`inMin === inMax`).
|
|
11
20
|
*/
|
|
12
|
-
export declare function
|
|
21
|
+
export declare function remap(n: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
13
22
|
/**
|
|
14
23
|
* Clamps a number between a minimum and maximum value.
|
|
15
24
|
*
|
package/dist/math.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrG;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjE"}
|
package/dist/math.js
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Linearly interpolates a
|
|
2
|
+
* Linearly interpolates between two numbers: `a` for `t` 0, `b` for `t` 1, and beyond them outside that range.
|
|
3
3
|
*
|
|
4
|
-
* @param {number}
|
|
4
|
+
* @param {number} a - The value at `t` 0.
|
|
5
|
+
* @param {number} b - The value at `t` 1.
|
|
6
|
+
* @param {number} t - The interpolation factor.
|
|
7
|
+
* @return {number} - The interpolated value.
|
|
8
|
+
*/
|
|
9
|
+
export function lerp(a, b, t) {
|
|
10
|
+
return a + (b - a) * t;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Maps a number from one range to another, keeping its proportion (`remap(5, 0, 10, 0, 100)` is 50).
|
|
14
|
+
*
|
|
15
|
+
* @param {number} n - The number to map.
|
|
5
16
|
* @param {number} inMin - The minimum value of the input range.
|
|
6
17
|
* @param {number} inMax - The maximum value of the input range.
|
|
7
18
|
* @param {number} outMin - The minimum value of the output range.
|
|
8
19
|
* @param {number} outMax - The maximum value of the output range.
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
20
|
+
* @return {number} - The number in the output range.
|
|
21
|
+
* @throws {Error} When the input range is empty (`inMin === inMax`).
|
|
11
22
|
*/
|
|
12
|
-
export function
|
|
23
|
+
export function remap(n, inMin, inMax, outMin, outMax) {
|
|
13
24
|
if (inMax === inMin) {
|
|
14
25
|
throw new Error("Input range cannot be zero");
|
|
15
26
|
}
|
package/dist/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAChD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,KAAa,EAAE,KAAa,EAAE,MAAc,EAAE,MAAc;IACzF,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAA;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IACrD,IAAI,CAAC,IAAI,GAAG;QACR,OAAO,GAAG,CAAC;IACf,IAAI,CAAC,IAAI,GAAG;QACR,OAAO,GAAG,CAAC;IACf,OAAO,CAAC,CAAA;AACZ,CAAC","sourcesContent":["/**\n * Linearly interpolates between two numbers: `a` for `t` 0, `b` for `t` 1, and beyond them outside that range.\n *\n * @param {number} a - The value at `t` 0.\n * @param {number} b - The value at `t` 1.\n * @param {number} t - The interpolation factor.\n * @return {number} - The interpolated value.\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/**\n * Maps a number from one range to another, keeping its proportion (`remap(5, 0, 10, 0, 100)` is 50).\n *\n * @param {number} n - The number to map.\n * @param {number} inMin - The minimum value of the input range.\n * @param {number} inMax - The maximum value of the input range.\n * @param {number} outMin - The minimum value of the output range.\n * @param {number} outMax - The maximum value of the output range.\n * @return {number} - The number in the output range.\n * @throws {Error} When the input range is empty (`inMin === inMax`).\n */\nexport function remap(n: number, inMin: number, inMax: number, outMin: number, outMax: number): number {\n if (inMax === inMin) {\n throw new Error(\"Input range cannot be zero\");\n }\n return outMin + (outMax - outMin) * ((n - inMin) / (inMax - inMin))\n}\n\n/**\n * Clamps a number between a minimum and maximum value.\n *\n * @param {number} n - The value to be clamped.\n * @param {number} min - The minimum value.\n * @param {number} max - The maximum value.\n * @return {number} The clamped value.\n */\nexport function clamp(n: number, min: number, max: number): number {\n if (n <= min)\n return min;\n if (n >= max)\n return max;\n return n\n}\n"]}
|
package/dist/string.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export declare function ensurePrefix(str: string, prefix: string): string;
|
|
|
14
14
|
* @return {string} - The modified string with the suffix added if it was not already present.
|
|
15
15
|
*/
|
|
16
16
|
export declare function ensureSuffix(str: string, suffix: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Null for an empty string, as `Str::nullIfEmpty()` of develia/commons for PHP; any other string as it is. Compose it
|
|
19
|
+
* with `trim()` to turn a blank string into null: `nullIfEmpty(value.trim())`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function nullIfEmpty(str: string | null | undefined): string | null;
|
|
17
22
|
/**
|
|
18
23
|
* Normalizes Unicode whitespaces into single ASCII spaces and removes leading
|
|
19
24
|
* and trailing whitespace.
|
package/dist/string.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIhE;AAGD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIhE;AAGD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAgB/D;AA0BD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
package/dist/string.js
CHANGED
|
@@ -22,14 +22,19 @@ export function ensureSuffix(str, suffix) {
|
|
|
22
22
|
return str + suffix;
|
|
23
23
|
return str;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Null for an empty string, as `Str::nullIfEmpty()` of develia/commons for PHP; any other string as it is. Compose it
|
|
27
|
+
* with `trim()` to turn a blank string into null: `nullIfEmpty(value.trim())`.
|
|
28
|
+
*/
|
|
29
|
+
export function nullIfEmpty(str) {
|
|
30
|
+
return str === undefined || str === null || str === '' ? null : str;
|
|
31
|
+
}
|
|
25
32
|
/**
|
|
26
33
|
* Normalizes Unicode whitespaces into single ASCII spaces and removes leading
|
|
27
34
|
* and trailing whitespace.
|
|
28
35
|
*/
|
|
29
36
|
export function normalizeWhitespaces(str) {
|
|
30
|
-
return str.
|
|
31
|
-
.replace(/[\s\u200B\uFEFF]+/gu, ' ')
|
|
32
|
-
.trim();
|
|
37
|
+
return str.replace(/[\s\u200B\uFEFF]+/gu, ' ').trim();
|
|
33
38
|
}
|
|
34
39
|
/**
|
|
35
40
|
* Removes Unicode diacritics while preserving the original letter casing.
|
package/dist/string.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAc;IACpD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,OAAO,MAAM,GAAG,GAAG,CAAA;IACvB,OAAO,GAAG,CAAA;AACd,CAAC;AAGD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAc;IACpD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,OAAO,GAAG,GAAG,MAAM,CAAA;IACvB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"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","sourcesContent":["\n/**\n * Ensures that a given string has a specific prefix.\n *\n * @param {string} str - The string to ensure the prefix on.\n * @param {string} prefix - The prefix to ensure on the string.\n * @return {string} - The resulting string with the ensured prefix.\n */\nexport function ensurePrefix(str: string, prefix: string): string {\n if (!str.startsWith(prefix))\n return prefix + str\n return str\n}\n\n\n/**\n * Ensures that a string ends with a specified suffix.\n *\n * @param {string} str - The original string.\n * @param {string} suffix - The suffix to ensure.\n * @return {string} - The modified string with the suffix added if it was not already present.\n */\nexport function ensureSuffix(str: string, suffix: string): string {\n if (!str.endsWith(suffix))\n return str + suffix\n return str\n}\n\n/**\n * Null for an empty string, as `Str::nullIfEmpty()` of develia/commons for PHP; any other string as it is. Compose it\n * with `trim()` to turn a blank string into null: `nullIfEmpty(value.trim())`.\n */\nexport function nullIfEmpty(str: string | null | undefined): string | null {\n return str === undefined || str === null || str === '' ? null : str;\n}\n\n/**\n * Normalizes Unicode whitespaces into single ASCII spaces and removes leading\n * and trailing whitespace.\n */\nexport function normalizeWhitespaces(str: string): string {\n return str.replace(/[\\s\\u200B\\uFEFF]+/gu, ' ').trim();\n}\n\n/**\n * Removes Unicode diacritics while preserving the original letter casing.\n *\n * @example removeDiacritics('áÁñÑ') // 'aAnN'\n */\nexport function removeDiacritics(str: string): string {\n return str\n .normalize('NFD')\n .replace(/\\p{M}+/gu, '')\n}\n\n/**\n * Formats a string using a template and provided arguments.\n *\n * @param {string} template - The template string containing placeholders.\n * @param {any[]} args - Optional arguments to replace the placeholders in the template.\n * @return {string} The formatted string.\n */\nexport function format(template: string, ...args: any[]): string {\n\n let regex: RegExp;\n const hasNamedPlaceholders = /{(?!\\d+})[^{}]+}/.test(template);\n if (args.length === 1 && args[0] !== null && typeof args[0] === 'object' && hasNamedPlaceholders) {\n args = args[0];\n regex = /{(.+?)}/g;\n } else {\n regex = /{(\\d+?)}/g;\n }\n\n return template.replace(regex, (match, key) => {\n return Object.prototype.hasOwnProperty.call(args, key) && typeof args[key] !== 'undefined'\n ? args[key]\n : \"\";\n });\n}\n\n/**\n * Splits a string into its constituent words, regardless of the original case\n * style (camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE,\n * space-separated, etc.).\n *\n * @param {string} str - The string to split into words.\n * @return {string[]} - The list of lowercase words extracted from the input.\n */\nfunction toWords(str: string): string[] {\n if (!str) return [];\n\n return str\n // Insert a space between a lowercase/digit and an uppercase letter (camelCase -> camel Case)\n .replace(/([\\p{Ll}\\p{N}])(\\p{Lu})/gu, '$1 $2')\n // Insert a space between consecutive uppercase letters followed by a lowercase letter (XMLParser -> XML Parser)\n .replace(/(\\p{Lu}+)(\\p{Lu}\\p{Ll})/gu, '$1 $2')\n // Replace any non-alphanumeric character with a space\n .replace(/[^\\p{L}\\p{N}]+/gu, ' ')\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter(Boolean);\n}\n\n/**\n * Converts a string to snake_case.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to snake_case.\n */\nexport function toSnakeCase(str: string): string {\n return toWords(str).join('_');\n}\n\n/**\n * Converts a string to kebab-case.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to kebab-case.\n */\nexport function toKebabCase(str: string): string {\n return toWords(str).join('-');\n}\n\n/**\n * Converts a string to camelCase.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to camelCase.\n */\nexport function toCamelCase(str: string): string {\n const words = toWords(str);\n if (words.length === 0) return '';\n return words\n .map((word, i) => i === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Converts a string to PascalCase.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to PascalCase.\n */\nexport function toPascalCase(str: string): string {\n return toWords(str)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Converts a string to CONSTANT_CASE (a.k.a. SCREAMING_SNAKE_CASE).\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to CONSTANT_CASE.\n */\nexport function toConstantCase(str: string): string {\n return toWords(str).join('_').toUpperCase();\n}\n"]}
|
package/dist/timespan.d.ts
CHANGED
|
@@ -8,27 +8,27 @@ export default class TimeSpan {
|
|
|
8
8
|
* Gets the time interval in seconds.
|
|
9
9
|
* @returns {number} The duration in seconds.
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
getTotalSeconds(): number;
|
|
12
12
|
/**
|
|
13
13
|
* Gets the time interval in minutes.
|
|
14
14
|
* @returns {number} The duration in minutes.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
getTotalMinutes(): number;
|
|
17
17
|
/**
|
|
18
18
|
* Gets the time interval in hours.
|
|
19
19
|
* @returns {number} The duration in hours.
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
getTotalHours(): number;
|
|
22
22
|
/**
|
|
23
23
|
* Gets the time interval in days.
|
|
24
24
|
* @returns {number} The duration in days.
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
getTotalDays(): number;
|
|
27
27
|
/**
|
|
28
28
|
* Gets the time interval in weeks.
|
|
29
29
|
* @returns {number} The duration in weeks.
|
|
30
30
|
*/
|
|
31
|
-
|
|
31
|
+
getTotalWeeks(): number;
|
|
32
32
|
/**
|
|
33
33
|
* Creates a TimeSpan from a specified number of milliseconds.
|
|
34
34
|
* @param {number} milliseconds - The number of milliseconds.
|
package/dist/timespan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timespan.d.ts","sourceRoot":"","sources":["../src/timespan.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAClB,YAAY,EAAE,MAAM,CAAC;IAE5B,OAAO;IAKP;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"timespan.d.ts","sourceRoot":"","sources":["../src/timespan.ts"],"names":[],"mappings":"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"}
|
package/dist/timespan.js
CHANGED
|
@@ -9,35 +9,35 @@ class TimeSpan {
|
|
|
9
9
|
* Gets the time interval in seconds.
|
|
10
10
|
* @returns {number} The duration in seconds.
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
getTotalSeconds() {
|
|
13
13
|
return this.milliseconds / 1000;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Gets the time interval in minutes.
|
|
17
17
|
* @returns {number} The duration in minutes.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
getTotalMinutes() {
|
|
20
20
|
return this.milliseconds / (1000 * 60);
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Gets the time interval in hours.
|
|
24
24
|
* @returns {number} The duration in hours.
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
getTotalHours() {
|
|
27
27
|
return this.milliseconds / (1000 * 60 * 60);
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Gets the time interval in days.
|
|
31
31
|
* @returns {number} The duration in days.
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
getTotalDays() {
|
|
34
34
|
return this.milliseconds / (1000 * 60 * 60 * 24);
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Gets the time interval in weeks.
|
|
38
38
|
* @returns {number} The duration in weeks.
|
|
39
39
|
*/
|
|
40
|
-
|
|
40
|
+
getTotalWeeks() {
|
|
41
41
|
return this.milliseconds / (1000 * 60 * 60 * 24 * 7);
|
|
42
42
|
}
|
|
43
43
|
/**
|