Skip to content

Commit be0bc83

Browse files
authored
Merge pull request #207 from reason-association/switch-to-rescript-promise
Switch to rescript-promise
2 parents fcc69db + eea1f3b commit be0bc83

File tree

8 files changed

+199
-175
lines changed

8 files changed

+199
-175
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ build specific pages (file `index_data/x.json` not found).
6767
- `/components`: ReScript / React components used by multiple pages
6868
- `/ffi`: (to be deprecated) Plain JS that some ReScript code binds to (use `raw` statements for that)
6969
- `/layouts`: All Next layouts used in our pages. Check out `src/common/App.res` for mapping layouts to routes
70+
- `plugins`: Contains plugins for all kinds of things: HighlightJS, MDX, webpack loader, etc.
7071
- `scripts`: Contains a mix of JS / ReScript based scripts that do all kind of code generation / code introspection logic
7172
- `tailwind.config.js`: Contains our Tailwind configuration for all the low level design tokens
7273

bsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"reason-react",
1111
"bs-fetch",
1212
"@glennsl/bs-json",
13-
"reason-promise"
13+
"@ryyppy/rescript-promise"
1414
],
1515
"ppx-flags": [],
1616
"sources": [

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"@mdx-js/loader": "^1.5.5",
1313
"@next/mdx": "^8.1.0",
1414
"@octokit/graphql-schema": "^7.4.0",
15+
"@ryyppy/rescript-promise": "^0.0.2",
1516
"@zeit/next-css": "^1.0.1",
1617
"bs-fetch": "^0.3.1",
1718
"codemirror": "^5.54.0",
@@ -28,7 +29,6 @@
2829
"prettier": "^1.18.2",
2930
"react": "^16.12.0",
3031
"react-dom": "^16.12.0",
31-
"reason-promise": "^1.0.2",
3232
"reason-react": "^0.9.1",
3333
"remark-parse": "^7.0.1",
3434
"remark-slug": "^5.1.2",

src/BlogArticle.js

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/BlogArticle.res

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ let getStaticProps: Next.GetStaticProps.t<props, Params.t> = ctx => {
259259

260260
let props = {fullslug: fullslug}
261261
let ret = {"props": props}
262-
Js.Promise.resolve(ret)
262+
Promise.resolve(ret)
263263
}
264264

265265
let getStaticPaths: Next.GetStaticPaths.t<Params.t> = () => {
@@ -271,5 +271,5 @@ let getStaticPaths: Next.GetStaticPaths.t<Params.t> = () => {
271271
},
272272
})
273273
let ret = {paths: paths, fallback: false}
274-
Promise.resolved(ret)
274+
Promise.resolve(ret)
275275
}

src/common/CompilerManagerHook.js

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

src/common/CompilerManagerHook.res

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ module LoadScript = {
2525
external removeScript: (~src: string) => unit = "removeScript"
2626

2727
let loadScriptPromise = (url: string): Promise.t<result<unit, string>> => {
28-
let (p, resolve) = Promise.pending()
29-
loadScript(
30-
~src=url,
31-
~onSuccess=() => resolve(Ok()),
32-
~onError=_err => resolve(Error(j`Could not load script: $url`)),
33-
)->ignore
34-
p
28+
Promise.make((resolve, _reject) => {
29+
loadScript(
30+
~src=url,
31+
~onSuccess=() => resolve(. Ok()),
32+
~onError=_err => resolve(. Error(j`Could not load script: $url`)),
33+
)->ignore
34+
})
3535
}
3636
}
3737

