@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
|
@@ -42,6 +42,8 @@ var Environment;
|
|
|
42
42
|
* Provides typed getters with fallback defaults and validation.
|
|
43
43
|
*/
|
|
44
44
|
class Env {
|
|
45
|
+
// Cache for parsed values to avoid repeated parsing of complex values
|
|
46
|
+
static cache = new Map();
|
|
45
47
|
/**
|
|
46
48
|
* Checks if the current NODE_ENV is 'development'.
|
|
47
49
|
*
|
|
@@ -112,13 +114,11 @@ class Env {
|
|
|
112
114
|
* const url = Env.get('DATABASE_URL', ''); // "postgres://localhost:5432/myapp"
|
|
113
115
|
*/
|
|
114
116
|
static get(key, defaultValue) {
|
|
115
|
-
|
|
116
|
-
let value = (_a = process.env[key]) !== null && _a !== void 0 ? _a : defaultValue;
|
|
117
|
+
let value = process.env[key] ?? defaultValue;
|
|
117
118
|
// Expand ${VAR} references
|
|
118
119
|
if (value && value.includes('${')) {
|
|
119
120
|
value = value.replace(/\${([A-Za-z0-9_]+)}/g, (_, varName) => {
|
|
120
|
-
|
|
121
|
-
return (_a = process.env[varName]) !== null && _a !== void 0 ? _a : '';
|
|
121
|
+
return process.env[varName] ?? '';
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
return value;
|
|
@@ -440,7 +440,7 @@ class Env {
|
|
|
440
440
|
try {
|
|
441
441
|
url = new URL(value);
|
|
442
442
|
}
|
|
443
|
-
catch
|
|
443
|
+
catch {
|
|
444
444
|
throw new Error(`Environment variable '${key}' is not a valid URL: "${value}"`);
|
|
445
445
|
}
|
|
446
446
|
// Validate protocol
|
|
@@ -784,6 +784,3 @@ class Env {
|
|
|
784
784
|
}
|
|
785
785
|
}
|
|
786
786
|
exports.Env = Env;
|
|
787
|
-
// Cache for parsed values to avoid repeated parsing of complex values
|
|
788
|
-
Env.cache = new Map();
|
|
789
|
-
//# sourceMappingURL=env.utils.js.map
|
|
@@ -227,4 +227,3 @@ export declare function getErrorMessage(error: unknown): string;
|
|
|
227
227
|
* @returns A function that always returns or throws an HTTP error.
|
|
228
228
|
*/
|
|
229
229
|
export declare function withErrorHandling<T extends (...args: any[]) => Promise<any>>(handler: T): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
|
|
230
|
-
//# sourceMappingURL=exception.utils.d.ts.map
|
|
@@ -193,6 +193,7 @@ exports.GatewayTimeoutException = GatewayTimeoutException;
|
|
|
193
193
|
* Used when the server understands the content type but cannot process the contained instructions.
|
|
194
194
|
*/
|
|
195
195
|
class UnprocessableEntityException extends response_utils_1.ErrorResponse {
|
|
196
|
+
details;
|
|
196
197
|
/**
|
|
197
198
|
* @param message - Optional custom message. Defaults to "Unprocessable Entity".
|
|
198
199
|
* @param details - Optional validation details or additional error context.
|
|
@@ -209,6 +210,7 @@ exports.UnprocessableEntityException = UnprocessableEntityException;
|
|
|
209
210
|
* Used when the request method is not supported for the requested resource.
|
|
210
211
|
*/
|
|
211
212
|
class MethodNotAllowedException extends response_utils_1.ErrorResponse {
|
|
213
|
+
allowedMethods;
|
|
212
214
|
/**
|
|
213
215
|
* @param message - Optional custom message. Defaults to "Method Not Allowed".
|
|
214
216
|
* @param allowedMethods - Optional array of allowed HTTP methods.
|
|
@@ -404,4 +406,3 @@ function withErrorHandling(handler) {
|
|
|
404
406
|
}
|
|
405
407
|
};
|
|
406
408
|
}
|
|
407
|
-
//# sourceMappingURL=exception.utils.js.map
|
|
@@ -161,4 +161,3 @@ export declare function getFileSize(path: string): Promise<number>;
|
|
|
161
161
|
* @returns {Promise<Buffer | null>} File contents as Buffer or null if reading fails.
|
|
162
162
|
*/
|
|
163
163
|
export declare function readFileBuffer(path: string): Promise<Buffer | null>;
|
|
164
|
-
//# sourceMappingURL=fs.utils.d.ts.map
|
|
@@ -61,7 +61,7 @@ async function fileExists(path) {
|
|
|
61
61
|
await promises_1.default.access(path);
|
|
62
62
|
return true;
|
|
63
63
|
}
|
|
64
|
-
catch
|
|
64
|
+
catch {
|
|
65
65
|
return false;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -77,7 +77,7 @@ async function readJsonFile(path) {
|
|
|
77
77
|
const data = await promises_1.default.readFile(path, 'utf-8');
|
|
78
78
|
return JSON.parse(data);
|
|
79
79
|
}
|
|
80
|
-
catch
|
|
80
|
+
catch {
|
|
81
81
|
return null;
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -121,7 +121,7 @@ async function readTextFile(path, encoding = 'utf-8') {
|
|
|
121
121
|
try {
|
|
122
122
|
return await promises_1.default.readFile(path, encoding);
|
|
123
123
|
}
|
|
124
|
-
catch
|
|
124
|
+
catch {
|
|
125
125
|
return null;
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -138,7 +138,7 @@ async function writeTextFile(path, content, encoding = 'utf-8') {
|
|
|
138
138
|
await promises_1.default.writeFile(path, content, encoding);
|
|
139
139
|
return true;
|
|
140
140
|
}
|
|
141
|
-
catch
|
|
141
|
+
catch {
|
|
142
142
|
return false;
|
|
143
143
|
}
|
|
144
144
|
}
|
|
@@ -155,7 +155,7 @@ async function appendTextFile(path, content, encoding = 'utf-8') {
|
|
|
155
155
|
await promises_1.default.appendFile(path, content, encoding);
|
|
156
156
|
return true;
|
|
157
157
|
}
|
|
158
|
-
catch
|
|
158
|
+
catch {
|
|
159
159
|
return false;
|
|
160
160
|
}
|
|
161
161
|
}
|
|
@@ -173,7 +173,7 @@ async function copyFile(source, destination, overwrite = false) {
|
|
|
173
173
|
await promises_1.default.copyFile(source, destination, flags);
|
|
174
174
|
return true;
|
|
175
175
|
}
|
|
176
|
-
catch
|
|
176
|
+
catch {
|
|
177
177
|
return false;
|
|
178
178
|
}
|
|
179
179
|
}
|
|
@@ -189,14 +189,14 @@ async function moveFile(oldPath, newPath) {
|
|
|
189
189
|
await promises_1.default.rename(oldPath, newPath);
|
|
190
190
|
return true;
|
|
191
191
|
}
|
|
192
|
-
catch
|
|
192
|
+
catch {
|
|
193
193
|
// If rename fails (e.g., across devices), try copy+delete
|
|
194
194
|
try {
|
|
195
195
|
await promises_1.default.copyFile(oldPath, newPath);
|
|
196
196
|
await promises_1.default.unlink(oldPath);
|
|
197
197
|
return true;
|
|
198
198
|
}
|
|
199
|
-
catch
|
|
199
|
+
catch {
|
|
200
200
|
return false;
|
|
201
201
|
}
|
|
202
202
|
}
|
|
@@ -211,7 +211,7 @@ async function getFileStats(path) {
|
|
|
211
211
|
try {
|
|
212
212
|
return await promises_1.default.stat(path);
|
|
213
213
|
}
|
|
214
|
-
catch
|
|
214
|
+
catch {
|
|
215
215
|
return null;
|
|
216
216
|
}
|
|
217
217
|
}
|
|
@@ -336,7 +336,7 @@ async function isFile(path) {
|
|
|
336
336
|
const stat = await promises_1.default.stat(path);
|
|
337
337
|
return stat.isFile();
|
|
338
338
|
}
|
|
339
|
-
catch
|
|
339
|
+
catch {
|
|
340
340
|
return false;
|
|
341
341
|
}
|
|
342
342
|
}
|
|
@@ -351,7 +351,7 @@ async function getFileSize(path) {
|
|
|
351
351
|
const stat = await promises_1.default.stat(path);
|
|
352
352
|
return stat.size;
|
|
353
353
|
}
|
|
354
|
-
catch
|
|
354
|
+
catch {
|
|
355
355
|
return -1;
|
|
356
356
|
}
|
|
357
357
|
}
|
|
@@ -365,8 +365,7 @@ async function readFileBuffer(path) {
|
|
|
365
365
|
try {
|
|
366
366
|
return await promises_1.default.readFile(path);
|
|
367
367
|
}
|
|
368
|
-
catch
|
|
368
|
+
catch {
|
|
369
369
|
return null;
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
|
-
//# sourceMappingURL=fs.utils.js.map
|
|
@@ -295,4 +295,3 @@ var HttpStatusCodes;
|
|
|
295
295
|
*/
|
|
296
296
|
HttpStatusCodes[HttpStatusCodes["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED";
|
|
297
297
|
})(HttpStatusCodes || (exports.HttpStatusCodes = HttpStatusCodes = {}));
|
|
298
|
-
//# sourceMappingURL=http-status-codes.js.map
|
|
@@ -157,4 +157,3 @@ export declare function createRequestLogger(requestId: string, additionalContext
|
|
|
157
157
|
* @param {Record<string, any>} [context] - Additional context properties
|
|
158
158
|
*/
|
|
159
159
|
export declare function logError(error: Error | unknown, message?: string, context?: Record<string, any>): void;
|
|
160
|
-
//# sourceMappingURL=logger.utils.d.ts.map
|
|
@@ -246,7 +246,6 @@ const _global = exports._globalThis;
|
|
|
246
246
|
* - Uses singleton in global symbol registry.
|
|
247
247
|
*/
|
|
248
248
|
function setupLogger() {
|
|
249
|
-
var _a;
|
|
250
249
|
const logParams = {
|
|
251
250
|
name: config_1.config.logger.name || '@catbee/utils',
|
|
252
251
|
level: config_1.config.logger.level || 'info',
|
|
@@ -277,7 +276,7 @@ function setupLogger() {
|
|
|
277
276
|
}))
|
|
278
277
|
: (0, pino_1.default)(logParams);
|
|
279
278
|
_global[GLOBAL_LOGGER_KEY] = logger;
|
|
280
|
-
|
|
279
|
+
_global[GLOBAL_LOGGER_KEY]?.debug('Logger initialized');
|
|
281
280
|
}
|
|
282
281
|
/**
|
|
283
282
|
* Retrieves the current logger instance:
|
|
@@ -320,11 +319,14 @@ function createChildLogger(bindings, parentLogger) {
|
|
|
320
319
|
* @returns {Logger} Request-scoped logger instance
|
|
321
320
|
*/
|
|
322
321
|
function createRequestLogger(requestId, additionalContext = {}) {
|
|
323
|
-
const logger = createChildLogger(
|
|
322
|
+
const logger = createChildLogger({
|
|
323
|
+
requestId,
|
|
324
|
+
...additionalContext
|
|
325
|
+
});
|
|
324
326
|
try {
|
|
325
327
|
context_store_utils_1.ContextStore.set(context_store_utils_1.StoreKeys.LOGGER, logger);
|
|
326
328
|
}
|
|
327
|
-
catch
|
|
329
|
+
catch {
|
|
328
330
|
// Context not initialized, can't store logger
|
|
329
331
|
logger.debug('Failed to store logger in context - AsyncLocalStorage not initialized');
|
|
330
332
|
}
|
|
@@ -340,7 +342,9 @@ function createRequestLogger(requestId, additionalContext = {}) {
|
|
|
340
342
|
function logError(error, message, context) {
|
|
341
343
|
const logger = getLogger();
|
|
342
344
|
const errObj = error instanceof Error ? error : new Error(String(error));
|
|
343
|
-
const logContext =
|
|
345
|
+
const logContext = {
|
|
346
|
+
...context,
|
|
347
|
+
error: errObj
|
|
348
|
+
};
|
|
344
349
|
logger.error(logContext, message || errObj.message);
|
|
345
350
|
}
|
|
346
|
-
//# sourceMappingURL=logger.utils.js.map
|
|
@@ -46,9 +46,9 @@ const exception_utils_1 = require("./exception.utils");
|
|
|
46
46
|
* @returns {Middleware} Express-compatible middleware
|
|
47
47
|
*/
|
|
48
48
|
function requestId(options) {
|
|
49
|
-
const headerName =
|
|
50
|
-
const exposeHeader =
|
|
51
|
-
const generateId =
|
|
49
|
+
const headerName = options?.headerName || 'X-Request-ID';
|
|
50
|
+
const exposeHeader = options?.exposeHeader !== false;
|
|
51
|
+
const generateId = options?.generator || id_utils_1.uuid;
|
|
52
52
|
return (req, res, next) => {
|
|
53
53
|
// Use existing request ID from header or generate a new one
|
|
54
54
|
const existingId = req.headers[headerName.toLowerCase()];
|
|
@@ -71,8 +71,8 @@ function requestId(options) {
|
|
|
71
71
|
* @returns {Middleware} Express-compatible middleware
|
|
72
72
|
*/
|
|
73
73
|
function responseTime(options) {
|
|
74
|
-
const addHeader =
|
|
75
|
-
const logOnComplete =
|
|
74
|
+
const addHeader = options?.addHeader !== false;
|
|
75
|
+
const logOnComplete = options?.logOnComplete === true;
|
|
76
76
|
return (req, res, next) => {
|
|
77
77
|
const start = process.hrtime();
|
|
78
78
|
// Function to calculate duration
|
|
@@ -129,7 +129,7 @@ function setupRequestContext(options = {}) {
|
|
|
129
129
|
const { headerName = 'x-request-id', autoLog = true } = options;
|
|
130
130
|
return (req, _res, next) => {
|
|
131
131
|
// Generate or use existing request ID
|
|
132
|
-
const requestId = req.headers[headerName] ||
|
|
132
|
+
const requestId = req.headers[headerName] || req?.['id'] || (0, id_utils_1.uuid)();
|
|
133
133
|
context_store_utils_1.ContextStore.run({ [context_store_utils_1.StoreKeys.REQUEST_ID]: requestId }, () => {
|
|
134
134
|
// Create a child logger for this request
|
|
135
135
|
const childLogger = (0, logger_utils_1.getLogger)().child({
|
|
@@ -174,11 +174,11 @@ function setupRequestContext(options = {}) {
|
|
|
174
174
|
* });
|
|
175
175
|
*/
|
|
176
176
|
function errorHandler(options) {
|
|
177
|
-
const logErrors =
|
|
178
|
-
const includeDetails =
|
|
177
|
+
const logErrors = options?.logErrors !== false;
|
|
178
|
+
const includeDetails = options?.includeDetails === true;
|
|
179
179
|
return (err, req, res, _next) => {
|
|
180
180
|
// Determine status code
|
|
181
|
-
const status =
|
|
181
|
+
const status = err?.status || err?.statusCode || http_status_codes_1.HttpStatusCodes.INTERNAL_SERVER_ERROR;
|
|
182
182
|
// Log error if enabled
|
|
183
183
|
if (logErrors) {
|
|
184
184
|
(0, logger_utils_1.getLogger)().error({ err }, `${err.message || 'Unknown error'}`);
|
|
@@ -189,11 +189,11 @@ function errorHandler(options) {
|
|
|
189
189
|
error: true,
|
|
190
190
|
message: err.message,
|
|
191
191
|
timestamp: err.timestamp,
|
|
192
|
-
requestId:
|
|
192
|
+
requestId: err?.requestId || req?.id || (0, id_utils_1.uuid)(),
|
|
193
193
|
status,
|
|
194
194
|
path: req.originalUrl || req.url
|
|
195
195
|
};
|
|
196
|
-
if (includeDetails &&
|
|
196
|
+
if (includeDetails && err?.stack) {
|
|
197
197
|
result.stack = err.stack.split('\n').map((line) => line.trim());
|
|
198
198
|
}
|
|
199
199
|
return res.status(status).json(result);
|
|
@@ -201,7 +201,7 @@ function errorHandler(options) {
|
|
|
201
201
|
// Handle any other errors
|
|
202
202
|
return res
|
|
203
203
|
.status(status)
|
|
204
|
-
.json((0, response_utils_1.createFinalErrorResponse)(req, status,
|
|
204
|
+
.json((0, response_utils_1.createFinalErrorResponse)(req, status, err?.message || 'Internal Server Error', err, { includeDetails }));
|
|
205
205
|
};
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
@@ -214,9 +214,9 @@ function errorHandler(options) {
|
|
|
214
214
|
* @returns {Middleware} Express-compatible middleware
|
|
215
215
|
*/
|
|
216
216
|
function healthCheck(options) {
|
|
217
|
-
const path =
|
|
218
|
-
const checks =
|
|
219
|
-
const detailed =
|
|
217
|
+
const path = options?.path || '/healthz';
|
|
218
|
+
const checks = options?.checks || [];
|
|
219
|
+
const detailed = options?.detailed !== false;
|
|
220
220
|
return async (req, res, next) => {
|
|
221
221
|
if (req.path !== path)
|
|
222
222
|
return next();
|
|
@@ -229,7 +229,7 @@ function healthCheck(options) {
|
|
|
229
229
|
if (!result)
|
|
230
230
|
allHealthy = false;
|
|
231
231
|
}
|
|
232
|
-
catch
|
|
232
|
+
catch {
|
|
233
233
|
results[check.name] = false;
|
|
234
234
|
allHealthy = false;
|
|
235
235
|
}
|
|
@@ -241,4 +241,3 @@ function healthCheck(options) {
|
|
|
241
241
|
res.status(status).json(response);
|
|
242
242
|
};
|
|
243
243
|
}
|
|
244
|
-
//# sourceMappingURL=middleware.utils.js.map
|
|
@@ -121,4 +121,3 @@ export declare function isObject(value: unknown): value is Record<string, any>;
|
|
|
121
121
|
* @returns {string[]} Array of all paths in dot notation.
|
|
122
122
|
*/
|
|
123
123
|
export declare function getAllPaths(obj: Record<string, any>, parentPath?: string): string[];
|
|
124
|
-
//# sourceMappingURL=obj.utils.d.ts.map
|
|
@@ -271,7 +271,7 @@ function getValueByPath(obj, path) {
|
|
|
271
271
|
.replace(/\[(\d+)\]/g, '.$1') // convert [0] to .0
|
|
272
272
|
.split('.')
|
|
273
273
|
.filter(Boolean); // remove empty strings
|
|
274
|
-
return parts.reduce((acc, key) => acc
|
|
274
|
+
return parts.reduce((acc, key) => acc?.[key], obj);
|
|
275
275
|
}
|
|
276
276
|
/**
|
|
277
277
|
* Sets a value at a deeply nested key in an object using dot/bracket notation path.
|
|
@@ -426,4 +426,3 @@ function getAllPaths(obj, parentPath = '') {
|
|
|
426
426
|
return [currentPath];
|
|
427
427
|
});
|
|
428
428
|
}
|
|
429
|
-
//# sourceMappingURL=obj.utils.js.map
|
|
@@ -168,16 +168,19 @@ function timed(options = {}) {
|
|
|
168
168
|
// ESNext decorator: second argument is context object
|
|
169
169
|
if (typeof propertyKeyOrContext === 'object' && propertyKeyOrContext !== null && 'name' in propertyKeyOrContext) {
|
|
170
170
|
propertyKey = propertyKeyOrContext.name;
|
|
171
|
-
actualDescriptor = descriptor
|
|
171
|
+
actualDescriptor = descriptor ?? Object.getOwnPropertyDescriptor(target, propertyKey);
|
|
172
172
|
}
|
|
173
173
|
else {
|
|
174
174
|
// Legacy decorator: second argument is property key
|
|
175
175
|
propertyKey = propertyKeyOrContext;
|
|
176
|
-
actualDescriptor = descriptor
|
|
176
|
+
actualDescriptor = descriptor ?? Object.getOwnPropertyDescriptor(target, propertyKey);
|
|
177
177
|
}
|
|
178
178
|
const originalMethod = actualDescriptor.value;
|
|
179
179
|
actualDescriptor.value = function (...args) {
|
|
180
|
-
const methodOptions =
|
|
180
|
+
const methodOptions = {
|
|
181
|
+
...options,
|
|
182
|
+
label: options.label || `${target.constructor.name}.${String(propertyKey)}`
|
|
183
|
+
};
|
|
181
184
|
if (originalMethod.constructor.name === 'AsyncFunction') {
|
|
182
185
|
return timeAsync(() => originalMethod.apply(this, args), methodOptions).then(({ result }) => result);
|
|
183
186
|
}
|
|
@@ -275,4 +278,3 @@ function trackMemoryUsage(fn, options = {}) {
|
|
|
275
278
|
}
|
|
276
279
|
};
|
|
277
280
|
}
|
|
278
|
-
//# sourceMappingURL=performance.utils.js.map
|
|
@@ -83,4 +83,3 @@ export declare function extractSortParams(query: Record<string, string | string[
|
|
|
83
83
|
* @returns Object containing the filters as key-value pairs
|
|
84
84
|
*/
|
|
85
85
|
export declare function extractFilterParams(query: Record<string, string | string[]>, allowedFilters: string[]): Record<string, string | string[]>;
|
|
86
|
-
//# sourceMappingURL=request.utils.d.ts.map
|
|
@@ -43,9 +43,14 @@ const getPaginationParams = (req) => {
|
|
|
43
43
|
const { sortBy, sortOrder } = extractSortParams(query, []);
|
|
44
44
|
// Optional search param
|
|
45
45
|
const search = typeof query.search === 'string' ? query.search : undefined;
|
|
46
|
-
return
|
|
46
|
+
return {
|
|
47
|
+
...query,
|
|
48
|
+
page,
|
|
47
49
|
limit,
|
|
48
|
-
sortBy,
|
|
50
|
+
sortBy,
|
|
51
|
+
sortOrder: sortOrder,
|
|
52
|
+
search
|
|
53
|
+
};
|
|
49
54
|
};
|
|
50
55
|
exports.getPaginationParams = getPaginationParams;
|
|
51
56
|
/**
|
|
@@ -192,4 +197,3 @@ function extractFilterParams(query, allowedFilters) {
|
|
|
192
197
|
}
|
|
193
198
|
return filters;
|
|
194
199
|
}
|
|
195
|
-
//# sourceMappingURL=request.utils.js.map
|
|
@@ -160,4 +160,3 @@ export declare function createPaginatedResponse<T>(allItems: T[], page: number,
|
|
|
160
160
|
* @param {SuccessResponse<any> | ErrorResponse | RedirectResponse} apiResponse - API response instance.
|
|
161
161
|
*/
|
|
162
162
|
export declare function sendResponse(res: any, apiResponse: SuccessResponse<any> | ErrorResponse | RedirectResponse): void;
|
|
163
|
-
//# sourceMappingURL=response.utils.d.ts.map
|
|
@@ -39,6 +39,16 @@ const id_utils_1 = require("./id.utils");
|
|
|
39
39
|
* @typeParam T - The shape of the data returned in the response.
|
|
40
40
|
*/
|
|
41
41
|
class SuccessResponse {
|
|
42
|
+
/** Message describing the result of the operation. */
|
|
43
|
+
message = 'Success';
|
|
44
|
+
/** Whether the response is an error. Always false in success responses. */
|
|
45
|
+
error = false;
|
|
46
|
+
/** The payload returned from the API. */
|
|
47
|
+
data = null;
|
|
48
|
+
/** Timestamp when the response was generated, in ISO format. */
|
|
49
|
+
timestamp = new Date().toISOString();
|
|
50
|
+
/** Unique identifier for this response, useful for request tracing. */
|
|
51
|
+
requestId = (0, context_store_utils_1.getRequestId)() ?? (0, id_utils_1.uuid)();
|
|
42
52
|
/**
|
|
43
53
|
* Constructs a new success response.
|
|
44
54
|
*
|
|
@@ -46,20 +56,9 @@ class SuccessResponse {
|
|
|
46
56
|
* @param {T} [data] - Optional data payload.
|
|
47
57
|
*/
|
|
48
58
|
constructor(message, data) {
|
|
49
|
-
var _a;
|
|
50
|
-
/** Message describing the result of the operation. */
|
|
51
|
-
this.message = 'Success';
|
|
52
|
-
/** Whether the response is an error. Always false in success responses. */
|
|
53
|
-
this.error = false;
|
|
54
|
-
/** The payload returned from the API. */
|
|
55
|
-
this.data = null;
|
|
56
|
-
/** Timestamp when the response was generated, in ISO format. */
|
|
57
|
-
this.timestamp = new Date().toISOString();
|
|
58
|
-
/** Unique identifier for this response, useful for request tracing. */
|
|
59
|
-
this.requestId = (_a = (0, context_store_utils_1.getRequestId)()) !== null && _a !== void 0 ? _a : (0, id_utils_1.uuid)();
|
|
60
59
|
if (message)
|
|
61
60
|
this.message = message;
|
|
62
|
-
this.data = data
|
|
61
|
+
this.data = data ?? null;
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
exports.SuccessResponse = SuccessResponse;
|
|
@@ -68,6 +67,14 @@ exports.SuccessResponse = SuccessResponse;
|
|
|
68
67
|
* Implements `ApiResponse` but omits the `data` field (which should not be present in errors).
|
|
69
68
|
*/
|
|
70
69
|
class ErrorResponse extends Error {
|
|
70
|
+
/** HTTP status code associated with the error (e.g., 404, 500). */
|
|
71
|
+
status;
|
|
72
|
+
/** Indicates that this is an error. Always true. */
|
|
73
|
+
error = true;
|
|
74
|
+
/** Timestamp when the error occurred, in ISO format. */
|
|
75
|
+
timestamp = new Date().toISOString();
|
|
76
|
+
/** Unique identifier for this error instance. */
|
|
77
|
+
requestId = (0, context_store_utils_1.getRequestId)() ?? (0, id_utils_1.uuid)();
|
|
71
78
|
/**
|
|
72
79
|
* Constructs a new error response.
|
|
73
80
|
*
|
|
@@ -75,14 +82,7 @@ class ErrorResponse extends Error {
|
|
|
75
82
|
* @param {number} [status=500] - Optional HTTP status code (defaults to 500).
|
|
76
83
|
*/
|
|
77
84
|
constructor(message, status = 500) {
|
|
78
|
-
var _a;
|
|
79
85
|
super(message);
|
|
80
|
-
/** Indicates that this is an error. Always true. */
|
|
81
|
-
this.error = true;
|
|
82
|
-
/** Timestamp when the error occurred, in ISO format. */
|
|
83
|
-
this.timestamp = new Date().toISOString();
|
|
84
|
-
/** Unique identifier for this error instance. */
|
|
85
|
-
this.requestId = (_a = (0, context_store_utils_1.getRequestId)()) !== null && _a !== void 0 ? _a : (0, id_utils_1.uuid)();
|
|
86
86
|
this.status = status;
|
|
87
87
|
this.name = this.constructor.name;
|
|
88
88
|
Error.captureStackTrace(this, this.constructor);
|
|
@@ -96,6 +96,18 @@ exports.ErrorResponse = ErrorResponse;
|
|
|
96
96
|
* @typeParam T - The shape of each item in the paginated collection.
|
|
97
97
|
*/
|
|
98
98
|
class PaginatedResponse extends SuccessResponse {
|
|
99
|
+
/** Total number of items across all pages */
|
|
100
|
+
total;
|
|
101
|
+
/** Current page number (1-based) */
|
|
102
|
+
page;
|
|
103
|
+
/** Number of items per page */
|
|
104
|
+
pageSize;
|
|
105
|
+
/** Total number of pages */
|
|
106
|
+
totalPages;
|
|
107
|
+
/** Whether there's a next page available */
|
|
108
|
+
hasNext;
|
|
109
|
+
/** Whether there's a previous page available */
|
|
110
|
+
hasPrevious;
|
|
99
111
|
/**
|
|
100
112
|
* Constructs a new paginated response.
|
|
101
113
|
*
|
|
@@ -135,6 +147,14 @@ exports.NoContentResponse = NoContentResponse;
|
|
|
135
147
|
* Specialized response for redirects.
|
|
136
148
|
*/
|
|
137
149
|
class RedirectResponse {
|
|
150
|
+
/** The URL to redirect to */
|
|
151
|
+
redirectUrl;
|
|
152
|
+
/** HTTP status code for the redirect (301, 302, 303, 307, 308) */
|
|
153
|
+
statusCode;
|
|
154
|
+
/** Whether the response is a redirect */
|
|
155
|
+
isRedirect = true;
|
|
156
|
+
/** Unique identifier for this response */
|
|
157
|
+
requestId = (0, context_store_utils_1.getRequestId)() ?? (0, id_utils_1.uuid)();
|
|
138
158
|
/**
|
|
139
159
|
* Constructs a new redirect response.
|
|
140
160
|
*
|
|
@@ -142,11 +162,6 @@ class RedirectResponse {
|
|
|
142
162
|
* @param {number} [statusCode=302] - HTTP status code for the redirect.
|
|
143
163
|
*/
|
|
144
164
|
constructor(url, statusCode = 302) {
|
|
145
|
-
var _a;
|
|
146
|
-
/** Whether the response is a redirect */
|
|
147
|
-
this.isRedirect = true;
|
|
148
|
-
/** Unique identifier for this response */
|
|
149
|
-
this.requestId = (_a = (0, context_store_utils_1.getRequestId)()) !== null && _a !== void 0 ? _a : (0, id_utils_1.uuid)();
|
|
150
165
|
this.redirectUrl = url;
|
|
151
166
|
this.statusCode = statusCode;
|
|
152
167
|
}
|
|
@@ -185,17 +200,17 @@ function createErrorResponse(message, statusCode = 500) {
|
|
|
185
200
|
*/
|
|
186
201
|
function createFinalErrorResponse(req, status, message, error, options) {
|
|
187
202
|
const isDev = env_utils_1.Env.isDev();
|
|
188
|
-
const includeDetails =
|
|
203
|
+
const includeDetails = options?.includeDetails && isDev;
|
|
189
204
|
const response = {
|
|
190
205
|
error: true,
|
|
191
206
|
message,
|
|
192
207
|
timestamp: new Date().toISOString(),
|
|
193
|
-
requestId:
|
|
208
|
+
requestId: error?.requestId || req?.id || (0, id_utils_1.uuid)(),
|
|
194
209
|
status,
|
|
195
210
|
path: req.originalUrl || req.url
|
|
196
211
|
};
|
|
197
212
|
// Include stack trace in development mode if requested
|
|
198
|
-
if (includeDetails &&
|
|
213
|
+
if (includeDetails && error?.stack) {
|
|
199
214
|
response.stack = error.stack.split('\n').map((line) => line.trim());
|
|
200
215
|
}
|
|
201
216
|
return response;
|
|
@@ -257,4 +272,3 @@ function sendResponse(res, apiResponse) {
|
|
|
257
272
|
}
|
|
258
273
|
res.status(200).json(successResponse);
|
|
259
274
|
}
|
|
260
|
-
//# sourceMappingURL=response.utils.js.map
|
|
@@ -122,7 +122,7 @@ function toStr(value, defaultValue = '') {
|
|
|
122
122
|
}
|
|
123
123
|
return String(value);
|
|
124
124
|
}
|
|
125
|
-
catch
|
|
125
|
+
catch {
|
|
126
126
|
return defaultValue;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -142,7 +142,7 @@ function toNum(value, defaultValue = 0) {
|
|
|
142
142
|
const num = Number(value);
|
|
143
143
|
return isNaN(num) ? defaultValue : num;
|
|
144
144
|
}
|
|
145
|
-
catch
|
|
145
|
+
catch {
|
|
146
146
|
return defaultValue;
|
|
147
147
|
}
|
|
148
148
|
}
|
|
@@ -193,4 +193,3 @@ function ensureType(value, expectedType, defaultValue) {
|
|
|
193
193
|
}
|
|
194
194
|
return defaultValue;
|
|
195
195
|
}
|
|
196
|
-
//# 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
|