react-on-rails 16.2.0-test.6 → 16.2.0-test.7
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/lib/ClientRenderer.js
CHANGED
package/lib/reactApis.cjs
CHANGED
|
@@ -25,25 +25,38 @@ if (exports.supportsRootApi) {
|
|
|
25
25
|
reactDomClient = ReactDOM;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
// Cast ReactDOM to include legacy APIs for React 16/17 compatibility
|
|
29
|
+
// These methods exist at runtime but are removed from @types/react-dom@19
|
|
30
|
+
const legacyReactDOM = ReactDOM;
|
|
31
|
+
// Validate legacy APIs exist at runtime when needed (React < 18)
|
|
32
|
+
if (!exports.supportsRootApi) {
|
|
33
|
+
if (typeof legacyReactDOM.hydrate !== 'function') {
|
|
34
|
+
throw new Error('React legacy hydrate API not available. Expected React 16/17.');
|
|
35
|
+
}
|
|
36
|
+
if (typeof legacyReactDOM.render !== 'function') {
|
|
37
|
+
throw new Error('React legacy render API not available. Expected React 16/17.');
|
|
38
|
+
}
|
|
39
|
+
if (typeof legacyReactDOM.unmountComponentAtNode !== 'function') {
|
|
40
|
+
throw new Error('React legacy unmountComponentAtNode API not available. Expected React 16/17.');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion -- reactDomClient is always defined when supportsRootApi is true */
|
|
31
44
|
exports.reactHydrate = exports.supportsRootApi
|
|
32
45
|
? reactDomClient.hydrateRoot
|
|
33
|
-
: (domNode, reactElement) =>
|
|
46
|
+
: (domNode, reactElement) => legacyReactDOM.hydrate(reactElement, domNode);
|
|
34
47
|
function reactRender(domNode, reactElement) {
|
|
35
48
|
if (exports.supportsRootApi) {
|
|
36
49
|
const root = reactDomClient.createRoot(domNode);
|
|
37
50
|
root.render(reactElement);
|
|
38
51
|
return root;
|
|
39
52
|
}
|
|
40
|
-
|
|
41
|
-
return ReactDOM.render(reactElement, domNode);
|
|
53
|
+
return legacyReactDOM.render(reactElement, domNode);
|
|
42
54
|
}
|
|
43
55
|
exports.unmountComponentAtNode = exports.supportsRootApi
|
|
44
56
|
? // not used if we use root API
|
|
45
|
-
|
|
46
|
-
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
58
|
+
(_container) => false
|
|
59
|
+
: (container) => legacyReactDOM.unmountComponentAtNode(container);
|
|
47
60
|
const ensureReactUseAvailable = () => {
|
|
48
61
|
if (!('use' in React) || typeof React.use !== 'function') {
|
|
49
62
|
throw new Error('React.use is not defined. Please ensure you are using React 19 to use server components.');
|
|
@@ -49,6 +49,7 @@ function processPromise(result, renderingReturnsPromises) {
|
|
|
49
49
|
if (isValidElement(promiseResult)) {
|
|
50
50
|
return processReactElement(promiseResult);
|
|
51
51
|
}
|
|
52
|
+
// promiseResult is string | ServerRenderHashRenderedHtml (both are FinalHtmlResult)
|
|
52
53
|
return promiseResult;
|
|
53
54
|
});
|
|
54
55
|
}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -68,8 +68,8 @@ interface ServerRenderResult {
|
|
|
68
68
|
routeError?: Error;
|
|
69
69
|
error?: Error;
|
|
70
70
|
}
|
|
71
|
-
type CreateReactOutputSyncResult = ServerRenderResult | ReactElement
|
|
72
|
-
type CreateReactOutputAsyncResult = Promise<string | ServerRenderHashRenderedHtml | ReactElement
|
|
71
|
+
type CreateReactOutputSyncResult = ServerRenderResult | ReactElement;
|
|
72
|
+
type CreateReactOutputAsyncResult = Promise<string | ServerRenderHashRenderedHtml | ReactElement>;
|
|
73
73
|
type CreateReactOutputResult = CreateReactOutputSyncResult | CreateReactOutputAsyncResult;
|
|
74
74
|
type RenderFunctionSyncResult = ReactComponent | ServerRenderResult;
|
|
75
75
|
type RenderFunctionAsyncResult = Promise<string | ServerRenderHashRenderedHtml | ReactComponent>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-on-rails",
|
|
3
|
-
"version": "16.2.0-test.
|
|
3
|
+
"version": "16.2.0-test.7",
|
|
4
4
|
"description": "react-on-rails JavaScript for react_on_rails Ruby gem",
|
|
5
5
|
"main": "lib/ReactOnRails.full.js",
|
|
6
6
|
"type": "module",
|
|
@@ -48,13 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"react": ">= 16",
|
|
51
|
-
"react-dom": ">= 16"
|
|
52
|
-
"react-on-rails-rsc": "19.0.2"
|
|
53
|
-
},
|
|
54
|
-
"peerDependenciesMeta": {
|
|
55
|
-
"react-on-rails-rsc": {
|
|
56
|
-
"optional": true
|
|
57
|
-
}
|
|
51
|
+
"react-dom": ">= 16"
|
|
58
52
|
},
|
|
59
53
|
"files": [
|
|
60
54
|
"lib/**/*.js",
|