diff --git a/node_package/src/ReactOnRails.node.ts b/node_package/src/ReactOnRails.node.ts new file mode 100644 index 000000000..fea963ca0 --- /dev/null +++ b/node_package/src/ReactOnRails.node.ts @@ -0,0 +1,7 @@ +import ReactOnRails from './ReactOnRails'; +import streamServerRenderedReactComponent from './streamServerRenderedReactComponent'; + +ReactOnRails.streamServerRenderedReactComponent = streamServerRenderedReactComponent; + +export * from './ReactOnRails'; +export { default } from './ReactOnRails'; diff --git a/node_package/src/ReactOnRails.ts b/node_package/src/ReactOnRails.ts index cc8006ea7..91e5ffcac 100644 --- a/node_package/src/ReactOnRails.ts +++ b/node_package/src/ReactOnRails.ts @@ -247,6 +247,14 @@ ctx.ReactOnRails = { return serverRenderReactComponent(options); }, + /** + * Used by server rendering by Rails + * @param options + */ + streamServerRenderedReactComponent() { + throw new Error('streamServerRenderedReactComponent is only supported when using a bundle built for Node.js environments'); + }, + /** * Used by Rails to catch errors in rendering * @param options diff --git a/node_package/src/types/index.ts b/node_package/src/types/index.ts index d859062f2..597355d9d 100644 --- a/node_package/src/types/index.ts +++ b/node_package/src/types/index.ts @@ -170,6 +170,7 @@ export interface ReactOnRails { ): RenderReturnType; getComponent(name: string): RegisteredComponent; serverRenderReactComponent(options: RenderParams): null | string | Promise; + streamServerRenderedReactComponent(options: RenderParams): Readable; handleError(options: ErrorOptions): string | undefined; buildConsoleReplay(): string; registeredComponents(): Map; diff --git a/package.json b/package.json index 9ac3409e6..85f007775 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,12 @@ "name": "react-on-rails", "version": "14.1.0", "description": "react-on-rails JavaScript for react_on_rails Ruby gem", - "main": "node_package/lib/ReactOnRails.js", + "exports": { + ".": { + "node": "./node_package/lib/ReactOnRails.node.js", + "default": "./node_package/lib/ReactOnRails.js" + } + }, "directories": { "doc": "docs" }, diff --git a/spec/dummy/package.json b/spec/dummy/package.json index 44a437380..9d285d12c 100644 --- a/spec/dummy/package.json +++ b/spec/dummy/package.json @@ -40,7 +40,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-helmet": "^6.1.0", - "react-on-rails": "file:.yalc/react-on-rails", + "react-on-rails": "link:.yalc/react-on-rails", "react-proptypes": "^1.0.0", "react-redux": "^8.0.2", "react-router-dom": "^5.2.0", @@ -72,12 +72,13 @@ "fs": false }, "scripts": { - "yalc-postinstall": "yalc link react-on-rails", + "preinstall": "yarn run link-source && yalc add --link react-on-rails", + "link-source": "cd ../.. && yarn run build && yalc publish", "lint": "cd ../.. && yarn run lint", "format": "cd ../.. && yarn start format", "test": "yarn run build:test && yarn run lint && rspec", "build:test": "rm -rf public/webpack/test && yarn build:rescript && RAILS_ENV=test NODE_ENV=test bin/shakapacker", - "build:dev": "rm -rf public/webpack/development && yarn build:rescript && RAILS_ENV=development NODE_ENV=development bin/shakapacker --watch", + "build:dev": "rm -rf public/webpack/development && yarn build:rescript && RAILS_ENV=development NODE_ENV=development bin/shakapacker", "build:dev:server": "rm -rf public/webpack/development && yarn build:rescript && RAILS_ENV=development NODE_ENV=development bin/shakapacker --watch", "build:dev:watch": "rescript build -w && RAILS_ENV=development NODE_ENV=development bin/shakapacker --watch", "build:clean": "yarn build:rescript && rm -rf public/webpack || true", diff --git a/spec/dummy/yarn.lock b/spec/dummy/yarn.lock index 1a634f47d..2fbe352e3 100644 --- a/spec/dummy/yarn.lock +++ b/spec/dummy/yarn.lock @@ -6451,10 +6451,9 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -"react-on-rails@file:.yalc/react-on-rails": - version "14.0.0" - dependencies: - "@babel/runtime-corejs3" "^7.12.5" +"react-on-rails@link:.yalc/react-on-rails": + version "0.0.0" + uid "" react-proptypes@^1.0.0: version "1.0.0"