Skip to content

Commit c219f1a

Browse files
committed
Migrate to ReScript 12 Rewatch
1 parent c3c7b5f commit c219f1a

35 files changed

Lines changed: 280 additions & 196 deletions

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
yarn install --immutable
3535
- name: Format ReScript
3636
run: |
37-
yarn workspaces foreach run rescript format -all
37+
yarn rescript format
3838
- name: Build all projects
3939
run: |
4040
yarn build

examples/client-rendering/package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,25 @@
66
"node": ">=16"
77
},
88
"type": "module",
9-
"packageManager": "yarn@3.2.1",
109
"scripts": {
1110
"build": "yarn router:generate && run-s 'build:*'",
1211
"build:relay": "rescript-relay-compiler",
13-
"build:rescript": "rescript build -with-deps",
12+
"build:rescript": "rescript",
1413
"build:vite": "vite build --outDir dist/client",
1514
"preview": "cross-env ENABLE_FILESERVER=true yarn start",
1615
"router:generate": "rescript-relay-router generate",
1716
"dev": "run-s build:relay build:rescript && run-p 'dev:*'",
1817
"dev:vite": "vite",
1918
"dev:relay": "yarn build:relay --watch",
20-
"dev:rescript": "yarn build:rescript -w",
19+
"dev:rescript": "rescript watch",
2120
"schema": "npx -y get-graphql-schema http://localhost:4000/graphql > schema.graphql",
2221
"test": "vitest run",
2322
"test:watch": "echo 'No tests implemented for express example' || vitest watch"
2423
},
2524
"devDependencies": {
2625
"@remix-run/web-fetch": "^4.1.3",
27-
"@rescript/react": "0.13.0",
26+
"@rescript/react": "0.15.0",
27+
"@rescript/runtime": "12.2.0",
2828
"@testing-library/dom": "^10.4.0",
2929
"@testing-library/react": "^16.1.0",
3030
"@vitejs/plugin-react-refresh": "1.3.6",
@@ -40,12 +40,12 @@
4040
"meros": "^1.2.0",
4141
"nodemon": "^2.0.16",
4242
"npm-run-all": "^4.1.5",
43-
"react": "^18.2.0",
44-
"react-dom": "^18.2.0",
45-
"react-relay": "17.0.0",
46-
"relay-runtime": "17.0.0",
47-
"rescript": "12.0.0-alpha.13",
48-
"rescript-relay": "3.0.0",
43+
"react": "19.2.6",
44+
"react-dom": "19.2.6",
45+
"react-relay": "20.1.1",
46+
"relay-runtime": "20.1.1",
47+
"rescript": "12.2.0",
48+
"rescript-relay": "4.4.1",
4949
"rollup": "^2",
5050
"rollup-plugin-visualizer": "5.5.0",
5151
"vite": "^4.4.9",

examples/client-rendering/rescript.json

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
{
2-
"name": "main",
3-
"uncurried": true,
2+
"name": "@rescript-relay-router-example/client-rendering",
43
"jsx": {
5-
"version": 4,
6-
"mode": "automatic"
4+
"version": 4
75
},
8-
"version": "0.1.0",
6+
"namespace": true,
97
"sources": [
108
{
119
"dir": "src",
@@ -25,12 +23,10 @@
2523
],
2624
"suffix": ".res.mjs",
2725
"ppx-flags": [["rescript-relay/ppx", "-uncurried"]],
28-
"bs-dependencies": [
26+
"dependencies": [
2927
"@rescript/react",
3028
"rescript-relay",
3129
"rescript-relay-router"
3230
],
33-
"bs-dev-dependencies": ["@rescript-relay-router/test-utils"],
34-
"bsc-flags": [],
35-
"pinned-dependencies": ["rescript-relay-router"]
31+
"dev-dependencies": ["@rescript-relay-router/test-utils"]
3632
}

examples/client-rendering/src/App.res

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if !RelaySSRUtils.ssr {
1212

1313
@react.component
1414
let make = (~environment, ~routerContext) => {
15-
<RescriptRelay.Context.Provider environment>
15+
<RescriptRelayReact.Context.Provider environment>
1616
<RelayRouter.Provider value={routerContext}>
1717
<React.Suspense fallback={React.string("Loading...")}>
1818
<RescriptReactErrorBoundary fallback={_ => {<div> {React.string("Error!")} </div>}}>
@@ -23,5 +23,5 @@ let make = (~environment, ~routerContext) => {
2323
</RescriptReactErrorBoundary>
2424
</React.Suspense>
2525
</RelayRouter.Provider>
26-
</RescriptRelay.Context.Provider>
26+
</RescriptRelayReact.Context.Provider>
2727
}

examples/client-rendering/src/EntryClient.res

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ let boot = () => {
1111
~preloadAsset=RelayRouter.AssetPreloader.makeClientAssetPreloader(RelayEnv.preparedAssetsMap),
1212
)
1313

14-
ReactDOMExperimental.renderConcurrentRootAtElementWithId(
15-
<App environment=RelayEnv.environment routerContext />,
16-
"root",
17-
)
14+
switch ReactDOM.querySelector("#root") {
15+
| Some(root) =>
16+
root
17+
->ReactDOM.Client.createRoot
18+
->ReactDOM.Client.Root.render(<App environment=RelayEnv.environment routerContext />)
19+
| None => Console.error("Could not find root element.")
20+
}
1821
}
1922

2023
boot()

examples/client-rendering/src/components/Layout.res

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ let make = (~queryRef, ~children) => {
1515

1616
<div>
1717
<h1> {React.string("My fine site")} </h1>
18-
<div style={ReactDOM.Style.make(~display="flex", ~flexDirection="row", ())}>
18+
<div style={{display: "flex", flexDirection: "row"}}>
1919
{links
2020
->Array.map(((label, link)) =>
2121
<RelayRouter.Link key=label to_=link> {React.string(label)} </RelayRouter.Link>

examples/client-rendering/src/components/SingleTodoDisplay.res

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ let make = (~todo) => {
4646
},
4747
},
4848
)
49-
}}>
49+
}}
50+
>
5051
{React.string(completed ? "Uncomplete" : "Complete")}
5152
</button>
5253
} else {
@@ -64,7 +65,8 @@ let make = (~todo) => {
6465
})
6566
},
6667
)
67-
}}>
68+
}}
69+
>
6870
{React.string("Show more")}
6971
</button>
7072
}}

