Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/famous-planes-fetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@rescript-relay-router-example/client-rendering": major
"@rescript-relay-router-example/express": major
"rescript-relay-router": major
---

Require Rescript v12 and remove usage of Core
3 changes: 1 addition & 2 deletions examples/client-rendering/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"react-dom": "^18.2.0",
"react-relay": "17.0.0",
"relay-runtime": "17.0.0",
"rescript": "11.1.3",
"rescript": "12.0.0-alpha.13",
"rescript-relay": "3.0.0",
"rollup": "^2",
"rollup-plugin-visualizer": "5.5.0",
Expand All @@ -54,7 +54,6 @@
},
"dependencies": {
"@rescript-relay-router/test-utils": "workspace:^",
"@rescript/core": "1.5.2",
"history": "^5.2.0",
"jsonc-parser": "^3.0.0",
"rescript-relay-router": "workspace:^",
Expand Down
5 changes: 2 additions & 3 deletions examples/client-rendering/rescript.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,9 @@
"bs-dependencies": [
"@rescript/react",
"rescript-relay",
"rescript-relay-router",
"@rescript/core"
"rescript-relay-router"
],
"bs-dev-dependencies": ["@rescript-relay-router/test-utils"],
"bsc-flags": ["-open RescriptCore"],
"bsc-flags": [],
"pinned-dependencies": ["rescript-relay-router"]
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 12 additions & 21 deletions examples/client-rendering/src/utils/NetworkUtils.res
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,20 @@
// (comprehensive) example application we're going to build eventually.
let preloadFromResponse = (part: JSON.t, ~preloadAsset: RelayRouter__Types.preloadAssetFn) => {
switch part {
| Object(obj) =>
switch obj->Dict.get("extensions") {
// todo: use pattern matching on dict once we move to rescript v12
| Some(Object(extensions)) =>
let images = switch extensions->Dict.get("preloadableImages") {
| Some(Array(images)) =>
images->Array.filterMap(item =>
switch item {
| String(url) => Some(url)
| _ => None
}
)
| _ => []
}
images->Array.forEach(imgUrl => {
| Object(dict{"extensions": JSON.Object(dict{"preloadableImages": JSON.Array(images)})}) =>
images->Array.forEach(item =>
switch item {
| String(imgUrl) =>
preloadAsset(~priority=RelayRouter.Types.Default, RelayRouter.Types.Image({url: imgUrl}))
})
| _ => ()
}
| _ => ()
}
)
| _ => ()
}
}

external toOldExnUnsafe: JsExn.t => Exn.t = "%identity"

// The client and server fetch query are currently copied, but one could easily
// set them up so that they use the same base, and just take whatever config
// they need.
Expand All @@ -37,7 +28,7 @@ let makeFetchQuery = (~preloadAsset) =>
"http://0.0.0.0:4000/graphql",
{
"method": "POST",
"headers": Dict.fromArray([("content-type", "application/json")]),
"headers": dict{"content-type": "application/json"},
"body": {"query": operation.text, "variables": variables}
->JSON.stringifyAny
->Option.getOr(""),
Expand All @@ -50,14 +41,14 @@ let makeFetchQuery = (~preloadAsset) =>
sink.next(part)
},
~onError=err => {
sink.error(err)
err->toOldExnUnsafe->sink.error
},
~onComplete=() => {
sink.complete()
},
)
})
->ignore
->Promise.ignore

