@common-stack/frontend-stack-react 8.5.1-alpha.4 → 8.6.1-alpha.1

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,4 +1,4 @@
1
- import {v4}from'uuid';import {ClientTypes,getGlobalVariable}from'@common-stack/core';import {merge}from'lodash-es';import {ScopedContainer}from'@common-stack/client-core/lib/connector/ScopedContainer.js';import {createReduxStore}from'../../config/redux-config.js';import {logger}from'@cdm-logger/server';import {UtilityClass}from'../../utils/index.js';import features from'../../modules.js';import {createApolloClient}from'../../config/base-apollo-client.js';import {config}from'../../config/env-config.server.js';const TYPES = {
1
+ import {v4}from'uuid';import {ClientTypes,getGlobalVariable}from'@common-stack/core';import {merge}from'lodash-es';import {ScopedContainer}from'@common-stack/client-core';import {createReduxStore}from'../../config/redux-config.js';import {logger}from'@cdm-logger/server';import {UtilityClass}from'../../utils/index.js';import features from'../../modules.js';import {createApolloClient}from'../../config/base-apollo-client.js';import {config}from'../../config/env-config.server.js';const TYPES = {
2
2
  HttpRequest: Symbol.for('HttpRequest'),
3
3
  };
4
4
  const utility = new UtilityClass(features);
@@ -43,13 +43,20 @@ const containerMiddleware = async (req, res, next) => {
43
43
  return apolloClient;
44
44
  })
45
45
  .inRequestScope();
46
+ // Bind ApolloClient so loaders/epics that resolve it directly (not via factory) work
47
+ if (container.isBound(ClientTypes.ApolloClient)) {
48
+ container.rebind(ClientTypes.ApolloClient).toConstantValue(apolloClient);
49
+ }
50
+ else {
51
+ container.bind(ClientTypes.ApolloClient).toConstantValue(apolloClient);
52
+ }
46
53
  const services = merge({}, ...features.createServiceFunc.map((serviceFunc) => serviceFunc(container)));
47
54
  const resolvers = features.getApolloResolvers(() => services);
48
55
  apolloClient.setResolvers(resolvers);
49
56
  const { store } = createReduxStore(apolloClient, services, container);
50
57
  req.container = container;
51
58
  req.apolloClient = container.get(ClientTypes.ApolloClientFactory)();
52
- req.logger = logger;
59
+ // logger removed from req to avoid hydration issues — use container.get(ClientTypes.Logger) instead
53
60
  req.store = store;
54
61
  req.services = services;
