@develia/commons 0.4.19 → 0.4.21
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/cjs/browser/form-utilities.js +1 -1
- package/dist/cjs/browser/form-utilities.js.map +1 -1
- package/dist/cjs/collections/default-map.js +2 -2
- package/dist/cjs/collections/default-map.js.map +1 -1
- package/dist/cjs/collections/default-weak-map.js +2 -2
- package/dist/cjs/collections/default-weak-map.js.map +1 -1
- package/dist/cjs/collections/from.js +4 -4
- package/dist/cjs/collections/from.js.map +1 -1
- package/dist/cjs/string.js +21 -0
- package/dist/cjs/string.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utilities.js +14 -5
- package/dist/cjs/utilities.js.map +1 -1
- package/dist/esm/browser/form-utilities.js +1 -1
- package/dist/esm/browser/form-utilities.js.map +1 -1
- package/dist/esm/collections/default-map.js +2 -2
- package/dist/esm/collections/default-map.js.map +1 -1
- package/dist/esm/collections/default-weak-map.js +2 -2
- package/dist/esm/collections/default-weak-map.js.map +1 -1
- package/dist/esm/collections/from.js +4 -4
- package/dist/esm/collections/from.js.map +1 -1
- package/dist/esm/string.js +19 -0
- package/dist/esm/string.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utilities.js +14 -5
- package/dist/esm/utilities.js.map +1 -1
- package/dist/types/browser/form-utilities.d.ts +2 -2
- package/dist/types/browser/form-utilities.d.ts.map +1 -1
- package/dist/types/collections/default-map.d.ts +3 -3
- package/dist/types/collections/default-map.d.ts.map +1 -1
- package/dist/types/collections/default-weak-map.d.ts +3 -3
- package/dist/types/collections/default-weak-map.d.ts.map +1 -1
- package/dist/types/collections/from.d.ts +5 -5
- package/dist/types/collections/from.d.ts.map +1 -1
- package/dist/types/string.d.ts +11 -0
- package/dist/types/string.d.ts.map +1 -1
- package/dist/types/types.d.ts +0 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utilities.d.ts.map +1 -1
- package/dist/web/browser/form-utilities.js +1 -2
- package/dist/web/browser/form-utilities.js.map +1 -1
- package/dist/web/collections/default-map.js +2 -2
- package/dist/web/collections/default-map.js.map +1 -1
- package/dist/web/collections/default-weak-map.js +2 -2
- package/dist/web/collections/default-weak-map.js.map +1 -1
- package/dist/web/collections/from.js +4 -4
- package/dist/web/collections/from.js.map +1 -1
- package/dist/web/string.js +19 -0
- package/dist/web/string.js.map +1 -1
- package/dist/web/types.js.map +1 -1
- package/dist/web/utilities.js +14 -5
- package/dist/web/utilities.js.map +1 -1
- package/package.json +1 -1
- package/src/browser/form-utilities.ts +3 -3
- package/src/collections/default-map.ts +3 -3
- package/src/collections/default-weak-map.ts +3 -3
- package/src/collections/from.ts +5 -5
- package/src/string.ts +22 -1
- package/src/types.ts +1 -3
- package/src/utilities.ts +14 -5
|
@@ -139,7 +139,7 @@ function objectToFormData(data) {
|
|
|
139
139
|
let formData = new FormData();
|
|
140
140
|
return _objectToFormData(data, formData);
|
|
141
141
|
}
|
|
142
|
-
function ajaxSubmission(selectorOrElement, onSuccess
|
|
142
|
+
function ajaxSubmission(selectorOrElement, onSuccess, onFailure) {
|
|
143
143
|
const forms = typeof selectorOrElement === 'string'
|
|
144
144
|
? Array.from(document.querySelectorAll(selectorOrElement))
|
|
145
145
|
.filter(el => el instanceof HTMLFormElement)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-utilities.js","sourceRoot":"","sources":["../../../src/browser/form-utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Consumer, type Optional} from \"../types.js\";\n\n\n/**\n * Submits a form via AJAX and returns a Promise that resolves to the Response object.\n *\n * @param {HTMLFormElement | string} selectorOrElement - The form element or selector.\n * @return {Promise<Response>} A Promise that resolves to the Response object.\n * @throws {Error} If the element is invalid.\n */\nexport async function ajaxSubmit(selectorOrElement: HTMLFormElement | string): Promise<Response> {\n\n const form = typeof selectorOrElement === 'string'\n ? document.querySelector(selectorOrElement)\n : selectorOrElement;\n\n if (!(form instanceof HTMLFormElement)) {\n throw new Error(\"Invalid element.\");\n }\n\n\n const formData = new FormData(form);\n const method = form.getAttribute('method') as string ?? form.method;\n const action = form.getAttribute('action') as string ?? form.action;\n\n return await fetch(action, {\n method: method,\n body: formData,\n });\n}\n\n\nexport function submitForm(\n url: string,\n data: Record<string, any>,\n method: 'POST' | 'GET' = 'POST',\n target?: '_blank' | '_self' | '_parent' | '_top'\n): void {\n\n const form = document.createElement('form');\n form.method = method.toUpperCase();\n form.action = url;\n form.style.display = 'none';\n\n if (target) {\n form.target = target;\n }\n\n /**\n * Recursively appends inputs to the form, supporting nested keys and arrays.\n * @param keyPrefix - Key path, e.g., 'user[name]' or 'tags[]'\n * @param value - The value to append (can be nested)\n */\n const appendInput = (key: string, value: any) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = key;\n input.value = String(value);\n form.appendChild(input);\n };\n\n const appendInputs = (keyPrefix: string, value: any) => {\n if (Array.isArray(value)) {\n for (const val of value) {\n appendInputs(`${keyPrefix}[]`, val);\n }\n } else if (value instanceof Date) {\n appendInput(keyPrefix, value.toISOString());\n } else if (typeof value === 'object' && value !== null) {\n for (const subKey in value) {\n if (Object.prototype.hasOwnProperty.call(value, subKey)) {\n appendInputs(`${keyPrefix}[${subKey}]`, value[subKey]);\n }\n }\n } else {\n appendInput(keyPrefix, value);\n }\n };\n\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n appendInputs(key, data[key]);\n }\n }\n\n document.body.appendChild(form);\n form.submit();\n}\n\nexport function formToObject(form: HTMLFormElement): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n const fd = new FormData(form);\n const out: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n\n for (const [key, value] of fd.entries()) {\n if (Object.prototype.hasOwnProperty.call(out, key)) {\n const current = out[key];\n if (Array.isArray(current)) {\n current.push(value);\n } else {\n out[key] = [current, value];\n }\n } else {\n out[key] = value;\n }\n }\n\n return out;\n}\n\n/**\n * Converts an object to `FormData` format recursively.\n *\n * @param {Record<string, any>} data - The object data to convert.\n * @param {FormData} formData - The `FormData` instance to append data to.\n * @param {string} parentKey - The parent key to append to child keys in the `FormData`.\n * @returns {FormData} - The `FormData` instance with the converted data.\n */\nfunction _appendFormDataValue(formData: FormData, key: string, value: any): void {\n if (value instanceof Date) {\n formData.append(key, value.toISOString());\n } else if (value instanceof File) {\n formData.append(key, value);\n } else if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n _appendFormDataValue(formData, `${key}[${index}]`, value[index]);\n }\n } else if (value !== null && typeof value === 'object') {\n _objectToFormData(value, formData, key);\n } else {\n formData.append(key, value);\n }\n}\n\nfunction _objectToFormData(data: Record<string, any>, formData: FormData, parentKey: string = ''): FormData {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n _appendFormDataValue(formData, parentKey ? `${parentKey}[${key}]` : key, data[key]);\n }\n }\n\n return formData;\n}\n\n/**\n * Converts an object into FormData.\n *\n * @param {Record<string, any>} data - The object to be converted into FormData.\n * @return {FormData} - The FormData object representing the converted data.\n */\nexport function objectToFormData(data: Record<string, any>): FormData {\n let formData = new FormData();\n return _objectToFormData(data, formData);\n}\n\nexport function ajaxSubmission(\n selectorOrElement: HTMLFormElement | string,\n onSuccess: Optional<Consumer<any>> = undefined,\n onFailure: Optional<Consumer<any>> = undefined\n): void {\n\n const forms: HTMLFormElement[] = typeof selectorOrElement === 'string'\n ? Array.from(document.querySelectorAll(selectorOrElement))\n .filter(el => el instanceof HTMLFormElement) as HTMLFormElement[]\n : [selectorOrElement];\n\n for (const form of forms) {\n form.addEventListener('submit', async (event) => {\n event.preventDefault();\n\n try {\n let result = await ajaxSubmit(event.currentTarget as HTMLFormElement);\n if (onSuccess)\n onSuccess(result);\n } catch (e) {\n if (onFailure)\n onFailure(e);\n }\n\n\n });\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"form-utilities.js","sourceRoot":"","sources":["../../../src/browser/form-utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Consumer} from \"../types.js\";\n\n\n/**\n * Submits a form via AJAX and returns a Promise that resolves to the Response object.\n *\n * @param {HTMLFormElement | string} selectorOrElement - The form element or selector.\n * @return {Promise<Response>} A Promise that resolves to the Response object.\n * @throws {Error} If the element is invalid.\n */\nexport async function ajaxSubmit(selectorOrElement: HTMLFormElement | string): Promise<Response> {\n\n const form = typeof selectorOrElement === 'string'\n ? document.querySelector(selectorOrElement)\n : selectorOrElement;\n\n if (!(form instanceof HTMLFormElement)) {\n throw new Error(\"Invalid element.\");\n }\n\n\n const formData = new FormData(form);\n const method = form.getAttribute('method') as string ?? form.method;\n const action = form.getAttribute('action') as string ?? form.action;\n\n return await fetch(action, {\n method: method,\n body: formData,\n });\n}\n\n\nexport function submitForm(\n url: string,\n data: Record<string, any>,\n method: 'POST' | 'GET' = 'POST',\n target?: '_blank' | '_self' | '_parent' | '_top'\n): void {\n\n const form = document.createElement('form');\n form.method = method.toUpperCase();\n form.action = url;\n form.style.display = 'none';\n\n if (target) {\n form.target = target;\n }\n\n /**\n * Recursively appends inputs to the form, supporting nested keys and arrays.\n * @param keyPrefix - Key path, e.g., 'user[name]' or 'tags[]'\n * @param value - The value to append (can be nested)\n */\n const appendInput = (key: string, value: any) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = key;\n input.value = String(value);\n form.appendChild(input);\n };\n\n const appendInputs = (keyPrefix: string, value: any) => {\n if (Array.isArray(value)) {\n for (const val of value) {\n appendInputs(`${keyPrefix}[]`, val);\n }\n } else if (value instanceof Date) {\n appendInput(keyPrefix, value.toISOString());\n } else if (typeof value === 'object' && value !== null) {\n for (const subKey in value) {\n if (Object.prototype.hasOwnProperty.call(value, subKey)) {\n appendInputs(`${keyPrefix}[${subKey}]`, value[subKey]);\n }\n }\n } else {\n appendInput(keyPrefix, value);\n }\n };\n\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n appendInputs(key, data[key]);\n }\n }\n\n document.body.appendChild(form);\n form.submit();\n}\n\nexport function formToObject(form: HTMLFormElement): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n const fd = new FormData(form);\n const out: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n\n for (const [key, value] of fd.entries()) {\n if (Object.prototype.hasOwnProperty.call(out, key)) {\n const current = out[key];\n if (Array.isArray(current)) {\n current.push(value);\n } else {\n out[key] = [current, value];\n }\n } else {\n out[key] = value;\n }\n }\n\n return out;\n}\n\n/**\n * Converts an object to `FormData` format recursively.\n *\n * @param {Record<string, any>} data - The object data to convert.\n * @param {FormData} formData - The `FormData` instance to append data to.\n * @param {string} parentKey - The parent key to append to child keys in the `FormData`.\n * @returns {FormData} - The `FormData` instance with the converted data.\n */\nfunction _appendFormDataValue(formData: FormData, key: string, value: any): void {\n if (value instanceof Date) {\n formData.append(key, value.toISOString());\n } else if (value instanceof File) {\n formData.append(key, value);\n } else if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n _appendFormDataValue(formData, `${key}[${index}]`, value[index]);\n }\n } else if (value !== null && typeof value === 'object') {\n _objectToFormData(value, formData, key);\n } else {\n formData.append(key, value);\n }\n}\n\nfunction _objectToFormData(data: Record<string, any>, formData: FormData, parentKey: string = ''): FormData {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n _appendFormDataValue(formData, parentKey ? `${parentKey}[${key}]` : key, data[key]);\n }\n }\n\n return formData;\n}\n\n/**\n * Converts an object into FormData.\n *\n * @param {Record<string, any>} data - The object to be converted into FormData.\n * @return {FormData} - The FormData object representing the converted data.\n */\nexport function objectToFormData(data: Record<string, any>): FormData {\n let formData = new FormData();\n return _objectToFormData(data, formData);\n}\n\nexport function ajaxSubmission(\n selectorOrElement: HTMLFormElement | string,\n onSuccess?: Consumer<any>,\n onFailure?: Consumer<any>\n): void {\n\n const forms: HTMLFormElement[] = typeof selectorOrElement === 'string'\n ? Array.from(document.querySelectorAll(selectorOrElement))\n .filter(el => el instanceof HTMLFormElement) as HTMLFormElement[]\n : [selectorOrElement];\n\n for (const form of forms) {\n form.addEventListener('submit', async (event) => {\n event.preventDefault();\n\n try {\n let result = await ajaxSubmit(event.currentTarget as HTMLFormElement);\n if (onSuccess)\n onSuccess(result);\n } catch (e) {\n if (onFailure)\n onFailure(e);\n }\n\n\n });\n }\n}"]}
|
|
@@ -15,9 +15,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
class DefaultMap extends Map {
|
|
16
16
|
/**
|
|
17
17
|
* @param {UnaryFunction<K, V>} factoryMethod - Function that produces the default value for a key.
|
|
18
|
-
* @param {
|
|
18
|
+
* @param {Iterable<[K, V]>} [entries] - Initial entries.
|
|
19
19
|
*/
|
|
20
|
-
constructor(factoryMethod, entries
|
|
20
|
+
constructor(factoryMethod, entries) {
|
|
21
21
|
super(entries);
|
|
22
22
|
if (typeof factoryMethod !== "function") {
|
|
23
23
|
throw new TypeError("DefaultMap needs a factory (key => defaultValue).");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-map.js","sourceRoot":"","sources":["../../../src/collections/default-map.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;GAWG;AACH,MAAqB,UAAiB,SAAQ,GAAS;IAGnD;;;OAGG;IACH,YAAY,aAAkC,EAAE,
|
|
1
|
+
{"version":3,"file":"default-map.js","sourceRoot":"","sources":["../../../src/collections/default-map.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;GAWG;AACH,MAAqB,UAAiB,SAAQ,GAAS;IAGnD;;;OAGG;IACH,YAAY,aAAkC,EAAE,OAA0B;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACM,GAAG,CAAC,GAAM;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,iFAAiF;QACjF,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC3B,CAAC;CAGJ;AAjCD,6BAiCC","sourcesContent":["import type {UnaryFunction} from \"../types.js\";\n\n/**\n * DefaultMap<K, V>\n * A Map that automatically creates and saves a default value\n * when accessing a non-existent key with get(key).\n *\n * @template K - The type of the keys.\n * @template V - The type of the values.\n * @example\n * const m = new DefaultMap<string, number>(() => 0);\n * m.get(\"a\"); // 0\n * m.set(\"a\", m.get(\"a\") + 1); // 1\n */\nexport default class DefaultMap<K, V> extends Map<K, V> {\n private readonly _factoryMethod: (key: K) => V;\n\n /**\n * @param {UnaryFunction<K, V>} factoryMethod - Function that produces the default value for a key.\n * @param {Iterable<[K, V]>} [entries] - Initial entries.\n */\n constructor(factoryMethod: UnaryFunction<K, V>, entries?: Iterable<[K, V]>) {\n super(entries);\n if (typeof factoryMethod !== \"function\") {\n throw new TypeError(\"DefaultMap needs a factory (key => defaultValue).\");\n }\n this._factoryMethod = factoryMethod;\n }\n\n /**\n * Gets the value for the key. If it does not exist, it creates it using the factory,\n * saves it, and returns it.\n *\n * @param {K} key - The key to get.\n * @returns {V} The value associated with the key.\n */\n override get(key: K): V {\n if (!super.has(key)) {\n const value = this._factoryMethod(key);\n super.set(key, value);\n return value;\n }\n // ¡super.get puede devolver undefined si no existe! Pero ya comprobamos has(key)\n return super.get(key)!;\n }\n\n\n}\n"]}
|
|
@@ -11,9 +11,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
11
11
|
class DefaultWeakMap extends WeakMap {
|
|
12
12
|
/**
|
|
13
13
|
* @param {UnaryFunction<K, V>} factoryMethod - Function that produces the default value for a key.
|
|
14
|
-
* @param {
|
|
14
|
+
* @param {Iterable<[K, V]>} [entries] - Initial entries.
|
|
15
15
|
*/
|
|
16
|
-
constructor(factoryMethod, entries
|
|
16
|
+
constructor(factoryMethod, entries) {
|
|
17
17
|
super();
|
|
18
18
|
if (entries != null) {
|
|
19
19
|
for (const [key, value] of entries ?? []) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-weak-map.js","sourceRoot":"","sources":["../../../src/collections/default-weak-map.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;AACH,MAAqB,cAAoC,SAAQ,OAAa;IAG1E;;;OAGG;IACH,YAAY,aAAkC,EAAE,
|
|
1
|
+
{"version":3,"file":"default-weak-map.js","sourceRoot":"","sources":["../../../src/collections/default-weak-map.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;AACH,MAAqB,cAAoC,SAAQ,OAAa;IAG1E;;;OAGG;IACH,YAAY,aAAkC,EAAE,OAA0B;QACtE,KAAK,EAAE,CAAC;QAER,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAED,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACM,GAAG,CAAC,GAAM;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,iFAAiF;QACjF,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC3B,CAAC;CAGJ;AAxCD,iCAwCC","sourcesContent":["import type {UnaryFunction} from \"../types.js\";\n\n/**\n * DefaultWeakMap<K, V>\n * A WeakMap that automatically creates and saves a default value\n * when accessing a non-existent key with get(key).\n *\n * @template K - The type of the keys. Must be an object.\n * @template V - The type of the values.\n */\nexport default class DefaultWeakMap<K extends object, V> extends WeakMap<K, V> {\n private readonly _factoryMethod: (key: K) => V;\n\n /**\n * @param {UnaryFunction<K, V>} factoryMethod - Function that produces the default value for a key.\n * @param {Iterable<[K, V]>} [entries] - Initial entries.\n */\n constructor(factoryMethod: UnaryFunction<K, V>, entries?: Iterable<[K, V]>) {\n super();\n\n if (entries != null) {\n for (const [key, value] of entries ?? []) {\n this.set(key, value);\n }\n }\n\n if (typeof factoryMethod !== \"function\") {\n throw new TypeError(\"DefaultWeakMap needs a factory (key => defaultValue).\");\n }\n this._factoryMethod = factoryMethod;\n }\n\n /**\n * Gets the value for the key. If it does not exist, it creates it using the factory,\n * saves it, and returns it.\n *\n * @param {K} key - The key to get.\n * @returns {V} The value associated with the key.\n */\n override get(key: K): V {\n if (!super.has(key)) {\n const value = this._factoryMethod(key);\n super.set(key, value);\n return value;\n }\n // ¡super.get puede devolver undefined si no existe! Pero ya comprobamos has(key)\n return super.get(key)!;\n }\n\n\n}\n"]}
|
|
@@ -109,10 +109,10 @@ class From {
|
|
|
109
109
|
/**
|
|
110
110
|
* Checks if any element in the sequence satisfies the given predicate.
|
|
111
111
|
* If no predicate is provided, checks if the sequence is not empty.
|
|
112
|
-
* @param {
|
|
112
|
+
* @param {Predicate<T>} [predicate] - A function to test each element.
|
|
113
113
|
* @returns {boolean} True if any element satisfies the predicate.
|
|
114
114
|
*/
|
|
115
|
-
any(predicate
|
|
115
|
+
any(predicate) {
|
|
116
116
|
for (let item of this) {
|
|
117
117
|
if (predicate == null || predicate(item)) {
|
|
118
118
|
return true;
|
|
@@ -130,10 +130,10 @@ class From {
|
|
|
130
130
|
/**
|
|
131
131
|
* Counts the number of elements that satisfy the given predicate.
|
|
132
132
|
* If no predicate is provided, counts all elements.
|
|
133
|
-
* @param {
|
|
133
|
+
* @param {Predicate<T>} [predicate] - A function to test each element.
|
|
134
134
|
* @returns {number} The count of elements.
|
|
135
135
|
*/
|
|
136
|
-
count(predicate
|
|
136
|
+
count(predicate) {
|
|
137
137
|
let output = 0;
|
|
138
138
|
for (let item of this) {
|
|
139
139
|
if (predicate == null || predicate(item)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from.js","sourceRoot":"","sources":["../../../src/collections/from.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Consumer, EqualityComparer, UnaryFunction, Predicate, Supplier, Optional, Nullable} from \"../types.js\";\nimport {shallowEqual, toPairs} from \"../utilities.js\";\nimport KeyValuePair from \"../key-value-pair.js\";\nimport Order from \"../order.js\";\n\n\n/**\n * Creates a new From instance from an Iterable or a Supplier of an Iterable.\n * @template T - The type of elements in the source.\n * @param {Iterable<T> | Supplier<Iterable<T>>} source - The source data.\n * @returns {From<T> | From<KeyValuePair<any, any>>} A new From instance.\n * @throws {Error} If source is null or invalid.\n */\nexport default function from<T>(source: Iterable<T> | Supplier<Iterable<T>>): From<T> | From<KeyValuePair<any, any>> {\n if (source == null)\n throw new Error(\"Source is null.\");\n if (typeof source === 'function')\n return From.fn<T>(source);\n if (typeof source[Symbol.iterator] === 'function') {\n return From.iterable<T>(source);\n } else if (typeof source === 'object') {\n return From.object(source);\n }\n\n throw new Error(\"Invalid source.\");\n}\n\n/**\n * A LINQ-like wrapper for iterables that provides various transformation and query methods.\n * @template T - The type of elements in the sequence.\n */\nexport class From<T> implements Iterable<T> {\n\n /**\n * Creates a From instance from an object's entries.\n * @param {any} obj - The object to convert to pairs.\n * @returns {From<KeyValuePair<any, any>>} A From instance of key-value pairs.\n */\n public static object(obj: any): From<KeyValuePair<any, any>> {\n return new From<KeyValuePair<any, any>>(function () {\n return toPairs(obj);\n });\n }\n\n\n private readonly _fn: Supplier<Iterable<T>>\n\n protected constructor(fn: Supplier<Iterable<T>>) {\n this._fn = fn;\n }\n\n /**\n * Creates a From instance from a supplier function.\n * @template T\n * @param {Supplier<Iterable<T>>} callable - A function that returns an Iterable.\n * @returns {From<T>} A new From instance.\n */\n public static fn<T>(callable: Supplier<Iterable<T>>): From<T> {\n return new From<T>(callable);\n }\n\n /**\n * Collects all elements into an array and returns a new From instance from it.\n * Useful for freezing the sequence and preventing multiple iterations over a generator.\n * @returns {From<T>} A new From instance with cached data.\n */\n public collect(): From<T> {\n const cache = Array.from(this);\n return From.iterable(cache);\n }\n\n /**\n * Creates a From instance from an Iterable.\n * @template T\n * @param {Iterable<T>} iterable - The source iterable.\n * @returns {From<T>} A new From instance.\n */\n public static iterable<T>(iterable: Iterable<T>): From<T> {\n return From.fn<T>(function* () {\n for (const item of iterable) {\n yield item;\n }\n });\n }\n\n /**\n * Maps each element of the sequence into a new form.\n * @template R\n * @param {UnaryFunction<T, R>} mapper - A transformation function.\n * @returns {From<R>} A new From instance with the mapped elements.\n */\n public map<R>(mapper: UnaryFunction<T, R>): From<R> {\n const self = this;\n return From.fn<R>(function* () {\n for (let item of self) {\n yield mapper(item);\n }\n });\n }\n\n * [Symbol.iterator](): Iterator<T> {\n yield* this._fn();\n }\n\n\n /**\n * Checks if all elements in the sequence satisfy the given predicate.\n * @param {Predicate<T>} predicate - A function to test each element.\n * @returns {boolean} True if all elements satisfy the predicate.\n */\n public all(predicate: Predicate<T>): boolean {\n for (let item of this._fn()) {\n if (!predicate(item)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if any element in the sequence satisfies the given predicate.\n * If no predicate is provided, checks if the sequence is not empty.\n * @param {Optional<Predicate<T>>} predicate - A function to test each element.\n * @returns {boolean} True if any element satisfies the predicate.\n */\n public any(predicate: Optional<Predicate<T>> = undefined): boolean {\n for (let item of this) {\n if (predicate == null || predicate(item)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the number of elements in the sequence.\n * @returns {number} The count of elements.\n */\n public get length(): number {\n return this.count();\n }\n\n /**\n * Counts the number of elements that satisfy the given predicate.\n * If no predicate is provided, counts all elements.\n * @param {Optional<Predicate<T>>} predicate - A function to test each element.\n * @returns {number} The count of elements.\n */\n public count(predicate: Optional<Predicate<T>> = undefined): number {\n\n let output = 0;\n\n for (let item of this) {\n if (predicate == null || predicate(item)) {\n output++;\n }\n }\n\n return output;\n }\n\n /**\n * Filters the sequence based on a predicate.\n * @param {Predicate<T>} predicate - A function to test each element.\n * @returns {From<T>} A new From instance with the filtered elements.\n */\n public filter(predicate: Predicate<T>): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n for (let item of self) {\n if (predicate(item)) {\n yield item;\n }\n }\n });\n }\n\n /**\n * Checks if the sequence contains a specific value.\n * @param {T} value - The value to search for.\n * @returns {boolean} True if the value is found.\n */\n public contains(value: T): boolean {\n for (let item of this) {\n if (item === value) {\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * Returns the first element of the sequence that satisfies a condition.\n * @param {Predicate<T>} [predicate] - Optional condition.\n * @returns {T | undefined} The first element or undefined.\n */\n public first(predicate?: Predicate<T>): T | undefined {\n\n if (predicate) {\n for (let item of this) {\n if (predicate(item)) {\n return item;\n }\n }\n } else {\n // noinspection LoopStatementThatDoesntLoopJS\n for (let item of this) {\n return item;\n }\n }\n\n return undefined;\n }\n\n /**\n * Returns the only element of the sequence that satisfies a condition, or throws if more than one exists.\n * @param {Predicate<T>} [predicate] - Optional condition.\n * @returns {T | null} The single element or null if not found.\n * @throws {Error} If more than one element is found.\n */\n public single(predicate?: Predicate<T>): T | null {\n\n let found = false;\n let output: T | null = null;\n\n if (predicate) {\n for (let item of this) {\n if (predicate(item)) {\n if (found) {\n throw new Error(\"Sequence contains more than one element.\");\n }\n found = true;\n output = item;\n }\n }\n } else {\n // noinspection LoopStatementThatDoesntLoopJS\n for (let item of this) {\n if (found) {\n throw new Error(\"Sequence contains more than one element.\");\n }\n found = true;\n output = item;\n }\n }\n\n return output;\n }\n\n /**\n * Appends an item to the end of the sequence.\n * @param {T} item - The item to append.\n * @returns {From<T>} A new From instance.\n */\n public append(item: T): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n for (let element of self) {\n yield element;\n }\n yield item;\n });\n }\n\n /**\n * Prepends an item to the beginning of the sequence.\n * @param {T} item - The item to prepend.\n * @returns {From<T>} A new From instance.\n */\n public prepend(item: T): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n yield item;\n for (let element of self) {\n yield element;\n }\n });\n }\n\n /**\n * Gets the element at a specific index.\n * @param {number} index - The zero-based index.\n * @returns {T | undefined} The element at the index or undefined.\n */\n public at(index: number): T | undefined {\n let idx = 0;\n for (let item of this) {\n if (idx++ === index) {\n return item;\n }\n }\n return undefined;\n }\n\n /**\n * Returns the last element of the sequence that satisfies a condition.\n * @param {Predicate<T>} [predicate] - Optional condition.\n * @returns {T | undefined} The last element or undefined.\n */\n public last(predicate?: Predicate<T>): T | undefined {\n\n\n let last: T | undefined = undefined;\n\n if (predicate)\n for (let item of this) {\n if (!predicate || predicate(item)) {\n last = item;\n }\n }\n else {\n for (let item of this) {\n last = item;\n }\n }\n return last;\n }\n\n /**\n * Projects each element of a sequence to an Iterable and flattens the resulting sequences into one sequence.\n * @template R\n * @param {UnaryFunction<T, Iterable<R>>} mapper - A transformation function.\n * @returns {From<R>} A new From instance.\n */\n public mapMany<R>(mapper: UnaryFunction<T, Iterable<R>>): From<R> {\n const self = this;\n return From.fn(function* () {\n for (const item of self) {\n const subitems = mapper(item)\n for (const subitem of subitems) {\n yield subitem;\n }\n }\n })\n }\n\n /**\n * Flattens a sequence of iterables.\n * @returns {From<any>} A new From instance.\n */\n public flatten(): From<any> {\n const self = this;\n return From.fn<T>(function* () {\n for (let item of self) {\n let temp = <Iterable<any>>item;\n for (let subitem of temp) {\n yield subitem\n }\n }\n });\n }\n\n /**\n * Calculates the sum of the elements in the sequence.\n * @param {UnaryFunction<T, number>} [mapper] - Optional projection function.\n * @returns {number} The sum.\n */\n public sum(mapper?: UnaryFunction<T, number>): number {\n let total = 0;\n\n if (mapper)\n for (let item of this) {\n total += mapper(item);\n }\n else\n for (let item of this) {\n total += item as number;\n }\n return total;\n }\n\n /**\n * Calculates the average of the elements in the sequence.\n * @param {UnaryFunction<T, number>} [mapper] - Optional projection function.\n * @returns {number} The average.\n */\n public avg(mapper?: UnaryFunction<T, number>): number {\n let total = 0;\n let count = 0;\n\n if (mapper)\n for (let item of this) {\n total += mapper(item);\n count++;\n }\n else\n for (let item of this) {\n total += item as number;\n count++;\n }\n return count > 0 ? total / count : 0;\n }\n\n /**\n * Returns the maximum value in the sequence.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {number} The maximum value.\n */\n public max(mapper: UnaryFunction<T, number>): number {\n let max = -Infinity;\n for (let item of this) {\n let value = mapper(item);\n max = value > max ? value : max;\n }\n return max;\n }\n\n /**\n * Returns the minimum value in the sequence.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {number} The minimum value.\n */\n public min(mapper: UnaryFunction<T, number>): number {\n let min = Infinity;\n for (let item of this) {\n let value = mapper(item);\n min = value < min ? value : min;\n }\n return min;\n }\n\n /**\n * Returns the element with the maximum value.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {T | undefined} The element with the maximum value.\n */\n public maxBy(mapper: UnaryFunction<T, number>): T | undefined {\n let max = -Infinity;\n let maxItem: T | undefined;\n for (let item of this) {\n let value = mapper(item);\n if (value > max) {\n max = value;\n maxItem = item;\n }\n }\n return maxItem;\n }\n\n /**\n * Returns the element with the minimum value.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {T | undefined} The element with the minimum value.\n */\n public minBy(mapper: UnaryFunction<T, number>): T | undefined {\n let min = Infinity;\n let minItem: T | undefined;\n for (let item of this) {\n let value = mapper(item);\n if (value < min) {\n min = value;\n minItem = item;\n }\n }\n return minItem;\n }\n\n /**\n * Sorts the elements of the sequence.\n * @template R\n * @param {UnaryFunction<T, R>} mapper - Projection function for the key to sort by.\n * @param {Order} [order] - Ascending or Descending.\n * @returns {From<T>} A new From instance.\n */\n public orderBy<R>(mapper: UnaryFunction<T, R>, order: Order = Order.Ascending): From<T> {\n const array = Array.from(this._fn());\n if (order == Order.Ascending) {\n array.sort((a, b) => {\n const aValue = mapper(a);\n const bValue = mapper(b);\n return aValue > bValue ? 1 : bValue > aValue ? -1 : 0;\n });\n } else if (order == Order.Descending) {\n array.sort((a, b) => {\n const aValue = mapper(a);\n const bValue = mapper(b);\n return aValue > bValue ? 1 : bValue < aValue ? -1 : 0;\n });\n } else {\n throw new Error(\"invalid order argument\");\n }\n\n return From.iterable(array);\n }\n\n /**\n * Groups the elements of the sequence.\n * @template TKey\n * @param {UnaryFunction<T, TKey>} keySelector - Function to extract the key for each element.\n * @param {EqualityComparer<TKey>} [equalityComparer] - Optional comparer for keys.\n * @returns {From<Grouping<TKey, T>>} A new From instance.\n */\n public groupBy<TKey>(keySelector: UnaryFunction<T, TKey>, equalityComparer?: EqualityComparer<TKey>): From<Grouping<TKey, T>> {\n\n equalityComparer = (equalityComparer == null ? shallowEqual : equalityComparer);\n const self = this;\n\n return From.fn<Grouping<TKey, T>>(function* () {\n const groups: Array<[TKey, T[]]> = [];\n for (let item of self) {\n const key = keySelector(item);\n let found = false;\n for (let [entryKey, group] of groups) {\n if (equalityComparer(key, entryKey)) {\n group.push(item);\n found = true;\n break;\n }\n }\n if (!found) {\n groups.push([key, [item]]);\n }\n }\n yield* groups.map(([key, values]) => new Grouping<TKey, T>(key, values));\n });\n }\n\n /**\n * Returns a specified number of contiguous elements from the start of the sequence.\n * @param {number} n - The number of elements to return.\n * @returns {From<T>} A new From instance.\n */\n public head(n: number): From<T> {\n\n const self = this;\n return From.fn<T>(function* () {\n let count = 0;\n for (let item of self) {\n if (count++ < n) {\n yield item;\n } else {\n return;\n }\n }\n });\n }\n\n /**\n * Returns a specified number of contiguous elements from the end of the sequence.\n * @param {number} n - The number of elements to return.\n * @returns {From<T>} A new From instance.\n */\n public tail(n: number): From<T> {\n\n const self = this;\n return From.fn<T>(function* () {\n let buffer = [];\n for (let item of self) {\n buffer.push(item);\n if (buffer.length > n) {\n buffer.shift();\n }\n }\n yield* buffer;\n });\n }\n\n /**\n * Performs the specified action on each element of the sequence.\n * @param {Consumer<T>} action - The action to perform.\n */\n public forEach(action: Consumer<T>): void {\n for (let item of this) {\n action(item);\n }\n }\n\n /**\n * Converts the sequence to an array.\n * @returns {T[]} The array.\n */\n public toArray(): T[] {\n return Array.from(this);\n }\n\n /**\n * Converts the sequence to a record.\n * @template R\n * @param {UnaryFunction<T, string | symbol | number>} keySelector - Key selector.\n * @param {UnaryFunction<T, R>} valueSelector - Value selector.\n * @returns {Record<string | symbol | number, R>} The record.\n */\n public toRecord<R>(keySelector: UnaryFunction<T, string | symbol | number>, valueSelector: UnaryFunction<T, R>): Record<string | symbol | number, R> {\n const output: Record<string | symbol | number, R> = {};\n\n for (let item of this) {\n output[keySelector(item)] = valueSelector(item);\n }\n return output;\n }\n\n /**\n * Converts the sequence to a Map.\n * @template RKey, RValue\n * @param {UnaryFunction<T, RKey>} keySelector - Key selector.\n * @param {UnaryFunction<T, RValue>} valueSelector - Value selector.\n * @returns {Map<RKey, RValue>} The map.\n */\n public toMap<RKey, RValue>(keySelector: UnaryFunction<T, RKey>, valueSelector: UnaryFunction<T, RValue>): Map<RKey, RValue> {\n const map = new Map<any, any>();\n\n for (let item of this) {\n const key = keySelector(item);\n const value = valueSelector(item);\n map.set(key, value);\n }\n\n return map;\n }\n\n\n /**\n * Returns elements that are instances of a specific primitive type.\n * @param {string} type - The type string (e.g., 'string', 'number').\n * @returns {From<T>} A new From instance.\n */\n public instancesOf(type: string): From<T> {\n return this.filter(item => typeof item === type);\n }\n\n /**\n * Checks if all elements are instances of a specific class.\n * @param {new (...args: any[]) => any} type - The class constructor.\n * @returns {boolean} True if all elements are instances of the type.\n */\n public allInstanceOf(type: new (...args: any[]) => any): boolean {\n for (let item of this) {\n if (!(item instanceof type)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns distinct elements from the sequence.\n * @param {EqualityComparer<T>} [eq_comparer] - Optional equality comparer.\n * @returns {From<T>} A new From instance.\n */\n public distinct(eq_comparer?: EqualityComparer<T>): From<T> {\n\n if (eq_comparer == null)\n eq_comparer = shallowEqual;\n\n const self = this;\n return From.fn<T>(function* () {\n\n const included = [];\n\n for (let item of self) {\n if (!From.iterable(included).any(x => eq_comparer(x, item))) {\n included.push(item);\n yield item;\n }\n }\n });\n }\n\n /**\n * Inserts an item at a specific index.\n * @param {T} item - The item to insert.\n * @param {number} index - The zero-based index.\n * @returns {From<T>} A new From instance.\n */\n public insert(item: T, index: number): From<T> {\n\n const self = this;\n return From.fn<T>(function* () {\n let i = 0;\n let inserted = false;\n for (let existingItem of self) {\n if (i === index) {\n yield item;\n inserted = true;\n }\n yield existingItem;\n i++;\n }\n if (!inserted) {\n yield item;\n }\n });\n }\n\n /**\n * Bypasses a specified number of elements in a sequence and then returns the remaining elements.\n * @param {number} n - The number of elements to skip.\n * @returns {From<T>} A new From instance.\n */\n public skip(n: number): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n let i = 0;\n for (let item of self) {\n if (i >= n) {\n yield item;\n }\n i++;\n }\n });\n }\n\n\n /**\n * Concatenates two sequences.\n * @param {Iterable<T>} other - The other sequence.\n * @returns {From<T>} A new From instance.\n */\n public union(other: Iterable<T>): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n yield* self;\n yield* other;\n });\n }\n\n /**\n * Correlates the elements of two sequences based on matching keys.\n * @template T2, R, R2\n * @param {Iterable<T2>} other - The other sequence.\n * @param {UnaryFunction<T, R>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<T2, R>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T, otherItem: T2) => R2} resultSelector - Function to create a result element from two matching elements.\n * @returns {From<R2>} A new From instance.\n */\n public innerJoin<T2, R, R2>(other: Iterable<T2>, thisKeySelector: UnaryFunction<T, R>, otherKeySelector: UnaryFunction<T2, R>, resultSelector: (thisItem: T, otherItem: T2) => R2): From<R2> {\n\n const self = this;\n return From.fn<R2>(() => {\n const otherByKey = new Map<R, T2>();\n for (let item of other) {\n otherByKey.set(otherKeySelector(item), item);\n }\n return Array.from(self)\n .filter(item => otherByKey.has(thisKeySelector(item)))\n .map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))!));\n });\n }\n\n /**\n * Performs a left join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T, otherItem: U | undefined) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public leftJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItem: T, otherItem: U | undefined) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const otherByKey = new Map<K, U>();\n for (let item of other) {\n otherByKey.set(otherKeySelector(item), item);\n }\n return Array.from(self).map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))));\n });\n }\n\n\n /**\n * Performs a left group join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T, otherItems: Array<U>) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public leftGroupJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItem: T, otherItems: Array<U>) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const otherByKeys = new Map<K, Array<U>>();\n for (let item of other) {\n const key = otherKeySelector(item);\n if (!otherByKeys.has(key)) {\n otherByKeys.set(key, []);\n }\n otherByKeys.get(key)!.push(item);\n }\n return Array.from(self).map(item => resultSelector(item, otherByKeys.get(thisKeySelector(item)) || []));\n });\n }\n\n /**\n * Performs a right group join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItems: Array<T>, otherItem: U) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public rightGroupJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItems: Array<T>, otherItem: U) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const thisByKeys = new Map<K, Array<T>>();\n for (let item of self) {\n const key = thisKeySelector(item);\n if (!thisByKeys.has(key)) {\n thisByKeys.set(key, []);\n }\n thisByKeys.get(key)!.push(item);\n }\n return Array.from(other).map(item => resultSelector(thisByKeys.get(otherKeySelector(item)) || [], item));\n });\n }\n\n\n /**\n * Performs a right join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T | undefined, otherItem: U) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public rightJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItem: T | undefined, otherItem: U) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const thisByKey = new Map<K, T>();\n for (let item of self) {\n thisByKey.set(thisKeySelector(item), item);\n }\n return Array.from(other).map(item => resultSelector(thisByKey.get(otherKeySelector(item)), item));\n });\n }\n\n}\n\n/**\n * Represents a group of elements that have a common key.\n * @template TKey, T\n */\nexport class Grouping<TKey, T> extends From<T> {\n\n private readonly _key: TKey;\n\n /**\n * Gets the key of the group.\n */\n public get key(): TKey {\n return this._key;\n }\n\n /**\n * @param {TKey} key - The group key.\n * @param {Array<T>} values - The values in the group.\n */\n public constructor(key: TKey, values: Array<T>) {\n super(() => values);\n this._key = key;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"from.js","sourceRoot":"","sources":["../../../src/collections/from.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Consumer, EqualityComparer, UnaryFunction, Predicate, Supplier} from \"../types.js\";\nimport {shallowEqual, toPairs} from \"../utilities.js\";\nimport KeyValuePair from \"../key-value-pair.js\";\nimport Order from \"../order.js\";\n\n\n/**\n * Creates a new From instance from an Iterable or a Supplier of an Iterable.\n * @template T - The type of elements in the source.\n * @param {Iterable<T> | Supplier<Iterable<T>>} source - The source data.\n * @returns {From<T> | From<KeyValuePair<any, any>>} A new From instance.\n * @throws {Error} If source is null or invalid.\n */\nexport default function from<T>(source: Iterable<T> | Supplier<Iterable<T>>): From<T> | From<KeyValuePair<any, any>> {\n if (source == null)\n throw new Error(\"Source is null.\");\n if (typeof source === 'function')\n return From.fn<T>(source);\n if (typeof source[Symbol.iterator] === 'function') {\n return From.iterable<T>(source);\n } else if (typeof source === 'object') {\n return From.object(source);\n }\n\n throw new Error(\"Invalid source.\");\n}\n\n/**\n * A LINQ-like wrapper for iterables that provides various transformation and query methods.\n * @template T - The type of elements in the sequence.\n */\nexport class From<T> implements Iterable<T> {\n\n /**\n * Creates a From instance from an object's entries.\n * @param {any} obj - The object to convert to pairs.\n * @returns {From<KeyValuePair<any, any>>} A From instance of key-value pairs.\n */\n public static object(obj: any): From<KeyValuePair<any, any>> {\n return new From<KeyValuePair<any, any>>(function () {\n return toPairs(obj);\n });\n }\n\n\n private readonly _fn: Supplier<Iterable<T>>\n\n protected constructor(fn: Supplier<Iterable<T>>) {\n this._fn = fn;\n }\n\n /**\n * Creates a From instance from a supplier function.\n * @template T\n * @param {Supplier<Iterable<T>>} callable - A function that returns an Iterable.\n * @returns {From<T>} A new From instance.\n */\n public static fn<T>(callable: Supplier<Iterable<T>>): From<T> {\n return new From<T>(callable);\n }\n\n /**\n * Collects all elements into an array and returns a new From instance from it.\n * Useful for freezing the sequence and preventing multiple iterations over a generator.\n * @returns {From<T>} A new From instance with cached data.\n */\n public collect(): From<T> {\n const cache = Array.from(this);\n return From.iterable(cache);\n }\n\n /**\n * Creates a From instance from an Iterable.\n * @template T\n * @param {Iterable<T>} iterable - The source iterable.\n * @returns {From<T>} A new From instance.\n */\n public static iterable<T>(iterable: Iterable<T>): From<T> {\n return From.fn<T>(function* () {\n for (const item of iterable) {\n yield item;\n }\n });\n }\n\n /**\n * Maps each element of the sequence into a new form.\n * @template R\n * @param {UnaryFunction<T, R>} mapper - A transformation function.\n * @returns {From<R>} A new From instance with the mapped elements.\n */\n public map<R>(mapper: UnaryFunction<T, R>): From<R> {\n const self = this;\n return From.fn<R>(function* () {\n for (let item of self) {\n yield mapper(item);\n }\n });\n }\n\n * [Symbol.iterator](): Iterator<T> {\n yield* this._fn();\n }\n\n\n /**\n * Checks if all elements in the sequence satisfy the given predicate.\n * @param {Predicate<T>} predicate - A function to test each element.\n * @returns {boolean} True if all elements satisfy the predicate.\n */\n public all(predicate: Predicate<T>): boolean {\n for (let item of this._fn()) {\n if (!predicate(item)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if any element in the sequence satisfies the given predicate.\n * If no predicate is provided, checks if the sequence is not empty.\n * @param {Predicate<T>} [predicate] - A function to test each element.\n * @returns {boolean} True if any element satisfies the predicate.\n */\n public any(predicate?: Predicate<T>): boolean {\n for (let item of this) {\n if (predicate == null || predicate(item)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the number of elements in the sequence.\n * @returns {number} The count of elements.\n */\n public get length(): number {\n return this.count();\n }\n\n /**\n * Counts the number of elements that satisfy the given predicate.\n * If no predicate is provided, counts all elements.\n * @param {Predicate<T>} [predicate] - A function to test each element.\n * @returns {number} The count of elements.\n */\n public count(predicate?: Predicate<T>): number {\n\n let output = 0;\n\n for (let item of this) {\n if (predicate == null || predicate(item)) {\n output++;\n }\n }\n\n return output;\n }\n\n /**\n * Filters the sequence based on a predicate.\n * @param {Predicate<T>} predicate - A function to test each element.\n * @returns {From<T>} A new From instance with the filtered elements.\n */\n public filter(predicate: Predicate<T>): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n for (let item of self) {\n if (predicate(item)) {\n yield item;\n }\n }\n });\n }\n\n /**\n * Checks if the sequence contains a specific value.\n * @param {T} value - The value to search for.\n * @returns {boolean} True if the value is found.\n */\n public contains(value: T): boolean {\n for (let item of this) {\n if (item === value) {\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * Returns the first element of the sequence that satisfies a condition.\n * @param {Predicate<T>} [predicate] - Optional condition.\n * @returns {T | undefined} The first element or undefined.\n */\n public first(predicate?: Predicate<T>): T | undefined {\n\n if (predicate) {\n for (let item of this) {\n if (predicate(item)) {\n return item;\n }\n }\n } else {\n // noinspection LoopStatementThatDoesntLoopJS\n for (let item of this) {\n return item;\n }\n }\n\n return undefined;\n }\n\n /**\n * Returns the only element of the sequence that satisfies a condition, or throws if more than one exists.\n * @param {Predicate<T>} [predicate] - Optional condition.\n * @returns {T | null} The single element or null if not found.\n * @throws {Error} If more than one element is found.\n */\n public single(predicate?: Predicate<T>): T | null {\n\n let found = false;\n let output: T | null = null;\n\n if (predicate) {\n for (let item of this) {\n if (predicate(item)) {\n if (found) {\n throw new Error(\"Sequence contains more than one element.\");\n }\n found = true;\n output = item;\n }\n }\n } else {\n // noinspection LoopStatementThatDoesntLoopJS\n for (let item of this) {\n if (found) {\n throw new Error(\"Sequence contains more than one element.\");\n }\n found = true;\n output = item;\n }\n }\n\n return output;\n }\n\n /**\n * Appends an item to the end of the sequence.\n * @param {T} item - The item to append.\n * @returns {From<T>} A new From instance.\n */\n public append(item: T): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n for (let element of self) {\n yield element;\n }\n yield item;\n });\n }\n\n /**\n * Prepends an item to the beginning of the sequence.\n * @param {T} item - The item to prepend.\n * @returns {From<T>} A new From instance.\n */\n public prepend(item: T): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n yield item;\n for (let element of self) {\n yield element;\n }\n });\n }\n\n /**\n * Gets the element at a specific index.\n * @param {number} index - The zero-based index.\n * @returns {T | undefined} The element at the index or undefined.\n */\n public at(index: number): T | undefined {\n let idx = 0;\n for (let item of this) {\n if (idx++ === index) {\n return item;\n }\n }\n return undefined;\n }\n\n /**\n * Returns the last element of the sequence that satisfies a condition.\n * @param {Predicate<T>} [predicate] - Optional condition.\n * @returns {T | undefined} The last element or undefined.\n */\n public last(predicate?: Predicate<T>): T | undefined {\n\n\n let last: T | undefined = undefined;\n\n if (predicate)\n for (let item of this) {\n if (!predicate || predicate(item)) {\n last = item;\n }\n }\n else {\n for (let item of this) {\n last = item;\n }\n }\n return last;\n }\n\n /**\n * Projects each element of a sequence to an Iterable and flattens the resulting sequences into one sequence.\n * @template R\n * @param {UnaryFunction<T, Iterable<R>>} mapper - A transformation function.\n * @returns {From<R>} A new From instance.\n */\n public mapMany<R>(mapper: UnaryFunction<T, Iterable<R>>): From<R> {\n const self = this;\n return From.fn(function* () {\n for (const item of self) {\n const subitems = mapper(item)\n for (const subitem of subitems) {\n yield subitem;\n }\n }\n })\n }\n\n /**\n * Flattens a sequence of iterables.\n * @returns {From<any>} A new From instance.\n */\n public flatten(): From<any> {\n const self = this;\n return From.fn<T>(function* () {\n for (let item of self) {\n let temp = <Iterable<any>>item;\n for (let subitem of temp) {\n yield subitem\n }\n }\n });\n }\n\n /**\n * Calculates the sum of the elements in the sequence.\n * @param {UnaryFunction<T, number>} [mapper] - Optional projection function.\n * @returns {number} The sum.\n */\n public sum(mapper?: UnaryFunction<T, number>): number {\n let total = 0;\n\n if (mapper)\n for (let item of this) {\n total += mapper(item);\n }\n else\n for (let item of this) {\n total += item as number;\n }\n return total;\n }\n\n /**\n * Calculates the average of the elements in the sequence.\n * @param {UnaryFunction<T, number>} [mapper] - Optional projection function.\n * @returns {number} The average.\n */\n public avg(mapper?: UnaryFunction<T, number>): number {\n let total = 0;\n let count = 0;\n\n if (mapper)\n for (let item of this) {\n total += mapper(item);\n count++;\n }\n else\n for (let item of this) {\n total += item as number;\n count++;\n }\n return count > 0 ? total / count : 0;\n }\n\n /**\n * Returns the maximum value in the sequence.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {number} The maximum value.\n */\n public max(mapper: UnaryFunction<T, number>): number {\n let max = -Infinity;\n for (let item of this) {\n let value = mapper(item);\n max = value > max ? value : max;\n }\n return max;\n }\n\n /**\n * Returns the minimum value in the sequence.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {number} The minimum value.\n */\n public min(mapper: UnaryFunction<T, number>): number {\n let min = Infinity;\n for (let item of this) {\n let value = mapper(item);\n min = value < min ? value : min;\n }\n return min;\n }\n\n /**\n * Returns the element with the maximum value.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {T | undefined} The element with the maximum value.\n */\n public maxBy(mapper: UnaryFunction<T, number>): T | undefined {\n let max = -Infinity;\n let maxItem: T | undefined;\n for (let item of this) {\n let value = mapper(item);\n if (value > max) {\n max = value;\n maxItem = item;\n }\n }\n return maxItem;\n }\n\n /**\n * Returns the element with the minimum value.\n * @param {UnaryFunction<T, number>} mapper - Projection function.\n * @returns {T | undefined} The element with the minimum value.\n */\n public minBy(mapper: UnaryFunction<T, number>): T | undefined {\n let min = Infinity;\n let minItem: T | undefined;\n for (let item of this) {\n let value = mapper(item);\n if (value < min) {\n min = value;\n minItem = item;\n }\n }\n return minItem;\n }\n\n /**\n * Sorts the elements of the sequence.\n * @template R\n * @param {UnaryFunction<T, R>} mapper - Projection function for the key to sort by.\n * @param {Order} [order] - Ascending or Descending.\n * @returns {From<T>} A new From instance.\n */\n public orderBy<R>(mapper: UnaryFunction<T, R>, order: Order = Order.Ascending): From<T> {\n const array = Array.from(this._fn());\n if (order == Order.Ascending) {\n array.sort((a, b) => {\n const aValue = mapper(a);\n const bValue = mapper(b);\n return aValue > bValue ? 1 : bValue > aValue ? -1 : 0;\n });\n } else if (order == Order.Descending) {\n array.sort((a, b) => {\n const aValue = mapper(a);\n const bValue = mapper(b);\n return aValue > bValue ? 1 : bValue < aValue ? -1 : 0;\n });\n } else {\n throw new Error(\"invalid order argument\");\n }\n\n return From.iterable(array);\n }\n\n /**\n * Groups the elements of the sequence.\n * @template TKey\n * @param {UnaryFunction<T, TKey>} keySelector - Function to extract the key for each element.\n * @param {EqualityComparer<TKey>} [equalityComparer] - Optional comparer for keys.\n * @returns {From<Grouping<TKey, T>>} A new From instance.\n */\n public groupBy<TKey>(keySelector: UnaryFunction<T, TKey>, equalityComparer?: EqualityComparer<TKey>): From<Grouping<TKey, T>> {\n\n equalityComparer = (equalityComparer == null ? shallowEqual : equalityComparer);\n const self = this;\n\n return From.fn<Grouping<TKey, T>>(function* () {\n const groups: Array<[TKey, T[]]> = [];\n for (let item of self) {\n const key = keySelector(item);\n let found = false;\n for (let [entryKey, group] of groups) {\n if (equalityComparer(key, entryKey)) {\n group.push(item);\n found = true;\n break;\n }\n }\n if (!found) {\n groups.push([key, [item]]);\n }\n }\n yield* groups.map(([key, values]) => new Grouping<TKey, T>(key, values));\n });\n }\n\n /**\n * Returns a specified number of contiguous elements from the start of the sequence.\n * @param {number} n - The number of elements to return.\n * @returns {From<T>} A new From instance.\n */\n public head(n: number): From<T> {\n\n const self = this;\n return From.fn<T>(function* () {\n let count = 0;\n for (let item of self) {\n if (count++ < n) {\n yield item;\n } else {\n return;\n }\n }\n });\n }\n\n /**\n * Returns a specified number of contiguous elements from the end of the sequence.\n * @param {number} n - The number of elements to return.\n * @returns {From<T>} A new From instance.\n */\n public tail(n: number): From<T> {\n\n const self = this;\n return From.fn<T>(function* () {\n let buffer = [];\n for (let item of self) {\n buffer.push(item);\n if (buffer.length > n) {\n buffer.shift();\n }\n }\n yield* buffer;\n });\n }\n\n /**\n * Performs the specified action on each element of the sequence.\n * @param {Consumer<T>} action - The action to perform.\n */\n public forEach(action: Consumer<T>): void {\n for (let item of this) {\n action(item);\n }\n }\n\n /**\n * Converts the sequence to an array.\n * @returns {T[]} The array.\n */\n public toArray(): T[] {\n return Array.from(this);\n }\n\n /**\n * Converts the sequence to a record.\n * @template R\n * @param {UnaryFunction<T, string | symbol | number>} keySelector - Key selector.\n * @param {UnaryFunction<T, R>} valueSelector - Value selector.\n * @returns {Record<string | symbol | number, R>} The record.\n */\n public toRecord<R>(keySelector: UnaryFunction<T, string | symbol | number>, valueSelector: UnaryFunction<T, R>): Record<string | symbol | number, R> {\n const output: Record<string | symbol | number, R> = {};\n\n for (let item of this) {\n output[keySelector(item)] = valueSelector(item);\n }\n return output;\n }\n\n /**\n * Converts the sequence to a Map.\n * @template RKey, RValue\n * @param {UnaryFunction<T, RKey>} keySelector - Key selector.\n * @param {UnaryFunction<T, RValue>} valueSelector - Value selector.\n * @returns {Map<RKey, RValue>} The map.\n */\n public toMap<RKey, RValue>(keySelector: UnaryFunction<T, RKey>, valueSelector: UnaryFunction<T, RValue>): Map<RKey, RValue> {\n const map = new Map<any, any>();\n\n for (let item of this) {\n const key = keySelector(item);\n const value = valueSelector(item);\n map.set(key, value);\n }\n\n return map;\n }\n\n\n /**\n * Returns elements that are instances of a specific primitive type.\n * @param {string} type - The type string (e.g., 'string', 'number').\n * @returns {From<T>} A new From instance.\n */\n public instancesOf(type: string): From<T> {\n return this.filter(item => typeof item === type);\n }\n\n /**\n * Checks if all elements are instances of a specific class.\n * @param {new (...args: any[]) => any} type - The class constructor.\n * @returns {boolean} True if all elements are instances of the type.\n */\n public allInstanceOf(type: new (...args: any[]) => any): boolean {\n for (let item of this) {\n if (!(item instanceof type)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns distinct elements from the sequence.\n * @param {EqualityComparer<T>} [eq_comparer] - Optional equality comparer.\n * @returns {From<T>} A new From instance.\n */\n public distinct(eq_comparer?: EqualityComparer<T>): From<T> {\n\n if (eq_comparer == null)\n eq_comparer = shallowEqual;\n\n const self = this;\n return From.fn<T>(function* () {\n\n const included = [];\n\n for (let item of self) {\n if (!From.iterable(included).any(x => eq_comparer(x, item))) {\n included.push(item);\n yield item;\n }\n }\n });\n }\n\n /**\n * Inserts an item at a specific index.\n * @param {T} item - The item to insert.\n * @param {number} index - The zero-based index.\n * @returns {From<T>} A new From instance.\n */\n public insert(item: T, index: number): From<T> {\n\n const self = this;\n return From.fn<T>(function* () {\n let i = 0;\n let inserted = false;\n for (let existingItem of self) {\n if (i === index) {\n yield item;\n inserted = true;\n }\n yield existingItem;\n i++;\n }\n if (!inserted) {\n yield item;\n }\n });\n }\n\n /**\n * Bypasses a specified number of elements in a sequence and then returns the remaining elements.\n * @param {number} n - The number of elements to skip.\n * @returns {From<T>} A new From instance.\n */\n public skip(n: number): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n let i = 0;\n for (let item of self) {\n if (i >= n) {\n yield item;\n }\n i++;\n }\n });\n }\n\n\n /**\n * Concatenates two sequences.\n * @param {Iterable<T>} other - The other sequence.\n * @returns {From<T>} A new From instance.\n */\n public union(other: Iterable<T>): From<T> {\n const self = this;\n return From.fn<T>(function* () {\n yield* self;\n yield* other;\n });\n }\n\n /**\n * Correlates the elements of two sequences based on matching keys.\n * @template T2, R, R2\n * @param {Iterable<T2>} other - The other sequence.\n * @param {UnaryFunction<T, R>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<T2, R>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T, otherItem: T2) => R2} resultSelector - Function to create a result element from two matching elements.\n * @returns {From<R2>} A new From instance.\n */\n public innerJoin<T2, R, R2>(other: Iterable<T2>, thisKeySelector: UnaryFunction<T, R>, otherKeySelector: UnaryFunction<T2, R>, resultSelector: (thisItem: T, otherItem: T2) => R2): From<R2> {\n\n const self = this;\n return From.fn<R2>(() => {\n const otherByKey = new Map<R, T2>();\n for (let item of other) {\n otherByKey.set(otherKeySelector(item), item);\n }\n return Array.from(self)\n .filter(item => otherByKey.has(thisKeySelector(item)))\n .map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))!));\n });\n }\n\n /**\n * Performs a left join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T, otherItem: U | undefined) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public leftJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItem: T, otherItem: U | undefined) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const otherByKey = new Map<K, U>();\n for (let item of other) {\n otherByKey.set(otherKeySelector(item), item);\n }\n return Array.from(self).map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))));\n });\n }\n\n\n /**\n * Performs a left group join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T, otherItems: Array<U>) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public leftGroupJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItem: T, otherItems: Array<U>) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const otherByKeys = new Map<K, Array<U>>();\n for (let item of other) {\n const key = otherKeySelector(item);\n if (!otherByKeys.has(key)) {\n otherByKeys.set(key, []);\n }\n otherByKeys.get(key)!.push(item);\n }\n return Array.from(self).map(item => resultSelector(item, otherByKeys.get(thisKeySelector(item)) || []));\n });\n }\n\n /**\n * Performs a right group join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItems: Array<T>, otherItem: U) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public rightGroupJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItems: Array<T>, otherItem: U) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const thisByKeys = new Map<K, Array<T>>();\n for (let item of self) {\n const key = thisKeySelector(item);\n if (!thisByKeys.has(key)) {\n thisByKeys.set(key, []);\n }\n thisByKeys.get(key)!.push(item);\n }\n return Array.from(other).map(item => resultSelector(thisByKeys.get(otherKeySelector(item)) || [], item));\n });\n }\n\n\n /**\n * Performs a right join on two sequences.\n * @template U, K, R\n * @param {Iterable<U>} other - The other sequence.\n * @param {UnaryFunction<T, K>} thisKeySelector - Key selector for this sequence.\n * @param {UnaryFunction<U, K>} otherKeySelector - Key selector for the other sequence.\n * @param {(thisItem: T | undefined, otherItem: U) => R} resultSelector - Function to create a result element.\n * @returns {From<R>} A new From instance.\n */\n public rightJoin<U, K, R>(other: Iterable<U>, thisKeySelector: UnaryFunction<T, K>, otherKeySelector: UnaryFunction<U, K>, resultSelector: (thisItem: T | undefined, otherItem: U) => R): From<R> {\n\n const self = this;\n return From.fn<R>(() => {\n const thisByKey = new Map<K, T>();\n for (let item of self) {\n thisByKey.set(thisKeySelector(item), item);\n }\n return Array.from(other).map(item => resultSelector(thisByKey.get(otherKeySelector(item)), item));\n });\n }\n\n}\n\n/**\n * Represents a group of elements that have a common key.\n * @template TKey, T\n */\nexport class Grouping<TKey, T> extends From<T> {\n\n private readonly _key: TKey;\n\n /**\n * Gets the key of the group.\n */\n public get key(): TKey {\n return this._key;\n }\n\n /**\n * @param {TKey} key - The group key.\n * @param {Array<T>} values - The values in the group.\n */\n public constructor(key: TKey, values: Array<T>) {\n super(() => values);\n this._key = key;\n }\n}"]}
|
package/dist/cjs/string.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ensurePrefix = ensurePrefix;
|
|
4
4
|
exports.ensureSuffix = ensureSuffix;
|
|
5
|
+
exports.normalizeWhitespaces = normalizeWhitespaces;
|
|
6
|
+
exports.removeDiacritics = removeDiacritics;
|
|
5
7
|
exports.format = format;
|
|
6
8
|
exports.toSnakeCase = toSnakeCase;
|
|
7
9
|
exports.toKebabCase = toKebabCase;
|
|
@@ -32,6 +34,25 @@ function ensureSuffix(str, suffix) {
|
|
|
32
34
|
return str + suffix;
|
|
33
35
|
return str;
|
|
34
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Normalizes Unicode whitespaces into single ASCII spaces and removes leading
|
|
39
|
+
* and trailing whitespace.
|
|
40
|
+
*/
|
|
41
|
+
function normalizeWhitespaces(str) {
|
|
42
|
+
return str.normalize('NFKC')
|
|
43
|
+
.replace(/[\s\u200B\uFEFF]+/gu, ' ')
|
|
44
|
+
.trim();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Removes Unicode diacritics while preserving the original letter casing.
|
|
48
|
+
*
|
|
49
|
+
* @example removeDiacritics('áÁñÑ') // 'aAnN'
|
|
50
|
+
*/
|
|
51
|
+
function removeDiacritics(str) {
|
|
52
|
+
return str
|
|
53
|
+
.normalize('NFD')
|
|
54
|
+
.replace(/\p{M}+/gu, '');
|
|
55
|
+
}
|
|
35
56
|
/**
|
|
36
57
|
* Formats a string using a template and provided arguments.
|
|
37
58
|
*
|
package/dist/cjs/string.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":";;AAQA,oCAIC;AAUD,oCAIC;AASD,wBAgBC;AAgCD,kCAEC;AAQD,kCAEC;AAQD,kCAMC;AAQD,oCAIC;AAQD,wCAEC;
|
|
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 * Normalizes Unicode whitespaces into single ASCII spaces and removes leading\n * and trailing whitespace.\n */\nexport function normalizeWhitespaces(str: string): string {\n return str.normalize('NFKC')\n .replace(/[\\s\\u200B\\uFEFF]+/gu, ' ')\n .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/cjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["\n\nexport type EqualityComparer<T> = (arg1: T, arg2: T) => boolean;\n\nexport type Consumer<T> = (arg: T) => void
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["\n\nexport type EqualityComparer<T> = (arg1: T, arg2: T) => boolean;\n\nexport type Consumer<T> = (arg: T) => void;\n\nexport type Predicate<T> = (arg: T) => boolean;\n\nexport type Supplier<T> = () => T;\n\nexport type Nullable<T> = T | null;\n\nexport type Nullish = null | undefined;\n\nexport type Resolvable<T> = T | Promise<T> | Supplier<T>;\n\nexport type UnaryFunction<T, R> = (arg: T) => R;\n\nexport type BinaryFunction<T1, T2, R> = (arg1: T1, arg2: T2) => R;\n\nexport type TernaryFunction<T1, T2, T3, R> = (arg1: T1, arg2: T2, arg3: T3) => R;\n\nexport type QuaternaryFunction<T1, T2, T3, T4, R> = (\n arg1: T1,\n arg2: T2,\n arg3: T3,\n arg4: T4\n) => R;\n\nexport type Constructor<T = unknown> = abstract new (...args: any[]) => T;\n\n\n"]}
|
package/dist/cjs/utilities.js
CHANGED
|
@@ -33,10 +33,12 @@ exports.monkeyPatch = monkeyPatch;
|
|
|
33
33
|
const key_value_pair_js_1 = __importDefault(require("./key-value-pair.js"));
|
|
34
34
|
const type_js_1 = __importDefault(require("./type.js"));
|
|
35
35
|
function lazy(factory) {
|
|
36
|
-
let
|
|
36
|
+
let created = false;
|
|
37
|
+
let instance;
|
|
37
38
|
const getInstance = () => {
|
|
38
|
-
if (!
|
|
39
|
+
if (!created) {
|
|
39
40
|
instance = factory();
|
|
41
|
+
created = true;
|
|
40
42
|
}
|
|
41
43
|
return instance;
|
|
42
44
|
};
|
|
@@ -44,8 +46,11 @@ function lazy(factory) {
|
|
|
44
46
|
get(_, prop, receiver) {
|
|
45
47
|
return Reflect.get(getInstance(), prop, receiver);
|
|
46
48
|
},
|
|
47
|
-
set(_, prop, value
|
|
48
|
-
return Reflect.set(getInstance(), prop, value,
|
|
49
|
+
set(_, prop, value) {
|
|
50
|
+
return Reflect.set(getInstance(), prop, value, getInstance());
|
|
51
|
+
},
|
|
52
|
+
defineProperty(_, prop, descriptor) {
|
|
53
|
+
return Reflect.defineProperty(getInstance(), prop, descriptor);
|
|
49
54
|
},
|
|
50
55
|
has(_, prop) {
|
|
51
56
|
return Reflect.has(getInstance(), prop);
|
|
@@ -57,7 +62,11 @@ function lazy(factory) {
|
|
|
57
62
|
return Reflect.ownKeys(getInstance());
|
|
58
63
|
},
|
|
59
64
|
getOwnPropertyDescriptor(_, prop) {
|
|
60
|
-
|
|
65
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(getInstance(), prop);
|
|
66
|
+
if (descriptor == null || descriptor.configurable) {
|
|
67
|
+
return descriptor;
|
|
68
|
+
}
|
|
69
|
+
return { ...descriptor, configurable: true };
|
|
61
70
|
},
|
|
62
71
|
getPrototypeOf() {
|
|
63
72
|
return Reflect.getPrototypeOf(getInstance());
|