None
})
2 changes: 1 addition & 1 deletion examples/express/Server.res
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ switch NodeJs.isProduction {
},
)
} catch {
| Exn.Error(err) => {
| JsExn(err) => {
vite->ssrFixStacktrace(err)
Console.log("[debug] got error")
Console.log(err)
Expand Down
5 changes: 2 additions & 3 deletions examples/express/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"scripts": {
"build": "yarn router:generate && run-s 'build:*'",
"build:relay": "rescript-relay-compiler",
"build:rescript": "rescript build -with-deps",
"build:rescript": "rescript",
"build:vite": "run-s 'build:vite:*'",
"build:vite:client": "vite build --outDir dist/client --ssrManifest --manifest",
"build:vite:server": "vite build --outDir dist/server --ssr src/EntryServer.res.mjs",
Expand Down Expand Up @@ -46,15 +46,14 @@
"react-dom": "^18.2.0",
"react-relay": "17.0.0",
"relay-runtime": "17.0.0",
"rescript": "11.1.3",
"rescript": "12.0.0-alpha.13",
"rescript-relay": "3.0.0",
"rollup": "^2",
"rollup-plugin-visualizer": "5.5.0",
"vite": "^4.4.9",
"vite-plugin-html": "3.2.0"
},
"dependencies": {
"@rescript/core": "1.5.2",
"history": "^5.2.0",
"jsonc-parser": "^3.0.0",
"node-fetch": "^3.2.0",
Expand Down
5 changes: 2 additions & 3 deletions examples/express/rescript.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@
"bs-dependencies": [
"@rescript/react",
"rescript-relay",
"rescript-relay-router",
"@rescript/core"
"rescript-relay-router"
],
"bsc-flags": ["-open RescriptCore"],
"bsc-flags": [],
"pinned-dependencies": ["rescript-relay-router"]
}
25 changes: 12 additions & 13 deletions examples/express/src/EntryServer.res
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,15 @@ let handleRequest = (~request, ~response, ~manifest: RelayRouter.Manifest.t) =>
stream :=
ReactDOMServer.renderToPipeableStream(
<App environment routerContext />,
ReactDOMServer.renderToPipeableStreamOptions(
// This renders as React is ready to start hydrating, and ensures that
// if the client side bundle has already been downloaded, it starts
// hydrating right away. If not, it lets the client bundle know that
// React is ready to hydrate, and the client bundle starts hydration
// as soon as it loads.
~bootstrapScriptContent="window.__READY_TO_BOOT ? window.__BOOT() : (window.__READY_TO_BOOT = true)",
~bootstrapModules,
~onShellReady=() => {
~options=// This renders as React is ready to start hydrating, and ensures that
// if the client side bundle has already been downloaded, it starts
// hydrating right away. If not, it lets the client bundle know that
// React is ready to hydrate, and the client bundle starts hydration
// as soon as it loads.
{
bootstrapScriptContent: "window.__READY_TO_BOOT ? window.__BOOT() : (window.__READY_TO_BOOT = true)",
bootstrapModules,
onShellReady: () => {
response->Express.Response.setHeader("Content-Type", "text/html")

response->Express.Response.setStatus(didError.contents ? 500 : 200)
Expand All @@ -116,17 +116,16 @@ let handleRequest = (~request, ~response, ~manifest: RelayRouter.Manifest.t) =>

resolve(ignore())
},
~onShellError=err => {
onShellError: err => {
cleanup()
reject(err)
},
~onError=err => {
onError: err => {
cleanup()
didError := true
Console.error(err)
},
(),
),
},
)->Some
})
}
17 changes: 7 additions & 10 deletions examples/express/src/bindings/ReactDOMServer.res
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,13 @@ external renderToString: React.element => string = "renderToString"
@module("react-dom/server")
external renderToStaticMarkup: React.element => string = "renderToStaticMarkup"

// Use deriving(abstrat) because we don't want functions to show up in the object
// if they're not used.
@deriving(abstract)
type renderToPipeableStreamOptions = {
@optional bootstrapScriptContent: string,
@optional bootstrapModules: array<string>,
@optional onShellReady: unit => unit,
@optional onShellError: Exn.t => unit,
@optional onAllReady: unit => unit,
@optional onError: Exn.t => unit,
bootstrapScriptContent?: string,
bootstrapModules?: array<string>,
onShellReady?: unit => unit,
onShellError?: JsError.t => unit,
onAllReady?: unit => unit,
onError?: JsError.t => unit,
}

type renderToPipeableStreamControls = {
Expand All @@ -24,5 +21,5 @@ type renderToPipeableStreamControls = {
@module("react-dom/server")
external renderToPipeableStream: (
React.element,
renderToPipeableStreamOptions,
~options: renderToPipeableStreamOptions=?,
) => renderToPipeableStreamControls = "renderToPipeableStream"
2 changes: 1 addition & 1 deletion examples/express/src/bindings/Vite.res
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ let make = (~middlewareMode) => make({server: {middlewareMode: middlewareMode}})

@send external transformIndexHtml: (t, string, string) => promise<string> = "transformIndexHtml"

@send external ssrFixStacktrace: (t, Exn.t) => unit = "ssrFixStackTrace"
@send external ssrFixStacktrace: (t, JsExn.t) => unit = "ssrFixStackTrace"
2 changes: 1 addition & 1 deletion examples/express/src/bindings/Vite.resi
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ let make: (~middlewareMode: middlewareMode) => Promise.t<t>

@send external transformIndexHtml: (t, string, string) => Promise.t<string> = "transformIndexHtml"

@send external ssrFixStacktrace: (t, Exn.t) => unit = "ssrFixStackTrace"
@send external ssrFixStacktrace: (t, JsExn.t) => unit = "ssrFixStackTrace"

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading