Skip to content

Commit 07634d1

Browse files
authored
React 19.2 APIs (#149)
* react 19.2 <Activity /> * react 19.2 useEffectEvent * react 19.2 partial pre-rendering
1 parent ed88461 commit 07634d1

File tree

4 files changed

+87
-2
lines changed

4 files changed

+87
-2
lines changed

src/React.bs.js

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/React.res

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,3 +459,25 @@ captureOwnerStack reads the current Owner Stack in development and returns it as
459459
@module("react")
460460
@return(null_to_opt)
461461
external captureOwnerStack: unit => option<string> = "captureOwnerStack"
462+
463+
/**
464+
<Activity> lets you hide and restore the UI and internal state of its children.
465+
[Read more on the React Documentation](https://react.dev/reference/react/Activity)
466+
*/
467+
module Activity = {
468+
type mode =
469+
| @as("visible") Visible
470+
| @as("hidden") Hidden
471+
472+
type props = {mode?: mode, children: element, name?: string}
473+
474+
@module("react")
475+
external make: component<props> = "Activity"
476+
}
477+
478+
/**
479+
useEffectEvent is a React Hook that lets you extract non-reactive logic from your Effects into a reusable function called an Effect Event.
480+
[Read more on the React Documentation](https://react.dev/reference/react/useEffectEvent)
481+
*/
482+
@module("react")
483+
external useEffectEvent: (unit => unit) => unit = "useEffectEvent"

src/ReactDOMServer.res

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,31 @@ external renderToString: React.element => string = "renderToString"
33

44
@module("react-dom/server")
55
external renderToStaticMarkup: React.element => string = "renderToStaticMarkup"
6+
7+
type resumeOptions<'error> = {
8+
nonce?: string,
9+
signal?: ReactDOMStatic.abortSignal,
10+
onError?: 'error => unit,
11+
}
12+
13+
/**
14+
resume streams a pre-rendered React tree to a Readable Web Stream.
15+
[Read more on the React Documentation](https://react.dev/reference/react-dom/server/resume)
16+
*/
17+
@module("react-dom/server")
18+
external resume: (
19+
React.element,
20+
ReactDOMStatic.postponedState,
21+
~options: resumeOptions<'error>=?,
22+
) => promise<ReactDOMStatic.readableStream> = "resume"
23+
24+
/**
25+
resumeToPipeableStream streams a pre-rendered React tree to a pipeable Node.js Stream.
26+
[Read more on the React Documentation](https://react.dev/reference/react-dom/server/resumeToPipeableStream)
27+
*/
28+
@module("react-dom/server")
29+
external resumeToPipeableStream: (
30+
React.element,
31+
ReactDOMStatic.postponedState,
32+
~options: resumeOptions<'error>=?,
33+
) => promise<ReactDOMStatic.nodeStream> = "resumeToPipeableStream"

src/ReactDOMStatic.res

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ type nodeStream // NodeJs.Stream.stream
44

55
type readableStream // WebAPI.FileAPI.readableStream
66

7+
type postponedState
8+
79
type prerenderOptions<'error> = {
810
bootstrapScriptContent?: string,
911
bootstrapScripts?: array<string>,
@@ -15,16 +17,46 @@ type prerenderOptions<'error> = {
1517
signal?: abortSignal,
1618
}
1719

18-
type staticResult = {prelude: readableStream}
20+
type staticResult = {prelude: readableStream, postponed: postponedState}
1921

22+
/**
23+
prerender renders a React tree to a static HTML string using a Web Stream.
24+
[Read more on the React Documentation](https://react.dev/reference/react-dom/static/prerender)
25+
*/
2026
@module("react-dom/static")
2127
external prerender: (React.element, ~options: prerenderOptions<'error>=?) => promise<staticResult> =
2228
"prerender"
2329

24-
type staticResultNode = {prelude: nodeStream}
30+
/**
31+
resumeAndPrerender continues a prerendered React tree to a static HTML string using a Web Stream.
32+
[Read more on the React Documentation](https://react.dev/reference/react-dom/static/resumeAndPrerender)
33+
*/
34+
@module("react-dom/static")
35+
external resumeAndPrerender: (
36+
React.element,
37+
postponedState,
38+
~options: prerenderOptions<'error>=?,
39+
) => promise<staticResult> = "resumeAndPrerender"
40+
41+
type staticResultNode = {prelude: nodeStream, postponed: postponedState}
2542

43+
/**
44+
prerenderToNodeStream renders a React tree to a static HTML string using a Node.js Stream.
45+
[Read more on the React Documentation](https://react.dev/reference/react-dom/static/prerenderToNodeStream)
46+
*/
2647
@module("react-dom/static")
2748
external prerenderToNodeStream: (
2849
React.element,
2950
~options: prerenderOptions<'error>=?,
3051
) => promise<staticResultNode> = "prerenderToNodeStream"
52+
53+
/**
54+
resumeAndPrerenderToNodeStream continues a prerendered React tree to a static HTML string using a a Node.js Stream.
55+
[Read more on the React Documentation](https://react.dev/reference/react-dom/static/resumeAndPrerenderToNodeStream)
56+
*/
57+
@module("react-dom/static")
58+
external resumeAndPrerenderToNodeStream: (
59+
React.element,
60+
postponedState,
61+
~options: prerenderOptions<'error>=?,
62+
) => promise<staticResultNode> = "resumeAndPrerenderToNodeStream"

0 commit comments

Comments
 (0)