portadom 1.0.0 → 1.0.1

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.
@@ -301,21 +301,17 @@ export interface PortadomArrayPromise<El extends BaseEl, BaseEl> {
301
301
  *
302
302
  * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
303
303
  */
304
- reduce: {
305
- (callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
306
- (callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
307
- <U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
308
- };
304
+ reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
305
+ reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
306
+ reduce<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
309
307
  /**
310
308
  * Wrapper for {@link Array.reduceRight}.
311
309
  *
312
310
  * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
313
311
  */
314
- reduceRight: {
315
- reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
316
- reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
317
- reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
318
- };
312
+ reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
313
+ reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
314
+ reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
319
315
  /**
320
316
  * Wrapper for {@link Array.reverse} that returns the resulting array wrapped in {@link PortadomArrayPromise}.
321
317
  */
@@ -344,6 +340,58 @@ export interface PortadomArrayPromise<El extends BaseEl, BaseEl> {
344
340
  unshift: (...args: Parameters<Portadom<El, BaseEl>[]['unshift']>) => Promise<number>;
345
341
  /** NOTE: Does NOT return an instance of PortadomArrayPromise */
346
342
  values: (...args: Parameters<Portadom<El, BaseEl>[]['values']>) => Promise<IterableIterator<Portadom<El, BaseEl>>>;
343
+ /**
344
+ * Similar to {@link Array.forEach}, but awaits for Promises. Items are handled one-by-one.
345
+ */
346
+ forEachAsyncSerial: (...args: [
347
+ callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
348
+ ]) => Promise<void>;
349
+ /**
350
+ * Similar to {@link Array.forEach}, but awaits for Promises. Items are handled all in parallel.
351
+ */
352
+ forEachAsyncParallel: (...args: [
353
+ callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
354
+ ]) => Promise<void>;
355
+ /**
356
+ * Similar to {@link Array.map}, but awaits for Promises. Items are handled one-by-one.
357
+ *
358
+ * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
359
+ */
360
+ mapAsyncSerial: <U>(...args: [
361
+ callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>
362
+ ]) => Promise<Awaited<U>[]>;
363
+ /**
364
+ * Similar to {@link Array.map}, but awaits for Promises. Items are handled all in parallel.
365
+ *
366
+ * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
367
+ */
368
+ mapAsyncParallel: <U>(...args: [
369
+ callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>
370
+ ]) => Promise<Awaited<U>[]>;
371
+ /**
372
+ * Similar to {@link Array.filter}, but awaits for Promises. Items are handled one-by-one.
373
+ *
374
+ * Returns the resulting array wrapped in {@link PortadomArrayPromise}.
375
+ */
376
+ filterAsyncSerial: (...args: [
377
+ predicate: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
378
+ ]) => PortadomArrayPromise<El, BaseEl>;
379
+ /**
380
+ * Similar to {@link Array.filter}, but awaits for Promises. Items are handled all in parallel.
381
+ *
382
+ * Returns the resulting array wrapped in {@link PortadomArrayPromise}.
383
+ */
384
+ filterAsyncParallel: (...args: [
385
+ callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
386
+ ]) => PortadomArrayPromise<El, BaseEl>;
387
+ /**
388
+ * Similar to {@link Array.find}, but awaits for Promises. Items are handled one-by-one.
389
+ *
390
+ * Returns the resulting item as {@link PortadomPromise}.
391
+ */
392
+ findAsyncSerial: (...args: [
393
+ callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
394
+ ]) => PortadomPromise<El, BaseEl>;
347
395
  }
348
396
  /**
349
397
  * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.createPortadomArrayPromise = exports.createPortadomPromise = void 0;
13
+ const async_1 = require("../utils/async");
13
14
  /**
14
15
  * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain
15
16
  * Portadom methods before the Promise is resolved.
@@ -167,6 +168,9 @@ const createPortadomArrayPromise = (promiseDom) => {
167
168
  const promise = Promise.resolve(promiseDom);
168
169
  return {
169
170
  promise,
171
+ ///////////////////
172
+ // ARRAY API
173
+ ///////////////////
170
174
  at: (...args) => (0, exports.createPortadomPromise)(promise.then((d) => { var _a; return (_a = d.at(...args)) !== null && _a !== void 0 ? _a : null; })),
171
175
  /** NOTE: The concat values are expected to be Portadom instances */
172
176
  concat: (...args) => (0, exports.createPortadomArrayPromise)(promise.then((d) => d.concat(...args))),
@@ -210,6 +214,34 @@ const createPortadomArrayPromise = (promiseDom) => {
210
214
  unshift: (...args) => promise.then((d) => d.unshift(...args)),
211
215
  /** NOTE: Does NOT return an instance of PortadomArrayPromise */
212
216
  values: (...args) => promise.then((d) => d.values(...args)),
217
+ ///////////////////////
218
+ // EXTENDED ARRAY API
219
+ ///////////////////////
220
+ forEachAsyncSerial: (...args) => {
221
+ return promise.then((d) => (0, async_1.serialAsyncForEach)(d, ...args));
222
+ },
223
+ forEachAsyncParallel: (...args) => {
224
+ return promise.then((d) => (0, async_1.parallelAsyncForEach)(d, ...args));
225
+ },
226
+ mapAsyncSerial: (...args) => {
227
+ return promise.then((d) => (0, async_1.serialAsyncMap)(d, ...args));
228
+ },
229
+ mapAsyncParallel: (...args) => {
230
+ return promise.then((d) => (0, async_1.parallelAsyncMap)(d, ...args));
231
+ },
232
+ filterAsyncSerial: (...args) => {
233
+ return (0, exports.createPortadomArrayPromise)(promise.then((d) => (0, async_1.serialAsyncFilter)(d, ...args)));
234
+ },
235
+ filterAsyncParallel: (...args) => {
236
+ return (0, exports.createPortadomArrayPromise)(promise.then((d) => (0, async_1.parallelAsyncFilter)(d, ...args)));
237
+ },
238
+ findAsyncSerial: (...args) => {
239
+ return (0, exports.createPortadomPromise)(promise.then((d) => __awaiter(void 0, void 0, void 0, function* () {
240
+ var _a;
241
+ const res = (_a = yield (0, async_1.serialAsyncFind)(d, ...args)) !== null && _a !== void 0 ? _a : null;
242
+ return res;
243
+ })));
244
+ }, // prettier-ignore
213
245
  }; // prettier-ignore
214
246
  };
215
247
  exports.createPortadomArrayPromise = createPortadomArrayPromise;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StrAsNumOptions } from '../utils/format';\nimport type { FormatUrlOptions } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\n\n/**\n * Common interface for working with DOM despite different environments.\n *\n * Consider these environments:\n * 1) Browser (via Playwright & Chromium) - uses Browser API to work with DOM\n * 2) Cheerio - uses own API to work with DOM\n *\n * This common interfaces makes the scraping code more portable between the two.\n */\nexport interface Portadom<El extends BaseEl, BaseEl> {\n node: El | null;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text and convert it to number */\n textAsNumber: (options?: StrAsNumOptions) => MaybePromise<number | null>;\n /** Get element's attribute */\n attr: (attrName: string, options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's attributes */\n attrs: <T extends string>(\n attrNames: T[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<Record<T, string | null>>;\n /** Get element's property */\n prop: <R = unknown>(\n /** Single or nested prop path */\n propName: MaybeArray<string>,\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's properties */\n props: <R extends any[]>(\n /** List of single or nested prop paths */\n propName: MaybeArray<string>[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's href */\n href: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's src */\n src: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's nodeName */\n nodeName: () => MaybePromise<string | null>;\n /** Get URL of website associated with the DOM */\n url: () => MaybePromise<string | null>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(map: (node: El | null) => TVal) => MaybePromise<TVal>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(selector: string) => PortadomArrayPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>() => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: () => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(otherEl: El) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n selector: string\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomPromise<El extends BaseEl, BaseEl> {\n promise: Promise<Portadom<El, BaseEl> | null>;\n node: Promise<NonNullable<El> | null>;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (\n ...args: Parameters<Portadom<El, BaseEl>['text']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['text']>>>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsUpper']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsUpper']>>>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsLower']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsLower']>>>;\n /** Get element's text and convert it to number */\n textAsNumber: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsNumber']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsNumber']>>>;\n /** Get element's attribute */\n attr: (\n ...args: Parameters<Portadom<El, BaseEl>['attr']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attr']>>>;\n /** Get element's attributes */\n attrs: <Attrs extends string>(\n ...args: [attrNames: Attrs[], options?: { allowEmpty?: boolean }]\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attrs']> | null>>;\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<Portadom<El, BaseEl>['prop']>) => Promise<R | null>;\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<Portadom<El, BaseEl>['props']>) => Promise<R | null>;\n /** Get element's href */\n href: (\n ...args: Parameters<Portadom<El, BaseEl>['href']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['href']>>>;\n /** Get element's src */\n src: (\n ...args: Parameters<Portadom<El, BaseEl>['src']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['src']>>>;\n /** Get element's nodeName */\n nodeName: (\n ...args: Parameters<Portadom<El, BaseEl>['nodeName']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['nodeName']>>>;\n /** Get URL of website associated with the DOM */\n url: (\n ...args: Parameters<Portadom<El, BaseEl>['url']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['url']>>>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [map: (node: El | null) => TVal]) => Promise<TVal | null>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findOne']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findMany']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['closest']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['parent']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['children']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: (...args: Parameters<Portadom<El, BaseEl>['remove']>) => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['root']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestor']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestorFromSelector']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl> | null>\n): PortadomPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n get node() {\n return promise.then((d) => d?.node ?? null);\n },\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (...args: Parameters<T['text']>) => promise.then((d) => d?.text(...args) ?? null),\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (...args: Parameters<T['textAsUpper']>) => promise.then((d) => d?.textAsUpper(...args) ?? null),\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (...args: Parameters<T['textAsLower']>) => promise.then((d) => d?.textAsLower(...args) ?? null),\n /** Get element's text and convert it to number */\n textAsNumber: (...args: Parameters<T['textAsNumber']>) => promise.then((d) => d?.textAsNumber(...args) ?? null),\n /** Get element's attribute */\n attr: (...args: Parameters<T['attr']>) => promise.then((d) => d?.attr(...args) ?? null),\n /** Get element's attributes */\n attrs: <Attrs extends string>(...args: [\n attrNames: Attrs[],\n options?: { allowEmpty?: boolean }\n ]) => promise.then((d) => d?.attrs<Attrs>(...args) ?? null),\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<T['prop']>) => promise.then<R | null>((d) => d?.prop<R>(...args) ?? null),\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<T['props']>) => promise.then<R | null>((d) => d?.props<R>(...args) ?? null),\n /** Get element's href */\n href: (...args: Parameters<T['href']>) => promise.then((d) => d?.href(...args) ?? null),\n /** Get element's src */\n src: (...args: Parameters<T['src']>) => promise.then((d) => d?.src(...args) ?? null),\n /** Get element's nodeName */\n nodeName: (...args: Parameters<T['nodeName']>) => promise.then((d) => d?.nodeName(...args) ?? null),\n /** Get URL of website associated with the DOM */\n url: (...args: Parameters<T['url']>) => promise.then((d) => d?.url(...args) ?? null),\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [\n map: (node: El | null) => TVal\n ]) => promise.then<TVal | null>((d) => d?.map<TVal>(...args) ?? null),\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(...args: Parameters<T['findOne']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.findOne<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(...args: Parameters<T['findMany']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.findMany<TNewEl>(...args).promise : [])\n );\n },\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(...args: Parameters<T['closest']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.closest<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(...args: Parameters<T['parent']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.parent<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(...args: Parameters<T['children']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.children<TNewEl>(...args).promise : [])\n );\n },\n /** Get remove the element */\n remove: (...args: Parameters<T['remove']>) => promise.then((d) => d?.remove(...args)),\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(...args: Parameters<T['root']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.root<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(...args: [\n otherEl: El\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestor<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(...args: [\n selector: string\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestorFromSelector<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n } satisfies PortadomPromise<El, BaseEl>; // prettier-ignore\n};\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomArrayPromise<El extends BaseEl, BaseEl> {\n /** Wrapped Promise of an array of {@link Portadom} instances */\n promise: Promise<Portadom<El, BaseEl>[]>;\n /** Wrapper for {@link Array.at} that returns the resulting item as {@link PortadomPromise}. */\n at: (...args: Parameters<Portadom<El, BaseEl>[]['at']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.concat} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n concat: (\n ...args: Parameters<Portadom<El, BaseEl>[]['concat']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.copyWithin} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n copyWithin: (\n ...args: Parameters<Portadom<El, BaseEl>[]['copyWithin']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Does NOT return an instance of {@link PortadomArrayPromise}\n */\n entries: (\n ...args: Parameters<Portadom<El, BaseEl>[]['entries']>\n ) => Promise<IterableIterator<[number, Portadom<El, BaseEl>]>>;\n /** Wrapper for {@link Array.every}. */\n every: (...args: Parameters<Portadom<El, BaseEl>[]['every']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.fill}.\n *\n * NOTE: Fill values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}.\n *\n * NOTE2: Unlike {@link Array.fill}, this option doesn't allow to specify `start` and `end`.\n */\n fill: <U>(...args: [value: U]) => Promise<U[]>;\n /**\n * Wrapper for {@link Array.filter} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filter: (\n ...args: Parameters<Portadom<El, BaseEl>[]['filter']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.find} that returns the resulting item as {@link PortadomPromise}. */\n find: (...args: Parameters<Portadom<El, BaseEl>[]['find']>) => PortadomPromise<El, BaseEl>;\n /** Wrapper for {@link Array.findIndex}. */\n findIndex: (...args: Parameters<Portadom<El, BaseEl>[]['findIndex']>) => Promise<number>;\n /** Wrapper for {@link Array.flat} that returns the resulting array wrapped in {@link PortadomArrayPromise}. */\n flat: (...args: Parameters<Portadom<El, BaseEl>[]['flat']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.forEach}. */\n forEach: (...args: Parameters<Portadom<El, BaseEl>[]['forEach']>) => Promise<void>;\n /** Wrapper for {@link Array.includes}. */\n includes: (...args: Parameters<Portadom<El, BaseEl>[]['includes']>) => Promise<boolean>;\n /** Wrapper for {@link Array.indexOf}. */\n indexOf: (...args: Parameters<Portadom<El, BaseEl>[]['indexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.join}. */\n join: (...args: Parameters<Portadom<El, BaseEl>[]['join']>) => Promise<string>;\n /** Wrapper for {@link Array.keys}. */\n keys: (...args: Parameters<Portadom<El, BaseEl>[]['keys']>) => Promise<IterableIterator<number>>;\n /** Wrapper for {@link Array.lastIndexOf}. */\n lastIndexOf: (...args: Parameters<Portadom<El, BaseEl>[]['lastIndexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.length}. */\n length: Promise<number>;\n /**\n * Wrapper for {@link Array.map}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.pop} that returns the resulting item as {@link PortadomPromise}. */\n pop: (...args: Parameters<Portadom<El, BaseEl>[]['pop']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.push}.\n *\n * NOTE: The pushed values are expected to be {@link Portadom} instances.\n */\n push: (...args: Parameters<Portadom<El, BaseEl>[]['push']>) => Promise<number>;\n /**\n * Wrapper for {@link Array.reduce}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduce: {\n (callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n (callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n <U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;\n }; // prettier-ignore\n /**\n * Wrapper for {@link Array.reduceRight}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduceRight: {\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;\n }; // prettier-ignore\n /**\n * Wrapper for {@link Array.reverse} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n reverse: (\n ...args: Parameters<Portadom<El, BaseEl>[]['reverse']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.shift} that returns the resulting item as {@link PortadomPromise}. */\n shift: (...args: Parameters<Portadom<El, BaseEl>[]['shift']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.slice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n slice: (...args: Parameters<Portadom<El, BaseEl>[]['slice']>) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.some}. */\n some: (...args: Parameters<Portadom<El, BaseEl>[]['some']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.sort} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n sort: (...args: Parameters<Portadom<El, BaseEl>[]['sort']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.splice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n splice: (\n ...args: Parameters<Portadom<El, BaseEl>[]['splice']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.unshift}.\n *\n * NOTE: The added values are expected to be {@link Portadom} instances.\n */\n unshift: (...args: Parameters<Portadom<El, BaseEl>[]['unshift']>) => Promise<number>;\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (\n ...args: Parameters<Portadom<El, BaseEl>[]['values']>\n ) => Promise<IterableIterator<Portadom<El, BaseEl>>>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomArrayPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl>[]>\n): PortadomArrayPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n at: (...args: Parameters<T[]['at']>) => createPortadomPromise(\n promise.then((d) => d.at(...args) ?? null)\n ),\n /** NOTE: The concat values are expected to be Portadom instances */\n concat: (...args: Parameters<T[]['concat']>) => createPortadomArrayPromise(\n promise.then((d) => d.concat(...args))\n ),\n copyWithin: (...args: Parameters<T[]['copyWithin']>) => createPortadomArrayPromise(\n promise.then((d) => d.copyWithin(...args))\n ),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n entries: (...args: Parameters<T[]['entries']>) => promise.then((d) => d.entries(...args)),\n every: (...args: Parameters<T[]['every']>) => promise.then((d) => d.every(...args)),\n /** NOTE: The fill value is expected to be a Portadom instance */\n fill: <U>(...args: [value: U]) => promise.then((d) => d.fill(...(args as [any])) as U[]),\n filter: (...args: Parameters<T[]['filter']>) => createPortadomArrayPromise(\n promise.then((d) => d.filter(...args))\n ),\n find: (...args: Parameters<T[]['find']>) => createPortadomPromise(\n promise.then((d) => d.find(...args) ?? null)\n ),\n findIndex: (...args: Parameters<T[]['findIndex']>) => promise.then((d) => d.findIndex(...args)),\n flat: (...args: Parameters<T[]['flat']>) => createPortadomArrayPromise(\n promise.then((d) => d.flat(...args))\n ),\n /** NOTE: Items are expected to be mapped to Portadom instances */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => promise.then<U[]>((d) => d.flatMap<U, This>(...args)),\n forEach: (...args: Parameters<T[]['forEach']>) => promise.then((d) => d.forEach(...args)),\n includes: (...args: Parameters<T[]['includes']>) => promise.then((d) => d.includes(...args)),\n indexOf: (...args: Parameters<T[]['indexOf']>) => promise.then((d) => d.indexOf(...args)),\n join: (...args: Parameters<T[]['join']>) => promise.then((d) => d.join(...args)),\n keys: (...args: Parameters<T[]['keys']>) => promise.then((d) => d.keys(...args)),\n lastIndexOf: (...args: Parameters<T[]['lastIndexOf']>) => promise.then((d) => d.lastIndexOf(...args)),\n get length () {\n return promise.then((d) => d.length);\n },\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => promise.then<U[]>((d) => d.map(...args)),\n pop: (...args: Parameters<T[]['pop']>) => createPortadomPromise(\n promise.then((d) => d.pop(...args) ?? null)\n ),\n push: (...args: Parameters<T[]['push']>) => promise.then((d) => d.push(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduce has a complex type, so let the type definition handle that\n reduce: (...args: any[]) => promise.then((d) => d.reduce(...args as [any])),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduceRight has a complex type, so let the type definition handle that\n reduceRight: ((...args: any[]) => promise.then<any>((d) => d.reduceRight(...args as [any]))) as any as PortadomArrayPromise<El, BaseEl>['reduceRight'],\n reverse: (...args: Parameters<T[]['reverse']>) => createPortadomArrayPromise(\n promise.then((d) => d.reverse(...args))\n ),\n shift: (...args: Parameters<T[]['shift']>) => createPortadomPromise(\n promise.then((d) => d.shift(...args) ?? null)\n ),\n slice: (...args: Parameters<T[]['slice']>) => createPortadomArrayPromise(\n promise.then((d) => d.slice(...args))\n ),\n some: (...args: Parameters<T[]['some']>) => promise.then((d) => d.some(...args)),\n sort: (...args: Parameters<T[]['sort']>) => createPortadomArrayPromise(\n promise.then((d) => d.sort(...args))\n ),\n splice: (...args: Parameters<T[]['splice']>) => createPortadomArrayPromise(\n promise.then((d) => d.splice(...args))\n ),\n unshift: (...args: Parameters<T[]['unshift']>) => promise.then((d) => d.unshift(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (...args: Parameters<T[]['values']>) => promise.then((d) => d.values(...args)),\n } satisfies PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,0CAQwB;AAwNxB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,MAAM,qBAAqB,GAAG,CACnC,UAAqD,EACxB,EAAE;IAG/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO;QACP,IAAI,IAAI;YACN,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,mCAAI,IAAI,CAAA,EAAA,CAAC,CAAC;QAC9C,CAAC;QAED,uBAAuB;QACvB,oBAAoB;QACpB,uBAAuB;QAEvB,mCAAmC;QACnC,IAAI,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACvF,gDAAgD;QAChD,WAAW,EAAE,CAAC,GAAG,IAAkC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,WAAW,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC5G,gDAAgD;QAChD,WAAW,EAAE,CAAC,GAAG,IAAkC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,WAAW,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC5G,kDAAkD;QAClD,YAAY,EAAE,CAAC,GAAG,IAAmC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,YAAY,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC/G,8BAA8B;QAC9B,IAAI,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACvF,+BAA+B;QAC/B,KAAK,EAAE,CAAuB,GAAG,IAGhC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAQ,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC3D,6BAA6B;QAC7B,IAAI,EAAE,CAAc,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAW,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAI,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACjH,+BAA+B;QAC/B,KAAK,EAAE,CAAkB,GAAG,IAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAW,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAI,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACxH,yBAAyB;QACzB,IAAI,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACvF,wBAAwB;QACxB,GAAG,EAAE,CAAC,GAAG,IAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACpF,6BAA6B;QAC7B,QAAQ,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACnG,iDAAiD;QACjD,GAAG,EAAE,CAAC,GAAG,IAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACpF,4CAA4C;QAC5C,GAAG,EAAE,CAAO,GAAG,IAEd,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAc,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,CAAO,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAErE,uBAAuB;QACvB,kBAAkB;QAClB,uBAAuB;QAEvB,oDAAoD;QACpD,OAAO,EAAE,CAA6B,GAAG,IAA8B,EAAE,EAAE;YACzE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC9D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD,gDAAgD;QAChD,QAAQ,EAAE,CAA6B,GAAG,IAA+B,EAAE,EAAE;YAC3E,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAA6B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9F,CAAC;QACJ,CAAC;QACD,8DAA8D;QAC9D,OAAO,EAAE,CAA6B,GAAG,IAA8B,EAAE,EAAE;YACzE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC9D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD,2BAA2B;QAC3B,MAAM,EAAE,CAA6B,GAAG,IAA6B,EAAE,EAAE;YACvE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC7D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD,6BAA6B;QAC7B,QAAQ,EAAE,CAA6B,GAAG,IAA+B,EAAE,EAAE;YAC3E,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAA6B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9F,CAAC;QACJ,CAAC;QACD,6BAA6B;QAC7B,MAAM,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACrF,uBAAuB;QACvB,IAAI,EAAE,CAA6B,GAAG,IAA2B,EAAE,EAAE;YACnE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC3D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD;;;WAGG;QACH,iBAAiB,EAAE,CAA6B,GAAG,IAElD,EAAE,EAAE;YACH,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,iBAAiB,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBACxE,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD;;;;WAIG;QACH,6BAA6B,EAAE,CAA6B,GAAG,IAE9D,EAAE,EAAE;YACH,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,6BAA6B,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBACpF,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;KACoC,CAAC,CAAC,kBAAkB;AAC7D,CAAC,CAAC;AApIW,QAAA,qBAAqB,yBAoIhC;AA4OF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,MAAM,0BAA0B,GAAG,CACxC,UAAgD,EACd,EAAE;IAGpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO;QAEP,mBAAmB;QACnB,YAAY;QACZ,mBAAmB;QAEnB,EAAE,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC3C;QACD,oEAAoE;QACpE,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CACvC;QACD,UAAU,EAAE,CAAC,GAAG,IAAmC,EAAE,EAAE,CAAC,IAAA,kCAA0B,EAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAC3C;QACD,gEAAgE;QAChE,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,KAAK,EAAE,CAAC,GAAG,IAA8B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACnF,iEAAiE;QACjE,IAAI,EAAE,CAAI,GAAG,IAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAI,IAAc,CAAQ,CAAC;QACxF,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CACvC;QACD,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC7C;QACD,SAAS,EAAE,CAAC,GAAG,IAAkC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/F,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CACrC;QACD,kEAAkE;QAClE,OAAO,EAAE,CAAU,GAAG,IAGrB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAU,GAAG,IAAI,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,QAAQ,EAAE,CAAC,GAAG,IAAiC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5F,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,WAAW,EAAE,CAAC,GAAG,IAAoC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;QACrG,IAAI,MAAM;YACR,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,gEAAgE;QAChE,GAAG,EAAE,CAAI,GAAG,IAGX,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9C,GAAG,EAAE,CAAC,GAAG,IAA4B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC5C;QACD,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,gEAAgE;QAChE,0EAA0E;QAC1E,MAAM,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAa,CAAC,CAAC;QAC3E,gEAAgE;QAChE,+EAA+E;QAC/E,WAAW,EAAE,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,IAAa,CAAC,CAAC,CAA2D;QACtJ,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,IAAA,kCAA0B,EAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CACxC;QACD,KAAK,EAAE,CAAC,GAAG,IAA8B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC9C;QACD,KAAK,EAAE,CAAC,GAAG,IAA8B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CACtC;QACD,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CACrC;QACD,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CACvC;QACD,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,gEAAgE;QAChE,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAEtF,uBAAuB;QACvB,qBAAqB;QACrB,uBAAuB;QAEvB,kBAAkB,EAAE,CAAC,GAAG,IAAwE,EAAE,EAAE;YAClG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAkB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,oBAAoB,EAAE,CAAC,GAAG,IAA0E,EAAE,EAAE;YACtG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,4BAAoB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,cAAc,EAAE,CAAI,GAAG,IAEtB,EAAE,EAAE;YACH,OAAO,OAAO,CAAC,IAAI,CAAe,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAmC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,gBAAgB,EAAE,CAAI,GAAG,IAExB,EAAE,EAAE;YACH,OAAO,OAAO,CAAC,IAAI,CAAe,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,wBAAgB,EAAmC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3G,CAAC;QACD,iBAAiB,EAAE,CAAC,GAAG,IAAuE,EAAE,EAAE;YAChG,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,yBAAiB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CACnD,CAAC;QACJ,CAAC;QACD,mBAAmB,EAAE,CAAC,GAAG,IAAyE,EAAE,EAAE;YACpG,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,2BAAmB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CACrD,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,CAAC,GAAG,IAAqE,EAAE,EAAE;YAC5F,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAC,CAAO,CAAC,EAAE,EAAE;;gBACvB,MAAM,GAAG,GAAG,MAAA,MAAM,IAAA,uBAAe,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAC;gBACtD,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC,EAAE,kBAAkB;KACqB,CAAC,CAAC,kBAAkB;AAClE,CAAC,CAAC;AA9HW,QAAA,0BAA0B,8BA8HrC","sourcesContent":["import type { StrAsNumOptions } from '../utils/format';\nimport type { FormatUrlOptions } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\nimport {\n parallelAsyncFilter,\n parallelAsyncForEach,\n parallelAsyncMap,\n serialAsyncFilter,\n serialAsyncFind,\n serialAsyncForEach,\n serialAsyncMap,\n} from '../utils/async';\n\n/**\n * Common interface for working with DOM despite different environments.\n *\n * Consider these environments:\n * 1) Browser (via Playwright & Chromium) - uses Browser API to work with DOM\n * 2) Cheerio - uses own API to work with DOM\n *\n * This common interfaces makes the scraping code more portable between the two.\n */\nexport interface Portadom<El extends BaseEl, BaseEl> {\n node: El | null;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text and convert it to number */\n textAsNumber: (options?: StrAsNumOptions) => MaybePromise<number | null>;\n /** Get element's attribute */\n attr: (attrName: string, options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's attributes */\n attrs: <T extends string>(\n attrNames: T[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<Record<T, string | null>>;\n /** Get element's property */\n prop: <R = unknown>(\n /** Single or nested prop path */\n propName: MaybeArray<string>,\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's properties */\n props: <R extends any[]>(\n /** List of single or nested prop paths */\n propName: MaybeArray<string>[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's href */\n href: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's src */\n src: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's nodeName */\n nodeName: () => MaybePromise<string | null>;\n /** Get URL of website associated with the DOM */\n url: () => MaybePromise<string | null>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(map: (node: El | null) => TVal) => MaybePromise<TVal>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(selector: string) => PortadomArrayPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>() => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: () => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(otherEl: El) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n selector: string\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomPromise<El extends BaseEl, BaseEl> {\n promise: Promise<Portadom<El, BaseEl> | null>;\n node: Promise<NonNullable<El> | null>;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (\n ...args: Parameters<Portadom<El, BaseEl>['text']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['text']>>>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsUpper']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsUpper']>>>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsLower']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsLower']>>>;\n /** Get element's text and convert it to number */\n textAsNumber: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsNumber']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsNumber']>>>;\n /** Get element's attribute */\n attr: (\n ...args: Parameters<Portadom<El, BaseEl>['attr']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attr']>>>;\n /** Get element's attributes */\n attrs: <Attrs extends string>(\n ...args: [attrNames: Attrs[], options?: { allowEmpty?: boolean }]\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attrs']> | null>>;\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<Portadom<El, BaseEl>['prop']>) => Promise<R | null>;\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<Portadom<El, BaseEl>['props']>) => Promise<R | null>;\n /** Get element's href */\n href: (\n ...args: Parameters<Portadom<El, BaseEl>['href']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['href']>>>;\n /** Get element's src */\n src: (\n ...args: Parameters<Portadom<El, BaseEl>['src']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['src']>>>;\n /** Get element's nodeName */\n nodeName: (\n ...args: Parameters<Portadom<El, BaseEl>['nodeName']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['nodeName']>>>;\n /** Get URL of website associated with the DOM */\n url: (\n ...args: Parameters<Portadom<El, BaseEl>['url']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['url']>>>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [map: (node: El | null) => TVal]) => Promise<TVal | null>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findOne']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findMany']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['closest']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['parent']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['children']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: (...args: Parameters<Portadom<El, BaseEl>['remove']>) => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['root']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestor']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestorFromSelector']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl> | null>\n): PortadomPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n get node() {\n return promise.then((d) => d?.node ?? null);\n },\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (...args: Parameters<T['text']>) => promise.then((d) => d?.text(...args) ?? null),\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (...args: Parameters<T['textAsUpper']>) => promise.then((d) => d?.textAsUpper(...args) ?? null),\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (...args: Parameters<T['textAsLower']>) => promise.then((d) => d?.textAsLower(...args) ?? null),\n /** Get element's text and convert it to number */\n textAsNumber: (...args: Parameters<T['textAsNumber']>) => promise.then((d) => d?.textAsNumber(...args) ?? null),\n /** Get element's attribute */\n attr: (...args: Parameters<T['attr']>) => promise.then((d) => d?.attr(...args) ?? null),\n /** Get element's attributes */\n attrs: <Attrs extends string>(...args: [\n attrNames: Attrs[],\n options?: { allowEmpty?: boolean }\n ]) => promise.then((d) => d?.attrs<Attrs>(...args) ?? null),\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<T['prop']>) => promise.then<R | null>((d) => d?.prop<R>(...args) ?? null),\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<T['props']>) => promise.then<R | null>((d) => d?.props<R>(...args) ?? null),\n /** Get element's href */\n href: (...args: Parameters<T['href']>) => promise.then((d) => d?.href(...args) ?? null),\n /** Get element's src */\n src: (...args: Parameters<T['src']>) => promise.then((d) => d?.src(...args) ?? null),\n /** Get element's nodeName */\n nodeName: (...args: Parameters<T['nodeName']>) => promise.then((d) => d?.nodeName(...args) ?? null),\n /** Get URL of website associated with the DOM */\n url: (...args: Parameters<T['url']>) => promise.then((d) => d?.url(...args) ?? null),\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [\n map: (node: El | null) => TVal\n ]) => promise.then<TVal | null>((d) => d?.map<TVal>(...args) ?? null),\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(...args: Parameters<T['findOne']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.findOne<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(...args: Parameters<T['findMany']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.findMany<TNewEl>(...args).promise : [])\n );\n },\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(...args: Parameters<T['closest']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.closest<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(...args: Parameters<T['parent']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.parent<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(...args: Parameters<T['children']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.children<TNewEl>(...args).promise : [])\n );\n },\n /** Get remove the element */\n remove: (...args: Parameters<T['remove']>) => promise.then((d) => d?.remove(...args)),\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(...args: Parameters<T['root']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.root<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(...args: [\n otherEl: El\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestor<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(...args: [\n selector: string\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestorFromSelector<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n } satisfies PortadomPromise<El, BaseEl>; // prettier-ignore\n};\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomArrayPromise<El extends BaseEl, BaseEl> {\n /** Wrapped Promise of an array of {@link Portadom} instances */\n promise: Promise<Portadom<El, BaseEl>[]>;\n\n ///////////////////\n // ARRAY API\n ///////////////////\n\n /** Wrapper for {@link Array.at} that returns the resulting item as {@link PortadomPromise}. */\n at: (...args: Parameters<Portadom<El, BaseEl>[]['at']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.concat} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n concat: (\n ...args: Parameters<Portadom<El, BaseEl>[]['concat']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.copyWithin} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n copyWithin: (\n ...args: Parameters<Portadom<El, BaseEl>[]['copyWithin']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Does NOT return an instance of {@link PortadomArrayPromise}\n */\n entries: (\n ...args: Parameters<Portadom<El, BaseEl>[]['entries']>\n ) => Promise<IterableIterator<[number, Portadom<El, BaseEl>]>>;\n /** Wrapper for {@link Array.every}. */\n every: (...args: Parameters<Portadom<El, BaseEl>[]['every']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.fill}.\n *\n * NOTE: Fill values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}.\n *\n * NOTE2: Unlike {@link Array.fill}, this option doesn't allow to specify `start` and `end`.\n */\n fill: <U>(...args: [value: U]) => Promise<U[]>;\n /**\n * Wrapper for {@link Array.filter} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filter: (\n ...args: Parameters<Portadom<El, BaseEl>[]['filter']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.find} that returns the resulting item as {@link PortadomPromise}. */\n find: (...args: Parameters<Portadom<El, BaseEl>[]['find']>) => PortadomPromise<El, BaseEl>;\n /** Wrapper for {@link Array.findIndex}. */\n findIndex: (...args: Parameters<Portadom<El, BaseEl>[]['findIndex']>) => Promise<number>;\n /** Wrapper for {@link Array.flat} that returns the resulting array wrapped in {@link PortadomArrayPromise}. */\n flat: (...args: Parameters<Portadom<El, BaseEl>[]['flat']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.forEach}. */\n forEach: (...args: Parameters<Portadom<El, BaseEl>[]['forEach']>) => Promise<void>;\n /** Wrapper for {@link Array.includes}. */\n includes: (...args: Parameters<Portadom<El, BaseEl>[]['includes']>) => Promise<boolean>;\n /** Wrapper for {@link Array.indexOf}. */\n indexOf: (...args: Parameters<Portadom<El, BaseEl>[]['indexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.join}. */\n join: (...args: Parameters<Portadom<El, BaseEl>[]['join']>) => Promise<string>;\n /** Wrapper for {@link Array.keys}. */\n keys: (...args: Parameters<Portadom<El, BaseEl>[]['keys']>) => Promise<IterableIterator<number>>;\n /** Wrapper for {@link Array.lastIndexOf}. */\n lastIndexOf: (...args: Parameters<Portadom<El, BaseEl>[]['lastIndexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.length}. */\n length: Promise<number>;\n /**\n * Wrapper for {@link Array.map}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.pop} that returns the resulting item as {@link PortadomPromise}. */\n pop: (...args: Parameters<Portadom<El, BaseEl>[]['pop']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.push}.\n *\n * NOTE: The pushed values are expected to be {@link Portadom} instances.\n */\n push: (...args: Parameters<Portadom<El, BaseEl>[]['push']>) => Promise<number>;\n /**\n * Wrapper for {@link Array.reduce}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduce<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>; // prettier-ignore\n /**\n * Wrapper for {@link Array.reduceRight}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>; // prettier-ignore\n /**\n * Wrapper for {@link Array.reverse} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n reverse: (\n ...args: Parameters<Portadom<El, BaseEl>[]['reverse']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.shift} that returns the resulting item as {@link PortadomPromise}. */\n shift: (...args: Parameters<Portadom<El, BaseEl>[]['shift']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.slice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n slice: (...args: Parameters<Portadom<El, BaseEl>[]['slice']>) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.some}. */\n some: (...args: Parameters<Portadom<El, BaseEl>[]['some']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.sort} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n sort: (...args: Parameters<Portadom<El, BaseEl>[]['sort']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.splice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n splice: (\n ...args: Parameters<Portadom<El, BaseEl>[]['splice']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.unshift}.\n *\n * NOTE: The added values are expected to be {@link Portadom} instances.\n */\n unshift: (...args: Parameters<Portadom<El, BaseEl>[]['unshift']>) => Promise<number>;\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (\n ...args: Parameters<Portadom<El, BaseEl>[]['values']>\n ) => Promise<IterableIterator<Portadom<El, BaseEl>>>;\n\n ///////////////////////\n // EXTENDED ARRAY API\n ///////////////////////\n\n /**\n * Similar to {@link Array.forEach}, but awaits for Promises. Items are handled one-by-one.\n */\n forEachAsyncSerial: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => Promise<void>; // prettier-ignore\n\n /**\n * Similar to {@link Array.forEach}, but awaits for Promises. Items are handled all in parallel.\n */\n forEachAsyncParallel: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => Promise<void>; // prettier-ignore\n\n /**\n * Similar to {@link Array.map}, but awaits for Promises. Items are handled one-by-one.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n mapAsyncSerial: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => Promise<Awaited<U>[]>; // prettier-ignore\n\n /**\n * Similar to {@link Array.map}, but awaits for Promises. Items are handled all in parallel.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n mapAsyncParallel: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => Promise<Awaited<U>[]>; // prettier-ignore\n\n /**\n * Similar to {@link Array.filter}, but awaits for Promises. Items are handled one-by-one.\n *\n * Returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filterAsyncSerial: (...args: [\n predicate: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n\n /**\n * Similar to {@link Array.filter}, but awaits for Promises. Items are handled all in parallel.\n *\n * Returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filterAsyncParallel: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n\n /**\n * Similar to {@link Array.find}, but awaits for Promises. Items are handled one-by-one.\n *\n * Returns the resulting item as {@link PortadomPromise}.\n */\n findAsyncSerial: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => PortadomPromise<El, BaseEl>; // prettier-ignore\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomArrayPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl>[]>\n): PortadomArrayPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n\n ///////////////////\n // ARRAY API\n ///////////////////\n\n at: (...args: Parameters<T[]['at']>) => createPortadomPromise(\n promise.then((d) => d.at(...args) ?? null)\n ),\n /** NOTE: The concat values are expected to be Portadom instances */\n concat: (...args: Parameters<T[]['concat']>) => createPortadomArrayPromise(\n promise.then((d) => d.concat(...args))\n ),\n copyWithin: (...args: Parameters<T[]['copyWithin']>) => createPortadomArrayPromise(\n promise.then((d) => d.copyWithin(...args))\n ),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n entries: (...args: Parameters<T[]['entries']>) => promise.then((d) => d.entries(...args)),\n every: (...args: Parameters<T[]['every']>) => promise.then((d) => d.every(...args)),\n /** NOTE: The fill value is expected to be a Portadom instance */\n fill: <U>(...args: [value: U]) => promise.then((d) => d.fill(...(args as [any])) as U[]),\n filter: (...args: Parameters<T[]['filter']>) => createPortadomArrayPromise(\n promise.then((d) => d.filter(...args))\n ),\n find: (...args: Parameters<T[]['find']>) => createPortadomPromise(\n promise.then((d) => d.find(...args) ?? null)\n ),\n findIndex: (...args: Parameters<T[]['findIndex']>) => promise.then((d) => d.findIndex(...args)),\n flat: (...args: Parameters<T[]['flat']>) => createPortadomArrayPromise(\n promise.then((d) => d.flat(...args))\n ),\n /** NOTE: Items are expected to be mapped to Portadom instances */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => promise.then<U[]>((d) => d.flatMap<U, This>(...args)),\n forEach: (...args: Parameters<T[]['forEach']>) => promise.then((d) => d.forEach(...args)),\n includes: (...args: Parameters<T[]['includes']>) => promise.then((d) => d.includes(...args)),\n indexOf: (...args: Parameters<T[]['indexOf']>) => promise.then((d) => d.indexOf(...args)),\n join: (...args: Parameters<T[]['join']>) => promise.then((d) => d.join(...args)),\n keys: (...args: Parameters<T[]['keys']>) => promise.then((d) => d.keys(...args)),\n lastIndexOf: (...args: Parameters<T[]['lastIndexOf']>) => promise.then((d) => d.lastIndexOf(...args)),\n get length () {\n return promise.then((d) => d.length);\n },\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => promise.then<U[]>((d) => d.map(...args)),\n pop: (...args: Parameters<T[]['pop']>) => createPortadomPromise(\n promise.then((d) => d.pop(...args) ?? null)\n ),\n push: (...args: Parameters<T[]['push']>) => promise.then((d) => d.push(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduce has a complex type, so let the type definition handle that\n reduce: (...args: any[]) => promise.then((d) => d.reduce(...args as [any])),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduceRight has a complex type, so let the type definition handle that\n reduceRight: ((...args: any[]) => promise.then<any>((d) => d.reduceRight(...args as [any]))) as any as PortadomArrayPromise<El, BaseEl>['reduceRight'],\n reverse: (...args: Parameters<T[]['reverse']>) => createPortadomArrayPromise(\n promise.then((d) => d.reverse(...args))\n ),\n shift: (...args: Parameters<T[]['shift']>) => createPortadomPromise(\n promise.then((d) => d.shift(...args) ?? null)\n ),\n slice: (...args: Parameters<T[]['slice']>) => createPortadomArrayPromise(\n promise.then((d) => d.slice(...args))\n ),\n some: (...args: Parameters<T[]['some']>) => promise.then((d) => d.some(...args)),\n sort: (...args: Parameters<T[]['sort']>) => createPortadomArrayPromise(\n promise.then((d) => d.sort(...args))\n ),\n splice: (...args: Parameters<T[]['splice']>) => createPortadomArrayPromise(\n promise.then((d) => d.splice(...args))\n ),\n unshift: (...args: Parameters<T[]['unshift']>) => promise.then((d) => d.unshift(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (...args: Parameters<T[]['values']>) => promise.then((d) => d.values(...args)),\n\n ///////////////////////\n // EXTENDED ARRAY API\n ///////////////////////\n\n forEachAsyncSerial: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['forEachAsyncSerial']>) => {\n return promise.then((d) => serialAsyncForEach(d, ...args));\n }, // prettier-ignore\n forEachAsyncParallel: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['forEachAsyncParallel']>) => {\n return promise.then((d) => parallelAsyncForEach(d, ...args));\n }, // prettier-ignore\n mapAsyncSerial: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => {\n return promise.then<Awaited<U>[]>((d) => serialAsyncMap<Portadom<El, BaseEl>, Awaited<U>>(d, ...args));\n }, // prettier-ignore\n mapAsyncParallel: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => {\n return promise.then<Awaited<U>[]>((d) => parallelAsyncMap<Portadom<El, BaseEl>, Awaited<U>>(d, ...args));\n }, // prettier-ignore\n filterAsyncSerial: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['filterAsyncSerial']>) => {\n return createPortadomArrayPromise(\n promise.then((d) => serialAsyncFilter(d, ...args))\n );\n }, // prettier-ignore\n filterAsyncParallel: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['filterAsyncParallel']>) => {\n return createPortadomArrayPromise(\n promise.then((d) => parallelAsyncFilter(d, ...args))\n );\n }, // prettier-ignore\n findAsyncSerial: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['findAsyncSerial']>) => {\n return createPortadomPromise(\n promise.then(async (d) => {\n const res = await serialAsyncFind(d, ...args) ?? null;\n return res;\n })\n );\n }, // prettier-ignore\n } satisfies PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n};\n"]}
@@ -1,7 +1,11 @@
1
1
  import type { MaybePromise } from '../utils/types';
2
2
  export declare const serialAsyncMap: <T, R>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<R>) => Promise<R[]>;
3
+ export declare const parallelAsyncMap: <T, R>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<R>) => Promise<(Awaited<R> | Awaited<R>)[]>;
3
4
  export declare const serialAsyncFilter: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<any>) => Promise<T[]>;
5
+ export declare const parallelAsyncFilter: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<unknown>) => Promise<T[]>;
4
6
  export declare const serialAsyncFind: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<any>) => Promise<T | undefined>;
