restifyx.js
Version:
Advanced API endpoint handler system with automatic documentation
178 lines • 9.52 kB
JavaScript
"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