@catbee/utils 0.0.8-rc.1 → 0.0.8-rc.3
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/build/{esnext → cjs}/config.d.ts +0 -1
- package/build/{src → cjs}/config.js +0 -1
- package/build/{esnext → cjs}/index.d.ts +0 -1
- package/build/{src → cjs}/index.js +0 -1
- package/build/{esnext → cjs}/servers/server.builder.d.ts +0 -1
- package/build/{src → cjs}/servers/server.builder.js +10 -13
- package/build/{src → cjs}/servers/server.d.ts +0 -1
- package/build/{src → cjs}/servers/server.js +83 -75
- package/build/{src → cjs}/types/api-response.d.ts +0 -1
- package/build/{src → cjs}/types/api-response.js +0 -1
- package/build/{src → cjs}/types/index.d.ts +0 -1
- package/build/{src → cjs}/types/index.js +0 -1
- package/build/{src → cjs}/types/server.d.ts +0 -1
- package/build/{src → cjs}/types/server.js +0 -1
- package/build/{src → cjs}/utils/array.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/array.utils.js +0 -1
- package/build/{src → cjs}/utils/async.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/async.utils.js +2 -3
- package/build/{esnext → cjs}/utils/cache.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/cache.utils.js +7 -6
- package/build/{esnext → cjs}/utils/context-store.utils.d.ts +1 -2
- package/build/{src → cjs}/utils/context-store.utils.js +10 -9
- package/build/{esnext → cjs}/utils/crypto.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/crypto.utils.js +5 -3
- package/build/{src → cjs}/utils/date.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/date.utils.js +1 -2
- package/build/{src → cjs}/utils/decorators.utils.d.ts +30 -27
- package/build/{src → cjs}/utils/decorators.utils.js +169 -30
- package/build/{esnext → cjs}/utils/dir.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/dir.utils.js +6 -7
- package/build/{esnext → cjs}/utils/env.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/env.utils.js +5 -8
- package/build/{src → cjs}/utils/exception.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/exception.utils.js +2 -1
- package/build/{src → cjs}/utils/fs.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/fs.utils.js +12 -13
- package/build/{esnext → cjs}/utils/http-status-codes.d.ts +0 -1
- package/build/{src → cjs}/utils/http-status-codes.js +0 -1
- package/build/{esnext → cjs}/utils/id.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/id.utils.js +0 -1
- package/build/{src → cjs}/utils/logger.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/logger.utils.js +10 -6
- package/build/{esnext → cjs}/utils/middleware.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/middleware.utils.js +16 -17
- package/build/{esnext → cjs}/utils/obj.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/obj.utils.js +1 -2
- package/build/{src → cjs}/utils/performance.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/performance.utils.js +6 -4
- package/build/{esnext → cjs}/utils/request.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/request.utils.js +7 -3
- package/build/{esnext → cjs}/utils/response.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/response.utils.js +42 -28
- package/build/{esnext → cjs}/utils/stream.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/stream.utils.js +0 -1
- package/build/{esnext → cjs}/utils/string.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/string.utils.js +0 -1
- package/build/{src → cjs}/utils/type.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/type.utils.js +2 -3
- package/build/{src → cjs}/utils/url.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/url.utils.js +8 -9
- package/build/{src → cjs}/utils/validate.utils.d.ts +0 -1
- package/build/{src → cjs}/utils/validate.utils.js +2 -3
- package/build/esm/config.d.ts +0 -1
- package/build/esm/config.js +6 -7
- package/build/esm/index.d.ts +0 -1
- package/build/esm/index.js +0 -1
- package/build/esm/servers/server.builder.d.ts +0 -1
- package/build/esm/servers/server.builder.js +99 -147
- package/build/esm/servers/server.d.ts +0 -1
- package/build/esm/servers/server.js +591 -876
- package/build/esm/types/api-response.d.ts +0 -1
- package/build/esm/types/api-response.js +0 -1
- package/build/esm/types/index.d.ts +0 -1
- package/build/esm/types/index.js +0 -1
- package/build/esm/types/server.d.ts +0 -1
- package/build/esm/types/server.js +0 -1
- package/build/esm/utils/array.utils.d.ts +0 -1
- package/build/esm/utils/array.utils.js +48 -86
- package/build/esm/utils/async.utils.d.ts +0 -1
- package/build/esm/utils/async.utils.js +247 -524
- package/build/esm/utils/cache.utils.d.ts +0 -1
- package/build/esm/utils/cache.utils.js +96 -301
- package/build/esm/utils/context-store.utils.d.ts +1 -2
- package/build/esm/utils/context-store.utils.js +62 -79
- package/build/esm/utils/crypto.utils.d.ts +0 -1
- package/build/esm/utils/crypto.utils.js +78 -175
- package/build/esm/utils/date.utils.d.ts +0 -1
- package/build/esm/utils/date.utils.js +47 -53
- package/build/esm/utils/decorators.utils.d.ts +30 -27
- package/build/esm/utils/decorators.utils.js +417 -461
- package/build/esm/utils/dir.utils.d.ts +0 -1
- package/build/esm/utils/dir.utils.js +264 -786
- package/build/esm/utils/env.utils.d.ts +0 -1
- package/build/esm/utils/env.utils.js +180 -271
- package/build/esm/utils/exception.utils.d.ts +0 -1
- package/build/esm/utils/exception.utils.js +112 -289
- package/build/esm/utils/fs.utils.d.ts +0 -1
- package/build/esm/utils/fs.utils.js +169 -401
- package/build/esm/utils/http-status-codes.d.ts +0 -1
- package/build/esm/utils/http-status-codes.js +0 -1
- package/build/esm/utils/id.utils.d.ts +0 -1
- package/build/esm/utils/id.utils.js +5 -9
- package/build/esm/utils/logger.utils.d.ts +0 -1
- package/build/esm/utils/logger.utils.js +34 -71
- package/build/esm/utils/middleware.utils.d.ts +0 -1
- package/build/esm/utils/middleware.utils.js +65 -155
- package/build/esm/utils/obj.utils.d.ts +0 -1
- package/build/esm/utils/obj.utils.js +69 -176
- package/build/esm/utils/performance.utils.d.ts +0 -1
- package/build/esm/utils/performance.utils.js +92 -195
- package/build/esm/utils/request.utils.d.ts +0 -1
- package/build/esm/utils/request.utils.js +41 -74
- package/build/esm/utils/response.utils.d.ts +0 -1
- package/build/esm/utils/response.utils.js +84 -107
- package/build/esm/utils/stream.utils.d.ts +0 -1
- package/build/esm/utils/stream.utils.js +38 -113
- package/build/esm/utils/string.utils.d.ts +0 -1
- package/build/esm/utils/string.utils.js +6 -11
- package/build/esm/utils/type.utils.d.ts +0 -1
- package/build/esm/utils/type.utils.js +8 -12
- package/build/esm/utils/url.utils.d.ts +0 -1
- package/build/esm/utils/url.utils.js +49 -127
- package/build/esm/utils/validate.utils.d.ts +0 -1
- package/build/esm/utils/validate.utils.js +23 -40
- package/package.json +288 -63
- package/build/esm/config.js.map +0 -1
- package/build/esm/index.js.map +0 -1
- package/build/esm/servers/server.builder.js.map +0 -1
- package/build/esm/servers/server.js.map +0 -1
- package/build/esm/types/api-response.js.map +0 -1
- package/build/esm/types/index.js.map +0 -1
- package/build/esm/types/server.js.map +0 -1
- package/build/esm/utils/array.utils.js.map +0 -1
- package/build/esm/utils/async.utils.js.map +0 -1
- package/build/esm/utils/cache.utils.js.map +0 -1
- package/build/esm/utils/context-store.utils.js.map +0 -1
- package/build/esm/utils/crypto.utils.js.map +0 -1
- package/build/esm/utils/date.utils.js.map +0 -1
- package/build/esm/utils/decorators.utils.js.map +0 -1
- package/build/esm/utils/dir.utils.js.map +0 -1
- package/build/esm/utils/env.utils.js.map +0 -1
- package/build/esm/utils/exception.utils.js.map +0 -1
- package/build/esm/utils/fs.utils.js.map +0 -1
- package/build/esm/utils/http-status-codes.js.map +0 -1
- package/build/esm/utils/id.utils.js.map +0 -1
- package/build/esm/utils/logger.utils.js.map +0 -1
- package/build/esm/utils/middleware.utils.js.map +0 -1
- package/build/esm/utils/obj.utils.js.map +0 -1
- package/build/esm/utils/performance.utils.js.map +0 -1
- package/build/esm/utils/request.utils.js.map +0 -1
- package/build/esm/utils/response.utils.js.map +0 -1
- package/build/esm/utils/stream.utils.js.map +0 -1
- package/build/esm/utils/string.utils.js.map +0 -1
- package/build/esm/utils/type.utils.js.map +0 -1
- package/build/esm/utils/url.utils.js.map +0 -1
- package/build/esm/utils/validate.utils.js.map +0 -1
- package/build/esnext/config.js +0 -133
- package/build/esnext/config.js.map +0 -1
- package/build/esnext/index.js +0 -50
- package/build/esnext/index.js.map +0 -1
- package/build/esnext/servers/server.builder.js +0 -657
- package/build/esnext/servers/server.builder.js.map +0 -1
- package/build/esnext/servers/server.d.ts +0 -256
- package/build/esnext/servers/server.js +0 -955
- package/build/esnext/servers/server.js.map +0 -1
- package/build/esnext/types/api-response.d.ts +0 -152
- package/build/esnext/types/api-response.js +0 -34
- package/build/esnext/types/api-response.js.map +0 -1
- package/build/esnext/types/index.d.ts +0 -125
- package/build/esnext/types/index.js +0 -25
- package/build/esnext/types/index.js.map +0 -1
- package/build/esnext/types/server.d.ts +0 -268
- package/build/esnext/types/server.js +0 -25
- package/build/esnext/types/server.js.map +0 -1
- package/build/esnext/utils/array.utils.d.ts +0 -168
- package/build/esnext/utils/array.utils.js +0 -345
- package/build/esnext/utils/array.utils.js.map +0 -1
- package/build/esnext/utils/async.utils.d.ts +0 -265
- package/build/esnext/utils/async.utils.js +0 -620
- package/build/esnext/utils/async.utils.js.map +0 -1
- package/build/esnext/utils/cache.utils.js +0 -293
- package/build/esnext/utils/cache.utils.js.map +0 -1
- package/build/esnext/utils/context-store.utils.js +0 -289
- package/build/esnext/utils/context-store.utils.js.map +0 -1
- package/build/esnext/utils/crypto.utils.js +0 -276
- package/build/esnext/utils/crypto.utils.js.map +0 -1
- package/build/esnext/utils/date.utils.d.ts +0 -159
- package/build/esnext/utils/date.utils.js +0 -384
- package/build/esnext/utils/date.utils.js.map +0 -1
- package/build/esnext/utils/decorators.utils.d.ts +0 -508
- package/build/esnext/utils/decorators.utils.js +0 -877
- package/build/esnext/utils/decorators.utils.js.map +0 -1
- package/build/esnext/utils/dir.utils.js +0 -477
- package/build/esnext/utils/dir.utils.js.map +0 -1
- package/build/esnext/utils/env.utils.js +0 -785
- package/build/esnext/utils/env.utils.js.map +0 -1
- package/build/esnext/utils/exception.utils.d.ts +0 -230
- package/build/esnext/utils/exception.utils.js +0 -381
- package/build/esnext/utils/exception.utils.js.map +0 -1
- package/build/esnext/utils/fs.utils.d.ts +0 -164
- package/build/esnext/utils/fs.utils.js +0 -349
- package/build/esnext/utils/fs.utils.js.map +0 -1
- package/build/esnext/utils/http-status-codes.js +0 -295
- package/build/esnext/utils/http-status-codes.js.map +0 -1
- package/build/esnext/utils/id.utils.js +0 -84
- package/build/esnext/utils/id.utils.js.map +0 -1
- package/build/esnext/utils/logger.utils.d.ts +0 -160
- package/build/esnext/utils/logger.utils.js +0 -300
- package/build/esnext/utils/logger.utils.js.map +0 -1
- package/build/esnext/utils/middleware.utils.js +0 -236
- package/build/esnext/utils/middleware.utils.js.map +0 -1
- package/build/esnext/utils/obj.utils.js +0 -413
- package/build/esnext/utils/obj.utils.js.map +0 -1
- package/build/esnext/utils/performance.utils.d.ts +0 -136
- package/build/esnext/utils/performance.utils.js +0 -271
- package/build/esnext/utils/performance.utils.js.map +0 -1
- package/build/esnext/utils/request.utils.js +0 -186
- package/build/esnext/utils/request.utils.js.map +0 -1
- package/build/esnext/utils/response.utils.js +0 -247
- package/build/esnext/utils/response.utils.js.map +0 -1
- package/build/esnext/utils/stream.utils.js +0 -210
- package/build/esnext/utils/stream.utils.js.map +0 -1
- package/build/esnext/utils/string.utils.js +0 -165
- package/build/esnext/utils/string.utils.js.map +0 -1
- package/build/esnext/utils/type.utils.d.ts +0 -90
- package/build/esnext/utils/type.utils.js +0 -187
- package/build/esnext/utils/type.utils.js.map +0 -1
- package/build/esnext/utils/url.utils.d.ts +0 -141
- package/build/esnext/utils/url.utils.js +0 -304
- package/build/esnext/utils/url.utils.js.map +0 -1
- package/build/esnext/utils/validate.utils.d.ts +0 -177
- package/build/esnext/utils/validate.utils.js +0 -320
- package/build/esnext/utils/validate.utils.js.map +0 -1
- package/build/src/config.d.ts +0 -122
- package/build/src/config.js.map +0 -1
- package/build/src/index.d.ts +0 -27
- package/build/src/index.js.map +0 -1
- package/build/src/servers/server.builder.d.ts +0 -508
- package/build/src/servers/server.builder.js.map +0 -1
- package/build/src/servers/server.js.map +0 -1
- package/build/src/types/api-response.js.map +0 -1
- package/build/src/types/index.js.map +0 -1
- package/build/src/types/server.js.map +0 -1
- package/build/src/utils/array.utils.js.map +0 -1
- package/build/src/utils/async.utils.js.map +0 -1
- package/build/src/utils/cache.utils.d.ts +0 -153
- package/build/src/utils/cache.utils.js.map +0 -1
- package/build/src/utils/context-store.utils.d.ts +0 -189
- package/build/src/utils/context-store.utils.js.map +0 -1
- package/build/src/utils/crypto.utils.d.ts +0 -160
- package/build/src/utils/crypto.utils.js.map +0 -1
- package/build/src/utils/date.utils.js.map +0 -1
- package/build/src/utils/decorators.utils.js.map +0 -1
- package/build/src/utils/dir.utils.d.ts +0 -196
- package/build/src/utils/dir.utils.js.map +0 -1
- package/build/src/utils/env.utils.d.ts +0 -377
- package/build/src/utils/env.utils.js.map +0 -1
- package/build/src/utils/exception.utils.js.map +0 -1
- package/build/src/utils/fs.utils.js.map +0 -1
- package/build/src/utils/http-status-codes.d.ts +0 -266
- package/build/src/utils/http-status-codes.js.map +0 -1
- package/build/src/utils/id.utils.d.ts +0 -36
- package/build/src/utils/id.utils.js.map +0 -1
- package/build/src/utils/logger.utils.js.map +0 -1
- package/build/src/utils/middleware.utils.d.ts +0 -100
- package/build/src/utils/middleware.utils.js.map +0 -1
- package/build/src/utils/obj.utils.d.ts +0 -124
- package/build/src/utils/obj.utils.js.map +0 -1
- package/build/src/utils/performance.utils.js.map +0 -1
- package/build/src/utils/request.utils.d.ts +0 -86
- package/build/src/utils/request.utils.js.map +0 -1
- package/build/src/utils/response.utils.d.ts +0 -163
- package/build/src/utils/response.utils.js.map +0 -1
- package/build/src/utils/stream.utils.d.ts +0 -88
- package/build/src/utils/stream.utils.js.map +0 -1
- package/build/src/utils/string.utils.d.ts +0 -93
- package/build/src/utils/string.utils.js.map +0 -1
- package/build/src/utils/type.utils.js.map +0 -1
- package/build/src/utils/url.utils.js.map +0 -1
- package/build/src/utils/validate.utils.js.map +0 -1
|
@@ -95,7 +95,7 @@ export function getTypeOf(value) {
|
|
|
95
95
|
export function isArrayOf(value, itemTypeGuard) {
|
|
96
96
|
if (!Array.isArray(value))
|
|
97
97
|
return false;
|
|
98
|
-
return value.every(
|
|
98
|
+
return value.every(item => itemTypeGuard(item));
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
101
|
* Convert a value to a string.
|
|
@@ -104,8 +104,7 @@ export function isArrayOf(value, itemTypeGuard) {
|
|
|
104
104
|
* @param defaultValue - Default value if conversion fails
|
|
105
105
|
* @returns String representation of the value
|
|
106
106
|
*/
|
|
107
|
-
export function toStr(value, defaultValue) {
|
|
108
|
-
if (defaultValue === void 0) { defaultValue = ''; }
|
|
107
|
+
export function toStr(value, defaultValue = '') {
|
|
109
108
|
if (value === null || value === undefined)
|
|
110
109
|
return defaultValue;
|
|
111
110
|
try {
|
|
@@ -114,7 +113,7 @@ export function toStr(value, defaultValue) {
|
|
|
114
113
|
}
|
|
115
114
|
return String(value);
|
|
116
115
|
}
|
|
117
|
-
catch
|
|
116
|
+
catch {
|
|
118
117
|
return defaultValue;
|
|
119
118
|
}
|
|
120
119
|
}
|
|
@@ -125,17 +124,16 @@ export function toStr(value, defaultValue) {
|
|
|
125
124
|
* @param defaultValue - Default value if conversion fails
|
|
126
125
|
* @returns Numeric representation of the value
|
|
127
126
|
*/
|
|
128
|
-
export function toNum(value, defaultValue) {
|
|
129
|
-
if (defaultValue === void 0) { defaultValue = 0; }
|
|
127
|
+
export function toNum(value, defaultValue = 0) {
|
|
130
128
|
if (value === null || value === undefined)
|
|
131
129
|
return defaultValue;
|
|
132
130
|
if (typeof value === 'number')
|
|
133
131
|
return value;
|
|
134
132
|
try {
|
|
135
|
-
|
|
133
|
+
const num = Number(value);
|
|
136
134
|
return isNaN(num) ? defaultValue : num;
|
|
137
135
|
}
|
|
138
|
-
catch
|
|
136
|
+
catch {
|
|
139
137
|
return defaultValue;
|
|
140
138
|
}
|
|
141
139
|
}
|
|
@@ -146,14 +144,13 @@ export function toNum(value, defaultValue) {
|
|
|
146
144
|
* @param defaultValue - Default value if conversion fails
|
|
147
145
|
* @returns Boolean representation of the value
|
|
148
146
|
*/
|
|
149
|
-
export function toBool(value, defaultValue) {
|
|
150
|
-
if (defaultValue === void 0) { defaultValue = false; }
|
|
147
|
+
export function toBool(value, defaultValue = false) {
|
|
151
148
|
if (value === null || value === undefined)
|
|
152
149
|
return defaultValue;
|
|
153
150
|
if (typeof value === 'boolean')
|
|
154
151
|
return value;
|
|
155
152
|
if (typeof value === 'string') {
|
|
156
|
-
|
|
153
|
+
const lowercased = value.toLowerCase();
|
|
157
154
|
if (lowercased === 'true' || lowercased === 'yes' || lowercased === 'y' || lowercased === '1') {
|
|
158
155
|
return true;
|
|
159
156
|
}
|
|
@@ -187,4 +184,3 @@ export function ensureType(value, expectedType, defaultValue) {
|
|
|
187
184
|
}
|
|
188
185
|
return defaultValue;
|
|
189
186
|
}
|
|
190
|
-
//# sourceMappingURL=type.utils.js.map
|
|
@@ -138,4 +138,3 @@ export declare function getExtension(url: string): string;
|
|
|
138
138
|
* // → { page: 2, q: 'test' }
|
|
139
139
|
*/
|
|
140
140
|
export declare function parseTypedQueryParams<T extends Record<string, any>>(url: string, converters?: Record<keyof T, (val: string) => any>): Partial<T>;
|
|
141
|
-
//# sourceMappingURL=url.utils.d.ts.map
|
|
@@ -21,33 +21,6 @@
|
|
|
21
21
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
|
-
var __values = (this && this.__values) || function(o) {
|
|
25
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
26
|
-
if (m) return m.call(o);
|
|
27
|
-
if (o && typeof o.length === "number") return {
|
|
28
|
-
next: function () {
|
|
29
|
-
if (o && i >= o.length) o = void 0;
|
|
30
|
-
return { value: o && o[i++], done: !o };
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
34
|
-
};
|
|
35
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
36
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
37
|
-
if (!m) return o;
|
|
38
|
-
var i = m.call(o), r, ar = [], e;
|
|
39
|
-
try {
|
|
40
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
41
|
-
}
|
|
42
|
-
catch (error) { e = { error: error }; }
|
|
43
|
-
finally {
|
|
44
|
-
try {
|
|
45
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
46
|
-
}
|
|
47
|
-
finally { if (e) throw e.error; }
|
|
48
|
-
}
|
|
49
|
-
return ar;
|
|
50
|
-
};
|
|
51
24
|
import { URL, URLSearchParams } from 'url';
|
|
52
25
|
/**
|
|
53
26
|
* Appends query parameters to a given URL.
|
|
@@ -61,20 +34,9 @@ import { URL, URLSearchParams } from 'url';
|
|
|
61
34
|
* // → 'https://example.com/?page=1&limit=10'
|
|
62
35
|
*/
|
|
63
36
|
export function appendQueryParams(url, params) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
for (var _b = __values(Object.entries(params)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
68
|
-
var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
|
|
69
|
-
urlObj.searchParams.set(key, value.toString());
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
73
|
-
finally {
|
|
74
|
-
try {
|
|
75
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
76
|
-
}
|
|
77
|
-
finally { if (e_1) throw e_1.error; }
|
|
37
|
+
const urlObj = new URL(url);
|
|
38
|
+
for (const [key, value] of Object.entries(params)) {
|
|
39
|
+
urlObj.searchParams.set(key, value.toString());
|
|
78
40
|
}
|
|
79
41
|
return urlObj.toString();
|
|
80
42
|
}
|
|
@@ -89,7 +51,7 @@ export function appendQueryParams(url, params) {
|
|
|
89
51
|
* // → { page: '1', limit: '10' }
|
|
90
52
|
*/
|
|
91
53
|
export function parseQueryString(query) {
|
|
92
|
-
|
|
54
|
+
const cleanQuery = query.startsWith('?') ? query.slice(1) : query;
|
|
93
55
|
// Object.fromEntries guarantees string values in result
|
|
94
56
|
return Object.fromEntries(new URLSearchParams(cleanQuery));
|
|
95
57
|
}
|
|
@@ -100,17 +62,16 @@ export function parseQueryString(query) {
|
|
|
100
62
|
* @param {boolean} [requireHttps=false] - If true, requires the URL to use HTTPS.
|
|
101
63
|
* @returns {boolean} True if the URL is valid, false otherwise.
|
|
102
64
|
*/
|
|
103
|
-
export function isValidUrl(url, requireHttps) {
|
|
104
|
-
if (requireHttps === void 0) { requireHttps = false; }
|
|
65
|
+
export function isValidUrl(url, requireHttps = false) {
|
|
105
66
|
try {
|
|
106
|
-
|
|
67
|
+
const parsedUrl = new URL(url);
|
|
107
68
|
if (!parsedUrl.protocol || !parsedUrl.hostname)
|
|
108
69
|
return false;
|
|
109
70
|
if (requireHttps && parsedUrl.protocol !== 'https:')
|
|
110
71
|
return false;
|
|
111
72
|
return true;
|
|
112
73
|
}
|
|
113
|
-
catch
|
|
74
|
+
catch {
|
|
114
75
|
return false;
|
|
115
76
|
}
|
|
116
77
|
}
|
|
@@ -128,26 +89,25 @@ export function isValidUrl(url, requireHttps) {
|
|
|
128
89
|
* getDomain('https://api.example.com/path', true);
|
|
129
90
|
* // → 'example.com'
|
|
130
91
|
*/
|
|
131
|
-
export function getDomain(url, removeSubdomains) {
|
|
132
|
-
if (removeSubdomains === void 0) { removeSubdomains = false; }
|
|
92
|
+
export function getDomain(url, removeSubdomains = false) {
|
|
133
93
|
try {
|
|
134
|
-
|
|
94
|
+
const { hostname } = new URL(url);
|
|
135
95
|
if (!removeSubdomains) {
|
|
136
96
|
return hostname;
|
|
137
97
|
}
|
|
138
98
|
// Extract root domain (remove subdomains)
|
|
139
|
-
|
|
99
|
+
const parts = hostname.split('.');
|
|
140
100
|
if (parts.length <= 2)
|
|
141
101
|
return hostname;
|
|
142
102
|
// Handle special cases like co.in, com.au
|
|
143
|
-
|
|
144
|
-
|
|
103
|
+
const secondLevelDomains = ['co', 'com', 'org', 'net', 'gov', 'edu', 'ac'];
|
|
104
|
+
const sld = parts[parts.length - 2];
|
|
145
105
|
if (secondLevelDomains.includes(sld) && parts.length > 2) {
|
|
146
106
|
return parts.slice(-3).join('.');
|
|
147
107
|
}
|
|
148
108
|
return parts.slice(-2).join('.');
|
|
149
109
|
}
|
|
150
|
-
catch
|
|
110
|
+
catch {
|
|
151
111
|
return '';
|
|
152
112
|
}
|
|
153
113
|
}
|
|
@@ -161,14 +121,10 @@ export function getDomain(url, removeSubdomains) {
|
|
|
161
121
|
* joinPaths('https://example.com/', '/api/', '/users');
|
|
162
122
|
* // → 'https://example.com/api/users'
|
|
163
123
|
*/
|
|
164
|
-
export function joinPaths() {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
var result = segments
|
|
170
|
-
.filter(function (s) { return s !== undefined && s !== null; })
|
|
171
|
-
.map(function (segment, index) {
|
|
124
|
+
export function joinPaths(...segments) {
|
|
125
|
+
let result = segments
|
|
126
|
+
.filter(s => s !== undefined && s !== null)
|
|
127
|
+
.map((segment, index) => {
|
|
172
128
|
if (index === 0)
|
|
173
129
|
return segment.replace(/\/+$/, '');
|
|
174
130
|
return segment.replace(/^\/+|\/+$/g, '');
|
|
@@ -194,17 +150,17 @@ export function normalizeUrl(url, base) {
|
|
|
194
150
|
try {
|
|
195
151
|
// Handle protocol-relative URLs
|
|
196
152
|
if (url.startsWith('//')) {
|
|
197
|
-
url =
|
|
153
|
+
url = `https:${url}`;
|
|
198
154
|
}
|
|
199
155
|
// Resolve relative URLs against a base
|
|
200
|
-
|
|
156
|
+
const parsedUrl = base ? new URL(url, base) : new URL(url);
|
|
201
157
|
// Normalize
|
|
202
158
|
parsedUrl.pathname = parsedUrl.pathname.replace(/\/+/g, '/'); // Collapse multiple slashes
|
|
203
159
|
parsedUrl.pathname = parsedUrl.pathname.replace(/\/+$/, ''); // Remove trailing slash
|
|
204
160
|
parsedUrl.hostname = parsedUrl.hostname.toLowerCase();
|
|
205
161
|
return parsedUrl.toString();
|
|
206
162
|
}
|
|
207
|
-
catch
|
|
163
|
+
catch {
|
|
208
164
|
return url; // Return original if invalid
|
|
209
165
|
}
|
|
210
166
|
}
|
|
@@ -228,8 +184,8 @@ export function createUrlBuilder(baseUrl) {
|
|
|
228
184
|
* @param {Record<string, any>} [params] - Query parameters to add.
|
|
229
185
|
* @returns {string} The complete URL.
|
|
230
186
|
*/
|
|
231
|
-
path
|
|
232
|
-
|
|
187
|
+
path(path, params) {
|
|
188
|
+
const url = joinPaths(baseUrl, path);
|
|
233
189
|
return params ? appendQueryParams(url, params) : url;
|
|
234
190
|
},
|
|
235
191
|
/**
|
|
@@ -238,7 +194,7 @@ export function createUrlBuilder(baseUrl) {
|
|
|
238
194
|
* @param {Record<string, any>} params - Query parameters to add.
|
|
239
195
|
* @returns {string} The complete URL with query parameters.
|
|
240
196
|
*/
|
|
241
|
-
query
|
|
197
|
+
query(params) {
|
|
242
198
|
return appendQueryParams(baseUrl, params);
|
|
243
199
|
}
|
|
244
200
|
};
|
|
@@ -251,29 +207,18 @@ export function createUrlBuilder(baseUrl) {
|
|
|
251
207
|
* @returns {Record<string, string>} Object containing the extracted parameters.
|
|
252
208
|
*/
|
|
253
209
|
export function extractQueryParams(url, paramNames) {
|
|
254
|
-
var e_2, _a;
|
|
255
210
|
try {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (value !== null) {
|
|
263
|
-
result[name_1] = value;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
268
|
-
finally {
|
|
269
|
-
try {
|
|
270
|
-
if (paramNames_1_1 && !paramNames_1_1.done && (_a = paramNames_1.return)) _a.call(paramNames_1);
|
|
211
|
+
const parsedUrl = new URL(url);
|
|
212
|
+
const result = {};
|
|
213
|
+
for (const name of paramNames) {
|
|
214
|
+
const value = parsedUrl.searchParams.get(name);
|
|
215
|
+
if (value !== null) {
|
|
216
|
+
result[name] = value;
|
|
271
217
|
}
|
|
272
|
-
finally { if (e_2) throw e_2.error; }
|
|
273
218
|
}
|
|
274
219
|
return result;
|
|
275
220
|
}
|
|
276
|
-
catch
|
|
221
|
+
catch {
|
|
277
222
|
return {};
|
|
278
223
|
}
|
|
279
224
|
}
|
|
@@ -285,25 +230,14 @@ export function extractQueryParams(url, paramNames) {
|
|
|
285
230
|
* @returns {string} URL with parameters removed.
|
|
286
231
|
*/
|
|
287
232
|
export function removeQueryParams(url, paramsToRemove) {
|
|
288
|
-
var e_3, _a;
|
|
289
233
|
try {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
var param = paramsToRemove_1_1.value;
|
|
294
|
-
parsedUrl.searchParams.delete(param);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
298
|
-
finally {
|
|
299
|
-
try {
|
|
300
|
-
if (paramsToRemove_1_1 && !paramsToRemove_1_1.done && (_a = paramsToRemove_1.return)) _a.call(paramsToRemove_1);
|
|
301
|
-
}
|
|
302
|
-
finally { if (e_3) throw e_3.error; }
|
|
234
|
+
const parsedUrl = new URL(url);
|
|
235
|
+
for (const param of paramsToRemove) {
|
|
236
|
+
parsedUrl.searchParams.delete(param);
|
|
303
237
|
}
|
|
304
238
|
return parsedUrl.toString();
|
|
305
239
|
}
|
|
306
|
-
catch
|
|
240
|
+
catch {
|
|
307
241
|
return url;
|
|
308
242
|
}
|
|
309
243
|
}
|
|
@@ -319,13 +253,13 @@ export function removeQueryParams(url, paramsToRemove) {
|
|
|
319
253
|
*/
|
|
320
254
|
export function getExtension(url) {
|
|
321
255
|
try {
|
|
322
|
-
|
|
323
|
-
|
|
256
|
+
const { pathname } = new URL(url);
|
|
257
|
+
const match = pathname.match(/\.([^./\\?#]+)$/);
|
|
324
258
|
return match ? match[1].toLowerCase() : '';
|
|
325
259
|
}
|
|
326
|
-
catch
|
|
260
|
+
catch {
|
|
327
261
|
// If URL parsing fails, try a simpler approach
|
|
328
|
-
|
|
262
|
+
const match = url.match(/\.([^./\\?#]+)$/);
|
|
329
263
|
return match ? match[1].toLowerCase() : '';
|
|
330
264
|
}
|
|
331
265
|
}
|
|
@@ -345,37 +279,25 @@ export function getExtension(url) {
|
|
|
345
279
|
* // → { page: 2, q: 'test' }
|
|
346
280
|
*/
|
|
347
281
|
export function parseTypedQueryParams(url, converters) {
|
|
348
|
-
var e_4, _a;
|
|
349
282
|
try {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
try {
|
|
357
|
-
result[key] = converters[key](value);
|
|
358
|
-
}
|
|
359
|
-
catch (_e) {
|
|
360
|
-
// Skip on conversion error
|
|
361
|
-
}
|
|
283
|
+
const { searchParams } = new URL(url);
|
|
284
|
+
const result = {};
|
|
285
|
+
for (const [key, value] of searchParams.entries()) {
|
|
286
|
+
if (converters && key in converters) {
|
|
287
|
+
try {
|
|
288
|
+
result[key] = converters[key](value);
|
|
362
289
|
}
|
|
363
|
-
|
|
364
|
-
|
|
290
|
+
catch {
|
|
291
|
+
// Skip on conversion error
|
|
365
292
|
}
|
|
366
293
|
}
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
finally {
|
|
370
|
-
try {
|
|
371
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
294
|
+
else {
|
|
295
|
+
result[key] = value;
|
|
372
296
|
}
|
|
373
|
-
finally { if (e_4) throw e_4.error; }
|
|
374
297
|
}
|
|
375
298
|
return result;
|
|
376
299
|
}
|
|
377
|
-
catch
|
|
300
|
+
catch {
|
|
378
301
|
return {};
|
|
379
302
|
}
|
|
380
303
|
}
|
|
381
|
-
//# sourceMappingURL=url.utils.js.map
|
|
@@ -174,4 +174,3 @@ export declare function matchesPattern(str: string, pattern: RegExp): boolean;
|
|
|
174
174
|
* @returns {boolean} True if value passes all validations.
|
|
175
175
|
*/
|
|
176
176
|
export declare function validateAll(value: unknown, validators: Array<(value: unknown) => boolean>): boolean;
|
|
177
|
-
//# sourceMappingURL=validate.utils.d.ts.map
|
|
@@ -21,22 +21,6 @@
|
|
|
21
21
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
25
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
26
|
-
if (!m) return o;
|
|
27
|
-
var i = m.call(o), r, ar = [], e;
|
|
28
|
-
try {
|
|
29
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
30
|
-
}
|
|
31
|
-
catch (error) { e = { error: error }; }
|
|
32
|
-
finally {
|
|
33
|
-
try {
|
|
34
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
35
|
-
}
|
|
36
|
-
finally { if (e) throw e.error; }
|
|
37
|
-
}
|
|
38
|
-
return ar;
|
|
39
|
-
};
|
|
40
24
|
/**
|
|
41
25
|
* Collection of common validation helpers for strings, numbers, email, UUID, etc.
|
|
42
26
|
*/
|
|
@@ -47,7 +31,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
47
31
|
* @returns True if valid port number, else false.
|
|
48
32
|
*/
|
|
49
33
|
export function isPort(value) {
|
|
50
|
-
|
|
34
|
+
const port = typeof value === 'string' ? Number(value.trim()) : value;
|
|
51
35
|
return Number.isInteger(port) && port > 0 && port <= 65535;
|
|
52
36
|
}
|
|
53
37
|
/**
|
|
@@ -60,7 +44,7 @@ export function isEmail(str) {
|
|
|
60
44
|
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str))
|
|
61
45
|
return false;
|
|
62
46
|
// Additional checks
|
|
63
|
-
|
|
47
|
+
const [local, domain] = str.split('@');
|
|
64
48
|
if (!local || !domain)
|
|
65
49
|
return false;
|
|
66
50
|
// Disallow consecutive dots in local or domain part
|
|
@@ -88,7 +72,7 @@ export function isURL(str) {
|
|
|
88
72
|
new URL(str);
|
|
89
73
|
return true;
|
|
90
74
|
}
|
|
91
|
-
catch
|
|
75
|
+
catch {
|
|
92
76
|
return false;
|
|
93
77
|
}
|
|
94
78
|
}
|
|
@@ -102,7 +86,7 @@ export function isPhone(str) {
|
|
|
102
86
|
if (typeof str !== 'string')
|
|
103
87
|
return false;
|
|
104
88
|
// Strip non-digit characters to count total digits
|
|
105
|
-
|
|
89
|
+
const digitsOnly = str.replace(/\D/g, '');
|
|
106
90
|
if (digitsOnly.length < 6 || digitsOnly.length > 15)
|
|
107
91
|
return false;
|
|
108
92
|
// Accept typical phone characters: +, digits, space, -, (, )
|
|
@@ -126,7 +110,7 @@ export function isAlphanumeric(str) {
|
|
|
126
110
|
export function isNumeric(value) {
|
|
127
111
|
if (typeof value === 'string' && value.trim() === '')
|
|
128
112
|
return false;
|
|
129
|
-
|
|
113
|
+
const num = typeof value === 'number' ? value : Number(value);
|
|
130
114
|
return typeof num === 'number' && isFinite(num);
|
|
131
115
|
}
|
|
132
116
|
/**
|
|
@@ -145,10 +129,10 @@ export function isHexColor(str) {
|
|
|
145
129
|
* @returns {boolean}
|
|
146
130
|
*/
|
|
147
131
|
export function isISODate(str) {
|
|
148
|
-
|
|
132
|
+
const isoRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/;
|
|
149
133
|
if (!isoRegex.test(str))
|
|
150
134
|
return false;
|
|
151
|
-
|
|
135
|
+
const date = new Date(str);
|
|
152
136
|
return !isNaN(date.getTime()) && date.toISOString().startsWith(str.slice(0, 10));
|
|
153
137
|
}
|
|
154
138
|
/**
|
|
@@ -192,10 +176,10 @@ export function isAlpha(str) {
|
|
|
192
176
|
export function isStrongPassword(str) {
|
|
193
177
|
if (str.length < 8)
|
|
194
178
|
return false;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
179
|
+
const hasUpperCase = /[A-Z]/.test(str);
|
|
180
|
+
const hasLowerCase = /[a-z]/.test(str);
|
|
181
|
+
const hasNumbers = /[0-9]/.test(str);
|
|
182
|
+
const hasSpecialChar = /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>?]/.test(str);
|
|
199
183
|
return hasUpperCase && hasLowerCase && hasNumbers && hasSpecialChar;
|
|
200
184
|
}
|
|
201
185
|
/**
|
|
@@ -205,11 +189,11 @@ export function isStrongPassword(str) {
|
|
|
205
189
|
* @returns {boolean} True if valid IPv4 address.
|
|
206
190
|
*/
|
|
207
191
|
export function isIPv4(str) {
|
|
208
|
-
|
|
192
|
+
const parts = str.split('.');
|
|
209
193
|
if (parts.length !== 4)
|
|
210
194
|
return false;
|
|
211
|
-
return parts.every(
|
|
212
|
-
|
|
195
|
+
return parts.every(part => {
|
|
196
|
+
const num = parseInt(part, 10);
|
|
213
197
|
return part === num.toString() && num >= 0 && num <= 255;
|
|
214
198
|
});
|
|
215
199
|
}
|
|
@@ -231,14 +215,14 @@ export function isIPv6(str) {
|
|
|
231
215
|
*/
|
|
232
216
|
export function isCreditCard(str) {
|
|
233
217
|
// Remove non-digit characters
|
|
234
|
-
|
|
218
|
+
const cardNumber = str.replace(/\D/g, '');
|
|
235
219
|
if (cardNumber.length < 13 || cardNumber.length > 19)
|
|
236
220
|
return false;
|
|
237
221
|
// Luhn algorithm implementation
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
for (
|
|
241
|
-
|
|
222
|
+
let sum = 0;
|
|
223
|
+
let shouldDouble = false;
|
|
224
|
+
for (let i = cardNumber.length - 1; i >= 0; i--) {
|
|
225
|
+
let digit = parseInt(cardNumber.charAt(i), 10);
|
|
242
226
|
if (shouldDouble) {
|
|
243
227
|
digit *= 2;
|
|
244
228
|
if (digit > 9)
|
|
@@ -260,7 +244,7 @@ export function isValidJSON(str) {
|
|
|
260
244
|
JSON.parse(str);
|
|
261
245
|
return true;
|
|
262
246
|
}
|
|
263
|
-
catch
|
|
247
|
+
catch {
|
|
264
248
|
return false;
|
|
265
249
|
}
|
|
266
250
|
}
|
|
@@ -275,7 +259,7 @@ export function isValidJSON(str) {
|
|
|
275
259
|
export function isArray(value, itemGuard) {
|
|
276
260
|
if (!Array.isArray(value))
|
|
277
261
|
return false;
|
|
278
|
-
return !itemGuard || value.every(
|
|
262
|
+
return !itemGuard || value.every(item => itemGuard(item));
|
|
279
263
|
}
|
|
280
264
|
/**
|
|
281
265
|
* Checks if a string is a valid base64 encoded string.
|
|
@@ -294,7 +278,7 @@ export function isBase64(str) {
|
|
|
294
278
|
* @returns {boolean} True if all required properties exist.
|
|
295
279
|
*/
|
|
296
280
|
export function hasRequiredProps(obj, requiredProps) {
|
|
297
|
-
return requiredProps.every(
|
|
281
|
+
return requiredProps.every(prop => Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] !== undefined && obj[prop] !== null);
|
|
298
282
|
}
|
|
299
283
|
/**
|
|
300
284
|
* Validates a date is within a specified range.
|
|
@@ -331,6 +315,5 @@ export function matchesPattern(str, pattern) {
|
|
|
331
315
|
* @returns {boolean} True if value passes all validations.
|
|
332
316
|
*/
|
|
333
317
|
export function validateAll(value, validators) {
|
|
334
|
-
return validators.every(
|
|
318
|
+
return validators.every(validator => validator(value));
|
|
335
319
|
}
|
|
336
|
-
//# sourceMappingURL=validate.utils.js.map
|