7
+ export declare const serialAsyncForEach: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<any>) => Promise<void>;
8
+ export declare const parallelAsyncForEach: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<unknown>) => Promise<void>;
5
9
  export interface RetryAsyncOptions {
6
10
  /** Number of retries after the function call fails */
7
11
  maxRetries?: number;
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.retryAsync = exports.wait = exports.serialAsyncFind = exports.serialAsyncFilter = exports.serialAsyncMap = void 0;
12
+ exports.retryAsync = exports.wait = exports.parallelAsyncForEach = exports.serialAsyncForEach = exports.serialAsyncFind = exports.parallelAsyncFilter = exports.serialAsyncFilter = exports.parallelAsyncMap = exports.serialAsyncMap = void 0;
13
13
  const serialAsyncMap = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
14
14
  const results = yield inputArr.reduce((aggResultPromise, input, index) => __awaiter(void 0, void 0, void 0, function* () {
15
15
  const agg = yield aggResultPromise;
@@ -20,6 +20,11 @@ const serialAsyncMap = (inputArr, fn) => __awaiter(void 0, void 0, void 0, funct
20
20
  return results;
21
21
  });
22
22
  exports.serialAsyncMap = serialAsyncMap;
23
+ const parallelAsyncMap = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const results = yield Promise.all(inputArr.map(fn));
25
+ return results;
26
+ });
27
+ exports.parallelAsyncMap = parallelAsyncMap;
23
28
  const serialAsyncFilter = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
24
29
  const results = yield inputArr.reduce((aggResultPromise, input, index) => __awaiter(void 0, void 0, void 0, function* () {
25
30
  const agg = yield aggResultPromise;
@@ -31,6 +36,12 @@ const serialAsyncFilter = (inputArr, fn) => __awaiter(void 0, void 0, void 0, fu
31
36
  return results;
32
37
  });
33
38
  exports.serialAsyncFilter = serialAsyncFilter;
39
+ const parallelAsyncFilter = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
40
+ const filterResults = yield Promise.all(inputArr.map(fn));
41
+ const finalArr = inputArr.filter((val, index) => filterResults[index]);
42
+ return finalArr;
43
+ });
44
+ exports.parallelAsyncFilter = parallelAsyncFilter;
34
45
  const serialAsyncFind = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
35
46
  let index = 0;
36
47
  for (const input of inputArr) {
@@ -41,6 +52,20 @@ const serialAsyncFind = (inputArr, fn) => __awaiter(void 0, void 0, void 0, func
41
52
  }
42
53
  });
