├── .gitignore
├── Index.re
├── LICENSE
├── README.md
├── dune
├── dune-project
├── index.html
├── melange-for-react-devs.opam
├── package-lock.json
├── package.json
└── vite.config.mjs
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | _build/
4 | _opam/
5 | dist/
6 |
--------------------------------------------------------------------------------
/Index.re:
--------------------------------------------------------------------------------
1 | module App = {
2 | [@react.component]
3 | let make = () =>
{React.string("Welcome to my app!")}
;
4 | };
5 |
6 | let node = ReactDOM.querySelector("#root");
7 | switch (node) {
8 | | None =>
9 | Js.Console.error("Failed to start React: couldn't find the #root element")
10 | | Some(root) =>
11 | let root = ReactDOM.Client.createRoot(root);
12 | ReactDOM.Client.render(root, );
13 | };
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Melange
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Melange for React Developers
2 |
3 | A simple project template using [Melange](https://github.com/melange-re/melange)
4 | with [opam](https://opam.ocaml.org/).
5 |
6 | ## Quick Start
7 |
8 | ```shell
9 | npm run init
10 |
11 | # In separate terminals:
12 | npm run watch
13 | npm run serve
14 | ```
15 |
16 | ### React
17 |
18 | React support is provided by
19 | [`reason-react`](https://github.com/reasonml/reason-react/). The entry
20 | point of the sample React app is [`Index.re`](Index.re).
21 |
22 | ## Commands
23 |
24 | All the build commands are defined in the `scripts` field of `package.json`.
25 | This is completely optional, and other tools like `make` could be used.
26 |
27 | You can see all available commands by running `npm run`. There are explanations
28 | of each command in the `scriptsComments` field of the `package.json` file. Here
29 | are a few of the most useful ones:
30 |
31 | - `npm run init`: set up opam local switch and download OCaml, Melange and
32 | JavaScript dependencies
33 | - `npm run install:npm-opam`: install JavaScript, OCaml, and Melange
34 | dependencies
35 | - `npm run watch`: watch the filesystem and have Melange rebuild on every
36 | change
37 | - `npm run serve`: serve the application with a local HTTP server
38 |
--------------------------------------------------------------------------------
/dune:
--------------------------------------------------------------------------------
1 | ; `dirs` is a stanza to tell dune which subfolders from the current folder
2 | ; (where the `dune` file is) it should process. Here it is saying to include
3 | ; all directories that don't start with . or _, but exclude node_modules.
4 |
5 | (dirs :standard \ node_modules)
6 |
7 | ; `melange.emit` is a Dune stanza that will produce build rules to generate
8 | ; JavaScript files from sources using the Melange compiler
9 | ; https://dune.readthedocs.io/en/stable/melange.html#melange-emit
10 |
11 | (melange.emit
12 | ; The `target` field is used by Dune to put all JavaScript artifacts in a
13 | ; specific folder inside `_build/default`
14 | (target output)
15 | ; Here's the list of dependencies of the stanza. In this case (being
16 | ; `melange.emit`), Dune will look into those dependencies and generate rules
17 | ; with JavaScript targets for the modules in those libraries as well.
18 | ; Caveat: the libraries need to be specified with `(modes melange)`.
19 | (libraries reason-react)
20 | ; The `preprocess` field lists preprocessors which transform code before it is
21 | ; compiled. melange.ppx allows to use Melange attributes [@mel. ...]
22 | ; (https://melange.re/v2.0.0/communicate-with-javascript/#attributes)
23 | ; reason-react-ppx allows to use JSX for ReasonReact components by using the
24 | ; [@JSX] attributes from Reason: https://reasonml.github.io/docs/en/jsx
25 | (preprocess
26 | (pps melange.ppx reason-react-ppx))
27 | ; module_systems lets you specify commonjs (the default) or es6
28 | (module_systems es6))
29 |
--------------------------------------------------------------------------------
/dune-project:
--------------------------------------------------------------------------------
1 | (lang dune 3.8)
2 |
3 | ; Use version 0.1 of the melange plugin for dune
4 |
5 | (using melange 0.1)
6 |
7 | ; Set the name which is used by error messages
8 |
9 | (name melange-for-react-devs)
10 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Melange for React Developers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/melange-for-react-devs.opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | synopsis: "Melange for React Developers"
3 | description: "Template for Melange For React Developers Guide"
4 | maintainer: ["Feihong Hsu "]
5 | authors: ["Feihong Hsu "]
6 | license: "MIT"
7 | homepage: "https://github.com/melange-re/melange-for-react-devs-template"
8 | bug-reports: "https://github.com/melange-re/melange-for-react-devs-template"
9 | depends: [
10 | "ocaml" {>= "5.1.1"}
11 | "reason" {>= "3.10.0"}
12 | "dune" {>= "3.8"}
13 | "melange" {>= "4.0.0-51"}
14 | "reason-react" {>= "0.14.0"}
15 | "reason-react-ppx" {>= "0.14.0"}
16 | "opam-check-npm-deps" {with-test} # todo: use with-dev-setup once opam 2.2 is out
17 | "ocaml-lsp-server" {with-test} # todo: use with-dev-setup once opam 2.2 is out
18 | "dot-merlin-reader" {with-test} # todo: use with-dev-setup once opam 2.2 is out
19 | "odoc" {with-doc}
20 | ]
21 | dev-repo: "git+https://github.com/melange-re/melange-for-react-devs-template.git"
22 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "melange-for-react-devs-template",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "dependencies": {
8 | "react": "^18.2.0",
9 | "react-dom": "^18.2.0"
10 | },
11 | "devDependencies": {
12 | "@rollup/plugin-node-resolve": "^15.2.3",
13 | "vite": "^5.0.11"
14 | }
15 | },
16 | "node_modules/@esbuild/aix-ppc64": {
17 | "version": "0.19.11",
18 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz",
19 | "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==",
20 | "cpu": [
21 | "ppc64"
22 | ],
23 | "dev": true,
24 | "optional": true,
25 | "os": [
26 | "aix"
27 | ],
28 | "engines": {
29 | "node": ">=12"
30 | }
31 | },
32 | "node_modules/@esbuild/android-arm": {
33 | "version": "0.19.11",
34 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz",
35 | "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==",
36 | "cpu": [
37 | "arm"
38 | ],
39 | "dev": true,
40 | "optional": true,
41 | "os": [
42 | "android"
43 | ],
44 | "engines": {
45 | "node": ">=12"
46 | }
47 | },
48 | "node_modules/@esbuild/android-arm64": {
49 | "version": "0.19.11",
50 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz",
51 | "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==",
52 | "cpu": [
53 | "arm64"
54 | ],
55 | "dev": true,
56 | "optional": true,
57 | "os": [
58 | "android"
59 | ],
60 | "engines": {
61 | "node": ">=12"
62 | }
63 | },
64 | "node_modules/@esbuild/android-x64": {
65 | "version": "0.19.11",
66 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz",
67 | "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==",
68 | "cpu": [
69 | "x64"
70 | ],
71 | "dev": true,
72 | "optional": true,
73 | "os": [
74 | "android"
75 | ],
76 | "engines": {
77 | "node": ">=12"
78 | }
79 | },
80 | "node_modules/@esbuild/darwin-arm64": {
81 | "version": "0.19.11",
82 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz",
83 | "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==",
84 | "cpu": [
85 | "arm64"
86 | ],
87 | "dev": true,
88 | "optional": true,
89 | "os": [
90 | "darwin"
91 | ],
92 | "engines": {
93 | "node": ">=12"
94 | }
95 | },
96 | "node_modules/@esbuild/darwin-x64": {
97 | "version": "0.19.11",
98 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz",
99 | "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==",
100 | "cpu": [
101 | "x64"
102 | ],
103 | "dev": true,
104 | "optional": true,
105 | "os": [
106 | "darwin"
107 | ],
108 | "engines": {
109 | "node": ">=12"
110 | }
111 | },
112 | "node_modules/@esbuild/freebsd-arm64": {
113 | "version": "0.19.11",
114 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz",
115 | "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==",
116 | "cpu": [
117 | "arm64"
118 | ],
119 | "dev": true,
120 | "optional": true,
121 | "os": [
122 | "freebsd"
123 | ],
124 | "engines": {
125 | "node": ">=12"
126 | }
127 | },
128 | "node_modules/@esbuild/freebsd-x64": {
129 | "version": "0.19.11",
130 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz",
131 | "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==",
132 | "cpu": [
133 | "x64"
134 | ],
135 | "dev": true,
136 | "optional": true,
137 | "os": [
138 | "freebsd"
139 | ],
140 | "engines": {
141 | "node": ">=12"
142 | }
143 | },
144 | "node_modules/@esbuild/linux-arm": {
145 | "version": "0.19.11",
146 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz",
147 | "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==",
148 | "cpu": [
149 | "arm"
150 | ],
151 | "dev": true,
152 | "optional": true,
153 | "os": [
154 | "linux"
155 | ],
156 | "engines": {
157 | "node": ">=12"
158 | }
159 | },
160 | "node_modules/@esbuild/linux-arm64": {
161 | "version": "0.19.11",
162 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz",
163 | "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==",
164 | "cpu": [
165 | "arm64"
166 | ],
167 | "dev": true,
168 | "optional": true,
169 | "os": [
170 | "linux"
171 | ],
172 | "engines": {
173 | "node": ">=12"
174 | }
175 | },
176 | "node_modules/@esbuild/linux-ia32": {
177 | "version": "0.19.11",
178 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz",
179 | "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==",
180 | "cpu": [
181 | "ia32"
182 | ],
183 | "dev": true,
184 | "optional": true,
185 | "os": [
186 | "linux"
187 | ],
188 | "engines": {
189 | "node": ">=12"
190 | }
191 | },
192 | "node_modules/@esbuild/linux-loong64": {
193 | "version": "0.19.11",
194 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz",
195 | "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==",
196 | "cpu": [
197 | "loong64"
198 | ],
199 | "dev": true,
200 | "optional": true,
201 | "os": [
202 | "linux"
203 | ],
204 | "engines": {
205 | "node": ">=12"
206 | }
207 | },
208 | "node_modules/@esbuild/linux-mips64el": {
209 | "version": "0.19.11",
210 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz",
211 | "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==",
212 | "cpu": [
213 | "mips64el"
214 | ],
215 | "dev": true,
216 | "optional": true,
217 | "os": [
218 | "linux"
219 | ],
220 | "engines": {
221 | "node": ">=12"
222 | }
223 | },
224 | "node_modules/@esbuild/linux-ppc64": {
225 | "version": "0.19.11",
226 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz",
227 | "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==",
228 | "cpu": [
229 | "ppc64"
230 | ],
231 | "dev": true,
232 | "optional": true,
233 | "os": [
234 | "linux"
235 | ],
236 | "engines": {
237 | "node": ">=12"
238 | }
239 | },
240 | "node_modules/@esbuild/linux-riscv64": {
241 | "version": "0.19.11",
242 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz",
243 | "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==",
244 | "cpu": [
245 | "riscv64"
246 | ],
247 | "dev": true,
248 | "optional": true,
249 | "os": [
250 | "linux"
251 | ],
252 | "engines": {
253 | "node": ">=12"
254 | }
255 | },
256 | "node_modules/@esbuild/linux-s390x": {
257 | "version": "0.19.11",
258 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz",
259 | "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==",
260 | "cpu": [
261 | "s390x"
262 | ],
263 | "dev": true,
264 | "optional": true,
265 | "os": [
266 | "linux"
267 | ],
268 | "engines": {
269 | "node": ">=12"
270 | }
271 | },
272 | "node_modules/@esbuild/linux-x64": {
273 | "version": "0.19.11",
274 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz",
275 | "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==",
276 | "cpu": [
277 | "x64"
278 | ],
279 | "dev": true,
280 | "optional": true,
281 | "os": [
282 | "linux"
283 | ],
284 | "engines": {
285 | "node": ">=12"
286 | }
287 | },
288 | "node_modules/@esbuild/netbsd-x64": {
289 | "version": "0.19.11",
290 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz",
291 | "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==",
292 | "cpu": [
293 | "x64"
294 | ],
295 | "dev": true,
296 | "optional": true,
297 | "os": [
298 | "netbsd"
299 | ],
300 | "engines": {
301 | "node": ">=12"
302 | }
303 | },
304 | "node_modules/@esbuild/openbsd-x64": {
305 | "version": "0.19.11",
306 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz",
307 | "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==",
308 | "cpu": [
309 | "x64"
310 | ],
311 | "dev": true,
312 | "optional": true,
313 | "os": [
314 | "openbsd"
315 | ],
316 | "engines": {
317 | "node": ">=12"
318 | }
319 | },
320 | "node_modules/@esbuild/sunos-x64": {
321 | "version": "0.19.11",
322 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz",
323 | "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==",
324 | "cpu": [
325 | "x64"
326 | ],
327 | "dev": true,
328 | "optional": true,
329 | "os": [
330 | "sunos"
331 | ],
332 | "engines": {
333 | "node": ">=12"
334 | }
335 | },
336 | "node_modules/@esbuild/win32-arm64": {
337 | "version": "0.19.11",
338 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz",
339 | "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==",
340 | "cpu": [
341 | "arm64"
342 | ],
343 | "dev": true,
344 | "optional": true,
345 | "os": [
346 | "win32"
347 | ],
348 | "engines": {
349 | "node": ">=12"
350 | }
351 | },
352 | "node_modules/@esbuild/win32-ia32": {
353 | "version": "0.19.11",
354 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz",
355 | "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==",
356 | "cpu": [
357 | "ia32"
358 | ],
359 | "dev": true,
360 | "optional": true,
361 | "os": [
362 | "win32"
363 | ],
364 | "engines": {
365 | "node": ">=12"
366 | }
367 | },
368 | "node_modules/@esbuild/win32-x64": {
369 | "version": "0.19.11",
370 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz",
371 | "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==",
372 | "cpu": [
373 | "x64"
374 | ],
375 | "dev": true,
376 | "optional": true,
377 | "os": [
378 | "win32"
379 | ],
380 | "engines": {
381 | "node": ">=12"
382 | }
383 | },
384 | "node_modules/@jridgewell/gen-mapping": {
385 | "version": "0.3.3",
386 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
387 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
388 | "dev": true,
389 | "optional": true,
390 | "peer": true,
391 | "dependencies": {
392 | "@jridgewell/set-array": "^1.0.1",
393 | "@jridgewell/sourcemap-codec": "^1.4.10",
394 | "@jridgewell/trace-mapping": "^0.3.9"
395 | },
396 | "engines": {
397 | "node": ">=6.0.0"
398 | }
399 | },
400 | "node_modules/@jridgewell/resolve-uri": {
401 | "version": "3.1.1",
402 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
403 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
404 | "dev": true,
405 | "optional": true,
406 | "peer": true,
407 | "engines": {
408 | "node": ">=6.0.0"
409 | }
410 | },
411 | "node_modules/@jridgewell/set-array": {
412 | "version": "1.1.2",
413 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
414 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
415 | "dev": true,
416 | "optional": true,
417 | "peer": true,
418 | "engines": {
419 | "node": ">=6.0.0"
420 | }
421 | },
422 | "node_modules/@jridgewell/source-map": {
423 | "version": "0.3.5",
424 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
425 | "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
426 | "dev": true,
427 | "optional": true,
428 | "peer": true,
429 | "dependencies": {
430 | "@jridgewell/gen-mapping": "^0.3.0",
431 | "@jridgewell/trace-mapping": "^0.3.9"
432 | }
433 | },
434 | "node_modules/@jridgewell/sourcemap-codec": {
435 | "version": "1.4.15",
436 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
437 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
438 | "dev": true,
439 | "optional": true,
440 | "peer": true
441 | },
442 | "node_modules/@jridgewell/trace-mapping": {
443 | "version": "0.3.20",
444 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
445 | "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
446 | "dev": true,
447 | "optional": true,
448 | "peer": true,
449 | "dependencies": {
450 | "@jridgewell/resolve-uri": "^3.1.0",
451 | "@jridgewell/sourcemap-codec": "^1.4.14"
452 | }
453 | },
454 | "node_modules/@rollup/plugin-node-resolve": {
455 | "version": "15.2.3",
456 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz",
457 | "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==",
458 | "dev": true,
459 | "dependencies": {
460 | "@rollup/pluginutils": "^5.0.1",
461 | "@types/resolve": "1.20.2",
462 | "deepmerge": "^4.2.2",
463 | "is-builtin-module": "^3.2.1",
464 | "is-module": "^1.0.0",
465 | "resolve": "^1.22.1"
466 | },
467 | "engines": {
468 | "node": ">=14.0.0"
469 | },
470 | "peerDependencies": {
471 | "rollup": "^2.78.0||^3.0.0||^4.0.0"
472 | },
473 | "peerDependenciesMeta": {
474 | "rollup": {
475 | "optional": true
476 | }
477 | }
478 | },
479 | "node_modules/@rollup/pluginutils": {
480 | "version": "5.1.0",
481 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
482 | "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
483 | "dev": true,
484 | "dependencies": {
485 | "@types/estree": "^1.0.0",
486 | "estree-walker": "^2.0.2",
487 | "picomatch": "^2.3.1"
488 | },
489 | "engines": {
490 | "node": ">=14.0.0"
491 | },
492 | "peerDependencies": {
493 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
494 | },
495 | "peerDependenciesMeta": {
496 | "rollup": {
497 | "optional": true
498 | }
499 | }
500 | },
501 | "node_modules/@rollup/rollup-android-arm-eabi": {
502 | "version": "4.9.4",
503 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz",
504 | "integrity": "sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==",
505 | "cpu": [
506 | "arm"
507 | ],
508 | "dev": true,
509 | "optional": true,
510 | "os": [
511 | "android"
512 | ]
513 | },
514 | "node_modules/@rollup/rollup-android-arm64": {
515 | "version": "4.9.4",
516 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz",
517 | "integrity": "sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==",
518 | "cpu": [
519 | "arm64"
520 | ],
521 | "dev": true,
522 | "optional": true,
523 | "os": [
524 | "android"
525 | ]
526 | },
527 | "node_modules/@rollup/rollup-darwin-arm64": {
528 | "version": "4.9.4",
529 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz",
530 | "integrity": "sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==",
531 | "cpu": [
532 | "arm64"
533 | ],
534 | "dev": true,
535 | "optional": true,
536 | "os": [
537 | "darwin"
538 | ]
539 | },
540 | "node_modules/@rollup/rollup-darwin-x64": {
541 | "version": "4.9.4",
542 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz",
543 | "integrity": "sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==",
544 | "cpu": [
545 | "x64"
546 | ],
547 | "dev": true,
548 | "optional": true,
549 | "os": [
550 | "darwin"
551 | ]
552 | },
553 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
554 | "version": "4.9.4",
555 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz",
556 | "integrity": "sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==",
557 | "cpu": [
558 | "arm"
559 | ],
560 | "dev": true,
561 | "optional": true,
562 | "os": [
563 | "linux"
564 | ]
565 | },
566 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
567 | "version": "4.9.4",
568 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz",
569 | "integrity": "sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==",
570 | "cpu": [
571 | "arm64"
572 | ],
573 | "dev": true,
574 | "optional": true,
575 | "os": [
576 | "linux"
577 | ]
578 | },
579 | "node_modules/@rollup/rollup-linux-arm64-musl": {
580 | "version": "4.9.4",
581 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz",
582 | "integrity": "sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==",
583 | "cpu": [
584 | "arm64"
585 | ],
586 | "dev": true,
587 | "optional": true,
588 | "os": [
589 | "linux"
590 | ]
591 | },
592 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
593 | "version": "4.9.4",
594 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz",
595 | "integrity": "sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==",
596 | "cpu": [
597 | "riscv64"
598 | ],
599 | "dev": true,
600 | "optional": true,
601 | "os": [
602 | "linux"
603 | ]
604 | },
605 | "node_modules/@rollup/rollup-linux-x64-gnu": {
606 | "version": "4.9.4",
607 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz",
608 | "integrity": "sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==",
609 | "cpu": [
610 | "x64"
611 | ],
612 | "dev": true,
613 | "optional": true,
614 | "os": [
615 | "linux"
616 | ]
617 | },
618 | "node_modules/@rollup/rollup-linux-x64-musl": {
619 | "version": "4.9.4",
620 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz",
621 | "integrity": "sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==",
622 | "cpu": [
623 | "x64"
624 | ],
625 | "dev": true,
626 | "optional": true,
627 | "os": [
628 | "linux"
629 | ]
630 | },
631 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
632 | "version": "4.9.4",
633 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz",
634 | "integrity": "sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==",
635 | "cpu": [
636 | "arm64"
637 | ],
638 | "dev": true,
639 | "optional": true,
640 | "os": [
641 | "win32"
642 | ]
643 | },
644 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
645 | "version": "4.9.4",
646 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz",
647 | "integrity": "sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==",
648 | "cpu": [
649 | "ia32"
650 | ],
651 | "dev": true,
652 | "optional": true,
653 | "os": [
654 | "win32"
655 | ]
656 | },
657 | "node_modules/@rollup/rollup-win32-x64-msvc": {
658 | "version": "4.9.4",
659 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz",
660 | "integrity": "sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==",
661 | "cpu": [
662 | "x64"
663 | ],
664 | "dev": true,
665 | "optional": true,
666 | "os": [
667 | "win32"
668 | ]
669 | },
670 | "node_modules/@types/estree": {
671 | "version": "1.0.5",
672 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
673 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
674 | "dev": true
675 | },
676 | "node_modules/@types/node": {
677 | "version": "20.9.3",
678 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.3.tgz",
679 | "integrity": "sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==",
680 | "dev": true,
681 | "optional": true,
682 | "peer": true,
683 | "dependencies": {
684 | "undici-types": "~5.26.4"
685 | }
686 | },
687 | "node_modules/@types/resolve": {
688 | "version": "1.20.2",
689 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
690 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
691 | "dev": true
692 | },
693 | "node_modules/acorn": {
694 | "version": "8.11.2",
695 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
696 | "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
697 | "dev": true,
698 | "optional": true,
699 | "peer": true,
700 | "bin": {
701 | "acorn": "bin/acorn"
702 | },
703 | "engines": {
704 | "node": ">=0.4.0"
705 | }
706 | },
707 | "node_modules/buffer-from": {
708 | "version": "1.1.2",
709 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
710 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
711 | "dev": true,
712 | "optional": true,
713 | "peer": true
714 | },
715 | "node_modules/builtin-modules": {
716 | "version": "3.3.0",
717 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
718 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
719 | "dev": true,
720 | "engines": {
721 | "node": ">=6"
722 | },
723 | "funding": {
724 | "url": "https://github.com/sponsors/sindresorhus"
725 | }
726 | },
727 | "node_modules/commander": {
728 | "version": "2.20.3",
729 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
730 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
731 | "dev": true,
732 | "optional": true,
733 | "peer": true
734 | },
735 | "node_modules/deepmerge": {
736 | "version": "4.3.1",
737 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
738 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
739 | "dev": true,
740 | "engines": {
741 | "node": ">=0.10.0"
742 | }
743 | },
744 | "node_modules/esbuild": {
745 | "version": "0.19.11",
746 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz",
747 | "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==",
748 | "dev": true,
749 | "hasInstallScript": true,
750 | "bin": {
751 | "esbuild": "bin/esbuild"
752 | },
753 | "engines": {
754 | "node": ">=12"
755 | },
756 | "optionalDependencies": {
757 | "@esbuild/aix-ppc64": "0.19.11",
758 | "@esbuild/android-arm": "0.19.11",
759 | "@esbuild/android-arm64": "0.19.11",
760 | "@esbuild/android-x64": "0.19.11",
761 | "@esbuild/darwin-arm64": "0.19.11",
762 | "@esbuild/darwin-x64": "0.19.11",
763 | "@esbuild/freebsd-arm64": "0.19.11",
764 | "@esbuild/freebsd-x64": "0.19.11",
765 | "@esbuild/linux-arm": "0.19.11",
766 | "@esbuild/linux-arm64": "0.19.11",
767 | "@esbuild/linux-ia32": "0.19.11",
768 | "@esbuild/linux-loong64": "0.19.11",
769 | "@esbuild/linux-mips64el": "0.19.11",
770 | "@esbuild/linux-ppc64": "0.19.11",
771 | "@esbuild/linux-riscv64": "0.19.11",
772 | "@esbuild/linux-s390x": "0.19.11",
773 | "@esbuild/linux-x64": "0.19.11",
774 | "@esbuild/netbsd-x64": "0.19.11",
775 | "@esbuild/openbsd-x64": "0.19.11",
776 | "@esbuild/sunos-x64": "0.19.11",
777 | "@esbuild/win32-arm64": "0.19.11",
778 | "@esbuild/win32-ia32": "0.19.11",
779 | "@esbuild/win32-x64": "0.19.11"
780 | }
781 | },
782 | "node_modules/estree-walker": {
783 | "version": "2.0.2",
784 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
785 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
786 | "dev": true
787 | },
788 | "node_modules/fsevents": {
789 | "version": "2.3.3",
790 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
791 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
792 | "dev": true,
793 | "hasInstallScript": true,
794 | "optional": true,
795 | "os": [
796 | "darwin"
797 | ],
798 | "engines": {
799 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
800 | }
801 | },
802 | "node_modules/function-bind": {
803 | "version": "1.1.2",
804 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
805 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
806 | "dev": true,
807 | "funding": {
808 | "url": "https://github.com/sponsors/ljharb"
809 | }
810 | },
811 | "node_modules/hasown": {
812 | "version": "2.0.0",
813 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
814 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
815 | "dev": true,
816 | "dependencies": {
817 | "function-bind": "^1.1.2"
818 | },
819 | "engines": {
820 | "node": ">= 0.4"
821 | }
822 | },
823 | "node_modules/is-builtin-module": {
824 | "version": "3.2.1",
825 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
826 | "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
827 | "dev": true,
828 | "dependencies": {
829 | "builtin-modules": "^3.3.0"
830 | },
831 | "engines": {
832 | "node": ">=6"
833 | },
834 | "funding": {
835 | "url": "https://github.com/sponsors/sindresorhus"
836 | }
837 | },
838 | "node_modules/is-core-module": {
839 | "version": "2.13.1",
840 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
841 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
842 | "dev": true,
843 | "dependencies": {
844 | "hasown": "^2.0.0"
845 | },
846 | "funding": {
847 | "url": "https://github.com/sponsors/ljharb"
848 | }
849 | },
850 | "node_modules/is-module": {
851 | "version": "1.0.0",
852 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
853 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
854 | "dev": true
855 | },
856 | "node_modules/js-tokens": {
857 | "version": "4.0.0",
858 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
859 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
860 | },
861 | "node_modules/loose-envify": {
862 | "version": "1.4.0",
863 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
864 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
865 | "dependencies": {
866 | "js-tokens": "^3.0.0 || ^4.0.0"
867 | },
868 | "bin": {
869 | "loose-envify": "cli.js"
870 | }
871 | },
872 | "node_modules/nanoid": {
873 | "version": "3.3.7",
874 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
875 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
876 | "dev": true,
877 | "funding": [
878 | {
879 | "type": "github",
880 | "url": "https://github.com/sponsors/ai"
881 | }
882 | ],
883 | "bin": {
884 | "nanoid": "bin/nanoid.cjs"
885 | },
886 | "engines": {
887 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
888 | }
889 | },
890 | "node_modules/path-parse": {
891 | "version": "1.0.7",
892 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
893 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
894 | "dev": true
895 | },
896 | "node_modules/picocolors": {
897 | "version": "1.0.0",
898 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
899 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
900 | "dev": true
901 | },
902 | "node_modules/picomatch": {
903 | "version": "2.3.1",
904 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
905 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
906 | "dev": true,
907 | "engines": {
908 | "node": ">=8.6"
909 | },
910 | "funding": {
911 | "url": "https://github.com/sponsors/jonschlinkert"
912 | }
913 | },
914 | "node_modules/postcss": {
915 | "version": "8.4.33",
916 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
917 | "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
918 | "dev": true,
919 | "funding": [
920 | {
921 | "type": "opencollective",
922 | "url": "https://opencollective.com/postcss/"
923 | },
924 | {
925 | "type": "tidelift",
926 | "url": "https://tidelift.com/funding/github/npm/postcss"
927 | },
928 | {
929 | "type": "github",
930 | "url": "https://github.com/sponsors/ai"
931 | }
932 | ],
933 | "dependencies": {
934 | "nanoid": "^3.3.7",
935 | "picocolors": "^1.0.0",
936 | "source-map-js": "^1.0.2"
937 | },
938 | "engines": {
939 | "node": "^10 || ^12 || >=14"
940 | }
941 | },
942 | "node_modules/react": {
943 | "version": "18.2.0",
944 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
945 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
946 | "dependencies": {
947 | "loose-envify": "^1.1.0"
948 | },
949 | "engines": {
950 | "node": ">=0.10.0"
951 | }
952 | },
953 | "node_modules/react-dom": {
954 | "version": "18.2.0",
955 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
956 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
957 | "dependencies": {
958 | "loose-envify": "^1.1.0",
959 | "scheduler": "^0.23.0"
960 | },
961 | "peerDependencies": {
962 | "react": "^18.2.0"
963 | }
964 | },
965 | "node_modules/resolve": {
966 | "version": "1.22.8",
967 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
968 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
969 | "dev": true,
970 | "dependencies": {
971 | "is-core-module": "^2.13.0",
972 | "path-parse": "^1.0.7",
973 | "supports-preserve-symlinks-flag": "^1.0.0"
974 | },
975 | "bin": {
976 | "resolve": "bin/resolve"
977 | },
978 | "funding": {
979 | "url": "https://github.com/sponsors/ljharb"
980 | }
981 | },
982 | "node_modules/rollup": {
983 | "version": "4.9.4",
984 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.4.tgz",
985 | "integrity": "sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==",
986 | "dev": true,
987 | "dependencies": {
988 | "@types/estree": "1.0.5"
989 | },
990 | "bin": {
991 | "rollup": "dist/bin/rollup"
992 | },
993 | "engines": {
994 | "node": ">=18.0.0",
995 | "npm": ">=8.0.0"
996 | },
997 | "optionalDependencies": {
998 | "@rollup/rollup-android-arm-eabi": "4.9.4",
999 | "@rollup/rollup-android-arm64": "4.9.4",
1000 | "@rollup/rollup-darwin-arm64": "4.9.4",
1001 | "@rollup/rollup-darwin-x64": "4.9.4",
1002 | "@rollup/rollup-linux-arm-gnueabihf": "4.9.4",
1003 | "@rollup/rollup-linux-arm64-gnu": "4.9.4",
1004 | "@rollup/rollup-linux-arm64-musl": "4.9.4",
1005 | "@rollup/rollup-linux-riscv64-gnu": "4.9.4",
1006 | "@rollup/rollup-linux-x64-gnu": "4.9.4",
1007 | "@rollup/rollup-linux-x64-musl": "4.9.4",
1008 | "@rollup/rollup-win32-arm64-msvc": "4.9.4",
1009 | "@rollup/rollup-win32-ia32-msvc": "4.9.4",
1010 | "@rollup/rollup-win32-x64-msvc": "4.9.4",
1011 | "fsevents": "~2.3.2"
1012 | }
1013 | },
1014 | "node_modules/scheduler": {
1015 | "version": "0.23.0",
1016 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
1017 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
1018 | "dependencies": {
1019 | "loose-envify": "^1.1.0"
1020 | }
1021 | },
1022 | "node_modules/source-map": {
1023 | "version": "0.6.1",
1024 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1025 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1026 | "dev": true,
1027 | "optional": true,
1028 | "peer": true,
1029 | "engines": {
1030 | "node": ">=0.10.0"
1031 | }
1032 | },
1033 | "node_modules/source-map-js": {
1034 | "version": "1.0.2",
1035 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1036 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1037 | "dev": true,
1038 | "engines": {
1039 | "node": ">=0.10.0"
1040 | }
1041 | },
1042 | "node_modules/source-map-support": {
1043 | "version": "0.5.21",
1044 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
1045 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
1046 | "dev": true,
1047 | "optional": true,
1048 | "peer": true,
1049 | "dependencies": {
1050 | "buffer-from": "^1.0.0",
1051 | "source-map": "^0.6.0"
1052 | }
1053 | },
1054 | "node_modules/supports-preserve-symlinks-flag": {
1055 | "version": "1.0.0",
1056 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1057 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1058 | "dev": true,
1059 | "engines": {
1060 | "node": ">= 0.4"
1061 | },
1062 | "funding": {
1063 | "url": "https://github.com/sponsors/ljharb"
1064 | }
1065 | },
1066 | "node_modules/terser": {
1067 | "version": "5.24.0",
1068 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz",
1069 | "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==",
1070 | "dev": true,
1071 | "optional": true,
1072 | "peer": true,
1073 | "dependencies": {
1074 | "@jridgewell/source-map": "^0.3.3",
1075 | "acorn": "^8.8.2",
1076 | "commander": "^2.20.0",
1077 | "source-map-support": "~0.5.20"
1078 | },
1079 | "bin": {
1080 | "terser": "bin/terser"
1081 | },
1082 | "engines": {
1083 | "node": ">=10"
1084 | }
1085 | },
1086 | "node_modules/undici-types": {
1087 | "version": "5.26.5",
1088 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
1089 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
1090 | "dev": true,
1091 | "optional": true,
1092 | "peer": true
1093 | },
1094 | "node_modules/vite": {
1095 | "version": "5.0.11",
1096 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz",
1097 | "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==",
1098 | "dev": true,
1099 | "dependencies": {
1100 | "esbuild": "^0.19.3",
1101 | "postcss": "^8.4.32",
1102 | "rollup": "^4.2.0"
1103 | },
1104 | "bin": {
1105 | "vite": "bin/vite.js"
1106 | },
1107 | "engines": {
1108 | "node": "^18.0.0 || >=20.0.0"
1109 | },
1110 | "funding": {
1111 | "url": "https://github.com/vitejs/vite?sponsor=1"
1112 | },
1113 | "optionalDependencies": {
1114 | "fsevents": "~2.3.3"
1115 | },
1116 | "peerDependencies": {
1117 | "@types/node": "^18.0.0 || >=20.0.0",
1118 | "less": "*",
1119 | "lightningcss": "^1.21.0",
1120 | "sass": "*",
1121 | "stylus": "*",
1122 | "sugarss": "*",
1123 | "terser": "^5.4.0"
1124 | },
1125 | "peerDependenciesMeta": {
1126 | "@types/node": {
1127 | "optional": true
1128 | },
1129 | "less": {
1130 | "optional": true
1131 | },
1132 | "lightningcss": {
1133 | "optional": true
1134 | },
1135 | "sass": {
1136 | "optional": true
1137 | },
1138 | "stylus": {
1139 | "optional": true
1140 | },
1141 | "sugarss": {
1142 | "optional": true
1143 | },
1144 | "terser": {
1145 | "optional": true
1146 | }
1147 | }
1148 | }
1149 | }
1150 | }
1151 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "preinstall:opam": "opam update",
4 | "install:opam": "opam install -y . --deps-only --with-test",
5 | "check-npm-deps": "opam exec opam-check-npm-deps",
6 | "init": "opam switch create . 5.1.1 -y --deps-only && npm run install:npm-opam",
7 | "install:npm-opam": "npm install && npm run install:opam && npm run check-npm-deps",
8 | "dune": "opam exec -- dune",
9 | "build": "npm run dune -- build",
10 | "build:verbose": "npm run build -- --verbose",
11 | "clean": "npm run dune -- clean",
12 | "format": "npm run format:check -- --auto-promote",
13 | "format:check": "npm run dune -- build @fmt",
14 | "watch": "npm run build -- --watch",
15 | "serve": "vite serve --open",
16 | "bundle": "npm run build && vite build"
17 | },
18 | "scriptsComments": {
19 | "preinstall:opam": "# Sync opam database with upstream repositories: https://opam.ocaml.org/doc/Usage.html#opam-update",
20 | "install:opam": "# Downloads, builds and installs opam pkgs: https://opam.ocaml.org/doc/Usage.html#opam-install",
21 | "check-npm-deps": "# Checks that Melange bindings have their JS dependencies available: https://github.com/ahrefs/opam-check-npm-deps",
22 | "init": "# Create opam switch: https://opam.ocaml.org/doc/Usage.html#opam-switch and prepare everything to work in development mode (run just once, for initialization)",
23 | "install:npm-opam": "# Install both npm and opam deps",
24 | "dune": "# Run dune, OCaml's build tool",
25 | "build": "# Build the Melange apps",
26 | "build:verbose": "# Build the Melange apps in verbose mode",
27 | "clean": "# Cleans all Melange artifacts",
28 | "format": "# Formats the Melange sources using ocamlformat",
29 | "format:check": "# Checks that the Melange sources have the right formatting (read-only)",
30 | "watch": "# Watch files and rebuild when they change",
31 | "serve": "# Serves the React app in a local server",
32 | "bundle": "# Bundle the JavaScript apps generated by Melange"
33 | },
34 | "dependencies": {
35 | "react": "^18.2.0",
36 | "react-dom": "^18.2.0"
37 | },
38 | "devDependencies": {
39 | "@rollup/plugin-node-resolve": "^15.2.3",
40 | "vite": "^5.0.11"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/vite.config.mjs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import { nodeResolve } from '@rollup/plugin-node-resolve'
3 |
4 | export default defineConfig({
5 | plugins: [nodeResolve()],
6 | server: {
7 | watch: {
8 | ignored: ['**/_opam']
9 | }
10 | },
11 | });
12 |
--------------------------------------------------------------------------------