@common-stack/frontend-stack-react 4.0.1-alpha.13 → 4.0.1-alpha.20
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/lib/config/redis-config.server.d.ts +2 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -1
- package/lib/interfaces/loaderContext.d.ts +15 -0
- package/lib/interfaces/middleware.d.ts +10 -0
- package/lib/load-context.server.d.ts +2 -9
- package/lib/load-context.server.js +2 -1
- package/lib/tools/clientLoaderWithMiddleware.d.ts +4 -0
- package/lib/tools/clientLoaderWithMiddleware.js +11 -0
- package/lib/tools/index.d.ts +2 -0
- package/lib/tools/loaderWithMiddleware.d.ts +3 -0
- package/lib/tools/loaderWithMiddleware.js +23 -0
- package/package.json +2 -2
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import Redis from 'ioredis';
|
|
2
|
+
export declare function getRedisClient(): Redis;
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{UtilityClass,logger}from'./utils/index.js';export{createClientContainer}from'./config/client.service.js';export{createReduxStore,epicMiddlewareFunc,persistConfig}from'./config/redux-config.js';export{corsMiddleware}from'./backend/middlewares/cors.js';export{TYPES,containerMiddleware}from'./backend/middlewares/container.js';export{errorMiddleware}from'./backend/middlewares/error.js';export{loadContext}from'./load-context.server.js';
|
|
1
|
+
export{UtilityClass,logger}from'./utils/index.js';export{createClientContainer}from'./config/client.service.js';export{createReduxStore,epicMiddlewareFunc,persistConfig}from'./config/redux-config.js';export{clientLoaderWithMiddleware}from'./tools/clientLoaderWithMiddleware.js';export{loaderWithMiddleware}from'./tools/loaderWithMiddleware.js';export{corsMiddleware}from'./backend/middlewares/cors.js';export{TYPES,containerMiddleware}from'./backend/middlewares/container.js';export{errorMiddleware}from'./backend/middlewares/error.js';export{loadContext}from'./load-context.server.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Feature } from '@common-stack/client-react';
|
|
2
|
+
import type { CdmLogger } from '@cdm-logger/core';
|
|
3
|
+
import type { Redis } from 'ioredis';
|
|
4
|
+
import type { Container } from 'inversify';
|
|
5
|
+
import type { ApolloClient, NormalizedCache } from '@apollo/client/index';
|
|
6
|
+
export interface IAppLoadContext<S = any> {
|
|
7
|
+
modules: Feature;
|
|
8
|
+
routeConfig: any;
|
|
9
|
+
store: any;
|
|
10
|
+
container: Container;
|
|
11
|
+
apolloClient: ApolloClient<NormalizedCache>;
|
|
12
|
+
services: S;
|
|
13
|
+
redisClient: Redis;
|
|
14
|
+
logger?: CdmLogger.ILogger;
|
|
15
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface MiddlewareOptions {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
}
|
|
4
|
+
export interface MiddlewareFunction {
|
|
5
|
+
(params: any, loaderData: MiddlewareOptions, next: () => Promise<void>): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export interface Middleware {
|
|
8
|
+
name: string;
|
|
9
|
+
func: MiddlewareFunction;
|
|
10
|
+
}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
routeConfig: any;
|
|
5
|
-
store: any;
|
|
6
|
-
container: any;
|
|
7
|
-
apolloClient: any;
|
|
8
|
-
services: any;
|
|
9
|
-
redisClient: any;
|
|
10
|
-
}>;
|
|
2
|
+
import { IAppLoadContext } from './interfaces/loaderContext';
|
|
3
|
+
export declare const loadContext: (req: Request, res: Response) => Promise<IAppLoadContext>;
|
|
@@ -2,7 +2,7 @@ import'reflect-metadata';import features from'./modules.js';import {getRedisClie
|
|
|
2
2
|
const routeConfig = features.getConfiguredRoutes();
|
|
3
3
|
const redisClient = getRedisClient();
|
|
4
4
|
const loadContext = async (req, res) => {
|
|
5
|
-
const { container, store, apolloClient, services } = req;
|
|
5
|
+
const { container, store, apolloClient, services, logger } = req;
|
|
6
6
|
return {
|
|
7
7
|
modules: features,
|
|
8
8
|
routeConfig,
|
|
@@ -11,5 +11,6 @@ const loadContext = async (req, res) => {
|
|
|
11
11
|
apolloClient,
|
|
12
12
|
services,
|
|
13
13
|
redisClient,
|
|
14
|
+
logger,
|
|
14
15
|
};
|
|
15
16
|
};export{loadContext};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
async function clientLoaderWithMiddleware(params, middlewareOptions = {}, middlewareStack) {
|
|
2
|
+
const loaderData = middlewareOptions;
|
|
3
|
+
const executeMiddlewares = async (index) => {
|
|
4
|
+
if (index < middlewareStack.length) {
|
|
5
|
+
const { func } = middlewareStack[index];
|
|
6
|
+
await func(params, loaderData, async () => await executeMiddlewares(index + 1));
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
await executeMiddlewares(0); // Start middleware execution from the first one
|
|
10
|
+
return loaderData;
|
|
11
|
+
}export{clientLoaderWithMiddleware};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { IAppLoadContext } from '../interfaces/loaderContext';
|
|
2
|
+
import { Middleware, MiddlewareOptions } from '../interfaces/middleware';
|
|
3
|
+
export declare function loaderWithMiddleware(params: IAppLoadContext, middlewareOptions: MiddlewareOptions | undefined, middlewareStack: Middleware[]): Promise<MiddlewareOptions>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
2
|
+
async function loaderWithMiddleware(params, middlewareOptions, middlewareStack) {
|
|
3
|
+
const { logger } = params;
|
|
4
|
+
logger.debug('middlewares [%j]', middlewareStack);
|
|
5
|
+
const loaderData = middlewareOptions ? middlewareOptions : {};
|
|
6
|
+
const executeMiddlewares = async (index) => {
|
|
7
|
+
if (index < middlewareStack.length) {
|
|
8
|
+
const middleware = middlewareStack[index];
|
|
9
|
+
const start = process.hrtime(); // Get start time
|
|
10
|
+
if (isDevelopment) {
|
|
11
|
+
console.log(`[[Middleware ${middleware.name}]] starts to run`); // Log start
|
|
12
|
+
}
|
|
13
|
+
await middleware.func(params, loaderData, async () => await executeMiddlewares(index + 1));
|
|
14
|
+
if (isDevelopment) {
|
|
15
|
+
const end = process.hrtime(start); // Get end time
|
|
16
|
+
const elapsedTime = (end[0] * 1e9 + end[1]) / 1e6; // Convert to milliseconds
|
|
17
|
+
console.log(`[[Middleware ${middleware.name}]] took ${elapsedTime} ms`); // Log time taken
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
await executeMiddlewares(0); // Start middleware execution from the first one
|
|
22
|
+
return loaderData;
|
|
23
|
+
}export{loaderWithMiddleware};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@common-stack/frontend-stack-react",
|
|
3
|
-
"version": "4.0.1-alpha.
|
|
3
|
+
"version": "4.0.1-alpha.20",
|
|
4
4
|
"description": "Client Module for react app",
|
|
5
5
|
"homepage": "https://github.com/cdmbase/fullstack-pro#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"typescript": {
|
|
51
51
|
"definition": "lib/index.d.ts"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "6e563e11afff4587f965457c1a1bd868562a1688"
|
|
54
54
|
}
|