@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.
@@ -1 +1,2 @@
1
- export declare function getRedisClient(): any;
1
+ import Redis from 'ioredis';
2
+ export declare function getRedisClient(): Redis;
package/lib/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './utils';
2
2
  export * from './config';
3
+ export * from './tools';
3
4
  export * from './backend/middlewares/cors';
4
5
  export * from './backend/middlewares/container';
5
6
  export * from './backend/middlewares/error';
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
- export declare const loadContext: (req: Request, res: Response) => Promise<{
3
- modules: import("@common-stack/client-react").Feature;
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,4 @@
1
+ import { MiddlewareFunction, MiddlewareOptions } from '../interfaces/middleware';
2
+ export declare function clientLoaderWithMiddleware(params: any, middlewareOptions: MiddlewareOptions, middlewareStack: {
3
+ func: MiddlewareFunction;
4
+ }[]): Promise<MiddlewareOptions>;
@@ -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,2 @@
1
+ export * from './clientLoaderWithMiddleware';
2
+ export * from './loaderWithMiddleware';
@@ -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.13",
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": "0599ee182950c77d3f747e1996346f79caa728a2"
53
+ "gitHead": "6e563e11afff4587f965457c1a1bd868562a1688"
54
54
  }