55
62
  if (typeof res.on === 'function') {
@@ -5,5 +5,4 @@ export declare const createClientContainer: (req?: any, res?: any) => {
5
5
  container: Container;
6
6
  apolloClient: ApolloClient<NormalizedCacheObject>;
7
7
  serviceFunc: () => any;
8
- logger: import("@cdm-logger/core/lib/interface").ILogger;
9
8
  };
@@ -1,4 +1,4 @@
1
- import'reflect-metadata';import {ClientTypes}from'@common-stack/client-core';import {ScopedContainer}from'@common-stack/client-core/lib/connector/ScopedContainer.js';import {merge}from'lodash-es';import features from'../modules.js';import {UtilityClass,logger}from'../utils/index.js';import {createApolloClient}from'./base-apollo-client.js';import {config}from'./browser-env-config.js';import {getGlobalVariable}from'@common-stack/core';const utility = new UtilityClass(features);
1
+ import'reflect-metadata';import {ScopedContainer,ClientTypes,attachDeprecatedLogger}from'@common-stack/client-core';import {merge}from'lodash-es';import features from'../modules.js';import {UtilityClass,logger}from'../utils/index.js';import {createApolloClient}from'./base-apollo-client.js';import {config}from'./browser-env-config.js';import {getGlobalVariable}from'@common-stack/core';const utility = new UtilityClass(features);
2
2
  ScopedContainer.registerGlobalDependencies((container) => {
3
3
  container.bind(ClientTypes.Logger).toConstantValue(logger);
4
4
  container.bind(ClientTypes.UtilityClass).toConstantValue(utility);
@@ -54,8 +54,11 @@ const createClientContainer = (req, res) => {
54
54
  container: container,
55
55
  apolloClient,
56
56
  serviceFunc,
57
- logger,
57
+ // logger is attached as a non-enumerable deprecated getter — see below
58
58
  };
59
+ // Backward compat: old code using clientService.logger still works but
60
+ // prints a deprecation warning. Non-enumerable so it won't serialize/hydrate.
61
+ attachDeprecatedLogger(clientService, container);
59
62
  // @ts-ignore
60
63
  if (import.meta.hot) {
61
64
  //@ts-ignore
@@ -1,9 +1,11 @@
1
- import'reflect-metadata';import {logger}from'@cdm-logger/server';import features from'./modules.js';import {getRedisClient}from'./config/redis-config.server.js';/* eslint-disable @typescript-eslint/ban-ts-comment */
1
+ import'reflect-metadata';import {attachDeprecatedLogger}from'@common-stack/client-core';import {logger}from'@cdm-logger/server';import features from'./modules.js';import {getRedisClient}from'./config/redis-config.server.js';/* eslint-disable @typescript-eslint/ban-ts-comment */
2
2
  const routeConfig = features.getConfiguredRoutes();
3
3
  const redisClient = getRedisClient(logger);
4
4
  const loadContext = async (req, res) => {
5
- const { container, store, apolloClient, services, logger } = req;
6
- return {
5
+ const { container, store, apolloClient, services } = req;
6
+ // logger is attached as a non-enumerable deprecated getter below.
7
+ // It won't be serialized (no hydration issues) but old code using context.logger still works.
8
+ const context = {
7
9
  modules: features,
8
10
  routeConfig,
9
11
  store,
@@ -11,6 +13,7 @@ const loadContext = async (req, res) => {
11
13
  apolloClient,
12
14
  services,
13
15
  redisClient,
14
- logger,
15
16
  };
17
+ attachDeprecatedLogger(context, container);
18
+ return context;
16
19
  };export{loadContext};
@@ -1,5 +1,19 @@
1
- async function clientLoaderWithMiddleware(params, middlewareOptions = {}, middlewareStack) {
1
+ import {ClientTypes,attachDeprecatedLogger}from'@common-stack/client-core';async function clientLoaderWithMiddleware(params, middlewareOptions = {}, middlewareStack) {
2
2
  const loaderData = middlewareOptions;
3
+ // Resolve logger once and pass through loaderData so middlewares don't need repeated container.get() calls
4
+ if (!loaderData.logger && params?.context?.container) {
5
+ try {
6
+ loaderData.logger = params.context.container.get(ClientTypes.Logger);
7
+ }
8
+ catch {
9
+ // logger not bound — middlewares will fall back to container.get()
10
+ }
11
+ }
12
+ // Backward compat: attach a non-enumerable deprecated logger getter to the context
13
+ // so existing middleware code accessing context.logger still works with a warning.
14
+ if (params?.context && params.context.container && !Object.getOwnPropertyDescriptor(params.context, 'logger')) {
15
+ attachDeprecatedLogger(params.context, params.context.container);
16
+ }
3
17
  const executeMiddlewares = async (index) => {
4
18
  if (index < middlewareStack.length) {
5
19
  const { func } = middlewareStack[index];
@@ -1,4 +1,4 @@
1
- /**
1
+ import {ClientTypes}from'@common-stack/client-core';/**
2
2
  * Executes the middleware stack in sequence
3
3
  * @param params - The loader context
4
4
  * @param middlewareOptions - The middleware options
@@ -6,9 +6,12 @@
6
6
  * @returns The middleware options
7
7
  */
8
8
  async function loaderWithMiddleware(params, middlewareOptions, middlewareStack) {
9
- const { logger } = params.context;
9
+ // logger removed from context to avoid hydration issues — use container.get(ClientTypes.Logger) instead
10
+ const logger = params.context.container.get(ClientTypes.Logger);
10
11
  logger.debug('middlewares [%j]', middlewareStack);
11
12
  const loaderData = middlewareOptions ? middlewareOptions : {};
13
+ // Pass logger through loaderData so middlewares don't need repeated container.get() calls
14
+ loaderData.logger = logger;
12
15
  const executeMiddlewares = async (index) => {
13
16
  if (index < middlewareStack.length) {
14
17
  const middleware = middlewareStack[index];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@common-stack/frontend-stack-react",
3
- "version": "8.5.1-alpha.4",
3
+ "version": "8.6.1-alpha.1",
4
4
  "description": "Client Module for react app",
5
5
  "homepage": "https://github.com/cdmbase/fullstack-pro#readme",
6
6
  "bugs": {
@@ -33,9 +33,9 @@
33
33
  "@cdm-logger/client": "^9.0.17",
34
34
  "@cdm-logger/server": "^9.0.17",
35
35
  "@common-stack/cache-api-server": "8.4.1-alpha.0",
36
- "@common-stack/client-core": "8.5.1-alpha.4",
37
- "@common-stack/client-react": "8.5.1-alpha.4",
38
- "@common-stack/components-pro": "8.5.1-alpha.4",
36
+ "@common-stack/client-core": "8.6.1-alpha.0",
37
+ "@common-stack/client-react": "8.6.1-alpha.0",
38
+ "@common-stack/components-pro": "8.6.1-alpha.0",
39
39
  "@common-stack/core": "8.4.1-alpha.0",
40
40
  "@common-stack/remix-router-redux": "8.3.1-alpha.4",
41
41
  "@common-stack/server-core": "8.4.1-alpha.0",
@@ -106,7 +106,7 @@
106
106
  "publishConfig": {
107
107
  "access": "public"
108
108
  },
109
- "gitHead": "c996b74a8a8a03181b38ecea628e4c2a37488ff6",
109
+ "gitHead": "f62eae13ecab9c0e79d9296cf56e17ac9d9f9a9b",
110
110
  "typescript": {
111
111
  "definition": "lib/index.d.ts"
112
112
  }