examples/client-rendering/src/utils/NetworkUtils.res

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ let preloadFromResponse = (part: JSON.t, ~preloadAsset: RelayRouter__Types.prelo
1515
}
1616
}
1717

18-
external toOldExnUnsafe: JsExn.t => Exn.t = "%identity"
19-
2018
// The client and server fetch query are currently copied, but one could easily
2119
// set them up so that they use the same base, and just take whatever config
2220
// they need.
@@ -41,7 +39,7 @@ let makeFetchQuery = (~preloadAsset) =>
4139
sink.next(part)
4240
},
4341
~onError=err => {
44-
err->toOldExnUnsafe->sink.error
42+
err->sink.error
4543
},
4644
~onComplete=() => {
4745
sink.complete()

examples/client-rendering/test/UrlEncodingDecoding.test.res

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ describe("parsing", () => {
3131
let queryParams =
3232
Routes.Root.Todos.Route.parseRoute(
3333
"/todos?byValue=%2Fincorrect+value%2C+for+url",
34-
)->Option.getExn
34+
)->Option.getOrThrow
3535

3636
expect(queryParams.byValue->Option.getUnsafe)->Expect.toBe("/incorrect value, for url")
3737
})
@@ -40,7 +40,7 @@ describe("parsing", () => {
4040
let pathParams =
4141
Routes.Root.PathParamsOnly.Route.parseRoute(
4242
"/other/%2Fincorrect%20value%2C%20for%20url",
43-
)->Option.getExn
43+
)->Option.getOrThrow
4444

4545
expect(pathParams.pageSlug)->Expect.toBe("/incorrect value, for url")
4646
})
@@ -49,7 +49,7 @@ describe("parsing", () => {
4949
let queryParams =
5050
Routes.Root.Todos.Route.parseRoute(
5151
"/todos?statuses=completed&statuses=not-completed&byValue=beware%2C%20a%20comma!",
52-
)->Option.getExn
52+
)->Option.getOrThrow
5353
expect(queryParams.statuses->Option.getUnsafe)->Expect.toStrictEqual([
5454
TodoStatus.Completed,
5555
TodoStatus.NotCompleted,
@@ -61,7 +61,7 @@ describe("parsing", () => {
6161
let queryParams =
6262
Routes.Root.Todos.Route.parseRoute(
6363
"/todos?statuses=completed,not-completed&byValue=beware%2C%20a%20comma!",
64-
)->Option.getExn
64+
)->Option.getOrThrow
6565
expect(queryParams.statuses->Option.getUnsafe)->Expect.toStrictEqual([
6666
TodoStatus.Completed,
6767
TodoStatus.NotCompleted,
@@ -71,7 +71,7 @@ describe("parsing", () => {
7171

7272
test("parseRoute correctly decode path and query params", _t => {
7373
let (pathParams, queryParams) =
74-
Routes.Root.Todos.Single.Route.parseRoute("/todos/123?showMore=false")->Option.getExn
74+
Routes.Root.Todos.Single.Route.parseRoute("/todos/123?showMore=false")->Option.getOrThrow
7575
expect(pathParams.todoId)->Expect.toBe("123")
7676
expect(queryParams)->Expect.toStrictEqual({
7777
statuses: None,
@@ -82,7 +82,9 @@ describe("parsing", () => {
8282
})
8383
test("parseRoute correctly decode path and query params with wrong query params", _t => {
8484
let (pathParams, queryParams) =
85-
Routes.Root.Todos.Single.Route.parseRoute("/todos/123?byValue=hmm&else=false")->Option.getExn
85+
Routes.Root.Todos.Single.Route.parseRoute(
86+
"/todos/123?byValue=hmm&else=false",
87+
)->Option.getOrThrow
8688
expect(pathParams.todoId)->Expect.toBe("123")
8789
expect(queryParams)->Expect.toStrictEqual({
8890
statuses: None,

examples/client-rendering/vite.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export default defineConfig({
3636
test: {
3737
environment: "jsdom",
3838
include: ["**/*.{test,spec}{.res,}.?(c|m)[jt]s?(x)"],
39+
exclude: ["lib/bs/**"],
3940
server: {
4041
deps: {
4142
inline: true,

0 commit comments

Comments
 (0)