Skip to content

Commit

Permalink
#102 🐘 remove loggers field in configs, rework filterTokenValues helper
Browse files Browse the repository at this point in the history
  • Loading branch information
RiceWithMeat committed Dec 18, 2024
1 parent 8f51139 commit 2973218
Show file tree
Hide file tree
Showing 13 changed files with 109 additions and 130 deletions.
5 changes: 2 additions & 3 deletions bin/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import type { GraphQLMockServerConfig, RestMockServerConfig } from '@/utils/type
import type { MockServerConfig, MockServerConfigArgv } from '../src';

import { validateApiMockServerConfig } from './validateMockServerConfig/validateApiMockServerConfig';
// TODO: add loggers validation
// import { validateMockServerConfig } from './validateMockServerConfig/validateMockServerConfig';
import { validateMockServerConfig } from './validateMockServerConfig/validateMockServerConfig';

export const run = (
mockConfig: MockServerConfig,
Expand Down Expand Up @@ -54,7 +53,7 @@ export const run = (
return startRestMockServer(mergedApiMockServerConfig as RestMockServerConfig);
}

// validateMockServerConfig(mergedMockServerConfig);
validateMockServerConfig(mergedMockServerConfig);
return startMockServer(mergedMockServerConfig);
} catch (error: any) {
console.error(error.message);
Expand Down
22 changes: 1 addition & 21 deletions src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import { flatten } from 'flat';
import {
asyncHandler,
callRequestInterceptor,
callRequestLogger,
callResponseInterceptors,
callResponseLogger,
convertToEntityDescriptor,
getGraphQLInput,
isEntityDescriptor,
Expand All @@ -20,7 +18,6 @@ import type {
GraphQLEntitiesByEntityName,
GraphQLEntity,
Interceptors,
Loggers,
TopLevelPlainEntityArray,
TopLevelPlainEntityDescriptor
} from '@/utils/types';
Expand All @@ -31,14 +28,12 @@ interface CreateGraphQLRoutesParams {
router: IRouter;
graphqlConfig: GraphqlConfig;
serverResponseInterceptor?: Interceptors['response'];
loggers?: Loggers;
}

export const createGraphQLRoutes = ({
router,
graphqlConfig,
serverResponseInterceptor,
loggers
serverResponseInterceptor
}: CreateGraphQLRoutesParams) => {
const preparedGraphQLRequestConfig = prepareGraphQLRequestConfigs(graphqlConfig.configs);

Expand Down Expand Up @@ -133,11 +128,6 @@ export const createGraphQLRoutes = ({

if (!matchedRouteConfig) return next();

const requestLogger = loggers?.request;
if (requestLogger) {
callRequestLogger({ request, logger: requestLogger });
}

if (matchedRouteConfig.interceptors?.request) {
await callRequestInterceptor({
request,
Expand Down Expand Up @@ -217,16 +207,6 @@ export const createGraphQLRoutes = ({
await sleep(matchedRouteConfig.settings.delay);
}

const responseLogger = loggers?.response;
if (responseLogger) {
callResponseLogger({
request,
response,
logger: responseLogger,
data
});
}

return response.json(data);
};

Expand Down
13 changes: 2 additions & 11 deletions src/core/middlewares/notFoundMiddleware/notFoundMiddleware.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Express } from 'express';

import { callRequestLogger, callResponseLogger, parseGraphQLRequest } from '@/utils/helpers';
import { parseGraphQLRequest } from '@/utils/helpers';
import type {
MockServerConfig,
OperationNameGraphQLRequestConfig,
Expand All @@ -12,7 +12,7 @@ import { getGraphqlUrlSuggestions, getRestUrlSuggestions } from './helpers';

export const notFoundMiddleware = (
server: Express,
mockServerConfig: Pick<MockServerConfig, 'baseUrl' | 'rest' | 'graphql' | 'loggers'>
mockServerConfig: Pick<MockServerConfig, 'baseUrl' | 'rest' | 'graphql'>
) => {
const { baseUrl: serverBaseUrl, rest, graphql } = mockServerConfig;

Expand All @@ -35,11 +35,6 @@ export const notFoundMiddleware = (
})) ?? [];

server.use((request, response) => {
const requestLogger = mockServerConfig.loggers?.request;
if (requestLogger) {
callRequestLogger({ request, logger: requestLogger });
}

const url = new URL(`${request.protocol}://${request.get('host')}${request.originalUrl}`);

let restRequestSuggestions: RestRequestSuggestionConfigs = [];
Expand All @@ -59,10 +54,6 @@ export const notFoundMiddleware = (
}

response.status(404);
const responseLogger = mockServerConfig.loggers?.response;
if (responseLogger) {
callResponseLogger({ request, response, logger: responseLogger, data: undefined });
}

const isRequestSupportHtml =
request.headers.accept?.includes('text/html') || request.headers.accept?.includes('*/*');
Expand Down
22 changes: 1 addition & 21 deletions src/core/rest/createRestRoutes/createRestRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import path from 'path';
import {
asyncHandler,
callRequestInterceptor,
callRequestLogger,
callResponseInterceptors,
callResponseLogger,
convertToEntityDescriptor,
isEntityDescriptor,
isFilePathValid,
Expand All @@ -17,7 +15,6 @@ import {
import type {
Entries,
Interceptors,
Loggers,
RestConfig,
RestEntitiesByEntityName,
RestEntity,
Expand All @@ -31,14 +28,12 @@ interface CreateRestRoutesParams {
router: IRouter;
restConfig: RestConfig;
serverResponseInterceptor?: Interceptors['response'];
loggers?: Loggers;
}

export const createRestRoutes = ({
router,
restConfig,
serverResponseInterceptor,
loggers
serverResponseInterceptor
}: CreateRestRoutesParams) => {
prepareRestRequestConfigs(restConfig.configs).forEach((requestConfig) => {
router.route(requestConfig.path)[requestConfig.method](
Expand Down Expand Up @@ -105,11 +100,6 @@ export const createRestRoutes = ({

if (!matchedRouteConfig) return next();

const requestLogger = loggers?.request;
if (requestLogger) {
callRequestLogger({ request, logger: requestLogger });
}

if (matchedRouteConfig.interceptors?.request) {
await callRequestInterceptor({
request,
Expand Down Expand Up @@ -193,16 +183,6 @@ export const createRestRoutes = ({
await sleep(matchedRouteConfig.settings.delay);
}

const responseLogger = loggers?.response;
if (responseLogger) {
callResponseLogger({
request,
response,
logger: responseLogger,
data
});
}

if ('file' in matchedRouteConfig) {
return response.sendFile(path.resolve(matchedRouteConfig.file));
}
Expand Down
5 changes: 2 additions & 3 deletions src/server/createGraphQLMockServer/createGraphQLMockServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const createGraphQLMockServer = (
graphqlMockServerConfig: Omit<GraphQLMockServerConfig, 'port'>,
server: Express = express()
) => {
const { cors, staticPath, configs, database, interceptors, loggers } = graphqlMockServerConfig;
const { cors, staticPath, configs, database, interceptors } = graphqlMockServerConfig;

server.set('view engine', 'ejs');
server.set('views', urlJoin(__dirname, '../../static/views'));
Expand Down Expand Up @@ -58,8 +58,7 @@ export const createGraphQLMockServer = (
const routerWithGraphqlRoutes = createGraphQLRoutes({
router: express.Router(),
graphqlConfig: { configs: configs ?? [] },
serverResponseInterceptor: interceptors?.response,
loggers
serverResponseInterceptor: interceptors?.response
});

server.use(baseUrl, routerWithGraphqlRoutes);
Expand Down
8 changes: 3 additions & 5 deletions src/server/createMockServer/createMockServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const createMockServer = (
mockServerConfig: Omit<MockServerConfig, 'port'>,
server: Express = express()
) => {
const { cors, staticPath, rest, graphql, database, interceptors, loggers } = mockServerConfig;
const { cors, staticPath, rest, graphql, database, interceptors } = mockServerConfig;

server.set('view engine', 'ejs');
server.set('views', urlJoin(__dirname, '../../static/views'));
Expand Down Expand Up @@ -60,8 +60,7 @@ export const createMockServer = (
const routerWithRestRoutes = createRestRoutes({
router: express.Router(),
restConfig: rest,
serverResponseInterceptor: interceptors?.response,
loggers
serverResponseInterceptor: interceptors?.response
});

const restBaseUrl = urlJoin(baseUrl, rest.baseUrl ?? '/');
Expand All @@ -82,8 +81,7 @@ export const createMockServer = (
const routerWithGraphQLRoutes = createGraphQLRoutes({
router: express.Router(),
graphqlConfig: graphql,
serverResponseInterceptor: interceptors?.response,
loggers
serverResponseInterceptor: interceptors?.response
});

const graphqlBaseUrl = urlJoin(baseUrl, graphql.baseUrl ?? '/');
Expand Down
5 changes: 2 additions & 3 deletions src/server/createRestMockServer/createRestMockServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const createRestMockServer = (
restMockServerConfig: Omit<RestMockServerConfig, 'port'>,
server: Express = express()
) => {
const { cors, staticPath, configs, database, interceptors, loggers } = restMockServerConfig;
const { cors, staticPath, configs, database, interceptors } = restMockServerConfig;

server.set('view engine', 'ejs');
server.set('views', urlJoin(__dirname, '../../static/views'));
Expand Down Expand Up @@ -58,8 +58,7 @@ export const createRestMockServer = (
const routerWithRestRoutes = createRestRoutes({
router: express.Router(),
restConfig: { configs: configs ?? [] },
serverResponseInterceptor: interceptors?.response,
loggers
serverResponseInterceptor: interceptors?.response
});

server.use(baseUrl, routerWithRestRoutes);
Expand Down
13 changes: 7 additions & 6 deletions src/utils/helpers/logger/callRequestLogger/callRequestLogger.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Request } from 'express';

import type { Logger, LoggerTokenFlags, LoggerTokenValues, RestMethod } from '@/utils/types';
import type { Logger, LoggerTokenOptions, LoggerTokenValues, RestMethod } from '@/utils/types';

import { formatTimestamp } from '../../date';
import { filterTokenValues } from '../helpers';
Expand All @@ -15,7 +15,7 @@ const formatTokenValues = (tokenValues: Partial<LoggerTokenValues<'request'>>) =
};
};

const DEFAULT_LOGGER_REQUEST_TOKEN_FLAGS: LoggerTokenFlags<'request'> = {
const DEFAULT_LOGGER_REQUEST_TOKEN_OPTIONS: LoggerTokenOptions<'request'> = {
type: true,
id: true,
timestamp: true,
Expand All @@ -29,7 +29,7 @@ interface CallRequestLoggerParams {
}

export const callRequestLogger = ({ logger, request }: CallRequestLoggerParams) => {
if (logger?.enabled === false) return;
if (logger?.enabled === false) return null;

const rawTokenValues: LoggerTokenValues<'request'> = {
type: 'request',
Expand All @@ -49,15 +49,16 @@ export const callRequestLogger = ({ logger, request }: CallRequestLoggerParams)
body: request.body
};

const tokenFlags = logger?.tokenFlags ?? DEFAULT_LOGGER_REQUEST_TOKEN_FLAGS;
const tokenOptions = logger?.tokenOptions ?? DEFAULT_LOGGER_REQUEST_TOKEN_OPTIONS;

const filteredTokenValues = filterTokenValues(rawTokenValues, tokenFlags);
const filteredTokenValues = filterTokenValues(rawTokenValues, tokenOptions);

if (logger?.rewrite) {
logger.rewrite(filteredTokenValues);
return;
return filteredTokenValues;
}

const formattedTokens = formatTokenValues(filteredTokenValues);
console.dir(formattedTokens, { depth: null });
return filteredTokenValues;
};
19 changes: 13 additions & 6 deletions src/utils/helpers/logger/callResponseLogger/callResponseLogger.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import type { Request, Response } from 'express';

import type { Data, Logger, LoggerTokenFlags, LoggerTokenValues, RestMethod } from '@/utils/types';
import type {
Data,
Logger,
LoggerTokenOptions,
LoggerTokenValues,
RestMethod
} from '@/utils/types';

import { formatTimestamp } from '../../date';
import { filterTokenValues } from '../helpers';
Expand All @@ -15,7 +21,7 @@ const formatTokenValues = (tokenValues: Partial<LoggerTokenValues<'response'>>)
};
};

const DEFAULT_LOGGER_RESPONSE_TOKEN_FLAGS: LoggerTokenFlags<'response'> = {
const DEFAULT_LOGGER_RESPONSE_TOKEN_OPTIONS: LoggerTokenOptions<'response'> = {
type: true,
id: true,
timestamp: true,
Expand All @@ -37,7 +43,7 @@ export const callResponseLogger = ({
request,
response
}: CallResponseLoggerParams) => {
if (logger?.enabled === false) return;
if (logger?.enabled === false) return null;

const rawTokenValues: LoggerTokenValues<'response'> = {
type: 'response',
Expand All @@ -59,15 +65,16 @@ export const callResponseLogger = ({
data
};

const tokenFlags = logger?.tokenFlags ?? DEFAULT_LOGGER_RESPONSE_TOKEN_FLAGS;
const tokenOptions = logger?.tokenOptions ?? DEFAULT_LOGGER_RESPONSE_TOKEN_OPTIONS;

const filteredTokenValues = filterTokenValues(rawTokenValues, tokenFlags);
const filteredTokenValues = filterTokenValues(rawTokenValues, tokenOptions);

if (logger?.rewrite) {
logger.rewrite(filteredTokenValues);
return;
return filteredTokenValues;
}

const formattedTokens = formatTokenValues(filteredTokenValues);
console.dir(formattedTokens, { depth: null });
return filteredTokenValues;
};
Loading

0 comments on commit 2973218

Please sign in to comment.