@common-stack/generate-plugin 6.0.8-alpha.4 → 6.0.8-alpha.40

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +148 -4
  2. package/docker-releases/backend/package.json +6 -7
  3. package/docker-releases/frontend/antd/package.json +7 -7
  4. package/lib/generators/add-backend/files/Dockerfile +2 -0
  5. package/lib/generators/add-backend/files/package.json +2 -1
  6. package/lib/generators/add-backend/files/webpack.config.js +3 -1
  7. package/lib/generators/add-frontend/frameworks/antui/context.tsx.template +8 -0
  8. package/lib/generators/add-frontend/frameworks/antui/entry.client.tsx.template +9 -2
  9. package/lib/generators/add-frontend/frameworks/antui/entry.server.tsx.template +60 -51
  10. package/lib/generators/add-frontend/frameworks/antui/root.tsx.template +7 -11
  11. package/lib/generators/add-frontend/frameworks/chakraui/context.tsx.template +6 -0
  12. package/lib/generators/add-frontend/frameworks/chakraui/entry.client.tsx.template +23 -15
  13. package/lib/generators/add-frontend/frameworks/chakraui/entry.server.tsx.template +33 -30
  14. package/lib/generators/add-frontend/frameworks/chakraui/root.tsx.template +8 -4
  15. package/lib/generators/add-frontend/templates/Dockerfile +4 -0
  16. package/lib/generators/add-frontend/templates/package.json +5 -2
  17. package/lib/generators/add-frontend/templates/vite.config.ts.template +3 -0
  18. package/lib/generators/add-fullstack/files/cdecode-config.json +109 -0
  19. package/lib/generators/add-fullstack/files/package.json +17 -7
  20. package/lib/generators/add-fullstack/files/rollup.config.base.mjs +17 -95
  21. package/lib/generators/add-fullstack/files/tools/codegenGenerator.mjs +36 -0
  22. package/lib/generators/add-moleculer/files/Dockerfile +2 -0
  23. package/lib/generators/add-moleculer/files/config.json +5 -0
  24. package/lib/generators/add-moleculer/files/package.json +8 -5
  25. package/lib/generators/add-moleculer/files/rollup.config.mjs +14 -1
  26. package/package.json +3 -3
  27. package/src/generators/add-frontend/frameworks/antui/context.tsx.template +8 -0
  28. package/src/generators/add-frontend/frameworks/antui/entry.client.tsx.template +9 -2
  29. package/src/generators/add-frontend/frameworks/antui/entry.server.tsx.template +60 -51
  30. package/src/generators/add-frontend/frameworks/antui/root.tsx.template +7 -11
  31. package/src/generators/add-frontend/frameworks/chakraui/context.tsx.template +6 -0
  32. package/src/generators/add-frontend/frameworks/chakraui/entry.client.tsx.template +23 -15
  33. package/src/generators/add-frontend/frameworks/chakraui/entry.server.tsx.template +33 -30
  34. package/src/generators/add-frontend/frameworks/chakraui/root.tsx.template +8 -4
  35. package/src/generators/add-fullstack/files/cdecode-config.json +109 -0
  36. package/src/generators/add-fullstack/files/package.json +17 -7
  37. package/src/generators/add-fullstack/files/rollup.config.base.mjs +17 -95
  38. package/src/generators/add-fullstack/files/tools/codegenGenerator.mjs +36 -0
  39. package/src/generators/add-moleculer/files/.dockerignore +2 -1
  40. package/src/generators/add-moleculer/files/Dockerfile +2 -0
  41. package/src/generators/add-moleculer/files/config.json +5 -0
  42. package/src/generators/add-moleculer/files/package.json +8 -5
  43. package/src/generators/add-moleculer/files/rollup.config.mjs +14 -1
  44. package/lib/generators/add-moleculer/files/src/modules/module.ts.template +0 -31
  45. package/src/generators/add-moleculer/files/src/modules/module.ts.template +0 -31
