@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.
- package/lib/backend/middlewares/container.js +9 -2
- package/lib/config/client.service.d.ts +0 -1
- package/lib/config/client.service.js +5 -2
- package/lib/load-context.server.js +7 -4
- package/lib/tools/clientLoaderWithMiddleware.js +15 -1
- package/lib/tools/loaderWithMiddleware.js +5 -2
- package/package.json +5 -5
|
@@ -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
|
|
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.
|
|
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') {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import'reflect-metadata';import {ClientTypes}from'@common-stack/client-core';import {
|
|
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
|
|
6
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
37
|
-
"@common-stack/client-react": "8.
|
|
38
|
-
"@common-stack/components-pro": "8.
|
|
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": "
|
|
109
|
+
"gitHead": "f62eae13ecab9c0e79d9296cf56e17ac9d9f9a9b",
|
|
110
110
|
"typescript": {
|
|
111
111
|
"definition": "lib/index.d.ts"
|
|
112
112
|
}
|