@develia/commons 0.4.14 → 0.4.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/array.js +43 -1
- package/dist/cjs/array.js.map +1 -1
- package/dist/cjs/async-pool-executor.js +15 -0
- package/dist/cjs/async-pool-executor.js.map +1 -1
- package/dist/cjs/browser/form-utilities.js +26 -0
- package/dist/cjs/browser/form-utilities.js.map +1 -1
- package/dist/cjs/browser/geo-location.js +5 -0
- package/dist/cjs/browser/geo-location.js.map +1 -1
- package/dist/cjs/browser/index.js.map +1 -1
- package/dist/cjs/browser/native-bridge.js +9 -0
- package/dist/cjs/browser/native-bridge.js.map +1 -1
- package/dist/cjs/cancellable-promise.js.map +1 -1
- package/dist/cjs/clean-url-search-params.js +1 -0
- package/dist/cjs/clean-url-search-params.js.map +1 -1
- package/dist/cjs/collections/cache-dictionary.js +39 -0
- package/dist/cjs/collections/cache-dictionary.js.map +1 -1
- package/dist/cjs/collections/default-map.js +25 -1
- package/dist/cjs/collections/default-map.js.map +1 -1
- package/dist/cjs/collections/default-weak-map.js +23 -3
- package/dist/cjs/collections/default-weak-map.js.map +1 -1
- package/dist/cjs/{from.js → collections/from.js} +278 -4
- package/dist/cjs/collections/from.js.map +1 -0
- package/dist/cjs/collections/index.js +3 -1
- package/dist/cjs/collections/index.js.map +1 -1
- package/dist/cjs/draft.js +37 -0
- package/dist/cjs/draft.js.map +1 -1
- package/dist/cjs/event-bus.js +1 -0
- package/dist/cjs/event-bus.js.map +1 -1
- package/dist/cjs/index.js +16 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/key-value-pair.js +6 -0
- package/dist/cjs/key-value-pair.js.map +1 -1
- package/dist/cjs/lazy.js +4 -0
- package/dist/cjs/lazy.js.map +1 -1
- package/dist/cjs/math.js +19 -0
- package/dist/cjs/math.js.map +1 -1
- package/dist/cjs/order.js.map +1 -1
- package/dist/cjs/parse.js +96 -0
- package/dist/cjs/parse.js.map +1 -1
- package/dist/cjs/patch.js +10 -2
- package/dist/cjs/patch.js.map +1 -1
- package/dist/cjs/range.js +154 -0
- package/dist/cjs/range.js.map +1 -0
- package/dist/cjs/stopwatch.js +10 -0
- package/dist/cjs/stopwatch.js.map +1 -1
- package/dist/cjs/string.js +62 -0
- package/dist/cjs/string.js.map +1 -1
- package/dist/cjs/timer.js +7 -0
- package/dist/cjs/timer.js.map +1 -1
- package/dist/cjs/timespan.js +202 -0
- package/dist/cjs/timespan.js.map +1 -1
- package/dist/cjs/type-code.js.map +1 -1
- package/dist/cjs/type.js +80 -1
- package/dist/cjs/type.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utilities.js +183 -0
- package/dist/cjs/utilities.js.map +1 -1
- package/dist/esm/array.js +42 -1
- package/dist/esm/array.js.map +1 -1
- package/dist/esm/async-pool-executor.js +15 -0
- package/dist/esm/async-pool-executor.js.map +1 -1
- package/dist/esm/browser/form-utilities.js +26 -0
- package/dist/esm/browser/form-utilities.js.map +1 -1
- package/dist/esm/browser/geo-location.js +5 -0
- package/dist/esm/browser/geo-location.js.map +1 -1
- package/dist/esm/browser/index.js.map +1 -1
- package/dist/esm/browser/native-bridge.js +9 -0
- package/dist/esm/browser/native-bridge.js.map +1 -1
- package/dist/esm/cancellable-promise.js.map +1 -1
- package/dist/esm/clean-url-search-params.js +1 -0
- package/dist/esm/clean-url-search-params.js.map +1 -1
- package/dist/esm/collections/cache-dictionary.js +39 -0
- package/dist/esm/collections/cache-dictionary.js.map +1 -1
- package/dist/esm/collections/default-map.js +25 -1
- package/dist/esm/collections/default-map.js.map +1 -1
- package/dist/esm/collections/default-weak-map.js +22 -2
- package/dist/esm/collections/default-weak-map.js.map +1 -1
- package/dist/esm/{from.js → collections/from.js} +278 -4
- package/dist/esm/collections/from.js.map +1 -0
- package/dist/esm/collections/index.js +1 -0
- package/dist/esm/collections/index.js.map +1 -1
- package/dist/esm/draft.js +37 -0
- package/dist/esm/draft.js.map +1 -1
- package/dist/esm/event-bus.js +1 -0
- package/dist/esm/event-bus.js.map +1 -1
- package/dist/esm/index.js +14 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/key-value-pair.js +6 -0
- package/dist/esm/key-value-pair.js.map +1 -1
- package/dist/esm/lazy.js +4 -0
- package/dist/esm/lazy.js.map +1 -1
- package/dist/esm/math.js +19 -0
- package/dist/esm/math.js.map +1 -1
- package/dist/esm/order.js.map +1 -1
- package/dist/esm/parse.js +96 -0
- package/dist/esm/parse.js.map +1 -1
- package/dist/esm/patch.js +10 -2
- package/dist/esm/patch.js.map +1 -1
- package/dist/esm/range.js +151 -0
- package/dist/esm/range.js.map +1 -0
- package/dist/esm/stopwatch.js +10 -0
- package/dist/esm/stopwatch.js.map +1 -1
- package/dist/esm/string.js +62 -0
- package/dist/esm/string.js.map +1 -1
- package/dist/esm/timer.js +7 -0
- package/dist/esm/timer.js.map +1 -1
- package/dist/esm/timespan.js +202 -0
- package/dist/esm/timespan.js.map +1 -1
- package/dist/esm/type-code.js.map +1 -1
- package/dist/esm/type.js +80 -1
- package/dist/esm/type.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utilities.js +183 -0
- package/dist/esm/utilities.js.map +1 -1
- package/dist/types/array.d.ts +35 -0
- package/dist/types/array.d.ts.map +1 -1
- package/dist/types/async-pool-executor.d.ts +15 -0
- package/dist/types/async-pool-executor.d.ts.map +1 -1
- package/dist/types/browser/form-utilities.d.ts +13 -0
- package/dist/types/browser/form-utilities.d.ts.map +1 -1
- package/dist/types/browser/index.d.ts.map +1 -1
- package/dist/types/browser/native-bridge.d.ts +6 -0
- package/dist/types/browser/native-bridge.d.ts.map +1 -1
- package/dist/types/collections/cache-dictionary.d.ts +39 -0
- package/dist/types/collections/cache-dictionary.d.ts.map +1 -1
- package/dist/types/collections/default-map.d.ts +23 -0
- package/dist/types/collections/default-map.d.ts.map +1 -1
- package/dist/types/collections/default-weak-map.d.ts +20 -1
- package/dist/types/collections/default-weak-map.d.ts.map +1 -1
- package/dist/types/collections/from.d.ts +333 -0
- package/dist/types/collections/from.d.ts.map +1 -0
- package/dist/types/collections/index.d.ts +1 -0
- package/dist/types/collections/index.d.ts.map +1 -1
- package/dist/types/draft.d.ts +68 -0
- package/dist/types/draft.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/key-value-pair.d.ts +6 -0
- package/dist/types/key-value-pair.d.ts.map +1 -1
- package/dist/types/lazy.d.ts +4 -0
- package/dist/types/lazy.d.ts.map +1 -1
- package/dist/types/math.d.ts +19 -0
- package/dist/types/math.d.ts.map +1 -1
- package/dist/types/parse.d.ts +121 -0
- package/dist/types/parse.d.ts.map +1 -1
- package/dist/types/range.d.ts +72 -0
- package/dist/types/range.d.ts.map +1 -0
- package/dist/types/string.d.ts +51 -0
- package/dist/types/string.d.ts.map +1 -1
- package/dist/types/timer.d.ts +7 -0
- package/dist/types/timer.d.ts.map +1 -1
- package/dist/types/timespan.d.ts +202 -0
- package/dist/types/timespan.d.ts.map +1 -1
- package/dist/types/type.d.ts +40 -0
- package/dist/types/type.d.ts.map +1 -1
- package/dist/types/utilities.d.ts +171 -0
- package/dist/types/utilities.d.ts.map +1 -1
- package/dist/web/array.js +42 -1
- package/dist/web/array.js.map +1 -1
- package/dist/web/async-pool-executor.js +15 -0
- package/dist/web/async-pool-executor.js.map +1 -1
- package/dist/web/browser/form-utilities.js +26 -0
- package/dist/web/browser/form-utilities.js.map +1 -1
- package/dist/web/browser/geo-location.js +5 -0
- package/dist/web/browser/geo-location.js.map +1 -1
- package/dist/web/browser/index.js.map +1 -1
- package/dist/web/browser/native-bridge.js +9 -0
- package/dist/web/browser/native-bridge.js.map +1 -1
- package/dist/web/cancellable-promise.js.map +1 -1
- package/dist/web/clean-url-search-params.js +1 -0
- package/dist/web/clean-url-search-params.js.map +1 -1
- package/dist/web/collections/cache-dictionary.js +39 -0
- package/dist/web/collections/cache-dictionary.js.map +1 -1
- package/dist/web/collections/default-map.js +25 -1
- package/dist/web/collections/default-map.js.map +1 -1
- package/dist/web/collections/default-weak-map.js +22 -2
- package/dist/web/collections/default-weak-map.js.map +1 -1
- package/dist/web/{from.js → collections/from.js} +279 -5
- package/dist/web/collections/from.js.map +1 -0
- package/dist/web/collections/index.js +1 -0
- package/dist/web/collections/index.js.map +1 -1
- package/dist/web/draft.js +37 -0
- package/dist/web/draft.js.map +1 -1
- package/dist/web/event-bus.js +1 -0
- package/dist/web/event-bus.js.map +1 -1
- package/dist/web/index.js +14 -1
- package/dist/web/index.js.map +1 -1
- package/dist/web/key-value-pair.js +6 -0
- package/dist/web/key-value-pair.js.map +1 -1
- package/dist/web/lazy.js +4 -0
- package/dist/web/lazy.js.map +1 -1
- package/dist/web/math.js +19 -0
- package/dist/web/math.js.map +1 -1
- package/dist/web/order.js.map +1 -1
- package/dist/web/parse.js +96 -0
- package/dist/web/parse.js.map +1 -1
- package/dist/web/patch.js +10 -2
- package/dist/web/patch.js.map +1 -1
- package/dist/web/range.js +151 -0
- package/dist/web/range.js.map +1 -0
- package/dist/web/stopwatch.js +10 -0
- package/dist/web/stopwatch.js.map +1 -1
- package/dist/web/string.js +62 -0
- package/dist/web/string.js.map +1 -1
- package/dist/web/timer.js +7 -0
- package/dist/web/timer.js.map +1 -1
- package/dist/web/timespan.js +202 -0
- package/dist/web/timespan.js.map +1 -1
- package/dist/web/type-code.js.map +1 -1
- package/dist/web/type.js +80 -1
- package/dist/web/type.js.map +1 -1
- package/dist/web/types.js.map +1 -1
- package/dist/web/utilities.js +183 -0
- package/dist/web/utilities.js.map +1 -1
- package/package.json +1 -1
- package/src/array.ts +16 -0
- package/src/browser/index.ts +2 -2
- package/src/collections/cache-dictionary.ts +39 -1
- package/src/collections/default-map.ts +15 -9
- package/src/collections/default-weak-map.ts +14 -12
- package/src/{from.ts → collections/from.ts} +285 -15
- package/src/collections/index.ts +4 -3
- package/src/index.ts +43 -42
- package/src/range.ts +165 -0
- package/src/timespan.ts +199 -20
- package/dist/cjs/from.js.map +0 -1
- package/dist/esm/from.js.map +0 -1
- package/dist/types/from.d.ts +0 -59
- package/dist/types/from.d.ts.map +0 -1
- package/dist/web/from.js.map +0 -1
|
@@ -2,28 +2,199 @@ import KeyValuePair from "./key-value-pair.js";
|
|
|
2
2
|
import type { Resolvable } from "./types.js";
|
|
3
3
|
import Type from "./type.js";
|
|
4
4
|
export declare function lazy<T extends object>(factory: () => T): T;
|
|
5
|
+
/**
|
|
6
|
+
* Checks if an object is iterable.
|
|
7
|
+
*
|
|
8
|
+
* @param {any} obj - The object to check.
|
|
9
|
+
* @return {boolean} - Returns true if the object is iterable, otherwise false.
|
|
10
|
+
*/
|
|
5
11
|
export declare function isIterable(obj: any): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if a given value is a string.
|
|
14
|
+
*
|
|
15
|
+
* @param {*} value - The value to check.
|
|
16
|
+
* @return {boolean} - Returns true if the value is a string, otherwise returns false.
|
|
17
|
+
*/
|
|
6
18
|
export declare function isString(value: any): value is string;
|
|
19
|
+
/**
|
|
20
|
+
* Checks if a value is a number.
|
|
21
|
+
*
|
|
22
|
+
* @param {any} value - The value to check.
|
|
23
|
+
* @return {boolean} - Returns true if the value is a number, otherwise false.
|
|
24
|
+
*/
|
|
7
25
|
export declare function isNumber(value: any): value is number;
|
|
26
|
+
/**
|
|
27
|
+
* Checks if a given value is a boolean.
|
|
28
|
+
*
|
|
29
|
+
* @param {any} value - The value to be checked.
|
|
30
|
+
*
|
|
31
|
+
* @return {boolean} - Returns true if the value is a boolean, otherwise false.
|
|
32
|
+
*/
|
|
8
33
|
export declare function isBoolean(value: any): value is boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if a value is an object.
|
|
36
|
+
* @param {any} value - The value to be checked.
|
|
37
|
+
* @returns {boolean} - Returns true if the value is an object, otherwise returns false.
|
|
38
|
+
*/
|
|
9
39
|
export declare function isObject(value: any): value is object;
|
|
40
|
+
/**
|
|
41
|
+
* Determines if a value is an array.
|
|
42
|
+
*
|
|
43
|
+
* @param value - The value to be checked.
|
|
44
|
+
*
|
|
45
|
+
* @return Whether the value is an array.
|
|
46
|
+
*/
|
|
10
47
|
export declare function isArray(value: any): value is any[];
|
|
48
|
+
/**
|
|
49
|
+
* Checks if a value is a function.
|
|
50
|
+
*
|
|
51
|
+
* @param {any} value - The value to be checked.
|
|
52
|
+
* @return {boolean} - Returns true if the value is a function, otherwise returns false.
|
|
53
|
+
*/
|
|
11
54
|
export declare function isFunction(value: any): value is Function;
|
|
55
|
+
/**
|
|
56
|
+
* Structural deep equality check.
|
|
57
|
+
*
|
|
58
|
+
* Compares primitives by value, and objects/arrays/Maps/Sets/Dates/RegExps
|
|
59
|
+
* by structure. Handles circular references.
|
|
60
|
+
*
|
|
61
|
+
* @param a - First value.
|
|
62
|
+
* @param b - Second value.
|
|
63
|
+
* @returns `true` if `a` and `b` are structurally equal.
|
|
64
|
+
*/
|
|
12
65
|
export declare function deepEqual(a: unknown, b: unknown): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Submits an HTML form programmatically using the specified HTTP method (default is POST),
|
|
68
|
+
* without using AJAX. Supports nested objects and arrays using bracket notation (e.g., `user[name]`, `tags[]`).
|
|
69
|
+
*
|
|
70
|
+
* @param url - The destination URL where the form will be submitted.
|
|
71
|
+
* @param data - An object containing key-value pairs. Supports nested structures and arrays.
|
|
72
|
+
* @param method - HTTP method to use: 'POST' or 'GET' (default: 'POST').
|
|
73
|
+
* @param target - Optional parameter specifying the target for the form submission (e.g., '_blank', '_self', '_parent', '_top').
|
|
74
|
+
*/
|
|
75
|
+
/**
|
|
76
|
+
* Compares two objects or arrays to check if they have the same immediate fields and values,
|
|
77
|
+
* or the same immediate elements if they are arrays (shallow equality check).
|
|
78
|
+
*
|
|
79
|
+
* @param {any} a - The first object or array.
|
|
80
|
+
* @param {any} b - The second object or array.
|
|
81
|
+
* @return {boolean} - Returns true if the objects/arrays are shallowly equal, otherwise false.
|
|
82
|
+
*/
|
|
13
83
|
export declare function shallowEqual(a: any, b: any): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Pauses the execution of an asynchronous function for a specified duration.
|
|
86
|
+
*
|
|
87
|
+
* @param {number} ms - The delay duration in milliseconds.
|
|
88
|
+
* @return {Promise<void>} A promise that resolves after the specified delay.
|
|
89
|
+
*/
|
|
14
90
|
export declare function delay(ms: number): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Checks if a value is undefined.
|
|
93
|
+
*
|
|
94
|
+
* @param {any} value - The value to check.
|
|
95
|
+
* @returns {boolean} - True if the value is undefined, false otherwise.
|
|
96
|
+
*/
|
|
15
97
|
export declare function isUndefined(value: any): value is undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Checks if a value is defined or not.
|
|
100
|
+
*
|
|
101
|
+
* @param {any} value - The value to be checked.
|
|
102
|
+
*
|
|
103
|
+
* @return {boolean} - True if the value is defined, false otherwise.
|
|
104
|
+
*/
|
|
16
105
|
export declare function isDefined(value: any): value is undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Checks if a given value is null.
|
|
108
|
+
*
|
|
109
|
+
* @param {any} value - The value to check for null.
|
|
110
|
+
* @return {boolean} - Returns true if the value is null, otherwise returns false.
|
|
111
|
+
*/
|
|
17
112
|
export declare function isNull(value: any): value is null;
|
|
113
|
+
/**
|
|
114
|
+
* Determines whether the given value is of type bigint.
|
|
115
|
+
* @param {any} value - The value to be checked.
|
|
116
|
+
* @return {boolean} - Returns true if the value is of type bigint, false otherwise.
|
|
117
|
+
*/
|
|
18
118
|
export declare function isBigInt(value: any): value is bigint;
|
|
119
|
+
/**
|
|
120
|
+
* Checks if a given value is a symbol.
|
|
121
|
+
*
|
|
122
|
+
* @param {any} value - The value to be checked.
|
|
123
|
+
* @return {boolean} - Returns true if the value is a symbol, false otherwise.
|
|
124
|
+
*/
|
|
19
125
|
export declare function isSymbol(value: any): value is symbol;
|
|
126
|
+
/**
|
|
127
|
+
* Checks if a value is null or undefined.
|
|
128
|
+
*
|
|
129
|
+
* @param {any} value - The value to check.
|
|
130
|
+
* @return {boolean} - Returns true if the value is null or undefined, false otherwise.
|
|
131
|
+
* @deprecated
|
|
132
|
+
*/
|
|
20
133
|
export declare function isNullOrUndefined(value: any): boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Checks if a value is null or undefined.
|
|
136
|
+
*
|
|
137
|
+
* @param {any} value - The value to check.
|
|
138
|
+
* @return {boolean} - Returns true if the value is null or undefined, false otherwise.
|
|
139
|
+
|
|
140
|
+
*/
|
|
21
141
|
export declare function isNullish(value: any): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Checks if a given value is empty.
|
|
144
|
+
*
|
|
145
|
+
* @param {any} value - The value to check.
|
|
146
|
+
* @return {boolean} - Returns true if the value is empty, otherwise returns false.
|
|
147
|
+
*/
|
|
22
148
|
export declare function isEmpty(value: any): boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Check if a value is empty or contains only whitespace characters.
|
|
151
|
+
*
|
|
152
|
+
* @param {any} value - The value to check.
|
|
153
|
+
* @return {boolean} Returns true if the value is empty or contains only whitespace characters, otherwise returns false.
|
|
154
|
+
*/
|
|
23
155
|
export declare function isEmptyOrWhitespace(value: any): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Converts an object into an array of key-value pairs.
|
|
158
|
+
*
|
|
159
|
+
* @param {Record<string, any>} obj - The object to convert.
|
|
160
|
+
* @return {KeyValuePair<string, any>[]} - The array of key-value pairs.
|
|
161
|
+
*/
|
|
24
162
|
export declare function toPairs(obj: Record<string, any>): KeyValuePair<string, any>[];
|
|
163
|
+
/**
|
|
164
|
+
* Creates an object composed of the picked object properties.
|
|
165
|
+
*
|
|
166
|
+
* @template T - The type of the source object.
|
|
167
|
+
* @template K - The type of the keys to pick.
|
|
168
|
+
* @param obj - The source object.
|
|
169
|
+
* @param props - The property names to pick.
|
|
170
|
+
* @returns A new object with the picked properties.
|
|
171
|
+
*/
|
|
25
172
|
export declare function pick<T extends object, K extends keyof T>(obj: T, props: K[]): Pick<T, K>;
|
|
173
|
+
/**
|
|
174
|
+
* Converts a given thing into a Promise.
|
|
175
|
+
* @template T
|
|
176
|
+
* @param {any} thing - The thing to be converted into a Promise.
|
|
177
|
+
* @returns {Promise<T>} - A Promise representing the given thing.
|
|
178
|
+
*/
|
|
26
179
|
export declare function promisify<T>(thing: Resolvable<T>): Promise<T>;
|
|
180
|
+
/**
|
|
181
|
+
* Create a deep, independent copy of a value.
|
|
182
|
+
*
|
|
183
|
+
* Supports primitives, plain objects, arrays, `Date`, `RegExp`, `Map`, `Set`,
|
|
184
|
+
* symbol-keyed properties and circular references. Functions are copied by
|
|
185
|
+
* reference. Class instances preserve their prototype.
|
|
186
|
+
*
|
|
187
|
+
* @template T - The value's type.
|
|
188
|
+
* @param value - The value to clone.
|
|
189
|
+
* @returns A deep clone of `value`.
|
|
190
|
+
*/
|
|
27
191
|
export declare function deepClone<T>(value: T): T;
|
|
192
|
+
/**
|
|
193
|
+
* Returns the type of the given value.
|
|
194
|
+
*
|
|
195
|
+
* @param {any} value - The value to determine the type of.
|
|
196
|
+
* @return {Type} - The type of the given value.
|
|
197
|
+
* @deprecated use Type.of(...)
|
|
198
|
+
*/
|
|
28
199
|
export declare function getType(value: any): Type;
|
|
29
200
|
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/utilities.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAiC1D;
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/utilities.ts"],"names":[],"mappings":"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"}
|
package/dist/web/array.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes all given values from the provided array and returns the number of removed elements.
|
|
3
|
+
* The operation mutates the original array.
|
|
4
|
+
* @template T
|
|
5
|
+
* @param {Array<T>} array - The array to modify by removing specified items.
|
|
6
|
+
* @param {...T} items - The values to remove from the array.
|
|
7
|
+
* @return {number} The number of elements removed from the array.
|
|
8
|
+
*/
|
|
1
9
|
export function pull(array, ...items) {
|
|
2
10
|
let output = 0;
|
|
3
11
|
for (const item of items) {
|
|
@@ -9,6 +17,13 @@ export function pull(array, ...items) {
|
|
|
9
17
|
}
|
|
10
18
|
return output;
|
|
11
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Splits an array into chunks of a given size.
|
|
22
|
+
* @template T
|
|
23
|
+
* @param {Array<T>} array - The array to split.
|
|
24
|
+
* @param {number} size - The size of each chunk.
|
|
25
|
+
* @return {Array<Array<T>>} The array of chunks.
|
|
26
|
+
*/
|
|
12
27
|
export function chunk(array, size) {
|
|
13
28
|
if (size <= 0)
|
|
14
29
|
throw new Error("Size must be greater than 0");
|
|
@@ -18,16 +33,27 @@ export function chunk(array, size) {
|
|
|
18
33
|
}
|
|
19
34
|
return result;
|
|
20
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Removes all elements from the array, mutating it.
|
|
38
|
+
* @template T
|
|
39
|
+
* @param {Array<T>} array - The array to clear.
|
|
40
|
+
*/
|
|
21
41
|
export function clear(array) {
|
|
22
42
|
array.length = 0;
|
|
23
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Removes all elements from the array that satisfy the predicate.
|
|
46
|
+
* The operation mutates the original array.
|
|
47
|
+
* @template T
|
|
48
|
+
* @return {Array<T>} An array of removed elements.
|
|
49
|
+
*/
|
|
24
50
|
export function remove(array, predicate) {
|
|
25
51
|
const removed = [];
|
|
26
52
|
let i = 0;
|
|
27
53
|
while (i < array.length) {
|
|
28
54
|
if (predicate(array[i])) {
|
|
29
55
|
removed.push(array[i]);
|
|
30
|
-
array.splice(i, 1);
|
|
56
|
+
array.splice(i, 1); // muta el array
|
|
31
57
|
}
|
|
32
58
|
else {
|
|
33
59
|
i++;
|
|
@@ -35,4 +61,19 @@ export function remove(array, predicate) {
|
|
|
35
61
|
}
|
|
36
62
|
return removed;
|
|
37
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Adds an element to the array if it's not already present.
|
|
66
|
+
* The operation mutates the original array.
|
|
67
|
+
* @template T
|
|
68
|
+
* @param {Array<T>} array - The array to modify.
|
|
69
|
+
* @param {T} element - The element to add if absent.
|
|
70
|
+
* @return {boolean} True if the element was added, false otherwise.
|
|
71
|
+
*/
|
|
72
|
+
export function pushIfAbsent(array, element) {
|
|
73
|
+
if (!array.includes(element)) {
|
|
74
|
+
array.push(element);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
38
79
|
//# sourceMappingURL=array.js.map
|
package/dist/web/array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAI,KAAe,EAAE,GAAG,KAAe;IAEvD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,CAAC;QACb,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAI,KAAe,EAAE,IAAY;IAClD,IAAI,IAAI,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAI,KAAe;IACpC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAI,KAAe,EAAC,SAAuB;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACxC,CAAC;aAAM,CAAC;YACJ,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAI,KAAe,EAAE,OAAU;IACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type {Predicate} from \"./types.js\";\r\n\r\n/**\r\n * Removes all given values from the provided array and returns the number of removed elements.\r\n * The operation mutates the original array.\r\n * @template T\r\n * @param {Array<T>} array - The array to modify by removing specified items.\r\n * @param {...T} items - The values to remove from the array.\r\n * @return {number} The number of elements removed from the array.\r\n */\r\nexport function pull<T>(array: Array<T>, ...items: Array<T>): number {\r\n\r\n let output = 0;\r\n for (const item of items) {\r\n const index = array.indexOf(item);\r\n if (index !== -1) {\r\n array.splice(index, 1);\r\n output++;\r\n }\r\n }\r\n return output;\r\n}\r\n\r\n/**\r\n * Splits an array into chunks of a given size.\r\n * @template T\r\n * @param {Array<T>} array - The array to split.\r\n * @param {number} size - The size of each chunk.\r\n * @return {Array<Array<T>>} The array of chunks.\r\n */\r\nexport function chunk<T>(array: Array<T>, size: number): Array<Array<T>> {\r\n if (size <= 0) throw new Error(\"Size must be greater than 0\");\r\n const result: Array<Array<T>> = [];\r\n for (let i = 0; i < array.length; i += size) {\r\n result.push(array.slice(i, i + size));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Removes all elements from the array, mutating it.\r\n * @template T\r\n * @param {Array<T>} array - The array to clear.\r\n */\r\nexport function clear<T>(array: Array<T>): void {\r\n array.length = 0;\r\n}\r\n\r\n/**\r\n * Removes all elements from the array that satisfy the predicate.\r\n * The operation mutates the original array.\r\n * @template T\r\n * @return {Array<T>} An array of removed elements.\r\n */\r\nexport function remove<T>(array: Array<T>,predicate: Predicate<T>): Array<T> {\r\n const removed: Array<T> = [];\r\n let i = 0;\r\n\r\n while (i < array.length) {\r\n if (predicate(array[i])) {\r\n removed.push(array[i]);\r\n array.splice(i, 1); // muta el array\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n return removed;\r\n}\r\n\r\n/**\r\n * Adds an element to the array if it's not already present.\r\n * The operation mutates the original array.\r\n * @template T\r\n * @param {Array<T>} array - The array to modify.\r\n * @param {T} element - The element to add if absent.\r\n * @return {boolean} True if the element was added, false otherwise.\r\n */\r\nexport function pushIfAbsent<T>(array: Array<T>, element: T): boolean {\r\n if (!array.includes(element)) {\r\n array.push(element);\r\n return true;\r\n }\r\n return false;\r\n}"]}
|
|
@@ -6,12 +6,21 @@ export default class AsyncPoolExecutor {
|
|
|
6
6
|
set maxConcurrency(value) {
|
|
7
7
|
this._maxConcurrency = value;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* @param {number} maxConcurrency - The maximum number of concurrent tasks allowed.
|
|
11
|
+
* @param {number} [checkInterval=50] - The interval, in milliseconds, to check for capacity to run new tasks. Defaults to 50 ms.
|
|
12
|
+
*/
|
|
9
13
|
constructor(maxConcurrency, checkInterval = 50) {
|
|
10
14
|
this._taskQueue = [];
|
|
11
15
|
this._maxConcurrency = maxConcurrency;
|
|
12
16
|
this._checkIntervalMs = checkInterval;
|
|
13
17
|
this._activeTasks = 0;
|
|
14
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Submits a deferred task to a queue for asynchronous execution and returns a Promise resolving to its result.
|
|
21
|
+
* @template T
|
|
22
|
+
* @param {Supplier<T>} task - The deferred task to be executed asynchronously.
|
|
23
|
+
*/
|
|
15
24
|
submit(task) {
|
|
16
25
|
this._taskQueue.push(task);
|
|
17
26
|
if (this._proccess != null)
|
|
@@ -37,6 +46,12 @@ export default class AsyncPoolExecutor {
|
|
|
37
46
|
this._proccess = null;
|
|
38
47
|
}, 0);
|
|
39
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Waits until all tasks (both queued and active) are completed.
|
|
51
|
+
* This method resolves only when there are no pending tasks.
|
|
52
|
+
*
|
|
53
|
+
* @return {Promise<void>} A promise that resolves when all tasks are complete.
|
|
54
|
+
*/
|
|
40
55
|
async shutdown() {
|
|
41
56
|
while (this._taskQueue.length > 0 || this._activeTasks > 0) {
|
|
42
57
|
await delay(this._checkIntervalMs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-pool-executor.js","sourceRoot":"","sources":["../../src/async-pool-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAGlC,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAEjC,CAAC;
|
|
1
|
+
{"version":3,"file":"async-pool-executor.js","sourceRoot":"","sources":["../../src/async-pool-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAGlC,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAEjC,CAAC;IAQD;;;OAGG;IACH,YAAY,cAAsB,EAAE,gBAAwB,EAAE;QAPtD,eAAU,GAAyB,EAAE,CAAC;QAQ1C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,IAAmB;QAE7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;YACtB,OAAO;QAEX,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YAEnC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAEhC,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC/C,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACvC,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,UAAU,CAAC,KAAK,IAAI,EAAE;wBAClB,IAAI,CAAC;4BACD,MAAM,IAAI,EAAE,CAAC;wBACjB,CAAC;gCAAS,CAAC;4BACP,IAAI,CAAC,YAAY,EAAE,CAAC;wBACxB,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;YAGL,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC,EAAE,CAAC,CAAC,CAAC;IAGV,CAAC;IAGD;;;;;OAKG;IACI,KAAK,CAAC,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type {Supplier} from \"./types.js\";\r\nimport {delay} from \"./utilities.js\";\r\n\r\nexport default class AsyncPoolExecutor {\r\n private _checkIntervalMs: number;\r\n\r\n get maxConcurrency(): number {\r\n return this._maxConcurrency;\r\n }\r\n\r\n set maxConcurrency(value: number) {\r\n this._maxConcurrency = value;\r\n\r\n }\r\n\r\n private _proccess: any;\r\n private _maxConcurrency: number;\r\n private _activeTasks: number;\r\n private _taskQueue: Array<Supplier<any>> = [];\r\n\r\n\r\n /**\r\n * @param {number} maxConcurrency - The maximum number of concurrent tasks allowed.\r\n * @param {number} [checkInterval=50] - The interval, in milliseconds, to check for capacity to run new tasks. Defaults to 50 ms.\r\n */\r\n constructor(maxConcurrency: number, checkInterval: number = 50) {\r\n this._maxConcurrency = maxConcurrency;\r\n this._checkIntervalMs = checkInterval;\r\n this._activeTasks = 0;\r\n }\r\n\r\n /**\r\n * Submits a deferred task to a queue for asynchronous execution and returns a Promise resolving to its result.\r\n * @template T\r\n * @param {Supplier<T>} task - The deferred task to be executed asynchronously.\r\n */\r\n public submit(task: Supplier<any>): void {\r\n\r\n this._taskQueue.push(task);\r\n\r\n if (this._proccess != null)\r\n return;\r\n\r\n this._proccess = setTimeout(async () => {\r\n\r\n while (this._taskQueue.length > 0) {\r\n\r\n while (this._activeTasks >= this._maxConcurrency) {\r\n await delay(this._checkIntervalMs);\r\n }\r\n\r\n const task = this._taskQueue.shift();\r\n if (task) {\r\n this._activeTasks++;\r\n setTimeout(async () => {\r\n try {\r\n await task();\r\n } finally {\r\n this._activeTasks--;\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n this._proccess = null;\r\n }, 0);\r\n\r\n\r\n }\r\n\r\n\r\n /**\r\n * Waits until all tasks (both queued and active) are completed.\r\n * This method resolves only when there are no pending tasks.\r\n *\r\n * @return {Promise<void>} A promise that resolves when all tasks are complete.\r\n */\r\n public async shutdown(): Promise<void> {\r\n while (this._taskQueue.length > 0 || this._activeTasks > 0) {\r\n await delay(this._checkIntervalMs);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import {} from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Submits a form via AJAX and returns a Promise that resolves to the Response object.
|
|
4
|
+
*
|
|
5
|
+
* @param {HTMLFormElement | string} selectorOrElement - The form element or selector.
|
|
6
|
+
* @return {Promise<Response>} A Promise that resolves to the Response object.
|
|
7
|
+
* @throws {Error} If the element is invalid.
|
|
8
|
+
*/
|
|
2
9
|
export async function ajaxSubmit(selectorOrElement) {
|
|
3
10
|
const form = typeof selectorOrElement === 'string'
|
|
4
11
|
? document.querySelector(selectorOrElement)
|
|
@@ -22,6 +29,11 @@ export function submitForm(url, data, method = 'POST', target) {
|
|
|
22
29
|
if (target) {
|
|
23
30
|
form.target = target;
|
|
24
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Recursively appends inputs to the form, supporting nested keys and arrays.
|
|
34
|
+
* @param keyPrefix - Key path, e.g., 'user[name]' or 'tags[]'
|
|
35
|
+
* @param value - The value to append (can be nested)
|
|
36
|
+
*/
|
|
25
37
|
const appendInputs = (keyPrefix, value) => {
|
|
26
38
|
if (Array.isArray(value)) {
|
|
27
39
|
for (const val of value) {
|
|
@@ -70,6 +82,14 @@ export function formToObject(form) {
|
|
|
70
82
|
}
|
|
71
83
|
return out;
|
|
72
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Converts an object to `FormData` format recursively.
|
|
87
|
+
*
|
|
88
|
+
* @param {Record<string, any>} data - The object data to convert.
|
|
89
|
+
* @param {FormData} formData - The `FormData` instance to append data to.
|
|
90
|
+
* @param {string} parentKey - The parent key to append to child keys in the `FormData`.
|
|
91
|
+
* @returns {FormData} - The `FormData` instance with the converted data.
|
|
92
|
+
*/
|
|
73
93
|
function _objectToFormData(data, formData, parentKey = '') {
|
|
74
94
|
for (const key in data) {
|
|
75
95
|
if (data.hasOwnProperty(key)) {
|
|
@@ -102,6 +122,12 @@ function _objectToFormData(data, formData, parentKey = '') {
|
|
|
102
122
|
}
|
|
103
123
|
return formData;
|
|
104
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Converts an object into FormData.
|
|
127
|
+
*
|
|
128
|
+
* @param {Record<string, any>} data - The object to be converted into FormData.
|
|
129
|
+
* @return {FormData} - The FormData object representing the converted data.
|
|
130
|
+
*/
|
|
105
131
|
export function objectToFormData(data) {
|
|
106
132
|
let formData = new FormData();
|
|
107
133
|
return _objectToFormData(data, formData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-utilities.js","sourceRoot":"","sources":["../../../src/browser/form-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,aAAa,CAAC;AAUzD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,iBAA2C;IAExE,MAAM,IAAI,GAAG,OAAO,iBAAiB,KAAK,QAAQ;QAC9C,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;QAC3C,CAAC,CAAC,iBAAiB,CAAC;IAExB,IAAI,CAAC,CAAC,IAAI,YAAY,eAAe,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAGD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAW,IAAI,IAAI,CAAC,MAAM,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAW,IAAI,IAAI,CAAC,MAAM,CAAC;IAEpE,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ;KACjB,CAAC,CAAC;AACP,CAAC;AAGD,MAAM,UAAU,UAAU,CACtB,GAAW,EACX,IAAyB,EACzB,SAAyB,MAAM,EAC/B,MAAgD;IAGhD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAE5B,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAOD,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,KAAU,EAAE,EAAE;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACtB,YAAY,CAAC,GAAG,SAAS,IAAI,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACrD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,YAAY,CAAC,GAAG,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;YACtB,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;YACvB,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAqB;IAC9C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAA8D,EAAE,CAAC;IAE1E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAUD,SAAS,iBAAiB,CAAC,IAAyB,EAAE,QAAkB,EAAE,YAAoB,EAAE;IAE5F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAExB,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBACxB,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACnF,CAAC;iBAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC/B,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5D,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;oBAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM,QAAQ,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,GAAG,CAAC;oBACzE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACnD,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACJ,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACpC,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrE,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAQD,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACtD,IAAI,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9B,OAAO,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,iBAA2C,EAC3C,YAAqC,SAAS,EAC9C,YAAqC,SAAS;IAG9C,MAAM,KAAK,GAAsB,OAAO,iBAAiB,KAAK,QAAQ;QAC9D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;aAClD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,eAAe,CAAsB;QACxE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,IAAI,CAAC;gBACD,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,aAAgC,CAAC,CAAC;gBACtE,IAAI,SAAS;oBACT,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,SAAS;oBACT,SAAS,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QAGL,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"form-utilities.js","sourceRoot":"","sources":["../../../src/browser/form-utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Consumer, type Optional} from \"../types.js\";\n\n\n/**\n * Submits a form via AJAX and returns a Promise that resolves to the Response object.\n *\n * @param {HTMLFormElement | string} selectorOrElement - The form element or selector.\n * @return {Promise<Response>} A Promise that resolves to the Response object.\n * @throws {Error} If the element is invalid.\n */\nexport async function ajaxSubmit(selectorOrElement: HTMLFormElement | string): Promise<Response> {\n\n const form = typeof selectorOrElement === 'string'\n ? document.querySelector(selectorOrElement)\n : selectorOrElement;\n\n if (!(form instanceof HTMLFormElement)) {\n throw new Error(\"Invalid element.\");\n }\n\n\n const formData = new FormData(form);\n const method = form.getAttribute('method') as string ?? form.method;\n const action = form.getAttribute('action') as string ?? form.action;\n\n return await fetch(action, {\n method: method,\n body: formData,\n });\n}\n\n\nexport function submitForm(\n url: string,\n data: Record<string, any>,\n method: 'POST' | 'GET' = 'POST',\n target?: '_blank' | '_self' | '_parent' | '_top'\n): void {\n\n const form = document.createElement('form');\n form.method = method.toUpperCase();\n form.action = url;\n form.style.display = 'none';\n\n if (target) {\n form.target = target;\n }\n\n /**\n * Recursively appends inputs to the form, supporting nested keys and arrays.\n * @param keyPrefix - Key path, e.g., 'user[name]' or 'tags[]'\n * @param value - The value to append (can be nested)\n */\n const appendInputs = (keyPrefix: string, value: any) => {\n if (Array.isArray(value)) {\n for (const val of value) {\n appendInputs(`${keyPrefix}[]`, val);\n }\n } else if (typeof value === 'object' && value !== null) {\n for (const subKey in value) {\n if (value.hasOwnProperty(subKey)) {\n appendInputs(`${keyPrefix}[${subKey}]`, value[subKey]);\n }\n }\n } else {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = keyPrefix;\n input.value = String(value);\n form.appendChild(input);\n }\n };\n\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n appendInputs(key, data[key]);\n }\n }\n\n document.body.appendChild(form);\n form.submit();\n}\n\nexport function formToObject(form: HTMLFormElement): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n const fd = new FormData(form);\n const out: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n\n for (const [key, value] of fd.entries()) {\n if (key in out) {\n const current = out[key];\n if (Array.isArray(current)) {\n current.push(value);\n } else {\n out[key] = [current, value];\n }\n } else {\n out[key] = value;\n }\n }\n\n return out;\n}\n\n/**\n * Converts an object to `FormData` format recursively.\n *\n * @param {Record<string, any>} data - The object data to convert.\n * @param {FormData} formData - The `FormData` instance to append data to.\n * @param {string} parentKey - The parent key to append to child keys in the `FormData`.\n * @returns {FormData} - The `FormData` instance with the converted data.\n */\nfunction _objectToFormData(data: Record<string, any>, formData: FormData, parentKey: string = ''): FormData {\n\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const value = data[key];\n\n if (value instanceof Date) {\n formData.append(parentKey ? `${parentKey}[${key}]` : key, value.toISOString());\n } else if (value instanceof File) {\n formData.append(parentKey ? `${parentKey}[${key}]` : key, value);\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n _objectToFormData(value, formData, parentKey ? `${parentKey}[${key}]` : key);\n } else if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n const item = value[index];\n const arrayKey = `${parentKey ? `${parentKey}[${key}]` : key}[${index}]`;\n if (typeof item === 'object' && !Array.isArray(item)) {\n _objectToFormData(item, formData, arrayKey);\n } else {\n formData.append(arrayKey, item);\n }\n }\n } else {\n formData.append(parentKey ? `${parentKey}[${key}]` : key, value);\n }\n }\n }\n\n return formData;\n}\n\n/**\n * Converts an object into FormData.\n *\n * @param {Record<string, any>} data - The object to be converted into FormData.\n * @return {FormData} - The FormData object representing the converted data.\n */\nexport function objectToFormData(data: Record<string, any>): FormData {\n let formData = new FormData();\n return _objectToFormData(data, formData);\n}\n\nexport function ajaxSubmission(\n selectorOrElement: HTMLFormElement | string,\n onSuccess: Optional<Consumer<any>> = undefined,\n onFailure: Optional<Consumer<any>> = undefined\n): void {\n\n const forms: HTMLFormElement[] = typeof selectorOrElement === 'string'\n ? Array.from(document.querySelectorAll(selectorOrElement))\n .filter(el => el instanceof HTMLFormElement) as HTMLFormElement[]\n : [selectorOrElement];\n\n for (const form of forms) {\n form.addEventListener('submit', async (event) => {\n event.preventDefault();\n\n try {\n let result = await ajaxSubmit(event.currentTarget as HTMLFormElement);\n if (onSuccess)\n onSuccess(result);\n } catch (e) {\n if (onFailure)\n onFailure(e);\n }\n\n\n });\n }\n}"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// ─── Tipos ───────────────────────────────────────────────
|
|
2
|
+
// ─── Helpers ─────────────────────────────────────────────
|
|
1
3
|
function positionToGeoLocation(position) {
|
|
2
4
|
const { coords, timestamp } = position;
|
|
3
5
|
return {
|
|
@@ -37,6 +39,7 @@ async function ensurePermission() {
|
|
|
37
39
|
}
|
|
38
40
|
if (permission.state === 'prompt') {
|
|
39
41
|
await new Promise((resolve, reject) => {
|
|
42
|
+
// Escuchar cambio de estado del permiso
|
|
40
43
|
permission.onchange = () => {
|
|
41
44
|
permission.onchange = null;
|
|
42
45
|
if (permission.state === 'granted') {
|
|
@@ -46,6 +49,7 @@ async function ensurePermission() {
|
|
|
46
49
|
reject(new Error('Has denegado el permiso de ubicación.'));
|
|
47
50
|
}
|
|
48
51
|
};
|
|
52
|
+
// Forzar el diálogo nativo del navegador
|
|
49
53
|
navigator.geolocation.getCurrentPosition(() => {
|
|
50
54
|
permission.onchange = null;
|
|
51
55
|
resolve();
|
|
@@ -56,6 +60,7 @@ async function ensurePermission() {
|
|
|
56
60
|
});
|
|
57
61
|
}
|
|
58
62
|
}
|
|
63
|
+
// ─── Función principal ──────────────────────────────────
|
|
59
64
|
export default async function getGeoLocation(options = {}) {
|
|
60
65
|
if (!navigator.geolocation) {
|
|
61
66
|
throw new Error('Tu navegador no soporta geolocalización.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo-location.js","sourceRoot":"","sources":["../../../src/browser/geo-location.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"geo-location.js","sourceRoot":"","sources":["../../../src/browser/geo-location.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAmB5D,4DAA4D;AAE5D,SAAS,qBAAqB,CAAC,QAA6B;IACxD,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,GAAG,QAAQ,CAAC;IACrC,OAAO;QACH,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS;KACZ,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA+B;IACrD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,KAAK,CAAC,iBAAiB;YACxB,OAAO,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC9D,KAAK,KAAK,CAAC,oBAAoB;YAC3B,OAAO,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC5D,KAAK,KAAK,CAAC,OAAO;YACd,OAAO,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC1E;YACI,OAAO,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACvE,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,OAAwB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CACpC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,EACtD,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAC1C,OAAO,CACV,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC3B,IAAI,CAAC,SAAS,CAAC,WAAW;QAAE,OAAO;IAEnC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,aAAa,EAAC,CAAC,CAAC;IAE5E,IAAI,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACX,4EAA4E,CAC/E,CAAC;IACN,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,wCAAwC;YACxC,UAAU,CAAC,QAAQ,GAAG,GAAG,EAAE;gBACvB,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC3B,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC,CAAC;YAEF,yCAAyC;YACzC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CACpC,GAAG,EAAE;gBACD,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACd,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;gBACN,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC3B,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC,CAAC,EACD,EAAC,OAAO,EAAE,KAAK,EAAC,CACnB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,2DAA2D;AAE3D,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CACxC,UAA8B,EAAE;IAEhC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,gBAAgB,EAAE,CAAC;IAEzB,OAAO,eAAe,CAAC;QACnB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;QACtD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;QACjC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;KACtC,CAAC,CAAC;AACP,CAAC","sourcesContent":["// ─── Tipos ───────────────────────────────────────────────\r\n\r\nexport interface GeoLocation {\r\n latitude: number;\r\n longitude: number;\r\n accuracy: number;\r\n altitude: number | null;\r\n altitudeAccuracy: number | null;\r\n heading: number | null;\r\n speed: number | null;\r\n timestamp: number;\r\n}\r\n\r\nexport interface GeoLocationOptions {\r\n enableHighAccuracy?: boolean;\r\n timeout?: number;\r\n maximumAge?: number;\r\n}\r\n\r\n// ─── Helpers ─────────────────────────────────────────────\r\n\r\nfunction positionToGeoLocation(position: GeolocationPosition): GeoLocation {\r\n const {coords, timestamp} = position;\r\n return {\r\n latitude: coords.latitude,\r\n longitude: coords.longitude,\r\n accuracy: coords.accuracy,\r\n altitude: coords.altitude,\r\n altitudeAccuracy: coords.altitudeAccuracy,\r\n heading: coords.heading,\r\n speed: coords.speed,\r\n timestamp,\r\n };\r\n}\r\n\r\nfunction geolocationError(error: GeolocationPositionError): Error {\r\n switch (error.code) {\r\n case error.PERMISSION_DENIED:\r\n return new Error('Has denegado el permiso de ubicación.');\r\n case error.POSITION_UNAVAILABLE:\r\n return new Error('No se pudo determinar tu ubicación.');\r\n case error.TIMEOUT:\r\n return new Error('Tiempo de espera agotado al obtener la ubicación.');\r\n default:\r\n return new Error('Error desconocido al obtener la ubicación.');\r\n }\r\n}\r\n\r\nfunction requestPosition(options: PositionOptions): Promise<GeoLocation> {\r\n return new Promise((resolve, reject) => {\r\n navigator.geolocation.getCurrentPosition(\r\n (position) => resolve(positionToGeoLocation(position)),\r\n (error) => reject(geolocationError(error)),\r\n options,\r\n );\r\n });\r\n}\r\n\r\nasync function ensurePermission(): Promise<void> {\r\n if (!navigator.permissions) return;\r\n\r\n const permission = await navigator.permissions.query({name: 'geolocation'});\r\n\r\n if (permission.state === 'denied') {\r\n throw new Error(\r\n 'Permiso de ubicación denegado. Actívalo en la configuración del navegador.',\r\n );\r\n }\r\n\r\n if (permission.state === 'prompt') {\r\n await new Promise<void>((resolve, reject) => {\r\n // Escuchar cambio de estado del permiso\r\n permission.onchange = () => {\r\n permission.onchange = null;\r\n if (permission.state === 'granted') {\r\n resolve();\r\n } else {\r\n reject(new Error('Has denegado el permiso de ubicación.'));\r\n }\r\n };\r\n\r\n // Forzar el diálogo nativo del navegador\r\n navigator.geolocation.getCurrentPosition(\r\n () => {\r\n permission.onchange = null;\r\n resolve();\r\n },\r\n (error) => {\r\n permission.onchange = null;\r\n reject(geolocationError(error));\r\n },\r\n {timeout: 30000},\r\n );\r\n });\r\n }\r\n}\r\n\r\n// ─── Función principal ──────────────────────────────────\r\n\r\nexport default async function getGeoLocation(\r\n options: GeoLocationOptions = {},\r\n): Promise<GeoLocation> {\r\n if (!navigator.geolocation) {\r\n throw new Error('Tu navegador no soporta geolocalización.');\r\n }\r\n\r\n await ensurePermission();\r\n\r\n return requestPosition({\r\n enableHighAccuracy: options.enableHighAccuracy ?? true,\r\n timeout: options.timeout ?? 10000,\r\n maximumAge: options.maximumAge ?? 0,\r\n });\r\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {delay} from \"../utilities.js\";\n\ninterface FetchIntoOptions {\n url?: string;\n fetchOptions?: RequestInit;\n runScripts?: boolean;\n transition?: string;\n}\n\nexport async function waitFor(\n selector: string,\n options: { timeout?: number } = {}\n): Promise<HTMLElement | null> {\n const {timeout = 5000} = options;\n\n const element = document.querySelector(selector);\n if (element) {\n return element as HTMLElement;\n }\n\n let observer: MutationObserver | undefined;\n const timeoutPromise = delay(timeout).then(() => {\n observer?.disconnect();\n return null;\n });\n\n const observerPromise = new Promise<HTMLElement | null>((resolve) => {\n observer = new MutationObserver(() => {\n const element = document.querySelector(selector);\n if (element) {\n observer?.disconnect();\n resolve(element as HTMLElement);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n });\n\n return Promise.race([observerPromise, timeoutPromise]);\n}\n\nexport async function fetchInto(\n selector: string,\n options: FetchIntoOptions = {}\n): Promise<number> {\n const {\n url = window.location.href,\n fetchOptions = {},\n runScripts = false,\n transition = null,\n } = options;\n\n const response = await fetch(url, fetchOptions);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const html = await response.text();\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n const oldElements = document.querySelectorAll(selector);\n let replacedCount = 0;\n\n for (let i = 0; i < oldElements.length; i++) {\n const oldEl = oldElements[i];\n const newEl = doc.querySelector(selector);\n\n if (!newEl) continue;\n\n if (transition) {\n oldEl.classList.add(transition);\n await new Promise<void>((r) =>\n requestAnimationFrame(() => requestAnimationFrame(() => r()))\n );\n }\n\n oldEl.replaceWith(newEl.cloneNode(true));\n\n if (runScripts) {\n const scripts = newEl.querySelectorAll(\"script\");\n\n for (let j = 0; j < scripts.length; j++) {\n const script = scripts[j];\n const fresh = document.createElement(\"script\");\n\n if (script.src) {\n fresh.src = script.src;\n } else {\n fresh.textContent = script.textContent;\n }\n\n const attrs = script.attributes;\n for (let k = 0; k < attrs.length; k++) {\n if (attrs[k].name !== \"src\") {\n fresh.setAttribute(attrs[k].name, attrs[k].value);\n }\n }\n\n script.replaceWith(fresh);\n }\n }\n\n replacedCount++;\n }\n\n return replacedCount;\n}\n\nexport * from './form-utilities.js';\n\nexport {default as NativeBridge} from \"./native-bridge.js\";\n\nexport {default as getGeoLocation} from './geo-location.js';"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// ─── Clase ──────────────────────────────────────────────
|
|
1
2
|
export default class NativeBridge {
|
|
2
3
|
constructor({ channel, timeout = 3000, callbackName = '__nativeResponseHandler' }) {
|
|
3
4
|
this._pending = new Map();
|
|
@@ -8,6 +9,7 @@ export default class NativeBridge {
|
|
|
8
9
|
throw new Error('Channel not found');
|
|
9
10
|
}
|
|
10
11
|
window[callbackName] = this._callback;
|
|
12
|
+
// Proxy: cualquier propiedad no existente se convierte en call()
|
|
11
13
|
return new Proxy(this, {
|
|
12
14
|
get(target, prop) {
|
|
13
15
|
if (prop in target) {
|
|
@@ -38,6 +40,7 @@ export default class NativeBridge {
|
|
|
38
40
|
return new Promise((resolve, reject) => {
|
|
39
41
|
const id = this._callId++;
|
|
40
42
|
let timer = null;
|
|
43
|
+
// Solo crear timer si hay timeout
|
|
41
44
|
if (effectiveTimeout !== null && effectiveTimeout > 0) {
|
|
42
45
|
timer = setTimeout(() => {
|
|
43
46
|
this._pending.delete(id);
|
|
@@ -51,9 +54,15 @@ export default class NativeBridge {
|
|
|
51
54
|
send(method, data = null) {
|
|
52
55
|
this._channel.postMessage(JSON.stringify({ method, data }));
|
|
53
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Número de llamadas pendientes
|
|
59
|
+
*/
|
|
54
60
|
get pendingCount() {
|
|
55
61
|
return this._pending.size;
|
|
56
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Cancela todas las llamadas pendientes
|
|
65
|
+
*/
|
|
57
66
|
cancelAll() {
|
|
58
67
|
for (const [, { reject, timer }] of this._pending) {
|
|
59
68
|
if (timer !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../../../src/browser/native-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../../../src/browser/native-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["// ─── Tipos ───────────────────────────────────────────────\r\ninterface BridgeOptions {\r\n channel: Channel;\r\n timeout?: number | null;\r\n callbackName?: string; // ← nuevo\r\n}\r\ninterface PendingCall {\r\n resolve: (value: unknown) => void;\r\n reject: (reason: Error) => void;\r\n timer: ReturnType<typeof setTimeout> | null;\r\n}\r\n\r\ninterface Channel {\r\n postMessage: (message: string) => void;\r\n}\r\n\r\n\r\n\r\n// ─── Clase ──────────────────────────────────────────────\r\n\r\nexport default class NativeBridge {\r\n private _pending = new Map<number, PendingCall>();\r\n private _callId = 0;\r\n private readonly _defaultTimeout: number | null;\r\n private readonly _channel: Channel;\r\n\r\n\r\n constructor({ channel, timeout = 3000, callbackName = '__nativeResponseHandler' }: BridgeOptions) {\r\n this._defaultTimeout = timeout;\r\n this._channel = channel;\r\n\r\n if (!this._channel) {\r\n throw new Error('Channel not found');\r\n }\r\n\r\n (window as any)[callbackName] = this._callback;\r\n\r\n // Proxy: cualquier propiedad no existente se convierte en call()\r\n return new Proxy(this, {\r\n get(target: NativeBridge, prop: string | symbol) {\r\n if (prop in target) {\r\n return (target as any)[prop];\r\n }\r\n return (data?: unknown, timeout?: number | null) => target.call(String(prop), data, timeout);\r\n },\r\n }) as unknown as NativeBridge;\r\n }\r\n\r\n\r\n private _callback(id: number, error: any, result: any) {\r\n\r\n const pending = this._pending.get(id);\r\n if (!pending) {\r\n return;\r\n }\r\n\r\n if (pending.timer !== null) {\r\n clearTimeout(pending.timer);\r\n }\r\n\r\n this._pending.delete(id);\r\n\r\n if (error) {\r\n pending.reject(error instanceof Error? error : new Error(String(error)));\r\n } else {\r\n pending.resolve(result);\r\n }\r\n }\r\n\r\n call(method: string, data: unknown = null, timeout?: number | null): Promise<unknown> {\r\n\r\n\r\n const effectiveTimeout = timeout !== undefined ? timeout : this._defaultTimeout;\r\n\r\n return new Promise<unknown>((resolve, reject) => {\r\n const id = this._callId++;\r\n\r\n let timer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Solo crear timer si hay timeout\r\n if (effectiveTimeout !== null && effectiveTimeout > 0) {\r\n timer = setTimeout(() => {\r\n this._pending.delete(id);\r\n reject(new Error(`Timeout (${effectiveTimeout}ms): ${method}`));\r\n }, effectiveTimeout);\r\n }\r\n\r\n this._pending.set(id, { resolve, reject, timer });\r\n this._channel!.postMessage(JSON.stringify({ id, method, data }));\r\n });\r\n }\r\n\r\n\r\n send(method: string, data: unknown = null): void {\r\n this._channel!.postMessage(JSON.stringify({ method, data }));\r\n }\r\n\r\n /**\r\n * Número de llamadas pendientes\r\n */\r\n get pendingCount(): number {\r\n return this._pending.size;\r\n }\r\n\r\n /**\r\n * Cancela todas las llamadas pendientes\r\n */\r\n cancelAll(): void {\r\n for (const [, { reject, timer }] of this._pending) {\r\n if (timer !== null) {\r\n clearTimeout(timer);\r\n }\r\n reject(new Error('Cancelled'));\r\n }\r\n this._pending.clear();\r\n }\r\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancellable-promise.js","sourceRoot":"","sources":["../../src/cancellable-promise.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,OAAO,kBAAsB,SAAQ,OAAU;IAIzD,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,QAAuC;QAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtB,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC7C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,SAAkB,IAAI,KAAK,CAAC,mBAAmB,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAI,QAAiC;QACrD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpC,CAAC,SAAS,EAAE,EAAE;YACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACN,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC,CACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS,CAAI,QAAiC;QACvD,IAAI,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAI,QAAuC,EAAE,EAAU;QACrE,OAAO,IAAI,kBAAkB,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"cancellable-promise.js","sourceRoot":"","sources":["../../src/cancellable-promise.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,OAAO,kBAAsB,SAAQ,OAAU;IAIzD,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,QAAuC;QAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtB,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC7C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,SAAkB,IAAI,KAAK,CAAC,mBAAmB,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAI,QAAiC;QACrD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpC,CAAC,SAAS,EAAE,EAAE;YACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACN,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC,CACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS,CAAI,QAAiC;QACvD,IAAI,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAI,QAAuC,EAAE,EAAU;QACrE,OAAO,IAAI,kBAAkB,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["type CancellablePromiseExecutor<T> = (\r\n resolve: (value: T | PromiseLike<T>) => void,\r\n reject: (reason?: unknown) => void,\r\n signal: AbortSignal\r\n) => void;\r\n\r\nexport default class CancellablePromise<T> extends Promise<T> {\r\n\r\n private _controller: AbortController;\r\n\r\n static get [Symbol.species]() {\r\n return Promise;\r\n }\r\n\r\n constructor(executor: CancellablePromiseExecutor<T>) {\r\n const controller = new AbortController();\r\n\r\n super((resolve, reject) => {\r\n controller.signal.addEventListener(\"abort\", () => {\r\n reject(controller.signal.reason);\r\n });\r\n\r\n executor(resolve, reject, controller.signal);\r\n });\r\n\r\n this._controller = controller;\r\n }\r\n\r\n get cancelled(): boolean {\r\n return this._controller.signal.aborted;\r\n }\r\n\r\n cancel(reason: unknown = new Error(\"Promesa cancelada\")): void {\r\n if (!this.cancelled) {\r\n this._controller.abort(reason);\r\n }\r\n }\r\n\r\n static async compete<T>(promises: CancellablePromise<T>[]): Promise<T> {\r\n return await Promise.race(promises).then(\r\n (resultado) => {\r\n for (const p of promises) {\r\n p.cancel();\r\n }\r\n return resultado;\r\n },\r\n (error) => {\r\n for (const p of promises) {\r\n p.cancel();\r\n }\r\n throw error;\r\n }\r\n );\r\n }\r\n\r\n static async cooperate<T>(promises: CancellablePromise<T>[]): Promise<T[]> {\r\n try {\r\n return await Promise.all(promises);\r\n } catch (error) {\r\n for (const p of promises) {\r\n p.cancel();\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n static withTimeout<T>(executor: CancellablePromiseExecutor<T>, ms: number): CancellablePromise<T> {\r\n return new CancellablePromise<T>((resolve, reject, signal) => {\r\n const timer = setTimeout(() => {\r\n reject(new Error(`Timeout: ${ms}ms`));\r\n }, ms);\r\n\r\n signal.addEventListener(\"abort\", () => clearTimeout(timer));\r\n executor(resolve, reject, signal);\r\n });\r\n }\r\n}"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export default class CleanURLSearchParams extends URLSearchParams {
|
|
2
2
|
constructor(params) {
|
|
3
|
+
// Filtrar `null` y `undefined` antes de pasarlos al constructor de URLSearchParams
|
|
3
4
|
const cleanParams = Object.fromEntries(Object.entries(params || {}).filter(([_, value]) => value !== null && value !== undefined));
|
|
4
5
|
super(cleanParams);
|
|
5
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean-url-search-params.js","sourceRoot":"","sources":["../../src/clean-url-search-params.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,eAAe;IAC7D,YAAY,MAA4B;
|
|
1
|
+
{"version":3,"file":"clean-url-search-params.js","sourceRoot":"","sources":["../../src/clean-url-search-params.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,eAAe;IAC7D,YAAY,MAA4B;QACpC,mFAAmF;QACnF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAC7F,CAAC;QAEF,KAAK,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;CAGJ","sourcesContent":["export default class CleanURLSearchParams extends URLSearchParams {\r\n constructor(params?: Record<string, any>) {\r\n // Filtrar `null` y `undefined` antes de pasarlos al constructor de URLSearchParams\r\n const cleanParams = Object.fromEntries(\r\n Object.entries(params || {}).filter(([_, value]) => value !== null && value !== undefined)\r\n );\r\n\r\n super(cleanParams);\r\n }\r\n\r\n\r\n}"]}
|