Skip to content

Commit f74a62d

Browse files
committed
ReactDOM: Resource Preloading APIse
1 parent d742924 commit f74a62d

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

src/ReactDOM.res

+111
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,117 @@ module Ref = {
4343
external callbackDomRef: callbackDomRef => domRef = "%identity"
4444
}
4545

46+
// Resource Preloading APIs
47+
48+
/** The CORS policy to use. */
49+
type crossOrigin = [
50+
| #anonymous
51+
| #"use-credentials"
52+
]
53+
54+
/** The Referrer header to send when fetching. */
55+
type referrerPolicy = [
56+
| #"referrer-when-downgrade"
57+
| #"no-referrer"
58+
| #origin
59+
| #"origin-when-cross-origin"
60+
| #"unsafe-url"
61+
]
62+
63+
/** Suggests a relative priority for fetching the resource. */
64+
type fetchPriority = [#auto | #high | #low]
65+
66+
/** `prefetchDNS` lets you eagerly look up the IP of a server that you expect to load resources from. */
67+
@module("react-dom")
68+
external prefetchDNS: string => unit = "prefetchDNS"
69+
70+
/** `preconnect` lets you eagerly connect to a server that you expect to load resources from. */
71+
@module("react-dom")
72+
external preconnect: string => unit = "preconnect"
73+
74+
type preloadOptions = {
75+
/** The type of resource. */
76+
@as("as")
77+
as_: [
78+
| #audio
79+
| #document
80+
| #embed
81+
| #fetch
82+
| #font
83+
| #image
84+
| #object
85+
| #script
86+
| #style
87+
| #track
88+
| #video
89+
| #worker
90+
],
91+
/** The CORS policy to use. It is required when as is set to "fetch". */
92+
crossOrigin?: crossOrigin,
93+
/** The Referrer header to send when fetching. */
94+
referrerPolicy?: referrerPolicy,
95+
/** A cryptographic hash of the resource, to verify its authenticity. */
96+
integrity?: string,
97+
/** The MIME type of the resource. */
98+
@as("type")
99+
type_?: string,
100+
/** A cryptographic nonce to allow the resource when using a strict Content Security Policy. */
101+
nonce?: string,
102+
/** Suggests a relative priority for fetching the resource. */
103+
fetchPriority?: fetchPriority,
104+
/** For use only with as: "image". Specifies the source set of the image. */
105+
imageSrcSet?: string,
106+
/** For use only with as: "image". Specifies the sizes of the image. */
107+
imageSizes?: string,
108+
}
109+
110+
/** `preload` lets you eagerly fetch a resource such as a stylesheet, font, or external script that you expect to use. */
111+
@module("react-dom")
112+
external preload: (string, preloadOptions) => unit = "preload"
113+
114+
type preloadModuleOptions = {
115+
/** The type of resource. */
116+
@as("as")
117+
as_: [#script],
118+
/** The CORS policy to use. It is required when as is set to "fetch". */
119+
crossOrigin?: crossOrigin,
120+
/** A cryptographic hash of the resource, to verify its authenticity. */
121+
integrity?: string,
122+
/** A cryptographic nonce to allow the resource when using a strict Content Security Policy. */
123+
nonce?: string,
124+
}
125+
126+
/** `preloadModule` lets you eagerly fetch an ESM module that you expect to use. */
127+
@module("react-dom")
128+
external preloadModule: (string, preloadModuleOptions) => unit = "preloadModule"
129+
130+
type preinitOptions = {
131+
/** The type of resource. */
132+
@as("as")
133+
as_: [#script | #style],
134+
/** Required with stylesheets. Says where to insert the stylesheet relative to others. Stylesheets with higher precedence can override those with lower precedence. */
135+
precedence?: [#reset | #low | #medium | #high],
136+
/** The CORS policy to use. It is required when as is set to "fetch". */
137+
crossOrigin?: crossOrigin,
138+
/** The Referrer header to send when fetching. */
139+
referrerPolicy?: referrerPolicy,
140+
/** A cryptographic hash of the resource, to verify its authenticity. */
141+
integrity?: string,
142+
nonce?: string,
143+
/** Suggests a relative priority for fetching the resource. */
144+
fetchPriority?: fetchPriority,
145+
}
146+
147+
/** `preinit` lets you eagerly fetch and evaluate a stylesheet or external script. */
148+
@module("react-dom")
149+
external preinit: (string, preinitOptions) => unit = "preinit"
150+
151+
/** To preinit an ESM module, call the `preinitModule` function from react-dom. */
152+
@module("react-dom")
153+
external preinitModule: (string, preloadModuleOptions) => unit = "preinitModule"
154+
155+
// Runtime
156+
46157
type domProps = JsxDOM.domProps
47158

48159
@variadic @module("react")

0 commit comments

Comments
 (0)