package/CHANGELOG.md CHANGED
@@ -3,6 +3,150 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.0.8-alpha.40](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.39...v6.0.8-alpha.40) (2025-02-02)
7
+
8
+ **Note:** Version bump only for package @common-stack/generate-plugin
9
+
10
+ ## [6.0.8-alpha.39](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.38...v6.0.8-alpha.39) (2025-02-01)
11
+
12
+ **Note:** Version bump only for package @common-stack/generate-plugin
13
+
14
+ ## [6.0.8-alpha.38](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.37...v6.0.8-alpha.38) (2025-02-01)
15
+
16
+ **Note:** Version bump only for package @common-stack/generate-plugin
17
+
18
+ ## [6.0.8-alpha.37](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.36...v6.0.8-alpha.37) (2025-02-01)
19
+
20
+ **Note:** Version bump only for package @common-stack/generate-plugin
21
+
22
+ ## [6.0.8-alpha.36](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.35...v6.0.8-alpha.36) (2025-02-01)
23
+
24
+ **Note:** Version bump only for package @common-stack/generate-plugin
25
+
26
+ ## [6.0.8-alpha.35](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.34...v6.0.8-alpha.35) (2025-01-31)
27
+
28
+ **Note:** Version bump only for package @common-stack/generate-plugin
29
+
30
+ ## [6.0.8-alpha.34](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.33...v6.0.8-alpha.34) (2025-01-31)
31
+
32
+ **Note:** Version bump only for package @common-stack/generate-plugin
33
+
34
+ ## [6.0.8-alpha.33](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.32...v6.0.8-alpha.33) (2025-01-31)
35
+
36
+ **Note:** Version bump only for package @common-stack/generate-plugin
37
+
38
+ ## [6.0.8-alpha.32](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.31...v6.0.8-alpha.32) (2025-01-31)
39
+
40
+ **Note:** Version bump only for package @common-stack/generate-plugin
41
+
42
+ ## [6.0.8-alpha.31](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.30...v6.0.8-alpha.31) (2025-01-27)
43
+
44
+ **Note:** Version bump only for package @common-stack/generate-plugin
45
+
46
+ ## [6.0.8-alpha.30](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.29...v6.0.8-alpha.30) (2025-01-27)
47
+
48
+ **Note:** Version bump only for package @common-stack/generate-plugin
49
+
50
+ ## [6.0.8-alpha.29](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.28...v6.0.8-alpha.29) (2025-01-27)
51
+
52
+ **Note:** Version bump only for package @common-stack/generate-plugin
53
+
54
+ ## [6.0.8-alpha.28](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.27...v6.0.8-alpha.28) (2025-01-27)
55
+
56
+ **Note:** Version bump only for package @common-stack/generate-plugin
57
+
58
+ ## [6.0.8-alpha.27](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.26...v6.0.8-alpha.27) (2025-01-27)
59
+
60
+ **Note:** Version bump only for package @common-stack/generate-plugin
61
+
62
+ ## [6.0.8-alpha.26](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.25...v6.0.8-alpha.26) (2025-01-27)
63
+
64
+ **Note:** Version bump only for package @common-stack/generate-plugin
65
+
66
+ ## [6.0.8-alpha.25](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.24...v6.0.8-alpha.25) (2025-01-27)
67
+
68
+ **Note:** Version bump only for package @common-stack/generate-plugin
69
+
70
+ ## [6.0.8-alpha.24](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.23...v6.0.8-alpha.24) (2025-01-27)
71
+
72
+ **Note:** Version bump only for package @common-stack/generate-plugin
73
+
74
+ ## [6.0.8-alpha.23](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.22...v6.0.8-alpha.23) (2025-01-22)
75
+
76
+ **Note:** Version bump only for package @common-stack/generate-plugin
77
+
78
+ ## [6.0.8-alpha.22](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.21...v6.0.8-alpha.22) (2025-01-20)
79
+
80
+ **Note:** Version bump only for package @common-stack/generate-plugin
81
+
82
+ ## [6.0.8-alpha.21](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.20...v6.0.8-alpha.21) (2025-01-19)
83
+
84
+ **Note:** Version bump only for package @common-stack/generate-plugin
85
+
86
+ ## [6.0.8-alpha.20](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.19...v6.0.8-alpha.20) (2025-01-17)
87
+
88
+ **Note:** Version bump only for package @common-stack/generate-plugin
89
+
90
+ ## [6.0.8-alpha.19](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.18...v6.0.8-alpha.19) (2025-01-14)
91
+
92
+ **Note:** Version bump only for package @common-stack/generate-plugin
93
+
94
+ ## [6.0.8-alpha.18](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.17...v6.0.8-alpha.18) (2025-01-11)
95
+
96
+ **Note:** Version bump only for package @common-stack/generate-plugin
97
+
98
+ ## [6.0.8-alpha.17](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.16...v6.0.8-alpha.17) (2025-01-08)
99
+
100
+ **Note:** Version bump only for package @common-stack/generate-plugin
101
+
102
+ ## [6.0.8-alpha.16](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.15...v6.0.8-alpha.16) (2025-01-08)
103
+
104
+ **Note:** Version bump only for package @common-stack/generate-plugin
105
+
106
+ ## [6.0.8-alpha.15](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.14...v6.0.8-alpha.15) (2025-01-03)
107
+
108
+ **Note:** Version bump only for package @common-stack/generate-plugin
109
+
110
+ ## [6.0.8-alpha.14](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.13...v6.0.8-alpha.14) (2024-12-30)
111
+
112
+ **Note:** Version bump only for package @common-stack/generate-plugin
113
+
114
+ ## [6.0.8-alpha.13](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.12...v6.0.8-alpha.13) (2024-12-30)
115
+
116
+ **Note:** Version bump only for package @common-stack/generate-plugin
117
+
118
+ ## [6.0.8-alpha.12](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.11...v6.0.8-alpha.12) (2024-12-29)
119
+
120
+ **Note:** Version bump only for package @common-stack/generate-plugin
121
+
122
+ ## [6.0.8-alpha.11](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.10...v6.0.8-alpha.11) (2024-12-29)
123
+
124
+ **Note:** Version bump only for package @common-stack/generate-plugin
125
+
126
+ ## [6.0.8-alpha.10](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.9...v6.0.8-alpha.10) (2024-12-20)
127
+
128
+ **Note:** Version bump only for package @common-stack/generate-plugin
129
+
130
+ ## [6.0.8-alpha.9](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.8...v6.0.8-alpha.9) (2024-12-20)
131
+
132
+ **Note:** Version bump only for package @common-stack/generate-plugin
133
+
134
+ ## [6.0.8-alpha.8](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.7...v6.0.8-alpha.8) (2024-12-19)
135
+
136
+ **Note:** Version bump only for package @common-stack/generate-plugin
137
+
138
+ ## [6.0.8-alpha.7](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.6...v6.0.8-alpha.7) (2024-12-19)
139
+
140
+ **Note:** Version bump only for package @common-stack/generate-plugin
141
+
142
+ ## [6.0.8-alpha.6](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.5...v6.0.8-alpha.6) (2024-12-19)
143
+
144
+ **Note:** Version bump only for package @common-stack/generate-plugin
145
+
146
+ ## [6.0.8-alpha.5](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.4...v6.0.8-alpha.5) (2024-12-19)
147
+
148
+ **Note:** Version bump only for package @common-stack/generate-plugin
149
+
6
150
  ## [6.0.8-alpha.4](https://github.com/cdmbase/common-stack/compare/v6.0.8-alpha.3...v6.0.8-alpha.4) (2024-12-19)
