UNPKG

restifyx.js

Version:

Advanced API endpoint handler system with automatic documentation

178 lines 9.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveConfig = resolveConfig; function resolveConfig(options = {}) { const clonedOptions = JSON.parse(JSON.stringify(options)); return { port: clonedOptions.port ?? 3000, host: clonedOptions.host ?? "0.0.0.0", debug: clonedOptions.debug ?? false, strictMode: clonedOptions.strictMode ?? false, endpoints: { directory: clonedOptions.endpoints?.directory ?? "src/endpoints", pattern: clonedOptions.endpoints?.pattern ?? "**/*.endpoint.{js,ts,mjs,cjs}", autoRegister: clonedOptions.endpoints?.autoRegister ?? true, dynamicImport: clonedOptions.endpoints?.dynamicImport ?? true, }, hotReload: { enabled: clonedOptions.hotReload?.enabled ?? false, debounceMs: clonedOptions.hotReload?.debounceMs ?? 500, watchExtensions: clonedOptions.hotReload?.watchExtensions ?? [".js", ".ts", ".mjs", ".cjs"], ignorePatterns: clonedOptions.hotReload?.ignorePatterns ?? ["node_modules", ".git", "dist", "build"], watchNodeModules: clonedOptions.hotReload?.watchNodeModules ?? false, verbose: clonedOptions.hotReload?.verbose ?? false, }, cors: { enabled: clonedOptions.cors?.enabled ?? true, options: clonedOptions.cors?.options ?? { origin: "*", methods: ["GET", "POST", "PUT", "DELETE", "PATCH"], allowedHeaders: ["Content-Type", "Authorization"], credentials: false, }, }, security: { helmet: clonedOptions.security?.helmet ?? true, helmetOptions: clonedOptions.security?.helmetOptions ?? {}, trustProxy: clonedOptions.security?.trustProxy ?? false, additionalHeaders: clonedOptions.security?.additionalHeaders ?? false, xssProtection: clonedOptions.security?.xssProtection ?? true, contentSecurityPolicy: clonedOptions.security?.contentSecurityPolicy ?? false, frameOptions: clonedOptions.security?.frameOptions ?? "DENY", }, rateLimiting: { enabled: clonedOptions.rateLimiting?.enabled ?? false, windowMs: clonedOptions.rateLimiting?.windowMs ?? 900000, max: clonedOptions.rateLimiting?.max ?? 100, message: clonedOptions.rateLimiting?.message ?? "Too many requests, please try again later.", headers: clonedOptions.rateLimiting?.headers ?? true, skip: clonedOptions.rateLimiting?.skip, keyGenerator: clonedOptions.rateLimiting?.keyGenerator, store: clonedOptions.rateLimiting?.store, }, swagger: { enabled: clonedOptions.swagger?.enabled ?? true, title: clonedOptions.swagger?.title ?? "API Documentation", description: clonedOptions.swagger?.description ?? "API Documentation generated by RestifyX.js", version: clonedOptions.swagger?.version ?? "1.0.0", path: clonedOptions.swagger?.path ?? "/api-docs", options: clonedOptions.swagger?.options ?? {}, specPath: clonedOptions.swagger?.specPath, serveYaml: clonedOptions.swagger?.serveYaml ?? false, uiOptions: clonedOptions.swagger?.uiOptions ?? { explorer: true }, includeDocumentation: clonedOptions.swagger?.includeDocumentation, contact: clonedOptions.swagger?.contact, license: clonedOptions.swagger?.license, servers: clonedOptions.swagger?.servers, securitySchemes: clonedOptions.swagger?.securitySchemes, schemas: clonedOptions.swagger?.schemas, tags: clonedOptions.swagger?.tags, }, logging: { level: clonedOptions.logging?.level ?? "info", files: clonedOptions.logging?.files ?? false, directory: clonedOptions.logging?.directory ?? "logs", morgan: clonedOptions.logging?.morgan ?? true, morganFormat: clonedOptions.logging?.morganFormat ?? "combined", morganOptions: clonedOptions.logging?.morganOptions ?? {}, maxSize: clonedOptions.logging?.maxSize ?? "20m", maxFiles: clonedOptions.logging?.maxFiles ?? "14d", compress: clonedOptions.logging?.compress ?? true, colorize: clonedOptions.logging?.colorize ?? true, timestamp: clonedOptions.logging?.timestamp ?? true, json: clonedOptions.logging?.json ?? true, console: clonedOptions.logging?.console ?? true, errorFile: clonedOptions.logging?.errorFile ?? true, httpFile: clonedOptions.logging?.httpFile ?? false, }, bodyParser: { json: clonedOptions.bodyParser?.json ?? true, jsonOptions: { limit: clonedOptions.bodyParser?.jsonOptions?.limit ?? "1mb", strict: clonedOptions.bodyParser?.jsonOptions?.strict ?? true, reviver: clonedOptions.bodyParser?.jsonOptions?.reviver, }, urlencoded: clonedOptions.bodyParser?.urlencoded ?? true, urlencodedOptions: { extended: clonedOptions.bodyParser?.urlencodedOptions?.extended ?? true, limit: clonedOptions.bodyParser?.urlencodedOptions?.limit ?? "1mb", parameterLimit: clonedOptions.bodyParser?.urlencodedOptions?.parameterLimit ?? 1000, }, raw: clonedOptions.bodyParser?.raw ?? false, rawOptions: { limit: clonedOptions.bodyParser?.rawOptions?.limit ?? "1mb", type: clonedOptions.bodyParser?.rawOptions?.type ?? "application/octet-stream", }, text: clonedOptions.bodyParser?.text ?? false, textOptions: { limit: clonedOptions.bodyParser?.textOptions?.limit ?? "1mb", type: clonedOptions.bodyParser?.textOptions?.type ?? "text/plain", }, }, middleware: { before: clonedOptions.middleware?.before ?? [], after: clonedOptions.middleware?.after ?? [], }, compression: { enabled: clonedOptions.compression?.enabled ?? true, options: clonedOptions.compression?.options ?? {}, }, cookies: { enabled: clonedOptions.cookies?.enabled ?? false, secret: clonedOptions.cookies?.secret, options: { maxAge: clonedOptions.cookies?.options?.maxAge ?? 86400000, httpOnly: clonedOptions.cookies?.options?.httpOnly ?? true, secure: clonedOptions.cookies?.options?.secure ?? false, domain: clonedOptions.cookies?.options?.domain, path: clonedOptions.cookies?.options?.path ?? "/", sameSite: clonedOptions.cookies?.options?.sameSite ?? "lax", }, }, https: { enabled: clonedOptions.https?.enabled ?? false, keyPath: clonedOptions.https?.keyPath ?? "key.pem", certPath: clonedOptions.https?.certPath ?? "cert.pem", passphrase: clonedOptions.https?.passphrase, }, performance: { monitor: clonedOptions.performance?.monitor ?? false, logMemoryUsage: clonedOptions.performance?.logMemoryUsage ?? true, logCpuUsage: clonedOptions.performance?.logCpuUsage ?? false, interval: clonedOptions.performance?.interval ?? 300000, }, gracefulShutdown: { enabled: clonedOptions.gracefulShutdown?.enabled ?? true, timeout: clonedOptions.gracefulShutdown?.timeout ?? 30000, signals: clonedOptions.gracefulShutdown?.signals ?? ["SIGINT", "SIGTERM", "SIGHUP"], }, websocket: { enabled: clonedOptions.websocket?.enabled ?? false, path: clonedOptions.websocket?.path ?? "/socket.io", options: clonedOptions.websocket?.options ?? {}, cors: { origin: clonedOptions.websocket?.cors?.origin ?? "*", methods: clonedOptions.websocket?.cors?.methods ?? ["GET", "POST"], allowedHeaders: clonedOptions.websocket?.cors?.allowedHeaders ?? ["Content-Type", "Authorization"], credentials: clonedOptions.websocket?.cors?.credentials ?? false, }, }, static: { enabled: clonedOptions.static?.enabled ?? false, directory: clonedOptions.static?.directory ?? "public", options: { dotfiles: clonedOptions.static?.options?.dotfiles ?? "ignore", etag: clonedOptions.static?.options?.etag ?? true, extensions: clonedOptions.static?.options?.extensions ?? [], fallthrough: clonedOptions.static?.options?.fallthrough ?? true, immutable: clonedOptions.static?.options?.immutable ?? false, index: clonedOptions.static?.options?.index ?? "index.html", lastModified: clonedOptions.static?.options?.lastModified ?? true, maxAge: clonedOptions.static?.options?.maxAge ?? 0, redirect: clonedOptions.static?.options?.redirect ?? true, setHeaders: clonedOptions.static?.options?.setHeaders, }, }, }; } //# sourceMappingURL=config.js.map