43
54
  exports.serialAsyncFind = serialAsyncFind;
55
+ const serialAsyncForEach = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
56
+ let index = 0;
57
+ for (const input of inputArr) {
58
+ yield fn(input, index);
59
+ index++;
60
+ }
61
+ });
62
+ exports.serialAsyncForEach = serialAsyncForEach;
63
+ const parallelAsyncForEach = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
64
+ const promises = [];
65
+ inputArr.forEach((val, index) => promises.push(Promise.resolve(fn(val, index))));
66
+ yield Promise.all(promises);
67
+ });
68
+ exports.parallelAsyncForEach = parallelAsyncForEach;
44
69
  /** @param {number} ms Number of ms to wait */
45
70
  const wait = (ms) => new Promise((res) => setTimeout(res, ms));
46
71
  exports.wait = wait;
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/utils/async.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEO,MAAM,cAAc,GAAG,CAC5B,QAAa,EACb,EAA+C,EAC/C,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAO,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7E,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAS,CAAC,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAA,CAAC;AAZW,QAAA,cAAc,kBAYzB;AAEK,MAAM,iBAAiB,GAAG,CAC/B,QAAa,EACb,EAAiD,EACjD,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAO,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7E,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAS,CAAC,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAA,CAAC;AAZW,QAAA,iBAAiB,qBAY5B;AAEK,MAAM,eAAe,GAAG,CAC7B,QAAa,EACb,EAAiD,EACjD,EAAE;IACF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM;YAAE,OAAO,KAAK,CAAC;QACzB,KAAK,EAAE,CAAC;KACT;AACH,CAAC,CAAA,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAWF,8CAA8C;AACvC,MAAM,IAAI,GAAG,CAAC,EAAW,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAAlE,QAAA,IAAI,QAA8D;AAE/E,gFAAgF;AACzE,MAAM,UAAU,GAAG,CACxB,EAAmC,EACnC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,KAAwB,EAAE,EACzE,EAAE;IACF,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,EAAE;QACpD,MAAM,KAAK,CACT,6GAA6G,UAAU,EAAE,CAC1H,CAAC;KACH;IAED,IAAI,MAAM,GAAa,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,OAAO,IAAI,UAAU,EAAE;QAC5B,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,IAAA,YAAI,EAAC,KAAK,CAAC,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,SAAS,CAAC,kBAAkB;SAC7B;QACD,MAAM,CAAC,yCAAyC;KACjD;IACD,OAAO;QACL,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC,CAAA,CAAC;AA7BW,QAAA,UAAU,cA6BrB","sourcesContent":["import type { MaybePromise } from '../utils/types';\n\nexport const serialAsyncMap = async <T, R>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<R>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n agg.push(result);\n return agg;\n }, Promise.resolve([] as R[]));\n\n return results;\n};\n\nexport const serialAsyncFilter = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n if (result) agg.push(input);\n return agg;\n }, Promise.resolve([] as T[]));\n\n return results;\n};\n\nexport const serialAsyncFind = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n let index = 0;\n for (const input of inputArr) {\n const result = await fn(input, index);\n if (result) return input;\n index++;\n }\n};\n\nexport interface RetryAsyncOptions {\n /** Number of retries after the function call fails */\n maxRetries?: number;\n /** Delay between retries in milliseconds */\n delay?: number;\n /** Callback called with error if the function call errors */\n onError?: (error: unknown, retryIndex: number) => MaybePromise<void>;\n}\n\n/** @param {number} ms Number of ms to wait */\nexport const wait = (ms?: number) => new Promise((res) => setTimeout(res, ms));\n\n/** Call async function, and retry to call it `maxRetries` times if it fails. */\nexport const retryAsync = async <T>(\n fn: (retries: number) => Promise<T>,\n { maxRetries = 1, delay = 0, onError = () => {} }: RetryAsyncOptions = {}\n) => {\n if (typeof maxRetries !== 'number' || maxRetries < 0) {\n throw Error(\n `Invalid input for maxRetries in retryAsync(fn, maxRetries). maxRetries must be a non-negative number. Got ${maxRetries}`\n );\n }\n\n let result: T | null = null;\n const errors: unknown[] = [];\n let retries = 0;\n while (retries <= maxRetries) {\n try {\n result = await fn(retries);\n } catch (err) {\n errors.push(err);\n await onError(err, retries);\n await wait(delay);\n retries++;\n continue; // Retry if failed\n }\n break; // Exit loop and continue flow if success\n }\n return {\n result,\n errors,\n };\n};\n"]}
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/utils/async.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaybePromise } from '../utils/types';\n\nexport const serialAsyncMap = async <T, R>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<R>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n agg.push(result);\n return agg;\n }, Promise.resolve([] as R[]));\n\n return results;\n};\n\nexport const parallelAsyncMap = async <T, R>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<R>\n) => {\n const results = await Promise.all(inputArr.map(fn));\n return results;\n};\n\nexport const serialAsyncFilter = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n if (result) agg.push(input);\n return agg;\n }, Promise.resolve([] as T[]));\n\n return results;\n};\n\nexport const parallelAsyncFilter = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<unknown>\n) => {\n const filterResults = await Promise.all(inputArr.map(fn));\n const finalArr = inputArr.filter((val, index) => filterResults[index]);\n return finalArr;\n};\n\nexport const serialAsyncFind = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n let index = 0;\n for (const input of inputArr) {\n const result = await fn(input, index);\n if (result) return input;\n index++;\n }\n};\n\nexport const serialAsyncForEach = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n let index = 0;\n for (const input of inputArr) {\n await fn(input, index);\n index++;\n }\n};\n\nexport const parallelAsyncForEach = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<unknown>\n) => {\n const promises: Promise<any>[] = [];\n inputArr.forEach((val, index) => promises.push(Promise.resolve(fn(val, index))));\n await Promise.all(promises);\n};\n\nexport interface RetryAsyncOptions {\n /** Number of retries after the function call fails */\n maxRetries?: number;\n /** Delay between retries in milliseconds */\n delay?: number;\n /** Callback called with error if the function call errors */\n onError?: (error: unknown, retryIndex: number) => MaybePromise<void>;\n}\n\n/** @param {number} ms Number of ms to wait */\nexport const wait = (ms?: number) => new Promise((res) => setTimeout(res, ms));\n\n/** Call async function, and retry to call it `maxRetries` times if it fails. */\nexport const retryAsync = async <T>(\n fn: (retries: number) => Promise<T>,\n { maxRetries = 1, delay = 0, onError = () => {} }: RetryAsyncOptions = {}\n) => {\n if (typeof maxRetries !== 'number' || maxRetries < 0) {\n throw Error(\n `Invalid input for maxRetries in retryAsync(fn, maxRetries). maxRetries must be a non-negative number. Got ${maxRetries}`\n );\n }\n\n let result: T | null = null;\n const errors: unknown[] = [];\n let retries = 0;\n while (retries <= maxRetries) {\n try {\n result = await fn(retries);\n } catch (err) {\n errors.push(err);\n await onError(err, retries);\n await wait(delay);\n retries++;\n continue; // Retry if failed\n }\n break; // Exit loop and continue flow if success\n }\n return {\n result,\n errors,\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "portadom",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "private": false,
5
5
  "description": "Single DOM manipulation interface across Browser API, JSDOM, Cheerio, Playwright",
6
6
  "author": "Juro Oravec <juraj.oravec.josefson@gmail.com>",