From fb9ac5deba12aa9240624c2f4bd2e1a0137b6a15 Mon Sep 17 00:00:00 2001 From: Owen Date: Sat, 7 Mar 2026 11:53:25 +0100 Subject: [PATCH 01/16] initial setup and Hello World exercise --- .gitignore | 4 + Makefile | 57 + config.json | 91 +- .../hello-world/.docs/instructions.md | 15 + .../practice/hello-world/.meta/HelloWorld.res | 1 + .../practice/hello-world/.meta/config.json | 19 + .../practice/hello-world/.meta/tests.toml | 13 + exercises/practice/hello-world/LICENSE | 21 + .../practice/hello-world/package-lock.json | 1549 ++++++++++++++++ exercises/practice/hello-world/package.json | 26 + exercises/practice/hello-world/rescript.json | 15 + .../practice/hello-world/src/HelloWorld.res | 1 + .../hello-world/tests/HelloWorld_test.res | 8 + lib/bs/.compiler.log | 2 + lib/bs/.sourcedirs.json | 1 + lib/bs/build.ninja | 0 lib/bs/compiler-info.json | 8 + lib/ocaml/.compiler.log | 2 + lib/ocaml/HelloWorld.ast | Bin 0 -> 252 bytes lib/ocaml/HelloWorld.cmi | Bin 0 -> 646 bytes lib/ocaml/HelloWorld.cmj | Bin 0 -> 95 bytes lib/ocaml/HelloWorld.cmt | Bin 0 -> 3481 bytes lib/ocaml/HelloWorld.res | 1 + lib/ocaml/HelloWorld_test.ast | Bin 0 -> 1377 bytes lib/ocaml/HelloWorld_test.cmi | Bin 0 -> 836 bytes lib/ocaml/HelloWorld_test.cmj | Bin 0 -> 103 bytes lib/ocaml/HelloWorld_test.cmt | Bin 0 -> 7186 bytes lib/ocaml/HelloWorld_test.res | 8 + lib/rescript.lock | 1 + package-lock.json | 1558 +++++++++++++++++ package.json | 26 + rescript.json | 15 + 32 files changed, 3432 insertions(+), 10 deletions(-) create mode 100644 Makefile create mode 100644 exercises/practice/hello-world/.docs/instructions.md create mode 100644 exercises/practice/hello-world/.meta/HelloWorld.res create mode 100644 exercises/practice/hello-world/.meta/config.json create mode 100644 exercises/practice/hello-world/.meta/tests.toml create mode 100644 exercises/practice/hello-world/LICENSE create mode 100644 exercises/practice/hello-world/package-lock.json create mode 100644 exercises/practice/hello-world/package.json create mode 100644 exercises/practice/hello-world/rescript.json create mode 100644 exercises/practice/hello-world/src/HelloWorld.res create mode 100644 exercises/practice/hello-world/tests/HelloWorld_test.res create mode 100644 lib/bs/.compiler.log create mode 100644 lib/bs/.sourcedirs.json create mode 100644 lib/bs/build.ninja create mode 100644 lib/bs/compiler-info.json create mode 100644 lib/ocaml/.compiler.log create mode 100644 lib/ocaml/HelloWorld.ast create mode 100644 lib/ocaml/HelloWorld.cmi create mode 100644 lib/ocaml/HelloWorld.cmj create mode 100644 lib/ocaml/HelloWorld.cmt create mode 100644 lib/ocaml/HelloWorld.res create mode 100644 lib/ocaml/HelloWorld_test.ast create mode 100644 lib/ocaml/HelloWorld_test.cmi create mode 100644 lib/ocaml/HelloWorld_test.cmj create mode 100644 lib/ocaml/HelloWorld_test.cmt create mode 100644 lib/ocaml/HelloWorld_test.res create mode 100644 lib/rescript.lock create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 rescript.json diff --git a/.gitignore b/.gitignore index f356949..2fd99d4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ bin/configlet.exe bin/latest-configlet.tar.gz bin/latest-configlet.zip bin/configlet.zip +node_modules + +tmp +exercises/**/.gitignore diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5960dfc --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +.DEFAULT_GOAL := test + +EXERCISE ?= "" +EXERCISES = $(shell find ./exercises/practice -maxdepth 1 -mindepth 1 -type d | cut -s -d '/' -f4 | sort) +OUTDIR ?= "tmp" + +# check all package.json and package-lock.json are matching +check-package-files: + @echo "Validation package.json files..." + @for pkg in $(PKG_FILES); do \ + ! ./bin/md5-hash $$pkg | grep -qv $(SOURCE_PKG_MD5) || { echo "$$pkg does not match main package.json. Please run 'make sync-package-files' locally and commit the results."; exit 1; }; \ + done + @echo "Validation package-lock.json files..." + @for pkg in $(PKG_LOCK_FILES); do \ + ! ./bin/md5-hash $$pkg | grep -qv $(SOURCE_PKG_LOCK_MD5) || { echo "$$pkg does not match main package.json. Please run 'make sync-package-files' locally and commit the results."; exit 1; }; \ + done + @echo "package-file check complete..." + +# copy package.json and package-lock.json for single exercise +copy-package-file: + @cp package.json exercises/practice/$(EXERCISE)/package.json + @cp package-lock.json exercises/practice/$(EXERCISE)/package-lock.json + @cp rescript.json exercises/practice/$(EXERCISE)/rescript.json + +# copy package files to all exercise directories +sync-package-files: + @echo "Syncing package.json and package-lock.json..." + @for exercise in $(EXERCISES); do EXERCISE=$$exercise $(MAKE) -s copy-package-file || exit 1; done + +copy-exercise: + if [ -f exercises/practice/$(EXERCISE)/src/*.res ]; then \ + echo "Copying $(EXERCISE)"; \ + cp exercises/practice/$(EXERCISE)/.meta/*.res $(OUTDIR)/src/; \ + cp exercises/practice/$(EXERCISE)/tests/*.res $(OUTDIR)/tests/; \ + fi + +copy-all-exercises: + @echo "Copying exercises for testing..." + @mkdir -p $(OUTDIR)/src + @mkdir -p $(OUTDIR)/tests + @for exercise in $(EXERCISES); do EXERCISE=$$exercise $(MAKE) -s copy-exercise || exit 1; done + +# Remove the OUTDIR +clean: + @echo "Cleaning tmp directory..." + @rm -rf $(OUTDIR) + +# Format all ReScript files in the project +format: + @echo "Formatting ReScript files..." + @find . -name "node_modules" -prune -o -name "*.res" -print -o -name "*.resi" -print | xargs npx rescript format + +test: + $(MAKE) -s clean + $(MAKE) -s check-package-files + $(MAKE) -s copy-all-exercises + npm run ci \ No newline at end of file diff --git a/config.json b/config.json index 87ba39b..cb0de10 100644 --- a/config.json +++ b/config.json @@ -1,30 +1,101 @@ { + "track_id": "rescript", "language": "ReScript", "slug": "rescript", - "active": false, + "active": true, "status": { "concept_exercises": false, "test_runner": false, "representer": false, "analyzer": false }, - "blurb": "TODO: add blurb", + "blurb": "ReScript is a strongly typed functional language which compiles to both Javascript and native.", "version": 3, "online_editor": { "indent_style": "space", - "indent_size": 4 + "indent_size": 2, + "highlightjs_language": "reasonml" + }, + "test_runner": { + "average_run_time": 7.0 }, "files": { - "solution": [], - "test": [], - "example": [], - "exemplar": [] + "solution": [ + "src/%{pascal_slug}.re" + ], + "test": [ + "__tests__/%{pascal_slug}_test.re" + ], + "example": [ + "src/Example.re" + ], + "exemplar": [ + ".meta/src/Exemplar.re" + ], + "editor": [ + "src/%{pascal_slug}.rei" + ] }, "exercises": { "concept": [], - "practice": [] + "practice": [ + { + "slug": "hello-world", + "name": "Hello World", + "uuid": "63d72b81-c7a4-4a94-8224-69f4c68cc374", + "practices": [], + "prerequisites": [], + "difficulty": 1, + "topics": [ + "setting_up_reasonml_dev_environment", + "strings" + ] + } + ] }, "concepts": [], - "key_features": [], - "tags": [] + "key_features": [ + { + "icon": "stable", + "title": "OCaml's type system", + "content": "ReScript brings OCaml's battle-tested powerful type system to Javascript." + }, + { + "icon": "immutable", + "title": "Inferred types", + "content": "No need to specify types, types are inferred by ReScript compiler and are guaranteed to be correct." + }, + { + "icon": "functional", + "title": "Functional Programming", + "content": "Like OCaml, ReScript is a functional programming language with pattern matching, variants and more." + }, + { + "icon": "interop", + "title": "Easy javascript interop", + "content": "Javascript interop is easy allowing advatange of existing javascript packages and ecosystem." + }, + { + "icon": "fast", + "title": "Fast compiler", + "content": "ReScript compilation times are super fast which means fast iteration cycles." + }, + { + "icon": "fun", + "title": "Refactor with ease", + "content": "Compiler guides you through all places that need to be fixed during refactor until it just works." + } + ], + "tags": [ + "paradigm/functional", + "typing/static", + "typing/strong", + "execution_mode/compiled", + "platform/linux", + "platform/mac", + "platform/windows", + "platform/web", + "used_for/frontends", + "used_for/web_development" + ] } diff --git a/exercises/practice/hello-world/.docs/instructions.md b/exercises/practice/hello-world/.docs/instructions.md new file mode 100644 index 0000000..6e08ebb --- /dev/null +++ b/exercises/practice/hello-world/.docs/instructions.md @@ -0,0 +1,15 @@ +# Instructions + +The classical introductory exercise. Just say "Hello, World!". + +["Hello, World!"](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program) is +the traditional first program for beginning programming in a new language +or environment. + +The objectives are simple: + +- Write a function that returns the string "Hello, World!". +- Run the test suite and make sure that it succeeds. +- Submit your solution and check it at the website. + +If everything goes well, you will be ready to fetch your first real exercise. diff --git a/exercises/practice/hello-world/.meta/HelloWorld.res b/exercises/practice/hello-world/.meta/HelloWorld.res new file mode 100644 index 0000000..1193fbd --- /dev/null +++ b/exercises/practice/hello-world/.meta/HelloWorld.res @@ -0,0 +1 @@ +let hello = () => "Hello, World!" diff --git a/exercises/practice/hello-world/.meta/config.json b/exercises/practice/hello-world/.meta/config.json new file mode 100644 index 0000000..4b53a4c --- /dev/null +++ b/exercises/practice/hello-world/.meta/config.json @@ -0,0 +1,19 @@ +{ + "blurb": "The classical introductory exercise. Just say \"Hello, World!\"", + "authors": [ + "tejasbubane" + ], + "contributors": [ + "naartjie", + "ohana54", + "son1112", + "stevejb71" + ], + "files": { + "solution": ["src/HelloWorld.res"], + "test": ["tests/HelloWorld_test.res"], + "example": [".meta/HelloWorld.res"] + }, + "source": "This is an exercise to introduce users to using Exercism", + "source_url": "http://en.wikipedia.org/wiki/%22Hello,_world!%22_program" +} diff --git a/exercises/practice/hello-world/.meta/tests.toml b/exercises/practice/hello-world/.meta/tests.toml new file mode 100644 index 0000000..73466d6 --- /dev/null +++ b/exercises/practice/hello-world/.meta/tests.toml @@ -0,0 +1,13 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[af9ffe10-dc13-42d8-a742-e7bdafac449d] +description = "Say Hi!" diff --git a/exercises/practice/hello-world/LICENSE b/exercises/practice/hello-world/LICENSE new file mode 100644 index 0000000..90e73be --- /dev/null +++ b/exercises/practice/hello-world/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Exercism + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/exercises/practice/hello-world/package-lock.json b/exercises/practice/hello-world/package-lock.json new file mode 100644 index 0000000..71e448c --- /dev/null +++ b/exercises/practice/hello-world/package-lock.json @@ -0,0 +1,1549 @@ +{ + "name": "@exercism/rescript", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@exercism/rescript", + "license": "MIT", + "dependencies": { + "rescript": "^12.1.0" + }, + "devDependencies": { + "rescript-test": "^8.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", + "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.3", + "css-tree": "^2.3.1", + "is-potential-custom-element-name": "^1.0.1" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rescript/darwin-arm64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.1.0.tgz", + "integrity": "sha512-OuJMT+2h2Lp60n8ONFx1oBAAePSVkM9zl7E/EX4VD2xkQoVTPklz0BpHYOICnFJSCOOdbOhbsTBXdLpo3yvllg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/darwin-x64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.1.0.tgz", + "integrity": "sha512-r5Iv4ga+LaNq+6g9LODwZG4bwydd9UDXACP/HKxOfrP9XQCITlF/XqB1ZDJWyJOgJLZSJCd7erlG38YtB0VZKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/linux-arm64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.1.0.tgz", + "integrity": "sha512-UTZv4GTjbyQ/T5LQDfQiGcumK3SzE1K7+ug6gWpDcGZ7ALc7hCS6BVEFL/LDs8iWVwAwkK/6r456s2zRnvS7wQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/linux-x64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.1.0.tgz", + "integrity": "sha512-c0PXuBL09JRSA4nQusYbR4mW5QJrBPqxDrqvIX+M79fk3d6jQmj5x4NsBwk5BavxvmbR/JU1JjYBlSAa3h22Vg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/runtime": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-12.1.0.tgz", + "integrity": "sha512-bvr9RfvBD+JS/6foWCA4l2fLXmUXN0KGqylXQPHt09QxUghqgoCiaWVHaHSx5dOIk/jAPlGQ7zB5yVeMas/EFQ==" + }, + "node_modules/@rescript/win32-x64": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.1.0.tgz", + "integrity": "sha512-nQC42QByyAbryfkbyK67iskipUqXVwTPCFrqissY4jJoP0128gg0yG6DydJnV1stXphtFdMFHtmyYE1ffG7UBg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jsdom": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", + "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/dom-selector": "^2.0.1", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/rescript": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.1.0.tgz", + "integrity": "sha512-n/B43wzIEKV4OmlrWbrlQOL4zZaz0RM/Cc8PG2YvhQvQDW7nscHJliDq1AGeVwHoMX68MeaKKzLDOMOMU9Z6FA==", + "license": "SEE LICENSE IN LICENSE", + "peer": true, + "workspaces": [ + "packages/playground", + "packages/@rescript/*", + "tests/dependencies/**", + "tests/analysis_tests/**", + "tests/docstring_tests", + "tests/gentype_tests/**", + "tests/tools_tests", + "scripts/res" + ], + "dependencies": { + "@rescript/runtime": "12.1.0" + }, + "bin": { + "bsc": "cli/bsc.js", + "bstracing": "cli/bstracing.js", + "rescript": "cli/rescript.js", + "rescript-legacy": "cli/rescript-legacy.js", + "rescript-tools": "cli/rescript-tools.js" + }, + "engines": { + "node": ">=20.11.0" + }, + "optionalDependencies": { + "@rescript/darwin-arm64": "12.1.0", + "@rescript/darwin-x64": "12.1.0", + "@rescript/linux-arm64": "12.1.0", + "@rescript/linux-x64": "12.1.0", + "@rescript/win32-x64": "12.1.0" + } + }, + "node_modules/rescript-test": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rescript-test/-/rescript-test-8.0.0.tgz", + "integrity": "sha512-b9RIpl7/YOCP1jl79j6LwRH8mj/5VAnkHaSLwJacMfzQGJL9nawiA53JrOyLNI6alYLrZBMNSWyHrt3QXF5jgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.3.12", + "jsdom": "^23.1.0" + }, + "bin": { + "retest": "bin/retest.mjs" + }, + "engines": { + "node": ">20.0.0" + }, + "peerDependencies": { + "rescript": "^12.0.1" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/exercises/practice/hello-world/package.json b/exercises/practice/hello-world/package.json new file mode 100644 index 0000000..e367d7a --- /dev/null +++ b/exercises/practice/hello-world/package.json @@ -0,0 +1,26 @@ +{ + "name": "@exercism/rescript", + "description": "Exercism exercises in ReScript.", + "contributors": [ + "Tejas Bubane (https://tejasbubane.github.io/)", + "Owen Rees (https://github.com/therealowenrees)" + ], + "private": true, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/exercism/rescript" + }, + "dependencies": { + "rescript": "^12.1.0" + }, + "devDependencies": { + "rescript-test": "^8.0.0" + }, + "scripts": { + "res:build": "rescript", + "res:start": "rescript build -w", + "test": "retest tmp/tests/*.js", + "ci": "npm run res:build && npm test" + } +} diff --git a/exercises/practice/hello-world/rescript.json b/exercises/practice/hello-world/rescript.json new file mode 100644 index 0000000..ab67515 --- /dev/null +++ b/exercises/practice/hello-world/rescript.json @@ -0,0 +1,15 @@ +{ + "name": "@exercism/rescript", + "sources": [ + { "dir": "tmp/src", "subdirs": true, "type": "dev" }, + { "dir": "tmp/tests", "subdirs": true, "type": "dev" } + ], + "package-specs": [ + { + "module": "esmodule", + "in-source": true + } + ], + "suffix": ".res.js", + "dependencies": ["rescript-test"] +} diff --git a/exercises/practice/hello-world/src/HelloWorld.res b/exercises/practice/hello-world/src/HelloWorld.res new file mode 100644 index 0000000..1503a69 --- /dev/null +++ b/exercises/practice/hello-world/src/HelloWorld.res @@ -0,0 +1 @@ +let hello = () => "Change this to make the tests pass" diff --git a/exercises/practice/hello-world/tests/HelloWorld_test.res b/exercises/practice/hello-world/tests/HelloWorld_test.res new file mode 100644 index 0000000..f9f1a71 --- /dev/null +++ b/exercises/practice/hello-world/tests/HelloWorld_test.res @@ -0,0 +1,8 @@ +open Test + +let stringEqual = (~message=?, a: string, b: string) => + assertion(~message?, ~operator="stringEqual", (a, b) => a == b, a, b) + +test("Hello World", () => { + stringEqual(~message="Returns hello world", HelloWorld.hello(), "Hello, World!") +}) diff --git a/lib/bs/.compiler.log b/lib/bs/.compiler.log new file mode 100644 index 0000000..f88492a --- /dev/null +++ b/lib/bs/.compiler.log @@ -0,0 +1,2 @@ +#Start(1772880784619) +#Done(1772880784622) diff --git a/lib/bs/.sourcedirs.json b/lib/bs/.sourcedirs.json new file mode 100644 index 0000000..e04a751 --- /dev/null +++ b/lib/bs/.sourcedirs.json @@ -0,0 +1 @@ +{"cmt_scan":[{"also_scan_build_root":true,"build_root":"lib/bs","scan_dirs":["tmp/src","tmp/tests"]}],"dirs":["tmp/src","tmp/tests"],"generated":[],"pkgs":[["rescript-test","/home/owen/Desktop/rescript/node_modules/rescript-test"]],"version":2} \ No newline at end of file diff --git a/lib/bs/build.ninja b/lib/bs/build.ninja new file mode 100644 index 0000000..e69de29 diff --git a/lib/bs/compiler-info.json b/lib/bs/compiler-info.json new file mode 100644 index 0000000..e448368 --- /dev/null +++ b/lib/bs/compiler-info.json @@ -0,0 +1,8 @@ +{ + "version": "12.2.0", + "bsc_path": "/home/owen/Desktop/rescript/node_modules/@rescript/linux-x64/bin/bsc.exe", + "bsc_hash": "ca03c46847ff55e2a2115049975f546b655fceff6fc10e34645da2e812314070", + "rescript_config_hash": "3e1cc7045fb017ccc60b5b5d3292d68791734f3c2ec12676027af056bbacdc32", + "runtime_path": "/home/owen/Desktop/rescript/node_modules/@rescript/runtime", + "generated_at": "1772880784624" +} \ No newline at end of file diff --git a/lib/ocaml/.compiler.log b/lib/ocaml/.compiler.log new file mode 100644 index 0000000..f88492a --- /dev/null +++ b/lib/ocaml/.compiler.log @@ -0,0 +1,2 @@ +#Start(1772880784619) +#Done(1772880784622) diff --git a/lib/ocaml/HelloWorld.ast b/lib/ocaml/HelloWorld.ast new file mode 100644 index 0000000000000000000000000000000000000000..001131283d2a72c21af2ef50ef08f6d416698438 GIT binary patch literal 252 zcmZQzU|{6Z&&bbB)z2?a&C_>DEzT~^k zNznt!akWfcwvT~XIhaDdZ@bdwz&Tn?}>IXZYc zu&_96cv@3olSH(3}G-l8!))tUx9U6APPz0|4LnQ)K`E literal 0 HcmV?d00001 diff --git a/lib/ocaml/HelloWorld.cmi b/lib/ocaml/HelloWorld.cmi new file mode 100644 index 0000000000000000000000000000000000000000..1bb23c4e9010b96dded7a4557eb08fccc6b424c2 GIT binary patch literal 646 zcmZ=x%*`>hw6ydzFfwYHx@;c<1H*J6mImTXAdX+4<&m0`lOLX6l#{Yx!3IX=H>w#R z0fz${4lZ!muzA7;SC!Jd%n}EO2@XuGUmr3s`~eC2suhi-Gbj$RK6_6}UIKs&f3B_}f}KBTfB zb%Fug>~Gy+jo!AVUv_Uh(AJx@V1X`FKDaVBDL-d|0lU*H#kP2nGii$RJ=Zq-e^{_U zAF9H?C?yr-y$J@o-whKo6mys3^Z^g24m@&mWtzS55ss zzhtHU?w^MdE_KhzPf7&3v>`!SJ4CX6D*m<6Q%q>=VwC3T=b*C0AFb*in%*`yxEK7~gDvnRBC`l~> zx>F)FT1@QFyoeXBP4|o~XL$lcJ0P{FEU_4yU|_HYVm=_&17ghs6E>)3q~_%0PgtYZd;^d;tf|3Or9Mwy53-pVNlGXKqf_hoS4h{g=9w3(h literal 0 HcmV?d00001 diff --git a/lib/ocaml/HelloWorld.cmt b/lib/ocaml/HelloWorld.cmt new file mode 100644 index 0000000000000000000000000000000000000000..f6fb2001d0dff8cfb9f836f6754df8f4cf82b691 GIT binary patch literal 3481 zcmbtX32YQq7@jF_g^G%ZG#JG|PYUeLS_GwtzUe``z3BnSHO%hLwnJxUHZ!xOt$5%; zOgu6W1r;OD0|E+UP{c$cDHx0g#tUOK9uP>p&|pCD*8k1Xt=J;bZC_?~-uM6i_x|_2 zfBr2Olgc$SXU>d-OG@s3c=KL{Vb;UA5{3*zAd{;lMbYMKx)LYEW``Xw=%5d9pS_P@ z`vuFc%ulPbiLr&V0zV#MnBVBb`a;9hWwkx?_;+maF5nMr_hpxG9a>W2v=x%dRY*ps zsiinwGGe-%GC4Du;tV~;WkQEwj>i>!D2vAtjIm3V-3%0Y7~jL#PX=6v-@H||v!|chv%7Eg15rYP-h4|>GO8(7 zczD@26ITnDA52W#7}OFSL_>_L)=#fm6I6K<;zNUUi|WydzyAJ85R|y32W`$ z@!7{E$G+LJa#q88rxT;zC#28~Vud$OSa4(Ht)nAzdJe2S^5~8?37OWU%SqXkyCh+` zAxPb(qyx`!ZHsbp_CK-UtI9h+pEmQc2xPlS(z`?ha0cY+?Z-d(V$c2)b@gxDw0*;O z0YdUBw4@bQj`u!u@2`!=Ke_(~{>vLyZSi)FVPVJmKe*geVQaq%FFeUG>_LVZZZXUS z$44;CEM|Zb*Vx2<5|h5eRFPkMiX1X`v+Nm&#@Uvz zDPQU=d)j$$68KMJ2*!xb{NYWTc0TWacK-c??TY-UrYYDl#CQ#P*IrVP5EVm$a|Y+9 zP*62h5_rt~Nsk0fFU>dgv@?rFV9diAfh!L&vCZens_DCOr!K-gU2AzkLea#t=0<_( zaBSBVM&)*Dh=!qAFvQIB=wl5%Z}zZz)GE9#dMvq{1zx2*dpi>Fz0A| zax>h8VNAkyO(9f@wBjv^*l3JXbQZGK#i zWgOQ#$R^MOIc(1h(Ybk|l9miw3c;58Tu77Q`J9V-2owTHWyo<MvHZ?9KWL1g_x)e+6wDt%|EuK~+s?I#dLaQK2_F701dfRtY z<)rKh|0^aa;AUz1t_#a)KvkLtH@CDL`6u6CaryFJGu{2v?#ST77$$X&8?Frqy|ucT`(W0VKH0KAui z$D(~`BYXie`RR0i#tGZSE1L@X22~dZqR^_mR94Qw`*L~L5j*l@1X5~ zYAKrYH^$df9bHR<9-^=*=p*zZz~&b?ZzRtVrl1-M`jmpEp)b%Y0BR0L)Gkqx5?;;k|EW0nj zMtEEYml_^7P}kQn=#2eBfGzX&(FXPw6&@d8M^pKYzyY>8z+MM#*E|(;dXlLVoQ7zk zl{v5?d)PR!uo61>r<=WS9Pj7@h<0nvKuf+-DdxCBx*P zb93p0gHZ#R#5%=xDX5A`sRRRIJtiB;{uZ)iAVy1@skC{$WVofG)N3zGX;T?mZp;{@ z-4qSe`Y%0dcJ8@WN0$&apePVDl4Mt$3p&JJd3nqv14D~-=;8%;8aYhY;HF)RSC!*HDx=g "Hello, World!" diff --git a/lib/ocaml/HelloWorld_test.ast b/lib/ocaml/HelloWorld_test.ast new file mode 100644 index 0000000000000000000000000000000000000000..99cfada3b2b53eae443aef500c168909ebcee7e1 GIT binary patch literal 1377 zcmbVM-Afcv6ra^o>ZXuTP%oy7Jwy-2Y}cL z4N7{6tC5H=4M9W^cBB4)f(Yt0vgoDW`nJxwH$Td^Waa!g=XZYR+;iq$P1Ev&^=4n6 z)o9s$?ZKm_;|3#LR@{tO17;#pZ92WKm5kV?(`I)k-H01cMqDI0k>#uwa#SECICgb< zPSapP(*k?Yj^Ted=hp@Iib>fQIeY(GJgV0S$cX9(^r$ZYqPh;5y6!^;fX?}(&V}#s z?T%}ACpv5TQ?Wi|t!Ks|0r|{mBC`J`%}e5@X3nC^vjaKAUF(V~l zA2Uv_)~I2|pnzIt46V|5iamIxF~>1&x7$jf(2;75X*i4qvIj|w^S@4Zi~@%RG?8tj z!+DSmS&)T9kB6Jjn|2pA!{8imgYm>@f} zGD^~1CXEP~lwg$N_~%0&?SMdtJl=jC$AIvU4KJ3QkR=(Fe9VkyDoFSVGYrV4o-!Z@Tj0K&LNQ$(3_q(4Xyf=3 z@LVBpu@l^gylI8hw6ydzFfwYHx@;c<1ET~31A_$+UjX8R3-mowb8_;-^NVs);!9GCOBO8H zz{vbrySSt%GcVn>urx8p;lPH23nng5&rK~ZPE1eTaDdZNKO;XkRX@KxHBa9qwK%&Z zzd*kzwK%ybv!F!3B)32xWKc1>$$CH~&ff6{SeTr>(;PNzp0L4FEx({7Ge6H^0f^_T z2C>w^VS)n_>(_@24Bz3bA3!I7wO}gx36)~ugsc7qGR{?{G%vFRVc2g6sHuNojK2;O zoFNwdbJ%czMZ?+K{{V}ovv-t(g99|I9s|S38yIFnK>GdyjKG>;AQgFjmFfoHumC6K zI4I}+26Xu z8og~zzwF+2pshD)!2(^Vd~juMQhv?^19qoZif!>CXVMhsd#-Kv{{XZes=~i0B^4As z6AW~}GhdNgBUAOHTDG9*!{dhtTYM6$Dkm6ZXWBaSl_Y6rbLZu)`?l@#f(1HIGrWpj zEAl27tXX})&)|i@fzZp7rcZe&Yqns49zsD;QGU?`g9!?rKQ?8rn)-cy$x8j*KMx~Z z>YkIIln8WbLxQw=pmT!NM&4b*tpQsY5Uy}ZECKqpYTezNMo(U?sIm6D_$`h9(t-tQ z5KAT)%vXr8^E~~STdeYE&BK}NPAynq98i>*n^}@smKvW`9G_ZIl3E0Gr$lJ9nAo9t z5ieYu?ipLo@?5Y$D&8;3A$LBVUE1=QNzzB?PIB);}a7JB| literal 0 HcmV?d00001 diff --git a/lib/ocaml/HelloWorld_test.cmj b/lib/ocaml/HelloWorld_test.cmj new file mode 100644 index 0000000000000000000000000000000000000000..eeb6401af17211a03cfe60f4370a54fc42e50422 GIT binary patch literal 103 zcmd<+<5K!4J;_ZsEwSv*$xybIsmt~;Ffcd+F&_{c0I~Lg2^+MFONuh{(p?Kn6LTgk zSm5jc1Pdk@Iiyyk7A0pE=js=w7AF^F7L+X5;HX)WTcBT(T3k}Bt_Kv>%PMwo000Ow BBs%~A literal 0 HcmV?d00001 diff --git a/lib/ocaml/HelloWorld_test.cmt b/lib/ocaml/HelloWorld_test.cmt new file mode 100644 index 0000000000000000000000000000000000000000..4c6d464d79fb5a76b4f4072f51bbe85739902d76 GIT binary patch literal 7186 zcmbtZ3z!tum9DBjg*+4@3egpm8D>C&Gt&-1Wq^2lngNDp9z0ciG~F{b(9qL8R(JD? z#6?#U4Z1Z%@s-4q2r)jeUBY2iqRaC$7Kaa6i1n@FdG&0kHUT%kf( zLeoFpr6>mq)MrpZHaV8*pjSox3f!MFTth`JmB<#s4hawS3!nH>SYcPt--MH=^TUyr zJdFuQ76>6cTkVF8BCy$Dyx*~pF_snlhb#W=p-QJ|ertW8?W4)tme_X1Ty)+Fp8fG# zx4lq*Q(g?XeRcaE7tgcpv2(KR$wWLlcV(Ah1^e8)|NHaTL?(~_i3kbjh^|h9cA}5K6+!zUWoTNTFiEXhsO$59SFR7?jyriz5DIqUFP21 zyNXg~##XJgf=d&V#ckR6*rfwfsV)0=?6d6)Jd7Ech7~C*_{hWg=HUCm{JdAz-+BA4 z;TPFv*I;x9)Z3Wl2+`oG0b*~+^c0BjS>^YHHwmou6y3-0K zKV0>|_YSpu_@{M~LVupL=0R`R6&1r>_!D7o4$Uphp|iFq3VmBq2A3(y>5Y9AWuj8* z?cI*;+`ZFsg!G4yZBgLwnmHlSfSD5#jUohJrH~L55W*piNI-#cij5Mr_)l!wv~`>R zxAo{h;Y_KBr_)Kdp%C5nPUq^%j#x5dU=Cp}jEbhxDI*#Z%3+p?>T4>pW=_^pUm+k} z;2nZY;e`10#C3S<)^c3OD92HM2;)bwGVN#RsPg~g~SF>pO z`D0iu8s-Te2J|z9(>$J?Bb7k_iMFLv2p+k%Y}yp`HD~HbV@1kWDI~Qm1Hjp$7;;>j zIbNt~5+OE1yrLQXmcpvI*KHMZ5a@(u(?B#I$MWqfKz$Rx3xqRc6hc}q>2=U{=nNT7 zT0jkvRI{jO*tz8`OX~sBAI<6+cV1-!&n+%v;OQ=~gq|UJoYv7@X1X(h0r3>2F%oeO zRPdB&l`WlVl`+$dtt{}>NWK{^pK?8z=Hu5aoaq(GM5d_gc*z%WJHD{|%By9!W2|1R zysnNreHzDQ8e-F6)JgW4fa)xmA%!nQ@<>H{qOAzrBsp8*9d@rXznbgj$C5cC!+{TN z8FK*}!^50Kt8Gksn6g>|HN_Ss+NLIqWIL_Fu(LF(5_AKY#uS)nEn$+|=+ZKSZlQK) za)WSMM(0vXQ|aY}v1jYIkDlihS{RtL)NZ!0SdBrx4%6u#mID;LZ4k~?b@Ni~Mn@uL zv`0;&EoXA1iFT&jb4eqNF&U{?v<60U)=ML8@R6p;&!708!Y17{-Bl1kTcGpgbQ=On z_41gRio$i12}HP9GTIf(a;T$iv<^19vO1K>7-lxw5lbXcfL>rm47X_rJx?~6uNd2qYLBKnq8$mp zYc$s7LpZi+7`;S41>fakn$yrHolCWQXtgfa%gi;BUZpMInlpOpQ5sKRM;gyU-(wm4?`K|=_O=E5Dm z#P3r$i#TGr3E|UQz}RJM=YC=5dpU3V;HbRGCe6v~Y8~elx;l{)3&d<^LrFTNs|}nM z>FQLO7j1BQXp;@Dj-MgDEw!$#m z9=cdKy*3esk}Y<9IC2fu3DVsD6oa;nQcFk~Ps;y);7PhsS4$s3Ls$r;U^c6Pzm&xw zV{0!~H(mWfII;w<+ryEisO%v)sp}T1cCUxHURO&WthSX@mZx(B4VTa~$fiNmpZeR5 zwX=u9w&kU;EMrqR(uvpRa3mvTM2a%*qQMUJL0|yl+0+ME)QT0&SM|fPcv01#ha)+_ z>Vtm$4&hF|pJPRqwcDAM2Fd^X)02cCN?-IJ&Fg6@!>ix8c%dL4^ix2@tHRM+OPceUnqZ7vg+ z33>{_m0t6ZTXe1Tfu0Nqyd_re6SgIDJ6)?qi;ERq3vlGrhUnU0&yD6oJ3Z7bkUxfW z?GmgN7b0K95*RRao>o?QTJjDf_&c*_+JJHSZ$&(S^coU;*_c7M> zAZ!q-vPMqvBPWTnPI|;C$D0|-_kCYhZYj(R&B zwHn_KxE%>7Kq`4qi_L@ViLU0@2)eq}W7qUR>4VxXj~ycWha*>G)5tEMt1s#5I$eDn z92=ww-qKYh?XXW^P&g8yQ`yQIord}!*^ce{Z{WNNUP7jM9vm1xRaMsEL8EhB((;^` z)2G)k8{HVIO_W~8p2rpWVnv-Sc(z!893td3xAb@FUwggi8)kJ<7u*NEL9<1YDQ z48sPhPy>5a?E^$!Ib#siLI`RfS9ZnB7?$7O?Y4#8JtJh@W;V#2OK#*`9FaM2A)7NW z(eKSXC}P3w5S0V1pmFd=wKU2NRS4k`+d489Gx$x@ROLZcc?jfMm&6KI!!8bo(i#zj zwfC@4>e{8!m{9pMpEw}xj;c%ilKp;(yR3rwQ}lGU?CB?LVU+Ci-XFts7s!&oQX_1j zYYTbp(bYyhuu@m2@xn1~wvo-5smzGQd=fiiIUmL9>Lk|tVOQCwK|bP=uS&C)tAW3& z+84xU5poR)3_!@23Znc=y4p4Ov&hkS>ry-l3sp)X!oJ@korq=p)&+hY@-Pe*eOf5dcvmV+?5Yp{r?Pdk4wHUNUo7+{5ANU8t6lJ!etO4#>zN6knVCJ zx;IuyZ7y)Vx=dHU%ZU43m^~m5xa2`O01Kr8edz%gY#Hhgx%Ho8NFJljHclYGe~W^svJ@kB!)5`Qa3!2XG@+ZW#ClW>Z1MytbJWp-iAI&J*@ag2(`2w zTI<^Dc)K&0`sl|z0vm1qlN|k~f7O5-m2?Z}?H=VP6RF&asudS~vnHNM)xgpPKh*4E#=2F>2r%{E|i^cuw{vR?t0HF30C*9oF(A^i{P~BB0SQXDeleVR} zrl?BAI*nQZh0V4^rn9h>s6CP=oy&IRvUNtrJ=du#++EbMLsl=zOfHlh;jHqWq&kLE z{=efUq+j`0^_II7&)`7ErU7=plix5E$Ii2BO~E+A3O>GO!M*=J=DaH=n%BOuw{^9b zBhhgEm`CV*+6pH-{yDkK$&YiYuG6IBU5V&{zQ;SFKiQLhJuvWi7X|)(%8Bk6{QHy> w-%^~!RmcB%UE*tTqWhMUxwG*#J@L(tFXcpcM>^peru51QBVKwv6|%(t0;=kpxBvhE literal 0 HcmV?d00001 diff --git a/lib/ocaml/HelloWorld_test.res b/lib/ocaml/HelloWorld_test.res new file mode 100644 index 0000000..f9f1a71 --- /dev/null +++ b/lib/ocaml/HelloWorld_test.res @@ -0,0 +1,8 @@ +open Test + +let stringEqual = (~message=?, a: string, b: string) => + assertion(~message?, ~operator="stringEqual", (a, b) => a == b, a, b) + +test("Hello World", () => { + stringEqual(~message="Returns hello world", HelloWorld.hello(), "Hello, World!") +}) diff --git a/lib/rescript.lock b/lib/rescript.lock new file mode 100644 index 0000000..ee6a30e --- /dev/null +++ b/lib/rescript.lock @@ -0,0 +1 @@ +59375 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..bc30ff1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1558 @@ +{ + "name": "@exercism/rescript", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@exercism/rescript", + "license": "MIT", + "dependencies": { + "rescript": "^12.1.0" + }, + "devDependencies": { + "rescript-test": "^8.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", + "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.3", + "css-tree": "^2.3.1", + "is-potential-custom-element-name": "^1.0.1" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rescript/darwin-arm64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.2.0.tgz", + "integrity": "sha512-xc3K/J7Ujl1vPiFY2009mRf3kWRlUe/VZyJWprseKxlcEtUQv89ter7r6pY+YFbtYvA/fcaEncL9CVGEdattAg==", + "cpu": [ + "arm64" + ], + "license": "(LGPL-3.0-or-later AND MIT)", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/darwin-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.2.0.tgz", + "integrity": "sha512-qqcTvnlSeoKkywLjG7cXfYvKZ1e4Gz2kUKcD6SiqDgCqm8TF+spwlFAiM6sloRUOFsc0bpC/0R0B3yr01FCB1A==", + "cpu": [ + "x64" + ], + "license": "(LGPL-3.0-or-later AND MIT)", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/linux-arm64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.2.0.tgz", + "integrity": "sha512-ODmpG3ji+Nj/8d5yvXkeHlfKkmbw1Q4t1iIjVuNwtmFpz7TiEa7n/sQqoYdE+WzbDX3DoJfmJNbp3Ob7qCUoOg==", + "cpu": [ + "arm64" + ], + "license": "(LGPL-3.0-or-later AND MIT)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/linux-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.2.0.tgz", + "integrity": "sha512-2W9Y9/g19Y4F/subl8yV3T8QBG2oRaP+HciNRcBjptyEdw9LmCKH8+rhWO6sp3E+nZLwoE2IAkwH0WKV3wqlxQ==", + "cpu": [ + "x64" + ], + "license": "(LGPL-3.0-or-later AND MIT)", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/runtime": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-12.2.0.tgz", + "integrity": "sha512-NwfljDRq1rjFPHUaca1nzFz13xsa9ZGkBkLvMhvVgavJT5+A4rMcLu8XAaVTi/oAhO/tlHf9ZDoOTF1AfyAk9Q==", + "license": "MIT" + }, + "node_modules/@rescript/win32-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.2.0.tgz", + "integrity": "sha512-fhf8CBj3p1lkIXPeNko3mVTKQfXXm4BoxJtR1xAXxUn43wDpd8Lox4w8/EPBbbW6C/YFQW6H7rtpY+2AKuNaDA==", + "cpu": [ + "x64" + ], + "license": "(LGPL-3.0-or-later AND MIT)", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jsdom": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", + "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/dom-selector": "^2.0.1", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/rescript": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.2.0.tgz", + "integrity": "sha512-1Jf2cmNhyx5Mj2vwZ4XXPcXvNSjGj9D1jPBUcoqIOqRpLPo1ch2Ta/7eWh23xAHWHK5ow7BCDyYFjvZSjyjLzg==", + "license": "(LGPL-3.0-or-later AND MIT)", + "peer": true, + "workspaces": [ + "packages/playground", + "packages/@rescript/*", + "tests/dependencies/**", + "tests/analysis_tests/**", + "tests/docstring_tests", + "tests/gentype_tests/**", + "tests/tools_tests", + "tests/commonjs_tests", + "scripts/res" + ], + "dependencies": { + "@rescript/runtime": "12.2.0" + }, + "bin": { + "bsc": "cli/bsc.js", + "bstracing": "cli/bstracing.js", + "rescript": "cli/rescript.js", + "rescript-legacy": "cli/rescript-legacy.js", + "rescript-tools": "cli/rescript-tools.js" + }, + "engines": { + "node": ">=20.11.0" + }, + "optionalDependencies": { + "@rescript/darwin-arm64": "12.2.0", + "@rescript/darwin-x64": "12.2.0", + "@rescript/linux-arm64": "12.2.0", + "@rescript/linux-x64": "12.2.0", + "@rescript/win32-x64": "12.2.0" + } + }, + "node_modules/rescript-test": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rescript-test/-/rescript-test-8.0.0.tgz", + "integrity": "sha512-b9RIpl7/YOCP1jl79j6LwRH8mj/5VAnkHaSLwJacMfzQGJL9nawiA53JrOyLNI6alYLrZBMNSWyHrt3QXF5jgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.3.12", + "jsdom": "^23.1.0" + }, + "bin": { + "retest": "bin/retest.mjs" + }, + "engines": { + "node": ">20.0.0" + }, + "peerDependencies": { + "rescript": "^12.0.1" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e367d7a --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "@exercism/rescript", + "description": "Exercism exercises in ReScript.", + "contributors": [ + "Tejas Bubane (https://tejasbubane.github.io/)", + "Owen Rees (https://github.com/therealowenrees)" + ], + "private": true, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/exercism/rescript" + }, + "dependencies": { + "rescript": "^12.1.0" + }, + "devDependencies": { + "rescript-test": "^8.0.0" + }, + "scripts": { + "res:build": "rescript", + "res:start": "rescript build -w", + "test": "retest tmp/tests/*.js", + "ci": "npm run res:build && npm test" + } +} diff --git a/rescript.json b/rescript.json new file mode 100644 index 0000000..ab67515 --- /dev/null +++ b/rescript.json @@ -0,0 +1,15 @@ +{ + "name": "@exercism/rescript", + "sources": [ + { "dir": "tmp/src", "subdirs": true, "type": "dev" }, + { "dir": "tmp/tests", "subdirs": true, "type": "dev" } + ], + "package-specs": [ + { + "module": "esmodule", + "in-source": true + } + ], + "suffix": ".res.js", + "dependencies": ["rescript-test"] +} From 1562c3e5797c809b4eaa78fba3048cbb240bb400 Mon Sep 17 00:00:00 2001 From: Owen Date: Sat, 7 Mar 2026 12:09:44 +0100 Subject: [PATCH 02/16] update formatting --- config.json | 37 +++++++++---------- .../practice/hello-world/.meta/config.json | 14 +++++-- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/config.json b/config.json index cb0de10..fc82999 100644 --- a/config.json +++ b/config.json @@ -1,5 +1,4 @@ { - "track_id": "rescript", "language": "ReScript", "slug": "rescript", "active": true, @@ -17,7 +16,7 @@ "highlightjs_language": "reasonml" }, "test_runner": { - "average_run_time": 7.0 + "average_run_time": 7 }, "files": { "solution": [ @@ -37,7 +36,6 @@ ] }, "exercises": { - "concept": [], "practice": [ { "slug": "hello-world", @@ -53,48 +51,47 @@ } ] }, - "concepts": [], "key_features": [ { - "icon": "stable", "title": "OCaml's type system", - "content": "ReScript brings OCaml's battle-tested powerful type system to Javascript." + "content": "ReScript brings OCaml's battle-tested powerful type system to Javascript.", + "icon": "stable" }, { - "icon": "immutable", "title": "Inferred types", - "content": "No need to specify types, types are inferred by ReScript compiler and are guaranteed to be correct." + "content": "No need to specify types, types are inferred by ReScript compiler and are guaranteed to be correct.", + "icon": "immutable" }, { - "icon": "functional", "title": "Functional Programming", - "content": "Like OCaml, ReScript is a functional programming language with pattern matching, variants and more." + "content": "Like OCaml, ReScript is a functional programming language with pattern matching, variants and more.", + "icon": "functional" }, { - "icon": "interop", "title": "Easy javascript interop", - "content": "Javascript interop is easy allowing advatange of existing javascript packages and ecosystem." + "content": "Javascript interop is easy allowing advatange of existing javascript packages and ecosystem.", + "icon": "interop" }, { - "icon": "fast", "title": "Fast compiler", - "content": "ReScript compilation times are super fast which means fast iteration cycles." + "content": "ReScript compilation times are super fast which means fast iteration cycles.", + "icon": "fast" }, { - "icon": "fun", "title": "Refactor with ease", - "content": "Compiler guides you through all places that need to be fixed during refactor until it just works." + "content": "Compiler guides you through all places that need to be fixed during refactor until it just works.", + "icon": "fun" } ], "tags": [ - "paradigm/functional", - "typing/static", - "typing/strong", "execution_mode/compiled", + "paradigm/functional", "platform/linux", "platform/mac", - "platform/windows", "platform/web", + "platform/windows", + "typing/static", + "typing/strong", "used_for/frontends", "used_for/web_development" ] diff --git a/exercises/practice/hello-world/.meta/config.json b/exercises/practice/hello-world/.meta/config.json index 4b53a4c..2a56135 100644 --- a/exercises/practice/hello-world/.meta/config.json +++ b/exercises/practice/hello-world/.meta/config.json @@ -1,5 +1,4 @@ { - "blurb": "The classical introductory exercise. Just say \"Hello, World!\"", "authors": [ "tejasbubane" ], @@ -10,10 +9,17 @@ "stevejb71" ], "files": { - "solution": ["src/HelloWorld.res"], - "test": ["tests/HelloWorld_test.res"], - "example": [".meta/HelloWorld.res"] + "solution": [ + "src/HelloWorld.res" + ], + "test": [ + "tests/HelloWorld_test.res" + ], + "example": [ + ".meta/HelloWorld.res" + ] }, + "blurb": "The classical introductory exercise. Just say \"Hello, World!\"", "source": "This is an exercise to introduce users to using Exercism", "source_url": "http://en.wikipedia.org/wiki/%22Hello,_world!%22_program" } From 6761c64aec2daf22f2e3e4cfc92f6affb79ed798 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 15:30:40 +0100 Subject: [PATCH 03/16] update placement of dependencies to allow tests to run --- exercises/practice/hello-world/rescript.json | 2 +- rescript.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/practice/hello-world/rescript.json b/exercises/practice/hello-world/rescript.json index ab67515..957e8c1 100644 --- a/exercises/practice/hello-world/rescript.json +++ b/exercises/practice/hello-world/rescript.json @@ -11,5 +11,5 @@ } ], "suffix": ".res.js", - "dependencies": ["rescript-test"] + "dev-dependencies": ["rescript-test"] } diff --git a/rescript.json b/rescript.json index ab67515..957e8c1 100644 --- a/rescript.json +++ b/rescript.json @@ -11,5 +11,5 @@ } ], "suffix": ".res.js", - "dependencies": ["rescript-test"] + "dev-dependencies": ["rescript-test"] } From 2a15d8444b66cf6df4bf12486e9d87a1947cd9ae Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 15:32:58 +0100 Subject: [PATCH 04/16] remove ad ignore build artifacts --- .gitignore | 1 + lib/bs/.compiler.log | 2 -- lib/bs/.sourcedirs.json | 1 - lib/bs/build.ninja | 0 lib/bs/compiler-info.json | 8 -------- lib/ocaml/.compiler.log | 2 -- lib/ocaml/HelloWorld.ast | Bin 252 -> 0 bytes lib/ocaml/HelloWorld.cmi | Bin 646 -> 0 bytes lib/ocaml/HelloWorld.cmj | Bin 95 -> 0 bytes lib/ocaml/HelloWorld.cmt | Bin 3481 -> 0 bytes lib/ocaml/HelloWorld.res | 1 - lib/ocaml/HelloWorld_test.ast | Bin 1377 -> 0 bytes lib/ocaml/HelloWorld_test.cmi | Bin 836 -> 0 bytes lib/ocaml/HelloWorld_test.cmj | Bin 103 -> 0 bytes lib/ocaml/HelloWorld_test.cmt | Bin 7186 -> 0 bytes lib/ocaml/HelloWorld_test.res | 8 -------- lib/rescript.lock | 1 - 17 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 lib/bs/.compiler.log delete mode 100644 lib/bs/.sourcedirs.json delete mode 100644 lib/bs/build.ninja delete mode 100644 lib/bs/compiler-info.json delete mode 100644 lib/ocaml/.compiler.log delete mode 100644 lib/ocaml/HelloWorld.ast delete mode 100644 lib/ocaml/HelloWorld.cmi delete mode 100644 lib/ocaml/HelloWorld.cmj delete mode 100644 lib/ocaml/HelloWorld.cmt delete mode 100644 lib/ocaml/HelloWorld.res delete mode 100644 lib/ocaml/HelloWorld_test.ast delete mode 100644 lib/ocaml/HelloWorld_test.cmi delete mode 100644 lib/ocaml/HelloWorld_test.cmj delete mode 100644 lib/ocaml/HelloWorld_test.cmt delete mode 100644 lib/ocaml/HelloWorld_test.res delete mode 100644 lib/rescript.lock diff --git a/.gitignore b/.gitignore index 2fd99d4..786b71a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ node_modules tmp exercises/**/.gitignore +lib diff --git a/lib/bs/.compiler.log b/lib/bs/.compiler.log deleted file mode 100644 index f88492a..0000000 --- a/lib/bs/.compiler.log +++ /dev/null @@ -1,2 +0,0 @@ -#Start(1772880784619) -#Done(1772880784622) diff --git a/lib/bs/.sourcedirs.json b/lib/bs/.sourcedirs.json deleted file mode 100644 index e04a751..0000000 --- a/lib/bs/.sourcedirs.json +++ /dev/null @@ -1 +0,0 @@ -{"cmt_scan":[{"also_scan_build_root":true,"build_root":"lib/bs","scan_dirs":["tmp/src","tmp/tests"]}],"dirs":["tmp/src","tmp/tests"],"generated":[],"pkgs":[["rescript-test","/home/owen/Desktop/rescript/node_modules/rescript-test"]],"version":2} \ No newline at end of file diff --git a/lib/bs/build.ninja b/lib/bs/build.ninja deleted file mode 100644 index e69de29..0000000 diff --git a/lib/bs/compiler-info.json b/lib/bs/compiler-info.json deleted file mode 100644 index e448368..0000000 --- a/lib/bs/compiler-info.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": "12.2.0", - "bsc_path": "/home/owen/Desktop/rescript/node_modules/@rescript/linux-x64/bin/bsc.exe", - "bsc_hash": "ca03c46847ff55e2a2115049975f546b655fceff6fc10e34645da2e812314070", - "rescript_config_hash": "3e1cc7045fb017ccc60b5b5d3292d68791734f3c2ec12676027af056bbacdc32", - "runtime_path": "/home/owen/Desktop/rescript/node_modules/@rescript/runtime", - "generated_at": "1772880784624" -} \ No newline at end of file diff --git a/lib/ocaml/.compiler.log b/lib/ocaml/.compiler.log deleted file mode 100644 index f88492a..0000000 --- a/lib/ocaml/.compiler.log +++ /dev/null @@ -1,2 +0,0 @@ -#Start(1772880784619) -#Done(1772880784622) diff --git a/lib/ocaml/HelloWorld.ast b/lib/ocaml/HelloWorld.ast deleted file mode 100644 index 001131283d2a72c21af2ef50ef08f6d416698438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmZQzU|{6Z&&bbB)z2?a&C_>DEzT~^k zNznt!akWfcwvT~XIhaDdZ@bdwz&Tn?}>IXZYc zu&_96cv@3olSH(3}G-l8!))tUx9U6APPz0|4LnQ)K`E diff --git a/lib/ocaml/HelloWorld.cmi b/lib/ocaml/HelloWorld.cmi deleted file mode 100644 index 1bb23c4e9010b96dded7a4557eb08fccc6b424c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmZ=x%*`>hw6ydzFfwYHx@;c<1H*J6mImTXAdX+4<&m0`lOLX6l#{Yx!3IX=H>w#R z0fz${4lZ!muzA7;SC!Jd%n}EO2@XuGUmr3s`~eC2suhi-Gbj$RK6_6}UIKs&f3B_}f}KBTfB zb%Fug>~Gy+jo!AVUv_Uh(AJx@V1X`FKDaVBDL-d|0lU*H#kP2nGii$RJ=Zq-e^{_U zAF9H?C?yr-y$J@o-whKo6mys3^Z^g24m@&mWtzS55ss zzhtHU?w^MdE_KhzPf7&3v>`!SJ4CX6D*m<6Q%q>=VwC3T=b*C0AFb*in%*`yxEK7~gDvnRBC`l~> zx>F)FT1@QFyoeXBP4|o~XL$lcJ0P{FEU_4yU|_HYVm=_&17ghs6E>)3q~_%0PgtYZd;^d;tf|3Or9Mwy53-pVNlGXKqf_hoS4h{g=9w3(h diff --git a/lib/ocaml/HelloWorld.cmt b/lib/ocaml/HelloWorld.cmt deleted file mode 100644 index f6fb2001d0dff8cfb9f836f6754df8f4cf82b691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3481 zcmbtX32YQq7@jF_g^G%ZG#JG|PYUeLS_GwtzUe``z3BnSHO%hLwnJxUHZ!xOt$5%; zOgu6W1r;OD0|E+UP{c$cDHx0g#tUOK9uP>p&|pCD*8k1Xt=J;bZC_?~-uM6i_x|_2 zfBr2Olgc$SXU>d-OG@s3c=KL{Vb;UA5{3*zAd{;lMbYMKx)LYEW``Xw=%5d9pS_P@ z`vuFc%ulPbiLr&V0zV#MnBVBb`a;9hWwkx?_;+maF5nMr_hpxG9a>W2v=x%dRY*ps zsiinwGGe-%GC4Du;tV~;WkQEwj>i>!D2vAtjIm3V-3%0Y7~jL#PX=6v-@H||v!|chv%7Eg15rYP-h4|>GO8(7 zczD@26ITnDA52W#7}OFSL_>_L)=#fm6I6K<;zNUUi|WydzyAJ85R|y32W`$ z@!7{E$G+LJa#q88rxT;zC#28~Vud$OSa4(Ht)nAzdJe2S^5~8?37OWU%SqXkyCh+` zAxPb(qyx`!ZHsbp_CK-UtI9h+pEmQc2xPlS(z`?ha0cY+?Z-d(V$c2)b@gxDw0*;O z0YdUBw4@bQj`u!u@2`!=Ke_(~{>vLyZSi)FVPVJmKe*geVQaq%FFeUG>_LVZZZXUS z$44;CEM|Zb*Vx2<5|h5eRFPkMiX1X`v+Nm&#@Uvz zDPQU=d)j$$68KMJ2*!xb{NYWTc0TWacK-c??TY-UrYYDl#CQ#P*IrVP5EVm$a|Y+9 zP*62h5_rt~Nsk0fFU>dgv@?rFV9diAfh!L&vCZens_DCOr!K-gU2AzkLea#t=0<_( zaBSBVM&)*Dh=!qAFvQIB=wl5%Z}zZz)GE9#dMvq{1zx2*dpi>Fz0A| zax>h8VNAkyO(9f@wBjv^*l3JXbQZGK#i zWgOQ#$R^MOIc(1h(Ybk|l9miw3c;58Tu77Q`J9V-2owTHWyo<MvHZ?9KWL1g_x)e+6wDt%|EuK~+s?I#dLaQK2_F701dfRtY z<)rKh|0^aa;AUz1t_#a)KvkLtH@CDL`6u6CaryFJGu{2v?#ST77$$X&8?Frqy|ucT`(W0VKH0KAui z$D(~`BYXie`RR0i#tGZSE1L@X22~dZqR^_mR94Qw`*L~L5j*l@1X5~ zYAKrYH^$df9bHR<9-^=*=p*zZz~&b?ZzRtVrl1-M`jmpEp)b%Y0BR0L)Gkqx5?;;k|EW0nj zMtEEYml_^7P}kQn=#2eBfGzX&(FXPw6&@d8M^pKYzyY>8z+MM#*E|(;dXlLVoQ7zk zl{v5?d)PR!uo61>r<=WS9Pj7@h<0nvKuf+-DdxCBx*P zb93p0gHZ#R#5%=xDX5A`sRRRIJtiB;{uZ)iAVy1@skC{$WVofG)N3zGX;T?mZp;{@ z-4qSe`Y%0dcJ8@WN0$&apePVDl4Mt$3p&JJd3nqv14D~-=;8%;8aYhY;HF)RSC!*HDx=g "Hello, World!" diff --git a/lib/ocaml/HelloWorld_test.ast b/lib/ocaml/HelloWorld_test.ast deleted file mode 100644 index 99cfada3b2b53eae443aef500c168909ebcee7e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1377 zcmbVM-Afcv6ra^o>ZXuTP%oy7Jwy-2Y}cL z4N7{6tC5H=4M9W^cBB4)f(Yt0vgoDW`nJxwH$Td^Waa!g=XZYR+;iq$P1Ev&^=4n6 z)o9s$?ZKm_;|3#LR@{tO17;#pZ92WKm5kV?(`I)k-H01cMqDI0k>#uwa#SECICgb< zPSapP(*k?Yj^Ted=hp@Iib>fQIeY(GJgV0S$cX9(^r$ZYqPh;5y6!^;fX?}(&V}#s z?T%}ACpv5TQ?Wi|t!Ks|0r|{mBC`J`%}e5@X3nC^vjaKAUF(V~l zA2Uv_)~I2|pnzIt46V|5iamIxF~>1&x7$jf(2;75X*i4qvIj|w^S@4Zi~@%RG?8tj z!+DSmS&)T9kB6Jjn|2pA!{8imgYm>@f} zGD^~1CXEP~lwg$N_~%0&?SMdtJl=jC$AIvU4KJ3QkR=(Fe9VkyDoFSVGYrV4o-!Z@Tj0K&LNQ$(3_q(4Xyf=3 z@LVBpu@l^gylI8hw6ydzFfwYHx@;c<1ET~31A_$+UjX8R3-mowb8_;-^NVs);!9GCOBO8H zz{vbrySSt%GcVn>urx8p;lPH23nng5&rK~ZPE1eTaDdZNKO;XkRX@KxHBa9qwK%&Z zzd*kzwK%ybv!F!3B)32xWKc1>$$CH~&ff6{SeTr>(;PNzp0L4FEx({7Ge6H^0f^_T z2C>w^VS)n_>(_@24Bz3bA3!I7wO}gx36)~ugsc7qGR{?{G%vFRVc2g6sHuNojK2;O zoFNwdbJ%czMZ?+K{{V}ovv-t(g99|I9s|S38yIFnK>GdyjKG>;AQgFjmFfoHumC6K zI4I}+26Xu z8og~zzwF+2pshD)!2(^Vd~juMQhv?^19qoZif!>CXVMhsd#-Kv{{XZes=~i0B^4As z6AW~}GhdNgBUAOHTDG9*!{dhtTYM6$Dkm6ZXWBaSl_Y6rbLZu)`?l@#f(1HIGrWpj zEAl27tXX})&)|i@fzZp7rcZe&Yqns49zsD;QGU?`g9!?rKQ?8rn)-cy$x8j*KMx~Z z>YkIIln8WbLxQw=pmT!NM&4b*tpQsY5Uy}ZECKqpYTezNMo(U?sIm6D_$`h9(t-tQ z5KAT)%vXr8^E~~STdeYE&BK}NPAynq98i>*n^}@smKvW`9G_ZIl3E0Gr$lJ9nAo9t z5ieYu?ipLo@?5Y$D&8;3A$LBVUE1=QNzzB?PIB);}a7JB| diff --git a/lib/ocaml/HelloWorld_test.cmj b/lib/ocaml/HelloWorld_test.cmj deleted file mode 100644 index eeb6401af17211a03cfe60f4370a54fc42e50422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmd<+<5K!4J;_ZsEwSv*$xybIsmt~;Ffcd+F&_{c0I~Lg2^+MFONuh{(p?Kn6LTgk zSm5jc1Pdk@Iiyyk7A0pE=js=w7AF^F7L+X5;HX)WTcBT(T3k}Bt_Kv>%PMwo000Ow BBs%~A diff --git a/lib/ocaml/HelloWorld_test.cmt b/lib/ocaml/HelloWorld_test.cmt deleted file mode 100644 index 4c6d464d79fb5a76b4f4072f51bbe85739902d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7186 zcmbtZ3z!tum9DBjg*+4@3egpm8D>C&Gt&-1Wq^2lngNDp9z0ciG~F{b(9qL8R(JD? z#6?#U4Z1Z%@s-4q2r)jeUBY2iqRaC$7Kaa6i1n@FdG&0kHUT%kf( zLeoFpr6>mq)MrpZHaV8*pjSox3f!MFTth`JmB<#s4hawS3!nH>SYcPt--MH=^TUyr zJdFuQ76>6cTkVF8BCy$Dyx*~pF_snlhb#W=p-QJ|ertW8?W4)tme_X1Ty)+Fp8fG# zx4lq*Q(g?XeRcaE7tgcpv2(KR$wWLlcV(Ah1^e8)|NHaTL?(~_i3kbjh^|h9cA}5K6+!zUWoTNTFiEXhsO$59SFR7?jyriz5DIqUFP21 zyNXg~##XJgf=d&V#ckR6*rfwfsV)0=?6d6)Jd7Ech7~C*_{hWg=HUCm{JdAz-+BA4 z;TPFv*I;x9)Z3Wl2+`oG0b*~+^c0BjS>^YHHwmou6y3-0K zKV0>|_YSpu_@{M~LVupL=0R`R6&1r>_!D7o4$Uphp|iFq3VmBq2A3(y>5Y9AWuj8* z?cI*;+`ZFsg!G4yZBgLwnmHlSfSD5#jUohJrH~L55W*piNI-#cij5Mr_)l!wv~`>R zxAo{h;Y_KBr_)Kdp%C5nPUq^%j#x5dU=Cp}jEbhxDI*#Z%3+p?>T4>pW=_^pUm+k} z;2nZY;e`10#C3S<)^c3OD92HM2;)bwGVN#RsPg~g~SF>pO z`D0iu8s-Te2J|z9(>$J?Bb7k_iMFLv2p+k%Y}yp`HD~HbV@1kWDI~Qm1Hjp$7;;>j zIbNt~5+OE1yrLQXmcpvI*KHMZ5a@(u(?B#I$MWqfKz$Rx3xqRc6hc}q>2=U{=nNT7 zT0jkvRI{jO*tz8`OX~sBAI<6+cV1-!&n+%v;OQ=~gq|UJoYv7@X1X(h0r3>2F%oeO zRPdB&l`WlVl`+$dtt{}>NWK{^pK?8z=Hu5aoaq(GM5d_gc*z%WJHD{|%By9!W2|1R zysnNreHzDQ8e-F6)JgW4fa)xmA%!nQ@<>H{qOAzrBsp8*9d@rXznbgj$C5cC!+{TN z8FK*}!^50Kt8Gksn6g>|HN_Ss+NLIqWIL_Fu(LF(5_AKY#uS)nEn$+|=+ZKSZlQK) za)WSMM(0vXQ|aY}v1jYIkDlihS{RtL)NZ!0SdBrx4%6u#mID;LZ4k~?b@Ni~Mn@uL zv`0;&EoXA1iFT&jb4eqNF&U{?v<60U)=ML8@R6p;&!708!Y17{-Bl1kTcGpgbQ=On z_41gRio$i12}HP9GTIf(a;T$iv<^19vO1K>7-lxw5lbXcfL>rm47X_rJx?~6uNd2qYLBKnq8$mp zYc$s7LpZi+7`;S41>fakn$yrHolCWQXtgfa%gi;BUZpMInlpOpQ5sKRM;gyU-(wm4?`K|=_O=E5Dm z#P3r$i#TGr3E|UQz}RJM=YC=5dpU3V;HbRGCe6v~Y8~elx;l{)3&d<^LrFTNs|}nM z>FQLO7j1BQXp;@Dj-MgDEw!$#m z9=cdKy*3esk}Y<9IC2fu3DVsD6oa;nQcFk~Ps;y);7PhsS4$s3Ls$r;U^c6Pzm&xw zV{0!~H(mWfII;w<+ryEisO%v)sp}T1cCUxHURO&WthSX@mZx(B4VTa~$fiNmpZeR5 zwX=u9w&kU;EMrqR(uvpRa3mvTM2a%*qQMUJL0|yl+0+ME)QT0&SM|fPcv01#ha)+_ z>Vtm$4&hF|pJPRqwcDAM2Fd^X)02cCN?-IJ&Fg6@!>ix8c%dL4^ix2@tHRM+OPceUnqZ7vg+ z33>{_m0t6ZTXe1Tfu0Nqyd_re6SgIDJ6)?qi;ERq3vlGrhUnU0&yD6oJ3Z7bkUxfW z?GmgN7b0K95*RRao>o?QTJjDf_&c*_+JJHSZ$&(S^coU;*_c7M> zAZ!q-vPMqvBPWTnPI|;C$D0|-_kCYhZYj(R&B zwHn_KxE%>7Kq`4qi_L@ViLU0@2)eq}W7qUR>4VxXj~ycWha*>G)5tEMt1s#5I$eDn z92=ww-qKYh?XXW^P&g8yQ`yQIord}!*^ce{Z{WNNUP7jM9vm1xRaMsEL8EhB((;^` z)2G)k8{HVIO_W~8p2rpWVnv-Sc(z!893td3xAb@FUwggi8)kJ<7u*NEL9<1YDQ z48sPhPy>5a?E^$!Ib#siLI`RfS9ZnB7?$7O?Y4#8JtJh@W;V#2OK#*`9FaM2A)7NW z(eKSXC}P3w5S0V1pmFd=wKU2NRS4k`+d489Gx$x@ROLZcc?jfMm&6KI!!8bo(i#zj zwfC@4>e{8!m{9pMpEw}xj;c%ilKp;(yR3rwQ}lGU?CB?LVU+Ci-XFts7s!&oQX_1j zYYTbp(bYyhuu@m2@xn1~wvo-5smzGQd=fiiIUmL9>Lk|tVOQCwK|bP=uS&C)tAW3& z+84xU5poR)3_!@23Znc=y4p4Ov&hkS>ry-l3sp)X!oJ@korq=p)&+hY@-Pe*eOf5dcvmV+?5Yp{r?Pdk4wHUNUo7+{5ANU8t6lJ!etO4#>zN6knVCJ zx;IuyZ7y)Vx=dHU%ZU43m^~m5xa2`O01Kr8edz%gY#Hhgx%Ho8NFJljHclYGe~W^svJ@kB!)5`Qa3!2XG@+ZW#ClW>Z1MytbJWp-iAI&J*@ag2(`2w zTI<^Dc)K&0`sl|z0vm1qlN|k~f7O5-m2?Z}?H=VP6RF&asudS~vnHNM)xgpPKh*4E#=2F>2r%{E|i^cuw{vR?t0HF30C*9oF(A^i{P~BB0SQXDeleVR} zrl?BAI*nQZh0V4^rn9h>s6CP=oy&IRvUNtrJ=du#++EbMLsl=zOfHlh;jHqWq&kLE z{=efUq+j`0^_II7&)`7ErU7=plix5E$Ii2BO~E+A3O>GO!M*=J=DaH=n%BOuw{^9b zBhhgEm`CV*+6pH-{yDkK$&YiYuG6IBU5V&{zQ;SFKiQLhJuvWi7X|)(%8Bk6{QHy> w-%^~!RmcB%UE*tTqWhMUxwG*#J@L(tFXcpcM>^peru51QBVKwv6|%(t0;=kpxBvhE diff --git a/lib/ocaml/HelloWorld_test.res b/lib/ocaml/HelloWorld_test.res deleted file mode 100644 index f9f1a71..0000000 --- a/lib/ocaml/HelloWorld_test.res +++ /dev/null @@ -1,8 +0,0 @@ -open Test - -let stringEqual = (~message=?, a: string, b: string) => - assertion(~message?, ~operator="stringEqual", (a, b) => a == b, a, b) - -test("Hello World", () => { - stringEqual(~message="Returns hello world", HelloWorld.hello(), "Hello, World!") -}) diff --git a/lib/rescript.lock b/lib/rescript.lock deleted file mode 100644 index ee6a30e..0000000 --- a/lib/rescript.lock +++ /dev/null @@ -1 +0,0 @@ -59375 \ No newline at end of file From 093912194cca3cddc4600dbf0e1d8deeb4991dfb Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 16:13:31 +0100 Subject: [PATCH 05/16] pass verify_exercise script --- bin/verify-exercises | 12 ++++-------- config.json | 3 +++ exercises/practice/hello-world/rescript.json | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bin/verify-exercises b/bin/verify-exercises index 269a608..b140f6a 100755 --- a/bin/verify-exercises +++ b/bin/verify-exercises @@ -42,13 +42,9 @@ unskip_tests() { } run_tests() { - noop # TODO: replace this with the command to run the tests for the exercise. - # Note: this function runs from within an exercise directory. - # Note: the exercise directory is a temporary directory, so feel - # free to modify its files as needed. - # Note: return a zero exit code if all tests pass, otherwise non-zero. - # Example: `npm test` - # Example: `python3 -m pytest two_fer_test.py` + npm i + ./node_modules/.bin/rescript build + ./node_modules/.bin/retest tests/*.res.js } verify_exercise() { @@ -68,7 +64,7 @@ verify_exercise() { cd "${tmp_dir}" copy_example_or_examplar_to_solution - unskip_tests + #unskip_tests run_tests ) } diff --git a/config.json b/config.json index fc82999..2e8ee75 100644 --- a/config.json +++ b/config.json @@ -33,6 +33,9 @@ ], "editor": [ "src/%{pascal_slug}.rei" + ], + "config": [ + "rescript.json" ] }, "exercises": { diff --git a/exercises/practice/hello-world/rescript.json b/exercises/practice/hello-world/rescript.json index 957e8c1..3db8c50 100644 --- a/exercises/practice/hello-world/rescript.json +++ b/exercises/practice/hello-world/rescript.json @@ -1,8 +1,8 @@ { "name": "@exercism/rescript", "sources": [ - { "dir": "tmp/src", "subdirs": true, "type": "dev" }, - { "dir": "tmp/tests", "subdirs": true, "type": "dev" } + { "dir": "src", "subdirs": true, "type": "dev" }, + { "dir": "tests", "subdirs": true, "type": "dev" } ], "package-specs": [ { From d592579c5ee0aad07234a7932e07d9e580e3e9f9 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 16:15:13 +0100 Subject: [PATCH 06/16] correct formatting --- config.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/config.json b/config.json index 2e8ee75..fc82999 100644 --- a/config.json +++ b/config.json @@ -33,9 +33,6 @@ ], "editor": [ "src/%{pascal_slug}.rei" - ], - "config": [ - "rescript.json" ] }, "exercises": { From 1953c966e0dd2f677c4793b22c1edfdf650a7da9 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 16:51:14 +0100 Subject: [PATCH 07/16] setup CI stage --- .github/workflows/test.yml | 21 +++++++-------------- bin/verify-exercises | 1 - 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1052627..952ab13 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,27 +13,20 @@ on: jobs: verify_exercises: - # TODO: replace with another image if required to run the tests (optional) runs-on: ubuntu-24.04 steps: - name: Checkout repository uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - # TODO: setup any tooling that is required to run the tests (optional) - # E.g. install a specific version of a programming language - # E.g. install packages via apt/apk/yum/etc. - # Find GitHub Actions to setup tooling here: - # - https://github.com/actions/?q=setup&type=&language= - # - https://github.com/actions/starter-workflows/tree/main/ci - # - https://github.com/marketplace?type=actions&query=setup - # - name: Use - # uses: + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: "npm" - # TODO: install any dependencies (optional) - # E.g. npm install, bundle install, etc. - # - name: Install project dependencies - # run: + - name: Install dependencies + run: npm ci - name: Verify all exercises run: bin/verify-exercises diff --git a/bin/verify-exercises b/bin/verify-exercises index b140f6a..ff325db 100755 --- a/bin/verify-exercises +++ b/bin/verify-exercises @@ -42,7 +42,6 @@ unskip_tests() { } run_tests() { - npm i ./node_modules/.bin/rescript build ./node_modules/.bin/retest tests/*.res.js } From 3a5d6cf583733227b6cff2a45012144788e4a878 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 16:53:19 +0100 Subject: [PATCH 08/16] change testing command --- bin/verify-exercises | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/verify-exercises b/bin/verify-exercises index ff325db..74cb6da 100755 --- a/bin/verify-exercises +++ b/bin/verify-exercises @@ -42,8 +42,7 @@ unskip_tests() { } run_tests() { - ./node_modules/.bin/rescript build - ./node_modules/.bin/retest tests/*.res.js + npm run ci } verify_exercise() { From 421ec24a48ab87a91a725103e94da18f050c0d71 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 17:17:25 +0100 Subject: [PATCH 09/16] update node_modules symlink --- bin/verify-exercises | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/verify-exercises b/bin/verify-exercises index 74cb6da..196f423 100755 --- a/bin/verify-exercises +++ b/bin/verify-exercises @@ -42,14 +42,17 @@ unskip_tests() { } run_tests() { - npm run ci + node_modules/.bin/rescript + node_modules/.bin/retest tests/*.js } verify_exercise() { local dir local slug local tmp_dir + local root_dir + root_dir=$(realpath .) # capture project root before cd-ing away dir=$(realpath "${1}") slug=$(basename "${dir}") tmp_dir=$(mktemp -d -t "exercism-verify-${slug}-XXXXX") @@ -57,10 +60,12 @@ verify_exercise() { echo "Verifying ${slug} exercise..." ( - trap 'rm -rf "$tmp_dir"' EXIT # remove tempdir when subshell ends + trap 'rm -rf "$tmp_dir"' EXIT cp -r "${dir}/." "${tmp_dir}" cd "${tmp_dir}" + ln -s "${root_dir}/node_modules" "${tmp_dir}/node_modules" + copy_example_or_examplar_to_solution #unskip_tests run_tests From bafa6a232902fa25fae47834a8bf1e884421596b Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:16:48 +0100 Subject: [PATCH 10/16] set track to inactive --- config.json | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/config.json b/config.json index fc82999..922dc82 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,7 @@ { "language": "ReScript", "slug": "rescript", - "active": true, + "active": false, "status": { "concept_exercises": false, "test_runner": false, @@ -19,21 +19,11 @@ "average_run_time": 7 }, "files": { - "solution": [ - "src/%{pascal_slug}.re" - ], - "test": [ - "__tests__/%{pascal_slug}_test.re" - ], - "example": [ - "src/Example.re" - ], - "exemplar": [ - ".meta/src/Exemplar.re" - ], - "editor": [ - "src/%{pascal_slug}.rei" - ] + "solution": ["src/%{pascal_slug}.re"], + "test": ["__tests__/%{pascal_slug}_test.re"], + "example": ["src/Example.re"], + "exemplar": [".meta/src/Exemplar.re"], + "editor": ["src/%{pascal_slug}.rei"] }, "exercises": { "practice": [ @@ -44,10 +34,7 @@ "practices": [], "prerequisites": [], "difficulty": 1, - "topics": [ - "setting_up_reasonml_dev_environment", - "strings" - ] + "topics": ["setting_up_reasonml_dev_environment", "strings"] } ] }, From 90bb5fa21677d52a326f425296ab276590633ed1 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:34:27 +0100 Subject: [PATCH 11/16] update config with file slugs and interface file --- config.json | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/config.json b/config.json index 922dc82..575936e 100644 --- a/config.json +++ b/config.json @@ -19,11 +19,21 @@ "average_run_time": 7 }, "files": { - "solution": ["src/%{pascal_slug}.re"], - "test": ["__tests__/%{pascal_slug}_test.re"], - "example": ["src/Example.re"], - "exemplar": [".meta/src/Exemplar.re"], - "editor": ["src/%{pascal_slug}.rei"] + "solution": [ + "src/%{pascal_slug}.res" + ], + "test": [ + "tests/%{pascal_slug}_test.res" + ], + "example": [ + ".meta/%{pascal_slug}.res" + ], + "exemplar": [ + ".meta/src/%{pascal_slug}.res" + ], + "editor": [ + "src/%{pascal_slug}.resi" + ] }, "exercises": { "practice": [ @@ -33,8 +43,7 @@ "uuid": "63d72b81-c7a4-4a94-8224-69f4c68cc374", "practices": [], "prerequisites": [], - "difficulty": 1, - "topics": ["setting_up_reasonml_dev_environment", "strings"] + "difficulty": 1 } ] }, @@ -46,7 +55,7 @@ }, { "title": "Inferred types", - "content": "No need to specify types, types are inferred by ReScript compiler and are guaranteed to be correct.", + "content": "Types are inferred by the ReScript compiler and are guaranteed to be correct.", "icon": "immutable" }, { @@ -55,8 +64,8 @@ "icon": "functional" }, { - "title": "Easy javascript interop", - "content": "Javascript interop is easy allowing advatange of existing javascript packages and ecosystem.", + "title": "Easy JavaScript interoperability", + "content": "JavaScript interoperability is easy, allowing existing JavaScript packages to be used.", "icon": "interop" }, { From e03f731f2c6e64014e05bcd92ac80db170471161 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:36:09 +0100 Subject: [PATCH 12/16] update functions placeholder text and create interface file --- exercises/practice/hello-world/src/HelloWorld.res | 2 +- exercises/practice/hello-world/src/HelloWorld.resi | 1 + exercises/practice/hello-world/tests/HelloWorld_test.res | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 exercises/practice/hello-world/src/HelloWorld.resi diff --git a/exercises/practice/hello-world/src/HelloWorld.res b/exercises/practice/hello-world/src/HelloWorld.res index 1503a69..85b8e89 100644 --- a/exercises/practice/hello-world/src/HelloWorld.res +++ b/exercises/practice/hello-world/src/HelloWorld.res @@ -1 +1 @@ -let hello = () => "Change this to make the tests pass" +let hello = () => "Goodbye, Mars!" diff --git a/exercises/practice/hello-world/src/HelloWorld.resi b/exercises/practice/hello-world/src/HelloWorld.resi new file mode 100644 index 0000000..1d388cc --- /dev/null +++ b/exercises/practice/hello-world/src/HelloWorld.resi @@ -0,0 +1 @@ +let hello: unit => string diff --git a/exercises/practice/hello-world/tests/HelloWorld_test.res b/exercises/practice/hello-world/tests/HelloWorld_test.res index f9f1a71..d95c0a4 100644 --- a/exercises/practice/hello-world/tests/HelloWorld_test.res +++ b/exercises/practice/hello-world/tests/HelloWorld_test.res @@ -3,6 +3,6 @@ open Test let stringEqual = (~message=?, a: string, b: string) => assertion(~message?, ~operator="stringEqual", (a, b) => a == b, a, b) -test("Hello World", () => { - stringEqual(~message="Returns hello world", HelloWorld.hello(), "Hello, World!") +test("Say Hi!", () => { + stringEqual(~message="Say Hi!", HelloWorld.hello(), "Hello, World!") }) From b37106e0e8b84328ccb1476ab7b3d887ac1d75f4 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:37:27 +0100 Subject: [PATCH 13/16] added therealowenrees as co-author --- exercises/practice/hello-world/.meta/config.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/practice/hello-world/.meta/config.json b/exercises/practice/hello-world/.meta/config.json index 2a56135..df96f29 100644 --- a/exercises/practice/hello-world/.meta/config.json +++ b/exercises/practice/hello-world/.meta/config.json @@ -1,6 +1,7 @@ { "authors": [ - "tejasbubane" + "tejasbubane", + "therealowenrees" ], "contributors": [ "naartjie", From 2229a385809ef50ba440fdd2366a4af3fffe39ed Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:43:36 +0100 Subject: [PATCH 14/16] set setup-nide action to a v4 commit --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 952ab13..69dcc18 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: node-version: 24.x cache: "npm" From e0e6464fb77bbc52bd4ef167b796bcf59a682648 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:46:02 +0100 Subject: [PATCH 15/16] interop used instead of interoperability in one title as the linter complained that it exceeded the number of characters allowed --- config.json | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/config.json b/config.json index 575936e..0d1ef57 100644 --- a/config.json +++ b/config.json @@ -19,21 +19,11 @@ "average_run_time": 7 }, "files": { - "solution": [ - "src/%{pascal_slug}.res" - ], - "test": [ - "tests/%{pascal_slug}_test.res" - ], - "example": [ - ".meta/%{pascal_slug}.res" - ], - "exemplar": [ - ".meta/src/%{pascal_slug}.res" - ], - "editor": [ - "src/%{pascal_slug}.resi" - ] + "solution": ["src/%{pascal_slug}.res"], + "test": ["tests/%{pascal_slug}_test.res"], + "example": [".meta/%{pascal_slug}.res"], + "exemplar": [".meta/src/%{pascal_slug}.res"], + "editor": ["src/%{pascal_slug}.resi"] }, "exercises": { "practice": [ @@ -64,7 +54,7 @@ "icon": "functional" }, { - "title": "Easy JavaScript interoperability", + "title": "JavaScript interop", "content": "JavaScript interoperability is easy, allowing existing JavaScript packages to be used.", "icon": "interop" }, From 2bea052881144ed61b866d62c11a1b12c5c24a82 Mon Sep 17 00:00:00 2001 From: Owen Rees Date: Sat, 7 Mar 2026 18:46:50 +0100 Subject: [PATCH 16/16] reformat config --- config.json | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/config.json b/config.json index 0d1ef57..ef3b17e 100644 --- a/config.json +++ b/config.json @@ -19,11 +19,21 @@ "average_run_time": 7 }, "files": { - "solution": ["src/%{pascal_slug}.res"], - "test": ["tests/%{pascal_slug}_test.res"], - "example": [".meta/%{pascal_slug}.res"], - "exemplar": [".meta/src/%{pascal_slug}.res"], - "editor": ["src/%{pascal_slug}.resi"] + "solution": [ + "src/%{pascal_slug}.res" + ], + "test": [ + "tests/%{pascal_slug}_test.res" + ], + "example": [ + ".meta/%{pascal_slug}.res" + ], + "exemplar": [ + ".meta/src/%{pascal_slug}.res" + ], + "editor": [ + "src/%{pascal_slug}.resi" + ] }, "exercises": { "practice": [