Skip to content

Commit ae83778

Browse files
authored
Merge pull request #22 from rescript-lang/samples
Samples
2 parents f6d2a7d + 53416a8 commit ae83778

32 files changed

+830
-18
lines changed

astro.config.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ export default defineConfig({
5151
{
5252
slug: "design-philosophy",
5353
},
54+
{
55+
label: "Examples",
56+
link: "examples",
57+
},
5458
{
5559
slug: "project-status",
5660
},

docs/pages/examples.astro

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
---
2+
import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro";
3+
import { Tabs, TabItem, Code } from "@astrojs/starlight/components";
4+
import { testFiles } from "../utils";
5+
6+
const frontmatter = {
7+
title: "Examples",
8+
};
9+
10+
const headings = testFiles.map(({ name }) => ({
11+
depth: 2,
12+
slug: name,
13+
text: name,
14+
}));
15+
---
16+
17+
<StarlightPage frontmatter={frontmatter} headings={headings}>
18+
<p>
19+
The best example of usage of these bindings are the <a href="./06-testing"
20+
>tests</a
21+
>. <br />
22+
These typically contain tweaks made to the generated bindings to make them more
23+
ergonomic.
24+
</p>
25+
{
26+
testFiles.map(({ source, output, name }) => {
27+
return (
28+
<div class="example" id={name}>
29+
<h2>{name}</h2>
30+
<Tabs>
31+
<TabItem label="ReScript">
32+
<Code code={source} lang="ReScript" frame="none" />
33+
</TabItem>
34+
<TabItem label="JS Output">
35+
<Code code={output} lang="js" frame="none" />
36+
</TabItem>
37+
</Tabs>
38+
</div>
39+
);
40+
})
41+
}
42+
</StarlightPage>
43+
<style>
44+
.example {
45+
margin-block: 4rem;
46+
47+
&:first-of-type {
48+
margin-top: 4rem;
49+
}
50+
51+
& h2 {
52+
margin-bottom: 1rem;
53+
font-size: var(--sl-text-2xl);
54+
}
55+
}
56+
</style>

docs/utils.js

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as path from "node:path";
22
import { exec } from "node:child_process";
33
import { promisify } from "node:util";
4-
import { readdirSync, existsSync } from "fs";
4+
import { readdirSync, existsSync, readFileSync } from "fs";
55
import { micromark } from "micromark";
66

77
const execAsync = promisify(exec);
@@ -140,4 +140,34 @@ export async function getDoc(absoluteFilePath) {
140140
values,
141141
valueHeadings,
142142
};
143-
}
143+
}
144+
145+
function trimRescriptOutput(output) {
146+
return output
147+
.replace("// Generated by ReScript, PLEASE EDIT WITH CARE", "")
148+
.replace("/* response Not a pure module */", "")
149+
.trim();
150+
}
151+
152+
const testDir = path.resolve(process.cwd(), "tests");
153+
export const testFiles =
154+
readdirSync(testDir, { recursive: true })
155+
.filter(f => f.endsWith(".res"))
156+
.map(tf => {
157+
const sourcePath = path.join(testDir, tf);
158+
const source = readFileSync(sourcePath, "utf-8");
159+
const outputPath = sourcePath.replace(".res", ".js");
160+
const output = readFileSync(outputPath, "utf-8");
161+
162+
const parts = tf.split(path.sep);
163+
const name = parts[parts.length - 1].replace("__tests.res", "");
164+
165+
return {
166+
sourcePath: sourcePath.replace(testDir,""),
167+
source,
168+
output: trimRescriptOutput(output),
169+
outputPath: outputPath.replace(testDir,""),
170+
name,
171+
};
172+
})
173+
.sort((a, b) => a.name.localeCompare(b.name));

src/DOMAPI.res

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7131,6 +7131,13 @@ type range = {
71317131
commonAncestorContainer: node,
71327132
}
71337133

7134+
/**
7135+
[See StaticRange on MDN](https://developer.mozilla.org/docs/Web/API/StaticRange)
7136+
*/
7137+
type staticRange = {
7138+
...abstractRange,
7139+
}
7140+
71347141
type nodeFilter = {}
71357142

71367143
/**

src/EventAPI/EventTarget.res

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ The event listener is appended to target's event listener list and is not append
3232
@send
3333
external addEventListener: (
3434
T.t,
35-
~type_: eventType,
36-
~callback: eventListener<'event>,
35+
eventType,
36+
eventListener<'event>,
3737
~options: addEventListenerOptions=?,
3838
) => unit = "addEventListener"
3939

@@ -56,8 +56,8 @@ The event listener is appended to target's event listener list and is not append
5656
@send
5757
external addEventListener_useCapture: (
5858
T.t,
59-
~type_: eventType,
60-
~callback: eventListener<'event>,
59+
eventType,
60+
eventListener<'event>,
6161
@as(json`true`) _,
6262
) => unit = "addEventListener"
6363

@@ -68,8 +68,8 @@ Removes the event listener in target's event listener list with the same type, c
6868
@send
6969
external removeEventListener: (
7070
T.t,
71-
~type_: eventType,
72-
~callback: eventListener<'event>,
71+
eventType,
72+
eventListener<'event>,
7373
~options: eventListenerOptions=?,
7474
) => unit = "removeEventListener"
7575

@@ -80,8 +80,8 @@ Removes the event listener in target's event listener list with the same type, c
8080
@send
8181
external removeEventListener_useCapture: (
8282
T.t,
83-
~type_: eventType,
84-
~callback: eventListener<'event>,
83+
eventType,
84+
eventListener<'event>,
8585
@as(json`true`) _,
8686
) => unit = "removeEventListener"
8787

src/Global.res

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -535,8 +535,8 @@ The event listener is appended to target's event listener list and is not append
535535
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
536536
*/
537537
external addEventListener: (
538-
~type_: eventType,
539-
~callback: eventListener<'event>,
538+
eventType,
539+
eventListener<'event>,
540540
~options: addEventListenerOptions=?,
541541
) => unit = "addEventListener"
542542

@@ -557,8 +557,8 @@ The event listener is appended to target's event listener list and is not append
557557
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
558558
*/
559559
external addEventListener_useCapture: (
560-
~type_: eventType,
561-
~callback: eventListener<'event>,
560+
eventType,
561+
eventListener<'event>,
562562
@as(json`true`) _,
563563
) => unit = "addEventListener"
564564

@@ -567,8 +567,8 @@ Removes the event listener in target's event listener list with the same type, c
567567
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
568568
*/
569569
external removeEventListener: (
570-
~type_: string,
571-
~callback: eventListener<'event>,
570+
string,
571+
eventListener<'event>,
572572
~options: eventListenerOptions=?,
573573
) => unit = "removeEventListener"
574574

@@ -577,8 +577,8 @@ Removes the event listener in target's event listener list with the same type, c
577577
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
578578
*/
579579
external removeEventListener_useCapture: (
580-
~type_: eventType,
581-
~callback: eventListener<'event>,
580+
eventType,
581+
eventListener<'event>,
582582
@as(json`true`) _,
583583
) => unit = "removeEventListener"
584584

src/UIEventsAPI.js

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

0 commit comments

Comments
 (0)