@macss/modular-api 0.1.0 → 0.3.0
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/README.md +122 -131
- package/dist/core/health/health_check.d.ts +50 -0
- package/dist/core/health/health_check.js +69 -0
- package/dist/core/health/health_handler.d.ts +9 -0
- package/dist/core/health/health_handler.js +23 -0
- package/dist/core/health/health_service.d.ts +60 -0
- package/dist/core/health/health_service.js +132 -0
- package/dist/core/logger/logger.d.ts +79 -0
- package/dist/core/logger/logger.js +132 -0
- package/dist/core/logger/logging_middleware.d.ts +25 -0
- package/dist/core/logger/logging_middleware.js +60 -0
- package/dist/core/metrics/metric_registry.d.ts +32 -0
- package/dist/core/metrics/metric_registry.js +104 -0
- package/dist/core/metrics/metrics_middleware.d.ts +24 -0
- package/dist/core/metrics/metrics_middleware.js +51 -0
- package/dist/core/modular_api.d.ts +43 -1
- package/dist/core/modular_api.js +86 -5
- package/dist/core/usecase.d.ts +7 -0
- package/dist/core/usecase_handler.js +7 -1
- package/dist/core/usecase_test_handler.d.ts +4 -1
- package/dist/core/usecase_test_handler.js +5 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.js +24 -1
- package/dist/openapi/openapi.js +1 -3
- package/package.json +10 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { UseCaseFactory, Input, Output } from './usecase';
|
|
2
|
+
import type { ModularLogger } from './logger/logger';
|
|
2
3
|
export interface TestResponse {
|
|
3
4
|
statusCode: number;
|
|
4
5
|
body: Record<string, unknown>;
|
|
@@ -21,4 +22,6 @@ export interface TestResponse {
|
|
|
21
22
|
* expect(response.body).toEqual({ message: 'Hello, World!' });
|
|
22
23
|
* ```
|
|
23
24
|
*/
|
|
24
|
-
export declare function useCaseTestHandler<I extends Input, O extends Output>(factory: UseCaseFactory<I, O>, input?: Record<string, unknown
|
|
25
|
+
export declare function useCaseTestHandler<I extends Input, O extends Output>(factory: UseCaseFactory<I, O>, input?: Record<string, unknown>, options?: {
|
|
26
|
+
logger?: ModularLogger;
|
|
27
|
+
}): Promise<TestResponse>;
|
|
@@ -25,9 +25,13 @@ const use_case_exception_1 = require("./use_case_exception");
|
|
|
25
25
|
* expect(response.body).toEqual({ message: 'Hello, World!' });
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
async function useCaseTestHandler(factory, input = {}) {
|
|
28
|
+
async function useCaseTestHandler(factory, input = {}, options) {
|
|
29
29
|
try {
|
|
30
30
|
const useCase = factory(input);
|
|
31
|
+
// Inject logger if provided
|
|
32
|
+
if (options?.logger) {
|
|
33
|
+
useCase.logger = options.logger;
|
|
34
|
+
}
|
|
31
35
|
const validationError = useCase.validate();
|
|
32
36
|
if (validationError !== null) {
|
|
33
37
|
return {
|
package/dist/index.d.ts
CHANGED
|
@@ -9,3 +9,15 @@ export { useCaseTestHandler } from './core/usecase_test_handler';
|
|
|
9
9
|
export type { TestResponse } from './core/usecase_test_handler';
|
|
10
10
|
export { cors } from './middlewares/cors';
|
|
11
11
|
export type { CorsOptions } from './middlewares/cors';
|
|
12
|
+
export { HealthCheck, HealthCheckResult } from './core/health/health_check';
|
|
13
|
+
export type { HealthStatus } from './core/health/health_check';
|
|
14
|
+
export { HealthService, HealthResponse } from './core/health/health_service';
|
|
15
|
+
export type { HealthServiceOptions } from './core/health/health_service';
|
|
16
|
+
export { healthHandler } from './core/health/health_handler';
|
|
17
|
+
export { MetricRegistry, MetricsRegistrar } from './core/metrics/metric_registry';
|
|
18
|
+
export { metricsMiddleware, metricsHandler } from './core/metrics/metrics_middleware';
|
|
19
|
+
export type { MetricsMiddlewareOptions } from './core/metrics/metrics_middleware';
|
|
20
|
+
export { LogLevel, RequestScopedLogger } from './core/logger/logger';
|
|
21
|
+
export type { ModularLogger } from './core/logger/logger';
|
|
22
|
+
export { loggingMiddleware, LOGGER_LOCALS_KEY } from './core/logger/logging_middleware';
|
|
23
|
+
export type { LoggingMiddlewareOptions } from './core/logger/logging_middleware';
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// import { ModularApi, UseCase, Input, Output } from 'modular_api'
|
|
6
6
|
// ============================================================
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.cors = exports.useCaseTestHandler = exports.ModuleBuilder = exports.ModularApi = exports.UseCaseException = exports.UseCase = exports.Output = exports.Input = void 0;
|
|
8
|
+
exports.LOGGER_LOCALS_KEY = exports.loggingMiddleware = exports.RequestScopedLogger = exports.LogLevel = exports.metricsHandler = exports.metricsMiddleware = exports.MetricsRegistrar = exports.MetricRegistry = exports.healthHandler = exports.HealthResponse = exports.HealthService = exports.HealthCheckResult = exports.HealthCheck = exports.cors = exports.useCaseTestHandler = exports.ModuleBuilder = exports.ModularApi = exports.UseCaseException = exports.UseCase = exports.Output = exports.Input = void 0;
|
|
9
9
|
// Core abstractions
|
|
10
10
|
var usecase_1 = require("./core/usecase");
|
|
11
11
|
Object.defineProperty(exports, "Input", { enumerable: true, get: function () { return usecase_1.Input; } });
|
|
@@ -26,3 +26,26 @@ Object.defineProperty(exports, "useCaseTestHandler", { enumerable: true, get: fu
|
|
|
26
26
|
// Middlewares
|
|
27
27
|
var cors_1 = require("./middlewares/cors");
|
|
28
28
|
Object.defineProperty(exports, "cors", { enumerable: true, get: function () { return cors_1.cors; } });
|
|
29
|
+
// Health — IETF Health Check Response Format
|
|
30
|
+
var health_check_1 = require("./core/health/health_check");
|
|
31
|
+
Object.defineProperty(exports, "HealthCheck", { enumerable: true, get: function () { return health_check_1.HealthCheck; } });
|
|
32
|
+
Object.defineProperty(exports, "HealthCheckResult", { enumerable: true, get: function () { return health_check_1.HealthCheckResult; } });
|
|
33
|
+
var health_service_1 = require("./core/health/health_service");
|
|
34
|
+
Object.defineProperty(exports, "HealthService", { enumerable: true, get: function () { return health_service_1.HealthService; } });
|
|
35
|
+
Object.defineProperty(exports, "HealthResponse", { enumerable: true, get: function () { return health_service_1.HealthResponse; } });
|
|
36
|
+
var health_handler_1 = require("./core/health/health_handler");
|
|
37
|
+
Object.defineProperty(exports, "healthHandler", { enumerable: true, get: function () { return health_handler_1.healthHandler; } });
|
|
38
|
+
// Metrics — Prometheus /metrics endpoint
|
|
39
|
+
var metric_registry_1 = require("./core/metrics/metric_registry");
|
|
40
|
+
Object.defineProperty(exports, "MetricRegistry", { enumerable: true, get: function () { return metric_registry_1.MetricRegistry; } });
|
|
41
|
+
Object.defineProperty(exports, "MetricsRegistrar", { enumerable: true, get: function () { return metric_registry_1.MetricsRegistrar; } });
|
|
42
|
+
var metrics_middleware_1 = require("./core/metrics/metrics_middleware");
|
|
43
|
+
Object.defineProperty(exports, "metricsMiddleware", { enumerable: true, get: function () { return metrics_middleware_1.metricsMiddleware; } });
|
|
44
|
+
Object.defineProperty(exports, "metricsHandler", { enumerable: true, get: function () { return metrics_middleware_1.metricsHandler; } });
|
|
45
|
+
// Logger — Structured JSON logging (Loki/Grafana compatible)
|
|
46
|
+
var logger_1 = require("./core/logger/logger");
|
|
47
|
+
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return logger_1.LogLevel; } });
|
|
48
|
+
Object.defineProperty(exports, "RequestScopedLogger", { enumerable: true, get: function () { return logger_1.RequestScopedLogger; } });
|
|
49
|
+
var logging_middleware_1 = require("./core/logger/logging_middleware");
|
|
50
|
+
Object.defineProperty(exports, "loggingMiddleware", { enumerable: true, get: function () { return logging_middleware_1.loggingMiddleware; } });
|
|
51
|
+
Object.defineProperty(exports, "LOGGER_LOCALS_KEY", { enumerable: true, get: function () { return logging_middleware_1.LOGGER_LOCALS_KEY; } });
|
package/dist/openapi/openapi.js
CHANGED
|
@@ -19,9 +19,7 @@ const registry_1 = require("../core/registry");
|
|
|
19
19
|
*/
|
|
20
20
|
function buildOpenApiSpec(options) {
|
|
21
21
|
const { title, port, version = '0.1.0', description = 'Auto-generated by modular-api', servers, } = options;
|
|
22
|
-
const defaultServers = [
|
|
23
|
-
{ url: `http://localhost:${port}`, description: 'Local' },
|
|
24
|
-
];
|
|
22
|
+
const defaultServers = [{ url: `http://localhost:${port}`, description: 'Local' }];
|
|
25
23
|
const paths = {};
|
|
26
24
|
for (const route of registry_1.apiRegistry.routes) {
|
|
27
25
|
const method = route.method.toLowerCase();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@macss/modular-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Use-case-centric toolkit for building modular APIs with Express. Define UseCase classes (input → validate → execute → output), connect them to HTTP routes, and expose Swagger/OpenAPI documentation automatically.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"build": "tsc --project tsconfig.build.json",
|
|
14
14
|
"dev": "ts-node src/index.ts",
|
|
15
|
-
"test": "
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"format": "prettier --write .",
|
|
17
|
+
"format:check": "prettier --check ."
|
|
16
18
|
},
|
|
17
19
|
"keywords": [
|
|
18
20
|
"api",
|
|
@@ -25,13 +27,18 @@
|
|
|
25
27
|
"license": "MIT",
|
|
26
28
|
"dependencies": {
|
|
27
29
|
"express": "^4.22.1",
|
|
30
|
+
"prom-client": "^15.1.3",
|
|
28
31
|
"swagger-ui-express": "^5.0.1"
|
|
29
32
|
},
|
|
30
33
|
"devDependencies": {
|
|
31
34
|
"@types/express": "^5.0.6",
|
|
32
35
|
"@types/node": "^22.19.11",
|
|
36
|
+
"@types/supertest": "^6.0.3",
|
|
33
37
|
"@types/swagger-ui-express": "^4.1.8",
|
|
38
|
+
"prettier": "^3.8.1",
|
|
39
|
+
"supertest": "^7.2.2",
|
|
34
40
|
"ts-node": "^10.9.2",
|
|
35
|
-
"typescript": "^5.9.3"
|
|
41
|
+
"typescript": "^5.9.3",
|
|
42
|
+
"vitest": "^4.0.18"
|
|
36
43
|
}
|
|
37
44
|
}
|