@modern-js/plugin-garfish 2.10.0 → 2.12.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @modern-js/plugin-garfish
2
2
 
3
+ ## 2.12.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [c2ca6c8]
8
+ - Updated dependencies [0b05ec3]
9
+ - Updated dependencies [6d86e34]
10
+ - Updated dependencies [1aa0cb7]
11
+ - @modern-js/utils@2.12.0
12
+ - @modern-js/runtime@2.12.0
13
+
14
+ ## 2.11.0
15
+
16
+ ### Patch Changes
17
+
18
+ - 02bb383: fix: fix lost props when using nested route in micro-front-end mode
19
+ 修复嵌套路由在微前端场景下主子应用传递 props 丢失问题
20
+ - Updated dependencies [cfb058f]
21
+ - Updated dependencies [0bd018b]
22
+ - Updated dependencies [5d624fd]
23
+ - Updated dependencies [e2466a1]
24
+ - Updated dependencies [02bb383]
25
+ - Updated dependencies [381a3b9]
26
+ - Updated dependencies [7a60f10]
27
+ - Updated dependencies [274b2e5]
28
+ - Updated dependencies [b9e1c54]
29
+ - @modern-js/utils@2.11.0
30
+ - @modern-js/runtime@2.11.0
31
+
3
32
  ## 2.10.0
4
33
 
5
34
  ### Patch Changes
