@umijs/server 4.0.83 → 4.0.84

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/ssr.d.ts CHANGED
@@ -21,4 +21,6 @@ interface CreateRequestHandlerOptions {
21
21
  }
22
22
  export declare function createMarkupGenerator(opts: CreateRequestHandlerOptions): (url: string) => Promise<unknown>;
23
23
  export default function createRequestHandler(opts: CreateRequestHandlerOptions): (req: any, res: any, next: any) => Promise<any>;
24
+ export declare function createUmiHandler(opts: CreateRequestHandlerOptions): (req: Request) => Promise<unknown>;
25
+ export declare function createUmiServerLoader(opts: CreateRequestHandlerOptions): (req: Request) => Promise<any>;
24
26
  export {};
package/dist/ssr.js CHANGED
@@ -30,6 +30,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  var ssr_exports = {};
31
31
  __export(ssr_exports, {
32
32
  createMarkupGenerator: () => createMarkupGenerator,
33
+ createUmiHandler: () => createUmiHandler,
34
+ createUmiServerLoader: () => createUmiServerLoader,
33
35
  default: () => createRequestHandler
34
36
  });
35
37
  module.exports = __toCommonJS(ssr_exports);
@@ -199,6 +201,45 @@ function createRequestHandler(opts) {
199
201
  });
200
202
  };
201
203
  }
204
+ function createUmiHandler(opts) {
205
+ const jsxGeneratorDeferrer = createJSXGenerator(opts);
206
+ return function(req) {
207
+ return new Promise(async (resolve, reject) => {
208
+ const jsx = await jsxGeneratorDeferrer(new URL(req.url).pathname);
209
+ if (!jsx) {
210
+ reject(new Error("no page resource"));
211
+ return;
212
+ }
213
+ let buf = Buffer.alloc(0);
214
+ const writable = new import_stream.Writable();
215
+ writable._write = (chunk, _encoding, next) => {
216
+ buf = Buffer.concat([buf, chunk]);
217
+ next();
218
+ };
219
+ writable.on("finish", async () => {
220
+ resolve(import_stream.Readable.from(buf));
221
+ });
222
+ const stream = await ReactDomServer.renderToPipeableStream(jsx.element, {
223
+ bootstrapScripts: [jsx.manifest.assets["umi.js"] || "/umi.js"],
224
+ onShellReady() {
225
+ stream.pipe(writable);
226
+ },
227
+ onError(err) {
228
+ reject(err);
229
+ }
230
+ });
231
+ });
232
+ };
233
+ }
234
+ function createUmiServerLoader(opts) {
235
+ return async function(req) {
236
+ const query = Object.fromEntries(new URL(req.url).searchParams);
237
+ return await executeLoader(
238
+ query.route,
239
+ opts.routesWithServerLoader
240
+ );
241
+ };
242
+ }
202
243
  function matchRoutesForSSR(reqUrl, routesById) {
203
244
  var _a;
204
245
  return ((_a = (0, import_react_router_dom.matchRoutes)(createClientRoutes({ routesById }), reqUrl)) == null ? void 0 : _a.map(
@@ -236,5 +277,7 @@ async function executeLoader(routeKey, routesWithServerLoader) {
236
277
  }
237
278
  // Annotate the CommonJS export names for ESM import in node:
238
279
  0 && (module.exports = {
239
- createMarkupGenerator
280
+ createMarkupGenerator,
281
+ createUmiHandler,
282
+ createUmiServerLoader
240
283
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umijs/server",
3
- "version": "4.0.83",
3
+ "version": "4.0.84",
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",
@@ -19,7 +19,7 @@
19
19
  "react": "18.1.0",
20
20
  "react-dom": "18.1.0",
21
21
  "react-router-dom": "6.3.0",
22
- "@umijs/bundler-utils": "4.0.83"
22
+ "@umijs/bundler-utils": "4.0.84"
23
23
  },
24
24
  "publishConfig": {
25
25
  "access": "public"