exisjs 0.7.5 → 0.7.7
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/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +12 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/clean.d.ts +5 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +30 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +171 -86
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +6 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +57 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +54 -16
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +26 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/manifest.d.ts +1 -0
- package/dist/cli/manifest.d.ts.map +1 -1
- package/dist/cli/manifest.js +264 -33
- package/dist/cli/manifest.js.map +1 -1
- package/dist/cli/resolve-aliases.d.ts +1 -1
- package/dist/cli/resolve-aliases.d.ts.map +1 -1
- package/dist/cli/resolve-aliases.js +30 -13
- package/dist/cli/resolve-aliases.js.map +1 -1
- package/dist/config/config.d.ts +3 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +9 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +6 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/cron/expressions.d.ts +45 -0
- package/dist/cron/expressions.d.ts.map +1 -0
- package/dist/cron/expressions.js +87 -0
- package/dist/cron/expressions.js.map +1 -0
- package/dist/cron/index.d.ts +6 -0
- package/dist/cron/index.d.ts.map +1 -0
- package/dist/cron/index.js +22 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/job.d.ts +50 -0
- package/dist/cron/job.d.ts.map +1 -0
- package/dist/cron/job.js +247 -0
- package/dist/cron/job.js.map +1 -0
- package/dist/cron/manager.d.ts +105 -0
- package/dist/cron/manager.d.ts.map +1 -0
- package/dist/cron/manager.js +245 -0
- package/dist/cron/manager.js.map +1 -0
- package/dist/cron/parser.d.ts +22 -0
- package/dist/cron/parser.d.ts.map +1 -0
- package/dist/cron/parser.js +269 -0
- package/dist/cron/parser.js.map +1 -0
- package/dist/cron/types.d.ts +76 -0
- package/dist/cron/types.d.ts.map +1 -0
- package/dist/cron/types.js +3 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/decorators/constants.d.ts +2 -0
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +3 -1
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/core.d.ts +29 -11
- package/dist/decorators/core.d.ts.map +1 -1
- package/dist/decorators/core.js +49 -11
- package/dist/decorators/core.js.map +1 -1
- package/dist/decorators/cron.d.ts +57 -0
- package/dist/decorators/cron.d.ts.map +1 -0
- package/dist/decorators/cron.js +143 -0
- package/dist/decorators/cron.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +2 -0
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/middleware.d.ts +65 -2
- package/dist/decorators/middleware.d.ts.map +1 -1
- package/dist/decorators/middleware.js +148 -62
- package/dist/decorators/middleware.js.map +1 -1
- package/dist/decorators/params.d.ts +102 -2
- package/dist/decorators/params.d.ts.map +1 -1
- package/dist/decorators/params.js +105 -3
- package/dist/decorators/params.js.map +1 -1
- package/dist/decorators/response.d.ts.map +1 -1
- package/dist/decorators/response.js +32 -22
- package/dist/decorators/response.js.map +1 -1
- package/dist/decorators/routing.d.ts +81 -16
- package/dist/decorators/routing.d.ts.map +1 -1
- package/dist/decorators/routing.js +81 -16
- package/dist/decorators/routing.js.map +1 -1
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/container.js +6 -1
- package/dist/di/container.js.map +1 -1
- package/dist/docs/content/cli/commands.mdx +1 -1
- package/dist/docs/content/controllers.mdx +127 -10
- package/dist/docs/content/cron.mdx +196 -0
- package/dist/docs/content/decorators.mdx +22 -4
- package/dist/docs/content/errors.mdx +58 -9
- package/dist/docs/content/introduction.mdx +7 -7
- package/dist/docs/content/middleware.mdx +269 -6
- package/dist/docs/content/requests.mdx +180 -6
- package/dist/docs/content/responses.mdx +283 -32
- package/dist/docs/content/routing.mdx +46 -0
- package/dist/docs/content/swagger.mdx +228 -0
- package/dist/docs/content/validation.mdx +190 -11
- package/dist/docs/reference/context.mdx +11 -0
- package/dist/docs/reference/cron.mdx +300 -0
- package/dist/docs/reference/decorators.mdx +22 -4
- package/dist/docs/reference/error.mdx +88 -0
- package/dist/docs/reference/logger.mdx +175 -43
- package/dist/docs/reference/middleware.mdx +31 -0
- package/dist/docs/reference/router.mdx +22 -0
- package/dist/docs/reference/swagger.mdx +143 -0
- package/dist/docs/reference/validator.mdx +83 -23
- package/dist/error/errors.d.ts.map +1 -1
- package/dist/error/errors.js +95 -43
- package/dist/error/errors.js.map +1 -1
- package/dist/error/index.d.ts +1 -0
- package/dist/error/index.d.ts.map +1 -1
- package/dist/error/index.js +11 -1
- package/dist/error/index.js.map +1 -1
- package/dist/error/overlay.d.ts +42 -0
- package/dist/error/overlay.d.ts.map +1 -0
- package/dist/error/overlay.js +306 -0
- package/dist/error/overlay.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/start-server.js +33 -7
- package/dist/lib/start-server.js.map +1 -1
- package/dist/logger/index.d.ts +1 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +9 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/middleware/guard.d.ts +2 -2
- package/dist/middleware/guard.d.ts.map +1 -1
- package/dist/middleware/guard.js.map +1 -1
- package/dist/middleware/ip-filter.d.ts +1 -0
- package/dist/middleware/ip-filter.d.ts.map +1 -1
- package/dist/middleware/ip-filter.js +2 -0
- package/dist/middleware/ip-filter.js.map +1 -1
- package/dist/middleware/middleware.d.ts +2 -2
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +20 -2
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/middleware/security.d.ts +43 -1
- package/dist/middleware/security.d.ts.map +1 -1
- package/dist/middleware/security.js +101 -0
- package/dist/middleware/security.js.map +1 -1
- package/dist/response/index.d.ts +229 -6
- package/dist/response/index.d.ts.map +1 -1
- package/dist/response/index.js +272 -2
- package/dist/response/index.js.map +1 -1
- package/dist/router/boundary.d.ts +41 -11
- package/dist/router/boundary.d.ts.map +1 -1
- package/dist/router/boundary.js +24 -2
- package/dist/router/boundary.js.map +1 -1
- package/dist/router/controller-registrar.d.ts.map +1 -1
- package/dist/router/controller-registrar.js +108 -4
- package/dist/router/controller-registrar.js.map +1 -1
- package/dist/router/index.d.ts +2 -2
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +2 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/route-builder.d.ts +262 -65
- package/dist/router/route-builder.d.ts.map +1 -1
- package/dist/router/route-builder.js +181 -23
- package/dist/router/route-builder.js.map +1 -1
- package/dist/router/route-scanner.d.ts +6 -0
- package/dist/router/route-scanner.d.ts.map +1 -1
- package/dist/router/route-scanner.js +71 -792
- package/dist/router/route-scanner.js.map +1 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +62 -17
- package/dist/router/router.js.map +1 -1
- package/dist/router/scanner/boundary-loader.d.ts +18 -0
- package/dist/router/scanner/boundary-loader.d.ts.map +1 -0
- package/dist/router/scanner/boundary-loader.js +539 -0
- package/dist/router/scanner/boundary-loader.js.map +1 -0
- package/dist/router/scanner/cron-mounter.d.ts +15 -0
- package/dist/router/scanner/cron-mounter.d.ts.map +1 -0
- package/dist/router/scanner/cron-mounter.js +216 -0
- package/dist/router/scanner/cron-mounter.js.map +1 -0
- package/dist/router/scanner/error-mounter.d.ts +14 -0
- package/dist/router/scanner/error-mounter.d.ts.map +1 -0
- package/dist/router/scanner/error-mounter.js +200 -0
- package/dist/router/scanner/error-mounter.js.map +1 -0
- package/dist/router/scanner/fs-scanner.d.ts +25 -0
- package/dist/router/scanner/fs-scanner.d.ts.map +1 -0
- package/dist/router/scanner/fs-scanner.js +115 -0
- package/dist/router/scanner/fs-scanner.js.map +1 -0
- package/dist/router/scanner/functional-compiler.d.ts +9 -0
- package/dist/router/scanner/functional-compiler.d.ts.map +1 -0
- package/dist/router/scanner/functional-compiler.js +233 -0
- package/dist/router/scanner/functional-compiler.js.map +1 -0
- package/dist/router/scanner/index.d.ts +9 -0
- package/dist/router/scanner/index.d.ts.map +1 -0
- package/dist/router/scanner/index.js +19 -0
- package/dist/router/scanner/index.js.map +1 -0
- package/dist/router/types.d.ts +23 -0
- package/dist/router/types.d.ts.map +1 -1
- package/dist/server/app.d.ts +3 -0
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +13 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +91 -30
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/cluster.d.ts.map +1 -1
- package/dist/server/cluster.js +13 -2
- package/dist/server/cluster.js.map +1 -1
- package/dist/server/context.d.ts +8 -0
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +50 -6
- package/dist/server/context.js.map +1 -1
- package/dist/server/helpers/body-parser.d.ts +18 -0
- package/dist/server/helpers/body-parser.d.ts.map +1 -0
- package/dist/server/helpers/body-parser.js +246 -0
- package/dist/server/helpers/body-parser.js.map +1 -0
- package/dist/server/helpers/cookie.d.ts +4 -0
- package/dist/server/helpers/cookie.d.ts.map +1 -0
- package/dist/server/helpers/cookie.js +61 -0
- package/dist/server/helpers/cookie.js.map +1 -0
- package/dist/server/helpers/etag.d.ts +3 -0
- package/dist/server/helpers/etag.d.ts.map +1 -0
- package/dist/server/helpers/etag.js +25 -0
- package/dist/server/helpers/etag.js.map +1 -0
- package/dist/server/helpers/index.d.ts +6 -0
- package/dist/server/helpers/index.d.ts.map +1 -0
- package/dist/server/helpers/index.js +21 -0
- package/dist/server/helpers/index.js.map +1 -0
- package/dist/server/helpers/ip.d.ts +9 -0
- package/dist/server/helpers/ip.d.ts.map +1 -0
- package/dist/server/helpers/ip.js +62 -0
- package/dist/server/helpers/ip.js.map +1 -0
- package/dist/server/helpers/stream.d.ts +4 -0
- package/dist/server/helpers/stream.d.ts.map +1 -0
- package/dist/server/helpers/stream.js +193 -0
- package/dist/server/helpers/stream.js.map +1 -0
- package/dist/server/lifecycle.d.ts +22 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/lifecycle.js +106 -0
- package/dist/server/lifecycle.js.map +1 -0
- package/dist/server/request-handler.d.ts +1 -0
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +27 -17
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts +1 -139
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +37 -433
- package/dist/server/request.js.map +1 -1
- package/dist/server/response.d.ts +112 -156
- package/dist/server/response.d.ts.map +1 -1
- package/dist/server/response.js +129 -279
- package/dist/server/response.js.map +1 -1
- package/dist/swagger/decorators.d.ts +81 -0
- package/dist/swagger/decorators.d.ts.map +1 -0
- package/dist/swagger/decorators.js +172 -0
- package/dist/swagger/decorators.js.map +1 -0
- package/dist/swagger/generator.d.ts +19 -0
- package/dist/swagger/generator.d.ts.map +1 -0
- package/dist/swagger/generator.js +344 -0
- package/dist/swagger/generator.js.map +1 -0
- package/dist/swagger/index.d.ts +31 -0
- package/dist/swagger/index.d.ts.map +1 -0
- package/dist/swagger/index.js +53 -0
- package/dist/swagger/index.js.map +1 -0
- package/dist/swagger/mounter.d.ts +7 -0
- package/dist/swagger/mounter.d.ts.map +1 -0
- package/dist/swagger/mounter.js +56 -0
- package/dist/swagger/mounter.js.map +1 -0
- package/dist/swagger/types.d.ts +190 -0
- package/dist/swagger/types.d.ts.map +1 -0
- package/dist/swagger/types.js +3 -0
- package/dist/swagger/types.js.map +1 -0
- package/dist/swagger/ui.d.ts +6 -0
- package/dist/swagger/ui.d.ts.map +1 -0
- package/dist/swagger/ui.js +118 -0
- package/dist/swagger/ui.js.map +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mocks.d.ts.map +1 -1
- package/dist/testing/mocks.js +15 -3
- package/dist/testing/mocks.js.map +1 -1
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +184 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/validator/builder.d.ts +223 -0
- package/dist/validator/builder.d.ts.map +1 -0
- package/dist/validator/builder.js +517 -0
- package/dist/validator/builder.js.map +1 -0
- package/dist/validator/engine.d.ts +19 -0
- package/dist/validator/engine.d.ts.map +1 -0
- package/dist/validator/engine.js +568 -0
- package/dist/validator/engine.js.map +1 -0
- package/dist/validator/error.d.ts +12 -0
- package/dist/validator/error.d.ts.map +1 -0
- package/dist/validator/error.js +63 -0
- package/dist/validator/error.js.map +1 -0
- package/dist/validator/pagination.d.ts +40 -0
- package/dist/validator/pagination.d.ts.map +1 -0
- package/dist/validator/pagination.js +60 -0
- package/dist/validator/pagination.js.map +1 -0
- package/dist/validator/tex-types.d.ts +2 -1
- package/dist/validator/tex-types.d.ts.map +1 -1
- package/dist/validator/tex-types.js +2 -1
- package/dist/validator/tex-types.js.map +1 -1
- package/dist/validator/tex.d.ts +6 -142
- package/dist/validator/tex.d.ts.map +1 -1
- package/dist/validator/tex.js +14 -733
- package/dist/validator/tex.js.map +1 -1
- package/dist/validator/types.d.ts +83 -0
- package/dist/validator/types.d.ts.map +1 -0
- package/dist/validator/types.js +3 -0
- package/dist/validator/types.js.map +1 -0
- package/package.json +8 -4
- package/dist/dev/error-overlay.d.ts +0 -3
- package/dist/dev/error-overlay.d.ts.map +0 -1
- package/dist/dev/error-overlay.js +0 -118
- package/dist/dev/error-overlay.js.map +0 -1
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { LoggerConfig, Logger } from '../types';
|
|
2
|
+
export declare function formatBytes(bytes?: number): string;
|
|
3
|
+
export declare function formatLatency(ms?: number): string;
|
|
4
|
+
export declare function formatMethod(method?: string): string;
|
|
5
|
+
export declare function formatStatus(status: number): string;
|
|
6
|
+
export declare function formatUrl(url?: string): string;
|
|
7
|
+
export declare function formatIp(ip?: string): string;
|
|
8
|
+
export declare function extractValidationSummary(val: any): string;
|
|
9
|
+
export declare function extractErrorMessage(err: any): string;
|
|
2
10
|
export declare function createLogger(config?: LoggerConfig): Logger;
|
|
3
11
|
export declare function createSilentLogger(): Logger;
|
|
4
12
|
export declare function isLogger(obj: unknown): obj is Logger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAOpD,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAQ,GAAG,MAAM,CAkCnD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,SAAS,CAAC,GAAG,SAAM,GAAG,MAAM,CAQ3C;AAED,wBAAgB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5C;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAkBzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAMpD;AAkBD,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CA4G9D;AAID,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CASpD;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS,GACzC,YAAY,CAId"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -3,11 +3,142 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.formatBytes = formatBytes;
|
|
7
|
+
exports.formatLatency = formatLatency;
|
|
8
|
+
exports.formatMethod = formatMethod;
|
|
9
|
+
exports.formatStatus = formatStatus;
|
|
10
|
+
exports.formatUrl = formatUrl;
|
|
11
|
+
exports.formatIp = formatIp;
|
|
12
|
+
exports.extractValidationSummary = extractValidationSummary;
|
|
13
|
+
exports.extractErrorMessage = extractErrorMessage;
|
|
6
14
|
exports.createLogger = createLogger;
|
|
7
15
|
exports.createSilentLogger = createSilentLogger;
|
|
8
16
|
exports.isLogger = isLogger;
|
|
9
17
|
exports.resolveLoggerConfig = resolveLoggerConfig;
|
|
10
18
|
const pino_1 = __importDefault(require("pino"));
|
|
19
|
+
const node_http_1 = require("node:http");
|
|
20
|
+
const node_stream_1 = require("node:stream");
|
|
21
|
+
// ─── Request Log Terminal Formatting Helpers ─────────────────────────────────
|
|
22
|
+
function formatBytes(bytes) {
|
|
23
|
+
if (bytes === undefined || bytes === null || isNaN(bytes) || bytes <= 0)
|
|
24
|
+
return '';
|
|
25
|
+
if (bytes < 1024)
|
|
26
|
+
return `${bytes} B`;
|
|
27
|
+
if (bytes < 1024 * 1024)
|
|
28
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
29
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
30
|
+
}
|
|
31
|
+
function formatLatency(ms) {
|
|
32
|
+
if (ms === undefined || ms === null || isNaN(ms))
|
|
33
|
+
return '';
|
|
34
|
+
let text;
|
|
35
|
+
if (ms < 1)
|
|
36
|
+
text = '<1ms';
|
|
37
|
+
else if (ms < 1000)
|
|
38
|
+
text = `${Math.round(ms * 10) / 10}ms`;
|
|
39
|
+
else
|
|
40
|
+
text = `${(ms / 1000).toFixed(2)}s`;
|
|
41
|
+
// Color coding: <50ms green, 50-250ms yellow, >250ms red
|
|
42
|
+
if (ms < 50)
|
|
43
|
+
return `\x1b[32m${text}\x1b[0m`;
|
|
44
|
+
if (ms < 250)
|
|
45
|
+
return `\x1b[33m${text}\x1b[0m`;
|
|
46
|
+
return `\x1b[1;31m${text}\x1b[0m`;
|
|
47
|
+
}
|
|
48
|
+
function formatMethod(method = 'GET') {
|
|
49
|
+
const m = method.toUpperCase();
|
|
50
|
+
const padded = m.padEnd(7);
|
|
51
|
+
switch (m) {
|
|
52
|
+
case 'GET':
|
|
53
|
+
return `\x1b[1;36m${padded}\x1b[0m`;
|
|
54
|
+
case 'POST':
|
|
55
|
+
return `\x1b[1;32m${padded}\x1b[0m`;
|
|
56
|
+
case 'PUT':
|
|
57
|
+
case 'PATCH':
|
|
58
|
+
return `\x1b[1;33m${padded}\x1b[0m`;
|
|
59
|
+
case 'DELETE':
|
|
60
|
+
return `\x1b[1;31m${padded}\x1b[0m`;
|
|
61
|
+
case 'QUERY':
|
|
62
|
+
return `\x1b[38;2;60;160;255m\x1b[1m${padded}\x1b[0m`;
|
|
63
|
+
case 'SEARCH':
|
|
64
|
+
return `\x1b[1;36m${padded}\x1b[0m`;
|
|
65
|
+
case 'OPTIONS':
|
|
66
|
+
case 'HEAD':
|
|
67
|
+
return `\x1b[1;35m${padded}\x1b[0m`;
|
|
68
|
+
case 'WS':
|
|
69
|
+
case 'WSS':
|
|
70
|
+
case 'UPGRADE':
|
|
71
|
+
return `\x1b[38;2;160;70;255m\x1b[1m${padded}\x1b[0m`;
|
|
72
|
+
case 'SSE':
|
|
73
|
+
return `\x1b[1;36m${padded}\x1b[0m`;
|
|
74
|
+
case 'PURGE':
|
|
75
|
+
return `\x1b[1;31m${padded}\x1b[0m`;
|
|
76
|
+
case 'CONNECT':
|
|
77
|
+
case 'TRACE':
|
|
78
|
+
return `\x1b[1;90m${padded}\x1b[0m`;
|
|
79
|
+
default:
|
|
80
|
+
return `\x1b[1;37m${padded}\x1b[0m`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function formatStatus(status) {
|
|
84
|
+
const phrase = node_http_1.STATUS_CODES[status] || '';
|
|
85
|
+
const text = `${status} ${phrase}`.trim();
|
|
86
|
+
if (status === 101)
|
|
87
|
+
return `\x1b[38;2;160;70;255m\x1b[1m${text}\x1b[0m`;
|
|
88
|
+
if (status < 300)
|
|
89
|
+
return `\x1b[1;32m${text}\x1b[0m`;
|
|
90
|
+
if (status < 400)
|
|
91
|
+
return `\x1b[1;36m${text}\x1b[0m`;
|
|
92
|
+
if (status < 500)
|
|
93
|
+
return `\x1b[1;33m${text}\x1b[0m`;
|
|
94
|
+
return `\x1b[1;31m${text}\x1b[0m`;
|
|
95
|
+
}
|
|
96
|
+
function formatUrl(url = '/') {
|
|
97
|
+
const qIdx = url.indexOf('?');
|
|
98
|
+
if (qIdx === -1) {
|
|
99
|
+
return `\x1b[37m${url}\x1b[0m`;
|
|
100
|
+
}
|
|
101
|
+
const path = url.slice(0, qIdx);
|
|
102
|
+
const query = url.slice(qIdx);
|
|
103
|
+
return `\x1b[37m${path}\x1b[0m\x1b[90m${query}\x1b[0m`;
|
|
104
|
+
}
|
|
105
|
+
function formatIp(ip) {
|
|
106
|
+
if (!ip || ip === '127.0.0.1' || ip === '::1' || ip === 'localhost')
|
|
107
|
+
return '';
|
|
108
|
+
return `\x1b[90m${ip}\x1b[0m`;
|
|
109
|
+
}
|
|
110
|
+
function extractValidationSummary(val) {
|
|
111
|
+
if (!val)
|
|
112
|
+
return '';
|
|
113
|
+
if (typeof val === 'string')
|
|
114
|
+
return val;
|
|
115
|
+
const partTag = val.httpPart ? ` [${val.httpPart}]` : '';
|
|
116
|
+
if (val.errors && typeof val.errors === 'object') {
|
|
117
|
+
const entries = Object.entries(val.errors);
|
|
118
|
+
if (entries.length === 1) {
|
|
119
|
+
return `${partTag ? partTag.trim() + ': ' : ''}Field "${entries[0][0]}" ${entries[0][1]}`;
|
|
120
|
+
}
|
|
121
|
+
if (entries.length > 1) {
|
|
122
|
+
return `${partTag ? partTag.trim() + ': ' : ''}${entries.length} validation errors (${entries.map(([k]) => k).join(', ')})`;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (Array.isArray(val.details) && val.details.length > 0) {
|
|
126
|
+
const first = val.details[0];
|
|
127
|
+
return `${partTag ? partTag.trim() + ': ' : ''}Field "${first.field}" expected ${first.expected}, received ${first.received}`;
|
|
128
|
+
}
|
|
129
|
+
return typeof val === 'object' ? JSON.stringify(val) : String(val);
|
|
130
|
+
}
|
|
131
|
+
function extractErrorMessage(err) {
|
|
132
|
+
if (!err)
|
|
133
|
+
return '';
|
|
134
|
+
if (typeof err === 'string')
|
|
135
|
+
return err;
|
|
136
|
+
if (err.message)
|
|
137
|
+
return String(err.message);
|
|
138
|
+
if (err.msg)
|
|
139
|
+
return String(err.msg);
|
|
140
|
+
return typeof err === 'object' ? JSON.stringify(err) : String(err);
|
|
141
|
+
}
|
|
11
142
|
// ─── Create Logger ────────────────────────────────────────────────────────────
|
|
12
143
|
const DEFAULT_REDACT = [
|
|
13
144
|
'req.headers.authorization',
|
|
@@ -51,11 +182,63 @@ function createLogger(config = {}) {
|
|
|
51
182
|
};
|
|
52
183
|
const streams = [];
|
|
53
184
|
if (pretty) {
|
|
185
|
+
const stripColonStream = new node_stream_1.Transform({
|
|
186
|
+
transform(chunk, _encoding, callback) {
|
|
187
|
+
const str = chunk
|
|
188
|
+
.toString()
|
|
189
|
+
// eslint-disable-next-line no-control-regex
|
|
190
|
+
.replace(/(\[\w+\](?:\x1b\[[0-9;]*m)?):/g, '$1');
|
|
191
|
+
this.push(str);
|
|
192
|
+
callback();
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
stripColonStream.pipe(process.stdout);
|
|
54
196
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
55
197
|
const prettyStream = require('pino-pretty')({
|
|
56
198
|
colorize: true,
|
|
57
199
|
translateTime: 'SYS:HH:MM:ss',
|
|
58
|
-
ignore: 'pid,hostname',
|
|
200
|
+
ignore: 'pid,hostname,statusCode,responseTime,method,url,contentLength,ip,validation,err,error,requestId,silentLog,probeBlocked',
|
|
201
|
+
customPrettifiers: {
|
|
202
|
+
level: (lvl) => {
|
|
203
|
+
const l = String(lvl).toLowerCase();
|
|
204
|
+
if (l.includes('error') ||
|
|
205
|
+
l.includes('50') ||
|
|
206
|
+
l.includes('fatal') ||
|
|
207
|
+
l.includes('60')) {
|
|
208
|
+
return `\x1b[1;31m[error]\x1b[0m`;
|
|
209
|
+
}
|
|
210
|
+
if (l.includes('warn') || l.includes('40')) {
|
|
211
|
+
return `\x1b[1;33m[warn]\x1b[0m`;
|
|
212
|
+
}
|
|
213
|
+
if (l.includes('debug') || l.includes('20')) {
|
|
214
|
+
return `\x1b[90m[debug]\x1b[0m`;
|
|
215
|
+
}
|
|
216
|
+
return `\x1b[38;2;160;70;255m[exis]\x1b[0m`;
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
messageFormat: (log, messageKey) => {
|
|
220
|
+
if (log.statusCode !== undefined) {
|
|
221
|
+
const method = formatMethod(log.method);
|
|
222
|
+
const url = formatUrl(log.url);
|
|
223
|
+
const status = formatStatus(log.statusCode);
|
|
224
|
+
const latency = formatLatency(log.responseTime);
|
|
225
|
+
const size = log.contentLength
|
|
226
|
+
? `\x1b[90m${formatBytes(log.contentLength)}\x1b[0m`
|
|
227
|
+
: '';
|
|
228
|
+
const ip = formatIp(log.ip);
|
|
229
|
+
const parts = [method, url, status, latency, size, ip].filter(Boolean);
|
|
230
|
+
let out = parts.join(' ');
|
|
231
|
+
if (log.validation) {
|
|
232
|
+
out += `\n \x1b[33m└─ ⚠ Validation:\x1b[0m \x1b[90m${extractValidationSummary(log.validation)}\x1b[0m`;
|
|
233
|
+
}
|
|
234
|
+
else if (log.error || log.err) {
|
|
235
|
+
out += `\n \x1b[31m└─ ✖ Error:\x1b[0m \x1b[90m${extractErrorMessage(log.error || log.err)}\x1b[0m`;
|
|
236
|
+
}
|
|
237
|
+
return out;
|
|
238
|
+
}
|
|
239
|
+
return log[messageKey] || '';
|
|
240
|
+
},
|
|
241
|
+
destination: stripColonStream,
|
|
59
242
|
});
|
|
60
243
|
streams.push({
|
|
61
244
|
level: options.level,
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { TexString, TexNumber, TexBoolean, TexArray, TexEnum, TexLiteral, TexUnion, TexDate, TexRecord, TexAny, TexFile, ResolveSchema } from './tex-types';
|
|
2
|
+
import type { TexBaseOptions, TexStringOptions, TexNumberOptions, TexBooleanOptions, TexArrayOptions, TexEnumOptions, TexObjectOptions, TexFileOptions, TexPasswordOptions, TexDateOptions } from './types';
|
|
3
|
+
import { TexEngine } from './engine';
|
|
4
|
+
/**
|
|
5
|
+
* Ultra-high performance declarative schema builder powered by the native Rust validator.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TexBuilder {
|
|
8
|
+
/**
|
|
9
|
+
* Defines a string schema with built-in sanitization and security protections.
|
|
10
|
+
*
|
|
11
|
+
* @param opts Validation rules and transformations (min, max, trim, toLowerCase, escapeHtml, etc.)
|
|
12
|
+
* @returns Strongly typed string schema descriptor
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const username = tex.string({ min: 3, max: 20, trim: true, toLowerCase: true })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
string<O extends TexStringOptions = TexStringOptions>(opts?: O): TexString<O['optional'] extends true ? true : false>;
|
|
20
|
+
/**
|
|
21
|
+
* Defines a number schema with bounds and optional auto-coercion from string query parameters.
|
|
22
|
+
*
|
|
23
|
+
* @param opts Validation rules (min, max, coerce, default)
|
|
24
|
+
* @returns Strongly typed number schema descriptor
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const age = tex.number({ min: 18, max: 120, coerce: true })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
number<O extends TexNumberOptions = TexNumberOptions>(opts?: O): TexNumber<O['optional'] extends true ? true : false>;
|
|
32
|
+
/**
|
|
33
|
+
* Defines a boolean schema with optional string-to-boolean coercion (`"true"`, `"false"`).
|
|
34
|
+
*
|
|
35
|
+
* @param opts Validation rules (coerce, optional, default)
|
|
36
|
+
* @returns Strongly typed boolean schema descriptor
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const isActive = tex.boolean({ coerce: true, default: true })
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
boolean<O extends TexBooleanOptions = TexBooleanOptions>(opts?: O): TexBoolean<O['optional'] extends true ? true : false>;
|
|
44
|
+
/**
|
|
45
|
+
* Defines an email schema verified natively against RFC standards.
|
|
46
|
+
*
|
|
47
|
+
* @param opts Validation and formatting rules
|
|
48
|
+
* @returns Strongly typed email string schema descriptor
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* const userEmail = tex.email({ trim: true, toLowerCase: true })
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
email<O extends TexStringOptions = TexStringOptions>(opts?: O): TexString<O['optional'] extends true ? true : false>;
|
|
56
|
+
/**
|
|
57
|
+
* Defines a UUID v1 or v4 schema.
|
|
58
|
+
*
|
|
59
|
+
* @param opts UUID options including optional version specification
|
|
60
|
+
* @returns Strongly typed UUID string schema descriptor
|
|
61
|
+
*/
|
|
62
|
+
uuid<O extends TexStringOptions & {
|
|
63
|
+
version?: 1 | 4;
|
|
64
|
+
} = TexStringOptions & {
|
|
65
|
+
version?: 1 | 4;
|
|
66
|
+
}>(opts?: O): TexString<O['optional'] extends true ? true : false>;
|
|
67
|
+
/**
|
|
68
|
+
* Defines a CUID (Collision-resistant Unique Identifier) schema.
|
|
69
|
+
*/
|
|
70
|
+
cuid<O extends TexStringOptions = TexStringOptions>(opts?: O): TexString<O['optional'] extends true ? true : false>;
|
|
71
|
+
/**
|
|
72
|
+
* Defines a Credit Card schema validated via the Luhn checksum algorithm.
|
|
73
|
+
*/
|
|
74
|
+
creditCard<O extends TexStringOptions = TexStringOptions>(opts?: O): TexString<O['optional'] extends true ? true : false>;
|
|
75
|
+
/**
|
|
76
|
+
* Defines a secure password schema with enforcement for length, numbers, symbols, and casing.
|
|
77
|
+
*
|
|
78
|
+
* @param opts Complexity constraints (min, requireNumbers, requireSymbols, requireUppercase, requireLowercase)
|
|
79
|
+
* @returns Strongly typed password schema descriptor
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* const password = tex.password({
|
|
84
|
+
* min: 8,
|
|
85
|
+
* requireNumbers: true,
|
|
86
|
+
* requireSymbols: true,
|
|
87
|
+
* requireUppercase: true
|
|
88
|
+
* })
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
password<O extends TexPasswordOptions = TexPasswordOptions>(opts?: O): TexString<O['optional'] extends true ? true : false>;
|
|
92
|
+
/**
|
|
93
|
+
* Defines an array schema with item validation, bounds, and automatic coercion from comma-delimited strings.
|
|
94
|
+
*
|
|
95
|
+
* @param schema Schema descriptor for each item in the array
|
|
96
|
+
* @param opts Array rules (min, max, dedupe, coerce, default)
|
|
97
|
+
* @returns Strongly typed array schema descriptor
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const tags = tex.array(tex.string({ trim: true }), { min: 1, max: 10, dedupe: true })
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
array<T, O extends TexArrayOptions<T> = TexArrayOptions<T>>(schema: T, opts?: O): TexArray<T, O['optional'] extends true ? true : false>;
|
|
105
|
+
/**
|
|
106
|
+
* Defines an enum schema restricted to an exact list of allowed string literals.
|
|
107
|
+
*
|
|
108
|
+
* @param values Array of allowed string values
|
|
109
|
+
* @param opts Enum options (optional, default)
|
|
110
|
+
* @returns Strongly typed enum schema descriptor
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* const role = tex.enum(['admin', 'user', 'guest'], { default: 'user' })
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
enum<T extends string, O extends TexEnumOptions<T> = TexEnumOptions<T>>(values: T[], opts?: O): TexEnum<T, O['optional'] extends true ? true : false>;
|
|
118
|
+
/**
|
|
119
|
+
* Defines an exact literal value schema (e.g. `'v1'`, `42`, `true`).
|
|
120
|
+
*/
|
|
121
|
+
literal<T extends string | number | boolean, O extends TexBaseOptions = TexBaseOptions>(value: T, opts?: O): TexLiteral<T, O['optional'] extends true ? true : false>;
|
|
122
|
+
/**
|
|
123
|
+
* Defines a union schema that succeeds if any of the provided candidate schemas match.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* const idOrEmail = tex.union([tex.number({ coerce: true }), tex.email()])
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
union<T extends any[], O extends TexBaseOptions = TexBaseOptions>(schemas: T, opts?: O): TexUnion<T, O['optional'] extends true ? true : false>;
|
|
131
|
+
/**
|
|
132
|
+
* Defines a date schema with bounds checking and automatic coercion from ISO strings or timestamps.
|
|
133
|
+
*
|
|
134
|
+
* @param opts Date options (minDate, maxDate, coerce, default)
|
|
135
|
+
* @returns Strongly typed Date schema descriptor
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* const createdAt = tex.date({ coerce: true, minDate: '2024-01-01' })
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
date<O extends TexDateOptions = TexDateOptions>(opts?: O): TexDate<O['optional'] extends true ? true : false>;
|
|
143
|
+
/**
|
|
144
|
+
* Defines a dynamic key-value record schema (e.g. `Record<string, T>`).
|
|
145
|
+
*/
|
|
146
|
+
record<T, O extends TexBaseOptions = TexBaseOptions>(schema: T, opts?: O): TexRecord<T, O['optional'] extends true ? true : false>;
|
|
147
|
+
/**
|
|
148
|
+
* Defines an unconstrained pass-through schema.
|
|
149
|
+
*/
|
|
150
|
+
any<O extends TexBaseOptions = TexBaseOptions>(opts?: O): TexAny<O['optional'] extends true ? true : false>;
|
|
151
|
+
/**
|
|
152
|
+
* Defines a file upload validation schema.
|
|
153
|
+
*/
|
|
154
|
+
file<O extends TexFileOptions = TexFileOptions>(opts?: O): TexFile<O['optional'] extends true ? true : false>;
|
|
155
|
+
/**
|
|
156
|
+
* Compiles an object structure into a fast `TexEngine` validator instance.
|
|
157
|
+
*
|
|
158
|
+
* @param schema Object map containing field definitions
|
|
159
|
+
* @param opts Object options (e.g. `{ strict: true }` to reject unknown fields)
|
|
160
|
+
* @returns Compiled `TexEngine` validator
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* const UserSchema = tex.object({
|
|
165
|
+
* id: tex.number({ coerce: true }),
|
|
166
|
+
* name: tex.string({ min: 2 }),
|
|
167
|
+
* email: tex.email()
|
|
168
|
+
* }, { strict: true })
|
|
169
|
+
*
|
|
170
|
+
* const user = UserSchema.parse(req.body)
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
object<T extends Record<string, any>>(schema: T, opts?: TexObjectOptions): TexEngine<ResolveSchema<T>>;
|
|
174
|
+
/**
|
|
175
|
+
* Dedicated Environment Schema parser (`tex.env`).
|
|
176
|
+
* Automatically coerces numbers, booleans, dates, and arrays from `process.env` string values,
|
|
177
|
+
* while preserving strict type validation and defaults.
|
|
178
|
+
*
|
|
179
|
+
* @param schema Environment variable schema definition
|
|
180
|
+
* @param opts Schema configuration
|
|
181
|
+
* @returns Compiled `TexEngine` tailored for environment variable parsing
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* export const env = tex.env({
|
|
186
|
+
* PORT: tex.number({ default: 3000 }),
|
|
187
|
+
* NODE_ENV: tex.enum(['development', 'production', 'test'], { default: 'development' }),
|
|
188
|
+
* DATABASE_URL: tex.string(),
|
|
189
|
+
* ENABLE_METRICS: tex.boolean({ default: false })
|
|
190
|
+
* }).parse(process.env)
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
env<T extends Record<string, any>>(schema: T, opts?: TexObjectOptions): TexEngine<ResolveSchema<T>>;
|
|
194
|
+
/**
|
|
195
|
+
* Helper that builds standard query pagination schema (`page`, `limit`, `sort`, `order`).
|
|
196
|
+
*
|
|
197
|
+
* @param options Configuration for default and maximum limit
|
|
198
|
+
* @returns Compiled pagination query validator
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```ts
|
|
202
|
+
* export default controller({
|
|
203
|
+
* listUsers: route.get('/', {
|
|
204
|
+
* query: tex.pagination({ defaultLimit: 25, maxLimit: 100 }),
|
|
205
|
+
* async handle({ query }) {
|
|
206
|
+
* const { skip, limit } = getPaginationSkip(query)
|
|
207
|
+
* return UserService.find(skip, limit)
|
|
208
|
+
* }
|
|
209
|
+
* })
|
|
210
|
+
* })
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
pagination(options?: {
|
|
214
|
+
defaultLimit?: number;
|
|
215
|
+
maxLimit?: number;
|
|
216
|
+
}): TexEngine<ResolveSchema<{
|
|
217
|
+
page: TexNumber<true>;
|
|
218
|
+
limit: TexNumber<true>;
|
|
219
|
+
sort: TexString<true>;
|
|
220
|
+
order: TexEnum<"asc" | "desc", true>;
|
|
221
|
+
}>>;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/validator/builder.ts"],"names":[],"mappings":"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"}
|