7
151
 
8
152
  **Note:** Version bump only for package @common-stack/generate-plugin
@@ -257,18 +401,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
257
401
 
258
402
  ### Bug Fixes
259
403
 
260
- - **server-stack:** apollo server redis cache ([2ef1df3](https://github.com/cdmbase/common-stack/commit/2ef1df30176616baf9816c47168687577f7aa8ff))
404
+ - **server-stack:** apollo server redis cache ([2ef1df3](https://github.com/cdmbase/common-stack/commit/2ef1df30176616baf9816c47168687577f7aa8ff))
261
405
 
262
406
  ### Features
263
407
 
264
- - enable docker layer caching ([ce2c742](https://github.com/cdmbase/common-stack/commit/ce2c74271a107d5c73580523a4e1822b80e04c8d))
408
+ - enable docker layer caching ([ce2c742](https://github.com/cdmbase/common-stack/commit/ce2c74271a107d5c73580523a4e1822b80e04c8d))
265
409
 
266
410
  ## [6.0.6-alpha.0](https://github.com/cdmbase/common-stack/compare/v0.0.251...v6.0.6-alpha.0) (2024-12-16)
267
411
 
268
412
  ### Bug Fixes
269
413
 
270
- - **server-stack:** apollo server redis cache ([2ef1df3](https://github.com/cdmbase/common-stack/commit/2ef1df30176616baf9816c47168687577f7aa8ff))
414
+ - **server-stack:** apollo server redis cache ([2ef1df3](https://github.com/cdmbase/common-stack/commit/2ef1df30176616baf9816c47168687577f7aa8ff))
271
415
 
272
416
  ### Features
273
417
 
274
- - enable docker layer caching ([ce2c742](https://github.com/cdmbase/common-stack/commit/ce2c74271a107d5c73580523a4e1822b80e04c8d))
418
+ - enable docker layer caching ([ce2c742](https://github.com/cdmbase/common-stack/commit/ce2c74271a107d5c73580523a4e1822b80e04c8d))
@@ -70,12 +70,12 @@
70
70
  "@cdm-logger/client": "^9.0.3",
71
71
  "@cdm-logger/server": "^9.0.3",
72
72
  "@cdmbase/graphql-type-uri": "^4.0.0",
73
- "@common-stack/cache-api-server": "6.0.8-alpha.1",
74
- "@common-stack/client-core": "6.0.8-alpha.1",
75
- "@common-stack/core": "6.0.8-alpha.1",
76
- "@common-stack/server-core": "6.0.8-alpha.1",
77
- "@common-stack/server-stack": "6.0.8-alpha.3",
78
- "@common-stack/store-mongo": "6.0.8-alpha.1",
73
+ "@common-stack/cache-api-server": "6.0.8-alpha.31",
74
+ "@common-stack/client-core": "6.0.8-alpha.31",
75
+ "@common-stack/core": "6.0.8-alpha.31",
76
+ "@common-stack/server-core": "6.0.8-alpha.31",
77
+ "@common-stack/server-stack": "6.0.8-alpha.32",
78
+ "@common-stack/store-mongo": "6.0.8-alpha.31",
79
79
  "@graphql-tools/links": "~9.0.1",
80
80
  "@graphql-tools/schema": "~10.0.6",
81
81
  "@graphql-tools/stitch": "~9.2.10",
@@ -95,7 +95,6 @@
95
95
  "express": "^4.17.1",
96
96
  "graphql": "^16.0.0",
97
97
  "graphql-bigint": "^1.0.0",
98
- "graphql-iso-date": "^3.6.1",
99
98
  "graphql-middleware": "^6.1.33",
100
99
  "graphql-nats-subscriptions": "^1.5.0",
101
100
  "graphql-playground-middleware-express": "^1.7.3",
@@ -63,13 +63,13 @@
63
63
  "@apollo/client": "^3.9.0",
64
64
  "@cdm-logger/client": "^9.0.3",
65
65
  "@cdm-logger/server": "^9.0.3",
66
- "@common-stack/cache-api-server": "6.0.8-alpha.1",
67
- "@common-stack/client-core": "6.0.8-alpha.1",
68
- "@common-stack/client-react": "6.0.8-alpha.1",
69
- "@common-stack/components-pro": "6.0.8-alpha.1",
70
- "@common-stack/core": "6.0.8-alpha.1",
71
- "@common-stack/remix-router-redux": "6.0.8-alpha.1",
72
- "@common-stack/server-core": "6.0.8-alpha.1",
66
+ "@common-stack/cache-api-server": "6.0.8-alpha.31",
67
+ "@common-stack/client-core": "6.0.8-alpha.31",
68
+ "@common-stack/client-react": "6.0.8-alpha.31",
69
+ "@common-stack/components-pro": "6.0.8-alpha.31",
70
+ "@common-stack/core": "6.0.8-alpha.31",
71
+ "@common-stack/remix-router-redux": "6.0.8-alpha.31",
72
+ "@common-stack/server-core": "6.0.8-alpha.31",
73
73
  "@reduxjs/toolkit": "^2.2.6",
74
74
  "@remix-run/express": "~2.10.1",
75
75
  "@remix-run/node": "~2.10.1",
@@ -4,6 +4,7 @@ FROM node:20.16-bullseye
4
4
  ENV PYTHON=/usr/bin/python
5
5
 
6
6
  COPY .npmrc package.json /tmp/
7
+ COPY common /tmp/common
7
8
 
8
9
  RUN set -ex \
9
10
  && cd /tmp \
@@ -13,6 +14,7 @@ RUN set -ex \
13
14
  && rm -f /tmp/.npmrc \
14
15
  && mkdir -p /home/app \
15
16
  && cp -a /tmp/node_modules /home/app/ \
17
+ && cp -a /tmp/common /home/app/common \
16
18
  && rm -Rf /tmp/*
17
19
 
18
20
  WORKDIR /home/app
@@ -57,12 +57,13 @@
57
57
  "watch:test": "cross-env NODE_ENV=test ENV_FILE=../../config/test/test.env yarn build:test && yarn start:test"
58
58
  },
59
59
  "resolutions": {
60
+ "common": "link:./common",
60
61
  "html-to-text": "^8.0.0"
61
62
  },
62
63
  "dependencies": {
63
64
  "@apollo/client": "^3.9.0",
64
65
  "@babel/runtime": "^7.20.1",
65
- "@common-stack/server-stack": "6.0.8-alpha.3",
66
+ "@common-stack/server-stack": "6.0.8-alpha.32",
66
67
  "@remix-run/node": "~2.10.1",
67
68
  "lodash": "^4.17.15",
68
69
  "react": "18.2.0"
@@ -1,4 +1,6 @@
1
- process.env.ENV_FILE !== null && require('dotenv').config({ path: process.env.ENV_FILE });
1
+ if (process.env.ENV_FILE) {
2
+ require('dotenv').config({ path: process.env.ENV_FILE });
3
+ }
2
4
  const webpack = require('webpack');
3
5
  const path = require('path');
4
6
  const { CleanWebpackPlugin } = require('clean-webpack-plugin');
@@ -0,0 +1,8 @@
1
+ // context.tsx
2
+ import React, { createContext } from 'react';
3
+
4
+ export interface LocaleContextData {
5
+ locale: string;
6
+ }
7
+
8
+ export const LocaleContext = createContext<LocaleContextData | null>(null);
@@ -32,6 +32,7 @@ import clientModules from '@app/frontend-stack-react/modules.js';
32
32
  import createEmotionCache from '@app/frontend-stack-react/entries/common/createEmotionCache.js';
33
33
  // @ts-ignore
34
34
  import config from '@app/cde-webconfig.json';
35
+ import { LocaleContext } from './context';
35
36
 
36
37
  const { apolloClient: client, container, serviceFunc } = createClientContainer();
37
38
  const { store } = createReduxStore(client, serviceFunc(), container);
@@ -42,6 +43,12 @@ const cache = createEmotionCache();
42
43
  (window as any).__remixStore = store;
43
44
  removeUniversalPortals((window as any).__SLOT_FILLS__ || []);
44
45
 
46
+ function LocaleProvider({ children }: any) {
47
+ const locale = (window as any).__LOCALE__ || '';
48
+
49
+ return <LocaleContext.Provider value={locale}>{children}</LocaleContext.Provider>;
50
+ }
51
+
45
52
  async function hydrate() {
46
53
  if (!i18next.isInitialized && config.i18n.enabled) {
47
54
  await i18next
@@ -66,7 +73,7 @@ async function hydrate() {
66
73
  document,
67
74
  (
68
75
  <I18nextProvider i18n={i18next}>
69
- <StrictMode>
76
+ <LocaleProvider>
70
77
  <CacheProvider value={cache}>
71
78
  <StyleProvider cache={antCache}>
72
79
  <ReduxProvider store={store}>
@@ -84,7 +91,7 @@ async function hydrate() {
84
91
  </ReduxProvider>
85
92
  </StyleProvider>
86
93
  </CacheProvider>
87
- </StrictMode>
94
+ </LocaleProvider>
88
95
  </I18nextProvider>
89
96
  ) as any,
90
97
  );
@@ -31,6 +31,9 @@ import config from '@app/cde-webconfig.json';
31
31
  // @ts-ignore
32
32
  import createEmotionCache from '@app/frontend-stack-react/entries/common/createEmotionCache';
33
33
  import type { IAppLoadContext } from '@common-stack/client-core';
34
+ // @ts-ignore
35
+ import publicEnv from '@src/config/public-config';
36
+ import { LocaleContext } from './context';
34
37
 
35
38
  const ABORT_DELAY = 5_000;
36
39
  const antdCache = createAntdCache();
@@ -41,18 +44,23 @@ class ConstantsTransform extends Transform {
41
44
  _apolloState: any;
42
45
  _reduxState: any;
43
46
  _styleSheet: string;
47
+ _lng: string;
44
48
 
45
- constructor(fills: string[], apolloState: any, reduxState: any, styleSheet: any) {
49
+ constructor(fills: string[], apolloState: any, reduxState: any, styleSheet: any, lng: string) {
46
50
  super();
47
51
  this._fills = fills;
48
52
  this._apolloState = apolloState;
49
53
  this._reduxState = reduxState;
50
54
  this._styleSheet = styleSheet;
55
+ this._lng = lng;
51
56
  }
52
57
 
53
58
  _transform(chunk, encoding, callback) {
54
59
  let transformedChunk = chunk.toString();
55
60
 
61
+ if (transformedChunk.includes('[__ENV__]')) {
62
+ transformedChunk = transformedChunk.replace('[__ENV__]', JSON.stringify(publicEnv));
63
+ }
56
64
  if (transformedChunk.includes('[__APOLLO_STATE__]')) {
57
65
  transformedChunk = transformedChunk.replace(
58
66
  '[__APOLLO_STATE__]',
@@ -71,6 +79,9 @@ class ConstantsTransform extends Transform {
71
79
  if (transformedChunk.includes('[__STYLESHEET__]')) {
72
80
  transformedChunk = transformedChunk.replace('[__STYLESHEET__]', this._styleSheet);
73
81
  }
82
+ if (transformedChunk.includes('[__LOCALE__]')) {
83
+ transformedChunk = transformedChunk.replace('[__LOCALE__]', `"${this._lng}"`);
84
+ }
74
85
 
75
86
  callback(null, transformedChunk);
76
87
  }
@@ -86,32 +97,9 @@ export default async function handleRequest(
86
97
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
98
  loadContext: IAppLoadContext,
88
99
  ) {
89
- const instance = createInstance();
90
- const lng = await i18next.getLocale(request);
91
- const ns = i18next.getRouteNamespaces(remixContext);
92
-
93
- // First, we create a new instance of i18next so every request will have a
94
- // completely unique instance and not share any state.
95
- if (config.i18n.enabled) {
96
- await instance
97
- .use(initReactI18next) // Tell our instance to use react-i18next
98
- .use(Backend) // Setup our backend.init({
99
- .init({
100
- fallbackLng: config.i18n.fallbackLng,
101
- defaultNS: config.i18n.defaultNS,
102
- react: config.i18n.react,
103
- supportedLngs: config.i18n.supportedLngs,
104
- lng, // The locale we detected above
105
- ns, // The namespaces the routes about to render want to use
106
- backend: {
107
- loadPath: resolve(config.i18n.backend.loadServerPath),
108
- },
109
- });
110
- }
111
-
112
100
  return isbot(request.headers.get('user-agent') || '')
113
- ? handleBotRequest(request, responseStatusCode, responseHeaders, remixContext, loadContext, instance)
114
- : handleBrowserRequest(request, responseStatusCode, responseHeaders, remixContext, loadContext, instance);
101
+ ? handleBotRequest(request, responseStatusCode, responseHeaders, remixContext, loadContext)
102
+ : handleBrowserRequest(request, responseStatusCode, responseHeaders, remixContext, loadContext);
115
103
  }
116
104
 
117
105
  function handleBotRequest(
@@ -120,14 +108,11 @@ function handleBotRequest(
120
108
  responseHeaders: Headers,
121
109
  remixContext: EntryContext,
122
110
  loadContext: IAppLoadContext,
123
- i18nInstance: i18next,
124
111
  ) {
125
112
  return new Promise((resolve, reject) => {
126
113
  let shellRendered = false;
127
114
  const { pipe, abort } = renderToPipeableStream(
128
- <I18nextProvider i18n={i18nInstance}>
129
- <RemixServer context={remixContext} url={request.url} abortDelay={ABORT_DELAY} />
130
- </I18nextProvider>,
115
+ <RemixServer context={remixContext} url={request.url} abortDelay={ABORT_DELAY} />,
131
116
  {
132
117
  onAllReady() {
133
118
  shellRendered = true;
@@ -164,14 +149,36 @@ function handleBotRequest(
164
149
  });
165
150
  }
166
151
 
167
- function handleBrowserRequest(
152
+ async function handleBrowserRequest(
168
153
  request: Request,
169
154
  responseStatusCode: number,
170
155
  responseHeaders: Headers,
171
156
  remixContext: EntryContext,
172
157
  loadContext: IAppLoadContext,
173
- i18nInstance: i18next,
174
158
  ) {
159
+ const instance = createInstance();
160
+ const lng = await i18next.getLocale(request);
161
+ const ns = i18next.getRouteNamespaces(remixContext);
162
+
163
+ // First, we create a new instance of i18next so every request will have a
164
+ // completely unique instance and not share any state.
165
+ if (config.i18n.enabled) {
166
+ await instance
167
+ .use(initReactI18next) // Tell our instance to use react-i18next
168
+ .use(Backend) // Setup our backend.init({
169
+ .init({
170
+ fallbackLng: config.i18n.fallbackLng,
171
+ defaultNS: config.i18n.defaultNS,
172
+ react: config.i18n.react,
173
+ supportedLngs: config.i18n.supportedLngs,
174
+ lng, // The locale we detected above
175
+ ns, // The namespaces the routes about to render want to use
176
+ backend: {
177
+ loadPath: resolve(config.i18n.backend.loadServerPath),
178
+ },
179
+ });
180
+ }
181
+
175
182
  return new Promise((resolve, reject) => {
176
183
  let shellRendered = false;
177
184
  const slotFillContext = { fills: {} };
@@ -190,24 +197,26 @@ function handleBrowserRequest(
190
197
 
191
198
  const { pipe, abort } = renderToPipeableStream(
192
199
  (
193
- <I18nextProvider i18n={i18nInstance}>
194
- <CacheProvider value={cache}>
195
- <StyleProvider cache={antdCache}>
196
- <ReduxProvider store={store}>
197
- <SlotFillProvider context={slotFillContext}>
198
- <InversifyProvider container={container} modules={clientModules as any}>
199
- <ApolloProvider client={client}>
200
- <RemixServer
201
- context={remixContext}
202
- url={request.url}
203
- abortDelay={ABORT_DELAY}
204
- />
205
- </ApolloProvider>
206
- </InversifyProvider>
207
- </SlotFillProvider>
208
- </ReduxProvider>
209
- </StyleProvider>
210
- </CacheProvider>
200
+ <I18nextProvider i18n={instance}>
201
+ <LocaleContext.Provider value={lng}>
202
+ <CacheProvider value={cache}>
203
+ <StyleProvider cache={antdCache}>
204
+ <ReduxProvider store={store}>
205
+ <SlotFillProvider context={slotFillContext}>
206
+ <InversifyProvider container={container} modules={clientModules as any}>
207
+ <ApolloProvider client={client}>
208
+ <RemixServer
209
+ context={remixContext}
210
+ url={request.url}
211
+ abortDelay={ABORT_DELAY}
212
+ />
213
+ </ApolloProvider>
214
+ </InversifyProvider>
215
+ </SlotFillProvider>
216
+ </ReduxProvider>
217
+ </StyleProvider>
218
+ </CacheProvider>
219
+ </LocaleContext.Provider>
211
220
  </I18nextProvider>
212
221
  ) as any,
213
222
  {
@@ -220,7 +229,7 @@ function handleBrowserRequest(
220
229
  const fills = Object.keys(slotFillContext.fills);
221
230
  const styleSheet = extractStyle(antdCache);
222
231
 
223
- const transform = new ConstantsTransform(fills, apolloState, reduxState, styleSheet);
232
+ const transform = new ConstantsTransform(fills, apolloState, reduxState, styleSheet, lng);
224
233
 
225
234
  responseHeaders.set('Content-Type', 'text/html');
226
235
 
@@ -1,8 +1,6 @@
1
1
  import 'reflect-metadata';
2
2
  import * as React from 'react';
3
3
  import { Links, Meta, Outlet, Scripts, ScrollRestoration, useRouteLoaderData, useRouteError, json } from '@remix-run/react';
4
- // @ts-ignore
5
- import publicEnv from '@src/config/public-config';
6
4
  import { PluginArea } from '@common-stack/client-react';
7
5
  import { subscribeReduxRouter } from '@common-stack/remix-router-redux';
8
6
  import { ApplicationErrorHandler } from '@admin-layout/ant-ui';
@@ -16,7 +14,8 @@ import { useTranslation } from 'react-i18next';
16
14
  import { i18nextInstance as i18next } from '@app/frontend-stack-react/i18n-localization/i18next.server.js';
17
15
  // @ts-ignore
18
16
  import { ErrorBoundary } from '@app/frontend-stack-react/entries/antui/components/ErrorBoundary';
19
-
17
+ import { LocaleContext } from './context';
18
+ /*
20
19
  export const loader = async ({ request }) => {
21
20
  const locale = await i18next.getLocale(request);
22
21
  return json({
@@ -24,7 +23,7 @@ export const loader = async ({ request }) => {
24
23
  locale,
25
24
  });
26
25
  };
27
-
26
+ */
28
27
  export const handle = {
29
28
  i18n: 'common',
30
29
  };
@@ -34,8 +33,8 @@ export function shouldRevalidate(params: any) {
34
33
  }
35
34
 
36
35
  export function Layout({ children }: { children: React.ReactNode }) {
37
- const data = useRouteLoaderData<{ locale: any }>('root');
38
- const locale = data?.locale;
36
+ // const data = useRouteLoaderData<{ locale: any }>('root');
37
+ const locale: any = React.useContext(LocaleContext);
39
38
 
40
39
  const { i18n } = useTranslation();
41
40
 
@@ -49,11 +48,7 @@ export function Layout({ children }: { children: React.ReactNode }) {
49
48
  if (typeof window === 'undefined') {
50
49
  return (
51
50
  <>
52
- <script
53
- dangerouslySetInnerHTML={{
54
- __html: `window.__ENV__ = ${JSON.stringify((data as any)?.__ENV__)}`,
55
- }}
56
- />
51
+ <script>window.__ENV__=[__ENV__]</script>
57
52
  <script
58
53
  src="https://cdnjs.cloudflare.com/ajax/libs/reflect-metadata/0.1.13/Reflect.min.js"
59
54
  integrity="sha512-jvbPH2TH5BSZumEfOJZn9IV+5bSwwN+qG4dvthYe3KCGC3/9HmxZ4phADbt9Pfcp+XSyyfc2vGZ/RMsSUZ9tbQ=="
@@ -68,6 +63,7 @@ export function Layout({ children }: { children: React.ReactNode }) {
68
63
  __html: `if (global === undefined) { var global = window; }`,
69
64
  }}
70
65
  />
66
+ <script>window.__LOCALE__=[__LOCALE__]</script>
71
67
  </>
72
68
  );
73
69
  }
@@ -18,3 +18,9 @@ export interface ClientStyleContextData {
18
18
  export const ClientStyleContext = createContext<ClientStyleContextData | null>(
19
19
  null,
20
20
  );
21
+
22
+ export interface LocaleContextData {
23
+ locale: string;
24
+ }
25
+
26
+ export const LocaleContext = createContext<LocaleContextData | null>(null);
@@ -27,8 +27,7 @@ import Backend from 'i18next-http-backend';
27
27
  import { getInitialNamespaces } from 'remix-i18next/client';
28
28
  import config from '@app/cde-webconfig.json';
29
29
  // @ts-ignore
30
- // import { ClientStyleContext } from '@app/frontend-stack-react/entries/chakraui/context.js';
31
- import { ClientStyleContext } from './context';
30
+ import { ClientStyleContext, LocaleContext } from './context';
32
31
 
33
32
  const { apolloClient: client, container, serviceFunc } = createClientContainer();
34
33
  const { store } = createReduxStore(client, serviceFunc(), container);
@@ -60,6 +59,13 @@ function ClientCacheProvider({ children }: ClientCacheProviderProps) {
60
59
  );
61
60
  }
62
61
 
62
+ function LocaleProvider({ children }: ClientCacheProviderProps) {
63
+ const el = (document as any).querySelector('html');
64
+ const locale = el?.getAttribute('lng') || '';
65
+
66
+ return <LocaleContext.Provider value={locale}>{children}</LocaleContext.Provider>;
67
+ }
68
+
63
69
  async function hydrate() {
64
70
  if (!i18next.isInitialized && config.i18n.enabled) {
65
71
  await i18next
@@ -83,19 +89,21 @@ async function hydrate() {
83
89
  document.getElementById('root')!,
84
90
  // <StrictMode>
85
91
  <I18nextProvider i18n={i18next}>
86
- <ClientCacheProvider>
87
- <ApolloProvider client={client}>
88
- <ReduxProvider store={store}>
89
- <SlotFillProvider>
90
- <InversifyProvider container={container} modules={clientModules}>
91
- <PersistGate loading={null} persistor={persistor}>
92
- {() => <RemixBrowser />}
93
- </PersistGate>
94
- </InversifyProvider>
95
- </SlotFillProvider>
96
- </ReduxProvider>
97
- </ApolloProvider>
98
- </ClientCacheProvider>
92
+ <LocaleProvider>
93
+ <ClientCacheProvider>
94
+ <ApolloProvider client={client}>
95
+ <ReduxProvider store={store}>
96
+ <SlotFillProvider>
97
+ <InversifyProvider container={container} modules={clientModules}>
98
+ <PersistGate loading={null} persistor={persistor}>
99
+ {() => <RemixBrowser />}
100
+ </PersistGate>
101
+ </InversifyProvider>
102
+ </SlotFillProvider>
103
+ </ReduxProvider>
104
+ </ApolloProvider>
105
+ </ClientCacheProvider>
106
+ </LocaleProvider>
99
107
  </I18nextProvider>,
100
108
  // </StrictMode>,
101
109
  );