@@ -234,7 +234,11 @@ var cli_default = ({
234
234
  if (!((_a = config == null ? void 0 : config.deploy) == null ? void 0 : _a.microFrontend)) {
235
235
  return { entrypoint, code };
236
236
  }
237
- const nCode = (0, import_utils2.makeRenderFunction)(code);
237
+ const { nestedRoutesEntry, pageRoutesEntry } = entrypoint;
238
+ const nCode = (0, import_utils2.makeRenderFunction)(
239
+ code,
240
+ Boolean(nestedRoutesEntry || pageRoutesEntry)
241
+ );
238
242
  (0, import_util.logger)("makeRenderFunction", nCode);
239
243
  return {
240
244
  entrypoint,
@@ -105,19 +105,30 @@ function generateAppWrapperAndRootDom ({ App, props: garfishProps, dom }) {
105
105
  return { AppWrapper, mountNode }
106
106
  }
107
107
  `;
108
- const makeRenderFunction = (code) => {
108
+ const makeRenderFunction = (code, isNested) => {
109
109
  const inGarfishToRender = `
110
110
  const { basename, props, dom, appName } = typeof arguments[0] === 'object' && arguments[0] || {};
111
111
  if (!canContinueRender({ dom, appName })) return null;
112
- let { AppWrapper, mountNode } = generateAppWrapperAndRootDom({App, props: {...props, basename}, dom});
113
112
  `;
114
- return inGarfishToRender + code.replace(`router(`, `generateRouterPlugin(basename,`).replace("(App)", `(AppWrapper)`).replace(/MOUNT_ID/g, "mountNode").replace(
115
- `bootstrap(AppWrapper, mountNode, root`,
116
- "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null"
117
- ).replace(
118
- `customBootstrap(AppWrapper`,
119
- "customBootstrap(AppWrapper, mountNode"
120
- );
113
+ const appWrapperCode = `let { AppWrapper, mountNode } = generateAppWrapperAndRootDom({App: ${isNested ? "AppWrapper" : "App"}, props: {...props, basename}, dom});`;
114
+ if (isNested) {
115
+ const codeString = inGarfishToRender + code.replace(`router(`, `generateRouterPlugin(basename,`).replace("(App)", `(AppWrapper)`).replace(/MOUNT_ID/g, "mountNode").replace(`if(!AppWrapper.init`, `${appWrapperCode}if(!AppWrapper.init`).replace(
116
+ `bootstrap(AppWrapper, mountNode, root`,
117
+ "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null"
118
+ ).replace(
119
+ `customBootstrap(AppWrapper`,
120
+ "customBootstrap(AppWrapper, mountNode"
121
+ );
122
+ return codeString;
123
+ } else {
124
+ return inGarfishToRender + appWrapperCode + code.replace(`router(`, `generateRouterPlugin(basename,`).replace("(App)", `(AppWrapper)`).replace(/MOUNT_ID/g, "mountNode").replace(
125
+ `bootstrap(AppWrapper, mountNode, root`,
126
+ "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null"
127
+ ).replace(
128
+ `customBootstrap(AppWrapper`,
129
+ "customBootstrap(AppWrapper, mountNode"
130
+ );
131
+ }
121
132
  };
122
133
  function getRuntimeConfig(config) {
123
134
  var _a, _b;
@@ -374,7 +374,8 @@ var cli_default = function() {
374
374
  code: code
375
375
  };
376
376
  }
377
- var nCode = makeRenderFunction(code);
377
+ var nestedRoutesEntry = entrypoint.nestedRoutesEntry, pageRoutesEntry = entrypoint.pageRoutesEntry;
378
+ var nCode = makeRenderFunction(code, Boolean(nestedRoutesEntry || pageRoutesEntry));
378
379
  logger("makeRenderFunction", nCode);
379
380
  return {
380
381
  entrypoint: entrypoint,
@@ -1,9 +1,15 @@
1
1
  var makeProvider = function() {
2
2
  return "\nexport const provider = function ({basename, dom}) {\n return {\n render({basename, dom, props, appName}) {\n render({ props, basename, dom, appName });\n },\n destroy({ dom }) {\n const node = dom.querySelector('#' + MOUNT_ID) || dom;\n\n if (node) {\n if (IS_REACT18) {\n root.unmount();\n } else {\n unmountComponentAtNode(node);\n }\n }\n },\n SubModuleComponent: (props) => {\n const SubApp = render({props, basename});\n\n return createPortal(<SubApp />, dom.querySelector('#' + MOUNT_ID) || dom);\n },\n jupiter_submodule_app_key: (props) => {\n const SubApp = render({props, basename});\n\n return createPortal(<SubApp />, dom.querySelector('#' + MOUNT_ID) || dom);\n }\n }\n};\n\nif (typeof __GARFISH_EXPORTS__ !== 'undefined') {\n __GARFISH_EXPORTS__.provider = provider;\n}\n\nfunction canContinueRender ({ dom, appName }) {\n var renderByGarfish =\n typeof __GARFISH_EXPORTS__ !== 'undefined'\n || typeof window !== 'undefined' && window.Garfish && window.Garfish.activeApps && window.Garfish.activeApps.some((app)=>app.appInfo.name === appName);\n let renderByProvider = dom || appName;\n if (renderByGarfish) {\n // Runs in the Garfish environment and is rendered by the provider\n if (renderByProvider) {\n return true;\n } else {\n // Runs in the Garfish environment and is not rendered by the provider\n return false;\n }\n } else {\n // Running in a non-Garfish environment\n return true;\n }\n}\n\nfunction generateRouterPlugin (basename,routerConfig) {\n if (basename) {\n routerConfig.basename = basename;\n if (routerConfig.supportHtml5History !== false) {\n if (!routerConfig.historyOptions) {\n routerConfig.historyOptions = {\n basename: basename\n };\n } else {\n routerConfig.historyOptions.basename = basename;\n }\n }\n }\n return router(routerConfig);\n}\n\nfunction generateAppWrapperAndRootDom ({ App, props: garfishProps, dom }) {\n let AppWrapper = App;\n if (garfishProps) {\n AppWrapper = function (props) {\n return React.createElement(App, { ...garfishProps, ...props });\n };\n AppWrapper = hoistNonReactStatics(AppWrapper, App);\n }\n const mountNode = dom ? (dom.querySelector('#' + MOUNT_ID) || dom) : document.getElementById(MOUNT_ID);\n return { AppWrapper, mountNode }\n}\n";
3
3
  };
4
- var makeRenderFunction = function(code) {
5
- var inGarfishToRender = "\n const { basename, props, dom, appName } = typeof arguments[0] === 'object' && arguments[0] || {};\n if (!canContinueRender({ dom, appName })) return null;\n let { AppWrapper, mountNode } = generateAppWrapperAndRootDom({App, props: {...props, basename}, dom});\n ";
6
- return inGarfishToRender + code.replace("router(", "generateRouterPlugin(basename,").replace("(App)", "(AppWrapper)").replace(/MOUNT_ID/g, "mountNode").replace("bootstrap(AppWrapper, mountNode, root", "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null").replace("customBootstrap(AppWrapper", "customBootstrap(AppWrapper, mountNode");
4
+ var makeRenderFunction = function(code, isNested) {
5
+ var inGarfishToRender = "\n const { basename, props, dom, appName } = typeof arguments[0] === 'object' && arguments[0] || {};\n if (!canContinueRender({ dom, appName })) return null;\n ";
6
+ var appWrapperCode = "let { AppWrapper, mountNode } = generateAppWrapperAndRootDom({App: ".concat(isNested ? "AppWrapper" : "App", ", props: {...props, basename}, dom});");
7
+ if (isNested) {
8
+ var codeString = inGarfishToRender + code.replace("router(", "generateRouterPlugin(basename,").replace("(App)", "(AppWrapper)").replace(/MOUNT_ID/g, "mountNode").replace("if(!AppWrapper.init", "".concat(appWrapperCode, "if(!AppWrapper.init")).replace("bootstrap(AppWrapper, mountNode, root", "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null").replace("customBootstrap(AppWrapper", "customBootstrap(AppWrapper, mountNode");
9
+ return codeString;
10
+ } else {
11
+ return inGarfishToRender + appWrapperCode + code.replace("router(", "generateRouterPlugin(basename,").replace("(App)", "(AppWrapper)").replace(/MOUNT_ID/g, "mountNode").replace("bootstrap(AppWrapper, mountNode, root", "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null").replace("customBootstrap(AppWrapper", "customBootstrap(AppWrapper, mountNode");
12
+ }
7
13
  };
8
14
  function getRuntimeConfig(config) {
9
15
  var _config_runtime;
@@ -216,7 +216,11 @@ var cli_default = ({
216
216
  if (!((_a = config == null ? void 0 : config.deploy) == null ? void 0 : _a.microFrontend)) {
217
217
  return { entrypoint, code };
218
218
  }
219
- const nCode = makeRenderFunction(code);
219
+ const { nestedRoutesEntry, pageRoutesEntry } = entrypoint;
220
+ const nCode = makeRenderFunction(
221
+ code,
222
+ Boolean(nestedRoutesEntry || pageRoutesEntry)
223
+ );
220
224
  logger("makeRenderFunction", nCode);
221
225
  return {
222
226
  entrypoint,
@@ -79,19 +79,30 @@ function generateAppWrapperAndRootDom ({ App, props: garfishProps, dom }) {
79
79
  return { AppWrapper, mountNode }
80
80
  }
81
81
  `;
82
- const makeRenderFunction = (code) => {
82
+ const makeRenderFunction = (code, isNested) => {
83
83
  const inGarfishToRender = `
84
84
  const { basename, props, dom, appName } = typeof arguments[0] === 'object' && arguments[0] || {};
85
85
  if (!canContinueRender({ dom, appName })) return null;
86
- let { AppWrapper, mountNode } = generateAppWrapperAndRootDom({App, props: {...props, basename}, dom});
87
86
  `;
88
- return inGarfishToRender + code.replace(`router(`, `generateRouterPlugin(basename,`).replace("(App)", `(AppWrapper)`).replace(/MOUNT_ID/g, "mountNode").replace(
89
- `bootstrap(AppWrapper, mountNode, root`,
90
- "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null"
91
- ).replace(
92
- `customBootstrap(AppWrapper`,
93
- "customBootstrap(AppWrapper, mountNode"
94
- );
87
+ const appWrapperCode = `let { AppWrapper, mountNode } = generateAppWrapperAndRootDom({App: ${isNested ? "AppWrapper" : "App"}, props: {...props, basename}, dom});`;
88
+ if (isNested) {
89
+ const codeString = inGarfishToRender + code.replace(`router(`, `generateRouterPlugin(basename,`).replace("(App)", `(AppWrapper)`).replace(/MOUNT_ID/g, "mountNode").replace(`if(!AppWrapper.init`, `${appWrapperCode}if(!AppWrapper.init`).replace(
90
+ `bootstrap(AppWrapper, mountNode, root`,
91
+ "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null"
92
+ ).replace(
93
+ `customBootstrap(AppWrapper`,
94
+ "customBootstrap(AppWrapper, mountNode"
95
+ );
96
+ return codeString;
97
+ } else {
98
+ return inGarfishToRender + appWrapperCode + code.replace(`router(`, `generateRouterPlugin(basename,`).replace("(App)", `(AppWrapper)`).replace(/MOUNT_ID/g, "mountNode").replace(
99
+ `bootstrap(AppWrapper, mountNode, root`,
100
+ "bootstrap(AppWrapper, mountNode, root = IS_REACT18 ? ReactDOM.createRoot(mountNode) : null"
101
+ ).replace(
102
+ `customBootstrap(AppWrapper`,
103
+ "customBootstrap(AppWrapper, mountNode"
104
+ );
105
+ }
95
106
  };
96
107
  function getRuntimeConfig(config) {
97
108
  var _a, _b;
@@ -1,6 +1,6 @@
1
1
  import type { AppNormalizedConfig } from '@modern-js/app-tools';
2
2
  export declare const makeProvider: () => string;
3
- export declare const makeRenderFunction: (code: string) => string;
3
+ export declare const makeRenderFunction: (code: string, isNested: boolean) => string;
4
4
  export declare function getRuntimeConfig(config: Partial<AppNormalizedConfig>): any;
5
5
  export declare function setRuntimeConfig(config: Partial<AppNormalizedConfig>, key: string, value: any): undefined;
6
6
  export declare const generateAsyncEntry: (code: string) => string;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "2.10.0",
14
+ "version": "2.12.0",
15
15
  "jsnext:source": "./src/cli/index.ts",
16
16
  "types": "./dist/types/cli/index.d.ts",
17
17
  "typesVersions": {
@@ -66,10 +66,10 @@
66
66
  "garfish": "^1.8.1",
67
67
  "hoist-non-react-statics": "^3.3.2",
68
68
  "react-loadable": "^5.5.0",
69
- "@modern-js/utils": "2.10.0"
69
+ "@modern-js/utils": "2.12.0"
70
70
  },
71
71
  "peerDependencies": {
72
- "@modern-js/runtime": "^2.10.0"
72
+ "@modern-js/runtime": "^2.12.0"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@testing-library/jest-dom": "^5.16.1",
@@ -86,13 +86,13 @@
86
86
  "react-router-dom": "^6.8.1",
87
87
  "typescript": "^4",
88
88
  "webpack-chain": "^6.5.1",
89
- "@modern-js/app-tools": "2.10.0",
90
- "@modern-js/core": "2.10.0",
91
- "@modern-js/plugin-router-v5": "2.10.0",
92
- "@modern-js/runtime": "2.10.0",
93
- "@modern-js/types": "2.10.0",
94
- "@scripts/build": "2.10.0",
95
- "@scripts/jest-config": "2.10.0"
89
+ "@modern-js/app-tools": "2.12.0",
90
+ "@modern-js/core": "2.12.0",
91
+ "@modern-js/plugin-router-v5": "2.12.0",
92
+ "@modern-js/runtime": "2.12.0",
93
+ "@modern-js/types": "2.12.0",
94
+ "@scripts/build": "2.12.0",
95
+ "@scripts/jest-config": "2.12.0"
96
96
  },
97
97
  "sideEffects": false,
98
98
  "modernConfig": {},