@@ -77,19 +77,29 @@ let attachCompilerAndLibraries = (~version: string, ~libraries: array<string>, (
7777
/* let compilerUrl = "/static/linked-bs-bundle.js"; */
7878

7979
LoadScript.loadScriptPromise(compilerUrl)
80-
->Promise.mapError(_msg => j`Could not load compiler from url $compilerUrl`)
81-
->Promise.map(r =>
80+
->Promise.map(r => {
8281
switch r {
83-
| Ok() => Belt.Array.map(libraries, lib => {
82+
| Error(_) => Error(j`Could not load compiler from url $compilerUrl`)
83+
| _ => r
84+
}
85+
})
86+
->Promise.then(r => {
87+
let promises = switch r {
88+
| Ok() =>
89+
Belt.Array.map(libraries, lib => {
8490
let cmijUrl = CdnMeta.getLibraryCmijUrl(version, lib)
85-
LoadScript.loadScriptPromise(cmijUrl)->Promise.mapError(_msg =>
86-
j`Could not load cmij from url $cmijUrl`
91+
LoadScript.loadScriptPromise(cmijUrl)->Promise.map(r =>
92+
switch r {
93+
| Error(_) => Error(j`Could not load cmij from url $cmijUrl`)
94+
| _ => r
95+
}
8796
)
8897
})
89-
| Error(msg) => [Promise.resolved(Error(msg))]
98+
| Error(msg) => [Promise.resolve(Error(msg))]
9099
}
91-
)
92-
->Promise.flatMap(Promise.allArray)
100+
101+
Promise.all(promises)
102+
})
93103
->Promise.map(all => {
94104
// all: array(Promise.result(unit, string))
95105
let errors = Belt.Array.reduce(all, [], (acc, r) =>
@@ -275,7 +285,8 @@ let useCompilerManager = (~initialLang: Lang.t=Res, ~onAction: option<action =>
275285
}
276286
}
277287

278-
let dispatchError = (err: error) => setState(prev => {
288+
let dispatchError = (err: error) =>
289+
setState(prev => {
279290
let msg = switch err {
280291
| SetupError(msg) => msg
281292
| CompilerLoadingError(msg) => msg
@@ -296,7 +307,8 @@ let useCompilerManager = (~initialLang: Lang.t=Res, ~onAction: option<action =>
296307
| versions =>
297308
let latest = versions[0]
298309

299-
attachCompilerAndLibraries(~version=latest, ~libraries, ())->Promise.get(result =>
310+
attachCompilerAndLibraries(~version=latest, ~libraries, ())
311+
->Promise.map(result =>
300312
switch result {
301313
| Ok() =>
302314
let instance = Compiler.make()
@@ -332,9 +344,10 @@ let useCompilerManager = (~initialLang: Lang.t=Res, ~onAction: option<action =>
332344
dispatchError(CompilerLoadingError(msg))
333345
}
334346
)
347+
->ignore
335348
}
336349
| SwitchingCompiler(ready, version, libraries) =>
337-
attachCompilerAndLibraries(~version, ~libraries, ())->Promise.get(result =>
350+
attachCompilerAndLibraries(~version, ~libraries, ())->Promise.map(result =>
338351
switch result {
339352
| Ok() =>
340353
// Make sure to remove the previous script from the DOM as well
@@ -371,7 +384,7 @@ let useCompilerManager = (~initialLang: Lang.t=Res, ~onAction: option<action =>
371384

372385
dispatchError(CompilerLoadingError(msg))
373386
}
374-
)
387+
)->ignore
375388
| Compiling(ready, (lang, code)) =>
376389
let apiVersion = ready.selected.apiVersion
377390
let instance = ready.selected.instance
@@ -384,9 +397,7 @@ let useCompilerManager = (~initialLang: Lang.t=Res, ~onAction: option<action =>
384397
| Lang.Res => instance->Compiler.resCompile(code)
385398
}
386399
| UnknownVersion(apiVersion) =>
387-
CompilationResult.UnexpectedError(
388-
j`Can't handle result of compiler API version "$apiVersion"`,
389-
)
400+
CompilationResult.UnexpectedError(j`Can't handle result of compiler API version "$apiVersion"`)
390401
}
391402

392403
setState(_ => Ready({...ready, result: FinalResult.Comp(compResult)}))

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,6 +1374,11 @@
13741374
resolved "https://registry.yarnpkg.com/@octokit/graphql-schema/-/graphql-schema-7.7.1.tgz#47b541a68ce5f3a6de3c02534b012696702ca658"
13751375
integrity sha512-Wj0WYFRiqTeD/F5WGtXShsEnnAdfDfwB/Gq2rxsntKg/LintKxECFYNMV5wLVOLLNaXBc1f2q8AXHGxQyEbPKg==
13761376

1377+
"@ryyppy/rescript-promise@^0.0.2":
1378+
version "0.0.2"
1379+
resolved "https://registry.yarnpkg.com/@ryyppy/rescript-promise/-/rescript-promise-0.0.2.tgz#9b9dccd724b40b7836e52158bc34deed8a75dddf"
1380+
integrity sha512-kKW7rWbtW63CM25JodnCIbBPP8sIiqxLgY2EGLFc9yj9nJTuPMLq08k8QY2v+ZMCiiOGD0AmY2lE7T3NRJqySA==
1381+
13771382
"@types/color-name@^1.1.1":
13781383
version "1.1.1"
13791384
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
@@ -6613,11 +6618,6 @@ reanalyze@^2.5.0:
66136618
resolved "https://registry.yarnpkg.com/reanalyze/-/reanalyze-2.10.0.tgz#bba9a73cc75c8c9ade6d1e993e3ccbff85dcd06b"
66146619
integrity sha512-FJYDBOV7QNEeCco+lJxSYwc62BMTbR/CAEons5dccDZY7H9nBuVPN/uL0O2fbMGgELGU4yOUnaJSrWxe8c5rBA==
66156620

6616-
reason-promise@^1.0.2:
6617-
version "1.1.1"
6618-
resolved "https://registry.yarnpkg.com/reason-promise/-/reason-promise-1.1.1.tgz#966133fed21e748a50ffb8839a1da04912bcf380"
6619-
integrity sha512-xMXDiyzTjn7t9pq9aQrkgu8CLB5DILU70oWQ+LI20YecshypUwsw37TKOvCxgoFR3vo30ucF0/iWe2BZ181/jw==
6620-
66216621
reason-react@^0.9.1:
66226622
version "0.9.1"
66236623
resolved "https://registry.yarnpkg.com/reason-react/-/reason-react-0.9.1.tgz#30a887158200b659aa03e2d75ff4cc54dc462bb0"

0 commit comments

Comments
 (0)