UNPKG

vite-plugin-react-server

Version:
45 lines (42 loc) 6.24 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { createElementWithReact } from './createElementWithReact.js'; import { React } from '../vendor/vendor.server.js'; import { createHeadlessReusePageComponent } from './headlessStreamReuseHandler.js'; function createReactElement(options, context) { const isHeadless = options.htmlPath === ""; let finalOptions = options; if (!isHeadless && context.reuseHeadlessStreamId) { const reusePageComponent = createHeadlessReusePageComponent({ reuseHeadlessStreamId: context.reuseHeadlessStreamId, headlessStreamElements: context.headlessStreamElements || /* @__PURE__ */ new Map(), headlessStreamErrors: context.headlessStreamErrors || /* @__PURE__ */ new Map(), route: context.route, verbose: context.verbose, logger: context.logger }); if (reusePageComponent !== void 0) { finalOptions = { ...options, PageComponent: reusePageComponent }; } } return createElementWithReact(React, { ...finalOptions, // A headless (page-level) stream must drop the Html wrapper so its .rsc has // no <html>/<head>/<body> — that's what the browser client mounts into // #root (a full document there nests <html> inside a <div> and wedges it). // createElementWithReact reads `HtmlComponent`, NOT `Html`, so the previous // `Html: Fragment` was silently ignored: the Fragment override never took // effect and the headless stream kept emitting the full document. Set the // key the helper actually reads. (The dev server already does this.) HtmlComponent: isHeadless ? React.Fragment : finalOptions.HtmlComponent, as: isHeadless ? React.Fragment : "div" }); } export { createReactElement }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUnNjUmVuZGVySGVscGVycy5zZXJ2ZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9oZWxwZXJzL2NyZWF0ZVJzY1JlbmRlckhlbHBlcnMuc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ3JlYXRlSGFuZGxlck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUnNjUmVuZGVyQ29udGV4dCB9IGZyb20gXCIuLi9zdHJlYW0vcmVuZGVyUnNjU3RyZWFtLnR5cGVzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50V2l0aFJlYWN0IH0gZnJvbSBcIi4vY3JlYXRlRWxlbWVudFdpdGhSZWFjdC5qc1wiO1xuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwiLi4vdmVuZG9yL3ZlbmRvci5zZXJ2ZXIuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUhlYWRsZXNzUmV1c2VQYWdlQ29tcG9uZW50IH0gZnJvbSBcIi4vaGVhZGxlc3NTdHJlYW1SZXVzZUhhbmRsZXIuanNcIjtcblxuLyoqXG4gKiBQdXJlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBSZWFjdCBlbGVtZW50XG4gKiBUaGlzIGlzIGVudmlyb25tZW50LWFnbm9zdGljIGFuZCBjYW4gYmUgdXNlZCBpbiBib3RoIGNsaWVudCBhbmQgc2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFjdEVsZW1lbnQoXG4gIG9wdGlvbnM6IENyZWF0ZUhhbmRsZXJPcHRpb25zLFxuICBjb250ZXh0OiBSc2NSZW5kZXJDb250ZXh0LFxuKSB7XG4gIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgaGVhZGxlc3Mgc3RyZWFtIGJ5IGNoZWNraW5nIGlmIGh0bWxQYXRoIGlzIGVtcHR5XG4gIC8vIFRoaXMgaXMgbW9yZSByZWxpYWJsZSB0aGFuIGNoZWNraW5nIHRoZSBJRFxuICBjb25zdCBpc0hlYWRsZXNzID0gb3B0aW9ucy5odG1sUGF0aCA9PT0gXCJcIjtcblxuICAvLyBIYW5kbGUgaGVhZGxlc3Mgc3RyZWFtIHJldXNlIGZvciBmdWxsIHN0cmVhbXNcbiAgbGV0IGZpbmFsT3B0aW9ucyA9IG9wdGlvbnM7XG4gIGlmICghaXNIZWFkbGVzcyAmJiBjb250ZXh0LnJldXNlSGVhZGxlc3NTdHJlYW1JZCkge1xuICAgIGNvbnN0IHJldXNlUGFnZUNvbXBvbmVudCA9IGNyZWF0ZUhlYWRsZXNzUmV1c2VQYWdlQ29tcG9uZW50KHtcbiAgICAgIHJldXNlSGVhZGxlc3NTdHJlYW1JZDogY29udGV4dC5yZXVzZUhlYWRsZXNzU3RyZWFtSWQsXG4gICAgICBoZWFkbGVzc1N0cmVhbUVsZW1lbnRzOiBjb250ZXh0LmhlYWRsZXNzU3RyZWFtRWxlbWVudHMgfHwgbmV3IE1hcDxzdHJpbmcsIGFueT4oKSxcbiAgICAgIGhlYWRsZXNzU3RyZWFtRXJyb3JzOiBjb250ZXh0LmhlYWRsZXNzU3RyZWFtRXJyb3JzIHx8IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCksXG4gICAgICByb3V0ZTogY29udGV4dC5yb3V0ZSxcbiAgICAgIHZlcmJvc2U6IGNvbnRleHQudmVyYm9zZSxcbiAgICAgIGxvZ2dlcjogY29udGV4dC5sb2dnZXIsXG4gICAgfSk7XG4gICAgXG4gICAgaWYgKHJldXNlUGFnZUNvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5hbE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIFBhZ2VDb21wb25lbnQ6IHJldXNlUGFnZUNvbXBvbmVudCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnRXaXRoUmVhY3QoUmVhY3QsIHtcbiAgICAuLi5maW5hbE9wdGlvbnMsXG4gICAgLy8gQSBoZWFkbGVzcyAocGFnZS1sZXZlbCkgc3RyZWFtIG11c3QgZHJvcCB0aGUgSHRtbCB3cmFwcGVyIHNvIGl0cyAucnNjIGhhc1xuICAgIC8vIG5vIDxodG1sPi88aGVhZD4vPGJvZHk+IOKAlCB0aGF0J3Mgd2hhdCB0aGUgYnJvd3NlciBjbGllbnQgbW91bnRzIGludG9cbiAgICAvLyAjcm9vdCAoYSBmdWxsIGRvY3VtZW50IHRoZXJlIG5lc3RzIDxodG1sPiBpbnNpZGUgYSA8ZGl2PiBhbmQgd2VkZ2VzIGl0KS5cbiAgICAvLyBjcmVhdGVFbGVtZW50V2l0aFJlYWN0IHJlYWRzIGBIdG1sQ29tcG9uZW50YCwgTk9UIGBIdG1sYCwgc28gdGhlIHByZXZpb3VzXG4gICAgLy8gYEh0bWw6IEZyYWdtZW50YCB3YXMgc2lsZW50bHkgaWdub3JlZDogdGhlIEZyYWdtZW50IG92ZXJyaWRlIG5ldmVyIHRvb2tcbiAgICAvLyBlZmZlY3QgYW5kIHRoZSBoZWFkbGVzcyBzdHJlYW0ga2VwdCBlbWl0dGluZyB0aGUgZnVsbCBkb2N1bWVudC4gU2V0IHRoZVxuICAgIC8vIGtleSB0aGUgaGVscGVyIGFjdHVhbGx5IHJlYWRzLiAoVGhlIGRldiBzZXJ2ZXIgYWxyZWFkeSBkb2VzIHRoaXMuKVxuICAgIEh0bWxDb21wb25lbnQ6IGlzSGVhZGxlc3MgPyBSZWFjdC5GcmFnbWVudCA6IGZpbmFsT3B0aW9ucy5IdG1sQ29tcG9uZW50LFxuICAgIGFzOiBpc0hlYWRsZXNzID8gUmVhY3QuRnJhZ21lbnQgOiBcImRpdlwiLFxuICB9KTtcbn1cblxuLyoqXG4gKiBQdXJlIGZ1bmN0aW9uIGZvciBzdG9yaW5nIGhlYWRsZXNzIHN0cmVhbSBkYXRhXG4gKi9cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVTyxTQUFTLGtCQUFBLENBQ2QsU0FDQSxPQUNBLEVBQUE7QUFHQSxFQUFNLE1BQUEsVUFBQSxHQUFhLFFBQVEsUUFBYSxLQUFBLEVBQUE7QUFHeEMsRUFBQSxJQUFJLFlBQWUsR0FBQSxPQUFBO0FBQ25CLEVBQUksSUFBQSxDQUFDLFVBQWMsSUFBQSxPQUFBLENBQVEscUJBQXVCLEVBQUE7QUFDaEQsSUFBQSxNQUFNLHFCQUFxQixnQ0FBaUMsQ0FBQTtBQUFBLE1BQzFELHVCQUF1QixPQUFRLENBQUEscUJBQUE7QUFBQSxNQUMvQixzQkFBd0IsRUFBQSxPQUFBLENBQVEsc0JBQTBCLG9CQUFBLElBQUksR0FBaUIsRUFBQTtBQUFBLE1BQy9FLG9CQUFzQixFQUFBLE9BQUEsQ0FBUSxvQkFBd0Isb0JBQUEsSUFBSSxHQUFpQixFQUFBO0FBQUEsTUFDM0UsT0FBTyxPQUFRLENBQUEsS0FBQTtBQUFBLE1BQ2YsU0FBUyxPQUFRLENBQUEsT0FBQTtBQUFBLE1BQ2pCLFFBQVEsT0FBUSxDQUFBO0FBQUEsS0FDakIsQ0FBQTtBQUVELElBQUEsSUFBSSx1QkFBdUIsTUFBVyxFQUFBO0FBQ3BDLE1BQWUsWUFBQSxHQUFBO0FBQUEsUUFDYixHQUFHLE9BQUE7QUFBQSxRQUNILGFBQWUsRUFBQTtBQUFBLE9BQ2pCO0FBQUE7QUFDRjtBQUdGLEVBQUEsT0FBTyx1QkFBdUIsS0FBTyxFQUFBO0FBQUEsSUFDbkMsR0FBRyxZQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFILGFBQWUsRUFBQSxVQUFBLEdBQWEsS0FBTSxDQUFBLFFBQUEsR0FBVyxZQUFhLENBQUEsYUFBQTtBQUFBLElBQzFELEVBQUEsRUFBSSxVQUFhLEdBQUEsS0FBQSxDQUFNLFFBQVcsR0FBQTtBQUFBLEdBQ25DLENBQUE7QUFDSDs7OzsifQ==