@umijs/server 4.0.27 → 4.0.29

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/dist/server.js CHANGED
@@ -33,7 +33,16 @@ var import_styles = require("./styles");
33
33
  async function getMarkup(opts) {
34
34
  let markup = import_server.default.renderToString(import_react.default.createElement("div", { id: opts.mountElementId || "root" }));
35
35
  function propsToString(opts2) {
36
- return Object.keys(opts2.props).filter((key) => !(opts2.filters || []).includes(key)).map((key) => `${key}=${JSON.stringify(opts2.props[key])}`).join(" ");
36
+ return Object.keys(opts2.props).filter((key) => {
37
+ const isValidBoolean = opts2.props[key] !== false;
38
+ return !(opts2.filters || []).includes(key) && isValidBoolean;
39
+ }).map((key) => {
40
+ const value = opts2.props[key];
41
+ if (value === true) {
42
+ return `${key}`;
43
+ }
44
+ return `${key}=${JSON.stringify(value)}`;
45
+ }).join(" ");
37
46
  }
38
47
  function getScriptContent(script) {
39
48
  const attrs = propsToString({
package/dist/ssr.d.ts CHANGED
@@ -13,6 +13,8 @@ interface CreateRequestHandlerOptions {
13
13
  getValidKeys: () => any;
14
14
  getRoutes: (PluginManager: any) => any;
15
15
  getClientRootComponent: (PluginManager: any) => any;
16
+ createHistory: (opts: any) => any;
16
17
  }
18
+ export declare function createMarkupGenerator(opts: CreateRequestHandlerOptions): (url: string) => Promise<unknown>;
17
19
  export default function createRequestHandler(opts: CreateRequestHandlerOptions): (req: any, res: any, next: any) => Promise<any>;
18
20
  export {};
package/dist/ssr.js CHANGED
@@ -19,33 +19,40 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  // src/ssr.ts
20
20
  var ssr_exports = {};
21
21
  __export(ssr_exports, {
22
+ createMarkupGenerator: () => createMarkupGenerator,
22
23
  default: () => createRequestHandler
23
24
  });
24
25
  module.exports = __toCommonJS(ssr_exports);
26
+ var import_stream = require("stream");
25
27
  var import_server = require("react-dom/server");
26
28
  var import_react_router_dom = require("react-router-dom");
27
- function createRequestHandler(opts) {
28
- return async function(req, res, next) {
29
+ function createJSXGenerator(opts) {
30
+ return async (url) => {
29
31
  const {
30
32
  routesWithServerLoader,
31
33
  PluginManager,
32
34
  getPlugins,
33
35
  getValidKeys,
34
- getRoutes
36
+ getRoutes,
37
+ createHistory
35
38
  } = opts;
36
- if (req.url.startsWith("/__serverLoader") && req.query.route) {
37
- const data = await executeLoader(req.query.route, routesWithServerLoader);
38
- res.status(200).json(data);
39
- return;
40
- }
39
+ createHistory({ type: "memory", initialEntries: [url], initialIndex: 1 });
41
40
  const pluginManager = PluginManager.create({
42
41
  plugins: getPlugins(),
43
42
  validKeys: getValidKeys()
44
43
  });
45
44
  const { routes, routeComponents } = await getRoutes(pluginManager);
46
- const matches = matchRoutesForSSR(req.url, routes);
45
+ await pluginManager.applyPlugins({
46
+ key: "patchRoutes",
47
+ type: "event",
48
+ args: {
49
+ routes,
50
+ routeComponents
51
+ }
52
+ });
53
+ const matches = matchRoutesForSSR(url, routes);
47
54
  if (matches.length === 0) {
48
- return next();
55
+ return;
49
56
  }
50
57
  const loaderData = {};
51
58
  await Promise.all(matches.filter((id) => routes[id].hasServerLoader).map((id) => new Promise(async (resolve) => {
@@ -57,13 +64,55 @@ function createRequestHandler(opts) {
57
64
  routes,
58
65
  routeComponents,
59
66
  pluginManager,
60
- location: req.url,
67
+ location: url,
61
68
  manifest,
62
69
  loaderData
63
70
  };
64
- const jsx = await opts.getClientRootComponent(context);
65
- const stream = (0, import_server.renderToPipeableStream)(jsx, {
66
- bootstrapScripts: [manifest.assets["umi.js"] || "/umi.js"],
71
+ return {
72
+ element: await opts.getClientRootComponent(context),
73
+ manifest
74
+ };
75
+ };
76
+ }
77
+ function createMarkupGenerator(opts) {
78
+ const jsxGeneratorDeferrer = createJSXGenerator(opts);
79
+ return async (url) => {
80
+ const jsx = await jsxGeneratorDeferrer(url);
81
+ if (jsx) {
82
+ return new Promise(async (resolve, reject) => {
83
+ let chunks = [];
84
+ const writable = new import_stream.Writable();
85
+ writable._write = (chunk, _encoding, next) => {
86
+ chunks.push(Buffer.from(chunk));
87
+ next();
88
+ };
89
+ writable.on("finish", () => {
90
+ resolve(Buffer.concat(chunks).toString("utf8"));
91
+ });
92
+ const stream = (0, import_server.renderToPipeableStream)(jsx.element, {
93
+ onShellReady() {
94
+ stream.pipe(writable);
95
+ },
96
+ onError: reject
97
+ });
98
+ });
99
+ }
100
+ return "";
101
+ };
102
+ }
103
+ function createRequestHandler(opts) {
104
+ const jsxGeneratorDeferrer = createJSXGenerator(opts);
105
+ return async function(req, res, next) {
106
+ if (req.url.startsWith("/__serverLoader") && req.query.route) {
107
+ const data = await executeLoader(req.query.route, opts.routesWithServerLoader);
108
+ res.status(200).json(data);
109
+ return;
110
+ }
111
+ const jsx = await jsxGeneratorDeferrer(req.url);
112
+ if (!jsx)
113
+ return next();
114
+ const stream = (0, import_server.renderToPipeableStream)(jsx.element, {
115
+ bootstrapScripts: [jsx.manifest.assets["umi.js"] || "/umi.js"],
67
116
  onShellReady() {
68
117
  res.setHeader("Content-type", "text/html");
69
118
  stream.pipe(res);
@@ -108,4 +157,6 @@ async function executeLoader(routeKey, routesWithServerLoader) {
108
157
  return await mod.serverLoader();
109
158
  }
110
159
  // Annotate the CommonJS export names for ESM import in node:
111
- 0 && (module.exports = {});
160
+ 0 && (module.exports = {
161
+ createMarkupGenerator
162
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umijs/server",
3
- "version": "4.0.27",
3
+ "version": "4.0.29",
4
4
  "description": "@umijs/server",
5
5
  "homepage": "https://github.com/umijs/umi/tree/master/packages/server#readme",
6
6
  "bugs": "https://github.com/umijs/umi/issues",
@@ -20,7 +20,7 @@
20
20
  "dev": "umi-scripts father dev"
21
21
  },
22
22
  "dependencies": {
23
- "@umijs/bundler-utils": "4.0.27",
23
+ "@umijs/bundler-utils": "4.0.29",
24
24
  "history": "5.3.0",
25
25
  "react": "18.1.0",
26
26
  "react-dom": "18.1.0",